Skip to content

Commit da61d86

Browse files
committed
---
yaml --- r: 569 b: refs/heads/master c: df3ea68 h: refs/heads/master i: 567: 13923d8 v: v3
1 parent 4a3ff4a commit da61d86

File tree

2 files changed

+24
-16
lines changed

2 files changed

+24
-16
lines changed

[refs]

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,2 +1,2 @@
11
---
2-
refs/heads/master: 2745a5ebb2a174b2d71be32da7d4b95295eb41e8
2+
refs/heads/master: df3ea680eae217a9677495d690dbf768ad7614e0

trunk/src/comp/fe/lexer.rs

Lines changed: 23 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -56,16 +56,24 @@ fn next_token(stdio_reader rdr) -> token.token {
5656
auto accum_str = "";
5757
auto accum_int = 0;
5858

59+
fn next(stdio_reader rdr) -> char {
60+
ret rdr.getc() as char;
61+
}
62+
63+
fn forget(stdio_reader rdr, char c) {
64+
rdr.ungetc(c as int);
65+
}
66+
5967
c = consume_any_whitespace(rdr, c);
6068

6169
if (c == eof) { ret token.EOF(); }
6270

6371
if (is_alpha(c)) {
6472
while (is_alpha(c)) {
6573
accum_str += (c as u8);
66-
c = rdr.getc() as char;
74+
c = next(rdr);
6775
}
68-
rdr.ungetc(c as int);
76+
forget(rdr, c);
6977
ret token.IDENT(accum_str);
7078
}
7179

@@ -75,9 +83,9 @@ fn next_token(stdio_reader rdr) -> token.token {
7583
while (is_dec_digit(c)) {
7684
accum_int *= 10;
7785
accum_int += (c as int) - ('0' as int);
78-
c = rdr.getc() as char;
86+
c = next(rdr);
7987
}
80-
rdr.ungetc(c as int);
88+
forget(rdr, c);
8189
ret token.LIT_INT(accum_int);
8290
}
8391
}
@@ -88,7 +96,7 @@ fn next_token(stdio_reader rdr) -> token.token {
8896
if (c2 == '=') {
8997
ret token.OPEQ(op);
9098
} else {
91-
rdr.ungetc(c2 as int);
99+
forget(rdr, c2);
92100
ret token.OP(op);
93101
}
94102
}
@@ -109,17 +117,17 @@ fn next_token(stdio_reader rdr) -> token.token {
109117

110118
// Multi-byte tokens.
111119
case ('=') {
112-
auto c2 = rdr.getc() as char;
120+
auto c2 = next(rdr);
113121
if (c2 == '=') {
114122
ret token.OP(token.EQEQ());
115123
} else {
116-
rdr.ungetc(c2 as int);
124+
forget(rdr, c2);
117125
ret token.OP(token.EQ());
118126
}
119127
}
120128

121129
case ('-') {
122-
auto c2 = rdr.getc() as char;
130+
auto c2 = next(rdr);
123131
if (c2 == '>') {
124132
ret token.RARROW();
125133
} else {
@@ -128,7 +136,7 @@ fn next_token(stdio_reader rdr) -> token.token {
128136
}
129137

130138
case ('&') {
131-
auto c2 = rdr.getc() as char;
139+
auto c2 = next(rdr);
132140
if (c2 == '&') {
133141
ret token.OP(token.ANDAND());
134142
} else {
@@ -137,27 +145,27 @@ fn next_token(stdio_reader rdr) -> token.token {
137145
}
138146

139147
case ('+') {
140-
ret op_or_opeq(rdr, rdr.getc() as char, token.PLUS());
148+
ret op_or_opeq(rdr, next(rdr), token.PLUS());
141149
}
142150

143151
case ('*') {
144-
ret op_or_opeq(rdr, rdr.getc() as char, token.STAR());
152+
ret op_or_opeq(rdr, next(rdr), token.STAR());
145153
}
146154

147155
case ('/') {
148-
ret op_or_opeq(rdr, rdr.getc() as char, token.STAR());
156+
ret op_or_opeq(rdr, next(rdr), token.STAR());
149157
}
150158

151159
case ('!') {
152-
ret op_or_opeq(rdr, rdr.getc() as char, token.NOT());
160+
ret op_or_opeq(rdr, next(rdr), token.NOT());
153161
}
154162

155163
case ('^') {
156-
ret op_or_opeq(rdr, rdr.getc() as char, token.CARET());
164+
ret op_or_opeq(rdr, next(rdr), token.CARET());
157165
}
158166

159167
case ('%') {
160-
ret op_or_opeq(rdr, rdr.getc() as char, token.PERCENT());
168+
ret op_or_opeq(rdr, next(rdr), token.PERCENT());
161169
}
162170

163171
}

0 commit comments

Comments
 (0)