Skip to content

Commit 231a01c

Browse files
authored
Merge pull request #15803 from ipsilon/filter-object-compiler-test-ouputs
Add `outputs` setting to `ObjectCompilerTest`
2 parents 85074cc + d62ff26 commit 231a01c

File tree

2 files changed

+25
-9
lines changed

2 files changed

+25
-9
lines changed

test/libyul/ObjectCompilerTest.cpp

Lines changed: 24 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -57,6 +57,13 @@ ObjectCompilerTest::ObjectCompilerTest(std::string const& _filename):
5757
},
5858
"minimal"
5959
);
60+
61+
constexpr std::array allowedOutputs = {"Assembly", "Bytecode", "Opcodes", "SourceMappings"};
62+
boost::split(m_outputSetting, m_reader.stringSetting("outputs", "Assembly,Bytecode,Opcodes,SourceMappings"), boost::is_any_of(","));
63+
for (auto const& output: m_outputSetting)
64+
if (std::find(allowedOutputs.begin(), allowedOutputs.end(), output) == allowedOutputs.end())
65+
BOOST_THROW_EXCEPTION(std::runtime_error{"Invalid output type: \"" + output + "\""});
66+
6067
m_expectation = m_reader.simpleExpectations();
6168
}
6269

@@ -78,18 +85,26 @@ TestCase::TestResult ObjectCompilerTest::run(std::ostream& _stream, std::string
7885
solAssert(obj.bytecode);
7986
solAssert(obj.sourceMappings);
8087

81-
m_obtainedResult = "Assembly:\n" + obj.assembly->assemblyString(yulStack.debugInfoSelection());
88+
if (std::find(m_outputSetting.begin(), m_outputSetting.end(), "Assembly") != m_outputSetting.end())
89+
m_obtainedResult = "Assembly:\n" + obj.assembly->assemblyString(yulStack.debugInfoSelection());
8290
if (obj.bytecode->bytecode.empty())
8391
m_obtainedResult += "-- empty bytecode --\n";
8492
else
85-
m_obtainedResult +=
86-
"Bytecode: " +
87-
util::toHex(obj.bytecode->bytecode) +
88-
"\nOpcodes: " +
89-
boost::trim_copy(evmasm::disassemble(obj.bytecode->bytecode, solidity::test::CommonOptions::get().evmVersion())) +
90-
"\nSourceMappings:" +
91-
(obj.sourceMappings->empty() ? "" : " " + *obj.sourceMappings) +
92-
"\n";
93+
{
94+
if (std::find(m_outputSetting.begin(), m_outputSetting.end(), "Bytecode") != m_outputSetting.end())
95+
m_obtainedResult += "Bytecode: " + util::toHex(obj.bytecode->bytecode);
96+
if (std::find(m_outputSetting.begin(), m_outputSetting.end(), "Opcodes") != m_outputSetting.end())
97+
{
98+
m_obtainedResult += (!m_obtainedResult.empty() && m_obtainedResult.back() != '\n') ? "\n" : "";
99+
m_obtainedResult += "Opcodes: " +
100+
boost::trim_copy(evmasm::disassemble(obj.bytecode->bytecode, solidity::test::CommonOptions::get().evmVersion()));
101+
}
102+
if (std::find(m_outputSetting.begin(), m_outputSetting.end(), "SourceMappings") != m_outputSetting.end())
103+
{
104+
m_obtainedResult += (!m_obtainedResult.empty() && m_obtainedResult.back() != '\n') ? "\n" : "";
105+
m_obtainedResult += "SourceMappings:" + (obj.sourceMappings->empty() ? "" : " " + *obj.sourceMappings) + "\n";
106+
}
107+
}
93108

94109
return checkResult(_stream, _linePrefix, _formatted);
95110
}

test/libyul/ObjectCompilerTest.h

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -54,6 +54,7 @@ class ObjectCompilerTest: public solidity::frontend::test::EVMVersionRestrictedT
5454
void disambiguate();
5555

5656
frontend::OptimisationPreset m_optimisationPreset;
57+
std::vector<std::string> m_outputSetting;
5758
};
5859

5960
}

0 commit comments

Comments
 (0)