Skip to content

Commit 6294aa8

Browse files
Simplify AsmParser::parse(.) usage
1 parent ffc5cfd commit 6294aa8

File tree

9 files changed

+24
-26
lines changed

9 files changed

+24
-26
lines changed

libsolidity/codegen/CompilerContext.cpp

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -441,7 +441,7 @@ void CompilerContext::appendInlineAssembly(
441441
locationOverride = m_asm->currentSourceLocation();
442442
shared_ptr<yul::Block> parserResult =
443443
yul::Parser(errorReporter, dialect, std::move(locationOverride))
444-
.parse(make_shared<langutil::Scanner>(charStream), false);
444+
.parse(charStream);
445445
#ifdef SOL_OUTPUT_ASM
446446
cout << yul::AsmPrinter(&dialect)(*parserResult) << endl;
447447
#endif
@@ -492,7 +492,7 @@ void CompilerContext::appendInlineAssembly(
492492
m_generatedYulUtilityCode = yul::AsmPrinter(dialect)(*obj.code);
493493
string code = yul::AsmPrinter{dialect}(*obj.code);
494494
langutil::CharStream charStream(m_generatedYulUtilityCode, _sourceName);
495-
obj.code = yul::Parser(errorReporter, dialect).parse(make_shared<Scanner>(charStream), false);
495+
obj.code = yul::Parser(errorReporter, dialect).parse(charStream);
496496
*obj.analysisInfo = yul::AsmAnalyzer::analyzeStrictAssertCorrect(dialect, obj);
497497
}
498498

libsolidity/interface/CompilerStack.cpp

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -755,9 +755,8 @@ Json::Value CompilerStack::generatedSources(string const& _contractName, bool _r
755755
ErrorList errors;
756756
ErrorReporter errorReporter(errors);
757757
CharStream charStream(source, sourceName);
758-
shared_ptr<Scanner> scanner = make_shared<Scanner>(charStream);
759758
yul::EVMDialect const& dialect = yul::EVMDialect::strictAssemblyForEVM(m_evmVersion);
760-
shared_ptr<yul::Block> parserResult = yul::Parser{errorReporter, dialect}.parse(scanner, false);
759+
shared_ptr<yul::Block> parserResult = yul::Parser{errorReporter, dialect}.parse(charStream);
761760
solAssert(parserResult, "");
762761
sources[0]["ast"] = yul::AsmJsonConverter{sourceIndex}(*parserResult);
763762
sources[0]["name"] = sourceName;

libsolidity/parsing/Parser.cpp

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1301,7 +1301,7 @@ ASTPointer<InlineAssembly> Parser::parseInlineAssembly(ASTPointer<ASTString> con
13011301
}
13021302

13031303
yul::Parser asmParser(m_errorReporter, dialect);
1304-
shared_ptr<yul::Block> block = asmParser.parse(m_scanner, true);
1304+
shared_ptr<yul::Block> block = asmParser.parseInline(m_scanner);
13051305
if (block == nullptr)
13061306
BOOST_THROW_EXCEPTION(FatalError());
13071307

libyul/AsmParser.cpp

Lines changed: 10 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -85,7 +85,15 @@ std::shared_ptr<DebugData const> Parser::createDebugData() const
8585
solAssert(false, "");
8686
}
8787

88-
unique_ptr<Block> Parser::parse(std::shared_ptr<Scanner> const& _scanner, bool _reuseScanner)
88+
unique_ptr<Block> Parser::parse(CharStream& _charStream)
89+
{
90+
m_scanner = make_shared<Scanner>(_charStream);
91+
unique_ptr<Block> block = parseInline(m_scanner);
92+
expectToken(Token::EOS);
93+
return block;
94+
}
95+
96+
unique_ptr<Block> Parser::parseInline(std::shared_ptr<Scanner> const& _scanner)
8997
{
9098
m_recursionDepth = 0;
9199

@@ -97,10 +105,7 @@ unique_ptr<Block> Parser::parse(std::shared_ptr<Scanner> const& _scanner, bool _
97105
m_scanner = _scanner;
98106
if (m_sourceNames)
99107
fetchSourceLocationFromComment();
100-
auto block = make_unique<Block>(parseBlock());
101-
if (!_reuseScanner)
102-
expectToken(Token::EOS);
103-
return block;
108+
return make_unique<Block>(parseBlock());
104109
}
105110
catch (FatalError const&)
106111
{

libyul/AsmParser.h

Lines changed: 6 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -87,10 +87,13 @@ class Parser: public langutil::ParserBase
8787
{}
8888

8989
/// Parses an inline assembly block starting with `{` and ending with `}`.
90-
/// @param _reuseScanner if true, do check for end of input after the `}`.
9190
/// @returns an empty shared pointer on error.
92-
std::unique_ptr<Block> parse(std::shared_ptr<langutil::Scanner> const& _scanner, bool _reuseScanner);
93-
// TODO: pass CharStream here instead ^^^^^^
91+
std::unique_ptr<Block> parseInline(std::shared_ptr<langutil::Scanner> const& _scanner);
92+
93+
/// Parses an assembly block starting with `{` and ending with `}`
94+
/// and expects end of input after the '}'.
95+
/// @returns an empty shared pointer on error.
96+
std::unique_ptr<Block> parse(langutil::CharStream& _charStream);
9497

9598
protected:
9699
langutil::SourceLocation currentLocation() const override

libyul/ObjectParser.cpp

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -168,7 +168,7 @@ optional<ObjectParser::SourceNameMap> ObjectParser::tryParseSourceNameMapping()
168168
shared_ptr<Block> ObjectParser::parseBlock()
169169
{
170170
Parser parser(m_errorReporter, m_dialect, m_sourceNameMapping);
171-
shared_ptr<Block> block = parser.parse(m_scanner, true);
171+
shared_ptr<Block> block = parser.parseInline(m_scanner);
172172
yulAssert(block || m_errorReporter.hasErrors(), "Invalid block but no error!");
173173
return block;
174174
}

libyul/backends/wasm/EVMToEwasmTranslator.cpp

Lines changed: 1 addition & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -136,10 +136,7 @@ void EVMToEwasmTranslator::parsePolyfill()
136136
string(solidity::yul::wasm::polyfill::Logical) +
137137
string(solidity::yul::wasm::polyfill::Memory) +
138138
"}", "");
139-
m_polyfill = Parser(errorReporter, WasmDialect::instance()).parse(
140-
make_shared<Scanner>(charStream),
141-
false
142-
);
139+
m_polyfill = Parser(errorReporter, WasmDialect::instance()).parse(charStream);
143140
if (!errors.empty())
144141
{
145142
string message;

test/libyul/Parser.cpp

Lines changed: 1 addition & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -30,7 +30,6 @@
3030
#include <libyul/AsmAnalysis.h>
3131
#include <libyul/AsmAnalysisInfo.h>
3232
#include <libyul/Dialect.h>
33-
#include <liblangutil/Scanner.h>
3433
#include <liblangutil/ErrorReporter.h>
3534

3635
#include <boost/algorithm/string/replace.hpp>
@@ -56,7 +55,6 @@ shared_ptr<Block> parse(string const& _source, Dialect const& _dialect, ErrorRep
5655
try
5756
{
5857
auto stream = CharStream(_source, "");
59-
auto scanner = make_shared<Scanner>(stream);
6058
map<unsigned, shared_ptr<string const>> indicesToSourceNames;
6159
indicesToSourceNames[0] = make_shared<string const>("source0");
6260
indicesToSourceNames[1] = make_shared<string const>("source1");
@@ -65,7 +63,7 @@ shared_ptr<Block> parse(string const& _source, Dialect const& _dialect, ErrorRep
6563
errorReporter,
6664
_dialect,
6765
move(indicesToSourceNames)
68-
).parse(scanner, false);
66+
).parse(stream);
6967
if (parserResult)
7068
{
7169
yul::AsmAnalysisInfo analysisInfo;

test/tools/yulopti.cpp

Lines changed: 1 addition & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -22,7 +22,6 @@
2222
#include <libsolutil/CommonIO.h>
2323
#include <libsolutil/Exceptions.h>
2424
#include <liblangutil/ErrorReporter.h>
25-
#include <liblangutil/Scanner.h>
2625
#include <libyul/AsmAnalysis.h>
2726
#include <libyul/AsmAnalysisInfo.h>
2827
#include <libsolidity/parsing/Parser.h>
@@ -45,7 +44,6 @@
4544

4645
#include <libsolidity/interface/OptimiserSettings.h>
4746
#include <liblangutil/CharStreamProvider.h>
48-
#include <liblangutil/Scanner.h>
4947

5048
#include <boost/algorithm/string/predicate.hpp>
5149
#include <boost/algorithm/string/join.hpp>
@@ -92,8 +90,7 @@ class YulOpti
9290
{
9391
ErrorReporter errorReporter(m_errors);
9492
m_charStream = make_shared<CharStream>(_input, "");
95-
m_scanner = make_shared<Scanner>(*m_charStream);
96-
m_ast = yul::Parser(errorReporter, m_dialect).parse(m_scanner, false);
93+
m_ast = yul::Parser(errorReporter, m_dialect).parse(*m_charStream);
9794
if (!m_ast || !errorReporter.errors().empty())
9895
{
9996
cerr << "Error parsing source." << endl;
@@ -236,7 +233,6 @@ class YulOpti
236233
private:
237234
ErrorList m_errors;
238235
shared_ptr<CharStream> m_charStream;
239-
shared_ptr<Scanner> m_scanner;
240236
shared_ptr<yul::Block> m_ast;
241237
Dialect const& m_dialect{EVMDialect::strictAssemblyForEVMObjects(EVMVersion{})};
242238
shared_ptr<AsmAnalysisInfo> m_analysisInfo;

0 commit comments

Comments
 (0)