arnaucube
arnaucube/circomPublic Self-hosted repository
Fix undefined if
Jordi Baylina jordi@baylina.cat
Mon, 29 Oct 2018 07:09:28 +0100
commit

bfdf17fd89241567dde51c3f2b23a735f4866d24

parent

9d0b27a7e8ee45308773d6665d874b5d3d6e59cb

3 files changed, 52 insertions(+), 18 deletions(-)

jump to
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();