mirror of
				https://github.com/ethereum/solidity
				synced 2023-10-03 13:03:40 +00:00 
			
		
		
		
	Merge branch 'develop' of https://github.com/ethereum/cpp-ethereum into develop
This commit is contained in:
		
						commit
						e832fec8d5
					
				| @ -2479,6 +2479,42 @@ BOOST_AUTO_TEST_CASE(struct_copy) | |||||||
| 	BOOST_CHECK(callContractFunction("retrieve(uint256)", 8) == encodeArgs(0, 0, 0, 0)); | 	BOOST_CHECK(callContractFunction("retrieve(uint256)", 8) == encodeArgs(0, 0, 0, 0)); | ||||||
| } | } | ||||||
| 
 | 
 | ||||||
|  | BOOST_AUTO_TEST_CASE(struct_containing_bytes_copy_and_delete) | ||||||
|  | { | ||||||
|  | 	char const* sourceCode = R"( | ||||||
|  | 		contract c { | ||||||
|  | 			struct Struct { uint a; bytes data; uint b; } | ||||||
|  | 			Struct data1; | ||||||
|  | 			Struct data2; | ||||||
|  | 			function set(uint _a, bytes _data, uint _b) external returns (bool) { | ||||||
|  | 				data1.a = _a; | ||||||
|  | 				data1.b = _b; | ||||||
|  | 				data1.data = _data; | ||||||
|  | 				return true; | ||||||
|  | 			} | ||||||
|  | 			function copy() returns (bool) { | ||||||
|  | 				data1 = data2; | ||||||
|  | 				return true; | ||||||
|  | 			} | ||||||
|  | 			function del() returns (bool) { | ||||||
|  | 				delete data1; | ||||||
|  | 				return true; | ||||||
|  | 			} | ||||||
|  | 		} | ||||||
|  | 	)"; | ||||||
|  | 	compileAndRun(sourceCode); | ||||||
|  | 	string data = "123456789012345678901234567890123"; | ||||||
|  | 	BOOST_CHECK(m_state.storage(m_contractAddress).empty()); | ||||||
|  | 	BOOST_CHECK(callContractFunction("set(uint256,bytes,uint256)", u256(data.length()), 12, data, 13) == encodeArgs(true)); | ||||||
|  | 	BOOST_CHECK(!m_state.storage(m_contractAddress).empty()); | ||||||
|  | 	BOOST_CHECK(callContractFunction("copy()") == encodeArgs(true)); | ||||||
|  | 	BOOST_CHECK(m_state.storage(m_contractAddress).empty()); | ||||||
|  | 	BOOST_CHECK(callContractFunction("set(uint256,bytes,uint256)", u256(data.length()), 12, data, 13) == encodeArgs(true)); | ||||||
|  | 	BOOST_CHECK(!m_state.storage(m_contractAddress).empty()); | ||||||
|  | 	BOOST_CHECK(callContractFunction("del()") == encodeArgs(true)); | ||||||
|  | 	BOOST_CHECK(m_state.storage(m_contractAddress).empty()); | ||||||
|  | } | ||||||
|  | 
 | ||||||
