add call for EventDefinition::checkTypeRequirements()

This commit is contained in:
LianaHus 2015-09-11 15:24:11 +02:00
parent f5fc119dc8
commit 1d1386a58c
3 changed files with 5 additions and 17 deletions

View File

@ -85,6 +85,9 @@ void ContractDefinition::checkTypeRequirements()
for (ASTPointer<VariableDeclaration> const& variable: m_stateVariables) for (ASTPointer<VariableDeclaration> const& variable: m_stateVariables)
variable->checkTypeRequirements(); variable->checkTypeRequirements();
for (ASTPointer<EventDefinition> const& event: events())
event->checkTypeRequirements();
for (ASTPointer<ModifierDefinition> const& modifier: functionModifiers()) for (ASTPointer<ModifierDefinition> const& modifier: functionModifiers())
modifier->checkTypeRequirements(); modifier->checkTypeRequirements();
@ -699,13 +702,13 @@ void EventDefinition::checkTypeRequirements()
{ {
if (var->isIndexed()) if (var->isIndexed())
numIndexed++; numIndexed++;
if (numIndexed > 3)
BOOST_THROW_EXCEPTION(createTypeError("More than 3 indexed arguments for event."));
if (!var->type()->canLiveOutsideStorage()) if (!var->type()->canLiveOutsideStorage())
BOOST_THROW_EXCEPTION(var->createTypeError("Type is required to live outside storage.")); BOOST_THROW_EXCEPTION(var->createTypeError("Type is required to live outside storage."));
if (!var->type()->externalType()) if (!var->type()->externalType())
BOOST_THROW_EXCEPTION(var->createTypeError("Internal type is not allowed as event parameter type.")); 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() void Block::checkTypeRequirements()

View File

@ -5230,20 +5230,6 @@ BOOST_AUTO_TEST_CASE(storage_string_as_mapping_key_without_variable)
BOOST_CHECK(callContractFunction("f()") == encodeArgs(u256(2))); 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() BOOST_AUTO_TEST_SUITE_END()
} }

View File

@ -1050,7 +1050,6 @@ BOOST_AUTO_TEST_CASE(event_too_many_indexed)
char const* text = R"( char const* text = R"(
contract c { contract c {
event e(uint indexed a, bytes3 indexed b, bool indexed c, uint indexed d); 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); BOOST_CHECK_THROW(parseTextAndResolveNames(text), TypeError);
} }