(
builder: IRBuilder, sig: FuncSignature, cdef: ClassDef | None, is_singledispatch: bool
)
| 287 | |
| 288 | |
| 289 | def gen_func_body( |
| 290 | builder: IRBuilder, sig: FuncSignature, cdef: ClassDef | None, is_singledispatch: bool |
| 291 | ) -> tuple[FuncIR, Value | None]: |
| 292 | load_env_registers(builder) |
| 293 | gen_arg_defaults(builder) |
| 294 | if builder.fn_info.contains_nested: |
| 295 | finalize_env_class(builder) |
| 296 | add_vars_to_env(builder) |
| 297 | builder.accept(builder.fn_info.fitem.body) |
| 298 | builder.maybe_add_implicit_return() |
| 299 | |
| 300 | # Hang on to the local symbol table for a while, since we use it |
| 301 | # to calculate argument defaults below. |
| 302 | symtable = builder.symtables[-1] |
| 303 | |
| 304 | args, _, blocks, ret_type, fn_info = builder.leave() |
| 305 | |
| 306 | func_ir, func_reg = gen_func_ir(builder, args, blocks, sig, fn_info, cdef, is_singledispatch) |
| 307 | |
| 308 | # Evaluate argument defaults in the surrounding scope, since we |
| 309 | # calculate them *once* when the function definition is evaluated. |
| 310 | calculate_arg_defaults(builder, fn_info, func_reg, symtable) |
| 311 | return func_ir, func_reg |
| 312 | |
| 313 | |
| 314 | def has_nested_func_self_reference(builder: IRBuilder, fitem: FuncItem) -> bool: |
no test coverage detected
searching dependent graphs…