public DLR.Expression <System.Func <Runtime.Aplus, AType> > ParseToLambda(string code) { AplusScope scope = new AplusScope(null, "__top__", this.aplus, DLR.Expression.Parameter(typeof(Aplus), "__aplusRuntime__"), DLR.Expression.Parameter(typeof(DYN.IDynamicMetaObjectProvider), "__module__") ); FunctionInformation funcionInfo = new FunctionInformation(this.aplus.CurrentContext); if (this.aplus.Context != null) { funcionInfo.LoadInfo((this.aplus.Context as Scope).Storage as ScopeStorage); } DLR.Expression codebody = null; AST.Node tree = Compiler.Parse.String(code, this.aplus.LexerMode, funcionInfo); if (tree == null) { codebody = DLR.Expression.Constant(null); } else { codebody = DLR.Expression.Block( new DLR.ParameterExpression[] { scope.ModuleExpression }, DLR.Expression.Assign( scope.ModuleExpression, DLR.Expression.PropertyOrField(scope.RuntimeExpression, "Context") ), tree.Generate(scope) ); } DLR.Expression <System.Func <Aplus, AType> > method = DLR.Expression.Lambda <Func <Aplus, AType> >( codebody, scope.RuntimeExpression ); return(method); }
public DLR.Expression<System.Func<Runtime.Aplus, AType>> ParseToLambda(string code) { AplusScope scope = new AplusScope(null, "__top__", this.aplus, DLR.Expression.Parameter(typeof(Aplus), "__aplusRuntime__"), DLR.Expression.Parameter(typeof(DYN.IDynamicMetaObjectProvider), "__module__") ); FunctionInformation funcionInfo = new FunctionInformation(this.aplus.CurrentContext); if (this.aplus.Context != null) { funcionInfo.LoadInfo((this.aplus.Context as Scope).Storage as ScopeStorage); } DLR.Expression codebody = null; AST.Node tree = Compiler.Parse.String(code, this.aplus.LexerMode, funcionInfo); if (tree == null) { codebody = DLR.Expression.Constant(null); } else { codebody = DLR.Expression.Block( new DLR.ParameterExpression[] { scope.ModuleExpression }, DLR.Expression.Assign( scope.ModuleExpression, DLR.Expression.PropertyOrField(scope.RuntimeExpression, "Context") ), tree.Generate(scope) ); } DLR.Expression<System.Func<Aplus, AType>> method = DLR.Expression.Lambda<Func<Aplus, AType>>( codebody, scope.RuntimeExpression ); return method; }