@@ -38,6 +38,8 @@ state type parser =
38
38
fn next_def_id ( ) -> ast. def_id ;
39
39
fn set_def ( ast. def_num ) ;
40
40
fn get_prec_table ( ) -> vec[ op_spec ] ;
41
+ fn get_str ( token. str_num ) -> str ;
42
+ fn get_reader ( ) -> lexer. reader ;
41
43
fn get_filemap ( ) -> codemap . filemap;
42
44
fn get_chpos ( ) -> uint ;
43
45
} ;
@@ -111,6 +113,14 @@ fn new_parser(session.session sess,
111
113
ret precs;
112
114
}
113
115
116
+ fn get_str ( token. str_num i ) -> str {
117
+ ret rdr. get_str ( i) ;
118
+ }
119
+
120
+ fn get_reader ( ) -> lexer. reader {
121
+ ret rdr;
122
+ }
123
+
114
124
fn get_filemap ( ) -> codemap . filemap {
115
125
ret rdr. get_filemap ( ) ;
116
126
}
@@ -135,7 +145,7 @@ fn new_parser(session.session sess,
135
145
136
146
fn unexpected ( parser p, token . token t) {
137
147
let str s = "unexpected token: " ;
138
- s += token. to_str ( t) ;
148
+ s += token. to_str ( p . get_reader ( ) , t) ;
139
149
p. err ( s) ;
140
150
}
141
151
@@ -144,9 +154,9 @@ fn expect(parser p, token.token t) {
144
154
p. bump ( ) ;
145
155
} else {
146
156
let str s = "expecting " ;
147
- s += token. to_str ( t) ;
157
+ s += token. to_str ( p . get_reader ( ) , t) ;
148
158
s += ", found " ;
149
- s += token. to_str ( p. peek ( ) ) ;
159
+ s += token. to_str ( p. get_reader ( ) , p . peek ( ) ) ;
150
160
p. err ( s) ;
151
161
}
152
162
}
@@ -157,7 +167,7 @@ fn spanned[T](uint lo, uint hi, &T node) -> ast.spanned[T] {
157
167
158
168
fn parse_ident ( parser p) -> ast . ident {
159
169
alt ( p. peek ( ) ) {
160
- case ( token. IDENT ( ?i) ) { p. bump ( ) ; ret i ; }
170
+ case ( token. IDENT ( ?i) ) { p. bump ( ) ; ret p . get_str ( i ) ; }
161
171
case ( _) {
162
172
p. err ( "expecting ident" ) ;
163
173
fail;
@@ -173,10 +183,10 @@ fn parse_ident(parser p) -> ast.ident {
173
183
*/
174
184
fn parse_str_lit_or_env_ident ( parser p) -> ast . ident {
175
185
alt ( p. peek ( ) ) {
176
- case ( token. LIT_STR ( ?s) ) { p. bump ( ) ; ret s ; }
186
+ case ( token. LIT_STR ( ?s) ) { p. bump ( ) ; ret p . get_str ( s ) ; }
177
187
case ( token. IDENT ( ?i) ) {
178
188
auto v = eval. lookup ( p. get_session ( ) , p. get_env ( ) ,
179
- p. get_span ( ) , i ) ;
189
+ p. get_span ( ) , p . get_str ( i ) ) ;
180
190
if ( !eval. val_is_str ( v) ) {
181
191
p. err ( "expecting string-valued variable" ) ;
182
192
}
@@ -549,15 +559,15 @@ fn parse_lit(parser p) -> ast.lit {
549
559
}
550
560
case ( token. LIT_FLOAT ( ?s) ) {
551
561
p. bump ( ) ;
552
- lit = ast. lit_float ( s ) ;
562
+ lit = ast. lit_float ( p . get_str ( s ) ) ;
553
563
}
554
564
case ( token. LIT_MACH_INT ( ?tm, ?i) ) {
555
565
p. bump ( ) ;
556
566
lit = ast. lit_mach_int ( tm, i) ;
557
567
}
558
568
case ( token. LIT_MACH_FLOAT ( ?tm, ?s) ) {
559
569
p. bump ( ) ;
560
- lit = ast. lit_mach_float ( tm, s ) ;
570
+ lit = ast. lit_mach_float ( tm, p . get_str ( s ) ) ;
561
571
}
562
572
case ( token. LIT_CHAR ( ?c) ) {
563
573
p. bump ( ) ;
@@ -569,7 +579,7 @@ fn parse_lit(parser p) -> ast.lit {
569
579
}
570
580
case ( token. LIT_STR ( ?s) ) {
571
581
p. bump ( ) ;
572
- lit = ast. lit_str ( s ) ;
582
+ lit = ast. lit_str ( p . get_str ( s ) ) ;
573
583
}
574
584
case ( ?t) {
575
585
unexpected ( p, t) ;
@@ -617,7 +627,7 @@ fn parse_path(parser p, greed g) -> ast.path {
617
627
alt ( p. peek ( ) ) {
618
628
case ( token. IDENT ( ?i) ) {
619
629
hi = p. get_hi_pos ( ) ;
620
- ids += vec ( i ) ;
630
+ ids += vec ( p . get_str ( i ) ) ;
621
631
p. bump ( ) ;
622
632
if ( p. peek ( ) == token. DOT ) {
623
633
if ( g == GREEDY ) {
@@ -1025,7 +1035,7 @@ fn parse_dot_or_call_expr(parser p) -> @ast.expr {
1025
1035
case ( token. IDENT ( ?i) ) {
1026
1036
hi = p. get_hi_pos ( ) ;
1027
1037
p. bump ( ) ;
1028
- e = extend_expr_by_ident ( p, lo, hi, e, i ) ;
1038
+ e = extend_expr_by_ident ( p, lo, hi, e, p . get_str ( i ) ) ;
1029
1039
}
1030
1040
1031
1041
case ( token. LPAREN ) {
@@ -1373,7 +1383,7 @@ fn parse_alt_expr(parser p) -> @ast.expr {
1373
1383
case ( token. RBRACE ) { /* empty */ }
1374
1384
case ( ?tok) {
1375
1385
p. err ( "expected 'case' or '}' when parsing 'alt' statement " +
1376
- "but found " + token. to_str ( tok) ) ;
1386
+ "but found " + token. to_str ( p . get_reader ( ) , tok) ) ;
1377
1387
}
1378
1388
}
1379
1389
}
@@ -1483,16 +1493,17 @@ fn parse_pat(parser p) -> @ast.pat {
1483
1493
case ( token. IDENT ( ?id) ) {
1484
1494
hi = p. get_hi_pos ( ) ;
1485
1495
p. bump ( ) ;
1486
- pat = ast. pat_bind ( id, p. next_def_id ( ) , ast. ann_none ) ;
1496
+ pat = ast. pat_bind ( p. get_str ( id) , p. next_def_id ( ) ,
1497
+ ast. ann_none ) ;
1487
1498
}
1488
1499
case ( ?tok) {
1489
1500
p. err ( "expected identifier after '?' in pattern but " +
1490
- "found " + token. to_str ( tok) ) ;
1501
+ "found " + token. to_str ( p . get_reader ( ) , tok) ) ;
1491
1502
fail;
1492
1503
}
1493
1504
}
1494
1505
}
1495
- case ( token. IDENT ( ?id ) ) {
1506
+ case ( token. IDENT ( _ ) ) {
1496
1507
auto tag_path = parse_path ( p, GREEDY ) ;
1497
1508
hi = tag_path. span . hi ;
1498
1509
@@ -1723,7 +1734,7 @@ fn parse_block(parser p) -> ast.block {
1723
1734
if ( stmt_ends_with_semi ( stmt) ) {
1724
1735
p. err ( "expected ';' or '}' after " +
1725
1736
"expression but found " +
1726
- token. to_str ( t) ) ;
1737
+ token. to_str ( p . get_reader ( ) , t) ) ;
1727
1738
fail;
1728
1739
}
1729
1740
stmts += vec ( stmt) ;
@@ -2102,13 +2113,14 @@ fn parse_item_tag(parser p) -> @ast.item {
2102
2113
expect ( p, token. SEMI ) ;
2103
2114
2104
2115
auto id = p. next_def_id ( ) ;
2105
- auto vr = rec ( name=name, args=args, id=id, ann=ast. ann_none ) ;
2116
+ auto vr = rec ( name=p. get_str ( name) , args=args,
2117
+ id=id, ann=ast. ann_none ) ;
2106
2118
variants += vec ( spanned[ ast. variant_ ] ( vlo, vhi, vr) ) ;
2107
2119
}
2108
2120
case ( token. RBRACE ) { /* empty */ }
2109
2121
case ( _) {
2110
2122
p. err ( "expected name of variant or '}' but found " +
2111
- token. to_str ( tok) ) ;
2123
+ token. to_str ( p . get_reader ( ) , tok) ) ;
2112
2124
}
2113
2125
}
2114
2126
}
@@ -2210,7 +2222,8 @@ fn parse_item(parser p) -> @ast.item {
2210
2222
ret parse_item_obj ( p, lyr) ;
2211
2223
}
2212
2224
case ( ?t) {
2213
- p. err ( "expected item but found " + token. to_str ( t) ) ;
2225
+ p. err ( "expected item but found " +
2226
+ token. to_str ( p. get_reader ( ) , t) ) ;
2214
2227
}
2215
2228
}
2216
2229
fail;
@@ -2224,7 +2237,8 @@ fn parse_meta_item(parser p) -> @ast.meta_item {
2224
2237
case ( token. LIT_STR ( ?s) ) {
2225
2238
auto hi = p. get_hi_pos ( ) ;
2226
2239
p. bump ( ) ;
2227
- ret @spanned ( lo, hi, rec ( name = ident, value = s) ) ;
2240
+ ret @spanned ( lo, hi, rec ( name = ident,
2241
+ value = p. get_str ( s) ) ) ;
2228
2242
}
2229
2243
case ( _) {
2230
2244
p. err ( "Metadata items must be string literals" ) ;
@@ -2294,9 +2308,9 @@ fn parse_rest_import_name(parser p, ast.ident first,
2294
2308
fn parse_full_import_name ( parser p, ast. ident def_ident )
2295
2309
-> @ast. view_item {
2296
2310
alt ( p. peek ( ) ) {
2297
- case ( token. IDENT ( ?ident ) ) {
2311
+ case ( token. IDENT ( ?i ) ) {
2298
2312
p. bump ( ) ;
2299
- ret parse_rest_import_name ( p, ident , some ( def_ident) ) ;
2313
+ ret parse_rest_import_name ( p, p . get_str ( i ) , some ( def_ident) ) ;
2300
2314
}
2301
2315
case ( _) {
2302
2316
p. err ( "expecting an identifier" ) ;
@@ -2308,15 +2322,16 @@ fn parse_full_import_name(parser p, ast.ident def_ident)
2308
2322
fn parse_import ( parser p) -> @ast. view_item {
2309
2323
expect ( p, token. IMPORT ) ;
2310
2324
alt ( p. peek ( ) ) {
2311
- case ( token. IDENT ( ?ident ) ) {
2325
+ case ( token. IDENT ( ?i ) ) {
2312
2326
p. bump ( ) ;
2313
2327
alt ( p. peek ( ) ) {
2314
2328
case ( token. EQ ) {
2315
2329
p. bump ( ) ;
2316
- ret parse_full_import_name ( p, ident ) ;
2330
+ ret parse_full_import_name ( p, p . get_str ( i ) ) ;
2317
2331
}
2318
2332
case ( _) {
2319
- ret parse_rest_import_name ( p, ident, none[ ast. ident ] ) ;
2333
+ ret parse_rest_import_name ( p, p. get_str ( i) ,
2334
+ none[ ast. ident ] ) ;
2320
2335
}
2321
2336
}
2322
2337
}
0 commit comments