diff options
| author | bors <bors@rust-lang.org> | 2014-01-02 11:32:09 -0800 |
|---|---|---|
| committer | bors <bors@rust-lang.org> | 2014-01-02 11:32:09 -0800 |
| commit | 0df9b850ac1ed3abd0ff5abfbb716af83501dd5a (patch) | |
| tree | 380744a8c4feb43d1704d408ab410c85b7eac9c3 /src/libsyntax/parse | |
| parent | c29b1be5edcb56f221b0a54653f62147069b41a4 (diff) | |
| parent | 4cb13ed9823d30ac3163e7e6b3e74becd09a508d (diff) | |
| download | rust-0df9b850ac1ed3abd0ff5abfbb716af83501dd5a.tar.gz rust-0df9b850ac1ed3abd0ff5abfbb716af83501dd5a.zip | |
auto merge of #10696 : fhahn/rust/issue9543-remove-extern-mod-foo, r=pcwalton
This patch for #9543 throws an `obsolete syntax` error for `extern mod foo (name="bar")` . I was wondering if [this](https://github.com/fhahn/rust/compare/mozilla:master...fhahn:issue9543-remove-extern-mod-foo?expand=1#diff-da9d34ca1d0f6beee2838cf02e07345cR4444) is the correct place to do this? I think the wording of the error message could probably be improved as well. If this approach is OK, I'm going to run the whole test suite tomorrow and update the old syntax to the new one.
Diffstat (limited to 'src/libsyntax/parse')
| -rw-r--r-- | src/libsyntax/parse/obsolete.rs | 6 | ||||
| -rw-r--r-- | src/libsyntax/parse/parser.rs | 11 |
2 files changed, 15 insertions, 2 deletions
diff --git a/src/libsyntax/parse/obsolete.rs b/src/libsyntax/parse/obsolete.rs index d739fca99da..df6fbe98aed 100644 --- a/src/libsyntax/parse/obsolete.rs +++ b/src/libsyntax/parse/obsolete.rs @@ -45,6 +45,7 @@ pub enum ObsoleteSyntax { ObsoleteBoxedClosure, ObsoleteClosureType, ObsoleteMultipleImport, + ObsoleteExternModAttributesInParens } impl to_bytes::IterBytes for ObsoleteSyntax { @@ -145,6 +146,11 @@ impl ParserObsoleteMethods for Parser { "multiple imports", "only one import is allowed per `use` statement" ), + ObsoleteExternModAttributesInParens => ( + "`extern mod` with linkage attribute list", + "use `extern mod foo = \"bar\";` instead of \ + `extern mod foo (name = \"bar\")`" + ) }; self.report(sp, kind, kind_str, desc); diff --git a/src/libsyntax/parse/parser.rs b/src/libsyntax/parse/parser.rs index 729d0320435..5e2b022d175 100644 --- a/src/libsyntax/parse/parser.rs +++ b/src/libsyntax/parse/parser.rs @@ -4446,11 +4446,18 @@ impl Parser { self.span_err(*self.span, "an ABI may not be specified here"); } + + if *self.token == token::LPAREN { + // `extern mod foo (name = "bar"[,vers = "version"]) is obsolete, + // `extern mod foo = "bar#[version]";` should be used. + // Parse obsolete options to avoid wired parser errors + self.parse_optional_meta(); + self.obsolete(*self.span, ObsoleteExternModAttributesInParens); + } // extern mod foo; - let metadata = self.parse_optional_meta(); self.expect(&token::SEMI); iovi_view_item(ast::view_item { - node: view_item_extern_mod(ident, maybe_path, metadata, ast::DUMMY_NODE_ID), + node: view_item_extern_mod(ident, maybe_path, ast::DUMMY_NODE_ID), attrs: attrs, vis: visibility, span: mk_sp(lo, self.last_span.hi) |
