mirror of
https://github.com/ethereum/solidity
synced 2023-10-03 13:03:40 +00:00
Added anonymous flag to event.
added test
This commit is contained in:
parent
fc0bdc3d81
commit
2986ecbd75
7
AST.h
7
AST.h
@ -556,14 +556,16 @@ public:
|
|||||||
EventDefinition(SourceLocation const& _location,
|
EventDefinition(SourceLocation const& _location,
|
||||||
ASTPointer<ASTString> const& _name,
|
ASTPointer<ASTString> const& _name,
|
||||||
ASTPointer<ASTString> const& _documentation,
|
ASTPointer<ASTString> const& _documentation,
|
||||||
ASTPointer<ParameterList> const& _parameters):
|
ASTPointer<ParameterList> const& _parameters,
|
||||||
Declaration(_location, _name), Documented(_documentation), m_parameters(_parameters) {}
|
bool _anonymous = false):
|
||||||
|
Declaration(_location, _name), Documented(_documentation), m_parameters(_parameters) , m_anonymous(_anonymous){}
|
||||||
|
|
||||||
virtual void accept(ASTVisitor& _visitor) override;
|
virtual void accept(ASTVisitor& _visitor) override;
|
||||||
virtual void accept(ASTConstVisitor& _visitor) const override;
|
virtual void accept(ASTConstVisitor& _visitor) const override;
|
||||||
|
|
||||||
std::vector<ASTPointer<VariableDeclaration>> const& getParameters() const { return m_parameters->getParameters(); }
|
std::vector<ASTPointer<VariableDeclaration>> const& getParameters() const { return m_parameters->getParameters(); }
|
||||||
ParameterList const& getParameterList() const { return *m_parameters; }
|
ParameterList const& getParameterList() const { return *m_parameters; }
|
||||||
|
bool IsAnonymous() const { return m_anonymous; }
|
||||||
|
|
||||||
virtual TypePointer getType(ContractDefinition const* = nullptr) const override
|
virtual TypePointer getType(ContractDefinition const* = nullptr) const override
|
||||||
{
|
{
|
||||||
@ -574,6 +576,7 @@ public:
|
|||||||
|
|
||||||
private:
|
private:
|
||||||
ASTPointer<ParameterList> m_parameters;
|
ASTPointer<ParameterList> m_parameters;
|
||||||
|
bool m_anonymous;
|
||||||
};
|
};
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
@ -542,9 +542,12 @@ bool ExpressionCompiler::visit(FunctionCall const& _functionCall)
|
|||||||
appendTypeConversion(*arguments[arg - 1]->getType(),
|
appendTypeConversion(*arguments[arg - 1]->getType(),
|
||||||
*function.getParameterTypes()[arg - 1], true);
|
*function.getParameterTypes()[arg - 1], true);
|
||||||
}
|
}
|
||||||
|
if (!event.IsAnonymous())
|
||||||
|
{
|
||||||
m_context << u256(h256::Arith(dev::sha3(function.getCanonicalSignature(event.getName()))));
|
m_context << u256(h256::Arith(dev::sha3(function.getCanonicalSignature(event.getName()))));
|
||||||
++numIndexed;
|
++numIndexed;
|
||||||
solAssert(numIndexed <= 4, "Too many indexed arguments.");
|
}
|
||||||
|
solAssert(numIndexed <= 4 - (event.IsAnonymous() ? 1 : 0), "Too many indexed arguments.");
|
||||||
// Copy all non-indexed arguments to memory (data)
|
// Copy all non-indexed arguments to memory (data)
|
||||||
m_context << u256(0);
|
m_context << u256(0);
|
||||||
for (unsigned arg = 0; arg < arguments.size(); ++arg)
|
for (unsigned arg = 0; arg < arguments.size(); ++arg)
|
||||||
|
@ -70,6 +70,7 @@ std::unique_ptr<std::string> InterfaceHandler::getABIInterface(ContractDefinitio
|
|||||||
Json::Value event;
|
Json::Value event;
|
||||||
event["type"] = "event";
|
event["type"] = "event";
|
||||||
event["name"] = it->getName();
|
event["name"] = it->getName();
|
||||||
|
//todo add anonymous!;
|
||||||
Json::Value params(Json::arrayValue);
|
Json::Value params(Json::arrayValue);
|
||||||
for (auto const& p: it->getParameters())
|
for (auto const& p: it->getParameters())
|
||||||
{
|
{
|
||||||
|
@ -388,6 +388,12 @@ ASTPointer<EventDefinition> Parser::parseEventDefinition()
|
|||||||
docstring = make_shared<ASTString>(m_scanner->getCurrentCommentLiteral());
|
docstring = make_shared<ASTString>(m_scanner->getCurrentCommentLiteral());
|
||||||
|
|
||||||
expectToken(Token::Event);
|
expectToken(Token::Event);
|
||||||
|
bool anonymous = false;
|
||||||
|
if (m_scanner->getCurrentToken() == Token::Anonymous)
|
||||||
|
{
|
||||||
|
anonymous = true;
|
||||||
|
m_scanner->next();
|
||||||
|
}
|
||||||
ASTPointer<ASTString> name(expectIdentifierToken());
|
ASTPointer<ASTString> name(expectIdentifierToken());
|
||||||
ASTPointer<ParameterList> parameters;
|
ASTPointer<ParameterList> parameters;
|
||||||
if (m_scanner->getCurrentToken() == Token::LParen)
|
if (m_scanner->getCurrentToken() == Token::LParen)
|
||||||
@ -396,7 +402,7 @@ ASTPointer<EventDefinition> Parser::parseEventDefinition()
|
|||||||
parameters = createEmptyParameterList();
|
parameters = createEmptyParameterList();
|
||||||
nodeFactory.markEndPosition();
|
nodeFactory.markEndPosition();
|
||||||
expectToken(Token::Semicolon);
|
expectToken(Token::Semicolon);
|
||||||
return nodeFactory.createNode<EventDefinition>(name, docstring, parameters);
|
return nodeFactory.createNode<EventDefinition>(name, docstring, parameters, anonymous);
|
||||||
}
|
}
|
||||||
|
|
||||||
ASTPointer<ModifierInvocation> Parser::parseModifierInvocation()
|
ASTPointer<ModifierInvocation> Parser::parseModifierInvocation()
|
||||||
|
1
Token.h
1
Token.h
@ -145,6 +145,7 @@ namespace solidity
|
|||||||
K(Break, "break", 0) \
|
K(Break, "break", 0) \
|
||||||
K(Case, "case", 0) \
|
K(Case, "case", 0) \
|
||||||
K(Const, "constant", 0) \
|
K(Const, "constant", 0) \
|
||||||
|
K(Anonymous, "anonymous", 0) \
|
||||||
K(Continue, "continue", 0) \
|
K(Continue, "continue", 0) \
|
||||||
K(Contract, "contract", 0) \
|
K(Contract, "contract", 0) \
|
||||||
K(Default, "default", 0) \
|
K(Default, "default", 0) \
|
||||||
|
Loading…
Reference in New Issue
Block a user