public T Visit(DestructuredArrayExpression expression) { if (expression.Initializer != null) { expression.Initializer.Accept(this); } return(default(T)); }
public override Expression Visit(DestructuredArrayExpression expression) { foreach (var index in expression.Indices) { _scope.Define(index.Name, false); } return(base.Visit(expression)); }
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 }); }
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)); }
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); }
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); }