diff options
| -rw-r--r-- | src/librustsyntax/parse/lexer.rs | 18 | ||||
| -rw-r--r-- | src/librustsyntax/parse/parser.rs | 32 | ||||
| -rw-r--r-- | src/librustsyntax/parse/token.rs | 10 |
3 files changed, 23 insertions, 37 deletions
diff --git a/src/librustsyntax/parse/lexer.rs b/src/librustsyntax/parse/lexer.rs index a7b109f2324..ec9f785db2f 100644 --- a/src/librustsyntax/parse/lexer.rs +++ b/src/librustsyntax/parse/lexer.rs @@ -367,23 +367,7 @@ fn next_token_inner(rdr: reader) -> token::token { } else { ret token::COLON; } } - '$' { - rdr.bump(); - if is_dec_digit(rdr.curr) { - let mut val = dec_digit_val(rdr.curr) as uint; - while is_dec_digit(rdr.next()) { - rdr.bump(); - val = val * 10u + (dec_digit_val(rdr.curr) as uint); - } - rdr.bump(); - ret token::DOLLAR_NUM(val); - } else if rdr.curr == '(' { - rdr.bump(); - ret token::DOLLAR_LPAREN; - } else { - rdr.fatal("expected digit"); - } - } + '$' { rdr.bump(); ret token::DOLLAR; } diff --git a/src/librustsyntax/parse/parser.rs b/src/librustsyntax/parse/parser.rs index 44d71fb3657..d4160e89bca 100644 --- a/src/librustsyntax/parse/parser.rs +++ b/src/librustsyntax/parse/parser.rs @@ -327,7 +327,7 @@ fn parse_region(p: parser) -> ast::region { fn parse_ty(p: parser, colons_before_params: bool) -> @ast::ty { let lo = p.span.lo; - alt have_dollar(p) { + alt maybe_parse_dollar_mac(p) { some(e) { ret @{id: p.get_id(), node: ast::ty_mac(spanned(lo, p.span.hi, e)), @@ -440,19 +440,27 @@ fn parse_fn_block_arg(p: parser) -> ast::arg { ret {mode: m, ty: t, ident: i, id: p.get_id()}; } -fn have_dollar(p: parser) -> option<ast::mac_> { +fn maybe_parse_dollar_mac(p: parser) -> option<ast::mac_> { alt p.token { - token::DOLLAR_NUM(num) { - p.bump(); - some(ast::mac_var(num)) - } - token::DOLLAR_LPAREN { + token::DOLLAR { let lo = p.span.lo; p.bump(); - let e = parse_expr(p); - expect(p, token::RPAREN); - let hi = p.last_span.hi; - some(ast::mac_aq(ast_util::mk_sp(lo,hi), e)) + alt p.token { + token::LIT_INT(num, ast::ty_i) { + p.bump(); + some(ast::mac_var(num as uint)) + } + token::LPAREN { + p.bump(); + let e = parse_expr(p); + expect(p, token::RPAREN); + let hi = p.last_span.hi; + some(ast::mac_aq(ast_util::mk_sp(lo,hi), e)) + } + _ { + p.fatal("expected `(` or integer literal"); + } + } } _ {none} } @@ -623,7 +631,7 @@ fn parse_bottom_expr(p: parser) -> pexpr { let mut ex: ast::expr_; - alt have_dollar(p) { + alt maybe_parse_dollar_mac(p) { some(x) {ret pexpr(mk_mac_expr(p, lo, p.span.hi, x));} _ {} } diff --git a/src/librustsyntax/parse/token.rs b/src/librustsyntax/parse/token.rs index 0088b7c4729..8e274969551 100644 --- a/src/librustsyntax/parse/token.rs +++ b/src/librustsyntax/parse/token.rs @@ -53,9 +53,7 @@ enum token { LBRACE, RBRACE, POUND, - - DOLLAR_LPAREN, - DOLLAR_NUM(uint), + DOLLAR, /* Literals */ LIT_INT(i64, ast::int_ty), @@ -122,11 +120,7 @@ fn to_str(in: interner<str>, t: token) -> str { LBRACE { ret "{"; } RBRACE { ret "}"; } POUND { ret "#"; } - - DOLLAR_LPAREN { ret "$("; } - DOLLAR_NUM(u) { - ret "$" + uint::to_str(u as uint, 10u); - } + DOLLAR { ret "$"; } /* Literals */ LIT_INT(c, ast::ty_char) { |
