Skip to content

Commit f0f2a77

Browse files
committed
Use yul parser in assembly stack.
1 parent e6f979f commit f0f2a77

File tree

1 file changed

+12
-7
lines changed

1 file changed

+12
-7
lines changed

libsolidity/interface/AssemblyStack.cpp

Lines changed: 12 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -74,31 +74,35 @@ bool AssemblyStack::parseAndAnalyze(std::string const& _sourceName, std::string
7474
if (!m_errorReporter.errors().empty())
7575
return false;
7676
solAssert(m_parserResult, "");
77+
solAssert(m_parserResult->code, "");
7778

7879
return analyzeParsed();
7980
}
8081

8182
bool AssemblyStack::analyzeParsed()
8283
{
83-
m_analysisInfo = make_shared<assembly::AsmAnalysisInfo>();
84-
assembly::AsmAnalyzer analyzer(*m_analysisInfo, m_errorReporter, m_evmVersion, boost::none, languageToAsmFlavour(m_language));
85-
m_analysisSuccessful = analyzer.analyze(*m_parserResult);
84+
solAssert(m_parserResult, "");
85+
solAssert(m_parserResult->code, "");
86+
m_parserResult->analysisInfo = make_shared<assembly::AsmAnalysisInfo>();
87+
assembly::AsmAnalyzer analyzer(*m_parserResult->analysisInfo, m_errorReporter, m_evmVersion, boost::none, languageToAsmFlavour(m_language));
88+
m_analysisSuccessful = analyzer.analyze(*m_parserResult->code);
8689
return m_analysisSuccessful;
8790
}
8891

8992
MachineAssemblyObject AssemblyStack::assemble(Machine _machine) const
9093
{
9194
solAssert(m_analysisSuccessful, "");
9295
solAssert(m_parserResult, "");
93-
solAssert(m_analysisInfo, "");
96+
solAssert(m_parserResult->code, "");
97+
solAssert(m_parserResult->analysisInfo, "");
9498

9599
switch (_machine)
96100
{
97101
case Machine::EVM:
98102
{
99103
MachineAssemblyObject object;
100104
eth::Assembly assembly;
101-
assembly::CodeGenerator::assemble(*m_parserResult, *m_analysisInfo, assembly);
105+
assembly::CodeGenerator::assemble(*m_parserResult->code, *m_parserResult->analysisInfo, assembly);
102106
object.bytecode = make_shared<eth::LinkerObject>(assembly.assemble());
103107
object.assembly = assembly.assemblyString();
104108
return object;
@@ -107,7 +111,7 @@ MachineAssemblyObject AssemblyStack::assemble(Machine _machine) const
107111
{
108112
MachineAssemblyObject object;
109113
yul::EVMAssembly assembly(true);
110-
yul::CodeTransform(assembly, *m_analysisInfo, m_language == Language::Yul, true)(*m_parserResult);
114+
yul::CodeTransform(assembly, *m_parserResult->analysisInfo, m_language == Language::Yul, true)(*m_parserResult->code);
111115
object.bytecode = make_shared<eth::LinkerObject>(assembly.finalize());
112116
/// TODO: fill out text representation
113117
return object;
@@ -122,5 +126,6 @@ MachineAssemblyObject AssemblyStack::assemble(Machine _machine) const
122126
string AssemblyStack::print() const
123127
{
124128
solAssert(m_parserResult, "");
125-
return assembly::AsmPrinter(m_language == Language::Yul)(*m_parserResult);
129+
solAssert(m_parserResult->code, "");
130+
return m_parserResult->toString(m_language == Language::Yul) + "\n";
126131
}

0 commit comments

Comments
 (0)