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); }
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; }
public Expression GenCode(RHC rhc, ObjExpr objx, GenContext context) { return(objx.GenLocal(context, _b)); }
public Expression GenAssign(RHC rhc, ObjExpr objx, GenContext context, Expr val) { return(Expression.Block( objx.GenAssignLocal(context, _b, val), objx.GenLocal(context, _b))); }
public Expression GenAssign(RHC rhc, ObjExpr objx, GenContext context, Expr val) { return Expression.Block( objx.GenAssignLocal(context,_b,val), objx.GenLocal(context,_b)); }
public Expression GenCode(RHC rhc, ObjExpr objx, GenContext context) { return objx.GenLocal(context,_b); }
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); }