Exemplo n.º 1
0
 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);
 }
Exemplo n.º 8
0
 /// <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);
 }
Exemplo n.º 9
0
        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());
        }
Exemplo n.º 10
0
 protected virtual MemberInitExpression VisitMemberInit(MemberInitExpression init)
 {
     return(Expression.MemberInit(VisitNew(init.NewExpression), VisitBindingList(init.Bindings)));
 }
 private static int CountChildren(MemberInitExpression m)
 {
Exemplo n.º 12
0
        private IBsonSerializer BuildMemberInit(MemberInitExpression node)
        {
            var mapping = ProjectionMapper.Map(node);

            return(BuildProjectedSerializer(mapping));
        }