private static AstFor ParseForIn(TokenStream tks) { var si = tks.SourceInfo; tks.Expect(TokenType.For); var ident = tks.Expect(TokenType.Ident).StringValue; tks.Expect(TokenType.In); var @from = ParseExpression(tks); tks.Expect(TokenType.DotDot); var to = ParseExpression(tks); var opTk = tks.Accept(TokenType.Plus, TokenType.Minus); var updateOp = opTk?.Type ?? TokenType.Plus; tks.Expect(TokenType.LCurBracket); var body = ParseBody(tks); tks.Expect(TokenType.RCurBracket); var pre = new AstDeclaration(si, ident, null, @from); var condOp = (updateOp == TokenType.Plus) ? TokenType.LessThanEquals : TokenType.GreaterThanEquals; var itrId = new AstIdent(si, ident); var cond = new AstBinaryOp(si, itrId, condOp, to); var update_ = new AstBinaryOp(si, itrId, updateOp, new AstNumber(si, 1)); var update = new AstAssign(si, itrId, update_); return(new AstFor(si, new List <AstNode> { pre }, cond, new List <AstExpression> { update }, body)); }
public void AddMember(AstDeclaration member) { _members.Add(member.Name, member); }