| BOOST_AUTO_TEST_CASE(struct_copy_via_local) | BOOST_AUTO_TEST_CASE(struct_copy_via_local) | ||||||
| { | { | ||||||
| 	char const* sourceCode = R"( | 	char const* sourceCode = R"( | ||||||
|  | |||||||
| @ -470,7 +470,7 @@ BOOST_AUTO_TEST_CASE(illegal_override_indirect) | |||||||
| BOOST_AUTO_TEST_CASE(illegal_override_visibility) | BOOST_AUTO_TEST_CASE(illegal_override_visibility) | ||||||
| { | { | ||||||
| 	char const* text = R"( | 	char const* text = R"( | ||||||
| 		contract B { function f() protected {} } | 		contract B { function f() inheritable {} } | ||||||
| 		contract C is B { function f() public {} } | 		contract C is B { function f() public {} } | ||||||
| 	)"; | 	)"; | ||||||
| 	BOOST_CHECK_THROW(parseTextAndResolveNames(text), TypeError); | 	BOOST_CHECK_THROW(parseTextAndResolveNames(text), TypeError); | ||||||
| @ -706,7 +706,7 @@ BOOST_AUTO_TEST_CASE(private_state_variable) | |||||||
| 					   "    uint64(2);\n" | 					   "    uint64(2);\n" | ||||||
| 					   "  }\n" | 					   "  }\n" | ||||||
| 					   "uint256 private foo;\n" | 					   "uint256 private foo;\n" | ||||||
| 					   "uint256 protected bar;\n" | 					   "uint256 inheritable bar;\n" | ||||||
| 					   "}\n"; | 					   "}\n"; | ||||||
| 
 | 
 | ||||||
| 	ASTPointer<SourceUnit> source; | 	ASTPointer<SourceUnit> source; | ||||||
| @ -717,7 +717,7 @@ BOOST_AUTO_TEST_CASE(private_state_variable) | |||||||
| 	function = retrieveFunctionBySignature(contract, "foo()"); | 	function = retrieveFunctionBySignature(contract, "foo()"); | ||||||
| 	BOOST_CHECK_MESSAGE(function == nullptr, "Accessor function of a private variable should not exist"); | 	BOOST_CHECK_MESSAGE(function == nullptr, "Accessor function of a private variable should not exist"); | ||||||
| 	function = retrieveFunctionBySignature(contract, "bar()"); | 	function = retrieveFunctionBySignature(contract, "bar()"); | ||||||
| 	BOOST_CHECK_MESSAGE(function == nullptr, "Accessor function of a protected variable should not exist"); | 	BOOST_CHECK_MESSAGE(function == nullptr, "Accessor function of an inheritable variable should not exist"); | ||||||
| } | } | ||||||
| 
 | 
 | ||||||
| BOOST_AUTO_TEST_CASE(fallback_function) | BOOST_AUTO_TEST_CASE(fallback_function) | ||||||
| @ -832,11 +832,11 @@ BOOST_AUTO_TEST_CASE(access_to_default_function_visibility) | |||||||
| 	BOOST_CHECK_NO_THROW(parseTextAndResolveNames(text)); | 	BOOST_CHECK_NO_THROW(parseTextAndResolveNames(text)); | ||||||
| } | } | ||||||
| 
 | 
 | ||||||
| BOOST_AUTO_TEST_CASE(access_to_protected_function) | BOOST_AUTO_TEST_CASE(access_to_inheritable_function) | ||||||
| { | { | ||||||
| 	char const* text = R"( | 	char const* text = R"( | ||||||
| 		contract c { | 		contract c { | ||||||
| 			function f() protected {} | 			function f() inheritable {} | ||||||
| 		} | 		} | ||||||
| 		contract d { | 		contract d { | ||||||
| 			function g() { c(0).f(); } | 			function g() { c(0).f(); } | ||||||
| @ -856,7 +856,7 @@ BOOST_AUTO_TEST_CASE(access_to_default_state_variable_visibility) | |||||||
| 	BOOST_CHECK_THROW(parseTextAndResolveNames(text), TypeError); | 	BOOST_CHECK_THROW(parseTextAndResolveNames(text), TypeError); | ||||||
| } | } | ||||||
| 
 | 
 | ||||||
| BOOST_AUTO_TEST_CASE(access_to_protected_state_variable) | BOOST_AUTO_TEST_CASE(access_to_inheritable_state_variable) | ||||||
| { | { | ||||||
| 	char const* text = R"( | 	char const* text = R"( | ||||||
| 		contract c { | 		contract c { | ||||||
|  | |||||||
| @ -651,13 +651,13 @@ BOOST_AUTO_TEST_CASE(visibility_specifiers) | |||||||
| 	char const* text = R"( | 	char const* text = R"( | ||||||
| 		contract c { | 		contract c { | ||||||
| 			uint private a; | 			uint private a; | ||||||
| 			uint protected b; | 			uint inheritable b; | ||||||
| 			uint public c; | 			uint public c; | ||||||
| 			uint d; | 			uint d; | ||||||
| 			function f() {} | 			function f() {} | ||||||
| 			function f_priv() private {} | 			function f_priv() private {} | ||||||
| 			function f_public() public {} | 			function f_public() public {} | ||||||
| 			function f_protected() protected {} | 			function f_inheritable() inheritable {} | ||||||
| 		})"; | 		})"; | ||||||
| 	BOOST_CHECK_NO_THROW(parseText(text)); | 	BOOST_CHECK_NO_THROW(parseText(text)); | ||||||
| } | } | ||||||
| @ -666,7 +666,7 @@ BOOST_AUTO_TEST_CASE(multiple_visibility_specifiers) | |||||||
| { | { | ||||||
| 	char const* text = R"( | 	char const* text = R"( | ||||||
| 		contract c { | 		contract c { | ||||||
| 			uint private protected a; | 			uint private inheritable a; | ||||||
| 		})"; | 		})"; | ||||||
| 	BOOST_CHECK_THROW(parseText(text), ParserError); | 	BOOST_CHECK_THROW(parseText(text), ParserError); | ||||||
| } | } | ||||||
|  | |||||||
		Loading…
	
		Reference in New Issue
	
	Block a user