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

            return(default(T));
        }
예제 #2
0
        public override Expression Visit(DestructuredArrayExpression expression)
        {
            foreach (var index in expression.Indices)
            {
                _scope.Define(index.Name, false);
            }

            return(base.Visit(expression));
        }
예제 #3
0
        public virtual Expression Visit(DestructuredArrayExpression expression)
        {
            var initializer = expression.Initializer != null?expression.Initializer.Accept(this) : null;

            return(new DestructuredArrayExpression(expression.Token, expression.Indices, initializer, expression.IsReadOnly)
            {
                EndToken = expression.EndToken
            });
        }
예제 #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));
        }
예제 #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);
        }
예제 #6
0
        public int Visit(DestructuredArrayExpression expression)
        {
            _writer.Write("{0} [", expression.IsReadOnly ? "const" : "var");

            var indices = expression.Indices.Select(index => (index.IsSlice ? "..." : "") + index.Name).ToArray();

            _writer.Write(string.Join(", ", indices));
            _writer.Write(" ]");

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

            return(0);
        }