11import { SimpleIdentifierListContext } from "../generated" ;
2- import { VariableContext , VariableContextWithNull } from "../types" ;
2+ import {
3+ CircomValueType ,
4+ VariableContext ,
5+ VariableContextWithNull ,
6+ } from "../types" ;
37
48export function parseSimpleIdentifierList (
59 ctx : SimpleIdentifierListContext ,
@@ -19,7 +23,7 @@ export function parseSimpleIdentifierList(
1923
2024export function buildVariableContext (
2125 names : string [ ] ,
22- values : any [ ] ,
26+ values : CircomValueType [ ] ,
2327) : VariableContext {
2428 if ( names . length !== values . length ) {
2529 throw new Error ( "Names and values must have the same length" ) ;
@@ -44,7 +48,7 @@ export function buildVariableContext(
4448 return context ;
4549}
4650
47- export function getArrayDimensions ( value : any ) : number [ ] {
51+ export function getArrayDimensions ( value : CircomValueType ) : number [ ] {
4852 if ( Array . isArray ( value ) ) {
4953 return [ value . length , ...getArrayDimensions ( value [ 0 ] ) ] ;
5054 }
@@ -55,7 +59,7 @@ export function getArrayDimensions(value: any): number[] {
5559export function bindVariableContext (
5660 variableName : string ,
5761 dimensions : number [ ] ,
58- values : any ,
62+ values : CircomValueType ,
5963) : VariableContextWithNull {
6064 const context : VariableContextWithNull = { } ;
6165 const resolved = resolveDimensions ( variableName , dimensions ) ;
@@ -82,7 +86,10 @@ export function resolveDimensions(
8286}
8387
8488// reference MUST be similar to [0][1]
85- function parseVariable ( value : any , reference : string ) : bigint {
89+ function parseVariable (
90+ value : CircomValueType ,
91+ reference : string ,
92+ ) : CircomValueType {
8693 const parts = reference
8794 . split ( "[" )
8895 . map ( ( part ) => part . replace ( "]" , "" ) )
@@ -92,9 +99,16 @@ function parseVariable(value: any, reference: string): bigint {
9299 return getReferenceValueInternal ( value , parts ) ;
93100}
94101
95- function getReferenceValueInternal ( value : any , reference : number [ ] ) : bigint {
102+ function getReferenceValueInternal (
103+ value : CircomValueType ,
104+ reference : number [ ] ,
105+ ) : CircomValueType {
96106 if ( reference . length === 0 ) {
97- return BigInt ( value ) ;
107+ return value ;
108+ }
109+
110+ if ( ! Array . isArray ( value ) ) {
111+ throw new Error ( "INTERNAL ERROR! Reference is invalid" ) ;
98112 }
99113
100114 return getReferenceValueInternal ( value [ reference [ 0 ] ] , reference . slice ( 1 ) ) ;
0 commit comments