1
1
import result:: result;
2
2
import either :: { either, left, right} ;
3
3
import std:: map:: { hashmap, str_hash} ;
4
- import token:: can_begin_expr;
4
+ import token :: { can_begin_expr, is_ident , is_plain_ident } ;
5
5
import codemap :: { span, fss_none} ;
6
6
import util:: interner;
7
7
import ast :: { node_id, spanned} ;
@@ -160,24 +160,7 @@ fn new_parser(sess: parse_sess, cfg: ast::crate_cfg, rdr: reader,
160
160
mut restriction: UNRESTRICTED ,
161
161
reader: rdr,
162
162
binop_precs: binop_prec_table ( ) ,
163
- bad_expr_words: bad_expr_word_table ( ) }
164
- }
165
-
166
- // These are the words that shouldn't be allowed as value identifiers,
167
- // because, if used at the start of a line, they will cause the line to be
168
- // interpreted as a specific kind of statement, which would be confusing.
169
- fn bad_expr_word_table ( ) -> hashmap < str , ( ) > {
170
- let words = str_hash ( ) ;
171
- let keys = [ "alt" , "assert" , "be" , "break" , "check" , "claim" ,
172
- "class" , "const" , "cont" , "copy" , "crust" , "do" , "else" ,
173
- "enum" , "export" , "fail" , "fn" , "for" , "if" , "iface" ,
174
- "impl" , "import" , "let" , "log" , "loop" , "mod" ,
175
- "mut" , "native" , "pure" , "resource" , "ret" , "trait" ,
176
- "type" , "unchecked" , "unsafe" , "while" , "new" ] ;
177
- for keys. each { |word|
178
- words. insert( word, ( ) ) ;
179
- }
180
- words
163
+ bad_expr_words: token:: bad_expr_word_table ( ) }
181
164
}
182
165
183
166
fn token_to_str ( reader : reader , token : token:: token ) -> str {
@@ -276,21 +259,19 @@ fn expect_word(p: parser, word: str) {
276
259
}
277
260
278
261
fn check_bad_word ( p : parser ) {
279
- alt p. token {
280
- token:: IDENT ( sid, false ) {
281
- let w = p. get_str ( sid) ;
282
- if p. bad_expr_words . contains_key ( w) {
283
- p. fatal ( "found " + w + " in expression position" ) ;
284
- }
285
- }
286
- _ { }
262
+ if token:: is_bad_expr_word ( p. token , p. bad_expr_words ,
263
+ * p. reader . interner ) {
264
+ let w = token_to_str ( p. reader , p. token ) ;
265
+ p. fatal ( "found " + w + " in expression position" ) ;
287
266
}
288
267
}
289
268
290
269
fn parse_ty_fn ( p : parser ) -> ast:: fn_decl {
291
270
fn parse_fn_input_ty ( p : parser ) -> ast:: arg {
292
271
let mode = parse_arg_mode ( p) ;
293
- let name = if is_plain_ident ( p) && p. look_ahead ( 1 u) == token:: COLON {
272
+ let name = if is_plain_ident ( p. token )
273
+ && p. look_ahead ( 1 u) == token:: COLON {
274
+
294
275
let name = parse_value_ident ( p) ;
295
276
p. bump ( ) ;
296
277
name
@@ -783,15 +764,6 @@ fn parse_lit(p: parser) -> ast::lit {
783
764
ret { node : lit, span : ast_util:: mk_sp ( lo, p. last_span . hi ) } ;
784
765
}
785
766
786
- fn is_ident ( t : token:: token ) -> bool {
787
- alt t { token : : IDENT ( _, _) { ret true ; } _ { } }
788
- ret false ;
789
- }
790
-
791
- fn is_plain_ident ( p : parser ) -> bool {
792
- ret alt p. token { token:: IDENT ( _, false ) { true } _ { false } } ;
793
- }
794
-
795
767
fn parse_path ( p : parser ) -> @ast:: path {
796
768
let lo = p. span . lo ;
797
769
let global = eat ( p, token:: MOD_SEP ) ;
@@ -858,10 +830,6 @@ fn mk_mac_expr(p: parser, lo: uint, hi: uint, m: ast::mac_) -> @ast::expr {
858
830
span: ast_util:: mk_sp ( lo, hi) } ;
859
831
}
860
832
861
- fn is_bar ( t : token:: token ) -> bool {
862
- alt t { token : : BINOP ( token:: OR ) | token:: OROR { true } _ { false } }
863
- }
864
-
865
833
fn mk_lit_u32 ( p : parser , i : u32 ) -> @ast:: expr {
866
834
let span = p. span ;
867
835
let lv_lit = @{ node: ast:: lit_uint ( i as u64 , ast:: ty_u32) ,
@@ -925,7 +893,7 @@ fn parse_bottom_expr(p: parser) -> pexpr {
925
893
} else if p. token == token:: LBRACE {
926
894
p. bump ( ) ;
927
895
if is_word ( p, "mut" ) ||
928
- is_plain_ident ( p) && p. look_ahead ( 1 u) == token:: COLON {
896
+ is_plain_ident ( p. token ) && p. look_ahead ( 1 u) == token:: COLON {
929
897
let mut fields = [ parse_field ( p, token:: COLON ) ] ;
930
898
let mut base = none;
931
899
while p. token != token:: RBRACE {
@@ -940,7 +908,7 @@ fn parse_bottom_expr(p: parser) -> pexpr {
940
908
hi = p. span . hi ;
941
909
expect ( p, token:: RBRACE ) ;
942
910
ex = ast:: expr_rec ( fields, base) ;
943
- } else if is_bar ( p. token ) {
911
+ } else if token :: is_bar ( p. token ) {
944
912
ret pexpr ( parse_fn_block_expr ( p) ) ;
945
913
} else {
946
914
let blk = parse_block_tail ( p, lo, ast:: default_blk) ;
@@ -1211,7 +1179,8 @@ fn parse_dot_or_call_expr_with(p: parser, e0: pexpr) -> pexpr {
1211
1179
}
1212
1180
1213
1181
// expr {|| ... }
1214
- token:: LBRACE if is_bar ( p. look_ahead ( 1 u) ) && permits_call ( p) {
1182
+ token:: LBRACE if ( token:: is_bar ( p. look_ahead ( 1 u) )
1183
+ && permits_call ( p) ) {
1215
1184
p. bump ( ) ;
1216
1185
let blk = parse_fn_block_expr ( p) ;
1217
1186
alt e. node {
@@ -1683,7 +1652,7 @@ fn parse_pat(p: parser) -> @ast::pat {
1683
1652
hi = val. span . hi ;
1684
1653
pat = ast:: pat_lit ( val) ;
1685
1654
}
1686
- } else if is_plain_ident ( p) &&
1655
+ } else if is_plain_ident ( p. token ) &&
1687
1656
alt p. look_ahead ( 1 u) {
1688
1657
token:: LPAREN | token:: LBRACKET | token:: LT { false }
1689
1658
_ { true }
@@ -1751,7 +1720,7 @@ fn parse_instance_var(p:parser, pr: ast::privacy) -> @ast::class_member {
1751
1720
if eat_word ( p, "mut" ) || eat_word ( p, "mutable" ) {
1752
1721
is_mutbl = ast:: class_mutable;
1753
1722
}
1754
- if !is_plain_ident ( p) {
1723
+ if !is_plain_ident ( p. token ) {
1755
1724
p. fatal ( "expecting ident" ) ;
1756
1725
}
1757
1726
let name = parse_ident ( p) ;
0 commit comments