@@ -126,88 +126,21 @@ fn read_operation<'a>(
126126 Which :: Dfg ( ( ) ) => table:: Operation :: Dfg ,
127127 Which :: Cfg ( ( ) ) => table:: Operation :: Cfg ,
128128 Which :: Block ( ( ) ) => table:: Operation :: Block ,
129- Which :: FuncDefn ( reader) => {
130- let reader = reader?;
131- let name = bump. alloc_str ( reader. get_name ( ) ?. to_str ( ) ?) ;
132- let params = read_list ! ( bump, reader. get_params( ) ?, read_param) ;
133- let constraints = read_scalar_list ! ( bump, reader, get_constraints, table:: TermId ) ;
134- let signature = table:: TermId ( reader. get_signature ( ) ) ;
135- let symbol = bump. alloc ( table:: Symbol {
136- name,
137- params,
138- constraints,
139- signature,
140- } ) ;
141- table:: Operation :: DefineFunc ( symbol)
142- }
143- Which :: FuncDecl ( reader) => {
144- let reader = reader?;
145- let name = bump. alloc_str ( reader. get_name ( ) ?. to_str ( ) ?) ;
146- let params = read_list ! ( bump, reader. get_params( ) ?, read_param) ;
147- let constraints = read_scalar_list ! ( bump, reader, get_constraints, table:: TermId ) ;
148- let signature = table:: TermId ( reader. get_signature ( ) ) ;
149- let symbol = bump. alloc ( table:: Symbol {
150- name,
151- params,
152- constraints,
153- signature,
154- } ) ;
155- table:: Operation :: DeclareFunc ( symbol)
156- }
129+ Which :: FuncDefn ( reader) => table:: Operation :: DefineFunc ( read_symbol ( bump, reader?, None ) ?) ,
130+ Which :: FuncDecl ( reader) => table:: Operation :: DeclareFunc ( read_symbol ( bump, reader?, None ) ?) ,
157131 Which :: AliasDefn ( reader) => {
158132 let symbol = reader. get_symbol ( ) ?;
159133 let value = table:: TermId ( reader. get_value ( ) ) ;
160- let name = bump. alloc_str ( symbol. get_name ( ) ?. to_str ( ) ?) ;
161- let params = read_list ! ( bump, symbol. get_params( ) ?, read_param) ;
162- let signature = table:: TermId ( symbol. get_signature ( ) ) ;
163- let symbol = bump. alloc ( table:: Symbol {
164- name,
165- params,
166- constraints : & [ ] ,
167- signature,
168- } ) ;
169- table:: Operation :: DefineAlias ( symbol, value)
134+ table:: Operation :: DefineAlias ( read_symbol ( bump, symbol, Some ( & [ ] ) ) ?, value)
170135 }
171136 Which :: AliasDecl ( reader) => {
172- let reader = reader?;
173- let name = bump. alloc_str ( reader. get_name ( ) ?. to_str ( ) ?) ;
174- let params = read_list ! ( bump, reader. get_params( ) ?, read_param) ;
175- let signature = table:: TermId ( reader. get_signature ( ) ) ;
176- let symbol = bump. alloc ( table:: Symbol {
177- name,
178- params,
179- constraints : & [ ] ,
180- signature,
181- } ) ;
182- table:: Operation :: DeclareAlias ( symbol)
137+ table:: Operation :: DeclareAlias ( read_symbol ( bump, reader?, Some ( & [ ] ) ) ?)
183138 }
184139 Which :: ConstructorDecl ( reader) => {
185- let reader = reader?;
186- let name = bump. alloc_str ( reader. get_name ( ) ?. to_str ( ) ?) ;
187- let params = read_list ! ( bump, reader. get_params( ) ?, read_param) ;
188- let constraints = read_scalar_list ! ( bump, reader, get_constraints, table:: TermId ) ;
189- let signature = table:: TermId ( reader. get_signature ( ) ) ;
190- let symbol = bump. alloc ( table:: Symbol {
191- name,
192- params,
193- constraints,
194- signature,
195- } ) ;
196- table:: Operation :: DeclareConstructor ( symbol)
140+ table:: Operation :: DeclareConstructor ( read_symbol ( bump, reader?, None ) ?)
197141 }
198142 Which :: OperationDecl ( reader) => {
199- let reader = reader?;
200- let name = bump. alloc_str ( reader. get_name ( ) ?. to_str ( ) ?) ;
201- let params = read_list ! ( bump, reader. get_params( ) ?, read_param) ;
202- let constraints = read_scalar_list ! ( bump, reader, get_constraints, table:: TermId ) ;
203- let signature = table:: TermId ( reader. get_signature ( ) ) ;
204- let symbol = bump. alloc ( table:: Symbol {
205- name,
206- params,
207- constraints,
208- signature,
209- } ) ;
210- table:: Operation :: DeclareOperation ( symbol)
143+ table:: Operation :: DeclareOperation ( read_symbol ( bump, reader?, None ) ?)
211144 }
212145 Which :: Custom ( operation) => table:: Operation :: Custom ( table:: TermId ( operation) ) ,
213146 Which :: TailLoop ( ( ) ) => table:: Operation :: TailLoop ,
@@ -257,6 +190,27 @@ fn read_region_scope(reader: hugr_capnp::region_scope::Reader) -> ReadResult<tab
257190 Ok ( table:: RegionScope { links, ports } )
258191}
259192
193+ /// (Only) if `constraints` are None, then they are read from the `reader`
194+ fn read_symbol < ' a > (
195+ bump : & ' a Bump ,
196+ reader : hugr_capnp:: symbol:: Reader ,
197+ constraints : Option < & ' a [ table:: TermId ] > ,
198+ ) -> ReadResult < & ' a mut table:: Symbol < ' a > > {
199+ let name = bump. alloc_str ( reader. get_name ( ) ?. to_str ( ) ?) ;
200+ let params = read_list ! ( bump, reader. get_params( ) ?, read_param) ;
201+ let constraints = match constraints {
202+ Some ( cs) => cs,
203+ None => read_scalar_list ! ( bump, reader, get_constraints, table:: TermId ) ,
204+ } ;
205+ let signature = table:: TermId ( reader. get_signature ( ) ) ;
206+ Ok ( bump. alloc ( table:: Symbol {
207+ name,
208+ params,
209+ constraints,
210+ signature,
211+ } ) )
212+ }
213+
260214fn read_term < ' a > ( bump : & ' a Bump , reader : hugr_capnp:: term:: Reader ) -> ReadResult < table:: Term < ' a > > {
261215 use hugr_capnp:: term:: Which ;
262216 Ok ( match reader. which ( ) ? {
0 commit comments