From bf29ae7669cfebb440be2fa625e1c173bb7e6238 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Kamil=20=C5=9Aliwak?= Date: Fri, 20 Jan 2023 11:22:57 +0100 Subject: [PATCH] fixup! User-defined operators: Tests --- ...ling_operator_that_makes_external_call.sol | 1 - ...operator_that_makes_pure_external_call.sol | 19 +++++++++++++++++++ .../defining_operator_for_contract.sol | 4 ++-- .../defining_operator_for_interface.sol | 2 +- .../defining_operator_for_library.sol | 2 +- ...or_for_wildcard_type_at_contract_level.sol | 4 ++-- ...th_contract_function_at_contract_level.sol | 2 +- ...r_with_contract_function_at_file_level.sol | 2 +- ...menting_operator_with_function_pointer.sol | 4 ++-- ...perator_with_library_function_external.sol | 4 ++-- 10 files changed, 31 insertions(+), 13 deletions(-) create mode 100644 test/libsolidity/syntaxTests/operators/userDefined/calling_operator_that_makes_pure_external_call.sol diff --git a/test/libsolidity/semanticTests/operators/userDefined/calling_operator_that_makes_external_call.sol b/test/libsolidity/semanticTests/operators/userDefined/calling_operator_that_makes_external_call.sol index c8f32e6f5..dedf88b56 100644 --- a/test/libsolidity/semanticTests/operators/userDefined/calling_operator_that_makes_external_call.sol +++ b/test/libsolidity/semanticTests/operators/userDefined/calling_operator_that_makes_external_call.sol @@ -2,7 +2,6 @@ type Int is int16; using {add as +} for Int; - function add(Int, Int) returns (Int) { B b = new B(); return b.f(); diff --git a/test/libsolidity/syntaxTests/operators/userDefined/calling_operator_that_makes_pure_external_call.sol b/test/libsolidity/syntaxTests/operators/userDefined/calling_operator_that_makes_pure_external_call.sol new file mode 100644 index 000000000..3514120f4 --- /dev/null +++ b/test/libsolidity/syntaxTests/operators/userDefined/calling_operator_that_makes_pure_external_call.sol @@ -0,0 +1,19 @@ +type Int is int16; + +using {add as +} for Int; + +function add(Int, Int) pure returns (Int) { + return b.f(); +} + +contract B { + function f() external pure returns (Int) {} +} + +contract C { + function test() public returns (Int) { + return Int.wrap(0) + Int.wrap(0); + } +} +// ---- +// DeclarationError 7576: (102-103): Undeclared identifier. diff --git a/test/libsolidity/syntaxTests/operators/userDefined/defining_operator_for_contract.sol b/test/libsolidity/syntaxTests/operators/userDefined/defining_operator_for_contract.sol index 7996139ea..781e202a1 100644 --- a/test/libsolidity/syntaxTests/operators/userDefined/defining_operator_for_contract.sol +++ b/test/libsolidity/syntaxTests/operators/userDefined/defining_operator_for_contract.sol @@ -1,8 +1,8 @@ using {fc as +} for C; using {fa as +} for A; -function fc(C, C) returns (C) {} -function fa(A, A) returns (A) {} +function fc(C, C) pure returns (C) {} +function fa(A, A) pure returns (A) {} contract C {} abstract contract A {} diff --git a/test/libsolidity/syntaxTests/operators/userDefined/defining_operator_for_interface.sol b/test/libsolidity/syntaxTests/operators/userDefined/defining_operator_for_interface.sol index 6dfc0f862..4db808a96 100644 --- a/test/libsolidity/syntaxTests/operators/userDefined/defining_operator_for_interface.sol +++ b/test/libsolidity/syntaxTests/operators/userDefined/defining_operator_for_interface.sol @@ -1,6 +1,6 @@ using {f as +} for I; -function f(I, I) returns (I) {} +function f(I, I) pure returns (I) {} interface I {} // ---- diff --git a/test/libsolidity/syntaxTests/operators/userDefined/defining_operator_for_library.sol b/test/libsolidity/syntaxTests/operators/userDefined/defining_operator_for_library.sol index 4ab32f5a3..560d8126f 100644 --- a/test/libsolidity/syntaxTests/operators/userDefined/defining_operator_for_library.sol +++ b/test/libsolidity/syntaxTests/operators/userDefined/defining_operator_for_library.sol @@ -1,6 +1,6 @@ using {f as +} for L; -function f() {} +function f() pure {} library L {} // ---- // TypeError 1130: (19-20): Invalid use of a library name. diff --git a/test/libsolidity/syntaxTests/operators/userDefined/defining_operator_for_wildcard_type_at_contract_level.sol b/test/libsolidity/syntaxTests/operators/userDefined/defining_operator_for_wildcard_type_at_contract_level.sol index c18c4467c..d367d0cb3 100644 --- a/test/libsolidity/syntaxTests/operators/userDefined/defining_operator_for_wildcard_type_at_contract_level.sol +++ b/test/libsolidity/syntaxTests/operators/userDefined/defining_operator_for_wildcard_type_at_contract_level.sol @@ -1,9 +1,9 @@ type Int is int; -function add(Int, Int) returns (Int) {} +function add(Int, Int) pure returns (Int) {} contract C { using {add as +} for *; } // ---- -// SyntaxError 3349: (76-99): The type has to be specified explicitly when attaching specific functions. +// SyntaxError 3349: (81-104): The type has to be specified explicitly when attaching specific functions. diff --git a/test/libsolidity/syntaxTests/operators/userDefined/implementing_operator_with_contract_function_at_contract_level.sol b/test/libsolidity/syntaxTests/operators/userDefined/implementing_operator_with_contract_function_at_contract_level.sol index 447242190..309ea9558 100644 --- a/test/libsolidity/syntaxTests/operators/userDefined/implementing_operator_with_contract_function_at_contract_level.sol +++ b/test/libsolidity/syntaxTests/operators/userDefined/implementing_operator_with_contract_function_at_contract_level.sol @@ -3,7 +3,7 @@ type Int is int; contract C { using {add as +} for Int; - function add(Int, Int) public returns (Int) {} + function add(Int, Int) public pure returns (Int) {} } // ---- // TypeError 4167: (42-45): Only file-level functions and library functions can be attached to a type in a "using" statement diff --git a/test/libsolidity/syntaxTests/operators/userDefined/implementing_operator_with_contract_function_at_file_level.sol b/test/libsolidity/syntaxTests/operators/userDefined/implementing_operator_with_contract_function_at_file_level.sol index 8f7578f2d..4adf1857e 100644 --- a/test/libsolidity/syntaxTests/operators/userDefined/implementing_operator_with_contract_function_at_file_level.sol +++ b/test/libsolidity/syntaxTests/operators/userDefined/implementing_operator_with_contract_function_at_file_level.sol @@ -3,7 +3,7 @@ type Int is int; using {C.add as +} for Int; contract C { - function add(Int, Int) public returns (Int) { + function add(Int, Int) public pure returns (Int) { return 0; } } diff --git a/test/libsolidity/syntaxTests/operators/userDefined/implementing_operator_with_function_pointer.sol b/test/libsolidity/syntaxTests/operators/userDefined/implementing_operator_with_function_pointer.sol index f360deb3f..834fe2d7d 100644 --- a/test/libsolidity/syntaxTests/operators/userDefined/implementing_operator_with_function_pointer.sol +++ b/test/libsolidity/syntaxTests/operators/userDefined/implementing_operator_with_function_pointer.sol @@ -1,8 +1,8 @@ type Int is int8; contract C { - function(Int, Int) external returns (Int) ptr; + function(Int, Int) external pure returns (Int) ptr; using {ptr as +} for Int; } // ---- -// TypeError 8187: (94-97): Expected function name. +// TypeError 8187: (99-102): Expected function name. diff --git a/test/libsolidity/syntaxTests/operators/userDefined/implementing_operator_with_library_function_external.sol b/test/libsolidity/syntaxTests/operators/userDefined/implementing_operator_with_library_function_external.sol index 5f51e2a5f..47c2934ac 100644 --- a/test/libsolidity/syntaxTests/operators/userDefined/implementing_operator_with_library_function_external.sol +++ b/test/libsolidity/syntaxTests/operators/userDefined/implementing_operator_with_library_function_external.sol @@ -1,11 +1,11 @@ type Int is int128; library L { - function externalOperator(Int, Int) external returns (Int) {} + function externalOperator(Int, Int) external pure returns (Int) {} } // FIXME: Not being able to use external library functions in 'using for' is a bug. // https://github.com/ethereum/solidity/issues/13765 using {L.externalOperator as +} for Int; // ---- -// DeclarationError 7920: (246-264): Identifier not found or not unique. +// DeclarationError 7920: (251-269): Identifier not found or not unique.