diff options
| author | Paul Lietar <paul@lietar.net> | 2017-09-03 19:53:58 +0100 |
|---|---|---|
| committer | Paul LiƩtar <lietar@google.com> | 2017-10-27 23:01:34 +0200 |
| commit | 77f7e85d7f4ebcc1a291edae95a3747b0e54d7fa (patch) | |
| tree | 3a10519372a957925738544a8a7cb651139e7fb5 /src/libsyntax/parse | |
| parent | bed9a85c40f98ab8f4445b66d285d4108de9ad21 (diff) | |
| download | rust-77f7e85d7f4ebcc1a291edae95a3747b0e54d7fa.tar.gz rust-77f7e85d7f4ebcc1a291edae95a3747b0e54d7fa.zip | |
Implement RFC 1861: Extern types
Diffstat (limited to 'src/libsyntax/parse')
| -rw-r--r-- | src/libsyntax/parse/parser.rs | 22 |
1 files changed, 22 insertions, 0 deletions
diff --git a/src/libsyntax/parse/parser.rs b/src/libsyntax/parse/parser.rs index a2c431dc8b1..1d990f16ac9 100644 --- a/src/libsyntax/parse/parser.rs +++ b/src/libsyntax/parse/parser.rs @@ -5671,6 +5671,24 @@ impl<'a> Parser<'a> { }) } + /// Parse a type from a foreign module + fn parse_item_foreign_type(&mut self, vis: ast::Visibility, lo: Span, attrs: Vec<Attribute>) + -> PResult<'a, ForeignItem> { + self.expect_keyword(keywords::Type)?; + + let ident = self.parse_ident()?; + let hi = self.span; + self.expect(&token::Semi)?; + Ok(ast::ForeignItem { + ident: ident, + attrs: attrs, + node: ForeignItemKind::Ty, + id: ast::DUMMY_NODE_ID, + span: lo.to(hi), + vis: vis + }) + } + /// Parse extern crate links /// /// # Examples @@ -6145,6 +6163,10 @@ impl<'a> Parser<'a> { if self.check_keyword(keywords::Fn) { return Ok(Some(self.parse_item_foreign_fn(visibility, lo, attrs)?)); } + // FOREIGN TYPE ITEM + if self.check_keyword(keywords::Type) { + return Ok(Some(self.parse_item_foreign_type(visibility, lo, attrs)?)); + } // FIXME #5668: this will occur for a macro invocation: match self.parse_macro_use_or_failure(attrs, true, false, lo, visibility)? { |
