diff options
author | chriseth <chris@ethereum.org> | 2017-05-19 23:48:36 +0800 |
---|---|---|
committer | GitHub <noreply@github.com> | 2017-05-19 23:48:36 +0800 |
commit | 982f661339e695f4ad913ff17bc12a9e190b25ed (patch) | |
tree | 421c93ff249d89f3778dae422cea3ebcec7a9e4c /libsolidity/inlineasm/AsmParser.cpp | |
parent | 6f9428e9008f9d979caf7ff2f67ae85c784a0111 (diff) | |
parent | ebcb27e5c14549d114c116889c730c3a8cd82a86 (diff) | |
download | dexon-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.cpp | 33 |
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; |