arnaucube
arnaucube/circomPublic Self-hosted repository
Fix array assignement and not allow assign with equal
Jordi Baylina jordi@baylina.cat
Wed, 04 Dec 2019 17:40:48 +0100
commit

0be08d67b0264ff59eef4c84baa95cda84670caf

parent

6cdb006909fa2dfae401366613542bbf39c940e7

1 files changed, 10 insertions(+), 8 deletions(-)

jump to
M src/exec.js → src/exec.js

@@ -709,12 +709,14 @@ if ((typeof(num) != "object")||(num == null)) return error(ctx, ast, "Variable not defined");

if (num.type == "COMPONENT") return execInstantiateComponet(ctx, v, ast.values[1]); if (ctx.error) return; -// if (num.type == "SIGNAL") return error(ctx, ast, "Cannot assign to a signal with `=` use <-- or <== ops"); + if ((num.type == "SIGNAL")&&(ast.op == "=")) return error(ctx, ast, "Cannot assign to a signal with `=` use <-- or <== ops"); + if ((["NUMBER", "COMPONENT"].indexOf(num.type) >= 0 )&&(ast.op != "=")) return error(ctx, ast, `Cannot assign to a var with ${ast.op}. use = op`); const res = exec(ctx, ast.values[1]); if (ctx.error) return; - setScope(ctx, v.name, v.selectors, res); + Object.assign(num, res); +// setScope(ctx, v.name, v.selectors, res); return v; }

@@ -986,13 +988,13 @@

function execVarAddAssignement(ctx, ast) { const res = execAdd(ctx,{ values: [ast.values[0], ast.values[1]] } ); if (ctx.error) return; - return execVarAssignement(ctx, { values: [ast.values[0], res] }); + return execVarAssignement(ctx, { op:"=", values: [ast.values[0], res] }); } function execVarMulAssignement(ctx, ast) { const res = execMul(ctx,{ values: [ast.values[0], ast.values[1]] } ); if (ctx.error) return; - return execVarAssignement(ctx, { values: [ast.values[0], res] }); + return execVarAssignement(ctx, { op:"=", values: [ast.values[0], res] }); } function execPlusPlusRight(ctx, ast) {

@@ -1000,7 +1002,7 @@ const resBefore = exec(ctx, ast.values[0]);

if (ctx.error) return; const resAfter = execAdd(ctx,{ values: [ast.values[0], {type: "NUMBER", value: bigInt(1)}] } ); if (ctx.error) return; - execVarAssignement(ctx, { values: [ast.values[0], resAfter] }); + execVarAssignement(ctx, { op:"=", values: [ast.values[0], resAfter] }); return resBefore; }

@@ -1008,7 +1010,7 @@ function execPlusPlusLeft(ctx, ast) {

if (ctx.error) return; const resAfter = execAdd(ctx,{ values: [ast.values[0], {type: "NUMBER", value: bigInt(1)}] } ); if (ctx.error) return; - execVarAssignement(ctx, { values: [ast.values[0], resAfter] }); + execVarAssignement(ctx, { op:"=", values: [ast.values[0], resAfter] }); return resAfter; }

@@ -1017,7 +1019,7 @@ const resBefore = exec(ctx, ast.values[0]);

if (ctx.error) return; const resAfter = execSub(ctx,{ values: [ast.values[0], {type: "NUMBER", value: bigInt(1)}] } ); if (ctx.error) return; - execVarAssignement(ctx, { values: [ast.values[0], resAfter] }); + execVarAssignement(ctx, { op:"=", values: [ast.values[0], resAfter] }); return resBefore; }

@@ -1025,7 +1027,7 @@ function execMinusMinusLeft(ctx, ast) {

if (ctx.error) return; const resAfter = execSub(ctx,{ values: [ast.values[0], {type: "NUMBER", value: bigInt(1)}] } ); if (ctx.error) return; - execVarAssignement(ctx, { values: [ast.values[0], resAfter] }); + execVarAssignement(ctx, { op:"=", values: [ast.values[0], resAfter] }); return resAfter; }