diff options
author | LianaHus <liana@ethdev.com> | 2015-09-11 21:24:11 +0800 |
---|---|---|
committer | LianaHus <liana@ethdev.com> | 2015-09-11 21:24:11 +0800 |
commit | 1d1386a58cdeada9497a3940ab9a7d5c68f21af8 (patch) | |
tree | dc2c460864d637f0afe49a1a36a13da27d13b165 | |
parent | f5fc119dc80e6eb83bd145121ad13869ba246d76 (diff) | |
download | dexon-solidity-1d1386a58cdeada9497a3940ab9a7d5c68f21af8.tar dexon-solidity-1d1386a58cdeada9497a3940ab9a7d5c68f21af8.tar.gz dexon-solidity-1d1386a58cdeada9497a3940ab9a7d5c68f21af8.tar.bz2 dexon-solidity-1d1386a58cdeada9497a3940ab9a7d5c68f21af8.tar.lz dexon-solidity-1d1386a58cdeada9497a3940ab9a7d5c68f21af8.tar.xz dexon-solidity-1d1386a58cdeada9497a3940ab9a7d5c68f21af8.tar.zst dexon-solidity-1d1386a58cdeada9497a3940ab9a7d5c68f21af8.zip |
add call for EventDefinition::checkTypeRequirements()
-rw-r--r-- | libsolidity/AST.cpp | 7 | ||||
-rw-r--r-- | test/libsolidity/SolidityEndToEndTest.cpp | 14 | ||||
-rw-r--r-- | test/libsolidity/SolidityNameAndTypeResolution.cpp | 1 |
3 files changed, 5 insertions, 17 deletions
diff --git a/libsolidity/AST.cpp b/libsolidity/AST.cpp index 25d2ccd8..1ac78dd1 100644 --- a/libsolidity/AST.cpp +++ b/libsolidity/AST.cpp @@ -85,6 +85,9 @@ void ContractDefinition::checkTypeRequirements() for (ASTPointer<VariableDeclaration> const& variable: m_stateVariables) variable->checkTypeRequirements(); + for (ASTPointer<EventDefinition> const& event: events()) + event->checkTypeRequirements(); + for (ASTPointer<ModifierDefinition> const& modifier: functionModifiers()) modifier->checkTypeRequirements(); @@ -699,13 +702,13 @@ void EventDefinition::checkTypeRequirements() { if (var->isIndexed()) numIndexed++; + if (numIndexed > 3) + BOOST_THROW_EXCEPTION(createTypeError("More than 3 indexed arguments for event.")); if (!var->type()->canLiveOutsideStorage()) BOOST_THROW_EXCEPTION(var->createTypeError("Type is required to live outside storage.")); if (!var->type()->externalType()) BOOST_THROW_EXCEPTION(var->createTypeError("Internal type is not allowed as event parameter type.")); } - if (numIndexed > 3) - BOOST_THROW_EXCEPTION(createTypeError("More than 3 indexed arguments for event.")); } void Block::checkTypeRequirements() diff --git a/test/libsolidity/SolidityEndToEndTest.cpp b/test/libsolidity/SolidityEndToEndTest.cpp index 5fcb5ca3..aa423330 100644 --- a/test/libsolidity/SolidityEndToEndTest.cpp +++ b/test/libsolidity/SolidityEndToEndTest.cpp @@ -5230,20 +5230,6 @@ BOOST_AUTO_TEST_CASE(storage_string_as_mapping_key_without_variable) BOOST_CHECK(callContractFunction("f()") == encodeArgs(u256(2))); } -BOOST_AUTO_TEST_CASE(event_more_than_four_indexed_arguments) -{ - char const* sourceCode = R"( - contract ClientReceipt { - event Deposit(uint indexed _var0, uint indexed _var1, uint indexed _var2, uint indexed _var3, uint indexed _var4, uint indexed _var5); - function deposit() { - Deposit(0, 1, 2, 3, 4, 5); - } - } - )"; - compileAndRun(sourceCode); - compileRequireThrow<TypeError>(sourceCode); -} - BOOST_AUTO_TEST_SUITE_END() } diff --git a/test/libsolidity/SolidityNameAndTypeResolution.cpp b/test/libsolidity/SolidityNameAndTypeResolution.cpp index 9f352b36..113bc216 100644 --- a/test/libsolidity/SolidityNameAndTypeResolution.cpp +++ b/test/libsolidity/SolidityNameAndTypeResolution.cpp @@ -1050,7 +1050,6 @@ BOOST_AUTO_TEST_CASE(event_too_many_indexed) char const* text = R"( contract c { event e(uint indexed a, bytes3 indexed b, bool indexed c, uint indexed d); - function f() { e(2, "abc", true); } })"; BOOST_CHECK_THROW(parseTextAndResolveNames(text), TypeError); } |