Skip to content

Commit 978f9a0

Browse files
committed
Yul: Immutable AST class with top-level block
1 parent 7094e30 commit 978f9a0

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

64 files changed

+699
-517
lines changed

libsolidity/analysis/ControlFlowBuilder.cpp

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -451,7 +451,7 @@ bool ControlFlowBuilder::visit(InlineAssembly const& _inlineAssembly)
451451
solAssert(!!m_currentNode && !m_inlineAssembly, "");
452452

453453
m_inlineAssembly = &_inlineAssembly;
454-
(*this)(_inlineAssembly.operations());
454+
(*this)(_inlineAssembly.operations().root());
455455
m_inlineAssembly = nullptr;
456456

457457
return false;

libsolidity/analysis/PostTypeChecker.cpp

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -506,7 +506,7 @@ class LValueChecker: public ASTConstVisitor
506506
return;
507507

508508
YulLValueChecker yulChecker{m_declaration->name()};
509-
yulChecker(_inlineAssembly.operations());
509+
yulChecker(_inlineAssembly.operations().root());
510510
m_willBeWrittenTo = yulChecker.willBeWrittenTo();
511511
}
512512
private:

libsolidity/analysis/ReferencesResolver.cpp

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -236,7 +236,7 @@ bool ReferencesResolver::visit(UsingForDirective const& _usingFor)
236236
bool ReferencesResolver::visit(InlineAssembly const& _inlineAssembly)
237237
{
238238
m_yulAnnotation = &_inlineAssembly.annotation();
239-
(*this)(_inlineAssembly.operations());
239+
(*this)(_inlineAssembly.operations().root());
240240
m_yulAnnotation = nullptr;
241241

242242
return false;

libsolidity/analysis/SyntaxChecker.cpp

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -354,7 +354,7 @@ bool SyntaxChecker::visit(InlineAssembly const& _inlineAssembly)
354354
if (!m_useYulOptimizer)
355355
return false;
356356

357-
if (yul::MSizeFinder::containsMSize(_inlineAssembly.dialect(), _inlineAssembly.operations()))
357+
if (yul::MSizeFinder::containsMSize(_inlineAssembly.dialect(), _inlineAssembly.operations().root()))
358358
m_errorReporter.syntaxError(
359359
6553_error,
360360
_inlineAssembly.location(),

libsolidity/analysis/TypeChecker.cpp

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -940,7 +940,7 @@ bool TypeChecker::visit(InlineAssembly const& _inlineAssembly)
940940
_inlineAssembly.dialect(),
941941
identifierAccess
942942
);
943-
if (!analyzer.analyze(_inlineAssembly.operations()))
943+
if (!analyzer.analyze(_inlineAssembly.operations().root()))
944944
solAssert(m_errorReporter.hasErrors());
945945
_inlineAssembly.annotation().hasMemoryEffects =
946946
lvalueAccessToMemoryVariable ||

libsolidity/analysis/ViewPureChecker.cpp

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -226,7 +226,7 @@ void ViewPureChecker::endVisit(InlineAssembly const& _inlineAssembly)
226226
AssemblyViewPureChecker{
227227
_inlineAssembly.dialect(),
228228
[&](StateMutability _mutability, SourceLocation const& _location) { reportMutability(_mutability, _location); }
229-
}(_inlineAssembly.operations());
229+
}(_inlineAssembly.operations().root());
230230
}
231231

232232
void ViewPureChecker::reportMutability(

libsolidity/ast/AST.h

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -48,7 +48,7 @@
4848
namespace solidity::yul
4949
{
5050
// Forward-declaration to <yul/AST.h>
51-
struct Block;
51+
class AST;
5252
struct Dialect;
5353
}
5454

@@ -1569,7 +1569,7 @@ class InlineAssembly: public Statement
15691569
ASTPointer<ASTString> const& _docString,
15701570
yul::Dialect const& _dialect,
15711571
ASTPointer<std::vector<ASTPointer<ASTString>>> _flags,
1572-
std::shared_ptr<yul::Block> _operations
1572+
std::shared_ptr<yul::AST> _operations
15731573
):
15741574
Statement(_id, _location, _docString),
15751575
m_dialect(_dialect),
@@ -1580,15 +1580,15 @@ class InlineAssembly: public Statement
15801580
void accept(ASTConstVisitor& _visitor) const override;
15811581

15821582
yul::Dialect const& dialect() const { return m_dialect; }
1583-
yul::Block const& operations() const { return *m_operations; }
1583+
yul::AST const& operations() const { return *m_operations; }
15841584
ASTPointer<std::vector<ASTPointer<ASTString>>> const& flags() const { return m_flags; }
15851585

