MCPcopy Create free account
hub / github.com/argotorg/solidity / analyze

Method analyze

libsolidity/interface/CompilerStack.cpp:479–562  ·  view source on GitHub ↗

Source from the content-addressed store, hash-verified

477}
478
479bool CompilerStack::analyze()
480{
481 solAssert(m_stackState == ParsedAndImported, "Must call analyze only after parsing was successful.");
482
483 if (!resolveImports())
484 return false;
485
486 for (Source const* source: m_sourceOrder)
487 if (source->ast)
488 Scoper::assignScopes(*source->ast);
489
490 bool noErrors = true;
491
492 try
493 {
494 bool experimentalSolidity = isExperimentalSolidity();
495
496 SyntaxChecker syntaxChecker(m_errorReporter, m_optimiserSettings.runYulOptimiser, m_experimental);
497 for (Source const* source: m_sourceOrder)
498 if (source->ast && !syntaxChecker.checkSyntax(*source->ast))
499 noErrors = false;
500
501 m_globalContext = std::make_shared<GlobalContext>(m_evmVersion);
502 // We need to keep the same resolver during the whole process.
503 NameAndTypeResolver resolver(*m_globalContext, m_evmVersion, m_errorReporter, experimentalSolidity);
504 for (Source const* source: m_sourceOrder)
505 if (source->ast && !resolver.registerDeclarations(*source->ast))
506 return false;
507
508 std::map<std::string, SourceUnit const*> sourceUnitsByName;
509 for (auto& source: m_sources)
510 sourceUnitsByName[source.first] = source.second.ast.get();
511 for (Source const* source: m_sourceOrder)
512 if (source->ast && !resolver.performImports(*source->ast, sourceUnitsByName))
513 return false;
514
515 resolver.warnHomonymDeclarations();
516
517 {
518 DocStringTagParser docStringTagParser(m_errorReporter);
519 for (Source const* source: m_sourceOrder)
520 if (source->ast && !docStringTagParser.parseDocStrings(*source->ast))
521 noErrors = false;
522 }
523
524 // Requires DocStringTagParser
525 for (Source const* source: m_sourceOrder)
526 if (source->ast && !resolver.resolveNamesAndTypes(*source->ast))
527 return false;
528
529 if (experimentalSolidity)
530 {
531 if (!analyzeExperimental())
532 noErrors = false;
533 }
534 else if (!analyzeLegacy(noErrors))
535 noErrors = false;
536 }

Callers 3

importEVMAssemblyMethod · 0.45
compileSolidityMethod · 0.45
analyzeLegacyMethod · 0.45

Calls 9

checkSyntaxMethod · 0.80
registerDeclarationsMethod · 0.80
performImportsMethod · 0.80
parseDocStringsMethod · 0.80
resolveNamesAndTypesMethod · 0.80
getMethod · 0.45
hasErrorsMethod · 0.45

Tested by

no test coverage detected