void CheckSimpleObjectCreateExpression(ObjectCreateExpression oce)
        {
            Assert.AreEqual("MyObject", oce.CreateType.Type);
            Assert.AreEqual(3, oce.Parameters.Count);
            Assert.IsTrue(oce.ObjectInitializer.IsNull);

            for (int i = 0; i < oce.Parameters.Count; ++i) {
                Assert.IsTrue(oce.Parameters[i] is PrimitiveExpression);
            }
        }
 public virtual object TrackedVisitObjectCreateExpression(ObjectCreateExpression objectCreateExpression, object data)
 {
     return base.VisitObjectCreateExpression(objectCreateExpression, data);
 }
 public override object VisitObjectCreateExpression(ObjectCreateExpression objectCreateExpression, object data)
 {
     return new CodeObjectCreateExpression(ConvType(objectCreateExpression.CreateType),
                                           objectCreateExpression.Parameters == null ? null : GetExpressionList(objectCreateExpression.Parameters));
 }
 public override sealed object VisitObjectCreateExpression(ObjectCreateExpression objectCreateExpression, object data)
 {
     this.BeginVisit(objectCreateExpression);
     object result = this.TrackedVisitObjectCreateExpression(objectCreateExpression, data);
     this.EndVisit(objectCreateExpression);
     return result;
 }
 public virtual object VisitObjectCreateExpression(ObjectCreateExpression objectCreateExpression, object data)
 {
     Debug.Assert((objectCreateExpression != null));
     Debug.Assert((objectCreateExpression.CreateType != null));
     Debug.Assert((objectCreateExpression.Parameters != null));
     Debug.Assert((objectCreateExpression.ObjectInitializer != null));
     objectCreateExpression.CreateType.AcceptVisitor(this, data);
     foreach (Expression o in objectCreateExpression.Parameters) {
         Debug.Assert(o != null);
         o.AcceptVisitor(this, data);
     }
     return objectCreateExpression.ObjectInitializer.AcceptVisitor(this, data);
 }
 public virtual object VisitObjectCreateExpression(ObjectCreateExpression objectCreateExpression, object data)
 {
     throw new global::System.NotImplementedException("ObjectCreateExpression");
 }
Exemple #7
0
        void ObjectCreateExpression(out Expression oce)
        {
            TypeReference type = null;
            CollectionInitializerExpression initializer = null;
            List<Expression> arguments = null;
            ArrayList dimensions = null;
            oce = null;
            Location startLocation = la.Location;
            bool canBeNormal; bool canBeReDim;

            Expect(162);
            if (StartOf(9)) {
            NonArrayTypeName(out type, false);
            if (la.kind == 37) {
                Get();
                NormalOrReDimArgumentList(out arguments, out canBeNormal, out canBeReDim);
                Expect(38);
                if (la.kind == 35 || (la.kind == Tokens.OpenParenthesis)) {
                    if (la.kind == Tokens.OpenParenthesis) {
                        ArrayTypeModifiers(out dimensions);
                        CollectionInitializer(out initializer);
                    } else {
                        CollectionInitializer(out initializer);
                    }
                }
                if (canBeReDim && !canBeNormal && initializer == null) initializer = new CollectionInitializerExpression();
            }
            }
            if (initializer == null) {
                oce = new ObjectCreateExpression(type, arguments);
            } else {
                if (dimensions == null) dimensions = new ArrayList();
                dimensions.Insert(0, (arguments == null) ? 0 : Math.Max(arguments.Count - 1, 0));
                type.RankSpecifier = (int[])dimensions.ToArray(typeof(int));
                ArrayCreateExpression ace = new ArrayCreateExpression(type, initializer);
                ace.Arguments = arguments;
                oce = ace;
            }

            if (la.kind == 126 || la.kind == 233) {
            if (la.kind == 233) {
                MemberInitializerExpression memberInitializer = null;
                    Expression anonymousMember = null;

                Get();
                CollectionInitializerExpression memberInitializers = new CollectionInitializerExpression();
                    memberInitializers.StartLocation = la.Location;

                Expect(35);
                if (la.kind == 26 || la.kind == 147) {
                    MemberInitializer(out memberInitializer);
                    memberInitializers.CreateExpressions.Add(memberInitializer);
                } else if (StartOf(24)) {
                    Expr(out anonymousMember);
                    memberInitializers.CreateExpressions.Add(anonymousMember);
                } else SynErr(272);
                while (la.kind == 22) {
                    Get();
                    if (la.kind == 26 || la.kind == 147) {
                        MemberInitializer(out memberInitializer);
                        memberInitializers.CreateExpressions.Add(memberInitializer);
                    } else if (StartOf(24)) {
                        Expr(out anonymousMember);
                        memberInitializers.CreateExpressions.Add(anonymousMember);
                    } else SynErr(273);
                }
                Expect(36);
                memberInitializers.EndLocation = t.Location;
                    if(oce is ObjectCreateExpression)
                    {
                        ((ObjectCreateExpression)oce).ObjectInitializer = memberInitializers;
                    }

            } else {
                Get();
                CollectionInitializer(out initializer);
                if(oce is ObjectCreateExpression)
                        ((ObjectCreateExpression)oce).ObjectInitializer = initializer;

            }
            }
            if (oce != null) {
                oce.StartLocation = startLocation;
                oce.EndLocation = t.EndLocation;
            }
        }
 public virtual object VisitObjectCreateExpression(ObjectCreateExpression objectCreateExpression, object data)
 {
     Debug.Assert((objectCreateExpression != null));
     Debug.Assert((objectCreateExpression.CreateType != null));
     Debug.Assert((objectCreateExpression.Parameters != null));
     Debug.Assert((objectCreateExpression.ObjectInitializer != null));
     nodeStack.Push(objectCreateExpression.CreateType);
     objectCreateExpression.CreateType.AcceptVisitor(this, data);
     objectCreateExpression.CreateType = ((TypeReference)(nodeStack.Pop()));
     for (int i = 0; i < objectCreateExpression.Parameters.Count; i++) {
         Expression o = objectCreateExpression.Parameters[i];
         Debug.Assert(o != null);
         nodeStack.Push(o);
         o.AcceptVisitor(this, data);
         o = (Expression)nodeStack.Pop();
         if (o == null)
             objectCreateExpression.Parameters.RemoveAt(i--);
         else
             objectCreateExpression.Parameters[i] = o;
     }
     nodeStack.Push(objectCreateExpression.ObjectInitializer);
     objectCreateExpression.ObjectInitializer.AcceptVisitor(this, data);
     objectCreateExpression.ObjectInitializer = ((CollectionInitializerExpression)(nodeStack.Pop()));
     return null;
 }