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

Class Tier2Emitter

Tools/cases_generator/tier2_generator.py:65–207  ·  view source on GitHub ↗

Source from the content-addressed store, hash-verified

63
64
65class Tier2Emitter(Emitter):
66
67 def __init__(self, out: CWriter, labels: dict[str, Label], exit_cache_depth: int):
68 super().__init__(out, labels)
69 self._replacers["oparg"] = self.oparg
70 self._replacers["IP_OFFSET_OF"] = self.ip_offset_of
71 self.exit_cache_depth = exit_cache_depth
72
73 def goto_error(self, offset: int, storage: Storage) -> str:
74 # To do: Add jump targets for popping values.
75 if offset != 0:
76 storage.copy().flush(self.out)
77 else:
78 storage.stack.copy().flush(self.out)
79 self.emit("SET_CURRENT_CACHED_VALUES(0);\n")
80 return "JUMP_TO_ERROR();"
81
82 def exit_if(
83 self,
84 tkn: Token,
85 tkn_iter: TokenIterator,
86 uop: CodeSection,
87 storage: Storage,
88 inst: Instruction | None,
89 ) -> bool:
90 self.out.emit_at("if ", tkn)
91 lparen = next(tkn_iter)
92 self.emit(lparen)
93 first_tkn = tkn_iter.peek()
94 emit_to(self.out, tkn_iter, "RPAREN")
95 next(tkn_iter) # Semi colon
96 self.emit(") {\n")
97 self.emit("UOP_STAT_INC(uopcode, miss);\n")
98 storage = storage.copy()
99 self.cache_items(storage.stack, self.exit_cache_depth, False)
100 storage.stack.flush(self.out)
101 self.emit("JUMP_TO_JUMP_TARGET();\n")
102 self.emit("}\n")
103 return not always_true(first_tkn)
104
105 periodic_if = deopt_if = exit_if
106
107 def oparg(
108 self,
109 tkn: Token,
110 tkn_iter: TokenIterator,
111 uop: CodeSection,
112 storage: Storage,
113 inst: Instruction | None,
114 ) -> bool:
115 if not uop.name.endswith("_0") and not uop.name.endswith("_1"):
116 self.emit(tkn)
117 return True
118 amp = next(tkn_iter)
119 if amp.text != "&":
120 self.emit(tkn)
121 self.emit(amp)
122 return True

Callers 1

generate_tier2Function · 0.85

Calls

no outgoing calls

Tested by

no test coverage detected

Used in the wild real call sites across dependent graphs

searching dependent graphs…