MCPcopy Index your code
hub / github.com/python/mypy / visit_class_pattern

Method visit_class_pattern

mypyc/irbuild/match.py:132–181  ·  view source on GitHub ↗
(self, pattern: ClassPattern)

Source from the content-addressed store, hash-verified

130 self.builder.goto(self.next_block)
131
132 def visit_class_pattern(self, pattern: ClassPattern) -> None:
133 # TODO: use faster instance check for native classes (while still
134 # making sure to account for inheritance)
135 isinstance_op = (
136 fast_isinstance_op
137 if self.builder.is_builtin_ref_expr(pattern.class_ref)
138 else slow_isinstance_op
139 )
140
141 cond = self.builder.primitive_op(
142 isinstance_op, [self.subject, self.builder.accept(pattern.class_ref)], pattern.line
143 )
144
145 self.builder.add_bool_branch(cond, self.code_block, self.next_block)
146
147 self.bind_as_pattern(self.subject, new_block=True)
148
149 if pattern.positionals:
150 if pattern.class_ref.fullname in MATCHABLE_BUILTINS:
151 self.builder.activate_block(self.code_block)
152 self.code_block = BasicBlock()
153
154 pattern.positionals[0].accept(self)
155
156 return
157
158 node = pattern.class_ref.node
159 assert isinstance(node, TypeInfo), node
160 match_args = extract_dunder_match_args_names(node)
161
162 for i, expr in enumerate(pattern.positionals):
163 self.builder.activate_block(self.code_block)
164 self.code_block = BasicBlock()
165
166 # TODO: use faster "get_attr" method instead when calling on native or
167 # builtin objects
168 positional = self.builder.py_get_attr(self.subject, match_args[i], expr.line)
169
170 with self.enter_subpattern(positional):
171 expr.accept(self)
172
173 for key, value in zip(pattern.keyword_keys, pattern.keyword_values):
174 self.builder.activate_block(self.code_block)
175 self.code_block = BasicBlock()
176
177 # TODO: same as above "get_attr" comment
178 attr = self.builder.py_get_attr(self.subject, key, value.line)
179
180 with self.enter_subpattern(attr):
181 value.accept(self)
182
183 def visit_as_pattern(self, pattern: AsPattern) -> None:
184 if pattern.pattern:

Callers

nothing calls this directly

Calls 13

bind_as_patternMethod · 0.95
enter_subpatternMethod · 0.95
BasicBlockClass · 0.90
isinstanceFunction · 0.85
enumerateFunction · 0.85
zipFunction · 0.85
is_builtin_ref_exprMethod · 0.80
primitive_opMethod · 0.45
acceptMethod · 0.45
add_bool_branchMethod · 0.45
activate_blockMethod · 0.45

Tested by

no test coverage detected