aboutsummaryrefslogtreecommitdiffstats
path: root/libsolidity/parsing/Parser.cpp
diff options
context:
space:
mode:
authorchriseth <chris@ethereum.org>2017-05-29 20:04:01 +0800
committerGitHub <noreply@github.com>2017-05-29 20:04:01 +0800
commit4a5dc6a4ea619b90214006a573cbd9c036d2d4a2 (patch)
treef3251f62b6baddea299432becef1a6660f3eb2df /libsolidity/parsing/Parser.cpp
parent788b64ea6181af6e7e364e86d64508c4809ca9b7 (diff)
parent751c97ca19ed0bb69e67222a1edd61e7d227b30f (diff)
downloaddexon-solidity-4a5dc6a4ea619b90214006a573cbd9c036d2d4a2.tar
dexon-solidity-4a5dc6a4ea619b90214006a573cbd9c036d2d4a2.tar.gz
dexon-solidity-4a5dc6a4ea619b90214006a573cbd9c036d2d4a2.tar.bz2
dexon-solidity-4a5dc6a4ea619b90214006a573cbd9c036d2d4a2.tar.lz
dexon-solidity-4a5dc6a4ea619b90214006a573cbd9c036d2d4a2.tar.xz
dexon-solidity-4a5dc6a4ea619b90214006a573cbd9c036d2d4a2.tar.zst
dexon-solidity-4a5dc6a4ea619b90214006a573cbd9c036d2d4a2.zip
Merge pull request #2312 from ethereum/parser-cleanup
Parser cleanup (remove dependency on Solidity AST)
Diffstat (limited to 'libsolidity/parsing/Parser.cpp')
-rw-r--r--libsolidity/parsing/Parser.cpp44
1 files changed, 44 insertions, 0 deletions
diff --git a/libsolidity/parsing/Parser.cpp b/libsolidity/parsing/Parser.cpp
index 72150a3e..5b318b2b 100644
--- a/libsolidity/parsing/Parser.cpp
+++ b/libsolidity/parsing/Parser.cpp
@@ -1437,5 +1437,49 @@ ASTPointer<ParameterList> Parser::createEmptyParameterList()
return nodeFactory.createNode<ParameterList>(vector<ASTPointer<VariableDeclaration>>());
}
+string Parser::currentTokenName()
+{
+ Token::Value token = m_scanner->currentToken();
+ if (Token::isElementaryTypeName(token)) //for the sake of accuracy in reporting
+ {
+ ElementaryTypeNameToken elemTypeName = m_scanner->currentElementaryTypeNameToken();
+ return elemTypeName.toString();
+ }
+ else
+ return Token::name(token);
+}
+
+Token::Value Parser::expectAssignmentOperator()
+{
+ Token::Value op = m_scanner->currentToken();
+ if (!Token::isAssignmentOp(op))
+ fatalParserError(
+ string("Expected assignment operator, got '") +
+ currentTokenName() +
+ string("'")
+ );
+ m_scanner->next();
+ return op;
+}
+
+ASTPointer<ASTString> Parser::expectIdentifierToken()
+{
+ Token::Value id = m_scanner->currentToken();
+ if (id != Token::Identifier)
+ fatalParserError(
+ string("Expected identifier, got '") +
+ currentTokenName() +
+ string("'")
+ );
+ return getLiteralAndAdvance();
+}
+
+ASTPointer<ASTString> Parser::getLiteralAndAdvance()
+{
+ ASTPointer<ASTString> identifier = make_shared<ASTString>(m_scanner->currentLiteral());
+ m_scanner->next();
+ return identifier;
+}
+
}
}