From df676ff6e9d59841f2208492c2ca7c714f31924c Mon Sep 17 00:00:00 2001 From: Gaith Hallak Date: Fri, 26 Nov 2021 19:03:41 +0200 Subject: [PATCH] Report undefined interface errors before checking implemented interfaces --- src/aeso_ast_infer_types.erl | 2 ++ test/aeso_compiler_tests.erl | 4 ++++ ...contract_interface_polymorphism_undefined_interface.aes | 5 +++++ .../contract_polymorphism_undefined_interface.aes | 7 ++----- 4 files changed, 13 insertions(+), 5 deletions(-) create mode 100644 test/contracts/contract_interface_polymorphism_undefined_interface.aes diff --git a/src/aeso_ast_infer_types.erl b/src/aeso_ast_infer_types.erl index bd9b24a..f034021 100644 --- a/src/aeso_ast_infer_types.erl +++ b/src/aeso_ast_infer_types.erl @@ -855,6 +855,8 @@ infer1(Env, [{Contract, Ann, ConName, Impls, Code} | Rest], Acc, Options) _ -> ok end end, Impls), + destroy_and_report_type_errors(Env), + create_type_errors(), case What of contract -> ImplementedInterfaces = [proplists:get_value(Name, AllInterfaces) || Name <- ImplsNames], diff --git a/test/aeso_compiler_tests.erl b/test/aeso_compiler_tests.erl index 189d6ff..96eac37 100644 --- a/test/aeso_compiler_tests.erl +++ b/test/aeso_compiler_tests.erl @@ -844,6 +844,10 @@ failing_contracts() -> "Unimplemented function f from the interface J in the contract C">> ]) , ?TYPE_ERROR(contract_polymorphism_undefined_interface, + [<> + ]) + , ?TYPE_ERROR(contract_interface_polymorphism_undefined_interface, [<> ]) diff --git a/test/contracts/contract_interface_polymorphism_undefined_interface.aes b/test/contracts/contract_interface_polymorphism_undefined_interface.aes new file mode 100644 index 0000000..0fc47ac --- /dev/null +++ b/test/contracts/contract_interface_polymorphism_undefined_interface.aes @@ -0,0 +1,5 @@ +contract interface I : H = + entrypoint f : () => unit + +contract C = + entrypoint g() = () diff --git a/test/contracts/contract_polymorphism_undefined_interface.aes b/test/contracts/contract_polymorphism_undefined_interface.aes index 0fc47ac..ba42562 100644 --- a/test/contracts/contract_polymorphism_undefined_interface.aes +++ b/test/contracts/contract_polymorphism_undefined_interface.aes @@ -1,5 +1,2 @@ -contract interface I : H = - entrypoint f : () => unit - -contract C = - entrypoint g() = () +contract C : I = + entrypoint f() = ()