From 943623542142e48c16bc4bacb9596b556839f8d9 Mon Sep 17 00:00:00 2001 From: HawDevelopment <70876593+HawDevelopment@users.noreply.github.com> Date: Wed, 24 Aug 2022 17:57:29 +0200 Subject: [PATCH] Create new implementation --- Analysis/src/Frontend.cpp | 25 +++++++++++-------------- 1 file changed, 11 insertions(+), 14 deletions(-) diff --git a/Analysis/src/Frontend.cpp b/Analysis/src/Frontend.cpp index 2970be41..ff71adb1 100644 --- a/Analysis/src/Frontend.cpp +++ b/Analysis/src/Frontend.cpp @@ -685,29 +685,23 @@ ScopePtr Frontend::getModuleEnvironment(const SourceModule& module, const Config } } - if (!config.globalTypePaths.empty()) - { - unfreeze(typeChecker.globalTypes); + auto& types = config.globalTypePaths; + bool isGlobalTypePath = std::find(types.begin(), types.end(), module.name) != types.end(); + if (!isGlobalTypePath && !types.empty()) + { result = std::make_shared(result); for (const std::string& path : config.globalTypePaths) { ModulePtr module = moduleResolver.getModule(path); if (!module) + return; + + for (const auto& [name, ty] : module->getModuleScope()->exportedTypeBindings) { - auto sourceCode = fileResolver->readSource(path); - if (!sourceCode) - continue; - SourceModule sourceModule = parse(path, sourceCode->source, {}); - module = typeChecker.check(sourceModule, Mode::Strict); - if (!module) - continue; + result->exportedTypeBindings[name] = ty; } - - loadModuleIntoScope(typeChecker, module, result, path); } - - freeze(typeChecker.globalTypes); } return result; @@ -929,6 +923,9 @@ std::pair Frontend::getSourceNode(CheckResult& check sourceNode.requireLocations = require.requireList; + if (!config.globalTypePaths.empty()) + sourceNode.requireSet.insert(config.globalTypePaths.begin(), config.globalTypePaths.end()); + return {&sourceNode, &sourceModule}; }