Skip to content

Commit a8b1ea1

Browse files
committed
Make the parser add correct spans to view_items
Closes #650.
1 parent 23d1520 commit a8b1ea1

File tree

1 file changed

+19
-30
lines changed

1 file changed

+19
-30
lines changed

src/comp/syntax/parse/parser.rs

+19-30
Original file line numberDiff line numberDiff line change
@@ -2291,25 +2291,20 @@ fn parse_optional_meta(&parser p) -> (@ast::meta_item)[] {
22912291
}
22922292
}
22932293

2294-
fn parse_use(&parser p) -> @ast::view_item {
2295-
auto lo = p.get_last_lo_pos();
2294+
fn parse_use(&parser p) -> ast::view_item_ {
22962295
auto ident = parse_ident(p);
22972296
auto metadata = parse_optional_meta(p);
2298-
auto hi = p.get_hi_pos();
2299-
expect(p, token::SEMI);
2300-
auto use_decl = ast::view_item_use(ident, metadata, p.get_id());
2301-
ret @spanned(lo, hi, use_decl);
2297+
ret ast::view_item_use(ident, metadata, p.get_id());
23022298
}
23032299

23042300
fn parse_rest_import_name(&parser p, ast::ident first,
23052301
option::t[ast::ident] def_ident) ->
2306-
@ast::view_item {
2307-
auto lo = p.get_lo_pos();
2302+
ast::view_item_ {
23082303
let ast::ident[] identifiers = ~[first];
23092304
let bool glob = false;
23102305
while (true) {
23112306
alt (p.peek()) {
2312-
case (token::SEMI) { p.bump(); break; }
2307+
case (token::SEMI) { break; }
23132308
case (token::MOD_SEP) {
23142309
if (glob) { p.fatal("cannot path into a glob"); }
23152310
p.bump();
@@ -2327,31 +2322,25 @@ fn parse_rest_import_name(&parser p, ast::ident first,
23272322
case (_) { p.fatal("expecting an identifier, or '*'"); }
23282323
}
23292324
}
2330-
auto hi = p.get_hi_pos();
2331-
auto import_decl;
23322325
alt (def_ident) {
23332326
case (some(?i)) {
23342327
if (glob) { p.fatal("globbed imports can't be renamed"); }
2335-
import_decl =
2336-
ast::view_item_import(i, identifiers, p.get_id());
2328+
ret ast::view_item_import(i, identifiers, p.get_id());
23372329
}
23382330
case (_) {
23392331
if (glob) {
2340-
import_decl =
2341-
ast::view_item_import_glob(identifiers, p.get_id());
2332+
ret ast::view_item_import_glob(identifiers, p.get_id());
23422333
} else {
23432334
auto len = ivec::len(identifiers);
2344-
import_decl =
2345-
ast::view_item_import(identifiers.(len - 1u), identifiers,
2335+
ret ast::view_item_import(identifiers.(len - 1u), identifiers,
23462336
p.get_id());
23472337
}
23482338
}
23492339
}
2350-
ret @spanned(lo, hi, import_decl);
23512340
}
23522341

23532342
fn parse_full_import_name(&parser p, ast::ident def_ident) ->
2354-
@ast::view_item {
2343+
ast::view_item_ {
23552344
alt (p.peek()) {
23562345
case (token::IDENT(?i, _)) {
23572346
p.bump();
@@ -2362,7 +2351,7 @@ fn parse_full_import_name(&parser p, ast::ident def_ident) ->
23622351
fail;
23632352
}
23642353

2365-
fn parse_import(&parser p) -> @ast::view_item {
2354+
fn parse_import(&parser p) -> ast::view_item_ {
23662355
alt (p.peek()) {
23672356
case (token::IDENT(?i, _)) {
23682357
p.bump();
@@ -2381,20 +2370,20 @@ fn parse_import(&parser p) -> @ast::view_item {
23812370
fail;
23822371
}
23832372

2384-
fn parse_export(&parser p) -> @ast::view_item {
2385-
auto lo = p.get_last_lo_pos();
2373+
fn parse_export(&parser p) -> ast::view_item_ {
23862374
auto id = parse_ident(p);
2387-
auto hi = p.get_hi_pos();
2388-
expect(p, token::SEMI);
2389-
ret @spanned(lo, hi, ast::view_item_export(id, p.get_id()));
2375+
ret ast::view_item_export(id, p.get_id());
23902376
}
23912377

23922378
fn parse_view_item(&parser p) -> @ast::view_item {
2393-
if (eat_word(p, "use")) {
2394-
ret parse_use(p);
2395-
} else if (eat_word(p, "import")) {
2396-
ret parse_import(p);
2397-
} else if (eat_word(p, "export")) { ret parse_export(p); } else { fail; }
2379+
auto lo = p.get_lo_pos();
2380+
auto the_item = if (eat_word(p, "use")) { parse_use(p) }
2381+
else if (eat_word(p, "import")) { parse_import(p) }
2382+
else if (eat_word(p, "export")) { parse_export(p) }
2383+
else { fail };
2384+
auto hi = p.get_lo_pos();
2385+
expect(p, token::SEMI);
2386+
ret @spanned(lo, hi, the_item);
23982387
}
23992388

24002389
fn is_view_item(&parser p) -> bool {

0 commit comments

Comments
 (0)