aboutsummaryrefslogtreecommitdiffstats
path: root/libsolidity/inlineasm/AsmParser.cpp
diff options
context:
space:
mode:
authorchriseth <chris@ethereum.org>2017-05-19 23:48:36 +0800
committerGitHub <noreply@github.com>2017-05-19 23:48:36 +0800
commit982f661339e695f4ad913ff17bc12a9e190b25ed (patch)
tree421c93ff249d89f3778dae422cea3ebcec7a9e4c /libsolidity/inlineasm/AsmParser.cpp
parent6f9428e9008f9d979caf7ff2f67ae85c784a0111 (diff)
parentebcb27e5c14549d114c116889c730c3a8cd82a86 (diff)
downloaddexon-solidity-982f661339e695f4ad913ff17bc12a9e190b25ed.tar
dexon-solidity-982f661339e695f4ad913ff17bc12a9e190b25ed.tar.gz
dexon-solidity-982f661339e695f4ad913ff17bc12a9e190b25ed.tar.bz2
dexon-solidity-982f661339e695f4ad913ff17bc12a9e190b25ed.tar.lz
dexon-solidity-982f661339e695f4ad913ff17bc12a9e190b25ed.tar.xz
dexon-solidity-982f661339e695f4ad913ff17bc12a9e190b25ed.tar.zst
dexon-solidity-982f661339e695f4ad913ff17bc12a9e190b25ed.zip
Merge pull request #2223 from ethereum/julia-bool
Add support for bool literals in Julia
Diffstat (limited to 'libsolidity/inlineasm/AsmParser.cpp')
-rw-r--r--libsolidity/inlineasm/AsmParser.cpp33
1 files changed, 31 insertions, 2 deletions
diff --git a/libsolidity/inlineasm/AsmParser.cpp b/libsolidity/inlineasm/AsmParser.cpp
index 7ecad5ea..a96984f5 100644
--- a/libsolidity/inlineasm/AsmParser.cpp
+++ b/libsolidity/inlineasm/AsmParser.cpp
@@ -206,10 +206,29 @@ assembly::Statement Parser::parseElementaryOperation(bool _onlySinglePusher)
}
case Token::StringLiteral:
case Token::Number:
+ case Token::TrueLiteral:
+ case Token::FalseLiteral:
{
+ LiteralKind kind = LiteralKind::Number;
+ switch (m_scanner->currentToken())
+ {
+ case Token::StringLiteral:
+ kind = LiteralKind::String;
+ break;
+ case Token::Number:
+ kind = LiteralKind::Number;
+ break;
+ case Token::TrueLiteral:
+ case Token::FalseLiteral:
+ kind = LiteralKind::Boolean;
+ break;
+ default:
+ break;
+ }
+
Literal literal{
location(),
- m_scanner->currentToken() == Token::Number,
+ kind,
m_scanner->currentLiteral(),
""
};
@@ -220,6 +239,8 @@ assembly::Statement Parser::parseElementaryOperation(bool _onlySinglePusher)
literal.location.end = endPosition();
literal.type = expectAsmIdentifier();
}
+ else if (kind == LiteralKind::Boolean)
+ fatalParserError("True and false are not valid literals.");
ret = std::move(literal);
break;
}
@@ -360,7 +381,15 @@ TypedName Parser::parseTypedName()
string Parser::expectAsmIdentifier()
{
string name = m_scanner->currentLiteral();
- if (!m_julia && instructions().count(name))
+ if (m_julia)
+ {
+ if (m_scanner->currentToken() == Token::Bool)
+ {
+ m_scanner->next();
+ return name;
+ }
+ }
+ else if (instructions().count(name))
fatalParserError("Cannot use instruction names for identifier names.");
expectToken(Token::Identifier);
return name;