diff --git a/src/aeso_ast_infer_types.erl b/src/aeso_ast_infer_types.erl index a586460..7b2a399 100644 --- a/src/aeso_ast_infer_types.erl +++ b/src/aeso_ast_infer_types.erl @@ -3768,7 +3768,7 @@ mk_error({unpreserved_payablity, Kind, ContractCon, InterfaceCon}) -> contract -> "contract"; contract_interface -> "interface" end, - Msg = io_lib:format("Non-payable ~s ~s cannot implement payable interface ~s", + Msg = io_lib:format("Non-payable ~s `~s` cannot implement payable interface `~s`", [KindStr, name(ContractCon), name(InterfaceCon)]), mk_t_err(pos(ContractCon), Msg); mk_error(Err) -> diff --git a/test/aeso_compiler_tests.erl b/test/aeso_compiler_tests.erl index 67ada47..81f2cef 100644 --- a/test/aeso_compiler_tests.erl +++ b/test/aeso_compiler_tests.erl @@ -1155,6 +1155,26 @@ failing_contracts() -> "to arguments\n" " `Chain.create : (value : int, var_args) => 'c`">> ]) + , ?TYPE_ERROR(polymorphism_add_stateful_entrypoint, + [<> + ]) + , ?TYPE_ERROR(polymorphism_change_entrypoint_to_function, + [<> + ]) + , ?TYPE_ERROR(polymorphism_non_payable_contract_implement_payable, + [<> + ]) + , ?TYPE_ERROR(polymorphism_non_payable_interface_implement_payable, + [<> + ]) + , ?TYPE_ERROR(polymorphism_remove_payable_entrypoint, + [<> + ]) ]. validation_test_() -> diff --git a/test/contracts/polymorphism_add_stateful_entrypoint.aes b/test/contracts/polymorphism_add_stateful_entrypoint.aes new file mode 100644 index 0000000..26b279c --- /dev/null +++ b/test/contracts/polymorphism_add_stateful_entrypoint.aes @@ -0,0 +1,5 @@ +contract interface I = + entrypoint f : () => int + +contract C : I = + stateful entrypoint f() = 1 diff --git a/test/contracts/polymorphism_change_entrypoint_to_function.aes b/test/contracts/polymorphism_change_entrypoint_to_function.aes new file mode 100644 index 0000000..38c9614 --- /dev/null +++ b/test/contracts/polymorphism_change_entrypoint_to_function.aes @@ -0,0 +1,6 @@ +contract interface I = + entrypoint f : () => int + +contract C : I = + entrypoint init() = () + function f() = 1 diff --git a/test/contracts/polymorphism_non_payable_contract_implement_payable.aes b/test/contracts/polymorphism_non_payable_contract_implement_payable.aes new file mode 100644 index 0000000..59c0fca --- /dev/null +++ b/test/contracts/polymorphism_non_payable_contract_implement_payable.aes @@ -0,0 +1,5 @@ +payable contract interface I = + payable entrypoint f : () => int + +contract C : I = + entrypoint f() = 123 diff --git a/test/contracts/polymorphism_non_payable_interface_implement_payable.aes b/test/contracts/polymorphism_non_payable_interface_implement_payable.aes new file mode 100644 index 0000000..3849ea5 --- /dev/null +++ b/test/contracts/polymorphism_non_payable_interface_implement_payable.aes @@ -0,0 +1,8 @@ +payable contract interface I = + payable entrypoint f : () => int + +contract interface H : I = + payable entrypoint f : () => int + +payable contract C : H = + entrypoint f() = 123 diff --git a/test/contracts/polymorphism_remove_payable_entrypoint.aes b/test/contracts/polymorphism_remove_payable_entrypoint.aes new file mode 100644 index 0000000..b916ca1 --- /dev/null +++ b/test/contracts/polymorphism_remove_payable_entrypoint.aes @@ -0,0 +1,5 @@ +contract interface I = + payable entrypoint f : () => int + +contract C : I = + entrypoint f() = 1