Beispiel #1
0
        public void TupleAssignment()
        {
            Expression expression = parseStatement("(a -> int, b -> FakeClass) = (4, p);");

            TupleDeclarationAssignmentExpression a = assertTypeAndCast <TupleDeclarationAssignmentExpression>(expression);

            Assert.AreEqual(2, a.names.members.Count);

            Assert.AreEqual("a", a.names.members[0].name);
            Assert.AreEqual("int", a.names.members[0].typeName.name);
            Assert.IsNotInstanceOfType(a.names.members[0].typeName, typeof(GenericTypeName));

            Assert.AreEqual("b", a.names.members[1].name);
            Assert.AreEqual("FakeClass", a.names.members[1].typeName.name);
            Assert.IsNotInstanceOfType(a.names.members[1].typeName, typeof(GenericTypeName));

            TupleDefinitionExpression d = assertTypeAndCast <TupleDefinitionExpression>(a.values);

            Assert.AreEqual(2, d.members.Count);

            IntegralLiteralExpression   e = assertTypeAndCast <IntegralLiteralExpression>(d.members[0]);
            VariableReferenceExpression f = assertTypeAndCast <VariableReferenceExpression>(d.members[1]);

            Assert.AreEqual(4, e.value);
            Assert.AreEqual("p", f.name);
        }
Beispiel #2
0
        public static Expression functionDeclaration(Parser p, Expression left, Token t)
        {
            if (left is VariableReferenceExpression)
            {
                Expression arguments = roundBacketRouter(p, t);
                if (arguments is VariableDeclarationExpression)
                {
                    arguments = new TupleDeclarationExpression(new List <VariableDeclarationExpression>()
                    {
                        arguments as VariableDeclarationExpression
                    });
                }

                if (arguments is TupleDeclarationExpression)
                {
                    p.skip(TokenType.Dash);
                    p.skip(TokenType.RightAngleBracket);
                    TypeName   returnType = DashParslets.getTypeName(p);
                    Expression body       = p.parseExpression(0);
                    if (body is BlockExpression)
                    {
                        return(new FunctionExpression((left as VariableReferenceExpression).name,
                                                      arguments as TupleDeclarationExpression,
                                                      returnType,
                                                      body as BlockExpression));
                    }
                    else
                    {
                        throw new Exception("Function has invalid body!");
                    }
                }
                else
                {
                    if (!(arguments is TupleDefinitionExpression))
                    {
                        arguments = new TupleDefinitionExpression(new List <Expression>()
                        {
                            arguments
                        });
                    }
                    return(new FunctionCallExpression((left as VariableReferenceExpression).name, arguments as TupleDefinitionExpression));
                }
            }
            else
            {
                throw new Exception("Function has invalid name!");
            }
        }
Beispiel #3
0
        public void TupleDefinition()
        {
            Expression expression       = parseExpression("(a, b, 4+6,\"dsas\\\"dasd\", a - g + p * t)");
            TupleDefinitionExpression a = assertTypeAndCast <TupleDefinitionExpression>(expression);

            Assert.AreEqual(a.members.Count, 5);

            VariableReferenceExpression b = assertTypeAndCast <VariableReferenceExpression>(a.members[0]);
            VariableReferenceExpression c = assertTypeAndCast <VariableReferenceExpression>(a.members[1]);
            AdditionExpression          z = assertTypeAndCast <AdditionExpression>(a.members[2]);
            StringLiteralExpression     d = assertTypeAndCast <StringLiteralExpression>(a.members[3]);
            AdditionExpression          e = assertTypeAndCast <AdditionExpression>(a.members[4]);

            Assert.AreEqual(b.name, "a");
            Assert.AreEqual(c.name, "b");

            IntegralLiteralExpression y = assertTypeAndCast <IntegralLiteralExpression>(z.left);
            IntegralLiteralExpression x = assertTypeAndCast <IntegralLiteralExpression>(z.right);

            Assert.AreEqual(4, y.value);
            Assert.AreEqual(6, x.value);

            Assert.AreEqual(d.value, "dsas\"dasd");

            SubtractionExpression    f = assertTypeAndCast <SubtractionExpression>(e.left);
            MultiplicationExpression g = assertTypeAndCast <MultiplicationExpression>(e.right);

            VariableReferenceExpression h = assertTypeAndCast <VariableReferenceExpression>(f.left);
            VariableReferenceExpression i = assertTypeAndCast <VariableReferenceExpression>(f.right);
            VariableReferenceExpression j = assertTypeAndCast <VariableReferenceExpression>(g.left);
            VariableReferenceExpression k = assertTypeAndCast <VariableReferenceExpression>(g.right);

            Assert.AreEqual(h.name, "a");
            Assert.AreEqual(i.name, "g");
            Assert.AreEqual(j.name, "p");
            Assert.AreEqual(k.name, "t");
        }
 public ClassInstantiationExpression(TypeName type, TupleDefinitionExpression arguments)
 {
     this.type      = type;
     this.arguments = arguments;
 }
 public FunctionCallExpression(String name, TupleDefinitionExpression arguments)
 {
     this.name      = name;
     this.arguments = arguments;
 }