public T Visit(DestructuredObjectExpression expression) { if (expression.Initializer != null) { expression.Initializer.Accept(this); } return(default(T)); }
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 }); }
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(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); }