From 0bcb3bc536ec30a7a15c276de8e3c3c1e4643e1e Mon Sep 17 00:00:00 2001 From: Patrick Walton Date: Thu, 27 Sep 2012 11:52:36 -0700 Subject: [PATCH] libsyntax: Parse visibility modifiers before foreign items --- src/libsyntax/ast.rs | 3 ++- src/libsyntax/fold.rs | 3 ++- src/libsyntax/parse/parser.rs | 17 +++++++++++------ 3 files changed, 15 insertions(+), 8 deletions(-) diff --git a/src/libsyntax/ast.rs b/src/libsyntax/ast.rs index 24dc3660faf..3e62d0b3ab7 100644 --- a/src/libsyntax/ast.rs +++ b/src/libsyntax/ast.rs @@ -1485,7 +1485,8 @@ impl class_mutability : cmp::Eq { attrs: ~[attribute], node: foreign_item_, id: node_id, - span: span}; + span: span, + vis: visibility}; #[auto_serialize] enum foreign_item_ { diff --git a/src/libsyntax/fold.rs b/src/libsyntax/fold.rs index 3d9234df41e..4f3dafcb21b 100644 --- a/src/libsyntax/fold.rs +++ b/src/libsyntax/fold.rs @@ -203,7 +203,8 @@ fn noop_fold_foreign_item(&&ni: @foreign_item, fld: ast_fold) } }, id: fld.new_id(ni.id), - span: fld.new_span(ni.span)}; + span: fld.new_span(ni.span), + vis: ni.vis}; } fn noop_fold_item(&&i: @item, fld: ast_fold) -> Option<@item> { diff --git a/src/libsyntax/parse/parser.rs b/src/libsyntax/parse/parser.rs index f8ad6c541f6..513dce193cc 100644 --- a/src/libsyntax/parse/parser.rs +++ b/src/libsyntax/parse/parser.rs @@ -2940,7 +2940,8 @@ fn parse_item_mod() -> item_info { (id, item_mod(m), Some(inner_attrs.inner)) } - fn parse_item_foreign_fn(+attrs: ~[attribute]) -> @foreign_item { + fn parse_item_foreign_fn(vis: ast::visibility, + +attrs: ~[attribute]) -> @foreign_item { let lo = self.span.lo; let purity = self.parse_fn_purity(); let t = self.parse_fn_header(); @@ -2951,10 +2952,12 @@ fn parse_item_foreign_fn(+attrs: ~[attribute]) -> @foreign_item { attrs: attrs, node: foreign_item_fn(decl, purity, t.tps), id: self.get_id(), - span: mk_sp(lo, hi)}; + span: mk_sp(lo, hi), + vis: vis}; } - fn parse_item_foreign_const(+attrs: ~[attribute]) -> @foreign_item { + fn parse_item_foreign_const(vis: ast::visibility, + +attrs: ~[attribute]) -> @foreign_item { let lo = self.span.lo; self.expect_keyword(~"const"); let ident = self.parse_ident(); @@ -2966,7 +2969,8 @@ fn parse_item_foreign_const(+attrs: ~[attribute]) -> @foreign_item { attrs: attrs, node: foreign_item_const(move ty), id: self.get_id(), - span: mk_sp(lo, hi)}; + span: mk_sp(lo, hi), + vis: vis}; } fn parse_fn_purity() -> purity { @@ -2982,10 +2986,11 @@ fn parse_fn_purity() -> purity { } fn parse_foreign_item(+attrs: ~[attribute]) -> @foreign_item { + let vis = self.parse_visibility(); if self.is_keyword(~"const") { - self.parse_item_foreign_const(move attrs) + self.parse_item_foreign_const(vis, move attrs) } else { - self.parse_item_foreign_fn(move attrs) + self.parse_item_foreign_fn(vis, move attrs) } } -- GitLab