aboutsummaryrefslogtreecommitdiffstats
path: root/libsolidity/inlineasm
diff options
context:
space:
mode:
authorchriseth <chris@ethereum.org>2018-02-21 01:39:00 +0800
committerchriseth <chris@ethereum.org>2018-02-21 07:41:39 +0800
commite2bf5de8a278e04623c7bb34a925372039095ba7 (patch)
treeb0d463b41860016abcb67ce152c726a8be5b9089 /libsolidity/inlineasm
parentf5f00b4ee9e6e9038e3b84986ab3ff78504331fd (diff)
downloaddexon-solidity-e2bf5de8a278e04623c7bb34a925372039095ba7.tar
dexon-solidity-e2bf5de8a278e04623c7bb34a925372039095ba7.tar.gz
dexon-solidity-e2bf5de8a278e04623c7bb34a925372039095ba7.tar.bz2
dexon-solidity-e2bf5de8a278e04623c7bb34a925372039095ba7.tar.lz
dexon-solidity-e2bf5de8a278e04623c7bb34a925372039095ba7.tar.xz
dexon-solidity-e2bf5de8a278e04623c7bb34a925372039095ba7.tar.zst
dexon-solidity-e2bf5de8a278e04623c7bb34a925372039095ba7.zip
Expect end of string at end of top-level block for assembly parser.
Diffstat (limited to 'libsolidity/inlineasm')
-rw-r--r--libsolidity/inlineasm/AsmParser.cpp7
-rw-r--r--libsolidity/inlineasm/AsmParser.h3
2 files changed, 7 insertions, 3 deletions
diff --git a/libsolidity/inlineasm/AsmParser.cpp b/libsolidity/inlineasm/AsmParser.cpp
index 306b07e6..7f618e07 100644
--- a/libsolidity/inlineasm/AsmParser.cpp
+++ b/libsolidity/inlineasm/AsmParser.cpp
@@ -34,13 +34,16 @@ using namespace dev;
using namespace dev::solidity;
using namespace dev::solidity::assembly;
-shared_ptr<assembly::Block> Parser::parse(std::shared_ptr<Scanner> const& _scanner)
+shared_ptr<assembly::Block> Parser::parse(std::shared_ptr<Scanner> const& _scanner, bool _reuseScanner)
{
m_recursionDepth = 0;
try
{
m_scanner = _scanner;
- return make_shared<Block>(parseBlock());
+ auto block = make_shared<Block>(parseBlock());
+ if (!_reuseScanner)
+ expectToken(Token::EOS);
+ return block;
}
catch (FatalError const&)
{
diff --git a/libsolidity/inlineasm/AsmParser.h b/libsolidity/inlineasm/AsmParser.h
index 015aeef3..41117228 100644
--- a/libsolidity/inlineasm/AsmParser.h
+++ b/libsolidity/inlineasm/AsmParser.h
@@ -41,8 +41,9 @@ public:
ParserBase(_errorReporter), m_flavour(_flavour) {}
/// Parses an inline assembly block starting with `{` and ending with `}`.
+ /// @param _reuseScanner if true, do check for end of input after the `}`.
/// @returns an empty shared pointer on error.
- std::shared_ptr<Block> parse(std::shared_ptr<Scanner> const& _scanner);
+ std::shared_ptr<Block> parse(std::shared_ptr<Scanner> const& _scanner, bool _reuseScanner);
protected:
using ElementaryOperation = boost::variant<assembly::Instruction, assembly::Literal, assembly::Identifier>;