diff options
| author | Yong He <yonghe@outlook.com> | 2020-06-05 13:01:06 -0700 |
|---|---|---|
| committer | GitHub <noreply@github.com> | 2020-06-05 13:01:06 -0700 |
| commit | 92fc3aaa835315ff08750c7b5a7498b7228e2c33 (patch) | |
| tree | 162b2b4b9411ede11d6a53015713ab431283f6c6 /source/slang/slang.cpp | |
| parent | 389be08822ba554327b5948266f54acf8a312fe7 (diff) | |
| parent | e3e1cf2045f14837cfecb14e252c0e1083787b93 (diff) | |
Merge branch 'master' into findtypebynamefix
Diffstat (limited to 'source/slang/slang.cpp')
| -rw-r--r-- | source/slang/slang.cpp | 24 |
1 files changed, 17 insertions, 7 deletions
diff --git a/source/slang/slang.cpp b/source/slang/slang.cpp index 793b81ebf..331277bf3 100644 --- a/source/slang/slang.cpp +++ b/source/slang/slang.cpp @@ -124,13 +124,17 @@ void Session::init() // Use to create a ASTBuilder RefPtr<ASTBuilder> builtinAstBuilder(new ASTBuilder(m_sharedASTBuilder)); - + + // And the global ASTBuilder + globalAstBuilder = new ASTBuilder(m_sharedASTBuilder); + // Make sure our source manager is initialized builtinSourceManager.initialize(nullptr, nullptr); - + // Built in linkage uses the built in builder m_builtinLinkage = new Linkage(this, builtinAstBuilder); + // Because the `Session` retains the builtin `Linkage`, // we need to make sure that the parent pointer inside // `Linkage` doesn't create a retain cycle. @@ -952,7 +956,10 @@ void FrontEndCompileRequest::parseTranslationUnit( combinedPreprocessorDefinitions.Add(def.Key, def.Value); auto module = translationUnit->getModule(); - RefPtr<ModuleDecl> translationUnitSyntax = linkage->getASTBuilder()->create<ModuleDecl>(); + + ASTBuilder* astBuilder = module->getASTBuilder(); + + RefPtr<ModuleDecl> translationUnitSyntax = astBuilder->create<ModuleDecl>(); translationUnitSyntax->nameAndLoc.name = translationUnit->moduleName; translationUnitSyntax->module = module; module->setModuleDecl(translationUnitSyntax); @@ -966,13 +973,13 @@ void FrontEndCompileRequest::parseTranslationUnit( // // We are adding the marker here, before we even parse the // code in the module, in case the subsequent steps would - // like to treat the standard library differently. Alternatiely + // like to treat the standard library differently. Alternatively // we could pass down the `m_isStandardLibraryCode` flag to // these passes. // if( m_isStandardLibraryCode ) { - translationUnitSyntax->modifiers.first = linkage->getASTBuilder()->create<FromStdLibModifier>(); + translationUnitSyntax->modifiers.first = astBuilder->create<FromStdLibModifier>(); } for (auto sourceFile : translationUnit->getSourceFiles()) @@ -986,7 +993,7 @@ void FrontEndCompileRequest::parseTranslationUnit( module); parseSourceFile( - linkage->getASTBuilder(), + astBuilder, translationUnit, tokens, getSink(), @@ -1054,7 +1061,9 @@ void FrontEndCompileRequest::generateIR() // * it can dump ir // * it can generate diagnostics - /// Generate IR for translation unit + /// Generate IR for translation unit. + /// TODO(JS): Use the linkage ASTBuilder, because it seems possible that cross module constructs are possible in + /// ir lowering. RefPtr<IRModule> irModule(generateIRForTranslationUnit(getLinkage()->getASTBuilder(), translationUnit)); if (verifyDebugSerialization) @@ -1771,6 +1780,7 @@ void FilePathDependencyList::addDependency(Module* module) Module::Module(Linkage* linkage) : ComponentType(linkage) + , m_astBuilder(linkage->getASTBuilder()->getSharedASTBuilder()) { addModuleDependency(this); } |
