private void EmitMemberInit(MemberInitExpression init) { EmitExpression(init.NewExpression); LocalBuilder loc = null; if (init.NewExpression.Type.GetTypeInfo().IsValueType && init.Bindings.Count > 0) { loc = _ilg.DeclareLocal(init.NewExpression.Type); _ilg.Emit(OpCodes.Stloc, loc); _ilg.Emit(OpCodes.Ldloca, loc); } EmitMemberInit(init.Bindings, loc == null, init.NewExpression.Type); if (loc != null) { _ilg.Emit(OpCodes.Ldloc, loc); } }
protected virtual bool CompareMemberInit(MemberInitExpression a, MemberInitExpression b) { return this.Compare(a.NewExpression, b.NewExpression) && this.CompareBindingList(a.Bindings, b.Bindings); }
public MemberInitExpressionProxy(MemberInitExpression node) { _node = node; }
protected MemberInitExpression UpdateMemberInit(MemberInitExpression init, NewExpression nex, IEnumerable<MemberBinding> bindings) { if (nex != init.NewExpression || bindings != init.Bindings) { return Expression.MemberInit(nex, bindings); } return init; }
protected virtual Expression VisitMemberInit(MemberInitExpression init) { NewExpression n = (NewExpression)this.Visit(init.NewExpression); IEnumerable<MemberBinding> bindings = this.VisitBindingList(init.Bindings); return this.UpdateMemberInit(init, n, bindings); }
protected override Expression VisitMemberInit(MemberInitExpression node) { return(GiveUp(node)); }
protected override Expression VisitMemberInit(MemberInitExpression init) { return base.VisitMemberInit(init); }
/// <summary> /// MemberInitExpression visit method /// </summary> /// <param name="init">The MemberInitExpression to visit</param> /// <returns>The visited MemberInitExpression</returns> internal override Expression VisitMemberInit(MemberInitExpression init) { this.cantTranslateExpression = true; return(init); }
public Func <EventRecord, object> GetTransform(Type outputType) { Expression <Func <EventRecord, SystemEvent> > template = e => new SystemEvent { Header = new SystemHeader { ActivityId = e.ActivityId.HasValue ? e.ActivityId.Value : Guid.Empty, Channel = 0, Context = e.LogName, Level = e.Level.Value, EventId = (ushort)e.Id, Keywords = e.Keywords.HasValue ? (ulong)e.Keywords.Value : (ulong)0, Opcode = e.Opcode.HasValue ? (byte)e.Opcode.Value : (byte)0, ProcessId = e.ProcessId.HasValue ? (uint)e.ProcessId.Value : 0, ProviderId = e.ProviderId.HasValue ? e.ProviderId.Value : Guid.Empty, RelatedActivityId = e.RelatedActivityId.HasValue ? e.RelatedActivityId.Value : Guid.Empty, Task = e.Task.HasValue ? (ushort)e.Task.Value : (ushort)0, ThreadId = e.ThreadId.HasValue ? (uint)e.ThreadId.Value : (uint)0, Timestamp = e.TimeCreated.HasValue ? e.TimeCreated.Value : DateTime.MinValue, Version = e.Version.HasValue ? e.Version.Value : (byte)0 } }; if (outputType == typeof(SystemEvent)) { return(template.Compile()); } LambdaExpression ex = template; var mi = (MemberInitExpression)ex.Body; var bindings = new List <MemberBinding>(mi.Bindings); ParameterExpression record = ex.Parameters[0]; PropertyInfo[] properties = outputType.GetProperties(); int index = 0; foreach (PropertyInfo p in properties) { var attribute = p.GetAttribute <EventFieldAttribute>(); if (attribute == null) { continue; } // the following is to handle value maps, that were emitted as enumerations Type t; if (p.PropertyType.IsEnum) { t = p.PropertyType; } else { t = GetSimpleType(attribute.OriginalType); } MemberAssignment b = Expression.Bind(p, Expression.Convert( Expression.Property( Expression.Call( Expression.Property(record, typeof(EventRecord).GetProperty( "Properties")), typeof(IList <EventProperty>).GetMethod("get_Item"), Expression.Constant(index++)), typeof(EventProperty).GetProperty("Value")), t)); bindings.Add(b); } NewExpression n = Expression.New(outputType); MemberInitExpression m = Expression.MemberInit(n, bindings.ToArray()); UnaryExpression cast = Expression.Convert(m, typeof(object)); Expression <Func <EventRecord, object> > exp = Expression.Lambda <Func <EventRecord, object> >(cast, ex.Parameters); return(exp.Compile()); }
protected virtual MemberInitExpression VisitMemberInit(MemberInitExpression init) { return(Expression.MemberInit(VisitNew(init.NewExpression), VisitBindingList(init.Bindings))); }
private static int CountChildren(MemberInitExpression m) {
private IBsonSerializer BuildMemberInit(MemberInitExpression node) { var mapping = ProjectionMapper.Map(node); return(BuildProjectedSerializer(mapping)); }