/// <summary> /// Gets a reference to a module. /// </summary> /// <param name="name">The full import name of the module.</param> /// <param name="res">The module reference object.</param> /// <returns> /// True if the module is available. This means that <c>res.Module</c> /// is not null. If this function returns false, <paramref name="res"/> /// may be valid and should not be replaced, but it is an unresolved /// reference. /// </returns> public async Task <ModuleReference> TryImportAsync(string name) { ModuleReference res; bool firstImport = false; if (!_modules.TryGetValue(name, out res) || res == null) { var mod = await Task.Run(() => _interpreter.ImportModule(name)); _modules[name] = res = new ModuleReference(GetBuiltinModule(mod)); firstImport = true; } if (res != null && res.Module == null) { var mod = await Task.Run(() => _interpreter.ImportModule(name)); res.Module = GetBuiltinModule(mod); } if (firstImport && res != null && res.Module != null) { await Task.Run(() => _analyzer.DoDelayedSpecialization(name)); } if (res != null && res.Module == null) { return(null); } return(res); }
/// <summary> /// Gets a reference to a module. /// </summary> /// <param name="name">The full import name of the module.</param> /// <param name="res">The module reference object.</param> /// <returns> /// True if the module is available. This means that <c>res.Module</c> /// is not null. If this function returns false, <paramref name="res"/> /// may be valid and should not be replaced, but it is an unresolved /// reference. /// </returns> public bool TryImport(string name, out ModuleReference res) { bool firstImport = false; if (!_modules.TryGetValue(name, out res) || res == null) { _modules[name] = res = new ModuleReference(GetBuiltinModule(_interpreter.ImportModule(name))); firstImport = true; } if (res != null && res.Module == null) { res.Module = GetBuiltinModule(_interpreter.ImportModule(name)); } if (firstImport && res != null && res.Module != null) { _analyzer.DoDelayedSpecialization(name); } return(res != null && res.Module != null); }
internal void ImportChildren(IPythonModule interpreterModule) { BuiltinModule builtinModule = null; foreach (var child in interpreterModule.GetChildrenModules()) { builtinModule = builtinModule ?? GetBuiltinModule(interpreterModule); var fullname = builtinModule.Name + "." + child; if (!_modules.TryGetValue(fullname, out var modRef) || modRef?.Module == null) { if (builtinModule.TryGetMember(child, out var value) && value is IModule module) { SetModule(fullname, module); _analyzer?.DoDelayedSpecialization(fullname); } } } }
/// <summary> /// Gets a reference to a module. /// </summary> /// <param name="name">The full import name of the module.</param> /// <param name="moduleReference">The module reference object.</param> /// <returns> /// True if the module is available. This means that <c>moduleReference.Module</c> /// is not null. If this function returns false, <paramref name="moduleReference"/> /// may be valid and should not be replaced, but it is an unresolved /// reference. /// </returns> public bool TryImport(string name, out ModuleReference moduleReference) { var firstImport = false; if (!_modules.TryGetValue(name, out moduleReference) || moduleReference == null) { var pythonModule = _interpreter.ImportModule(name); moduleReference = SetModule(name, GetBuiltinModule(pythonModule)); firstImport = true; } if (moduleReference.Module == null) { moduleReference.Module = GetBuiltinModule(_interpreter.ImportModule(name)); } if (firstImport && moduleReference.Module != null) { _analyzer.DoDelayedSpecialization(name); } return(moduleReference.Module != null); }
internal void ImportChildren(IPythonModule interpreterModule) { BuiltinModule module = null; foreach (var child in interpreterModule.GetChildrenModules()) { module = module ?? GetBuiltinModule(interpreterModule); ModuleReference modRef; var fullname = module.Name + "." + child; if (!_modules.TryGetValue(fullname, out modRef) || modRef == null || modRef.Module == null) { IAnalysisSet value; if (module.TryGetMember(child, out value)) { var mod = value as IModule; if (mod != null) { _modules[fullname] = new ModuleReference(mod); _analyzer?.DoDelayedSpecialization(fullname); } } } } }