Skip to content
Merged
Show file tree
Hide file tree
Changes from 1 commit
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Prev Previous commit
Next Next commit
Fix helper method return type -- it should be object
  • Loading branch information
JukkaL committed Jul 4, 2025
commit 7bdc1f54dcf9eef5b91954535ec1fa0f602b9122
2 changes: 1 addition & 1 deletion mypyc/irbuild/function.py
Original file line number Diff line number Diff line change
Expand Up @@ -261,7 +261,7 @@ def c() -> None:
)

# Re-enter the FuncItem and visit the body of the function this time.
gen_generator_func_body(builder, fn_info, sig, func_reg)
gen_generator_func_body(builder, fn_info, func_reg)
else:
func_ir, func_reg = gen_func_body(builder, sig, cdef, is_singledispatch)

Expand Down
30 changes: 12 additions & 18 deletions mypyc/irbuild/generator.py
Original file line number Diff line number Diff line change
Expand Up @@ -79,7 +79,7 @@ def gen_generator_func(


def gen_generator_func_body(
builder: IRBuilder, fn_info: FuncInfo, sig: FuncSignature, func_reg: Value | None
builder: IRBuilder, fn_info: FuncInfo, func_reg: Value | None
) -> None:
"""Generate IR based on the body of a generator function.

Expand All @@ -88,7 +88,7 @@ class that implements the function (each function gets a separate class).

Return the symbol table for the body.
"""
builder.enter(fn_info, ret_type=sig.ret_type)
builder.enter(fn_info, ret_type=object_rprimitive)
setup_env_for_generator_class(builder)

load_outer_envs(builder, builder.fn_info.generator_class)
Expand Down Expand Up @@ -117,7 +117,7 @@ class that implements the function (each function gets a separate class).

args, _, blocks, ret_type, fn_info = builder.leave()

add_methods_to_generator_class(builder, fn_info, sig, args, blocks, fitem.is_coroutine)
add_methods_to_generator_class(builder, fn_info, args, blocks, fitem.is_coroutine)

# Evaluate argument defaults in the surrounding scope, since we
# calculate them *once* when the function definition is evaluated.
Expand Down Expand Up @@ -153,12 +153,8 @@ def instantiate_generator_class(builder: IRBuilder) -> Value:


def setup_generator_class(builder: IRBuilder) -> ClassIR:
#name = f"{builder.fn_info.namespaced_name()}_gen"

m = builder.mapper
generator_class_ir = m.fdef_to_generator[builder.fn_info.fitem]
#generator_class_ir.name = name
#generator_class_ir.ctor.name = name
mapper = builder.mapper
generator_class_ir = mapper.fdef_to_generator[builder.fn_info.fitem]
if builder.fn_info.can_merge_generator_and_env_classes():
builder.fn_info.env_class = generator_class_ir
else:
Expand Down Expand Up @@ -218,16 +214,15 @@ def add_raise_exception_blocks_to_generator_class(builder: IRBuilder, line: int)
def add_methods_to_generator_class(
builder: IRBuilder,
fn_info: FuncInfo,
sig: FuncSignature,
arg_regs: list[Register],
blocks: list[BasicBlock],
is_coroutine: bool,
) -> None:
helper_fn_decl = add_helper_to_generator_class(builder, arg_regs, blocks, sig, fn_info)
add_next_to_generator_class(builder, fn_info, helper_fn_decl, sig)
add_send_to_generator_class(builder, fn_info, helper_fn_decl, sig)
helper_fn_decl = add_helper_to_generator_class(builder, arg_regs, blocks, fn_info)
add_next_to_generator_class(builder, fn_info, helper_fn_decl)
add_send_to_generator_class(builder, fn_info, helper_fn_decl)
add_iter_to_generator_class(builder, fn_info)
add_throw_to_generator_class(builder, fn_info, helper_fn_decl, sig)
add_throw_to_generator_class(builder, fn_info, helper_fn_decl)
add_close_to_generator_class(builder, fn_info)
if is_coroutine:
add_await_to_generator_class(builder, fn_info)
Expand All @@ -237,7 +232,6 @@ def add_helper_to_generator_class(
builder: IRBuilder,
arg_regs: list[Register],
blocks: list[BasicBlock],
sig: FuncSignature,
fn_info: FuncInfo,
) -> FuncDecl:
"""Generates a helper method for a generator class, called by '__next__' and 'throw'."""
Expand All @@ -259,7 +253,7 @@ def add_iter_to_generator_class(builder: IRBuilder, fn_info: FuncInfo) -> None:


def add_next_to_generator_class(
builder: IRBuilder, fn_info: FuncInfo, fn_decl: FuncDecl, sig: FuncSignature
builder: IRBuilder, fn_info: FuncInfo, fn_decl: FuncDecl
) -> None:
"""Generates the '__next__' method for a generator class."""
with builder.enter_method(fn_info.generator_class.ir, "__next__", object_rprimitive, fn_info):
Expand All @@ -276,7 +270,7 @@ def add_next_to_generator_class(


def add_send_to_generator_class(
builder: IRBuilder, fn_info: FuncInfo, fn_decl: FuncDecl, sig: FuncSignature
builder: IRBuilder, fn_info: FuncInfo, fn_decl: FuncDecl
) -> None:
"""Generates the 'send' method for a generator class."""
with builder.enter_method(fn_info.generator_class.ir, "send", object_rprimitive, fn_info):
Expand All @@ -294,7 +288,7 @@ def add_send_to_generator_class(


def add_throw_to_generator_class(
builder: IRBuilder, fn_info: FuncInfo, fn_decl: FuncDecl, sig: FuncSignature
builder: IRBuilder, fn_info: FuncInfo, fn_decl: FuncDecl
) -> None:
"""Generates the 'throw' method for a generator class."""
with builder.enter_method(fn_info.generator_class.ir, "throw", object_rprimitive, fn_info):
Expand Down
2 changes: 1 addition & 1 deletion mypyc/irbuild/prepare.py
Original file line number Diff line number Diff line change
Expand Up @@ -194,7 +194,7 @@ def prepare_func_def(
RuntimeArg("traceback", object_rprimitive),
RuntimeArg("arg", object_rprimitive),
),
RInstance(cir),
object_rprimitive,
)

helper_fn_decl = FuncDecl(
Expand Down