@@ -444,7 +444,7 @@ void CompilerContext::appendInlineAssembly(
444
444
yul::Parser (errorReporter, dialect, std::move (locationOverride))
445
445
.parse (charStream);
446
446
#ifdef SOL_OUTPUT_ASM
447
- cout << yul::AsmPrinter (&dialect)( *parserResult) << endl;
447
+ std:: cout << yul::AsmPrinter::format ( *parserResult) << std:: endl;
448
448
#endif
449
449
450
450
auto reportError = [&](std::string const & _context)
@@ -481,29 +481,28 @@ void CompilerContext::appendInlineAssembly(
481
481
// so we essentially only optimize the ABI functions.
482
482
if (_optimiserSettings.runYulOptimiser && _localVariables.empty ())
483
483
{
484
- yul::Object obj{dialect} ;
484
+ yul::Object obj;
485
485
obj.setCode (parserResult, std::make_shared<yul::AsmAnalysisInfo>(analysisInfo));
486
486
487
487
solAssert (!dialect.providesObjectAccess ());
488
- optimizeYul (obj, dialect, _optimiserSettings, externallyUsedIdentifiers);
488
+ optimizeYul (obj, _optimiserSettings, externallyUsedIdentifiers);
489
489
490
490
if (_system)
491
491
{
492
492
// Store as generated sources, but first re-parse to update the source references.
493
493
solAssert (m_generatedYulUtilityCode.empty (), " " );
494
- m_generatedYulUtilityCode = yul::AsmPrinter (obj.dialect ())(obj.code ()->root ());
495
- std::string code = yul::AsmPrinter{obj.dialect ()}(obj.code ()->root ());
494
+ m_generatedYulUtilityCode = yul::AsmPrinter::format (*obj.code ());
496
495
langutil::CharStream charStream (m_generatedYulUtilityCode, _sourceName);
497
496
obj.setCode (yul::Parser (errorReporter, dialect).parse (charStream));
498
- obj.analysisInfo = std::make_shared<yul::AsmAnalysisInfo>(yul::AsmAnalyzer::analyzeStrictAssertCorrect (dialect, obj));
497
+ obj.analysisInfo = std::make_shared<yul::AsmAnalysisInfo>(yul::AsmAnalyzer::analyzeStrictAssertCorrect (obj));
499
498
}
500
499
501
500
analysisInfo = std::move (*obj.analysisInfo );
502
501
toBeAssembledAST = obj.code ();
503
502
504
503
#ifdef SOL_OUTPUT_ASM
505
- cout << " After optimizer:" << endl;
506
- cout << yul::AsmPrinter (&dialect)( *parserResult) << endl;
504
+ std:: cout << " After optimizer:" << std:: endl;
505
+ std:: cout << yul::AsmPrinter::format ( *parserResult) << std:: endl;
507
506
#endif
508
507
}
509
508
else if (_system)
@@ -533,16 +532,18 @@ void CompilerContext::appendInlineAssembly(
533
532
}
534
533
535
534
536
- void CompilerContext::optimizeYul (yul::Object& _object, yul::EVMDialect const & _dialect, OptimiserSettings const & _optimiserSettings, std::set<yul::YulName> const & _externalIdentifiers)
535
+ void CompilerContext::optimizeYul (yul::Object& _object, OptimiserSettings const & _optimiserSettings, std::set<yul::YulName> const & _externalIdentifiers)
537
536
{
537
+ yulAssert (_object.dialect ());
538
+ auto const * evmDialect = dynamic_cast <yul::EVMDialect const *>(_object.dialect ());
539
+ yulAssert (evmDialect);
538
540
#ifdef SOL_OUTPUT_ASM
539
- cout << yul::AsmPrinter (*dialect)(* _object.code ) << endl;
541
+ std:: cout << yul::AsmPrinter::format (* _object.code ()) << std:: endl;
540
542
#endif
541
543
542
544
bool const isCreation = runtimeContext () != nullptr ;
543
- yul::GasMeter meter (_dialect , isCreation, _optimiserSettings.expectedExecutionsPerDeployment );
545
+ yul::GasMeter meter (*evmDialect , isCreation, _optimiserSettings.expectedExecutionsPerDeployment );
544
546
yul::OptimiserSuite::run (
545
- _dialect,
546
547
&meter,
547
548
_object,
548
549
_optimiserSettings.optimizeStackAllocation ,
@@ -553,8 +554,8 @@ void CompilerContext::optimizeYul(yul::Object& _object, yul::EVMDialect const& _
553
554
);
554
555
555
556
#ifdef SOL_OUTPUT_ASM
556
- cout << " After optimizer:" << endl;
557
- cout << yul::AsmPrinter (*dialect)(*object .code ) << endl;
557
+ std:: cout << " After optimizer:" << std:: endl;
558
+ std:: cout << yul::AsmPrinter::format (*_object .code ()) << std:: endl;
558
559
#endif
559
560
}
560
561
0 commit comments