mirror of
https://github.com/ethereum/solidity
synced 2023-10-03 13:03:40 +00:00
Version pragma.
This commit is contained in:
@@ -175,6 +175,34 @@ private:
|
||||
ASTNode const* m_scope;
|
||||
};
|
||||
|
||||
/**
|
||||
* Pragma directive, only version requirements in the form `pragma solidity "^0.4.0";` are
|
||||
* supported for now.
|
||||
*/
|
||||
class PragmaDirective: public ASTNode
|
||||
{
|
||||
public:
|
||||
PragmaDirective(
|
||||
SourceLocation const& _location,
|
||||
std::vector<Token::Value> const& _tokens,
|
||||
std::vector<ASTString> const& _literals
|
||||
): ASTNode(_location), m_tokens(_tokens), m_literals(_literals)
|
||||
{}
|
||||
|
||||
virtual void accept(ASTVisitor& _visitor) override;
|
||||
virtual void accept(ASTConstVisitor& _visitor) const override;
|
||||
|
||||
std::vector<Token::Value> const& tokens() const { return m_tokens; }
|
||||
std::vector<ASTString> const& literals() const { return m_literals; }
|
||||
|
||||
private:
|
||||
|
||||
/// Sequence of tokens following the "pragma" keyword.
|
||||
std::vector<Token::Value> m_tokens;
|
||||
/// Sequence of literals following the "pragma" keyword.
|
||||
std::vector<ASTString> m_literals;
|
||||
};
|
||||
|
||||
/**
|
||||
* Import directive for referencing other files / source objects.
|
||||
* Example: import "abc.sol" // imports all symbols of "abc.sol" into current scope
|
||||
|
||||
@@ -35,6 +35,7 @@ namespace solidity
|
||||
|
||||
class ASTNode;
|
||||
class SourceUnit;
|
||||
class PragmaDirective;
|
||||
class ImportDirective;
|
||||
class Declaration;
|
||||
class ContractDefinition;
|
||||
|
||||
@@ -103,6 +103,15 @@ bool ASTJsonConverter::visit(SourceUnit const&)
|
||||
return true;
|
||||
}
|
||||
|
||||
bool ASTJsonConverter::visit(PragmaDirective const& _node)
|
||||
{
|
||||
Json::Value literals(Json::arrayValue);
|
||||
for (auto const& literal: _node.literals())
|
||||
literals.append(literal);
|
||||
addJsonNode(_node, "PragmaDirective", { make_pair("literals", literals) });
|
||||
return true;
|
||||
}
|
||||
|
||||
bool ASTJsonConverter::visit(ImportDirective const& _node)
|
||||
{
|
||||
addJsonNode(_node, "ImportDirective", { make_pair("file", _node.path())});
|
||||
@@ -401,6 +410,10 @@ void ASTJsonConverter::endVisit(SourceUnit const&)
|
||||
goUp();
|
||||
}
|
||||
|
||||
void ASTJsonConverter::endVisit(PragmaDirective const&)
|
||||
{
|
||||
}
|
||||
|
||||
void ASTJsonConverter::endVisit(ImportDirective const&)
|
||||
{
|
||||
}
|
||||
|
||||
@@ -52,6 +52,7 @@ public:
|
||||
Json::Value const& json();
|
||||
|
||||
bool visit(SourceUnit const& _node) override;
|
||||
bool visit(PragmaDirective const& _node) override;
|
||||
bool visit(ImportDirective const& _node) override;
|
||||
bool visit(ContractDefinition const& _node) override;
|
||||
bool visit(InheritanceSpecifier const& _node) override;
|
||||
@@ -96,6 +97,7 @@ public:
|
||||
bool visit(Literal const& _node) override;
|
||||
|
||||
void endVisit(SourceUnit const&) override;
|
||||
void endVisit(PragmaDirective const&) override;
|
||||
void endVisit(ImportDirective const&) override;
|
||||
void endVisit(ContractDefinition const&) override;
|
||||
void endVisit(InheritanceSpecifier const&) override;
|
||||
|
||||
@@ -47,6 +47,13 @@ void ASTPrinter::print(ostream& _stream)
|
||||
}
|
||||
|
||||
|
||||
bool ASTPrinter::visit(PragmaDirective const& _node)
|
||||
{
|
||||
writeLine("PragmaDirective");
|
||||
printSourcePart(_node);
|
||||
return goDeeper();
|
||||
}
|
||||
|
||||
bool ASTPrinter::visit(ImportDirective const& _node)
|
||||
{
|
||||
writeLine("ImportDirective \"" + _node.path() + "\"");
|
||||
@@ -355,6 +362,11 @@ bool ASTPrinter::visit(Literal const& _node)
|
||||
return goDeeper();
|
||||
}
|
||||
|
||||
void ASTPrinter::endVisit(PragmaDirective const&)
|
||||
{
|
||||
m_indentation--;
|
||||
}
|
||||
|
||||
void ASTPrinter::endVisit(ImportDirective const&)
|
||||
{
|
||||
m_indentation--;
|
||||
|
||||
@@ -47,6 +47,7 @@ public:
|
||||
/// Output the string representation of the AST to _stream.
|
||||
void print(std::ostream& _stream);
|
||||
|
||||
bool visit(PragmaDirective const& _node) override;
|
||||
bool visit(ImportDirective const& _node) override;
|
||||
bool visit(ContractDefinition const& _node) override;
|
||||
bool visit(InheritanceSpecifier const& _node) override;
|
||||
@@ -89,6 +90,7 @@ public:
|
||||
bool visit(ElementaryTypeNameExpression const& _node) override;
|
||||
bool visit(Literal const& _node) override;
|
||||
|
||||
void endVisit(PragmaDirective const&) override;
|
||||
void endVisit(ImportDirective const&) override;
|
||||
void endVisit(ContractDefinition const&) override;
|
||||
void endVisit(InheritanceSpecifier const&) override;
|
||||
|
||||
@@ -44,6 +44,7 @@ class ASTVisitor
|
||||
{
|
||||
public:
|
||||
virtual bool visit(SourceUnit& _node) { return visitNode(_node); }
|
||||
virtual bool visit(PragmaDirective& _node) { return visitNode(_node); }
|
||||
virtual bool visit(ImportDirective& _node) { return visitNode(_node); }
|
||||
virtual bool visit(ContractDefinition& _node) { return visitNode(_node); }
|
||||
virtual bool visit(InheritanceSpecifier& _node) { return visitNode(_node); }
|
||||
@@ -88,6 +89,7 @@ public:
|
||||
virtual bool visit(Literal& _node) { return visitNode(_node); }
|
||||
|
||||
virtual void endVisit(SourceUnit& _node) { endVisitNode(_node); }
|
||||
virtual void endVisit(PragmaDirective& _node) { endVisitNode(_node); }
|
||||
virtual void endVisit(ImportDirective& _node) { endVisitNode(_node); }
|
||||
virtual void endVisit(ContractDefinition& _node) { endVisitNode(_node); }
|
||||
virtual void endVisit(InheritanceSpecifier& _node) { endVisitNode(_node); }
|
||||
@@ -144,6 +146,7 @@ class ASTConstVisitor
|
||||
{
|
||||
public:
|
||||
virtual bool visit(SourceUnit const& _node) { return visitNode(_node); }
|
||||
virtual bool visit(PragmaDirective const& _node) { return visitNode(_node); }
|
||||
virtual bool visit(ImportDirective const& _node) { return visitNode(_node); }
|
||||
virtual bool visit(ContractDefinition const& _node) { return visitNode(_node); }
|
||||
virtual bool visit(InheritanceSpecifier const& _node) { return visitNode(_node); }
|
||||
@@ -188,6 +191,7 @@ public:
|
||||
virtual bool visit(Literal const& _node) { return visitNode(_node); }
|
||||
|
||||
virtual void endVisit(SourceUnit const& _node) { endVisitNode(_node); }
|
||||
virtual void endVisit(PragmaDirective const& _node) { endVisitNode(_node); }
|
||||
virtual void endVisit(ImportDirective const& _node) { endVisitNode(_node); }
|
||||
virtual void endVisit(ContractDefinition const& _node) { endVisitNode(_node); }
|
||||
virtual void endVisit(InheritanceSpecifier const& _node) { endVisitNode(_node); }
|
||||
|
||||
@@ -45,6 +45,18 @@ void SourceUnit::accept(ASTConstVisitor& _visitor) const
|
||||
_visitor.endVisit(*this);
|
||||
}
|
||||
|
||||
void PragmaDirective::accept(ASTVisitor& _visitor)
|
||||
{
|
||||
_visitor.visit(*this);
|
||||
_visitor.endVisit(*this);
|
||||
}
|
||||
|
||||
void PragmaDirective::accept(ASTConstVisitor& _visitor) const
|
||||
{
|
||||
_visitor.visit(*this);
|
||||
_visitor.endVisit(*this);
|
||||
}
|
||||
|
||||
void ImportDirective::accept(ASTVisitor& _visitor)
|
||||
{
|
||||
_visitor.visit(*this);
|
||||
|
||||
Reference in New Issue
Block a user