about summary refs log tree commit diff
path: root/src/comp
diff options
context:
space:
mode:
authorGraydon Hoare <graydon@mozilla.com>2010-08-24 08:50:56 -0700
committerGraydon Hoare <graydon@mozilla.com>2010-08-24 08:50:56 -0700
commitdf3ea680eae217a9677495d690dbf768ad7614e0 (patch)
treee15da77f6fee6eaecfec0b15b0cb1decf6dc87b9 /src/comp
parent2745a5ebb2a174b2d71be32da7d4b95295eb41e8 (diff)
downloadrust-df3ea680eae217a9677495d690dbf768ad7614e0.tar.gz
rust-df3ea680eae217a9677495d690dbf768ad7614e0.zip
Tidy lexer.
Diffstat (limited to 'src/comp')
-rw-r--r--src/comp/fe/lexer.rs38
1 files changed, 23 insertions, 15 deletions
diff --git a/src/comp/fe/lexer.rs b/src/comp/fe/lexer.rs
index f5c603726df..8885e6e0dff 100644
--- a/src/comp/fe/lexer.rs
+++ b/src/comp/fe/lexer.rs
@@ -56,6 +56,14 @@ fn next_token(stdio_reader rdr) -> token.token {
     auto accum_str = "";
     auto accum_int = 0;
 
+    fn next(stdio_reader rdr) -> char {
+        ret rdr.getc() as char;
+    }
+
+    fn forget(stdio_reader rdr, char c) {
+        rdr.ungetc(c as int);
+    }
+
     c = consume_any_whitespace(rdr, c);
 
     if (c == eof) { ret token.EOF(); }
@@ -63,9 +71,9 @@ fn next_token(stdio_reader rdr) -> token.token {
     if (is_alpha(c)) {
         while (is_alpha(c)) {
             accum_str += (c as u8);
-            c = rdr.getc() as char;
+            c = next(rdr);
         }
-        rdr.ungetc(c as int);
+        forget(rdr, c);
         ret token.IDENT(accum_str);
     }
 
@@ -75,9 +83,9 @@ fn next_token(stdio_reader rdr) -> token.token {
             while (is_dec_digit(c)) {
                 accum_int *= 10;
                 accum_int += (c as int) - ('0' as int);
-                c = rdr.getc() as char;
+                c = next(rdr);
             }
-            rdr.ungetc(c as int);
+            forget(rdr, c);
             ret token.LIT_INT(accum_int);
         }
     }
@@ -88,7 +96,7 @@ fn next_token(stdio_reader rdr) -> token.token {
         if (c2 == '=') {
             ret token.OPEQ(op);
         } else {
-            rdr.ungetc(c2 as int);
+            forget(rdr, c2);
             ret token.OP(op);
         }
     }
@@ -109,17 +117,17 @@ fn next_token(stdio_reader rdr) -> token.token {
 
         // Multi-byte tokens.
         case ('=') {
-            auto c2 = rdr.getc() as char;
+            auto c2 = next(rdr);
             if (c2 == '=') {
                 ret token.OP(token.EQEQ());
             } else {
-                rdr.ungetc(c2 as int);
+                forget(rdr, c2);
                 ret token.OP(token.EQ());
             }
         }
 
         case ('-') {
-            auto c2 = rdr.getc() as char;
+            auto c2 = next(rdr);
             if (c2 == '>') {
                 ret token.RARROW();
             } else {
@@ -128,7 +136,7 @@ fn next_token(stdio_reader rdr) -> token.token {
         }
 
         case ('&') {
-            auto c2 = rdr.getc() as char;
+            auto c2 = next(rdr);
             if (c2 == '&') {
                 ret token.OP(token.ANDAND());
             } else {
@@ -137,27 +145,27 @@ fn next_token(stdio_reader rdr) -> token.token {
         }
 
         case ('+') {
-            ret op_or_opeq(rdr, rdr.getc() as char, token.PLUS());
+            ret op_or_opeq(rdr, next(rdr), token.PLUS());
         }
 
         case ('*') {
-            ret op_or_opeq(rdr, rdr.getc() as char, token.STAR());
+            ret op_or_opeq(rdr, next(rdr), token.STAR());
         }
 
         case ('/') {
-            ret op_or_opeq(rdr, rdr.getc() as char, token.STAR());
+            ret op_or_opeq(rdr, next(rdr), token.STAR());
         }
 
         case ('!') {
-            ret op_or_opeq(rdr, rdr.getc() as char, token.NOT());
+            ret op_or_opeq(rdr, next(rdr), token.NOT());
         }
 
         case ('^') {
-            ret op_or_opeq(rdr, rdr.getc() as char, token.CARET());
+            ret op_or_opeq(rdr, next(rdr), token.CARET());
         }
 
         case ('%') {
-            ret op_or_opeq(rdr, rdr.getc() as char, token.PERCENT());
+            ret op_or_opeq(rdr, next(rdr), token.PERCENT());
         }
 
     }