示例#1
0
        public virtual Expression GenCode(RHC rhc, ObjExpr objx, GenContext context)
        {
            if (IsDefType)
            {
                return(Expression.Constant(null));
            }

            List <Expression> args = new List <Expression>(_closes.count() + 1);

            if (SupportsMeta)
            {
                args.Add(Expression.Constant(null, typeof(IPersistentMap))); // meta
            }
            for (ISeq s = RT.keys(_closes); s != null; s = s.next())
            {
                LocalBinding lb = (LocalBinding)s.first();
                if (lb.PrimitiveType != null)
                {
                    args.Add(objx.GenUnboxedLocal(context, lb));
                }
                else
                {
                    args.Add(objx.GenLocal(context, lb));
                }
            }

            Expression newExpr = Expression.New(_ctorInfo, args);

            return(newExpr);
        }
示例#2
0
        public virtual Expression GenCode(RHC rhc, ObjExpr objx, GenContext context)
        {
            if (IsDefType)
                return Expression.Constant(null);

            List<Expression> args = new List<Expression>(_closes.count()+1);
            if (SupportsMeta)
                args.Add(Expression.Constant(null,typeof(IPersistentMap))); // meta
            for (ISeq s = RT.keys(_closes); s != null; s = s.next())
            {
                LocalBinding lb = (LocalBinding)s.first();
                if (lb.PrimitiveType != null)
                    args.Add(objx.GenUnboxedLocal(context, lb));
                else
                    args.Add(objx.GenLocal(context, lb));
            }

            Expression newExpr = Expression.New(_ctorInfo, args);

            return newExpr;
        }
示例#3
0
 public Expression GenCodeUnboxed(RHC rhc, ObjExpr objx, GenContext context)
 {
     return(objx.GenUnboxedLocal(context, _b));
 }
 public Expression GenCodeUnboxed(RHC rhc, ObjExpr objx, GenContext context)
 {
     return objx.GenUnboxedLocal(context, _b);
 }
示例#5
0
        internal Expression GenLetFnInits(GenContext context, ParameterExpression parm, ObjExpr objx, IPersistentSet letFnLocals)
        {
            ParameterExpression cvtParm = Expression.Parameter(_compiledType,"cvt");
            Expression initExpr = Expression.Assign(cvtParm,Expression.Convert(parm, _compiledType));

            List<Expression> exprs = new List<Expression>();
            exprs.Add(initExpr);

            for (ISeq s = RT.keys(_closes); s != null; s = s.next())
            {
                LocalBinding lb = (LocalBinding)s.first();
                if (letFnLocals.contains(lb))
                {
                    FieldBuilder fb;
                    _closedOverFieldsMap.TryGetValue(lb,out fb);

                    Type primt = lb.PrimitiveType;
                    Expression init = primt != null ? objx.GenUnboxedLocal(context, lb) : objx.GenLocal(context,lb);

                    exprs.Add(Expression.Assign(Expression.Field(_thisParam,fb), init));
                }
            }

            return Expression.Block(new ParameterExpression[] { cvtParm }, exprs);
        }