Fix undefined if
Jordi Baylina jordi@baylina.cat
Mon, 29 Oct 2018 07:09:28 +0100
3 files changed,
52 insertions(+),
18 deletions(-)
M
src/exec.js
→
src/exec.js
@@ -547,15 +547,17 @@
let v = exec(ctx, ast.condition); if (ctx.error) return; - while ((v.value.neq(0))&&(!ctx.returnValue)) { - exec(ctx, ast.body); - if (ctx.error) return; + if (typeof v.value != "undefined") { + while ((v.value.neq(0))&&(!ctx.returnValue)) { + exec(ctx, ast.body); + if (ctx.error) return; - exec(ctx, ast.step); - if (ctx.error) return; + exec(ctx, ast.step); + if (ctx.error) return; - v = exec(ctx, ast.condition); - if (ctx.error) return; + v = exec(ctx, ast.condition); + if (ctx.error) return; + } } }@@ -563,12 +565,14 @@ function execWhile(ctx, ast) {
let v = exec(ctx, ast.condition); if (ctx.error) return; - while ((v.value.neq(0))&&(!ctx.returnValue)) { - exec(ctx, ast.body); - if (ctx.error) return; + if (typeof v.value != "undefined") { + while ((v.value.neq(0))&&(!ctx.returnValue)) { + exec(ctx, ast.body); + if (ctx.error) return; - v = exec(ctx, ast.condition); - if (ctx.error) return; + v = exec(ctx, ast.condition); + if (ctx.error) return; + } } }@@ -576,13 +580,15 @@ function execIf(ctx, ast) {
let v = exec(ctx, ast.condition); if (ctx.error) return; - if ((v.value.neq(0))&&(!ctx.returnValue)) { - exec(ctx, ast.then); - if (ctx.error) return; - } else { - if (ast.else) { - exec(ctx, ast.else); + if (typeof v.value != "undefined") { + if ((v.value.neq(0))&&(!ctx.returnValue)) { + exec(ctx, ast.then); if (ctx.error) return; + } else { + if (ast.else) { + exec(ctx, ast.else); + if (ctx.error) return; + } } } }
A
test/cases.js
@@ -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")); + }); +});
A
test/circuits/undefinedif.circom
@@ -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();