diff options
| author | Alex Crichton <alex@alexcrichton.com> | 2014-03-25 16:53:52 -0700 |
|---|---|---|
| committer | Alex Crichton <alex@alexcrichton.com> | 2014-03-26 10:20:15 -0700 |
| commit | 7de48419ee8f9ae0a41503e5e104709ea39bfe85 (patch) | |
| tree | 6362ff55ac160b1f880eb9a405f3152574e23d1a /src/libsyntax | |
| parent | 104aaa44e8506cfaf2c00d6ca35dce93a8228545 (diff) | |
| download | rust-7de48419ee8f9ae0a41503e5e104709ea39bfe85.tar.gz rust-7de48419ee8f9ae0a41503e5e104709ea39bfe85.zip | |
syntax: Permit visibility on tuple fields
This change is in preparation for #8122. Nothing is currently done with these visibility qualifiers, they are just parsed and accepted by the compiler. RFC: 0004-private-fields
Diffstat (limited to 'src/libsyntax')
| -rw-r--r-- | src/libsyntax/ast.rs | 11 | ||||
| -rw-r--r-- | src/libsyntax/ast_util.rs | 3 | ||||
| -rw-r--r-- | src/libsyntax/ext/deriving/generic.rs | 6 | ||||
| -rw-r--r-- | src/libsyntax/parse/parser.rs | 2 | ||||
| -rw-r--r-- | src/libsyntax/print/pprust.rs | 5 |
5 files changed, 18 insertions, 9 deletions
diff --git a/src/libsyntax/ast.rs b/src/libsyntax/ast.rs index 24b8a345776..a7d458df0cf 100644 --- a/src/libsyntax/ast.rs +++ b/src/libsyntax/ast.rs @@ -1080,7 +1080,16 @@ pub type StructField = Spanned<StructField_>; #[deriving(Clone, Eq, TotalEq, Encodable, Decodable, Hash)] pub enum StructFieldKind { NamedField(Ident, Visibility), - UnnamedField // element of a tuple-like struct + UnnamedField(Visibility), // element of a tuple-like struct +} + +impl StructFieldKind { + pub fn is_unnamed(&self) -> bool { + match *self { + UnnamedField(..) => true, + NamedField(..) => false, + } + } } #[deriving(Eq, TotalEq, Encodable, Decodable, Hash)] diff --git a/src/libsyntax/ast_util.rs b/src/libsyntax/ast_util.rs index 9d841255aa9..3dbd10b625c 100644 --- a/src/libsyntax/ast_util.rs +++ b/src/libsyntax/ast_util.rs @@ -290,8 +290,7 @@ pub fn split_trait_methods(trait_methods: &[TraitMethod]) pub fn struct_field_visibility(field: ast::StructField) -> Visibility { match field.node.kind { - ast::NamedField(_, visibility) => visibility, - ast::UnnamedField => ast::Public + ast::NamedField(_, v) | ast::UnnamedField(v) => v } } diff --git a/src/libsyntax/ext/deriving/generic.rs b/src/libsyntax/ext/deriving/generic.rs index 89a8b2cd336..9c1d6a1d5ca 100644 --- a/src/libsyntax/ext/deriving/generic.rs +++ b/src/libsyntax/ext/deriving/generic.rs @@ -1007,7 +1007,7 @@ impl<'a> TraitDef<'a> { let sp = self.set_expn_info(cx, field.span); match field.node.kind { ast::NamedField(ident, _) => named_idents.push((ident, sp)), - ast::UnnamedField => just_spans.push(sp), + ast::UnnamedField(..) => just_spans.push(sp), } } @@ -1061,8 +1061,8 @@ impl<'a> TraitDef<'a> { struct_type = Record; Some(ident) } - ast::UnnamedField if (struct_type == Unknown || - struct_type == Tuple) => { + ast::UnnamedField(..) if (struct_type == Unknown || + struct_type == Tuple) => { struct_type = Tuple; None } diff --git a/src/libsyntax/parse/parser.rs b/src/libsyntax/parse/parser.rs index adf3ac0e17d..9b12987361e 100644 --- a/src/libsyntax/parse/parser.rs +++ b/src/libsyntax/parse/parser.rs @@ -3985,7 +3985,7 @@ impl<'a> Parser<'a> { let attrs = p.parse_outer_attributes(); let lo = p.span.lo; let struct_field_ = ast::StructField_ { - kind: UnnamedField, + kind: UnnamedField(p.parse_visibility()), id: ast::DUMMY_NODE_ID, ty: p.parse_ty(false), attrs: attrs, diff --git a/src/libsyntax/print/pprust.rs b/src/libsyntax/print/pprust.rs index a9ab596b300..e1d6f821ba9 100644 --- a/src/libsyntax/print/pprust.rs +++ b/src/libsyntax/print/pprust.rs @@ -743,7 +743,8 @@ impl<'a> State<'a> { |s, field| { match field.node.kind { ast::NamedField(..) => fail!("unexpected named field"), - ast::UnnamedField => { + ast::UnnamedField(vis) => { + try!(s.print_visibility(vis)); try!(s.maybe_print_comment(field.span.lo)); s.print_type(field.node.ty) } @@ -762,7 +763,7 @@ impl<'a> State<'a> { for field in struct_def.fields.iter() { match field.node.kind { - ast::UnnamedField => fail!("unexpected unnamed field"), + ast::UnnamedField(..) => fail!("unexpected unnamed field"), ast::NamedField(ident, visibility) => { try!(self.hardbreak_if_not_bol()); try!(self.maybe_print_comment(field.span.lo)); |
