From ac37ca74621bf8b60265efc04de080315b317a13 Mon Sep 17 00:00:00 2001 From: Giacomo Tazzari Date: Tue, 12 Aug 2014 09:55:33 +0200 Subject: [PATCH] Reverting fixes on Serpent because they should be merged on the Serpent repo (reverted from commit 9db294a5b7ca87e866aa9bf811078ff57ceeb48e) --- libserpent/bignum.cpp | 8 ++++---- libserpent/bignum.h | 4 ++-- libserpent/compiler.cpp | 26 +++++++++++++------------- libserpent/rewriter.cpp | 8 ++++---- libserpent/util.cpp | 12 ++++++------ sc/cmdline.cpp | 2 +- 6 files changed, 30 insertions(+), 30 deletions(-) diff --git a/libserpent/bignum.cpp b/libserpent/bignum.cpp index 877808ead..29315b871 100644 --- a/libserpent/bignum.cpp +++ b/libserpent/bignum.cpp @@ -5,9 +5,9 @@ #include "bignum.h" //Integer to string conversion -std::string unsignedToDecimal(unsigned branch) { +std::string intToDecimal(int branch) { if (branch < 10) return nums.substr(branch, 1); - else return unsignedToDecimal(branch / 10) + nums.substr(branch % 10,1); + else return intToDecimal(branch / 10) + nums.substr(branch % 10,1); } //Add two strings representing decimal values @@ -91,8 +91,8 @@ std::string decimalMod(std::string a, std::string b) { } //String to int conversion -unsigned decimalToUnsigned(std::string a) { +int decimalToInt(std::string a) { if (a.size() == 0) return 0; else return (a[a.size() - 1] - '0') - + decimalToUnsigned(a.substr(0,a.size()-1)) * 10; + + decimalToInt(a.substr(0,a.size()-1)) * 10; } diff --git a/libserpent/bignum.h b/libserpent/bignum.h index 6656fdaec..a12929752 100644 --- a/libserpent/bignum.h +++ b/libserpent/bignum.h @@ -11,7 +11,7 @@ const std::string tt255 = "57896044618658097711785492504343953926634992332820282019728792003956564819968" ; -std::string unsignedToDecimal(unsigned branch); +std::string intToDecimal(int branch); std::string decimalAdd(std::string a, std::string b); @@ -25,6 +25,6 @@ std::string decimalMod(std::string a, std::string b); bool decimalGt(std::string a, std::string b, bool eqAllowed=false); -unsigned decimalToUnsigned(std::string a); +int decimalToInt(std::string a); #endif diff --git a/libserpent/compiler.cpp b/libserpent/compiler.cpp index 69292091c..959d2993b 100644 --- a/libserpent/compiler.cpp +++ b/libserpent/compiler.cpp @@ -55,7 +55,7 @@ programData opcodeify(Node node, programAux aux=Aux()) { else if (node.val == "ref" || node.val == "get" || node.val == "set") { std::string varname = node.args[0].val; if (!aux.vars.count(varname)) { - aux.vars[varname] = unsignedToDecimal(aux.vars.size() * 32); + aux.vars[varname] = intToDecimal(aux.vars.size() * 32); } if (varname == "msg.data") aux.calldataUsed = true; // Set variable @@ -165,7 +165,7 @@ programData opcodeify(Node node, programAux aux=Aux()) { nodes.push_back(token("MSIZE", m)); nodes.push_back(token("0", m)); nodes.push_back(token("MSIZE", m)); - nodes.push_back(token(unsignedToDecimal(subs.size() * 32 - 1), m)); + nodes.push_back(token(intToDecimal(subs.size() * 32 - 1), m)); nodes.push_back(token("ADD", m)); nodes.push_back(token("MSTORE8", m)); for (unsigned i = 0; i < subs.size(); i++) { @@ -173,7 +173,7 @@ programData opcodeify(Node node, programAux aux=Aux()) { nodes.push_back(subs[i]); nodes.push_back(token("SWAP", m)); if (i > 0) { - nodes.push_back(token(unsignedToDecimal(i * 32), m)); + nodes.push_back(token(intToDecimal(i * 32), m)); nodes.push_back(token("ADD", m)); } nodes.push_back(token("MSTORE", m)); @@ -201,7 +201,7 @@ Node finalize(programData c) { if (c.aux.allocUsed && c.aux.vars.size() > 0) { Node nodelist[] = { token("0", m), - token(unsignedToDecimal(c.aux.vars.size() * 32 - 1)), + token(intToDecimal(c.aux.vars.size() * 32 - 1)), token("MSTORE8", m) }; bottom.push_back(multiToken(nodelist, 3, m)); @@ -235,7 +235,7 @@ programAux buildDict(Node program, programAux aux, int labelLength) { aux.step += 1 + toByteArr(program.val, m).size(); } else if (program.val[0] == '~') { - aux.vars[program.val.substr(1)] = unsignedToDecimal(aux.step); + aux.vars[program.val.substr(1)] = intToDecimal(aux.step); } else if (program.val[0] == '$') { aux.step += labelLength + 1; @@ -271,7 +271,7 @@ Node substDict(Node program, programAux aux, int labelLength) { std::vector inner; if (program.type == TOKEN) { if (program.val[0] == '$') { - std::string tokStr = "PUSH"+unsignedToDecimal(labelLength); + std::string tokStr = "PUSH"+intToDecimal(labelLength); out.push_back(token(tokStr, m)); int dotLoc = program.val.find('.'); if (dotLoc == -1) { @@ -289,7 +289,7 @@ Node substDict(Node program, programAux aux, int labelLength) { else if (program.val[0] == '~') { } else if (isNumberLike(program)) { inner = toByteArr(program.val, m); - out.push_back(token("PUSH"+unsignedToDecimal(inner.size()))); + out.push_back(token("PUSH"+intToDecimal(inner.size()))); out.push_back(astnode("_", inner, m)); } else return program; @@ -333,10 +333,10 @@ std::string serialize(std::vector codons) { for (unsigned i = 0; i < codons.size(); i++) { int v; if (isNumberLike(codons[i])) { - v = decimalToUnsigned(codons[i].val); + v = decimalToInt(codons[i].val); } else if (codons[i].val.substr(0,4) == "PUSH") { - v = 95 + decimalToUnsigned(codons[i].val.substr(4)); + v = 95 + decimalToInt(codons[i].val.substr(4)); } else { v = opcode(codons[i].val); @@ -355,9 +355,9 @@ std::vector deserialize(std::string ser) { std::string oper = op((int)v); if (oper != "" && backCount <= 0) o.push_back(token(oper)); else if (v >= 96 && v < 128 && backCount <= 0) { - o.push_back(token("PUSH"+unsignedToDecimal(v - 95))); + o.push_back(token("PUSH"+intToDecimal(v - 95))); } - else o.push_back(token(unsignedToDecimal(v))); + else o.push_back(token(intToDecimal(v))); if (v >= 96 && v < 128 && backCount <= 0) { backCount = v - 95; } @@ -392,7 +392,7 @@ std::string encodeDatalist(std::vector vals) { for (unsigned i = 0; i < vals.size(); i++) { std::vector n = toByteArr(strToNumeric(vals[i]), Metadata(), 32); for (unsigned j = 0; j < n.size(); j++) { - int v = decimalToUnsigned(n[j].val); + int v = decimalToInt(n[j].val); o += (char)v; } } @@ -406,7 +406,7 @@ std::vector decodeDatalist(std::string ser) { std::string o = "0"; for (unsigned j = i; j < i + 32; j++) { int vj = (int)(unsigned char)ser[j]; - o = decimalAdd(decimalMul(o, "256"), unsignedToDecimal(vj)); + o = decimalAdd(decimalMul(o, "256"), intToDecimal(vj)); } out.push_back(o); } diff --git a/libserpent/rewriter.cpp b/libserpent/rewriter.cpp index 3d59cb3bd..8b50c9a28 100644 --- a/libserpent/rewriter.cpp +++ b/libserpent/rewriter.cpp @@ -344,7 +344,7 @@ Node subst(Node pattern, Node array_lit_transform(Node node) { std::vector o1; - o1.push_back(token(unsignedToDecimal(node.args.size() * 32), node.metadata)); + o1.push_back(token(intToDecimal(node.args.size() * 32), node.metadata)); std::vector o2; std::string symb = "_temp"+mkUniqueToken()+"_0"; o2.push_back(token(symb, node.metadata)); @@ -357,7 +357,7 @@ Node array_lit_transform(Node node) { o5.push_back(token(symb, node.metadata)); std::vector o6; o6.push_back(astnode("get", o5, node.metadata)); - o6.push_back(token(unsignedToDecimal(i * 32), node.metadata)); + o6.push_back(token(intToDecimal(i * 32), node.metadata)); std::vector o7; o7.push_back(astnode("add", o6)); o7.push_back(node.args[i]); @@ -474,10 +474,10 @@ Node validate(Node inp) { int i = 0; while(valid[i][0] != "---END---") { if (inp.val == valid[i][0]) { - if (decimalGt(valid[i][1], unsignedToDecimal(inp.args.size()))) { + if (decimalGt(valid[i][1], intToDecimal(inp.args.size()))) { err("Too few arguments for "+inp.val, inp.metadata); } - if (decimalGt(unsignedToDecimal(inp.args.size()), valid[i][2])) { + if (decimalGt(intToDecimal(inp.args.size()), valid[i][2])) { err("Too many arguments for "+inp.val, inp.metadata); } } diff --git a/libserpent/util.cpp b/libserpent/util.cpp index efef91425..6ca39de9d 100644 --- a/libserpent/util.cpp +++ b/libserpent/util.cpp @@ -60,8 +60,8 @@ std::string printAST(Node ast, bool printMetadata) { std::string o = "("; if (printMetadata) { o += ast.metadata.file + " "; - o += unsignedToDecimal(ast.metadata.ln) + " "; - o += unsignedToDecimal(ast.metadata.ch) + ": "; + o += intToDecimal(ast.metadata.ln) + " "; + o += intToDecimal(ast.metadata.ch) + ": "; } o += ast.val; std::vector subs; @@ -132,14 +132,14 @@ std::string strToNumeric(std::string inp) { else if ((inp[0] == '"' && inp[inp.length()-1] == '"') || (inp[0] == '\'' && inp[inp.length()-1] == '\'')) { for (unsigned i = 1; i < inp.length() - 1; i++) { - o = decimalAdd(decimalMul(o,"256"), unsignedToDecimal((unsigned char)inp[i])); + o = decimalAdd(decimalMul(o,"256"), intToDecimal(inp[i])); } } else if (inp.substr(0,2) == "0x") { for (unsigned i = 2; i < inp.length(); i++) { int dig = std::string("0123456789abcdef").find(inp[i]); if (dig < 0) return ""; - o = decimalAdd(decimalMul(o,"16"), unsignedToDecimal(dig)); + o = decimalAdd(decimalMul(o,"16"), intToDecimal(dig)); } } else { @@ -188,7 +188,7 @@ int counter = 0; //Makes a unique token std::string mkUniqueToken() { counter++; - return unsignedToDecimal(counter); + return intToDecimal(counter); } //Does a file exist? http://stackoverflow.com/questions/12774207 @@ -217,7 +217,7 @@ std::string get_file_contents(std::string filename) //Report error void err(std::string errtext, Metadata met) { std::string err = "Error (file \"" + met.file + "\", line " + - unsignedToDecimal(met.ln) + ", char " + unsignedToDecimal(met.ch) + + intToDecimal(met.ln) + ", char " + intToDecimal(met.ch) + "): " + errtext; std::cerr << err << "\n"; throw(err); diff --git a/sc/cmdline.cpp b/sc/cmdline.cpp index 4b2eee160..232cbfeec 100644 --- a/sc/cmdline.cpp +++ b/sc/cmdline.cpp @@ -96,7 +96,7 @@ int main(int argv, char** argc) { else if (command == "biject") { if (argv == 3) std::cerr << "Not enough arguments for biject\n"; - int pos = decimalToUnsigned(secondInput); + int pos = decimalToInt(secondInput); std::vector n = prettyCompile(input); if (pos >= (int)n.size()) std::cerr << "Code position too high\n";