rustc: Remove private enum variants
This removes the `priv` keyword from the language and removes private enum variants as a result. The remaining use cases of private enum variants were all updated to be a struct with one private field that is a private enum. RFC: 0006-remove-priv Closes #13535
This commit is contained in:
parent
83351fa02e
commit
5cfbc0e7ae
27 changed files with 31 additions and 198 deletions
|
@ -1586,10 +1586,10 @@ pub struct Bar {
|
|||
field: int
|
||||
}
|
||||
|
||||
// Declare a public enum with public and private variants
|
||||
// Declare a public enum with two public variants
|
||||
pub enum State {
|
||||
PubliclyAccessibleState,
|
||||
priv PrivatelyAccessibleState
|
||||
PubliclyAccessibleState2,
|
||||
}
|
||||
~~~~
|
||||
|
||||
|
|
|
@ -124,7 +124,6 @@ enum Family {
|
|||
Trait, // I
|
||||
Struct, // S
|
||||
PublicField, // g
|
||||
PrivateField, // j
|
||||
InheritedField // N
|
||||
}
|
||||
|
||||
|
@ -149,7 +148,6 @@ fn item_family(item: ebml::Doc) -> Family {
|
|||
'I' => Trait,
|
||||
'S' => Struct,
|
||||
'g' => PublicField,
|
||||
'j' => PrivateField,
|
||||
'N' => InheritedField,
|
||||
c => fail!("unexpected family char: {}", c)
|
||||
}
|
||||
|
@ -161,7 +159,6 @@ fn item_visibility(item: ebml::Doc) -> ast::Visibility {
|
|||
Some(visibility_doc) => {
|
||||
match reader::doc_as_u8(visibility_doc) as char {
|
||||
'y' => ast::Public,
|
||||
'n' => ast::Private,
|
||||
'i' => ast::Inherited,
|
||||
_ => fail!("unknown visibility character")
|
||||
}
|
||||
|
@ -364,7 +361,7 @@ fn item_to_def_like(item: ebml::Doc, did: ast::DefId, cnum: ast::CrateNum)
|
|||
Trait => DlDef(ast::DefTrait(did)),
|
||||
Enum => DlDef(ast::DefTy(did)),
|
||||
Impl => DlImpl(did),
|
||||
PublicField | PrivateField | InheritedField => DlField,
|
||||
PublicField | InheritedField => DlField,
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -962,7 +959,6 @@ pub fn get_item_attrs(cdata: Cmd,
|
|||
fn struct_field_family_to_visibility(family: Family) -> ast::Visibility {
|
||||
match family {
|
||||
PublicField => ast::Public,
|
||||
PrivateField => ast::Private,
|
||||
InheritedField => ast::Inherited,
|
||||
_ => fail!()
|
||||
}
|
||||
|
@ -975,7 +971,7 @@ pub fn get_struct_fields(intr: Rc<IdentInterner>, cdata: Cmd, id: ast::NodeId)
|
|||
let mut result = Vec::new();
|
||||
reader::tagged_docs(item, tag_item_field, |an_item| {
|
||||
let f = item_family(an_item);
|
||||
if f == PublicField || f == PrivateField || f == InheritedField {
|
||||
if f == PublicField || f == InheritedField {
|
||||
// FIXME #6993: name should be of type Name, not Ident
|
||||
let name = item_name(&*intr, an_item);
|
||||
let did = item_def_id(an_item, cdata);
|
||||
|
|
|
@ -607,7 +607,6 @@ fn encode_struct_field_family(ebml_w: &mut Encoder,
|
|||
visibility: Visibility) {
|
||||
encode_family(ebml_w, match visibility {
|
||||
Public => 'g',
|
||||
Private => 'j',
|
||||
Inherited => 'N'
|
||||
});
|
||||
}
|
||||
|
@ -616,7 +615,6 @@ fn encode_visibility(ebml_w: &mut Encoder, visibility: Visibility) {
|
|||
ebml_w.start_tag(tag_items_data_item_visibility);
|
||||
let ch = match visibility {
|
||||
Public => 'y',
|
||||
Private => 'n',
|
||||
Inherited => 'i',
|
||||
};
|
||||
ebml_w.wr_str(str::from_char(ch));
|
||||
|
|
|
@ -67,18 +67,10 @@ impl Visitor<()> for ParentVisitor {
|
|||
// they inherit privacy
|
||||
ast::ItemEnum(ref def, _) => {
|
||||
for variant in def.variants.iter() {
|
||||
// If variants are private, then their logical "parent" is
|
||||
// the enclosing module because everyone in the enclosing
|
||||
// module can still use the private variant
|
||||
if variant.node.vis == ast::Private {
|
||||
self.parents.insert(variant.node.id, self.curparent);
|
||||
|
||||
// Otherwise, if the variant is public, then the parent is
|
||||
// considered the enclosing enum because the enum will
|
||||
// dictate the privacy visibility of this variant instead.
|
||||
} else {
|
||||
self.parents.insert(variant.node.id, item.id);
|
||||
}
|
||||
// The parent is considered the enclosing enum because the
|
||||
// enum will dictate the privacy visibility of this variant
|
||||
// instead.
|
||||
self.parents.insert(variant.node.id, item.id);
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -224,9 +216,7 @@ impl<'a> Visitor<()> for EmbargoVisitor<'a> {
|
|||
// public all variants are public unless they're explicitly priv
|
||||
ast::ItemEnum(ref def, _) if public_first => {
|
||||
for variant in def.variants.iter() {
|
||||
if variant.node.vis != ast::Private {
|
||||
self.exported_items.insert(variant.node.id);
|
||||
}
|
||||
self.exported_items.insert(variant.node.id);
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -462,10 +452,7 @@ impl<'a> PrivacyVisitor<'a> {
|
|||
Some(ast_map::NodeForeignItem(_)) => {
|
||||
self.tcx.map.get_foreign_vis(closest_private_id)
|
||||
}
|
||||
Some(ast_map::NodeVariant(ref v)) => {
|
||||
// sadly enum variants still inherit visibility, so only
|
||||
// break out of this is explicitly private
|
||||
if v.node.vis == ast::Private { break }
|
||||
Some(ast_map::NodeVariant(..)) => {
|
||||
ast::Public // need to move up a level (to the enum)
|
||||
}
|
||||
_ => ast::Public,
|
||||
|
@ -997,10 +984,6 @@ impl<'a> Visitor<()> for SanePrivacyVisitor<'a> {
|
|||
fn visit_view_item(&mut self, i: &ast::ViewItem, _: ()) {
|
||||
match i.vis {
|
||||
ast::Inherited => {}
|
||||
ast::Private => {
|
||||
self.tcx.sess.span_err(i.span, "unnecessary visibility \
|
||||
qualifier");
|
||||
}
|
||||
ast::Public => {
|
||||
if self.in_fn {
|
||||
self.tcx.sess.span_err(i.span, "unnecessary `pub`, imports \
|
||||
|
@ -1036,25 +1019,6 @@ impl<'a> SanePrivacyVisitor<'a> {
|
|||
}
|
||||
}
|
||||
};
|
||||
let check_not_priv = |sp: Span, vis: ast::Visibility, note: &str| {
|
||||
if vis == ast::Private {
|
||||
tcx.sess.span_err(sp, "unnecessary `priv` qualifier");
|
||||
if note.len() > 0 {
|
||||
tcx.sess.span_note(sp, note);
|
||||
}
|
||||
}
|
||||
};
|
||||
let check_struct = |def: &@ast::StructDef| {
|
||||
for f in def.fields.iter() {
|
||||
match f.node.kind {
|
||||
ast::NamedField(_, ast::Private) => {
|
||||
tcx.sess.span_err(f.span, "unnecessary `priv` \
|
||||
visibility");
|
||||
}
|
||||
ast::NamedField(..) | ast::UnnamedField(..) => {}
|
||||
}
|
||||
}
|
||||
};
|
||||
match item.node {
|
||||
// implementations of traits don't need visibility qualifiers because
|
||||
// that's controlled by having the trait in scope.
|
||||
|
@ -1067,22 +1031,14 @@ impl<'a> SanePrivacyVisitor<'a> {
|
|||
}
|
||||
}
|
||||
|
||||
ast::ItemImpl(_, _, _, ref methods) => {
|
||||
ast::ItemImpl(..) => {
|
||||
check_inherited(item.span, item.vis,
|
||||
"place qualifiers on individual methods instead");
|
||||
for i in methods.iter() {
|
||||
check_not_priv(i.span, i.vis, "functions are private by \
|
||||
default");
|
||||
}
|
||||
}
|
||||
ast::ItemForeignMod(ref fm) => {
|
||||
ast::ItemForeignMod(..) => {
|
||||
check_inherited(item.span, item.vis,
|
||||
"place qualifiers on individual functions \
|
||||
instead");
|
||||
for i in fm.items.iter() {
|
||||
check_not_priv(i.span, i.vis, "functions are private by \
|
||||
default");
|
||||
}
|
||||
}
|
||||
|
||||
ast::ItemEnum(ref def, _) => {
|
||||
|
@ -1094,24 +1050,11 @@ impl<'a> SanePrivacyVisitor<'a> {
|
|||
visibility");
|
||||
}
|
||||
}
|
||||
ast::Private => {
|
||||
if item.vis != ast::Public {
|
||||
tcx.sess.span_err(v.span, "unnecessary `priv` \
|
||||
visibility");
|
||||
}
|
||||
}
|
||||
ast::Inherited => {}
|
||||
}
|
||||
|
||||
match v.node.kind {
|
||||
ast::StructVariantKind(ref s) => check_struct(s),
|
||||
ast::TupleVariantKind(..) => {}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
ast::ItemStruct(ref def, _) => check_struct(def),
|
||||
|
||||
ast::ItemTrait(_, _, ref methods) => {
|
||||
for m in methods.iter() {
|
||||
match *m {
|
||||
|
@ -1124,12 +1067,9 @@ impl<'a> SanePrivacyVisitor<'a> {
|
|||
}
|
||||
}
|
||||
|
||||
ast::ItemStatic(..) |
|
||||
ast::ItemStatic(..) | ast::ItemStruct(..) |
|
||||
ast::ItemFn(..) | ast::ItemMod(..) | ast::ItemTy(..) |
|
||||
ast::ItemMac(..) => {
|
||||
check_not_priv(item.span, item.vis, "items are private by \
|
||||
default");
|
||||
}
|
||||
ast::ItemMac(..) => {}
|
||||
}
|
||||
}
|
||||
|
||||
|
|
|
@ -1421,12 +1421,8 @@ impl<'a> Resolver<'a> {
|
|||
variant: &Variant,
|
||||
item_id: DefId,
|
||||
parent: ReducedGraphParent,
|
||||
parent_public: bool) {
|
||||
is_public: bool) {
|
||||
let ident = variant.node.name;
|
||||
// FIXME: this is unfortunate to have to do this privacy calculation
|
||||
// here. This should be living in middle::privacy, but it's
|
||||
// necessary to keep around in some form becaues of glob imports...
|
||||
let is_public = parent_public && variant.node.vis != ast::Private;
|
||||
|
||||
match variant.node.kind {
|
||||
TupleVariantKind(_) => {
|
||||
|
@ -1668,12 +1664,11 @@ impl<'a> Resolver<'a> {
|
|||
// We assume the parent is visible, or else we wouldn't have seen
|
||||
// it. Also variants are public-by-default if the parent was also
|
||||
// public.
|
||||
let is_public = vis != ast::Private;
|
||||
if is_struct {
|
||||
child_name_bindings.define_type(def, DUMMY_SP, is_public);
|
||||
child_name_bindings.define_type(def, DUMMY_SP, true);
|
||||
self.structs.insert(variant_id);
|
||||
} else {
|
||||
child_name_bindings.define_value(def, DUMMY_SP, is_public);
|
||||
child_name_bindings.define_value(def, DUMMY_SP, true);
|
||||
}
|
||||
}
|
||||
DefFn(..) | DefStaticMethod(..) | DefStatic(..) => {
|
||||
|
|
|
@ -41,7 +41,7 @@ impl Module {
|
|||
Module {
|
||||
name : name,
|
||||
id: 0,
|
||||
vis: ast::Private,
|
||||
vis: ast::Inherited,
|
||||
where: syntax::codemap::DUMMY_SP,
|
||||
attrs : Vec::new(),
|
||||
structs : Vec::new(),
|
||||
|
|
|
@ -507,7 +507,6 @@ impl fmt::Show for VisSpace {
|
|||
fn fmt(&self, f: &mut fmt::Formatter) -> fmt::Result {
|
||||
match self.get() {
|
||||
Some(ast::Public) => write!(f.buf, "pub "),
|
||||
Some(ast::Private) => write!(f.buf, "priv "),
|
||||
Some(ast::Inherited) | None => Ok(())
|
||||
}
|
||||
}
|
||||
|
|
|
@ -1038,7 +1038,6 @@ pub struct TraitRef {
|
|||
#[deriving(Clone, Eq, TotalEq, Encodable, Decodable, Hash)]
|
||||
pub enum Visibility {
|
||||
Public,
|
||||
Private,
|
||||
Inherited,
|
||||
}
|
||||
|
||||
|
@ -1046,7 +1045,7 @@ impl Visibility {
|
|||
pub fn inherit_from(&self, parent_visibility: Visibility) -> Visibility {
|
||||
match self {
|
||||
&Inherited => parent_visibility,
|
||||
&Public | &Private => *self
|
||||
&Public => *self
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
|
@ -39,7 +39,7 @@ use ast::{MutImmutable, MutMutable, Mac_, MacInvocTT, Matcher, MatchNonterminal}
|
|||
use ast::{MatchSeq, MatchTok, Method, MutTy, BiMul, Mutability};
|
||||
use ast::{NamedField, UnNeg, NoReturn, UnNot, P, Pat, PatEnum};
|
||||
use ast::{PatIdent, PatLit, PatRange, PatRegion, PatStruct};
|
||||
use ast::{PatTup, PatUniq, PatWild, PatWildMulti, Private};
|
||||
use ast::{PatTup, PatUniq, PatWild, PatWildMulti};
|
||||
use ast::{BiRem, Required};
|
||||
use ast::{RetStyle, Return, BiShl, BiShr, Stmt, StmtDecl};
|
||||
use ast::{StmtExpr, StmtSemi, StmtMac, StructDef, StructField};
|
||||
|
@ -3953,10 +3953,6 @@ impl<'a> Parser<'a> {
|
|||
|
||||
let attrs = self.parse_outer_attributes();
|
||||
|
||||
if self.eat_keyword(keywords::Priv) {
|
||||
return self.parse_single_struct_field(Private, attrs);
|
||||
}
|
||||
|
||||
if self.eat_keyword(keywords::Pub) {
|
||||
return self.parse_single_struct_field(Public, attrs);
|
||||
}
|
||||
|
@ -3967,7 +3963,6 @@ impl<'a> Parser<'a> {
|
|||
// parse visiility: PUB, PRIV, or nothing
|
||||
fn parse_visibility(&mut self) -> Visibility {
|
||||
if self.eat_keyword(keywords::Pub) { Public }
|
||||
else if self.eat_keyword(keywords::Priv) { Private }
|
||||
else { Inherited }
|
||||
}
|
||||
|
||||
|
|
|
@ -230,7 +230,6 @@ pub fn variant_to_str(var: &ast::Variant) -> ~str {
|
|||
|
||||
pub fn visibility_qualified(vis: ast::Visibility, s: &str) -> ~str {
|
||||
match vis {
|
||||
ast::Private => format!("priv {}", s),
|
||||
ast::Public => format!("pub {}", s),
|
||||
ast::Inherited => s.to_owned()
|
||||
}
|
||||
|
@ -731,7 +730,6 @@ impl<'a> State<'a> {
|
|||
|
||||
pub fn print_visibility(&mut self, vis: ast::Visibility) -> IoResult<()> {
|
||||
match vis {
|
||||
ast::Private => self.word_nbsp("priv"),
|
||||
ast::Public => self.word_nbsp("pub"),
|
||||
ast::Inherited => Ok(())
|
||||
}
|
||||
|
|
|
@ -1,14 +0,0 @@
|
|||
// Copyright 2014 The Rust Project Developers. See the COPYRIGHT
|
||||
// file at the top-level directory of this distribution and at
|
||||
// http://rust-lang.org/COPYRIGHT.
|
||||
//
|
||||
// Licensed under the Apache License, Version 2.0 <LICENSE-APACHE or
|
||||
// http://www.apache.org/licenses/LICENSE-2.0> or the MIT license
|
||||
// <LICENSE-MIT or http://opensource.org/licenses/MIT>, at your
|
||||
// option. This file may not be copied, modified, or distributed
|
||||
// except according to those terms.
|
||||
|
||||
pub enum Foo {
|
||||
Bar,
|
||||
priv Baz,
|
||||
}
|
|
@ -10,6 +10,6 @@
|
|||
|
||||
mod super_sekrit {
|
||||
pub enum sooper_sekrit {
|
||||
quux, priv baz
|
||||
quux, baz
|
||||
}
|
||||
}
|
|
@ -9,7 +9,7 @@
|
|||
// except according to those terms.
|
||||
|
||||
struct cat {
|
||||
priv meows : uint,
|
||||
meows : uint,
|
||||
|
||||
how_hungry : int,
|
||||
}
|
||||
|
|
|
@ -13,7 +13,7 @@ trait noisy {
|
|||
}
|
||||
|
||||
struct cat {
|
||||
priv meows : uint,
|
||||
meows : uint,
|
||||
|
||||
how_hungry : int,
|
||||
name : ~str,
|
||||
|
|
|
@ -9,7 +9,7 @@
|
|||
// except according to those terms.
|
||||
|
||||
struct cat {
|
||||
priv meows : uint,
|
||||
meows : uint,
|
||||
}
|
||||
|
||||
impl cat {
|
||||
|
|
|
@ -8,12 +8,12 @@
|
|||
// option. This file may not be copied, modified, or distributed
|
||||
// except according to those terms.
|
||||
|
||||
use zoo::{duck, goose}; //~ ERROR: variant `goose` is private
|
||||
use zoo::{duck, goose};
|
||||
|
||||
mod zoo {
|
||||
pub enum bird {
|
||||
pub duck, //~ ERROR: unnecessary `pub` visibility
|
||||
priv goose
|
||||
goose
|
||||
}
|
||||
}
|
||||
|
||||
|
|
|
@ -9,15 +9,12 @@
|
|||
// except according to those terms.
|
||||
|
||||
pub extern crate std; //~ ERROR: `pub` visibility is not allowed
|
||||
priv extern crate std; //~ ERROR: unnecessary visibility qualifier
|
||||
extern crate std;
|
||||
|
||||
pub use std::bool;
|
||||
priv use std::bool; //~ ERROR: unnecessary visibility qualifier
|
||||
use std::bool;
|
||||
|
||||
fn main() {
|
||||
pub use std::bool; //~ ERROR: imports in functions are never reachable
|
||||
priv use std::bool; //~ ERROR: unnecessary visibility qualifier
|
||||
use std::bool;
|
||||
}
|
||||
|
|
|
@ -109,8 +109,6 @@ pub enum PubBaz { //~ ERROR: missing documentation
|
|||
pub a: int, //~ ERROR: missing documentation
|
||||
b: int
|
||||
},
|
||||
|
||||
priv PubBazB
|
||||
}
|
||||
|
||||
/// dox
|
||||
|
@ -121,7 +119,6 @@ pub enum PubBaz2 {
|
|||
pub a: int,
|
||||
b: int
|
||||
},
|
||||
priv PubBaz2B
|
||||
}
|
||||
|
||||
#[allow(missing_doc)]
|
||||
|
@ -130,7 +127,6 @@ pub enum PubBaz3 {
|
|||
pub a: int,
|
||||
b: int
|
||||
},
|
||||
priv PubBaz3B
|
||||
}
|
||||
|
||||
#[doc(hidden)]
|
||||
|
|
|
@ -60,11 +60,6 @@ pub enum Baz {
|
|||
pub x: Private<int>, //~ ERROR private type in exported type signature
|
||||
y: Private<int>
|
||||
},
|
||||
|
||||
priv Baz3(Private<int>),
|
||||
priv Baz4 {
|
||||
x: Private<int>,
|
||||
}
|
||||
}
|
||||
|
||||
enum Qux {
|
||||
|
|
|
@ -38,7 +38,6 @@ mod bar {
|
|||
impl B for int { fn foo() -> int { 3 } }
|
||||
|
||||
pub enum Enum {
|
||||
priv Priv,
|
||||
Pub
|
||||
}
|
||||
|
||||
|
@ -64,7 +63,6 @@ mod bar {
|
|||
}
|
||||
|
||||
fn test() {
|
||||
self::Priv;
|
||||
self::Pub;
|
||||
unsafe {
|
||||
epriv();
|
||||
|
@ -120,7 +118,6 @@ mod foo {
|
|||
//~^ NOTE: trait `B` is private
|
||||
::lol();
|
||||
|
||||
::bar::Priv; //~ ERROR: variant `Priv` is private
|
||||
::bar::Pub;
|
||||
|
||||
unsafe {
|
||||
|
|
|
@ -12,7 +12,7 @@
|
|||
|
||||
mod kitties {
|
||||
pub struct cat {
|
||||
priv meows : uint,
|
||||
meows : uint,
|
||||
|
||||
how_hungry : int,
|
||||
}
|
||||
|
|
|
@ -1,18 +0,0 @@
|
|||
// Copyright 2014 The Rust Project Developers. See the COPYRIGHT
|
||||
// file at the top-level directory of this distribution and at
|
||||
// http://rust-lang.org/COPYRIGHT.
|
||||
//
|
||||
// Licensed under the Apache License, Version 2.0 <LICENSE-APACHE or
|
||||
// http://www.apache.org/licenses/LICENSE-2.0> or the MIT license
|
||||
// <LICENSE-MIT or http://opensource.org/licenses/MIT>, at your
|
||||
// option. This file may not be copied, modified, or distributed
|
||||
// except according to those terms.
|
||||
|
||||
// aux-build:private_variant_xc.rs
|
||||
|
||||
extern crate private_variant_xc;
|
||||
|
||||
pub fn main() {
|
||||
let _ = private_variant_xc::Bar;
|
||||
let _ = private_variant_xc::Baz; //~ ERROR variant `Baz` is private
|
||||
}
|
|
@ -1,21 +0,0 @@
|
|||
// Copyright 2012 The Rust Project Developers. See the COPYRIGHT
|
||||
// file at the top-level directory of this distribution and at
|
||||
// http://rust-lang.org/COPYRIGHT.
|
||||
//
|
||||
// Licensed under the Apache License, Version 2.0 <LICENSE-APACHE or
|
||||
// http://www.apache.org/licenses/LICENSE-2.0> or the MIT license
|
||||
// <LICENSE-MIT or http://opensource.org/licenses/MIT>, at your
|
||||
// option. This file may not be copied, modified, or distributed
|
||||
// except according to those terms.
|
||||
|
||||
mod a {
|
||||
pub enum Waffle {
|
||||
Belgian,
|
||||
Brussels,
|
||||
priv Liege
|
||||
}
|
||||
}
|
||||
|
||||
fn main() {
|
||||
let x = a::Liege; //~ ERROR variant `Liege` is private
|
||||
}
|
|
@ -1,17 +0,0 @@
|
|||
// Copyright 2013 The Rust Project Developers. See the COPYRIGHT
|
||||
// file at the top-level directory of this distribution and at
|
||||
// http://rust-lang.org/COPYRIGHT.
|
||||
//
|
||||
// Licensed under the Apache License, Version 2.0 <LICENSE-APACHE or
|
||||
// http://www.apache.org/licenses/LICENSE-2.0> or the MIT license
|
||||
// <LICENSE-MIT or http://opensource.org/licenses/MIT>, at your
|
||||
// option. This file may not be copied, modified, or distributed
|
||||
// except according to those terms.
|
||||
|
||||
struct sss {
|
||||
bar: int,
|
||||
priv {
|
||||
//~^ ERROR expected ident
|
||||
foo: ()
|
||||
}
|
||||
}
|
|
@ -19,7 +19,7 @@ fn main() {
|
|||
}
|
||||
|
||||
struct D {
|
||||
priv foo: int, //~ ERROR: visibility has no effect
|
||||
pub foo: int, //~ ERROR: visibility has no effect
|
||||
}
|
||||
pub fn foo() {} //~ ERROR: visibility has no effect
|
||||
pub mod bar {} //~ ERROR: visibility has no effect
|
||||
|
|
|
@ -8,10 +8,10 @@
|
|||
// option. This file may not be copied, modified, or distributed
|
||||
// except according to those terms.
|
||||
|
||||
// aux-build:private_variant_1.rs
|
||||
// aux-build:unreachable-variant.rs
|
||||
|
||||
extern crate private_variant_1;
|
||||
extern crate other = "unreachable-variant";
|
||||
|
||||
fn main() {
|
||||
let _x = private_variant_1::super_sekrit::baz; //~ ERROR is private
|
||||
let _x = other::super_sekrit::baz; //~ ERROR is private
|
||||
}
|
|
@ -9,9 +9,7 @@
|
|||
// except according to those terms.
|
||||
|
||||
struct A { pub i: int }
|
||||
struct B { priv i: int } //~ ERROR: unnecessary `priv`
|
||||
pub enum C { pub Variant } //~ ERROR: unnecessary `pub`
|
||||
enum D { priv Variant2 } //~ ERROR: unnecessary `priv`
|
||||
|
||||
pub trait E {
|
||||
pub fn foo() {} //~ ERROR: unnecessary visibility
|
||||
|
|
Loading…
Add table
Reference in a new issue