(self, pattern: MappingPattern)
| 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) |
nothing calls this directly
no test coverage detected