public override JsStatement VisitVariableDeclarationStatement(JsVariableDeclarationStatement statement, object data)
        {
            List <JsExpression> list = null;

            foreach (var d in statement.Declarations)
            {
                _variables.Add(d.Name);
                if (d.Initializer != null)
                {
                    list = list ?? new List <JsExpression>();
                    list.Add(JsExpression.Assign(JsExpression.Identifier(d.Name), d.Initializer));
                }
            }
            if (list == null)
            {
                return(new JsBlockStatement(new JsStatement[0], mergeWithParent: true));
            }
            else if (list.Count == 1)
            {
                return(new JsExpressionStatement(list[0]));
            }
            else
            {
                return(new JsExpressionStatement(JsExpression.Comma(list)));
            }
        }
 public void CommaIsNotParenthesizedInsideIndexing()
 {
     AssertCorrect(JsExpression.Binary(ExpressionNodeType.Index,
                                       JsExpression.Number(1),
                                       JsExpression.Comma(
                                           JsExpression.Number(2),
                                           JsExpression.Number(3)
                                           )
                                       ),
                   "1[2, 3]");
 }
 public void CommaIsParenthesizedAsAssignmentValue()
 {
     AssertCorrect(JsExpression.Binary(ExpressionNodeType.Assign,
                                       JsExpression.Number(1),
                                       JsExpression.Comma(
                                           JsExpression.Number(2),
                                           JsExpression.Number(3)
                                           )
                                       ),
                   "1 = (2, 3)");
 }
 public void ExpressionStatementIsParenthesizedWhenItStartsWithAnObjectLiteral()
 {
     AssertCorrect((JsStatement)JsExpression.ObjectLiteral(new JsObjectLiteralProperty("a", JsExpression.Number(0))), "({ a: 0 });\n");
     AssertCorrect((JsStatement)JsExpression.Invocation(JsExpression.ObjectLiteral(new JsObjectLiteralProperty("a", JsExpression.Number(0)))), "({ a: 0 }());\n");
     AssertCorrect((JsStatement)JsExpression.Member(JsExpression.ObjectLiteral(new JsObjectLiteralProperty("a", JsExpression.Number(0))), "a"), "({ a: 0 }.a);\n");
     AssertCorrect((JsStatement)JsExpression.Comma(JsExpression.ObjectLiteral(new JsObjectLiteralProperty("a", JsExpression.Number(0))), JsExpression.Null), "({ a: 0 }, null);\n");
     AssertCorrect((JsStatement)JsExpression.Conditional(JsExpression.ObjectLiteral(new JsObjectLiteralProperty("a", JsExpression.Number(0))), JsExpression.Number(0), JsExpression.Number(1)), "({ a: 0 } ? 0 : 1);\n");
     AssertCorrect((JsStatement)JsExpression.PrefixPlusPlus(JsExpression.ObjectLiteral(new JsObjectLiteralProperty("a", JsExpression.Number(0)))), "++{ a: 0 };\n");
     AssertCorrect((JsStatement)JsExpression.PostfixPlusPlus(JsExpression.ObjectLiteral(new JsObjectLiteralProperty("a", JsExpression.Number(0)))), "({ a: 0 }++);\n");
     AssertCorrect((JsStatement)JsExpression.PostfixMinusMinus(JsExpression.ObjectLiteral(new JsObjectLiteralProperty("a", JsExpression.Number(0)))), "({ a: 0 }--);\n");
     AssertCorrect((JsStatement)JsExpression.Index(JsExpression.ObjectLiteral(new JsObjectLiteralProperty("a", JsExpression.Number(0))), JsExpression.Number(0)), "({ a: 0 }[0]);\n");
     AssertCorrect((JsStatement)JsExpression.Member(JsExpression.Invocation(JsExpression.Member(JsExpression.ObjectLiteral(new JsObjectLiteralProperty("a", JsExpression.Number(0))), "a")), "b"), "({ a: 0 }.a().b);\n");
 }
Esempio n. 5
0
 public void CommaIsOutputWithoutSpace()
 {
     AssertCorrect(JsExpression.Comma(
                       JsExpression.Comma(
                           JsExpression.Number(1),
                           JsExpression.Number(2)
                           ),
                       JsExpression.Comma(
                           JsExpression.Number(3),
                           JsExpression.Number(4)
                           )
                       ),
                   "1,2,3,4");
 }
 public void CommaIsNotParenthesizedInsideOtherComma()
 {
     AssertCorrect(JsExpression.Comma(
                       JsExpression.Comma(
                           JsExpression.Number(1),
                           JsExpression.Number(2)
                           ),
                       JsExpression.Comma(
                           JsExpression.Number(3),
                           JsExpression.Number(4)
                           )
                       ),
                   "1, 2, 3, 4");
 }
 public void CommaIsParenthesizedInsideArrayLiteral()
 {
     AssertCorrect(JsExpression.ArrayLiteral(
                       JsExpression.Comma(
                           JsExpression.Number(1),
                           JsExpression.Number(2)
                           ),
                       JsExpression.Number(3),
                       JsExpression.Comma(
                           JsExpression.Number(4),
                           JsExpression.Number(5)
                           )
                       ),
                   "[(1, 2), 3, (4, 5)]");
 }
 public void CommaIsParenthesizedInsideConstructorArgumentList()
 {
     AssertCorrect(JsExpression.New(
                       JsExpression.Number(10),
                       JsExpression.Comma(
                           JsExpression.Number(1),
                           JsExpression.Number(2)
                           ),
                       JsExpression.Number(3),
                       JsExpression.Comma(
                           JsExpression.Number(4),
                           JsExpression.Number(5)
                           )
                       ),
                   "new 10((1, 2), 3, (4, 5))");
 }
 public void CommaIsParenthesizedInsideInvocation()
 {
     AssertCorrect(JsExpression.Invocation(
                       JsExpression.Identifier("f"),
                       JsExpression.Comma(
                           JsExpression.Number(1),
                           JsExpression.Number(2)
                           ),
                       JsExpression.Number(3),
                       JsExpression.Comma(
                           JsExpression.Number(4),
                           JsExpression.Number(5)
                           )
                       ),
                   "f((1, 2), 3, (4, 5))");
 }
