@@ -239,6 +239,25 @@ def graph_from_canvas(
239239 """
240240 obj_array : Optional [HeavyObject ] = None # an #A (table) object which is currently being parsed
241241
242+ def finalize_array (array : HeavyObject ) -> None :
243+ declared_size = array .obj_dict ["size" ]
244+ values_size = len (array .obj_dict ["values" ])
245+ if declared_size != values_size :
246+ new_size = max (declared_size , values_size )
247+ array .add_warning (
248+ "Table \" {0}\" was declared as having {1} values, "
249+ "but {2} were supplied. It will be resized to {3} "
250+ "values (any unsupplied values will be zeroed)." .format (
251+ array .obj_dict ["name" ],
252+ declared_size ,
253+ values_size ,
254+ new_size ))
255+ array .obj_dict ["size" ] = new_size
256+ if new_size < declared_size :
257+ array .obj_dict ["values" ] = obj_args ["values" ][:new_size ]
258+ else :
259+ array .obj_dict ["values" ].extend ([0.0 for _ in range (new_size - declared_size )])
260+
242261 g = pd_graph_class (graph_args , pd_path , pos_x , pos_y )
243262
244263 msg_send : dict = {}
@@ -299,24 +318,8 @@ def graph_from_canvas(
299318 # are we restoring an array object?
300319 # do some final sanity checks
301320 if obj_array is not None :
302- declared_size = obj_array .obj_dict ["size" ]
303- values_size = len (obj_array .obj_dict ["values" ])
304- if declared_size != values_size :
305- new_size = max (declared_size , values_size )
306- obj_array .add_warning (
307- "Table \" {0}\" was declared as having {1} values, "
308- "but {2} were supplied. It will be resized to {3} "
309- "values (any unsupplied values will be zeroed)." .format (
310- obj_array .obj_dict ["name" ],
311- declared_size ,
312- values_size ,
313- new_size ))
314- obj_array .obj_dict ["size" ] = new_size
315- if new_size < declared_size :
316- obj_array .obj_dict ["values" ] = obj_args ["values" ][:new_size ]
317- else :
318- obj_array .obj_dict ["values" ].extend ([0.0 for _ in
319- range (new_size - declared_size )])
321+ finalize_array (obj_array )
322+
320323 obj_array = None # done parsing the array
321324
322325 # set the subpatch name
@@ -556,7 +559,10 @@ def graph_from_canvas(
556559 gui_recv [index ] = obj_args [8 ]
557560
558561 elif line [1 ] == "array" :
559- assert obj_array is None , "#X array object is already being parsed."
562+ # are we still parsing a previous array? finalize it.
563+ if obj_array is not None :
564+ finalize_array (obj_array )
565+
560566 # array names can have dollar arguments in them.
561567 # ensure that they are resolved
562568 table_def = self .__resolve_object_args (
0 commit comments