15861586
InlineAssemblyAnnotation& annotation() const override;
15871587

15881588
private:
15891589
yul::Dialect const& m_dialect;
15901590
ASTPointer<std::vector<ASTPointer<ASTString>>> m_flags;
1591-
std::shared_ptr<yul::Block> m_operations;
1591+
std::shared_ptr<yul::AST> m_operations;
15921592
};
15931593

15941594
/**

libsolidity/ast/ASTJsonExporter.cpp

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -665,7 +665,7 @@ bool ASTJsonExporter::visit(InlineAssembly const& _node)
665665
externalReferencesJson.emplace_back(std::move(it));
666666

667667
std::vector<std::pair<std::string, Json>> attributes = {
668-
std::make_pair("AST", Json(yul::AsmJsonConverter(sourceIndexFromLocation(_node.location()))(_node.operations()))),
668+
std::make_pair("AST", Json(yul::AsmJsonConverter(sourceIndexFromLocation(_node.location()))(_node.operations().root()))),
669669
std::make_pair("externalReferences", std::move(externalReferencesJson)),
670670
std::make_pair("evmVersion", dynamic_cast<solidity::yul::EVMDialect const&>(_node.dialect()).evmVersion().name())
671671
};

libsolidity/ast/ASTJsonImporter.cpp

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -733,7 +733,7 @@ ASTPointer<InlineAssembly> ASTJsonImporter::createInlineAssembly(Json const& _no
733733
flags->emplace_back(std::make_shared<ASTString>(flag.get<std::string>()));
734734
}
735735
}
736-
std::shared_ptr<yul::Block> operations = std::make_shared<yul::Block>(yul::AsmJsonImporter(m_sourceNames).createBlock(member(_node, "AST")));
736+
std::shared_ptr<yul::AST> operations = std::make_shared<yul::AST>(yul::AsmJsonImporter(m_sourceNames).createAST(member(_node, "AST")));
737737
return createASTNode<InlineAssembly>(
738738
_node,
739739
nullOrASTString(_node, "documentation"),

libsolidity/codegen/CompilerContext.cpp

Lines changed: 5 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -440,7 +440,7 @@ void CompilerContext::appendInlineAssembly(
440440
std::optional<langutil::SourceLocation> locationOverride;
441441
if (!_system)
442442
locationOverride = m_asm->currentSourceLocation();
443-
std::shared_ptr<yul::Block> parserResult =
443+
std::shared_ptr<yul::AST> parserResult =
444444
yul::Parser(errorReporter, dialect, std::move(locationOverride))
445445
.parse(charStream);
446446
#ifdef SOL_OUTPUT_ASM
@@ -472,7 +472,7 @@ void CompilerContext::appendInlineAssembly(
472472
errorReporter,
473473
dialect,
474474
identifierAccess.resolve
475-
).analyze(*parserResult);
475+
).analyze(parserResult->root());
476476
if (!parserResult || !errorReporter.errors().empty() || !analyzerResult)
477477
reportError("Invalid assembly generated by code generator.");
478478

@@ -491,8 +491,8 @@ void CompilerContext::appendInlineAssembly(
491491
{
492492
// Store as generated sources, but first re-parse to update the source references.
493493
solAssert(m_generatedYulUtilityCode.empty(), "");
494-
m_generatedYulUtilityCode = yul::AsmPrinter(yul::AsmPrinter::TypePrinting::OmitDefault, dialect)(*obj.code);
495-
std::string code = yul::AsmPrinter{yul::AsmPrinter::TypePrinting::OmitDefault, dialect}(*obj.code);
494+
m_generatedYulUtilityCode = yul::AsmPrinter(yul::AsmPrinter::TypePrinting::OmitDefault, dialect)(obj.code->root());
495+
std::string code = yul::AsmPrinter{yul::AsmPrinter::TypePrinting::OmitDefault, dialect}(obj.code->root());
496496
langutil::CharStream charStream(m_generatedYulUtilityCode, _sourceName);
497497
obj.code = yul::Parser(errorReporter, dialect).parse(charStream);
498498
*obj.analysisInfo = yul::AsmAnalyzer::analyzeStrictAssertCorrect(dialect, obj);
@@ -518,7 +518,7 @@ void CompilerContext::appendInlineAssembly(
518518

519519
solAssert(errorReporter.errors().empty(), "Failed to analyze inline assembly block.");
520520
yul::CodeGenerator::assemble(
521-
*parserResult,
521+
parserResult->root(),
522522
analysisInfo,
523523
*m_asm,
524524
m_evmVersion,

0 commit comments

Comments
 (0)