public static RubyTopLevelScope/*!*/ CreateMainTopLevelScope(LocalsDictionary/*!*/ locals, Scope/*!*/ globalScope, LanguageContext/*!*/ language, out object self, out RuntimeFlowControl/*!*/ rfc, string dataPath, int dataOffset) { Assert.NotNull(locals, globalScope, language); GlobalScopeExtension rubyGlobalScope = (GlobalScopeExtension)language.EnsureScopeExtension(globalScope); RubyTopLevelScope scope = new RubyTopLevelScope(rubyGlobalScope, null, locals); scope.Initialize(new RuntimeFlowControl(), RubyMethodAttributes.PrivateInstance, rubyGlobalScope.MainObject); scope.SetDebugName(rubyGlobalScope.IsHosted ? "top-primary-hosted" : "top-primary"); // define TOPLEVEL_BINDING constant: if (!rubyGlobalScope.IsHosted) { var objectClass = rubyGlobalScope.Context.ObjectClass; objectClass.SetConstant("TOPLEVEL_BINDING", new Binding(scope)); if (dataOffset >= 0) { RubyFile dataFile; if (File.Exists(dataPath)) { dataFile = new RubyFile(rubyGlobalScope.Context, dataPath, RubyFileMode.RDONLY); dataFile.Seek(dataOffset, SeekOrigin.Begin); } else { dataFile = null; } objectClass.SetConstant("DATA", dataFile); } } self = scope.SelfObject; rfc = scope.RuntimeFlowControl; return scope; }
protected static CodeContext/*!*/ CreateTopLevelCodeContext(Scope/*!*/ scope, LanguageContext/*!*/ context) { context.EnsureScopeExtension(CodeContext.GetModuleScope(scope)); return new CodeContext(scope, (PythonContext)context); }
private static RubyTopLevelScope/*!*/ CreateTopLevelScopeInternal(LocalsDictionary/*!*/ locals, Scope/*!*/ globalScope, LanguageContext/*!*/ language) { GlobalScopeExtension rubyGlobalScope = (GlobalScopeExtension)language.EnsureScopeExtension(globalScope); RubyTopLevelScope result = new RubyTopLevelScope(rubyGlobalScope, null, locals); result.Initialize(new RuntimeFlowControl(), RubyMethodAttributes.PrivateInstance, rubyGlobalScope.MainObject); result.SetDebugName("top-level"); return result; }