diff options
| author | Patrick Walton <pcwalton@mimiga.net> | 2012-08-31 11:45:14 -0700 |
|---|---|---|
| committer | Patrick Walton <pcwalton@mimiga.net> | 2012-08-31 11:46:04 -0700 |
| commit | 340a21929024efedec5dfa8d4c6a14df41640f78 (patch) | |
| tree | d32e34c4b8af73298025c164e7a744ff2727f61d /src/libsyntax/parse | |
| parent | c3fdc8c7b56fe8e786801b87f809ddc2f51eea42 (diff) | |
| download | rust-340a21929024efedec5dfa8d4c6a14df41640f78.tar.gz rust-340a21929024efedec5dfa8d4c6a14df41640f78.zip | |
libsyntax: Get "extern mod foo;" working in .rc files
Diffstat (limited to 'src/libsyntax/parse')
| -rw-r--r-- | src/libsyntax/parse/parser.rs | 25 |
1 files changed, 20 insertions, 5 deletions
diff --git a/src/libsyntax/parse/parser.rs b/src/libsyntax/parse/parser.rs index 03bb41698cc..0b18d7d9e6e 100644 --- a/src/libsyntax/parse/parser.rs +++ b/src/libsyntax/parse/parser.rs @@ -3423,12 +3423,19 @@ struct parser { } fn is_view_item() -> bool { - let tok = if !self.is_keyword(~"pub") && !self.is_keyword(~"priv") { - self.token - } else { self.look_ahead(1u) }; + let tok, next_tok; + if !self.is_keyword(~"pub") && !self.is_keyword(~"priv") { + tok = self.token; + next_tok = self.look_ahead(1); + } else { + tok = self.look_ahead(1); + next_tok = self.look_ahead(2); + }; self.token_is_keyword(~"use", tok) || self.token_is_keyword(~"import", tok) || self.token_is_keyword(~"export", tok) + || (self.token_is_keyword(~"extern", tok) && + self.token_is_keyword(~"mod", next_tok)) } fn parse_view_item(+attrs: ~[attribute]) -> @view_item { @@ -3439,7 +3446,14 @@ struct parser { view_item_import(self.parse_view_paths()) } else if self.eat_keyword(~"export") { view_item_export(self.parse_view_paths()) - } else { fail; }; + } else if self.eat_keyword(~"extern") { + self.expect_keyword(~"mod"); + let ident = self.parse_ident(); + let metadata = self.parse_optional_meta(); + view_item_use(ident, metadata, self.get_id()) + } else { + fail; + }; self.expect(token::SEMI); @{node: node, attrs: attrs, vis: vis, span: mk_sp(lo, self.last_span.hi)} @@ -3564,7 +3578,8 @@ struct parser { } else if self.is_view_item() { let vi = self.parse_view_item(outer_attrs); return spanned(lo, vi.span.hi, cdir_view_item(vi)); - } else { return self.fatal(~"expected crate directive"); } + } + return self.fatal(~"expected crate directive"); } fn parse_crate_directives(term: token::token, |
