@@ -216,11 +216,12 @@ def array_or_scalar(var: StackItem | Local) -> str:
216216 return "array" if var .is_array () else "scalar"
217217
218218class Stack :
219- def __init__ (self ) -> None :
219+ def __init__ (self , check_stack_bounds : bool = False ) -> None :
220220 self .base_offset = PointerOffset .zero ()
221221 self .physical_sp = PointerOffset .zero ()
222222 self .logical_sp = PointerOffset .zero ()
223223 self .variables : list [Local ] = []
224+ self .check_stack_bounds = check_stack_bounds
224225
225226 def drop (self , var : StackItem , check_liveness : bool ) -> None :
226227 self .logical_sp = self .logical_sp .pop (var )
@@ -291,12 +292,12 @@ def _do_emit(
291292 ) -> None :
292293 out .emit (f"stack_pointer[{ stack_offset .to_c ()} ] = { var .name } ;\n " )
293294
294- def _save_physical_sp (self , out : CWriter , check_stack_bounds : bool ) -> None :
295+ def _save_physical_sp (self , out : CWriter ) -> None :
295296 if self .physical_sp != self .logical_sp :
296297 diff = self .logical_sp - self .physical_sp
297298 out .start_line ()
298299 out .emit (f"stack_pointer += { diff .to_c ()} ;\n " )
299- if check_stack_bounds :
300+ if self . check_stack_bounds :
300301 out .emit ("CHECK_STACK_BOUNDS();\n " )
301302 else :
302303 out .emit (f"assert(WITHIN_STACK_BOUNDS());\n " )
@@ -319,10 +320,10 @@ def save_variables(self, out: CWriter) -> None:
319320 self ._print (out )
320321 var_offset = var_offset .push (var .item )
321322
322- def flush (self , out : CWriter , check_stack_bounds : bool = False ) -> None :
323+ def flush (self , out : CWriter ) -> None :
323324 self ._print (out )
324325 self .save_variables (out )
325- self ._save_physical_sp (out , check_stack_bounds )
326+ self ._save_physical_sp (out )
326327 out .start_line ()
327328
328329 def is_flushed (self ) -> bool :
@@ -350,6 +351,7 @@ def copy(self) -> "Stack":
350351 other .physical_sp = self .physical_sp
351352 other .logical_sp = self .logical_sp
352353 other .variables = [var .copy () for var in self .variables ]
354+ other .check_stack_bounds = self .check_stack_bounds
353355 return other
354356
355357 def __eq__ (self , other : object ) -> bool :
@@ -501,10 +503,10 @@ def locals_cached(self) -> bool:
501503 return True
502504 return False
503505
504- def flush (self , out : CWriter , check_stack_bounds : bool = False ) -> None :
506+ def flush (self , out : CWriter ) -> None :
505507 self .clear_dead_inputs ()
506508 self ._push_defined_outputs ()
507- self .stack .flush (out , check_stack_bounds = check_stack_bounds )
509+ self .stack .flush (out )
508510
509511 def save (self , out : CWriter ) -> None :
510512 assert self .spilled >= 0
0 commit comments