about summary refs log tree commit diff
path: root/src/libsyntax/parse/parser.rs
diff options
context:
space:
mode:
authorPatrick Walton <pcwalton@mimiga.net>2012-08-30 17:09:04 -0700
committerPatrick Walton <pcwalton@mimiga.net>2012-08-30 17:10:07 -0700
commit4846affedb3c05cb692f41398b986ad7ed1844aa (patch)
tree7f3a2e6d264d9a5201aff6cdd1e878cdbd7b0b76 /src/libsyntax/parse/parser.rs
parentc3ac0f8fd95a6521c46ea32d1a7866635f96e921 (diff)
downloadrust-4846affedb3c05cb692f41398b986ad7ed1844aa.tar.gz
rust-4846affedb3c05cb692f41398b986ad7ed1844aa.zip
rustc: "extern mod { ... }" should be written "extern { ... }" instead
Diffstat (limited to 'src/libsyntax/parse/parser.rs')
-rw-r--r--src/libsyntax/parse/parser.rs27
1 files changed, 23 insertions, 4 deletions
diff --git a/src/libsyntax/parse/parser.rs b/src/libsyntax/parse/parser.rs
index 8cc8994189b..c83e6893e3c 100644
--- a/src/libsyntax/parse/parser.rs
+++ b/src/libsyntax/parse/parser.rs
@@ -2915,15 +2915,34 @@ struct parser {
                               attrs: ~[attribute],
                               items_allowed: bool)
                            -> item_or_view_item {
+
+        let mut must_be_named_mod = false;
         if self.is_keyword(~"mod") {
+            must_be_named_mod = true;
             self.expect_keyword(~"mod");
-        } else {
+        } else if self.is_keyword(~"module") {
+            must_be_named_mod = true;
             self.expect_keyword(~"module");
+        } else if self.token != token::LBRACE {
+            self.span_fatal(copy self.span,
+                            fmt!("expected `{` or `mod` but found %s",
+                                 token_to_str(self.reader, self.token)));
         }
+
         let (sort, ident) = match self.token {
-                token::IDENT(*) => (ast::named, self.parse_ident()),
-                _ => (ast::anonymous,
-                      token::special_idents::clownshoes_foreign_mod)
+            token::IDENT(*) => (ast::named, self.parse_ident()),
+            _ => {
+                if must_be_named_mod {
+                    self.span_fatal(copy self.span,
+                                    fmt!("expected foreign module name but \
+                                          found %s",
+                                         token_to_str(self.reader,
+                                                      self.token)));
+                }
+
+                (ast::anonymous,
+                 token::special_idents::clownshoes_foreign_mod)
+            }
         };
 
         // extern mod { ... }