@@ -224,12 +224,13 @@ def array_or_scalar(var: StackItem | Local) -> str:
224224 return "array" if var .is_array () else "scalar"
225225
226226class Stack :
227- def __init__ (self , extract_bits : bool = True ) -> None :
227+ def __init__ (self , extract_bits : bool = True , cast_type : str = "uintptr_t" ) -> None :
228228 self .top_offset = StackOffset .empty ()
229229 self .base_offset = StackOffset .empty ()
230230 self .variables : list [Local ] = []
231231 self .defined : set [str ] = set ()
232232 self .extract_bits = extract_bits
233+ self .cast_type = cast_type
233234
234235 def pop (self , var : StackItem ) -> tuple [str , Local ]:
235236 self .top_offset .pop (var )
@@ -298,8 +299,8 @@ def _do_emit(
298299 out : CWriter ,
299300 var : StackItem ,
300301 base_offset : StackOffset ,
301- cast_type : str = "uintptr_t" ,
302- extract_bits : bool = True ,
302+ cast_type : str ,
303+ extract_bits : bool ,
303304 ) -> None :
304305 cast = f"({ cast_type } )" if var .type else ""
305306 bits = ".bits" if cast and extract_bits else ""
@@ -315,17 +316,15 @@ def _adjust_stack_pointer(self, out: CWriter, number: str) -> None:
315316 out .emit (f"stack_pointer += { number } ;\n " )
316317 out .emit ("assert(WITHIN_STACK_BOUNDS());\n " )
317318
318- def flush (
319- self , out : CWriter , cast_type : str = "uintptr_t"
320- ) -> None :
319+ def flush (self , out : CWriter ) -> None :
321320 out .start_line ()
322321 var_offset = self .base_offset .copy ()
323322 for var in self .variables :
324323 if (
325324 var .defined and
326325 not var .in_memory
327326 ):
328- Stack ._do_emit (out , var .item , var_offset , cast_type , self .extract_bits )
327+ Stack ._do_emit (out , var .item , var_offset , self . cast_type , self .extract_bits )
329328 var .in_memory = True
330329 var_offset .push (var .item )
331330 number = self .top_offset .to_c ()
@@ -347,7 +346,7 @@ def as_comment(self) -> str:
347346 )
348347
349348 def copy (self ) -> "Stack" :
350- other = Stack (self .extract_bits )
349+ other = Stack (self .extract_bits , self . cast_type )
351350 other .top_offset = self .top_offset .copy ()
352351 other .base_offset = self .base_offset .copy ()
353352 other .variables = [var .copy () for var in self .variables ]
@@ -508,10 +507,10 @@ def locals_cached(self) -> bool:
508507 return True
509508 return False
510509
511- def flush (self , out : CWriter , cast_type : str = "uintptr_t" ) -> None :
510+ def flush (self , out : CWriter ) -> None :
512511 self .clear_dead_inputs ()
513512 self ._push_defined_outputs ()
514- self .stack .flush (out , cast_type )
513+ self .stack .flush (out )
515514
516515 def save (self , out : CWriter ) -> None :
517516 assert self .spilled >= 0
@@ -637,3 +636,4 @@ def as_comment(self) -> str:
637636 outputs = ", " .join ([var .compact_str () for var in self .outputs ])
638637 peeks = ", " .join ([var .name for var in self .peeks ])
639638 return f"{ stack_comment [:- 2 ]} { next_line } inputs: { inputs } { next_line } outputs: { outputs } { next_line } peeks: { peeks } */"
639+
0 commit comments