@@ -2,7 +2,6 @@ import std._io.stdio_reader;
2
2
import std. _str ;
3
3
import std. map ;
4
4
import std. map . hashmap ;
5
- import util. common ;
6
5
7
6
fn new_str_hash[ V ] ( ) -> map. hashmap [ str, V ] {
8
7
let map. hashfn [ str] hasher = _str. hash ;
@@ -96,80 +95,6 @@ fn new_reader(stdio_reader rdr, str filename) -> reader
96
95
keywords. insert ( "ret" , token. RET ( ) ) ;
97
96
keywords. insert ( "be" , token. BE ( ) ) ;
98
97
99
- keywords. insert ( "fail" , token. FAIL ( ) ) ;
100
- keywords. insert ( "drop" , token. DROP ( ) ) ;
101
-
102
- keywords. insert ( "type" , token. TYPE ( ) ) ;
103
- keywords. insert ( "check" , token. CHECK ( ) ) ;
104
- keywords. insert ( "claim" , token. CLAIM ( ) ) ;
105
- keywords. insert ( "prove" , token. PROVE ( ) ) ;
106
-
107
- keywords. insert ( "io" , token. IO ( ) ) ;
108
- keywords. insert ( "state" , token. STATE ( ) ) ;
109
- keywords. insert ( "unsafe" , token. UNSAFE ( ) ) ;
110
-
111
- keywords. insert ( "native" , token. NATIVE ( ) ) ;
112
- keywords. insert ( "mutable" , token. MUTABLE ( ) ) ;
113
- keywords. insert ( "auto" , token. AUTO ( ) ) ;
114
-
115
- keywords. insert ( "fn" , token. FN ( ) ) ;
116
- keywords. insert ( "iter" , token. ITER ( ) ) ;
117
-
118
- keywords. insert ( "import" , token. IMPORT ( ) ) ;
119
- keywords. insert ( "export" , token. EXPORT ( ) ) ;
120
-
121
- keywords. insert ( "let" , token. LET ( ) ) ;
122
-
123
- keywords. insert ( "log" , token. LOG ( ) ) ;
124
- keywords. insert ( "spawn" , token. SPAWN ( ) ) ;
125
- keywords. insert ( "thread" , token. THREAD ( ) ) ;
126
- keywords. insert ( "yield" , token. YIELD ( ) ) ;
127
- keywords. insert ( "join" , token. JOIN ( ) ) ;
128
-
129
- keywords. insert ( "bool" , token. BOOL ( ) ) ;
130
-
131
- keywords. insert ( "int" , token. INT ( ) ) ;
132
- keywords. insert ( "uint" , token. UINT ( ) ) ;
133
- keywords. insert ( "float" , token. FLOAT ( ) ) ;
134
-
135
- keywords. insert ( "char" , token. CHAR ( ) ) ;
136
- keywords. insert ( "str" , token. STR ( ) ) ;
137
-
138
-
139
- keywords. insert ( "rec" , token. REC ( ) ) ;
140
- keywords. insert ( "tup" , token. TUP ( ) ) ;
141
- keywords. insert ( "tag" , token. TAG ( ) ) ;
142
- keywords. insert ( "vec" , token. VEC ( ) ) ;
143
- keywords. insert ( "any" , token. ANY ( ) ) ;
144
-
145
- keywords. insert ( "obj" , token. OBJ ( ) ) ;
146
-
147
- keywords. insert ( "port" , token. PORT ( ) ) ;
148
- keywords. insert ( "chan" , token. CHAN ( ) ) ;
149
-
150
- keywords. insert ( "task" , token. TASK ( ) ) ;
151
-
152
- keywords. insert ( "true" , token. LIT_BOOL ( true ) ) ;
153
- keywords. insert ( "false" , token. LIT_BOOL ( false ) ) ;
154
-
155
- keywords. insert ( "in" , token. IN ( ) ) ;
156
-
157
- keywords. insert ( "as" , token. AS ( ) ) ;
158
- keywords. insert ( "with" , token. WITH ( ) ) ;
159
-
160
- keywords. insert ( "bind" , token. BIND ( ) ) ;
161
-
162
- keywords. insert ( "u8" , token. MACH ( common. ty_u8 ( ) ) ) ;
163
- keywords. insert ( "u16" , token. MACH ( common. ty_u16 ( ) ) ) ;
164
- keywords. insert ( "u32" , token. MACH ( common. ty_u32 ( ) ) ) ;
165
- keywords. insert ( "u64" , token. MACH ( common. ty_u64 ( ) ) ) ;
166
- keywords. insert ( "i8" , token. MACH ( common. ty_i8 ( ) ) ) ;
167
- keywords. insert ( "i16" , token. MACH ( common. ty_i16 ( ) ) ) ;
168
- keywords. insert ( "i32" , token. MACH ( common. ty_i32 ( ) ) ) ;
169
- keywords. insert ( "i64" , token. MACH ( common. ty_i64 ( ) ) ) ;
170
- keywords. insert ( "f32" , token. MACH ( common. ty_f32 ( ) ) ) ;
171
- keywords. insert ( "f64" , token. MACH ( common. ty_f64 ( ) ) ) ;
172
-
173
98
ret reader( rdr, filename, rdr. getc ( ) as char , rdr. getc ( ) as char ,
174
99
1 u, 1 u, keywords, reserved) ;
175
100
}
@@ -200,31 +125,6 @@ fn is_bin_digit(char c) -> bool {
200
125
ret c == '0' || c == '1' ;
201
126
}
202
127
203
- fn dec_digit_val ( char c) -> int {
204
- ret ( c as int ) - ( '0' as int ) ;
205
- }
206
-
207
- fn hex_digit_val ( char c) -> int {
208
- if ( in_range ( c, '0' , '9' ) ) {
209
- ret ( c as int ) - ( '0' as int ) ;
210
- }
211
-
212
- if ( in_range ( c, 'a' , 'f' ) ) {
213
- ret ( c as int ) - ( 'a' as int ) ;
214
- }
215
-
216
- if ( in_range ( c, 'A' , 'F' ) ) {
217
- ret ( c as int ) - ( 'A' as int ) ;
218
- }
219
-
220
- fail;
221
- }
222
-
223
- fn bin_digit_value ( char c) -> int {
224
- if ( c == 0 ) { ret 0 ; }
225
- ret 1 ;
226
- }
227
-
228
128
fn is_whitespace ( char c) -> bool {
229
129
ret c == ' ' || c == '\t' || c == '\r' || c == '\n' ;
230
130
}
@@ -259,54 +159,27 @@ fn next_token(reader rdr) -> token.token {
259
159
auto c = rdr. curr ( ) ;
260
160
261
161
if ( is_alpha ( c) ) {
262
- while ( is_alpha ( c) || c == '_' ) {
162
+ while ( is_alpha ( rdr. curr ( ) ) ) {
163
+ c = rdr. curr ( ) ;
263
164
accum_str += ( c as u8 ) ;
264
165
rdr. bump ( ) ;
265
- c = rdr. curr ( ) ;
266
166
}
267
-
268
- auto kwds = rdr. get_keywords ( ) ;
269
- if ( kwds. contains_key ( accum_str) ) {
270
- ret kwds. get ( accum_str) ;
271
- }
272
-
273
167
ret token. IDENT ( accum_str) ;
274
168
}
275
169
276
170
if ( is_dec_digit ( c) ) {
277
- auto n = rdr. next ( ) ;
278
- if ( c == '0' && n == 'x' ) {
279
- rdr. bump ( ) ;
280
- rdr. bump ( ) ;
281
- c = rdr. curr ( ) ;
282
- while ( is_hex_digit ( c) || c == '_' ) {
283
- accum_int *= 16 ;
284
- accum_int += hex_digit_val ( v) ;
285
- rdr. bump ( ) ;
171
+ if ( c == '0' ) {
172
+ log "fixme: leading zero" ;
173
+ fail;
174
+ } else {
175
+ while ( is_dec_digit ( c) ) {
286
176
c = rdr. curr ( ) ;
287
- }
288
- }
289
-
290
- if ( c == '0' && n == 'b' ) {
291
- rdr. bump ( ) ;
292
- rdr. bump ( ) ;
293
- c = rdr. curr ( ) ;
294
- while ( is_hex_digit ( c) || c == '_' ) {
295
- accum_int *= 2 ;
296
- accum_int += bit_value ( c) ;
177
+ accum_int *= 10 ;
178
+ accum_int += ( c as int ) - ( '0' as int ) ;
297
179
rdr. bump ( ) ;
298
- c = rdr. curr ( ) ;
299
180
}
181
+ ret token. LIT_INT ( accum_int) ;
300
182
}
301
-
302
- while ( is_dec_digit ( c) || c == '_' ) {
303
- accum_int *= 10 ;
304
- accum_int += dec_digit_val ( v) ;
305
- rdr. bump ( ) ;
306
- c = rdr. curr ( ) ;
307
- }
308
-
309
- ret token. LIT_INT ( accum_int) ;
310
183
}
311
184
312
185
@@ -333,7 +206,6 @@ fn next_token(reader rdr) -> token.token {
333
206
case ( ']' ) { rdr. bump ( ) ; ret token. RBRACKET ( ) ; }
334
207
case ( '@' ) { rdr. bump ( ) ; ret token. AT ( ) ; }
335
208
case ( '#' ) { rdr. bump ( ) ; ret token. POUND ( ) ; }
336
- case ( '_' ) { rdr. bump ( ) ; ret token. UNDERSCORE ( ) ; }
337
209
338
210
// Multi-byte tokens.
339
211
case ( '=' ) {
0 commit comments