Skip to content

Commit 207bd1d

Browse files
committed
Synced with hardhat-zkit
1 parent 7a4d0c7 commit 207bd1d

File tree

4 files changed

+56
-37
lines changed

4 files changed

+56
-37
lines changed

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

Lines changed: 8 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -44,25 +44,25 @@ describe("Circom Template Inputs Visitor", () => {
4444

4545
expect(visitor.templateInputs.encapsulatedContent.type).to.equal("input");
4646
expect(visitor.templateInputs.encapsulatedContent.dimension).to.deep.equal([
47-
131072n,
47+
131072,
4848
]);
4949

5050
expect(visitor.templateInputs.dg1.type).to.equal("input");
51-
expect(visitor.templateInputs.dg1.dimension).to.deep.equal([1024n]);
51+
expect(visitor.templateInputs.dg1.dimension).to.deep.equal([1024]);
5252

5353
expect(visitor.templateInputs.dg15.type).to.equal("input");
54-
expect(visitor.templateInputs.dg15.dimension).to.deep.equal([32768n]);
54+
expect(visitor.templateInputs.dg15.dimension).to.deep.equal([32768]);
5555

5656
expect(visitor.templateInputs.signedAttributes.type).to.equal("input");
5757
expect(visitor.templateInputs.signedAttributes.dimension).to.deep.equal([
58-
1024n,
58+
1024,
5959
]);
6060

6161
expect(visitor.templateInputs.signature.type).to.equal("input");
62-
expect(visitor.templateInputs.signature.dimension).to.deep.equal([64n]);
62+
expect(visitor.templateInputs.signature.dimension).to.deep.equal([64]);
6363

6464
expect(visitor.templateInputs.pubkey.type).to.equal("input");
65-
expect(visitor.templateInputs.pubkey.dimension).to.deep.equal([64n]);
65+
expect(visitor.templateInputs.pubkey.dimension).to.deep.equal([64]);
6666

6767
expect(visitor.templateInputs.slaveMerkleRoot.type).to.equal("input");
6868
expect(visitor.templateInputs.slaveMerkleRoot.dimension).to.deep.equal([]);
@@ -72,7 +72,7 @@ describe("Circom Template Inputs Visitor", () => {
7272
);
7373
expect(
7474
visitor.templateInputs.slaveMerkleInclusionBranches.dimension,
75-
).to.deep.equal([80n]);
75+
).to.deep.equal([80]);
7676

7777
expect(visitor.templateInputs.skIdentity.type).to.equal("input");
7878
expect(visitor.templateInputs.skIdentity.dimension).to.deep.equal([]);
@@ -112,7 +112,7 @@ describe("Circom Template Inputs Visitor", () => {
112112
expect(visitor.templateInputs.in1.dimension).to.deep.equal([]);
113113

114114
expect(visitor.templateInputs.in2.type).to.equal("input");
115-
expect(visitor.templateInputs.in2.dimension).to.deep.equal([3n, 2n]);
115+
expect(visitor.templateInputs.in2.dimension).to.deep.equal([3, 2]);
116116

117117
expect(visitor.templateInputs.out.type).to.equal("output");
118118
expect(visitor.templateInputs.out.dimension).to.deep.equal([]);

test/mocks/CircomFilesVisitor.ts

Lines changed: 5 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -55,7 +55,7 @@ export class CircomFilesVisitor extends CircomVisitor<void> {
5555
visitTemplateDefinition = (ctx: TemplateDefinitionContext) => {
5656
if (ctx.ID().getText() in this.fileData.templates) {
5757
this.errors.push({
58-
type: ErrorType.TemplateAlreadyUsed,
58+
type: ErrorType.TemplateAlreadyVisited,
5959
context: ctx,
6060
fileIdentifier: this.fileIdentifier,
6161
templateIdentifier: ctx.ID().getText(),
@@ -66,7 +66,7 @@ export class CircomFilesVisitor extends CircomVisitor<void> {
6666
}
6767

6868
this.fileData.templates[ctx.ID().getText()] = {
69-
parameters: parseSimpleIdentifierList(ctx._argNames),
69+
parameters: ctx._argNames ? parseSimpleIdentifierList(ctx._argNames) : [],
7070
isCustom: !!ctx.CUSTOM(),
7171
parallel: !!ctx.PARALLEL(),
7272
context: ctx,
@@ -82,8 +82,8 @@ export class CircomFilesVisitor extends CircomVisitor<void> {
8282
visitComponentMainDeclaration = (ctx: ComponentMainDeclarationContext) => {
8383
this.fileData.mainComponentInfo.templateName = ctx.ID().getText();
8484

85-
this.visit(ctx.publicInputsDefinition());
86-
this.visit(ctx._argValues);
85+
if (ctx.publicInputsDefinition()) this.visit(ctx.publicInputsDefinition());
86+
if (ctx._argValues) this.visit(ctx._argValues);
8787
};
8888

8989
visitPublicInputsDefinition = (ctx: PublicInputsDefinitionContext) => {
@@ -106,8 +106,7 @@ export class CircomFilesVisitor extends CircomVisitor<void> {
106106
context: ctx.expression(i),
107107
fileIdentifier: this.fileIdentifier,
108108
linkedParserErrors: errors,
109-
message: `Failed to parse array parameter with index ${i}.\r
110-
\rParameter: ${ctx.expression(i).getText()} (${ctx.expression(i).start.line}:${ctx.expression(i).start.column})`,
109+
message: `Failed to parse array parameter with index ${i}. Parameter: ${ctx.expression(i).getText()} (${ctx.expression(i).start.line}:${ctx.expression(i).start.column})`,
111110
});
112111

113112
continue;

test/mocks/CircomTemplateInputsVisitor.ts

Lines changed: 40 additions & 20 deletions
Original file line numberDiff line numberDiff line change
@@ -23,6 +23,7 @@ import {
2323
VariableContext,
2424
VarIdentifierContext,
2525
ParserRuleContext,
26+
BusDeclarationContext,
2627
} from "../../src";
2728

2829
import {
@@ -92,7 +93,7 @@ export class CircomTemplateInputsVisitor extends CircomVisitor<void> {
9293
visitSignalIdentifier = (ctx: SignalIdentifierContext) => {
9394
const base = ctx.identifier();
9495
const baseName = base.ID();
95-
const resolvedDimensions: bigint[] = [];
96+
const resolvedDimensions: number[] = [];
9697

9798
for (const dimension of base.arrayDimension_list()) {
9899
const [dimensionValue, linkedErrors] = new ExpressionHelper(
@@ -126,7 +127,7 @@ export class CircomTemplateInputsVisitor extends CircomVisitor<void> {
126127
return;
127128
}
128129

129-
resolvedDimensions.push(dimensionValue);
130+
resolvedDimensions.push(Number(dimensionValue));
130131
}
131132

132133
if (
@@ -147,6 +148,10 @@ export class CircomTemplateInputsVisitor extends CircomVisitor<void> {
147148
);
148149
}
149150

151+
if (ctx.parentCtx!.parentCtx instanceof BusDeclarationContext) {
152+
throw new Error("Buses are not supported");
153+
}
154+
150155
const signalDeclarationContext = ctx.parentCtx!
151156
.parentCtx as SignalDeclarationContext;
152157

@@ -172,7 +177,7 @@ export class CircomTemplateInputsVisitor extends CircomVisitor<void> {
172177
};
173178

174179
visitIfWithFollowUpIf = (ctx: IfWithFollowUpIfContext) => {
175-
let [condition, linkedErrors] = new ExpressionHelper(this.fileIdentifier)
180+
const [condition, linkedErrors] = new ExpressionHelper(this.fileIdentifier)
176181
.setExpressionContext(ctx._cond)
177182
.setVariableContext(this._vars)
178183
.parseExpression();
@@ -187,7 +192,7 @@ export class CircomTemplateInputsVisitor extends CircomVisitor<void> {
187192
};
188193

189194
visitIfRegular = (ctx: IfRegularContext) => {
190-
let [condition, linkedErrors] = new ExpressionHelper(this.fileIdentifier)
195+
const [condition, linkedErrors] = new ExpressionHelper(this.fileIdentifier)
191196
.setExpressionContext(ctx._cond)
192197
.setVariableContext(this._vars)
193198
.parseExpression();
@@ -204,7 +209,7 @@ export class CircomTemplateInputsVisitor extends CircomVisitor<void> {
204209
visitIfRegularElseWithFollowUpIf = (
205210
ctx: IfRegularElseWithFollowUpIfContext,
206211
) => {
207-
let [condition, linkedErrors] = new ExpressionHelper(this.fileIdentifier)
212+
const [condition, linkedErrors] = new ExpressionHelper(this.fileIdentifier)
208213
.setExpressionContext(ctx._cond)
209214
.setVariableContext(this._vars)
210215
.parseExpression();
@@ -221,7 +226,7 @@ export class CircomTemplateInputsVisitor extends CircomVisitor<void> {
221226
};
222227

223228
visitIfRegularElseRegular = (ctx: IfRegularElseRegularContext) => {
224-
let [condition, linkedErrors] = new ExpressionHelper(this.fileIdentifier)
229+
const [condition, linkedErrors] = new ExpressionHelper(this.fileIdentifier)
225230
.setExpressionContext(ctx._cond)
226231
.setVariableContext(this._vars)
227232
.parseExpression();
@@ -450,19 +455,24 @@ export class CircomTemplateInputsVisitor extends CircomVisitor<void> {
450455

451456
switch (ctx.ASSIGNMENT_WITH_OP().getText()) {
452457
case "+=":
453-
this._vars[assigneeName] = this._vars[assigneeName] + value;
458+
this._vars[assigneeName] =
459+
BigInt(this._vars[assigneeName] as any) + value;
454460
break;
455461
case "-=":
456-
this._vars[assigneeName] = this._vars[assigneeName] - value;
462+
this._vars[assigneeName] =
463+
BigInt(this._vars[assigneeName] as any) - value;
457464
break;
458465
case "*=":
459-
this._vars[assigneeName] = this._vars[assigneeName] * value;
466+
this._vars[assigneeName] =
467+
BigInt(this._vars[assigneeName] as any) * value;
460468
break;
461469
case "**=":
462-
this._vars[assigneeName] = this._vars[assigneeName] ** value;
470+
this._vars[assigneeName] =
471+
BigInt(this._vars[assigneeName] as any) ** value;
463472
break;
464473
case "/=":
465-
this._vars[assigneeName] = this._vars[assigneeName] / value;
474+
this._vars[assigneeName] =
475+
BigInt(this._vars[assigneeName] as any) / value;
466476
break;
467477
case "\\\\=":
468478
this.errors.push({
@@ -473,26 +483,32 @@ export class CircomTemplateInputsVisitor extends CircomVisitor<void> {
473483
});
474484
break;
475485
case "%=":
476-
this._vars[assigneeName] = this._vars[assigneeName] % value;
486+
this._vars[assigneeName] =
487+
BigInt(this._vars[assigneeName] as any) % value;
477488
break;
478489
case "<<=":
479-
this._vars[assigneeName] = this._vars[assigneeName] << value;
490+
this._vars[assigneeName] =
491+
BigInt(this._vars[assigneeName] as any) << value;
480492
break;
481493
case ">>=":
482-
this._vars[assigneeName] = this._vars[assigneeName] >> value;
494+
this._vars[assigneeName] =
495+
BigInt(this._vars[assigneeName] as any) >> value;
483496
break;
484497
case "&=":
485-
this._vars[assigneeName] = this._vars[assigneeName] & value;
498+
this._vars[assigneeName] =
499+
BigInt(this._vars[assigneeName] as any) & value;
486500
break;
487501
case "^=":
488-
this._vars[assigneeName] = this._vars[assigneeName] ^ value;
502+
this._vars[assigneeName] =
503+
BigInt(this._vars[assigneeName] as any) ^ value;
489504
break;
490505
case "|=":
491-
this._vars[assigneeName] = this._vars[assigneeName] | value;
506+
this._vars[assigneeName] =
507+
BigInt(this._vars[assigneeName] as any) | value;
492508
break;
493509
default:
494510
this.errors.push({
495-
type: ErrorType.ReachedUnkownOperation,
511+
type: ErrorType.ReachedUnknownOperation,
496512
context: ctx,
497513
fileIdentifier: this.fileIdentifier,
498514
message: `Invalid operation type ${ctx.ASSIGNMENT_WITH_OP().getText()} (${ctx.start.line}:${ctx.start.column})`,
@@ -542,14 +558,18 @@ export class CircomTemplateInputsVisitor extends CircomVisitor<void> {
542558

543559
switch (ctx.SELF_OP().getText()) {
544560
case "++":
561+
// eslint-disable-next-line @typescript-eslint/ban-ts-comment
562+
// @ts-ignore
545563
this._vars[assigneeName]++;
546564
break;
547565
case "--":
566+
// eslint-disable-next-line @typescript-eslint/ban-ts-comment
567+
// @ts-ignore
548568
this._vars[assigneeName]--;
549569
break;
550570
default:
551571
this.errors.push({
552-
type: ErrorType.ReachedUnkownOperation,
572+
type: ErrorType.ReachedUnknownOperation,
553573
context: ctx,
554574
fileIdentifier: this.fileIdentifier,
555575
message: `Invalid operation type ${ctx.SELF_OP().getText()} (${ctx.start.line}:${ctx.start.column})`,
@@ -600,7 +620,7 @@ export class CircomTemplateInputsVisitor extends CircomVisitor<void> {
600620
const expressionHelper = new ExpressionHelper(this.fileIdentifier);
601621

602622
let result: IdentifierObject[] | null = [];
603-
let resolvedDimensions: bigint[] = [];
623+
const resolvedDimensions: bigint[] = [];
604624

605625
for (let i = 0; i < ctx.arrayDimension_list().length; i++) {
606626
const [dimension, linkedErrors] = expressionHelper

test/mocks/types.ts

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -7,7 +7,7 @@ import {
77

88
export enum ErrorType {
99
SignalDimensionResolution,
10-
TemplateAlreadyUsed,
10+
TemplateAlreadyVisited,
1111
InvalidPragmaVersion,
1212
FailedToResolveMainComponentParameter,
1313
InternalExpressionHelperError,
@@ -23,13 +23,13 @@ export enum ErrorType {
2323
ComplexAccessNotSupported,
2424
AssigneeNotDeclared,
2525
QUOOperationNotSupported,
26-
ReachedUnkownOperation,
26+
ReachedUnknownOperation,
2727
InvalidIncDecOperation,
2828
}
2929

3030
export type InputData = {
3131
type: string;
32-
dimension: bigint[];
32+
dimension: number[];
3333
};
3434

3535
export type IdentifierObject = {

0 commit comments

Comments
 (0)