@@ -74,11 +74,19 @@ using namespace solidity::yul::test;
7474using namespace solidity ::frontend;
7575
7676YulOptimizerTestCommon::YulOptimizerTestCommon (
77- std::shared_ptr<Object> _obj,
77+ std::shared_ptr<Object const > _obj,
7878 Dialect const & _dialect
79- ): m_dialect(&_dialect), m_object(_obj), m_optimizedObject(std::make_shared<Object>()), m_analysisInfo(m_object->analysisInfo )
79+ ): m_dialect(&_dialect), m_object(_obj), m_optimizedObject(std::make_shared<Object>(*_obj) )
8080{
81- *m_optimizedObject = *m_object;
81+ if (
82+ std::any_of (
83+ m_object->subObjects .begin (),
84+ m_object->subObjects .end (),
85+ [](auto const & subObject) { return dynamic_cast <Data*>(subObject.get ()) == nullptr ;}
86+ )
87+ )
88+ solUnimplementedAssert (false , " The current implementation of YulOptimizerTests ignores subobjects that are not Data." );
89+
8290 m_namedSteps = {
8391 {" disambiguator" , [&]() { return disambiguate (); }},
8492 {" nameDisplacer" , [&]() {
@@ -401,7 +409,7 @@ YulOptimizerTestCommon::YulOptimizerTestCommon(
401409 FunctionGrouper::run (*m_context, block);
402410 size_t maxIterations = 16 ;
403411 {
404- Object object; // (*m_object) ??
412+ Object object (*m_optimizedObject);
405413 object.setCode (std::make_shared<AST>(std::get<Block>(ASTCopier{}(block))));
406414 block = std::get<1 >(StackCompressor::run (*m_dialect, object, true , maxIterations));
407415 }
@@ -424,7 +432,7 @@ YulOptimizerTestCommon::YulOptimizerTestCommon(
424432 {" stackLimitEvader" , [&]() {
425433 auto block = disambiguate ();
426434 updateContext (block);
427- Object object; // (*m_object );
435+ Object object (*m_optimizedObject );
428436 object.setCode (std::make_shared<AST>(std::get<Block>(ASTCopier{}(block))));
429437 auto const unreachables = CompilabilityChecker{
430438 *m_dialect,
@@ -536,8 +544,7 @@ Block const* YulOptimizerTestCommon::run()
536544
537545Block YulOptimizerTestCommon::disambiguate ()
538546{
539- auto block = std::get<Block>(Disambiguator (*m_dialect, *m_analysisInfo)(m_object->code ()->root ()));
540- m_analysisInfo.reset ();
547+ auto block = std::get<Block>(Disambiguator (*m_dialect, *m_object->analysisInfo )(m_object->code ()->root ()));
541548 return block;
542549}
543550
0 commit comments