(builder: IRBuilder, ir: ClassIR, expr: CallExpr, callee: MemberExpr)
| 479 | |
| 480 | |
| 481 | def call_classmethod(builder: IRBuilder, ir: ClassIR, expr: CallExpr, callee: MemberExpr) -> Value: |
| 482 | decl = ir.method_decl(callee.name) |
| 483 | args = [] |
| 484 | arg_kinds, arg_names = expr.arg_kinds.copy(), expr.arg_names.copy() |
| 485 | # Add the class argument for class methods in extension classes |
| 486 | if decl.kind == FUNC_CLASSMETHOD and ir.is_ext_class: |
| 487 | args.append(builder.load_native_type_object(ir.fullname)) |
| 488 | arg_kinds.insert(0, ARG_POS) |
| 489 | arg_names.insert(0, None) |
| 490 | args += [builder.accept(arg) for arg in expr.args] |
| 491 | |
| 492 | if ir.is_ext_class: |
| 493 | return builder.builder.call(decl, args, arg_kinds, arg_names, expr.line) |
| 494 | else: |
| 495 | obj = builder.accept(callee.expr) |
| 496 | return builder.gen_method_call( |
| 497 | obj, |
| 498 | callee.name, |
| 499 | args, |
| 500 | builder.node_type(expr), |
| 501 | expr.line, |
| 502 | expr.arg_kinds, |
| 503 | expr.arg_names, |
| 504 | ) |
| 505 | |
| 506 | |
| 507 | def translate_super_method_call(builder: IRBuilder, expr: CallExpr, callee: SuperExpr) -> Value: |
no test coverage detected
searching dependent graphs…