Skip to content

Commit ee45fd8

Browse files
committed
Mark IDENT tokens that are followed by ::
So that the type parser won't go off and try to parse a vec type when it sees vec::init_op.
1 parent 1ad58d4 commit ee45fd8

File tree

3 files changed

+19
-18
lines changed

3 files changed

+19
-18
lines changed

Diff for: src/comp/front/lexer.rs

+2-1
Original file line numberDiff line numberDiff line change
@@ -470,7 +470,8 @@ fn next_token(reader rdr) -> token::token {
470470
ret token::UNDERSCORE;
471471
}
472472

473-
ret token::IDENT(rdr.add_str(accum_str));
473+
auto is_mod_name = c == ':' && rdr.next() == ':';
474+
ret token::IDENT(rdr.add_str(accum_str), is_mod_name);
474475
}
475476

476477
if (is_dec_digit(c)) {

Diff for: src/comp/front/parser.rs

+15-15
Original file line numberDiff line numberDiff line change
@@ -232,7 +232,7 @@ fn spanned[T](uint lo, uint hi, &T node) -> ast::spanned[T] {
232232

233233
fn parse_ident(parser p) -> ast::ident {
234234
alt (p.peek()) {
235-
case (token::IDENT(?i)) { p.bump(); ret p.get_str(i); }
235+
case (token::IDENT(?i, _)) { p.bump(); ret p.get_str(i); }
236236
case (_) {
237237
p.err("expecting ident");
238238
fail;
@@ -253,7 +253,7 @@ fn parse_value_ident(parser p) -> ast::ident {
253253
fn parse_str_lit_or_env_ident(parser p) -> ast::ident {
254254
alt (p.peek()) {
255255
case (token::LIT_STR(?s)) { p.bump(); ret p.get_str(s); }
256-
case (token::IDENT(?i)) {
256+
case (token::IDENT(?i, _)) {
257257
auto v = eval::lookup(p.get_session(), p.get_env(),
258258
p.get_span(), p.get_str(i));
259259
if (!eval::val_is_str(v)) {
@@ -271,13 +271,13 @@ fn parse_str_lit_or_env_ident(parser p) -> ast::ident {
271271

272272
fn is_word(&parser p, &str word) -> bool {
273273
ret alt (p.peek()) {
274-
case (token::IDENT(?sid)) { _str::eq(word, p.get_str(sid)) }
274+
case (token::IDENT(?sid, false)) { _str::eq(word, p.get_str(sid)) }
275275
case (_) { false }
276276
};
277277
}
278278
fn eat_word(&parser p, &str word) -> bool {
279279
alt (p.peek()) {
280-
case (token::IDENT(?sid)) {
280+
case (token::IDENT(?sid, false)) {
281281
if (_str::eq(word, p.get_str(sid))) {
282282
p.bump();
283283
ret true;
@@ -295,7 +295,7 @@ fn expect_word(&parser p, &str word) {
295295
}
296296
fn check_bad_word(&parser p) {
297297
alt (p.peek()) {
298-
case (token::IDENT(?sid)) {
298+
case (token::IDENT(?sid, false)) {
299299
auto w = p.get_str(sid);
300300
if (p.get_bad_expr_words().contains_key(w)) {
301301
p.err("found " + w + " in expression position");
@@ -323,7 +323,7 @@ fn parse_ty_fn(ast::proto proto, parser p, uint lo)
323323
auto t = parse_ty(p);
324324

325325
alt (p.peek()) {
326-
case (token::IDENT(_)) { p.bump(); /* ignore the param name */ }
326+
case (token::IDENT(_, _)) { p.bump(); /* ignore the param name */ }
327327
case (_) { /* no param name present */ }
328328
}
329329

@@ -659,7 +659,7 @@ fn parse_lit(parser p) -> ast::lit {
659659

660660
fn is_ident(token::token t) -> bool {
661661
alt (t) {
662-
case (token::IDENT(_)) { ret true; }
662+
case (token::IDENT(_, _)) { ret true; }
663663
case (_) {}
664664
}
665665
ret false;
@@ -688,7 +688,7 @@ fn parse_path(parser p) -> ast::path {
688688
let vec[ast::ident] ids = vec();
689689
while (true) {
690690
alt (p.peek()) {
691-
case (token::IDENT(?i)) {
691+
case (token::IDENT(?i, _)) {
692692
hi = p.get_hi_pos();
693693
ids += vec(p.get_str(i));
694694
p.bump();
@@ -1047,7 +1047,7 @@ fn parse_dot_or_call_expr(parser p) -> @ast::expr {
10471047
p.bump();
10481048
alt (p.peek()) {
10491049

1050-
case (token::IDENT(?i)) {
1050+
case (token::IDENT(?i, _)) {
10511051
hi = p.get_hi_pos();
10521052
p.bump();
10531053
auto e_ = ast::expr_field(e, p.get_str(i),
@@ -1446,7 +1446,7 @@ fn parse_pat(parser p) -> @ast::pat {
14461446
case (token::QUES) {
14471447
p.bump();
14481448
alt (p.peek()) {
1449-
case (token::IDENT(?id)) {
1449+
case (token::IDENT(?id, _)) {
14501450
hi = p.get_hi_pos();
14511451
p.bump();
14521452
pat = ast::pat_bind(p.get_str(id), p.next_def_id(),
@@ -1985,7 +1985,7 @@ fn parse_item_tag(parser p) -> @ast::item {
19851985
while (p.peek() != token::RBRACE) {
19861986
auto tok = p.peek();
19871987
alt (tok) {
1988-
case (token::IDENT(?name)) {
1988+
case (token::IDENT(?name, _)) {
19891989
check_bad_word(p);
19901990
auto vlo = p.get_lo_pos();
19911991
p.bump();
@@ -2052,7 +2052,7 @@ fn parse_auth(parser p) -> ast::_auth {
20522052

20532053
fn peeking_at_item(parser p) -> bool {
20542054
alt (p.peek()) {
2055-
case (token::IDENT(?sid)) {
2055+
case (token::IDENT(?sid, false)) {
20562056
auto st = p.get_str(sid);
20572057
ret _str::eq(st, "state") ||
20582058
_str::eq(st, "gc") ||
@@ -2180,7 +2180,7 @@ fn parse_rest_import_name(parser p, ast::ident first,
21802180
fn parse_full_import_name(parser p, ast::ident def_ident)
21812181
-> @ast::view_item {
21822182
alt (p.peek()) {
2183-
case (token::IDENT(?i)) {
2183+
case (token::IDENT(?i, _)) {
21842184
p.bump();
21852185
ret parse_rest_import_name(p, p.get_str(i), some(def_ident));
21862186
}
@@ -2193,7 +2193,7 @@ fn parse_full_import_name(parser p, ast::ident def_ident)
21932193

21942194
fn parse_import(parser p) -> @ast::view_item {
21952195
alt (p.peek()) {
2196-
case (token::IDENT(?i)) {
2196+
case (token::IDENT(?i, _)) {
21972197
p.bump();
21982198
alt (p.peek()) {
21992199
case (token::EQ) {
@@ -2235,7 +2235,7 @@ fn parse_view_item(parser p) -> @ast::view_item {
22352235

22362236
fn is_view_item(&parser p) -> bool {
22372237
alt (p.peek()) {
2238-
case (token::IDENT(?sid)) {
2238+
case (token::IDENT(?sid, false)) {
22392239
auto st = p.get_str(sid);
22402240
ret _str::eq(st, "use") || _str::eq(st, "import") ||
22412241
_str::eq(st, "export");

Diff for: src/comp/front/token.rs

+2-2
Original file line numberDiff line numberDiff line change
@@ -69,7 +69,7 @@ tag token {
6969
LIT_BOOL(bool);
7070

7171
/* Name components */
72-
IDENT(str_num);
72+
IDENT(str_num, bool);
7373
IDX(int);
7474
UNDERSCORE;
7575

@@ -160,7 +160,7 @@ fn to_str(lexer::reader r, token t) -> str {
160160
}
161161

162162
/* Name components */
163-
case (IDENT(?s)) {
163+
case (IDENT(?s, _)) {
164164
ret r.get_str(s);
165165
}
166166
case (IDX(?i)) { ret "_" + _int::to_str(i, 10u); }

0 commit comments

Comments
 (0)