/// <summary> /// Gets the ScriptModule that has been published under the given SourceUnit. /// </summary> public bool TryGetScriptModule(string publicName, out ScriptModule module) { if (_modules == null) { module = null; return(false); } lock (_modules) { module = GetCachedModuleNoLock(publicName); } return(module != null); }
public ModuleContext EnsureModuleContext(ScriptModule module) { Contract.RequiresNotNull(module, "module"); ModuleContext context = module.GetModuleContext(ContextId); if (context == null) { context = CreateModuleContext(module); if (context == null) { throw new InvalidImplementationException("CreateModuleContext must return a module context."); } return module.SetModuleContext(ContextId, context); } return context; }
internal static void Initialize(IronSchemeLanguageProvider ironSchemeLanguageProvider) { lp = ironSchemeLanguageProvider; se = lp.GetEngine() as IronSchemeScriptEngine; scriptmodule = ScriptDomainManager.CurrentManager.Host.DefaultModule as ScriptModule; ModuleContext mc = new ModuleContext(scriptmodule); mc.CompilerContext = new CompilerContext(SourceUnit.CreateSnippet(se, "")); cc = new CodeContext(scriptmodule.Scope, se.GetLanguageContext(), mc); binder = new IronScheme.Actions.IronSchemeActionBinder(cc); Generator.initme = true; }
public ModuleContext EnsureModuleContext(ScriptModule module) { Contract.RequiresNotNull(module, "module"); ModuleContext context = module.GetModuleContext(ContextId); if (context == null) { context = CreateModuleContext(module); if (context == null) { throw new InvalidImplementationException("CreateModuleContext must return a module context."); } return(module.SetModuleContext(ContextId, context)); } return(context); }
public Shell(string languageId, string name) { this.languageId = languageId; this.moduleName = name; this.provider = ScriptDomainManager.CurrentManager.GetLanguageProvider(languageId); this.engine = provider.GetEngine(); this.module = ScriptDomainManager.CurrentManager.CreateModule(name); this.module.FileName = "SilverStunts"; reprDelegate = engine.EvaluateAs<ReprDelegate>("repr"); // TODO: bring WPF symbols into scripting namespace //ScriptModule wpf = ScriptDomainManager.CurrentManager.CreateModule("wpf"); //Stream s = this.GetType().Assembly.GetManifestResourceStream("SilverStunts.WPF.py"); //string code = new StreamReader(s).ReadToEnd(); //engine.Execute(code, wpf); //module.SetVariable("wpf", wpf); }
protected override LanguageContext GetLanguageContext(ScriptModule module) { return _defaultContext; }
public virtual ScriptCode Reload(ScriptCode original, ScriptModule module) { original.SourceUnit.Reload(); return CompileSourceCode(original.SourceUnit, Engine.GetModuleCompilerOptions(module)); }
public ModuleContext GetModuleContext(ScriptModule module) { Contract.RequiresNotNull(module, "module"); return module.GetModuleContext(ContextId); }
/// <summary> /// Factory for ModuleContext creation. /// It is guaranteed that this method is called once per each ScriptModule the langauge code is executed within. /// </summary> /// <param name="module">The module the context will be associated with.</param> /// <returns>Non-<c>null</c> module context instance.</returns> public virtual ModuleContext CreateModuleContext(ScriptModule module) { return new ModuleContext(module); }
/// <summary> /// Module creation factory. The only way how to create a module. /// Modules compiled from a single source file unit get <see cref="ScriptModule.FileName"/> property set to a host /// normalized full path of that source unit. The property is set to a <c>null</c> reference for other modules. /// <c>scope</c> can be <c>null</c>. /// /// Ensures creation of module contexts for all languages whose code is assembled into the module. /// </summary> public ScriptModule CreateModule(string name, ScriptModuleKind kind, Scope scope, params ScriptCode[] scriptCodes) { Contract.RequiresNotNull(name, "name"); Contract.RequiresNotNullItems(scriptCodes, "scriptCodes"); CodeGen.SymbolWriters.Clear(); OptimizedModuleGenerator generator = null; if (scope == null) { if (scriptCodes.Length > 0) { if (scriptCodes[0].LanguageContext.Engine.Options.InterpretedMode) { scope = new Scope(); } else { generator = OptimizedModuleGenerator.Create(name, scriptCodes); scope = generator.GenerateScope(); } } else { scope = new Scope(); } } ScriptModule result = new ScriptModule(name, kind, scope, scriptCodes); CodeGen.SymbolWriters.Clear(); { if (name == "ironscheme.boot.new") { return result; } } // single source file unit modules have unique full path: if (scriptCodes.Length == 1) { result.FileName = scriptCodes[0].SourceUnit.Id; } else { result.FileName = null; } // Initializes module contexts for all contained optimized script codes; // Module contexts stored in optimized module's code contexts cannot be changed from now on. // Such change would require the CodeContexts to be overwritten. if (generator != null) { generator.BindGeneratedCodeToModule(result); } else { foreach (ScriptCode code in scriptCodes) { code.LanguageContext.EnsureModuleContext(result); } } _host.ModuleCreated(result); return result; }
/// <summary> /// Creates a module context. /// </summary> /// <param name="module">Optional. <c>null</c> for default and invariant contexts.</param> public ModuleContext(ScriptModule module) { _module = module; }
/// <summary> /// Module creation factory. The only way how to create a module. /// Modules compiled from a single source file unit get <see cref="ScriptModule.FileName"/> property set to a host /// normalized full path of that source unit. The property is set to a <c>null</c> reference for other modules. /// <c>scope</c> can be <c>null</c>. /// /// Ensures creation of module contexts for all languages whose code is assembled into the module. /// </summary> public ScriptModule CreateModule(string name, ScriptModuleKind kind, Scope scope, params ScriptCode[] scriptCodes) { Contract.RequiresNotNull(name, "name"); Contract.RequiresNotNullItems(scriptCodes, "scriptCodes"); CodeGen.SymbolWriters.Clear(); OptimizedModuleGenerator generator = null; if (scope == null) { if (scriptCodes.Length > 0) { if (scriptCodes[0].LanguageContext.Engine.Options.InterpretedMode) { scope = new Scope(); } else { generator = OptimizedModuleGenerator.Create(name, scriptCodes); scope = generator.GenerateScope(); } } else { scope = new Scope(); } } ScriptModule result = new ScriptModule(name, kind, scope, scriptCodes); CodeGen.SymbolWriters.Clear(); { if (name == "ironscheme.boot.new") { return(result); } } // single source file unit modules have unique full path: if (scriptCodes.Length == 1) { result.FileName = scriptCodes[0].SourceUnit.Id; } else { result.FileName = null; } // Initializes module contexts for all contained optimized script codes; // Module contexts stored in optimized module's code contexts cannot be changed from now on. // Such change would require the CodeContexts to be overwritten. if (generator != null) { generator.BindGeneratedCodeToModule(result); } else { foreach (ScriptCode code in scriptCodes) { code.LanguageContext.EnsureModuleContext(result); } } _host.ModuleCreated(result); return(result); }
public ModuleContext GetModuleContext(ScriptModule module) { Contract.RequiresNotNull(module, "module"); return(module.GetModuleContext(ContextId)); }
public virtual ScriptCode Reload(ScriptCode original, ScriptModule module) { original.SourceUnit.Reload(); return(CompileSourceCode(original.SourceUnit, Engine.GetModuleCompilerOptions(module))); }
/// <summary> /// Factory for ModuleContext creation. /// It is guaranteed that this method is called once per each ScriptModule the langauge code is executed within. /// </summary> /// <param name="module">The module the context will be associated with.</param> /// <returns>Non-<c>null</c> module context instance.</returns> public virtual ModuleContext CreateModuleContext(ScriptModule module) { return(new ModuleContext(module)); }
/// <summary> /// Gets the ScriptModule that has been published under the given SourceUnit. /// </summary> public bool TryGetScriptModule(string publicName, out ScriptModule module) { if (_modules == null) { module = null; return false; } lock(_modules) { module = GetCachedModuleNoLock(publicName); } return module != null; }
/// <summary> /// Sets the ScriptModule that is registered for the given SourceUnit. /// </summary> public void PublishModule(ScriptModule module, string publicName) { Contract.RequiresNotNull(module, "module"); Contract.RequiresNotNull(publicName, "publicName"); EnsureModules(); lock (_modules) { _modules[publicName] = new WeakReference(module); } }
public void PublishModule(ScriptModule module) { Contract.RequiresNotNull(module, "module"); Contract.Requires(module.FileName != null, "module", "Cannot publish module with null file name"); PublishModule(module, module.FileName); }
private ScriptModule CompileAndPublishModule(string moduleName, SourceUnit su) { Assert.NotNull(moduleName, su); EnsureModules(); string key = su.Id ?? moduleName; // check if we've already published this SourceUnit lock (_modules) { ScriptModule tmp = GetCachedModuleNoLock(key); if (tmp != null) { return(tmp); } } // compile and initialize the module... ScriptModule mod = CompileModule(moduleName, su); lock (_modules) { // check if someone else compiled it first... ScriptModule tmp = GetCachedModuleNoLock(key); if (tmp != null) { return(tmp); } LoadInfo load; if (_loading.TryGetValue(key, out load)) { if (load.Thread == Thread.CurrentThread) { return(load.Module); } Monitor.Exit(_modules); try { lock (load) { if (!load.Done) { if (load.Mre == null) { load.Mre = new ManualResetEvent(false); } Monitor.Exit(load); try { load.Mre.WaitOne(); } finally { Monitor.Enter(load); } } } if (load.Module != null) { return(load.Module); } throw load.Exception; } finally { Monitor.Enter(_modules); } } load = new LoadInfo(); load.Module = mod; load.Thread = Thread.CurrentThread; _loading[key] = load; bool success = false; Monitor.Exit(_modules); try { mod.Execute(); success = true; lock (load) { load.Done = true; if (load.Mre != null) { load.Mre.Set(); } } return(mod); } catch (Exception e) { lock (load) { load.Exception = e; load.Done = true; if (load.Mre != null) { load.Mre.Set(); } } throw; } finally { Monitor.Enter(_modules); _loading.Remove(key); if (success) { _modules[key] = new WeakReference(mod); } } } }
internal RemoteScriptModule(ScriptModule module) { Debug.Assert(module != null); _module = module; }
public void BindGeneratedCodeToModule(ScriptModule module) { Assert.NotNull(module); foreach (CodeContext codeContext in _codeContexts) { codeContext.ModuleContext = codeContext.LanguageContext.EnsureModuleContext(module); } }
public object Run(ScriptModule module) { Contract.RequiresNotNull(module, "module"); ModuleContext moduleContext = _languageContext.EnsureModuleContext(module); return Run(new CodeContext(module.Scope, _languageContext, moduleContext), false); }
protected override LanguageContext GetLanguageContext(ScriptModule module) { return this.LanguageContext; }