protected override InitializerCompiler GetInitializerCompiler(NativeLiteralEncodingStrategy literalEncodingStrategy, NativeDynamicCallStrategy dynamicCallStrategy, NativeDiscreteBindingEncodingStrategy discreteBindingEncodingStrategy) { BindingScope globalScope = BindingScope.ForClassInitializer((SmalltalkClass)this.Initializer.Binding.Value, this.Compiler.Parameters.Runtime.GlobalScope); BindingScope reservedScope = ReservedScope.ForClassInitializer(); return(this.GetInitializerCompiler(globalScope, reservedScope, literalEncodingStrategy, dynamicCallStrategy, discreteBindingEncodingStrategy)); }
private Expression <Func <object, ExecutionContext, object> > CompileClassInitializer(SmalltalkRuntime runtime, SmalltalkNameScope globalNameScope, SmalltalkClass cls) { return(this.Compile(runtime, BindingScope.ForClassInitializer(cls, globalNameScope), ReservedScope.ForClassInitializer(), String.Format("{0} initializer", this.Binding.Name.Value))); }
protected override Expression <Func <object, ExecutionContext, object> > Compile(SmalltalkRuntime runtime, SmalltalkNameScope globalScope) { return(this.Compile(runtime, BindingScope.ForProgramInitializer(globalScope), ReservedScope.ForProgramInitializer(), "Global initializer")); }
protected override RootCompilationContext GetCompilationContext(MethodNode parseTree, SmalltalkClass cls, Expression self, Expression executionContext, Expression[] arguments) { SmalltalkNameScope globalNameScope = this.CompilerOptions.GlobalNameScope ?? this.Runtime.GlobalScope; BindingScope globalScope = BindingScope.ForClassMethod(cls, globalNameScope); BindingScope reservedScope = ReservedScope.ForClassMethod(); return(new RootCompilationContext(this, globalScope, reservedScope, self, executionContext, arguments, cls.Name, parseTree.Selector)); }
protected override Expression <Func <object, ExecutionContext, object> > Compile(SmalltalkRuntime runtime, SmalltalkNameScope globalScope) { PoolBinding poolBinding = globalScope.GetPoolBinding(this.PoolName); if ((poolBinding == null) || (poolBinding.Value == null)) { throw new RuntimeCodeGenerationException(String.Format("Cannot find pool named {0}", this.PoolName)); // May be better exception type } return(this.Compile(runtime, BindingScope.ForPoolInitializer(poolBinding.Value, globalScope), ReservedScope.ForPoolInitializer(), String.Format("{0} initializerFor: {1}", this.PoolName, this.Binding.Name.Value))); }
protected override InitializerCompiler GetInitializerCompiler(NativeLiteralEncodingStrategy literalEncodingStrategy, NativeDynamicCallStrategy dynamicCallStrategy, NativeDiscreteBindingEncodingStrategy discreteBindingEncodingStrategy) { PoolBinding poolBinding = this.Compiler.Parameters.Runtime.GlobalScope.GetPoolBinding(this.Initializer.PoolName); if ((poolBinding == null) || (poolBinding.Value == null)) { throw new Exception(String.Format("Cannot find pool named {0}", this.Initializer.PoolName)); // May be better exception type } BindingScope globalScope = BindingScope.ForPoolInitializer(poolBinding.Value, this.Compiler.Parameters.Runtime.GlobalScope); BindingScope reservedScope = ReservedScope.ForPoolInitializer(); return(this.GetInitializerCompiler(globalScope, reservedScope, literalEncodingStrategy, dynamicCallStrategy, discreteBindingEncodingStrategy)); }