Skip to content

Commit c633ddf

Browse files
undo code generator changes
1 parent b2668b9 commit c633ddf

File tree

2 files changed

+39
-50
lines changed

2 files changed

+39
-50
lines changed

Tools/cases_generator/generators_common.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -255,7 +255,7 @@ def error_if(
255255
emit_to(self.out, tkn_iter, "RPAREN")
256256
self.out.emit(") {\n")
257257
next(tkn_iter) # Semi colon
258-
storage.clear_inputs_and_close_live_ones(self.out)
258+
storage.clear_inputs("at ERROR_IF")
259259

260260
c_offset = storage.stack.sp_offset()
261261
try:

Tools/cases_generator/stack.py

Lines changed: 38 additions & 49 deletions
Original file line numberDiff line numberDiff line change
@@ -445,7 +445,6 @@ class Storage:
445445
peeks: int
446446
check_liveness: bool
447447
spilled: int = 0
448-
tmp_defined: bool = False
449448

450449
@staticmethod
451450
def needs_defining(var: Local) -> bool:
@@ -475,16 +474,6 @@ def clear_inputs(self, reason:str) -> None:
475474
)
476475
self.stack.drop(tos.item, self.check_liveness)
477476

478-
def clear_inputs_and_close_live_ones(self, out: CWriter) -> None:
479-
while len(self.inputs) > self.peeks:
480-
tos = self.inputs.pop()
481-
if self.is_live(tos):
482-
self.close_variable(out, tos, "PyStackRef_NULL")
483-
tos.kill()
484-
out.start_line()
485-
self.stack.drop(tos.item, self.check_liveness)
486-
487-
488477
def clear_dead_inputs(self) -> None:
489478
live = ""
490479
while len(self.inputs) > self.peeks:
@@ -666,43 +655,43 @@ def _print(self, out: CWriter) -> None:
666655
if PRINT_STACKS:
667656
out.emit(self.as_comment() + "\n")
668657

669-
def close_named(self, out: CWriter, close: str, name: str, overwrite: str) -> None:
670-
if overwrite:
671-
if not self.tmp_defined:
672-
out.emit("_PyStackRef ")
673-
self.tmp_defined = True
674-
out.emit(f"tmp = {name};\n")
675-
out.emit(f"{name} = {overwrite};\n")
676-
self.stack.save_variables(out)
677-
out.emit(f"{close}(tmp);\n")
678-
else:
679-
out.emit(f"{close}({name});\n")
680-
681-
def close_variable(self, out: CWriter, var: Local, overwrite: str) -> None:
682-
close = "PyStackRef_CLOSE"
683-
if "null" in var.name:
684-
close = "PyStackRef_XCLOSE"
685-
var.memory_offset = None
686-
self.save(out)
687-
out.start_line()
688-
if var.size:
689-
if var.size == "1":
690-
self.close_named(out, close, f"{var.name}[0]", overwrite)
691-
else:
692-
if overwrite and not self.tmp_defined:
693-
out.emit("_PyStackRef tmp;\n")
694-
self.tmp_defined = True
695-
out.emit(f"for (int _i = {var.size}; --_i >= 0;) {{\n")
696-
self.close_named(out, close, f"{var.name}[_i]", overwrite)
697-
out.emit("}\n")
698-
else:
699-
self.close_named(out, close, var.name, overwrite)
700-
self.reload(out)
701-
702-
703658
def close_inputs(self, out: CWriter) -> None:
704659

705660
tmp_defined = False
661+
def close_named(close: str, name: str, overwrite: str) -> None:
662+
nonlocal tmp_defined
663+
if overwrite:
664+
if not tmp_defined:
665+
out.emit("_PyStackRef ")
666+
tmp_defined = True
667+
out.emit(f"tmp = {name};\n")
668+
out.emit(f"{name} = {overwrite};\n")
669+
self.stack.save_variables(out)
670+
out.emit(f"{close}(tmp);\n")
671+
else:
672+
out.emit(f"{close}({name});\n")
673+
674+
def close_variable(var: Local, overwrite: str) -> None:
675+
nonlocal tmp_defined
676+
close = "PyStackRef_CLOSE"
677+
if "null" in var.name:
678+
close = "PyStackRef_XCLOSE"
679+
var.memory_offset = None
680+
self.save(out)
681+
out.start_line()
682+
if var.size:
683+
if var.size == "1":
684+
close_named(close, f"{var.name}[0]", overwrite)
685+
else:
686+
if overwrite and not tmp_defined:
687+
out.emit("_PyStackRef tmp;\n")
688+
tmp_defined = True
689+
out.emit(f"for (int _i = {var.size}; --_i >= 0;) {{\n")
690+
close_named(close, f"{var.name}[_i]", overwrite)
691+
out.emit("}\n")
692+
else:
693+
close_named(close, var.name, overwrite)
694+
self.reload(out)
706695

707696
self.clear_dead_inputs()
708697
if not self.inputs:
@@ -724,20 +713,20 @@ def close_inputs(self, out: CWriter) -> None:
724713
self.stack.drop(self.inputs[0].item, False)
725714
self.stack.push(output)
726715
self.stack.flush(out)
727-
self.close_variable(out, self.inputs[0], "")
716+
close_variable(self.inputs[0], "")
728717
self.stack.drop(output.item, self.check_liveness)
729718
self.inputs = []
730719
return
731720
if var_size(lowest.item) != var_size(output.item):
732721
raise StackError("Cannot call DECREF_INPUTS with live output not matching first input size")
733722
self.stack.flush(out)
734723
lowest.in_local = True
735-
self.close_variable(out, lowest, output.name)
724+
close_variable(lowest, output.name)
736725
assert lowest.memory_offset is not None
737726
for input in reversed(self.inputs[1:]):
738-
self.close_variable(out, input, "PyStackRef_NULL")
727+
close_variable(input, "PyStackRef_NULL")
739728
if output is None:
740-
self.close_variable(out, self.inputs[0], "PyStackRef_NULL")
729+
close_variable(self.inputs[0], "PyStackRef_NULL")
741730
for input in reversed(self.inputs[1:]):
742731
input.kill()
743732
self.stack.drop(input.item, self.check_liveness)

0 commit comments

Comments
 (0)