예제 #1
0
        public ListInitExpressionNode(ListInitExpression expression, Container container) : base(expression, container)//, [Optional]IExpressionParser parser) : base(expression, parser)
        {
            var parser = container.GetInstance <IExpressionParser>();

            Initializers  = expression.Initializers.Select(e => new ElementInitNode(e, container)).ToList();
            NewExpression = parser.Parse <NewExpressionNode>(expression.NewExpression);
        }
예제 #2
0
    public void Parse_NewExpressionNoArguments()
    {
        ASTNode           root           = ExpressionParser.Parse("new Vector3()");
        NewExpressionNode expressionNode = AssertInstanceOfAndReturn <NewExpressionNode>(root);

        Assert.AreEqual(typeof(Vector3), TypeProcessor.ResolveType(expressionNode.typeLookup, new string[] { "UnityEngine" }));
        Assert.AreEqual(0, expressionNode.parameters.Count);
    }
예제 #3
0
        public MemberInitExpressionNode(MemberInitExpression expression, Container container) : base(expression, container)//, [Optional]IExpressionParser parser)  : base(expression, parser)
        {
            var memberBindingParser = container.GetInstance <IMemberBingingParser>();
            var expressionParser    = container.GetInstance <IExpressionParser>();

            Bindings      = expression.Bindings.Select(e => memberBindingParser.Parse(e)).ToList();
            NewExpression = expressionParser.Parse <NewExpressionNode>(expression.NewExpression);
        }
예제 #4
0
        protected override Expression VisitNew(NewExpression node)
        {
            var newExpression = new NewExpressionNode(node.Type, node.Constructor, node.Members.ToArray());

            AddChild(newExpression);

            foreach (var argument in node.Arguments)
            {
                newExpression.Arguments.Add((ExpressionNode)this.VisitNode(argument));
            }

            return(node);
        }
예제 #5
0
    public void Parse_NewExpression_NamespaceWithGeneric()
    {
        ASTNode           root           = ExpressionParser.Parse("new System.Tuple<float, float, float>(1, 2, 3)");
        NewExpressionNode expressionNode = AssertInstanceOfAndReturn <NewExpressionNode>(root);

        Assert.AreEqual(typeof(Tuple <float, float, float>), TypeProcessor.ResolveType(expressionNode.typeLookup));
        Assert.AreEqual(3, expressionNode.parameters.Count);
        LiteralNode param0 = AssertInstanceOfAndReturn <LiteralNode>(expressionNode.parameters[0]);
        LiteralNode param1 = AssertInstanceOfAndReturn <LiteralNode>(expressionNode.parameters[1]);
        LiteralNode param2 = AssertInstanceOfAndReturn <LiteralNode>(expressionNode.parameters[2]);

        Assert.AreEqual("1", param0.rawValue);
        Assert.AreEqual("2", param1.rawValue);
        Assert.AreEqual("3", param2.rawValue);
    }
예제 #6
0
    public void Parse_NewExpression()
    {
        ASTNode           root           = ExpressionParser.Parse("new Vector3(1, 2, 3)");
        NewExpressionNode expressionNode = AssertInstanceOfAndReturn <NewExpressionNode>(root);

        Assert.AreEqual(typeof(Vector3), TypeProcessor.ResolveType(expressionNode.typeLookup, new string[] { "UnityEngine" }));
        Assert.AreEqual(3, expressionNode.parameters.Count);
        LiteralNode param0 = AssertInstanceOfAndReturn <LiteralNode>(expressionNode.parameters[0]);
        LiteralNode param1 = AssertInstanceOfAndReturn <LiteralNode>(expressionNode.parameters[1]);
        LiteralNode param2 = AssertInstanceOfAndReturn <LiteralNode>(expressionNode.parameters[2]);

        Assert.AreEqual("1", param0.rawValue);
        Assert.AreEqual("2", param1.rawValue);
        Assert.AreEqual("3", param2.rawValue);
    }