about summary refs log tree commit diff
diff options
context:
space:
mode:
-rw-r--r--src/librustsyntax/parse/lexer.rs18
-rw-r--r--src/librustsyntax/parse/parser.rs32
-rw-r--r--src/librustsyntax/parse/token.rs10
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) {