diff --git a/guppylang/module.py b/guppylang/module.py index beb5318e..c4e2a255 100644 --- a/guppylang/module.py +++ b/guppylang/module.py @@ -296,6 +296,7 @@ def check(self) -> None: for method_def in defn.generated_methods(): generated[method_def.id] = method_def self._globals.impls[defn.id][method_def.name] = method_def.id + self._globals.defs.update(generated) # Now, we can check all other definitions other_defs = self._check_defs( diff --git a/tests/integration/test_redefinition.py b/tests/integration/test_redefinition.py index b1545e8a..00ae24a4 100644 --- a/tests/integration/test_redefinition.py +++ b/tests/integration/test_redefinition.py @@ -36,6 +36,33 @@ def foo(self: "Test") -> int: validate(module.compile()) +def test_redefine_after_error(validate): + module = GuppyModule("test") + + @guppy.struct(module) + class Foo: + x: int + + @guppy(module) + def foo() -> int: + return y + + try: + module.compile() + except: + pass + + @guppy.struct(module) + class Foo: + x: int + + @guppy(module) + def foo(f: Foo) -> int: + return f.x + + validate(module.compile()) + + @pytest.mark.skip("See https://github.com/CQCL/guppylang/issues/456") def test_struct_redefinition(validate): module = GuppyModule("test")