Generate blocks for arguments that have default values. If the passed value is an error value, then assign the default value to the argument.
(builder: IRBuilder)
| 1608 | |
| 1609 | |
| 1610 | def gen_arg_defaults(builder: IRBuilder) -> None: |
| 1611 | """Generate blocks for arguments that have default values. |
| 1612 | |
| 1613 | If the passed value is an error value, then assign the default |
| 1614 | value to the argument. |
| 1615 | """ |
| 1616 | fitem = builder.fn_info.fitem |
| 1617 | nb = 0 |
| 1618 | for arg in fitem.arguments: |
| 1619 | if arg.initializer: |
| 1620 | target = builder.lookup(arg.variable) |
| 1621 | |
| 1622 | def get_default() -> Value: |
| 1623 | assert arg.initializer is not None |
| 1624 | |
| 1625 | # If it is constant, don't bother storing it |
| 1626 | if is_constant(arg.initializer): |
| 1627 | return builder.accept(arg.initializer) |
| 1628 | |
| 1629 | # Because gen_arg_defaults runs before calculate_arg_defaults, we |
| 1630 | # add the static/attribute to final_names/the class here. |
| 1631 | elif not builder.fn_info.is_nested: |
| 1632 | name = fitem.fullname + "." + arg.variable.name |
| 1633 | builder.final_names.append((name, target.type)) |
| 1634 | return builder.add(LoadStatic(target.type, name, builder.module_name)) |
| 1635 | else: |
| 1636 | name = arg.variable.name |
| 1637 | builder.fn_info.callable_class.ir.attributes[name] = target.type |
| 1638 | return builder.add( |
| 1639 | GetAttr(builder.fn_info.callable_class.self_reg, name, arg.line) |
| 1640 | ) |
| 1641 | |
| 1642 | assert isinstance(target, AssignmentTargetRegister), target |
| 1643 | reg = target.register |
| 1644 | if not reg.type.error_overlap: |
| 1645 | builder.assign_if_null(target.register, get_default, arg.initializer.line) |
| 1646 | else: |
| 1647 | builder.assign_if_bitmap_unset( |
| 1648 | target.register, get_default, nb, arg.initializer.line |
| 1649 | ) |
| 1650 | nb += 1 |
| 1651 | |
| 1652 | |
| 1653 | def remangle_redefinition_name(name: str) -> str: |
no test coverage detected
searching dependent graphs…