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

Method visit_mapping_pattern

mypyc/irbuild/match.py:209–249  ·  view source on GitHub ↗
(self, pattern: MappingPattern)

Source from the content-addressed store, hash-verified

207 self.builder.add_bool_branch(cond, self.code_block, self.next_block)
208
209 def visit_mapping_pattern(self, pattern: MappingPattern) -> None:
210 is_dict = self.builder.call_c(supports_mapping_protocol, [self.subject], pattern.line)
211
212 self.builder.add_bool_branch(is_dict, self.code_block, self.next_block)
213
214 keys: list[Value] = []
215
216 for key, value in zip(pattern.keys, pattern.values):
217 self.builder.activate_block(self.code_block)
218 self.code_block = BasicBlock()
219
220 key_value = self.builder.accept(key)
221 keys.append(key_value)
222
223 exists = self.builder.call_c(mapping_has_key, [self.subject, key_value], pattern.line)
224
225 self.builder.add_bool_branch(exists, self.code_block, self.next_block)
226 self.builder.activate_block(self.code_block)
227 self.code_block = BasicBlock()
228
229 item = self.builder.gen_method_call(
230 self.subject, "__getitem__", [key_value], object_rprimitive, pattern.line
231 )
232
233 with self.enter_subpattern(item):
234 value.accept(self)
235
236 if pattern.rest:
237 self.builder.activate_block(self.code_block)
238 self.code_block = BasicBlock()
239
240 rest = self.builder.primitive_op(dict_copy, [self.subject], pattern.rest.line)
241
242 target = self.builder.get_assignment_target(pattern.rest)
243
244 self.builder.assign(target, rest, pattern.rest.line)
245
246 for i, key_name in enumerate(keys):
247 self.builder.call_c(dict_del_item, [rest, key_name], pattern.keys[i].line)
248
249 self.builder.goto(self.code_block)
250
251 def visit_sequence_pattern(self, seq_pattern: SequencePattern) -> None:
252 star_index, capture, patterns = prep_sequence_pattern(seq_pattern)

Callers

nothing calls this directly

Calls 14

enter_subpatternMethod · 0.95
BasicBlockClass · 0.90
zipFunction · 0.85
enumerateFunction · 0.85
appendMethod · 0.80
get_assignment_targetMethod · 0.80
call_cMethod · 0.45
add_bool_branchMethod · 0.45
activate_blockMethod · 0.45
acceptMethod · 0.45
gen_method_callMethod · 0.45
primitive_opMethod · 0.45

Tested by

no test coverage detected