Esempio n. 10
0
        public void ForStatementsAreCorrectlyOutput()
        {
            AssertCorrect(new JsForStatement(new JsVariableDeclarationStatement(new JsVariableDeclaration("i", JsExpression.Number(0))),
                                             JsExpression.Lesser(JsExpression.Identifier("i"), JsExpression.Number(10)),
                                             JsExpression.PostfixPlusPlus(JsExpression.Identifier("i")),
                                             JsBlockStatement.EmptyStatement),
                          "for(var i=0;i<10;i++){}");

            AssertCorrect(new JsForStatement(new JsExpressionStatement(JsExpression.Assign(JsExpression.Identifier("i"), JsExpression.Number(0))),
                                             JsExpression.Lesser(JsExpression.Identifier("i"), JsExpression.Number(10)),
                                             JsExpression.PostfixPlusPlus(JsExpression.Identifier("i")),
                                             JsBlockStatement.EmptyStatement),
                          "for(i=0;i<10;i++){}");

            AssertCorrect(new JsForStatement(new JsVariableDeclarationStatement(new JsVariableDeclaration("i", JsExpression.Number(0)), new JsVariableDeclaration("j", JsExpression.Number(1))),
                                             JsExpression.Lesser(JsExpression.Identifier("i"), JsExpression.Number(10)),
                                             JsExpression.Comma(JsExpression.PostfixPlusPlus(JsExpression.Identifier("i")), JsExpression.PostfixPlusPlus(JsExpression.Identifier("j"))),
                                             JsBlockStatement.EmptyStatement),
                          "for(var i=0,j=1;i<10;i++,j++){}");

            AssertCorrect(new JsForStatement(new JsEmptyStatement(), null, null, JsBlockStatement.EmptyStatement), "for(;;){}");
        }
Esempio n. 11
0
        public void ForStatementsAreCorrectlyOutput()
        {
            AssertCorrect(JsStatement.For(JsStatement.Var(JsStatement.Declaration("i", JsExpression.Number(0))),
                                          JsExpression.Lesser(JsExpression.Identifier("i"), JsExpression.Number(10)),
                                          JsExpression.PostfixPlusPlus(JsExpression.Identifier("i")),
                                          JsStatement.EmptyBlock),
                          "for (var i = 0; i < 10; i++) {\n}\n");

            AssertCorrect(JsStatement.For(JsExpression.Assign(JsExpression.Identifier("i"), JsExpression.Number(0)),
                                          JsExpression.Lesser(JsExpression.Identifier("i"), JsExpression.Number(10)),
                                          JsExpression.PostfixPlusPlus(JsExpression.Identifier("i")),
                                          JsStatement.EmptyBlock),
                          "for (i = 0; i < 10; i++) {\n}\n");

            AssertCorrect(JsStatement.For(JsStatement.Var(JsStatement.Declaration("i", JsExpression.Number(0)), JsStatement.Declaration("j", JsExpression.Number(1))),
                                          JsExpression.Lesser(JsExpression.Identifier("i"), JsExpression.Number(10)),
                                          JsExpression.Comma(JsExpression.PostfixPlusPlus(JsExpression.Identifier("i")), JsExpression.PostfixPlusPlus(JsExpression.Identifier("j"))),
                                          JsStatement.EmptyBlock),
                          "for (var i = 0, j = 1; i < 10; i++, j++) {\n}\n");

            AssertCorrect(JsStatement.For(JsStatement.Empty, null, null, JsStatement.EmptyBlock),
                          "for (;;) {\n}\n");
        }
 public void CommaExpressionIsParenthesizedInsideObjectLiteral()
 {
     AssertCorrect(JsExpression.ObjectLiteral(new JsObjectLiteralProperty("x", JsExpression.Comma(JsExpression.Number(1), JsExpression.Number(2))),
                                              new JsObjectLiteralProperty("y", JsExpression.Number(3))),
                   "{ x: (1, 2), y: 3 }");
 }
        public virtual JsExpression VisitCommaExpression(JsCommaExpression expression, TData data)
        {
            var after = VisitExpressions(expression.Expressions, data);

            return(ReferenceEquals(after, expression.Expressions) ? expression : JsExpression.Comma(after));
        }