Example #1
0
        public T Visit(DestructuredObjectExpression expression)
        {
            if (expression.Initializer != null)
            {
                expression.Initializer.Accept(this);
            }

            return(default(T));
        }
Example #2
0
        public override Expression Visit(DestructuredObjectExpression expression)
        {
            foreach (var field in expression.Fields)
            {
                _scope.Define(field.Alias ?? field.Name, false);
            }

            return(base.Visit(expression));
        }
        public virtual Expression Visit(DestructuredObjectExpression expression)
        {
            var initializer = expression.Initializer != null?expression.Initializer.Accept(this) : null;

            return(new DestructuredObjectExpression(expression.Token, expression.Fields, initializer, expression.IsReadOnly)
            {
                EndToken = expression.EndToken
            });
        }
Example #4
0
        public Expression Parse(Parser parser, Token token, out bool trailingSemicolon)
        {
            trailingSemicolon = false;

            parser.Take(TokenType.LeftParen);
            var             varToken = parser.Take(TokenType.Var);
            Token           inToken;
            Expression      declaration;
            Expression      expression;
            BlockExpression block;

            if (parser.MatchAndTake(TokenType.LeftBrace))
            {
                var fields = VarParselet.ParseObjectDestructuring(parser);
                inToken = parser.Take(TokenType.In);

                expression  = parser.ParseExpression();
                declaration = new DestructuredObjectExpression(varToken, fields, null, false);

                parser.Take(TokenType.RightParen);
                block = parser.ParseBlock();

                return(new ForeachExpression(token, inToken, "input", expression, block, declaration));
            }

            if (parser.MatchAndTake(TokenType.LeftSquare))
            {
                var indices = VarParselet.ParseArrayDestructuring(parser);
                inToken = parser.Take(TokenType.In);

                expression  = parser.ParseExpression();
                declaration = new DestructuredArrayExpression(varToken, indices, null, false);

                parser.Take(TokenType.RightParen);
                block = parser.ParseBlock();

                return(new ForeachExpression(token, inToken, "input", expression, block, declaration));
            }

            var identifier = parser.Take(TokenType.Identifier).Contents;

            inToken    = parser.Take(TokenType.In);
            expression = parser.ParseExpression();

            parser.Take(TokenType.RightParen);

            block = parser.ParseBlock();

            return(new ForeachExpression(token, inToken, identifier, expression, block));
        }
Example #5
0
        public Expression Parse(Parser parser, Token token, out bool trailingSemicolon)
        {
            trailingSemicolon = false;

            parser.Take(TokenType.LeftParen);
            var varToken = parser.Take(TokenType.Var);
            Token inToken;
            Expression declaration;
            Expression expression;
            BlockExpression block;

            if (parser.MatchAndTake(TokenType.LeftBrace))
            {
                var fields = VarParselet.ParseObjectDestructuring(parser);
                inToken = parser.Take(TokenType.In);

                expression = parser.ParseExpression();
                declaration = new DestructuredObjectExpression(varToken, fields, null, false);

                parser.Take(TokenType.RightParen);
                block = parser.ParseBlock();

                return new ForeachExpression(token, inToken, "input", expression, block, declaration);
            }

            if (parser.MatchAndTake(TokenType.LeftSquare))
            {
                var indices = VarParselet.ParseArrayDestructuring(parser);
                inToken = parser.Take(TokenType.In);

                expression = parser.ParseExpression();
                declaration = new DestructuredArrayExpression(varToken, indices, null, false);

                parser.Take(TokenType.RightParen);
                block = parser.ParseBlock();

                return new ForeachExpression(token, inToken, "input", expression, block, declaration);
            }

            var identifier = parser.Take(TokenType.Identifier).Contents;

            inToken = parser.Take(TokenType.In);
            expression = parser.ParseExpression();

            parser.Take(TokenType.RightParen);

            block = parser.ParseBlock();

            return new ForeachExpression(token, inToken, identifier, expression, block);
        }
Example #6
0
        public int Visit(DestructuredObjectExpression expression)
        {
            _writer.Write("{0} {{ ", expression.IsReadOnly ? "const" : "var");

            var fields = expression.Fields.Select(field => field.Alias != null ? string.Format("{0}: {1}", field.Name, field.Alias) : field.Name).ToArray();

            _writer.Write(string.Join(", ", fields));
            _writer.Write(" }");

            if (expression.Initializer != null)
            {
                _writer.Write(" = ");
                expression.Initializer.Accept(this);
            }

            return(0);
        }