示例#1
0
        private Expression GenNonProto(RHC rhc, ObjExpr objx, GenContext context, Expression basicFn)
        {
            Expression fn;

            //if (_isDirect && context.Mode == CompilerMode.File)
            if (_isDirect && objx.FnMode == FnMode.Full)
                {
                // TODO: Determine if this optimization is valid for Immediate mode
                ParameterExpression v = Expression.Parameter(typeof(IFn));
                Expression initV = Expression.Assign(v, Expression.Field(null, objx.BaseType, objx.VarCallsiteName(_siteIndex)));
                Expression test = Expression.Condition(Expression.Equal(v, Expression.Constant(null, typeof(IFn))), basicFn, v);
                Expression block = Expression.Block(typeof(IFn), new ParameterExpression[] { v }, initV, test);
                fn = block;
            }
            else
                fn = basicFn;

            return GenerateArgsAndCall(rhc, objx, context, fn);
        }