@@ -224,13 +224,14 @@ def array_or_scalar(var: StackItem | Local) -> str:
224224 return "array" if var .is_array () else "scalar"
225225
226226class Stack :
227- def __init__ (self ) -> None :
227+ def __init__ (self , extract_bits : bool = True ) -> None :
228228 self .top_offset = StackOffset .empty ()
229229 self .base_offset = StackOffset .empty ()
230230 self .variables : list [Local ] = []
231231 self .defined : set [str ] = set ()
232+ self .extract_bits = extract_bits
232233
233- def pop (self , var : StackItem , extract_bits : bool = True ) -> tuple [str , Local ]:
234+ def pop (self , var : StackItem ) -> tuple [str , Local ]:
234235 self .top_offset .pop (var )
235236 indirect = "&" if var .is_array () else ""
236237 if self .variables :
@@ -272,7 +273,7 @@ def pop(self, var: StackItem, extract_bits: bool = True) -> tuple[str, Local]:
272273 return "" , Local .unused (var )
273274 self .defined .add (var .name )
274275 cast = f"({ var .type } )" if (not indirect and var .type ) else ""
275- bits = ".bits" if cast and extract_bits else ""
276+ bits = ".bits" if cast and self . extract_bits else ""
276277 assign = f"{ var .name } = { cast } { indirect } stack_pointer[{ self .base_offset .to_c ()} ]{ bits } ;"
277278 if var .condition :
278279 if var .condition == "1" :
@@ -315,7 +316,7 @@ def _adjust_stack_pointer(self, out: CWriter, number: str) -> None:
315316 out .emit ("assert(WITHIN_STACK_BOUNDS());\n " )
316317
317318 def flush (
318- self , out : CWriter , cast_type : str = "uintptr_t" , extract_bits : bool = True
319+ self , out : CWriter , cast_type : str = "uintptr_t"
319320 ) -> None :
320321 out .start_line ()
321322 var_offset = self .base_offset .copy ()
@@ -324,7 +325,7 @@ def flush(
324325 var .defined and
325326 not var .in_memory
326327 ):
327- Stack ._do_emit (out , var .item , var_offset , cast_type , extract_bits )
328+ Stack ._do_emit (out , var .item , var_offset , cast_type , self . extract_bits )
328329 var .in_memory = True
329330 var_offset .push (var .item )
330331 number = self .top_offset .to_c ()
@@ -346,7 +347,7 @@ def as_comment(self) -> str:
346347 )
347348
348349 def copy (self ) -> "Stack" :
349- other = Stack ()
350+ other = Stack (self . extract_bits )
350351 other .top_offset = self .top_offset .copy ()
351352 other .base_offset = self .base_offset .copy ()
352353 other .variables = [var .copy () for var in self .variables ]
@@ -507,10 +508,10 @@ def locals_cached(self) -> bool:
507508 return True
508509 return False
509510
510- def flush (self , out : CWriter , cast_type : str = "uintptr_t" , extract_bits : bool = True ) -> None :
511+ def flush (self , out : CWriter , cast_type : str = "uintptr_t" ) -> None :
511512 self .clear_dead_inputs ()
512513 self ._push_defined_outputs ()
513- self .stack .flush (out , cast_type , extract_bits )
514+ self .stack .flush (out , cast_type )
514515
515516 def save (self , out : CWriter ) -> None :
516517 assert self .spilled >= 0
@@ -530,12 +531,12 @@ def reload(self, out: CWriter) -> None:
530531 out .emit ("stack_pointer = _PyFrame_GetStackPointer(frame);\n " )
531532
532533 @staticmethod
533- def for_uop (stack : Stack , uop : Uop , extract_bits : bool = True ) -> tuple [list [str ], "Storage" ]:
534+ def for_uop (stack : Stack , uop : Uop ) -> tuple [list [str ], "Storage" ]:
534535 code_list : list [str ] = []
535536 inputs : list [Local ] = []
536537 peeks : list [Local ] = []
537538 for input in reversed (uop .stack .inputs ):
538- code , local = stack .pop (input , extract_bits )
539+ code , local = stack .pop (input )
539540 code_list .append (code )
540541 if input .peek :
541542 peeks .append (local )
0 commit comments