about summary refs log tree commit diff
path: root/src/comp/syntax/parse/parser.rs
diff options
context:
space:
mode:
authorMarijn Haverbeke <marijnh@gmail.com>2011-07-25 16:23:32 +0200
committerMarijn Haverbeke <marijnh@gmail.com>2011-07-25 16:46:08 +0200
commitdca67f95cb98fa54192ba6a136c32d4fab51807b (patch)
tree6bba0f8131a885d1b0fd2f46baa283d6ee1a5831 /src/comp/syntax/parse/parser.rs
parente949aab10ae69d671fe1fc315c12f04b2674d969 (diff)
downloadrust-dca67f95cb98fa54192ba6a136c32d4fab51807b.tar.gz
rust-dca67f95cb98fa54192ba6a136c32d4fab51807b.zip
Make the lexer slightly less stateful
Diffstat (limited to 'src/comp/syntax/parse/parser.rs')
-rw-r--r--src/comp/syntax/parse/parser.rs15
1 files changed, 7 insertions, 8 deletions
diff --git a/src/comp/syntax/parse/parser.rs b/src/comp/syntax/parse/parser.rs
index fc1f40c3017..5e2e89a3dce 100644
--- a/src/comp/syntax/parse/parser.rs
+++ b/src/comp/syntax/parse/parser.rs
@@ -90,8 +90,9 @@ fn new_parser(parse_sess sess, ast::crate_cfg cfg, lexer::reader rdr,
             //   + ":" + common::istr(lo.line as int);
 
             last_lo = lo;
-            tok = lexer::next_token(rdr);
-            lo = rdr.get_mark_chpos();
+            auto next = lexer::next_token(rdr);
+            tok = next._0;
+            lo = next._1;
             hi = rdr.get_chpos();
         }
         fn fatal(str m) -> ! {
@@ -122,11 +123,9 @@ fn new_parser(parse_sess sess, ast::crate_cfg cfg, lexer::reader rdr,
         fn get_sess() -> parse_sess { ret sess; }
     }
 
-    // Make sure npos points at first actual token:
-    lexer::consume_whitespace_and_comments(rdr);
-    auto npos = rdr.get_chpos();
-    ret stdio_parser(sess, cfg, ftype, lexer::next_token(rdr),
-                     npos, npos, npos, UNRESTRICTED, rdr,
+    auto tok0 = lexer::next_token(rdr);
+    ret stdio_parser(sess, cfg, ftype, tok0._0,
+                     tok0._1, tok0._1, tok0._1, UNRESTRICTED, rdr,
                      prec_table(), bad_expr_word_table());
 }
 
@@ -693,13 +692,13 @@ fn parse_path(&parser p) -> ast::path {
             case (token::IDENT(?i, _)) {
                 hi = p.get_hi_pos();
                 ids += ~[p.get_str(i)];
+                hi = p.get_hi_pos();
                 p.bump();
                 if (p.peek() == token::MOD_SEP) { p.bump(); } else { break; }
             }
             case (_) { break; }
         }
     }
-    hi = p.get_hi_pos();
     ret spanned(lo, hi, rec(global=global, idents=ids, types=~[]));
 }