Skip to content

Commit 6085c1b

Browse files
committed
Added support for parentheses
1 parent b426bac commit 6085c1b

File tree

3 files changed

+41
-2
lines changed

3 files changed

+41
-2
lines changed

src/utils/ExpressionHelper.ts

Lines changed: 7 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -177,8 +177,13 @@ class ExpressionVisitor extends ExtendedCircomVisitor<CircomValueType | null> {
177177
};
178178

179179
visitPParentheses = (ctx: PParenthesesContext): CircomValueType | null => {
180-
this.addError("Parentheses are not supported", ctx);
181-
return null;
180+
let expressions = ctx.expressionList().expression_list();
181+
if (expressions.length !== 1) {
182+
this.addError("Parentheses can only contain one expression", ctx);
183+
return null;
184+
}
185+
186+
return this.visit(expressions[0]);
182187
};
183188

184189
visitPArray = (ctx: PArrayContext): CircomValueType | null => {

test/circom-template-inputs-visitor.test.ts

Lines changed: 23 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -233,4 +233,27 @@ describe("Circom Template Inputs Visitor", () => {
233233
expect(visitor.templateInputs.out.type).to.equal("output");
234234
expect(visitor.templateInputs.out.dimension).to.deep.equal([2, 4]);
235235
});
236+
237+
it("should analyse the Math.circom circuit", () => {
238+
const data = getData("Math.circom");
239+
240+
const visitor = new CircomTemplateInputsVisitor(
241+
"Math.circom",
242+
data.templates[data.mainComponentInfo.templateName!].context,
243+
buildVariableContext(
244+
data.templates[data.mainComponentInfo.templateName!].parameters,
245+
data.mainComponentInfo.parameters,
246+
),
247+
);
248+
249+
visitor.startParse();
250+
251+
expect(visitor.errors.length).to.equal(0);
252+
253+
expect(visitor.templateInputs.out1.type).to.equal("output");
254+
expect(visitor.templateInputs.out1.dimension).to.deep.equal([13]);
255+
256+
expect(visitor.templateInputs.out2.type).to.equal("output");
257+
expect(visitor.templateInputs.out2.dimension).to.deep.equal([16]);
258+
});
236259
});

test/data/Math.circom

Lines changed: 11 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,11 @@
1+
pragma circom 2.1.6;
2+
3+
template Math(a, b) {
4+
var input1 = (a + b) / 2;
5+
var input2 = a + b / 2;
6+
7+
signal output out1[input1];
8+
signal output out2[input2];
9+
}
10+
11+
component main = Math(6, 20);

0 commit comments

Comments
 (0)