@@ -157,14 +157,17 @@ pub fn linearize_generic_array<AK: ArrayKind>(
157157 let option_ty = Type :: from ( option_sty. clone ( ) ) ;
158158 let arrays_of_none = {
159159 let fn_none = {
160- let mut dfb = DFGBuilder :: new ( inout_sig ( vec ! [ ] , option_ty. clone ( ) ) ) . unwrap ( ) ;
161- let none = dfb
160+ let mut mb = dfb. module_root_builder ( ) ;
161+ let mut fb = mb
162+ . define_function ( "mk_none" , inout_sig ( vec ! [ ] , option_ty. clone ( ) ) )
163+ . unwrap ( ) ;
164+ let none = fb
162165 . add_dataflow_op ( Tag :: new ( 0 , vec ! [ type_row![ ] , ty. clone( ) . into( ) ] ) , [ ] )
163166 . unwrap ( ) ;
164- dfb . finish_hugr_with_outputs ( none. outputs ( ) ) . unwrap ( )
167+ fb . finish_with_outputs ( none. outputs ( ) ) . unwrap ( )
165168 } ;
166169 let repeats = vec ! [ GenericArrayRepeat :: <AK >:: new( option_ty. clone( ) , * n) ; num_new] ;
167- let fn_none = dfb. add_load_value ( Value :: function ( fn_none) . unwrap ( ) ) ;
170+ let fn_none = dfb. load_func ( fn_none. handle ( ) , & [ ] ) . unwrap ( ) ;
168171 repeats
169172 . into_iter ( )
170173 . map ( |rpt| {
@@ -181,18 +184,21 @@ pub fn linearize_generic_array<AK: ArrayKind>(
181184 let copy_elem = {
182185 let mut io = vec ! [ ty. clone( ) , i64_t. clone( ) ] ;
183186 io. extend ( vec ! [ option_array. clone( ) ; num_new] ) ;
184- let mut dfb = DFGBuilder :: new ( endo_sig ( io) ) . unwrap ( ) ;
185- let mut inputs = dfb. input_wires ( ) ;
187+ let mut mb = dfb. module_root_builder ( ) ;
188+ let mut fb = mb
189+ . define_function ( format ! ( "copy{num_outports}" ) , endo_sig ( io) )
190+ . unwrap ( ) ;
191+ let mut inputs = fb. input_wires ( ) ;
186192 let elem = inputs. next ( ) . unwrap ( ) ;
187193 let idx = inputs. next ( ) . unwrap ( ) ;
188194 let opt_arrays = inputs. collect :: < Vec < _ > > ( ) ;
189- let [ idx_usz] = dfb
195+ let [ idx_usz] = fb
190196 . add_dataflow_op ( ConvertOpDef :: itousize. without_log_width ( ) , [ idx] )
191197 . unwrap ( )
192198 . outputs_arr ( ) ;
193199 let mut copies = lin
194200 . copy_discard_op ( ty, num_outports) ?
195- . add ( & mut dfb , [ elem] )
201+ . add ( & mut fb , [ elem] )
196202 . map_err ( |e| LinearizeError :: NestedTemplateError ( ty. clone ( ) , e) ) ?
197203 . outputs ( ) ;
198204 let copy0 = copies. next ( ) . unwrap ( ) ; // We'll return this directly
@@ -207,32 +213,32 @@ pub fn linearize_generic_array<AK: ArrayKind>(
207213 . into_iter ( )
208214 . zip_eq ( copies)
209215 . map ( |( opt_array, copy1) | {
210- let [ tag] = dfb
216+ let [ tag] = fb
211217 . add_dataflow_op ( Tag :: new ( 1 , vec ! [ type_row![ ] , ty. clone( ) . into( ) ] ) , [ copy1] )
212218 . unwrap ( )
213219 . outputs_arr ( ) ;
214- let [ set_result] = dfb
220+ let [ set_result] = fb
215221 . add_dataflow_op ( set_op. clone ( ) , [ opt_array, idx_usz, tag] )
216222 . unwrap ( )
217223 . outputs_arr ( ) ;
218224 // set should always be successful
219- let [ none, opt_array] = dfb
225+ let [ none, opt_array] = fb
220226 . build_unwrap_sum ( 1 , either_st. clone ( ) , set_result)
221227 . unwrap ( ) ;
222228 //the removed element is an option, which should always be none (and thus discardable)
223- let [ ] = dfb
229+ let [ ] = fb
224230 . build_unwrap_sum ( 0 , SumType :: new_option ( ty. clone ( ) ) , none)
225231 . unwrap ( ) ;
226232 opt_array
227233 } )
228234 . collect :: < Vec < _ > > ( ) ; // stop borrowing dfb
229235
230- let cst1 = dfb . add_load_value ( ConstInt :: new_u ( 6 , 1 ) . unwrap ( ) ) ;
231- let [ new_idx] = dfb
236+ let cst1 = fb . add_load_value ( ConstInt :: new_u ( 6 , 1 ) . unwrap ( ) ) ;
237+ let [ new_idx] = fb
232238 . add_dataflow_op ( IntOpDef :: iadd. with_log_width ( 6 ) , [ idx, cst1] )
233239 . unwrap ( )
234240 . outputs_arr ( ) ;
235- dfb . finish_hugr_with_outputs ( [ copy0, new_idx] . into_iter ( ) . chain ( opt_arrays) )
241+ fb . finish_with_outputs ( [ copy0, new_idx] . into_iter ( ) . chain ( opt_arrays) )
236242 . unwrap ( )
237243 } ;
238244 let [ in_array] = dfb. input_wires_arr ( ) ;
@@ -245,7 +251,7 @@ pub fn linearize_generic_array<AK: ArrayKind>(
245251 * n,
246252 ) ;
247253
248- let copy_elem = dfb. add_load_value ( Value :: function ( copy_elem) . unwrap ( ) ) ;
254+ let copy_elem = dfb. load_func ( copy_elem. handle ( ) , & [ ] ) . unwrap ( ) ;
249255 let cst0 = dfb. add_load_value ( ConstInt :: new_u ( 6 , 0 ) . unwrap ( ) ) ;
250256
251257 let mut outs = dfb
@@ -263,15 +269,20 @@ pub fn linearize_generic_array<AK: ArrayKind>(
263269
264270 //3. Scan each array-of-options, 'unwrapping' each element into a non-option
265271 let unwrap_elem = {
266- let mut dfb =
267- DFGBuilder :: new ( inout_sig ( Type :: from ( option_ty. clone ( ) ) , ty. clone ( ) ) ) . unwrap ( ) ;
272+ let mut mb = dfb. module_root_builder ( ) ;
273+ let mut dfb = mb
274+ . define_function (
275+ "unwrap" ,
276+ inout_sig ( Type :: from ( option_ty. clone ( ) ) , ty. clone ( ) ) ,
277+ )
278+ . unwrap ( ) ;
268279 let [ opt] = dfb. input_wires_arr ( ) ;
269280 let [ val] = dfb. build_unwrap_sum ( 1 , option_sty. clone ( ) , opt) . unwrap ( ) ;
270- dfb. finish_hugr_with_outputs ( [ val] ) . unwrap ( )
281+ dfb. finish_with_outputs ( [ val] ) . unwrap ( )
271282 } ;
272283
273284 let unwrap_scan = GenericArrayScan :: < AK > :: new ( option_ty. clone ( ) , ty. clone ( ) , vec ! [ ] , * n) ;
274- let unwrap_elem = dfb. add_load_value ( Value :: function ( unwrap_elem) . unwrap ( ) ) ;
285+ let unwrap_elem = dfb. load_func ( unwrap_elem. handle ( ) , & [ ] ) . unwrap ( ) ;
275286
276287 let out_arrays = std:: iter:: once ( out_array1)
277288 . chain ( opt_arrays. map ( |opt_array| {
0 commit comments