Fix undefined if

This commit is contained in:
Jordi Baylina
2018-10-29 07:09:28 +01:00
parent 9d0b27a7e8
commit bfdf17fd89
3 changed files with 52 additions and 18 deletions

View File

@@ -547,6 +547,7 @@ function execFor(ctx, ast) {
let v = exec(ctx, ast.condition); let v = exec(ctx, ast.condition);
if (ctx.error) return; if (ctx.error) return;
if (typeof v.value != "undefined") {
while ((v.value.neq(0))&&(!ctx.returnValue)) { while ((v.value.neq(0))&&(!ctx.returnValue)) {
exec(ctx, ast.body); exec(ctx, ast.body);
if (ctx.error) return; if (ctx.error) return;
@@ -557,12 +558,14 @@ function execFor(ctx, ast) {
v = exec(ctx, ast.condition); v = exec(ctx, ast.condition);
if (ctx.error) return; if (ctx.error) return;
} }
}
} }
function execWhile(ctx, ast) { function execWhile(ctx, ast) {
let v = exec(ctx, ast.condition); let v = exec(ctx, ast.condition);
if (ctx.error) return; if (ctx.error) return;
if (typeof v.value != "undefined") {
while ((v.value.neq(0))&&(!ctx.returnValue)) { while ((v.value.neq(0))&&(!ctx.returnValue)) {
exec(ctx, ast.body); exec(ctx, ast.body);
if (ctx.error) return; if (ctx.error) return;
@@ -570,12 +573,14 @@ function execWhile(ctx, ast) {
v = exec(ctx, ast.condition); v = exec(ctx, ast.condition);
if (ctx.error) return; if (ctx.error) return;
} }
}
} }
function execIf(ctx, ast) { function execIf(ctx, ast) {
let v = exec(ctx, ast.condition); let v = exec(ctx, ast.condition);
if (ctx.error) return; if (ctx.error) return;
if (typeof v.value != "undefined") {
if ((v.value.neq(0))&&(!ctx.returnValue)) { if ((v.value.neq(0))&&(!ctx.returnValue)) {
exec(ctx, ast.then); exec(ctx, ast.then);
if (ctx.error) return; if (ctx.error) return;
@@ -585,6 +590,7 @@ function execIf(ctx, ast) {
if (ctx.error) return; if (ctx.error) return;
} }
} }
}
} }

14
test/cases.js Normal file
View File

@@ -0,0 +1,14 @@
const chai = require("chai");
const path = require("path");
const snarkjs = require("snarkjs");
const crypto = require("crypto");
const compiler = require("../index.js");
const assert = chai.assert;
describe("Sum test", () => {
it("Should compile a code with an undefined if", async() => {
await compiler(path.join(__dirname, "circuits", "undefinedif.circom"));
});
});

View File

@@ -0,0 +1,14 @@
template X() {
signal input i;
signal input j;
signal output out;
if (i == 0) {
out <-- i;
}
else {
out <-- j;
}
}
component main = X();