From 86e1d671cc4ed9b89576c80e16e58a8019115068 Mon Sep 17 00:00:00 2001 From: Lefteris Karapetsas Date: Tue, 10 Feb 2015 13:40:21 +0100 Subject: Parsing an enum AST node --- AST.cpp | 10 +++++++++- AST.h | 5 ++++- ASTPrinter.cpp | 2 +- ASTVisitor.h | 4 ++++ AST_accept.h | 24 +++++++++++++++++++----- Parser.cpp | 2 +- Token.h | 2 +- 7 files changed, 39 insertions(+), 10 deletions(-) diff --git a/AST.cpp b/AST.cpp index 0c34cea3..95014fa1 100644 --- a/AST.cpp +++ b/AST.cpp @@ -206,6 +206,12 @@ vector, FunctionTypePointer>> const& ContractDefinition::getIn return *m_interfaceFunctionList; } +TypePointer EnumDeclaration::getType(ContractDefinition const*) const +{ + // LTODO + return nullptr; +} + void InheritanceSpecifier::checkTypeRequirements() { m_baseName->checkTypeRequirements(); @@ -268,7 +274,9 @@ void EnumDefinition::checkValidityOfMembers() const TypePointer EnumDefinition::getType(ContractDefinition const*) const { - return make_shared(make_shared(*this)); + //LTODO: + return nullptr; + // return make_shared(make_shared(*this)); } TypePointer FunctionDefinition::getType(ContractDefinition const*) const diff --git a/AST.h b/AST.h index d3a7853a..02493df2 100644 --- a/AST.h +++ b/AST.h @@ -170,10 +170,13 @@ private: */ class EnumDeclaration : public Declaration { + public: EnumDeclaration(Location const& _location, ASTPointer const& _name): Declaration(_location, _name) {} + virtual void accept(ASTVisitor& _visitor) override; + virtual void accept(ASTConstVisitor& _visitor) const override; TypePointer getType(ContractDefinition const*) const; }; @@ -717,7 +720,7 @@ public: Expression const& getCondition() const { return *m_condition; } Statement const& getTrueStatement() const { return *m_trueBody; } - /// @returns the "else" part of the if statement or nullptr if there is no "else" part. + /// @returns the "else" part of the if statement or nullptr if there is no "else" part. Statement const* getFalseStatement() const { return m_falseBody.get(); } private: diff --git a/ASTPrinter.cpp b/ASTPrinter.cpp index 34cd12a9..b655d309 100644 --- a/ASTPrinter.cpp +++ b/ASTPrinter.cpp @@ -77,7 +77,7 @@ bool ASTPrinter::visit(EnumDefinition const& _node) return goDeeper(); } -bool ASTPrinter::visit(EnuumDeclaration const& _node) +bool ASTPrinter::visit(EnumDeclaration const& _node) { writeLine("EnumValue \"" + _node.getName() + "\""); return goDeeper(); diff --git a/ASTVisitor.h b/ASTVisitor.h index b05ec658..10882757 100644 --- a/ASTVisitor.h +++ b/ASTVisitor.h @@ -48,6 +48,7 @@ public: virtual bool visit(InheritanceSpecifier&) { return true; } virtual bool visit(StructDefinition&) { return true; } virtual bool visit(EnumDefinition&) { return true; } + virtual bool visit(EnumDeclaration&) { return true; } virtual bool visit(ParameterList&) { return true; } virtual bool visit(FunctionDefinition&) { return true; } virtual bool visit(VariableDeclaration&) { return true; } @@ -90,6 +91,7 @@ public: virtual void endVisit(InheritanceSpecifier&) { } virtual void endVisit(StructDefinition&) { } virtual void endVisit(EnumDefinition&) { } + virtual void endVisit(EnumDeclaration&) { } virtual void endVisit(ParameterList&) { } virtual void endVisit(FunctionDefinition&) { } virtual void endVisit(VariableDeclaration&) { } @@ -136,6 +138,7 @@ public: virtual bool visit(InheritanceSpecifier const&) { return true; } virtual bool visit(StructDefinition const&) { return true; } virtual bool visit(EnumDefinition const&) { return true; } + virtual bool visit(EnumDeclaration const&) { return true; } virtual bool visit(ParameterList const&) { return true; } virtual bool visit(FunctionDefinition const&) { return true; } virtual bool visit(VariableDeclaration const&) { return true; } @@ -178,6 +181,7 @@ public: virtual void endVisit(InheritanceSpecifier const&) { } virtual void endVisit(StructDefinition const&) { } virtual void endVisit(EnumDefinition const&) { } + virtual void endVisit(EnumDeclaration const&) { } virtual void endVisit(ParameterList const&) { } virtual void endVisit(FunctionDefinition const&) { } virtual void endVisit(VariableDeclaration const&) { } diff --git a/AST_accept.h b/AST_accept.h index 15f6b7ee..9568da5b 100644 --- a/AST_accept.h +++ b/AST_accept.h @@ -105,22 +105,36 @@ void InheritanceSpecifier::accept(ASTConstVisitor& _visitor) const _visitor.endVisit(*this); } -void StructDefinition::accept(ASTVisitor& _visitor) +void EnumDefinition::accept(ASTVisitor& _visitor) { if (_visitor.visit(*this)) listAccept(m_members, _visitor); _visitor.endVisit(*this); } -void EnumDefinition::accept(ASTVisitor& _visitor) +void EnumDefinition::accept(ASTConstVisitor& _visitor) const { - _visitor.visit(*this) + if (_visitor.visit(*this)) + listAccept(m_members, _visitor); _visitor.endVisit(*this); } -void EnumDefinition::accept(ASTConstVisitor& _visitor) const +void EnumDeclaration::accept(ASTVisitor& _visitor) +{ + _visitor.visit(*this); + _visitor.endVisit(*this); +} + +void EnumDeclaration::accept(ASTConstVisitor& _visitor) const +{ + _visitor.visit(*this); + _visitor.endVisit(*this); +} + +void StructDefinition::accept(ASTVisitor& _visitor) { - _visitor.visit(*this) + if (_visitor.visit(*this)) + listAccept(m_members, _visitor); _visitor.endVisit(*this); } diff --git a/Parser.cpp b/Parser.cpp index 2f0796d6..fd25d7ce 100644 --- a/Parser.cpp +++ b/Parser.cpp @@ -279,7 +279,7 @@ ASTPointer Parser::parseEnumDefinition() ASTNodeFactory nodeFactory(*this); expectToken(Token::Enum); ASTPointer name = expectIdentifierToken(); - vector> members; + vector> members; expectToken(Token::LBrace); while (m_scanner->getCurrentToken() == Token::Identifier) diff --git a/Token.h b/Token.h index f164e3fc..5039d5b5 100644 --- a/Token.h +++ b/Token.h @@ -168,7 +168,7 @@ namespace solidity K(Switch, "switch", 0) \ K(Var, "var", 0) \ K(While, "while", 0) \ - \ + K(Enum, "enum", 0) \ \ /* Ether subdenominations */ \ K(SubWei, "wei", 0) \ -- cgit