MCPcopy Index your code
hub / github.com/python/cpython / close_inputs

Method close_inputs

Tools/cases_generator/stack.py:658–747  ·  view source on GitHub ↗
(self, out: CWriter)

Source from the content-addressed store, hash-verified

656 out.emit(self.as_comment() + "\n")
657
658 def close_inputs(self, out: CWriter) -> None:
659
660 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)
695
696 self.clear_dead_inputs()
697 if not self.inputs:
698 return
699 lowest = self.inputs[0]
700 output: Local | None = None
701 for var in self.outputs:
702 if var.is_array():
703 if len(self.inputs) > 1:
704 raise StackError("Cannot call DECREF_INPUTS with array output and more than one input")
705 output = var
706 elif var.in_local:
707 if output is not None:
708 raise StackError("Cannot call DECREF_INPUTS with more than one live output")
709 output = var
710 if output is not None:
711 if output.is_array():
712 assert len(self.inputs) == 1
713 self.stack.drop(self.inputs[0].item, False)
714 self.stack.push(output)
715 self.stack.flush(out)

Callers 1

decref_inputsMethod · 0.80

Calls 9

clear_dead_inputsMethod · 0.95
StackErrorClass · 0.85
var_sizeFunction · 0.85
dropMethod · 0.80
is_arrayMethod · 0.45
pushMethod · 0.45
flushMethod · 0.45
killMethod · 0.45
popMethod · 0.45

Tested by

no test coverage detected