private KeyValuePair <Assembly, TopNamespaceTracker> LoadAssemblyInfo(Assembly assm) { var nsTracker = new TopNamespaceTracker(_codeContext.LanguageContext.DomainManager); nsTracker.LoadAssembly(assm); return(new KeyValuePair <Assembly, TopNamespaceTracker>(assm, nsTracker)); }
public ScriptLanguageContext(ScriptDomainManager domainManager, IDictionary <string, object> options) : base(domainManager) { _topNamespace = new TopNamespaceTracker(domainManager); _aliasedNamespaceGroups = new Dictionary <string, NamespaceGroupTracker>(); _scriptVisibleNamespaces = new NamespaceGroupTracker("$sxe", _topNamespace); if ((_onAssemblyLoadHandler == null) && (Interlocked.CompareExchange(ref _onAssemblyLoadHandler, OnAssemblyLoaded, null) == null)) { DomainManager.AssemblyLoaded += _onAssemblyLoadHandler; } foreach (var assembly in DomainManager.GetLoadedAssemblyList()) { LoadAssembly(assembly); } LoadAssemblyScriptImports(typeof(ScriptLanguageContext).Assembly); _defaultBinderState = new BinderState(new ScriptBinder(this)); _overloadResolver = new ScriptOverloadResolverFactory(this); EnsureParser(); }
public void AddAssembly(Assembly asm) { if (asm != null && _references.FindIndex(reference => (reference.Key == asm)) == -1) { // TODO: When do assembly references get removed? var nsTracker = new TopNamespaceTracker(_codeContext.LanguageContext.DomainManager); nsTracker.LoadAssembly(asm); AddAssembly(new KeyValuePair <Assembly, TopNamespaceTracker>(asm, nsTracker)); } }
private static TopNamespaceTracker GetReflectedAssembly(CodeContext /*!*/ context, Assembly assem) { Debug.Assert(assem != null); var assemblyMap = GetAssemblyMap(context.LanguageContext as PythonContext); lock (assemblyMap) { TopNamespaceTracker reflectedAssembly; if (assemblyMap.TryGetValue(assem, out reflectedAssembly)) { return(reflectedAssembly); } reflectedAssembly = new TopNamespaceTracker(context.LanguageContext.DomainManager); reflectedAssembly.LoadAssembly(assem); assemblyMap[assem] = reflectedAssembly; return(reflectedAssembly); } }
public IronPythonInterpreter(ScriptEngine engine) { _engine = engine; var pythonContext = HostingHelpers.GetLanguageContext(_engine) as PythonContext; _codeContextCls = new ModuleContext(new PythonDictionary(), pythonContext).GlobalContext; _codeContextCls.ModuleContext.ShowCls = true; _codeContext = new ModuleContext( new PythonDictionary(), HostingHelpers.GetLanguageContext(_engine) as PythonContext ).GlobalContext; _namespaceTracker = new TopNamespaceTracker(_codeContext.LanguageContext.DomainManager); AddAssembly(LoadAssemblyInfo(typeof(string).Assembly)); AddAssembly(LoadAssemblyInfo(typeof(Debug).Assembly)); string installDir = GetPythonInstallDir(); if (installDir != null) { var dllDir = Path.Combine(installDir, "DLLs"); if (Directory.Exists(dllDir)) { foreach (var assm in Directory.GetFiles(dllDir)) { try { var asm = Assembly.LoadFile(Path.Combine(dllDir, assm)); _engine.Runtime.LoadAssembly(asm); AddAssembly(LoadAssemblyInfo(asm)); } catch { } } } } LoadAssemblies(); LoadModules(); }
public static object GetBoundMember(CodeContext /*!*/ context, Assembly self, string name) { TopNamespaceTracker reflectedAssembly = GetReflectedAssembly(context, self); if (name == "__dict__") { return(new PythonDictionary(new WrapperDictionaryStorage(reflectedAssembly))); } MemberTracker mem = reflectedAssembly.TryGetPackageAny(name); if (mem != null) { if (mem.MemberType == TrackerTypes.Type) { return(DynamicHelpers.GetPythonTypeFromType(((TypeTracker)mem).Type)); } // namespace or type collision return(mem); } return(OperationFailed.Value); }
public WrapperDictionaryStorage(TopNamespaceTracker /*!*/ data) { _data = data; }
public ScopeAttributesWrapper(ScriptDomainManager manager) { _tracker = new TopNamespaceTracker(manager); }
public NamespaceGroupTracker(string alias, TopNamespaceTracker topNamespaceTracker) : base(alias) { SetTopPackage(topNamespaceTracker); _includedNamespaces = new List <NamespaceTracker>(); }