Auto merge of #51829 - petrochenkov:noideq, r=eddyb
Remove most of `PartialEq` and `Hash` impls from AST and HIR structures Continuation of https://github.com/rust-lang/rust/pull/49326, prerequisite for removing `PartialEq` for `Ident`.
This commit is contained in:
commit
0db03e635a
|
@ -81,7 +81,7 @@ impl serialize::UseSpecializedDecodable for CrateNum {}
|
|||
/// Since the DefIndex is mostly treated as an opaque ID, you probably
|
||||
/// don't have to care about these address spaces.
|
||||
|
||||
#[derive(Clone, Eq, Ord, PartialOrd, PartialEq, Hash, Copy)]
|
||||
#[derive(Clone, PartialEq, Eq, PartialOrd, Ord, Hash, Copy)]
|
||||
pub struct DefIndex(u32);
|
||||
|
||||
/// The crate root is always assigned index 0 by the AST Map code,
|
||||
|
@ -150,7 +150,7 @@ impl DefIndex {
|
|||
impl serialize::UseSpecializedEncodable for DefIndex {}
|
||||
impl serialize::UseSpecializedDecodable for DefIndex {}
|
||||
|
||||
#[derive(Copy, Clone, Eq, PartialEq, Hash)]
|
||||
#[derive(Copy, Clone, Hash)]
|
||||
pub enum DefIndexAddressSpace {
|
||||
Low = 0,
|
||||
High = 1,
|
||||
|
@ -165,7 +165,7 @@ impl DefIndexAddressSpace {
|
|||
|
||||
/// A DefId identifies a particular *definition*, by combining a crate
|
||||
/// index and a def index.
|
||||
#[derive(Clone, Eq, Ord, PartialOrd, PartialEq, Hash, Copy)]
|
||||
#[derive(Clone, PartialEq, Eq, PartialOrd, Ord, Hash, Copy)]
|
||||
pub struct DefId {
|
||||
pub krate: CrateNum,
|
||||
pub index: DefIndex,
|
||||
|
@ -216,7 +216,7 @@ impl serialize::UseSpecializedDecodable for DefId {}
|
|||
/// few cases where we know that only DefIds from the local crate are expected
|
||||
/// and a DefId from a different crate would signify a bug somewhere. This
|
||||
/// is when LocalDefId comes in handy.
|
||||
#[derive(Clone, Copy, Eq, PartialEq, Ord, PartialOrd, Hash)]
|
||||
#[derive(Clone, Copy, PartialEq, Eq, Hash)]
|
||||
pub struct LocalDefId(DefIndex);
|
||||
|
||||
impl LocalDefId {
|
||||
|
|
|
@ -51,7 +51,7 @@ use super::itemlikevisit::DeepVisitor;
|
|||
use std::cmp;
|
||||
use std::u32;
|
||||
|
||||
#[derive(Copy, Clone, PartialEq, Eq)]
|
||||
#[derive(Copy, Clone)]
|
||||
pub enum FnKind<'a> {
|
||||
/// #[xxx] pub async/const/extern "Abi" fn foo()
|
||||
ItemFn(Name, &'a Generics, FnHeader, &'a Visibility, &'a [Attribute]),
|
||||
|
@ -1115,7 +1115,7 @@ pub fn walk_defaultness<'v, V: Visitor<'v>>(_: &mut V, _: &'v Defaultness) {
|
|||
// would be to walk it.
|
||||
}
|
||||
|
||||
#[derive(Copy, Clone, RustcEncodable, RustcDecodable, Debug, PartialEq, Eq)]
|
||||
#[derive(Copy, Clone, RustcEncodable, RustcDecodable, Debug)]
|
||||
pub struct IdRange {
|
||||
pub min: NodeId,
|
||||
pub max: NodeId,
|
||||
|
|
|
@ -238,7 +238,7 @@ pub fn lower_crate(
|
|||
}.lower_crate(krate)
|
||||
}
|
||||
|
||||
#[derive(Copy, Clone, PartialEq, Eq)]
|
||||
#[derive(Copy, Clone, PartialEq)]
|
||||
enum ParamMode {
|
||||
/// Any path in a type context.
|
||||
Explicit,
|
||||
|
@ -1927,7 +1927,7 @@ impl<'a> LoweringContext<'a> {
|
|||
variadic: decl.variadic,
|
||||
has_implicit_self: decl.inputs.get(0).map_or(false, |arg| match arg.ty.node {
|
||||
TyKind::ImplicitSelf => true,
|
||||
TyKind::Rptr(_, ref mt) => mt.ty.node == TyKind::ImplicitSelf,
|
||||
TyKind::Rptr(_, ref mt) => mt.ty.node.is_implicit_self(),
|
||||
_ => false,
|
||||
}),
|
||||
})
|
||||
|
|
|
@ -171,7 +171,7 @@ pub struct Definitions {
|
|||
/// A unique identifier that we can use to lookup a definition
|
||||
/// precisely. It combines the index of the definition's parent (if
|
||||
/// any) with a `DisambiguatedDefPathData`.
|
||||
#[derive(Clone, Debug, PartialEq, Eq, Hash, RustcEncodable, RustcDecodable)]
|
||||
#[derive(Clone, PartialEq, Debug, Hash, RustcEncodable, RustcDecodable)]
|
||||
pub struct DefKey {
|
||||
/// Parent path.
|
||||
pub parent: Option<DefIndex>,
|
||||
|
@ -223,13 +223,13 @@ impl DefKey {
|
|||
/// between them. This introduces some artificial ordering dependency
|
||||
/// but means that if you have (e.g.) two impls for the same type in
|
||||
/// the same module, they do get distinct def-ids.
|
||||
#[derive(Clone, Debug, PartialEq, Eq, Hash, RustcEncodable, RustcDecodable)]
|
||||
#[derive(Clone, PartialEq, Debug, Hash, RustcEncodable, RustcDecodable)]
|
||||
pub struct DisambiguatedDefPathData {
|
||||
pub data: DefPathData,
|
||||
pub disambiguator: u32
|
||||
}
|
||||
|
||||
#[derive(Clone, Debug, PartialEq, Eq, Hash, RustcEncodable, RustcDecodable)]
|
||||
#[derive(Clone, Debug, Hash, RustcEncodable, RustcDecodable)]
|
||||
pub struct DefPath {
|
||||
/// the path leading from the crate root to the item
|
||||
pub data: Vec<DisambiguatedDefPathData>,
|
||||
|
@ -311,7 +311,7 @@ impl DefPath {
|
|||
}
|
||||
}
|
||||
|
||||
#[derive(Clone, Debug, Eq, PartialEq, Hash, RustcEncodable, RustcDecodable)]
|
||||
#[derive(Clone, Debug, PartialEq, Eq, Hash, RustcEncodable, RustcDecodable)]
|
||||
pub enum DefPathData {
|
||||
// Root: these should only be used for the root nodes, because
|
||||
// they are treated specially by the `def_path` function.
|
||||
|
@ -668,8 +668,7 @@ macro_rules! define_global_metadata_kind {
|
|||
(pub enum GlobalMetaDataKind {
|
||||
$($variant:ident),*
|
||||
}) => (
|
||||
#[derive(Clone, Copy, Debug, PartialEq, Eq, PartialOrd, Ord, Hash,
|
||||
RustcEncodable, RustcDecodable)]
|
||||
#[derive(Clone, Copy, Debug, Hash, RustcEncodable, RustcDecodable)]
|
||||
pub enum GlobalMetaDataKind {
|
||||
$($variant),*
|
||||
}
|
||||
|
|
|
@ -89,7 +89,7 @@ pub mod svh;
|
|||
/// the local_id part of the HirId changing, which is a very useful property in
|
||||
/// incremental compilation where we have to persist things through changes to
|
||||
/// the code base.
|
||||
#[derive(Copy, Clone, PartialEq, Eq, Hash, PartialOrd, Ord, Debug)]
|
||||
#[derive(Copy, Clone, PartialEq, Eq, Hash, Debug)]
|
||||
pub struct HirId {
|
||||
pub owner: DefIndex,
|
||||
pub local_id: ItemLocalId,
|
||||
|
@ -138,7 +138,7 @@ impl serialize::UseSpecializedDecodable for HirId {
|
|||
/// integers starting at zero, so a mapping that maps all or most nodes within
|
||||
/// an "item-like" to something else can be implement by a `Vec` instead of a
|
||||
/// tree or hash map.
|
||||
#[derive(Copy, Clone, PartialEq, Eq, Hash, PartialOrd, Ord, Debug,
|
||||
#[derive(Copy, Clone, PartialEq, Eq, PartialOrd, Ord, Hash, Debug,
|
||||
RustcEncodable, RustcDecodable)]
|
||||
pub struct ItemLocalId(pub u32);
|
||||
|
||||
|
@ -172,7 +172,7 @@ pub const DUMMY_HIR_ID: HirId = HirId {
|
|||
|
||||
pub const DUMMY_ITEM_LOCAL_ID: ItemLocalId = ItemLocalId(!0);
|
||||
|
||||
#[derive(Clone, PartialEq, Eq, RustcEncodable, RustcDecodable, Hash, Copy)]
|
||||
#[derive(Clone, RustcEncodable, RustcDecodable, Copy)]
|
||||
pub struct Label {
|
||||
pub ident: Ident,
|
||||
}
|
||||
|
@ -183,7 +183,7 @@ impl fmt::Debug for Label {
|
|||
}
|
||||
}
|
||||
|
||||
#[derive(Clone, PartialEq, Eq, RustcEncodable, RustcDecodable, Hash, Copy)]
|
||||
#[derive(Clone, RustcEncodable, RustcDecodable, Copy)]
|
||||
pub struct Lifetime {
|
||||
pub id: NodeId,
|
||||
pub span: Span,
|
||||
|
@ -312,7 +312,7 @@ impl Lifetime {
|
|||
/// A "Path" is essentially Rust's notion of a name; for instance:
|
||||
/// `std::cmp::PartialEq`. It's represented as a sequence of identifiers,
|
||||
/// along with a bunch of supporting information.
|
||||
#[derive(Clone, PartialEq, Eq, RustcEncodable, RustcDecodable, Hash)]
|
||||
#[derive(Clone, RustcEncodable, RustcDecodable)]
|
||||
pub struct Path {
|
||||
pub span: Span,
|
||||
/// The definition that the path resolved to.
|
||||
|
@ -341,7 +341,7 @@ impl fmt::Display for Path {
|
|||
|
||||
/// A segment of a path: an identifier, an optional lifetime, and a set of
|
||||
/// types.
|
||||
#[derive(Clone, PartialEq, Eq, RustcEncodable, RustcDecodable, Hash, Debug)]
|
||||
#[derive(Clone, RustcEncodable, RustcDecodable, Debug)]
|
||||
pub struct PathSegment {
|
||||
/// The identifier portion of this path segment.
|
||||
pub ident: Ident,
|
||||
|
@ -396,7 +396,7 @@ impl PathSegment {
|
|||
}
|
||||
}
|
||||
|
||||
#[derive(Clone, PartialEq, Eq, RustcEncodable, RustcDecodable, Hash, Debug)]
|
||||
#[derive(Clone, RustcEncodable, RustcDecodable, Debug)]
|
||||
pub enum GenericArg {
|
||||
Lifetime(Lifetime),
|
||||
Type(Ty),
|
||||
|
@ -411,7 +411,7 @@ impl GenericArg {
|
|||
}
|
||||
}
|
||||
|
||||
#[derive(Clone, PartialEq, Eq, RustcEncodable, RustcDecodable, Hash, Debug)]
|
||||
#[derive(Clone, RustcEncodable, RustcDecodable, Debug)]
|
||||
pub struct GenericArgs {
|
||||
/// The generic arguments for this path segment.
|
||||
pub args: HirVec<GenericArg>,
|
||||
|
@ -467,7 +467,7 @@ pub enum TraitBoundModifier {
|
|||
/// typeck::collect::compute_bounds matches these against
|
||||
/// the "special" built-in traits (see middle::lang_items) and
|
||||
/// detects Copy, Send and Sync.
|
||||
#[derive(Clone, PartialEq, Eq, RustcEncodable, RustcDecodable, Hash, Debug)]
|
||||
#[derive(Clone, RustcEncodable, RustcDecodable, Debug)]
|
||||
pub enum GenericBound {
|
||||
Trait(PolyTraitRef, TraitBoundModifier),
|
||||
Outlives(Lifetime),
|
||||
|
@ -484,7 +484,7 @@ impl GenericBound {
|
|||
|
||||
pub type GenericBounds = HirVec<GenericBound>;
|
||||
|
||||
#[derive(Clone, PartialEq, Eq, RustcEncodable, RustcDecodable, Hash, Debug)]
|
||||
#[derive(Clone, RustcEncodable, RustcDecodable, Debug)]
|
||||
pub enum GenericParamKind {
|
||||
/// A lifetime definition, eg `'a: 'b + 'c + 'd`.
|
||||
Lifetime {
|
||||
|
@ -499,7 +499,7 @@ pub enum GenericParamKind {
|
|||
}
|
||||
}
|
||||
|
||||
#[derive(Clone, PartialEq, Eq, RustcEncodable, RustcDecodable, Hash, Debug)]
|
||||
#[derive(Clone, RustcEncodable, RustcDecodable, Debug)]
|
||||
pub struct GenericParam {
|
||||
pub id: NodeId,
|
||||
pub name: ParamName,
|
||||
|
@ -518,7 +518,7 @@ pub struct GenericParamCount {
|
|||
|
||||
/// Represents lifetimes and type parameters attached to a declaration
|
||||
/// of a function, enum, trait, etc.
|
||||
#[derive(Clone, PartialEq, Eq, RustcEncodable, RustcDecodable, Hash, Debug)]
|
||||
#[derive(Clone, RustcEncodable, RustcDecodable, Debug)]
|
||||
pub struct Generics {
|
||||
pub params: HirVec<GenericParam>,
|
||||
pub where_clause: WhereClause,
|
||||
|
@ -574,7 +574,7 @@ pub enum SyntheticTyParamKind {
|
|||
}
|
||||
|
||||
/// A `where` clause in a definition
|
||||
#[derive(Clone, PartialEq, Eq, RustcEncodable, RustcDecodable, Hash, Debug)]
|
||||
#[derive(Clone, RustcEncodable, RustcDecodable, Debug)]
|
||||
pub struct WhereClause {
|
||||
pub id: NodeId,
|
||||
pub predicates: HirVec<WherePredicate>,
|
||||
|
@ -593,7 +593,7 @@ impl WhereClause {
|
|||
}
|
||||
|
||||
/// A single predicate in a `where` clause
|
||||
#[derive(Clone, PartialEq, Eq, RustcEncodable, RustcDecodable, Hash, Debug)]
|
||||
#[derive(Clone, RustcEncodable, RustcDecodable, Debug)]
|
||||
pub enum WherePredicate {
|
||||
/// A type binding, eg `for<'c> Foo: Send+Clone+'c`
|
||||
BoundPredicate(WhereBoundPredicate),
|
||||
|
@ -614,7 +614,7 @@ impl WherePredicate {
|
|||
}
|
||||
|
||||
/// A type bound, eg `for<'c> Foo: Send+Clone+'c`
|
||||
#[derive(Clone, PartialEq, Eq, RustcEncodable, RustcDecodable, Hash, Debug)]
|
||||
#[derive(Clone, RustcEncodable, RustcDecodable, Debug)]
|
||||
pub struct WhereBoundPredicate {
|
||||
pub span: Span,
|
||||
/// Any generics from a `for` binding
|
||||
|
@ -626,7 +626,7 @@ pub struct WhereBoundPredicate {
|
|||
}
|
||||
|
||||
/// A lifetime predicate, e.g. `'a: 'b+'c`
|
||||
#[derive(Clone, PartialEq, Eq, RustcEncodable, RustcDecodable, Hash, Debug)]
|
||||
#[derive(Clone, RustcEncodable, RustcDecodable, Debug)]
|
||||
pub struct WhereRegionPredicate {
|
||||
pub span: Span,
|
||||
pub lifetime: Lifetime,
|
||||
|
@ -634,7 +634,7 @@ pub struct WhereRegionPredicate {
|
|||
}
|
||||
|
||||
/// An equality predicate (unsupported), e.g. `T=int`
|
||||
#[derive(Clone, PartialEq, Eq, RustcEncodable, RustcDecodable, Hash, Debug)]
|
||||
#[derive(Clone, RustcEncodable, RustcDecodable, Debug)]
|
||||
pub struct WhereEqPredicate {
|
||||
pub id: NodeId,
|
||||
pub span: Span,
|
||||
|
@ -650,7 +650,7 @@ pub type CrateConfig = HirVec<P<MetaItem>>;
|
|||
/// For more details, see the [rustc guide].
|
||||
///
|
||||
/// [rustc guide]: https://rust-lang-nursery.github.io/rustc-guide/hir.html
|
||||
#[derive(Clone, PartialEq, Eq, RustcEncodable, RustcDecodable, Debug)]
|
||||
#[derive(Clone, RustcEncodable, RustcDecodable, Debug)]
|
||||
pub struct Crate {
|
||||
pub module: Mod,
|
||||
pub attrs: HirVec<Attribute>,
|
||||
|
@ -748,7 +748,7 @@ impl Crate {
|
|||
/// A macro definition, in this crate or imported from another.
|
||||
///
|
||||
/// Not parsed directly, but created on macro import or `macro_rules!` expansion.
|
||||
#[derive(Clone, PartialEq, Eq, RustcEncodable, RustcDecodable, Hash, Debug)]
|
||||
#[derive(Clone, RustcEncodable, RustcDecodable, Debug)]
|
||||
pub struct MacroDef {
|
||||
pub name: Name,
|
||||
pub vis: Visibility,
|
||||
|
@ -759,7 +759,7 @@ pub struct MacroDef {
|
|||
pub legacy: bool,
|
||||
}
|
||||
|
||||
#[derive(Clone, PartialEq, Eq, RustcEncodable, RustcDecodable, Hash, Debug)]
|
||||
#[derive(Clone, RustcEncodable, RustcDecodable, Debug)]
|
||||
pub struct Block {
|
||||
/// Statements in a block
|
||||
pub stmts: HirVec<Stmt>,
|
||||
|
@ -782,7 +782,7 @@ pub struct Block {
|
|||
pub recovered: bool,
|
||||
}
|
||||
|
||||
#[derive(Clone, PartialEq, Eq, RustcEncodable, RustcDecodable, Hash)]
|
||||
#[derive(Clone, RustcEncodable, RustcDecodable)]
|
||||
pub struct Pat {
|
||||
pub id: NodeId,
|
||||
pub hir_id: HirId,
|
||||
|
@ -844,7 +844,7 @@ impl Pat {
|
|||
/// Patterns like the fields of Foo `{ x, ref y, ref mut z }`
|
||||
/// are treated the same as` x: x, y: ref y, z: ref mut z`,
|
||||
/// except is_shorthand is true
|
||||
#[derive(Clone, PartialEq, Eq, RustcEncodable, RustcDecodable, Hash, Debug)]
|
||||
#[derive(Clone, RustcEncodable, RustcDecodable, Debug)]
|
||||
pub struct FieldPat {
|
||||
pub id: NodeId,
|
||||
/// The identifier for the field
|
||||
|
@ -857,7 +857,7 @@ pub struct FieldPat {
|
|||
/// Explicit binding annotations given in the HIR for a binding. Note
|
||||
/// that this is not the final binding *mode* that we infer after type
|
||||
/// inference.
|
||||
#[derive(Clone, PartialEq, Eq, RustcEncodable, RustcDecodable, Hash, Debug, Copy)]
|
||||
#[derive(Clone, PartialEq, RustcEncodable, RustcDecodable, Debug, Copy)]
|
||||
pub enum BindingAnnotation {
|
||||
/// No binding annotation given: this means that the final binding mode
|
||||
/// will depend on whether we have skipped through a `&` reference
|
||||
|
@ -878,13 +878,13 @@ pub enum BindingAnnotation {
|
|||
RefMut,
|
||||
}
|
||||
|
||||
#[derive(Copy, Clone, PartialEq, Eq, RustcEncodable, RustcDecodable, Hash, Debug)]
|
||||
#[derive(Copy, Clone, PartialEq, RustcEncodable, RustcDecodable, Debug)]
|
||||
pub enum RangeEnd {
|
||||
Included,
|
||||
Excluded,
|
||||
}
|
||||
|
||||
#[derive(Clone, PartialEq, Eq, RustcEncodable, RustcDecodable, Hash, Debug)]
|
||||
#[derive(Clone, RustcEncodable, RustcDecodable, Debug)]
|
||||
pub enum PatKind {
|
||||
/// Represents a wildcard pattern (`_`)
|
||||
Wild,
|
||||
|
@ -940,7 +940,7 @@ impl Mutability {
|
|||
}
|
||||
}
|
||||
|
||||
#[derive(Clone, PartialEq, Eq, RustcEncodable, RustcDecodable, Hash, Debug, Copy)]
|
||||
#[derive(Clone, PartialEq, RustcEncodable, RustcDecodable, Debug, Copy)]
|
||||
pub enum BinOp_ {
|
||||
/// The `+` operator (addition)
|
||||
BiAdd,
|
||||
|
@ -1069,7 +1069,7 @@ impl Into<ast::BinOpKind> for BinOp_ {
|
|||
|
||||
pub type BinOp = Spanned<BinOp_>;
|
||||
|
||||
#[derive(Clone, PartialEq, Eq, RustcEncodable, RustcDecodable, Hash, Debug, Copy)]
|
||||
#[derive(Clone, PartialEq, RustcEncodable, RustcDecodable, Debug, Copy)]
|
||||
pub enum UnOp {
|
||||
/// The `*` operator for dereferencing
|
||||
UnDeref,
|
||||
|
@ -1111,7 +1111,7 @@ impl fmt::Debug for Stmt_ {
|
|||
}
|
||||
}
|
||||
|
||||
#[derive(Clone, PartialEq, Eq, RustcEncodable, RustcDecodable, Hash)]
|
||||
#[derive(Clone, RustcEncodable, RustcDecodable)]
|
||||
pub enum Stmt_ {
|
||||
/// Could be an item or a local (let) binding:
|
||||
StmtDecl(P<Decl>, NodeId),
|
||||
|
@ -1142,7 +1142,7 @@ impl Stmt_ {
|
|||
}
|
||||
|
||||
/// Local represents a `let` statement, e.g., `let <pat>:<ty> = <expr>;`
|
||||
#[derive(Clone, PartialEq, Eq, RustcEncodable, RustcDecodable, Hash, Debug)]
|
||||
#[derive(Clone, RustcEncodable, RustcDecodable, Debug)]
|
||||
pub struct Local {
|
||||
pub pat: P<Pat>,
|
||||
pub ty: Option<P<Ty>>,
|
||||
|
@ -1157,7 +1157,7 @@ pub struct Local {
|
|||
|
||||
pub type Decl = Spanned<Decl_>;
|
||||
|
||||
#[derive(Clone, PartialEq, Eq, RustcEncodable, RustcDecodable, Hash, Debug)]
|
||||
#[derive(Clone, RustcEncodable, RustcDecodable, Debug)]
|
||||
pub enum Decl_ {
|
||||
/// A local (let) binding:
|
||||
DeclLocal(P<Local>),
|
||||
|
@ -1182,7 +1182,7 @@ impl Decl_ {
|
|||
}
|
||||
|
||||
/// represents one arm of a 'match'
|
||||
#[derive(Clone, PartialEq, Eq, RustcEncodable, RustcDecodable, Hash, Debug)]
|
||||
#[derive(Clone, RustcEncodable, RustcDecodable, Debug)]
|
||||
pub struct Arm {
|
||||
pub attrs: HirVec<Attribute>,
|
||||
pub pats: HirVec<P<Pat>>,
|
||||
|
@ -1190,7 +1190,7 @@ pub struct Arm {
|
|||
pub body: P<Expr>,
|
||||
}
|
||||
|
||||
#[derive(Clone, PartialEq, Eq, RustcEncodable, RustcDecodable, Hash, Debug)]
|
||||
#[derive(Clone, RustcEncodable, RustcDecodable, Debug)]
|
||||
pub struct Field {
|
||||
pub id: NodeId,
|
||||
pub ident: Ident,
|
||||
|
@ -1199,7 +1199,7 @@ pub struct Field {
|
|||
pub is_shorthand: bool,
|
||||
}
|
||||
|
||||
#[derive(Clone, PartialEq, Eq, RustcEncodable, RustcDecodable, Hash, Debug, Copy)]
|
||||
#[derive(Clone, PartialEq, RustcEncodable, RustcDecodable, Debug, Copy)]
|
||||
pub enum BlockCheckMode {
|
||||
DefaultBlock,
|
||||
UnsafeBlock(UnsafeSource),
|
||||
|
@ -1207,7 +1207,7 @@ pub enum BlockCheckMode {
|
|||
PopUnsafeBlock(UnsafeSource),
|
||||
}
|
||||
|
||||
#[derive(Clone, PartialEq, Eq, RustcEncodable, RustcDecodable, Hash, Debug, Copy)]
|
||||
#[derive(Clone, PartialEq, RustcEncodable, RustcDecodable, Debug, Copy)]
|
||||
pub enum UnsafeSource {
|
||||
CompilerGenerated,
|
||||
UserProvided,
|
||||
|
@ -1239,7 +1239,7 @@ pub struct BodyId {
|
|||
///
|
||||
/// All bodies have an **owner**, which can be accessed via the HIR
|
||||
/// map using `body_owner_def_id()`.
|
||||
#[derive(Clone, PartialEq, Eq, RustcEncodable, RustcDecodable, Hash, Debug)]
|
||||
#[derive(Clone, RustcEncodable, RustcDecodable, Debug)]
|
||||
pub struct Body {
|
||||
pub arguments: HirVec<Arg>,
|
||||
pub value: Expr,
|
||||
|
@ -1271,7 +1271,7 @@ pub enum BodyOwnerKind {
|
|||
/// These are usually found nested inside types (e.g. array lengths)
|
||||
/// or expressions (e.g. repeat counts), and also used to define
|
||||
/// explicit discriminant values for enum variants.
|
||||
#[derive(Clone, PartialEq, Eq, RustcEncodable, RustcDecodable, Hash, Debug)]
|
||||
#[derive(Clone, PartialEq, Eq, RustcEncodable, RustcDecodable, Debug)]
|
||||
pub struct AnonConst {
|
||||
pub id: NodeId,
|
||||
pub hir_id: HirId,
|
||||
|
@ -1279,7 +1279,7 @@ pub struct AnonConst {
|
|||
}
|
||||
|
||||
/// An expression
|
||||
#[derive(Clone, PartialEq, Eq, RustcEncodable, RustcDecodable, Hash)]
|
||||
#[derive(Clone, RustcEncodable, RustcDecodable)]
|
||||
pub struct Expr {
|
||||
pub id: NodeId,
|
||||
pub span: Span,
|
||||
|
@ -1330,7 +1330,7 @@ impl fmt::Debug for Expr {
|
|||
}
|
||||
}
|
||||
|
||||
#[derive(Clone, PartialEq, Eq, RustcEncodable, RustcDecodable, Hash, Debug)]
|
||||
#[derive(Clone, RustcEncodable, RustcDecodable, Debug)]
|
||||
pub enum Expr_ {
|
||||
/// A `box x` expression.
|
||||
ExprBox(P<Expr>),
|
||||
|
@ -1432,7 +1432,7 @@ pub enum Expr_ {
|
|||
}
|
||||
|
||||
/// Optionally `Self`-qualified value/type path or associated extension.
|
||||
#[derive(Clone, PartialEq, Eq, RustcEncodable, RustcDecodable, Hash, Debug)]
|
||||
#[derive(Clone, RustcEncodable, RustcDecodable, Debug)]
|
||||
pub enum QPath {
|
||||
/// Path to a definition, optionally "fully-qualified" with a `Self`
|
||||
/// type, if the path points to an associated item in a trait.
|
||||
|
@ -1452,7 +1452,7 @@ pub enum QPath {
|
|||
}
|
||||
|
||||
/// Hints at the original code for a let statement
|
||||
#[derive(Clone, PartialEq, Eq, RustcEncodable, RustcDecodable, Hash, Debug, Copy)]
|
||||
#[derive(Clone, RustcEncodable, RustcDecodable, Debug, Copy)]
|
||||
pub enum LocalSource {
|
||||
/// A `match _ { .. }`
|
||||
Normal,
|
||||
|
@ -1479,7 +1479,7 @@ pub enum MatchSource {
|
|||
}
|
||||
|
||||
/// The loop type that yielded an ExprLoop
|
||||
#[derive(Clone, PartialEq, Eq, RustcEncodable, RustcDecodable, Hash, Debug, Copy)]
|
||||
#[derive(Clone, PartialEq, RustcEncodable, RustcDecodable, Debug, Copy)]
|
||||
pub enum LoopSource {
|
||||
/// A `loop { .. }` loop
|
||||
Loop,
|
||||
|
@ -1489,7 +1489,7 @@ pub enum LoopSource {
|
|||
ForLoop,
|
||||
}
|
||||
|
||||
#[derive(Clone, PartialEq, Eq, RustcEncodable, RustcDecodable, Hash, Debug, Copy)]
|
||||
#[derive(Clone, RustcEncodable, RustcDecodable, Debug, Copy)]
|
||||
pub enum LoopIdError {
|
||||
OutsideLoopScope,
|
||||
UnlabeledCfInWhileCondition,
|
||||
|
@ -1507,7 +1507,7 @@ impl fmt::Display for LoopIdError {
|
|||
}
|
||||
}
|
||||
|
||||
#[derive(Clone, PartialEq, Eq, RustcEncodable, RustcDecodable, Hash, Debug, Copy)]
|
||||
#[derive(Clone, RustcEncodable, RustcDecodable, Debug, Copy)]
|
||||
pub struct Destination {
|
||||
// This is `Some(_)` iff there is an explicit user-specified `label
|
||||
pub label: Option<Label>,
|
||||
|
@ -1523,7 +1523,7 @@ pub enum GeneratorMovability {
|
|||
Movable,
|
||||
}
|
||||
|
||||
#[derive(Clone, PartialEq, Eq, RustcEncodable, RustcDecodable, Hash, Debug, Copy)]
|
||||
#[derive(Clone, RustcEncodable, RustcDecodable, Debug, Copy)]
|
||||
pub enum CaptureClause {
|
||||
CaptureByValue,
|
||||
CaptureByRef,
|
||||
|
@ -1531,14 +1531,14 @@ pub enum CaptureClause {
|
|||
|
||||
// NB: If you change this, you'll probably want to change the corresponding
|
||||
// type structure in middle/ty.rs as well.
|
||||
#[derive(Clone, PartialEq, Eq, RustcEncodable, RustcDecodable, Hash, Debug)]
|
||||
#[derive(Clone, RustcEncodable, RustcDecodable, Debug)]
|
||||
pub struct MutTy {
|
||||
pub ty: P<Ty>,
|
||||
pub mutbl: Mutability,
|
||||
}
|
||||
|
||||
/// Represents a method's signature in a trait declaration or implementation.
|
||||
#[derive(Clone, PartialEq, Eq, RustcEncodable, RustcDecodable, Hash, Debug)]
|
||||
#[derive(Clone, RustcEncodable, RustcDecodable, Debug)]
|
||||
pub struct MethodSig {
|
||||
pub header: FnHeader,
|
||||
pub decl: P<FnDecl>,
|
||||
|
@ -1547,7 +1547,7 @@ pub struct MethodSig {
|
|||
// The bodies for items are stored "out of line", in a separate
|
||||
// hashmap in the `Crate`. Here we just record the node-id of the item
|
||||
// so it can fetched later.
|
||||
#[derive(Copy, Clone, PartialEq, Eq, PartialOrd, Ord, RustcEncodable, RustcDecodable, Hash, Debug)]
|
||||
#[derive(Copy, Clone, PartialEq, Eq, PartialOrd, Ord, RustcEncodable, RustcDecodable, Debug)]
|
||||
pub struct TraitItemId {
|
||||
pub node_id: NodeId,
|
||||
}
|
||||
|
@ -1556,7 +1556,7 @@ pub struct TraitItemId {
|
|||
/// possibly including a default implementation. A trait item is
|
||||
/// either required (meaning it doesn't have an implementation, just a
|
||||
/// signature) or provided (meaning it has a default implementation).
|
||||
#[derive(Clone, PartialEq, Eq, RustcEncodable, RustcDecodable, Hash, Debug)]
|
||||
#[derive(Clone, RustcEncodable, RustcDecodable, Debug)]
|
||||
pub struct TraitItem {
|
||||
pub id: NodeId,
|
||||
pub ident: Ident,
|
||||
|
@ -1568,7 +1568,7 @@ pub struct TraitItem {
|
|||
}
|
||||
|
||||
/// A trait method's body (or just argument names).
|
||||
#[derive(Clone, PartialEq, Eq, RustcEncodable, RustcDecodable, Hash, Debug)]
|
||||
#[derive(Clone, RustcEncodable, RustcDecodable, Debug)]
|
||||
pub enum TraitMethod {
|
||||
/// No default body in the trait, just a signature.
|
||||
Required(HirVec<Ident>),
|
||||
|
@ -1578,7 +1578,7 @@ pub enum TraitMethod {
|
|||
}
|
||||
|
||||
/// Represents a trait method or associated constant or type
|
||||
#[derive(Clone, PartialEq, Eq, RustcEncodable, RustcDecodable, Hash, Debug)]
|
||||
#[derive(Clone, RustcEncodable, RustcDecodable, Debug)]
|
||||
pub enum TraitItemKind {
|
||||
/// An associated constant with an optional value (otherwise `impl`s
|
||||
/// must contain a value)
|
||||
|
@ -1593,13 +1593,13 @@ pub enum TraitItemKind {
|
|||
// The bodies for items are stored "out of line", in a separate
|
||||
// hashmap in the `Crate`. Here we just record the node-id of the item
|
||||
// so it can fetched later.
|
||||
#[derive(Copy, Clone, PartialEq, Eq, PartialOrd, Ord, RustcEncodable, RustcDecodable, Hash, Debug)]
|
||||
#[derive(Copy, Clone, PartialEq, Eq, PartialOrd, Ord, RustcEncodable, RustcDecodable, Debug)]
|
||||
pub struct ImplItemId {
|
||||
pub node_id: NodeId,
|
||||
}
|
||||
|
||||
/// Represents anything within an `impl` block
|
||||
#[derive(Clone, PartialEq, Eq, RustcEncodable, RustcDecodable, Hash, Debug)]
|
||||
#[derive(Clone, RustcEncodable, RustcDecodable, Debug)]
|
||||
pub struct ImplItem {
|
||||
pub id: NodeId,
|
||||
pub ident: Ident,
|
||||
|
@ -1613,7 +1613,7 @@ pub struct ImplItem {
|
|||
}
|
||||
|
||||
/// Represents different contents within `impl`s
|
||||
#[derive(Clone, PartialEq, Eq, RustcEncodable, RustcDecodable, Hash, Debug)]
|
||||
#[derive(Clone, RustcEncodable, RustcDecodable, Debug)]
|
||||
pub enum ImplItemKind {
|
||||
/// An associated constant of the given type, set to the constant result
|
||||
/// of the expression
|
||||
|
@ -1625,7 +1625,7 @@ pub enum ImplItemKind {
|
|||
}
|
||||
|
||||
// Bind a type to an associated type: `A=Foo`.
|
||||
#[derive(Clone, PartialEq, Eq, RustcEncodable, RustcDecodable, Hash, Debug)]
|
||||
#[derive(Clone, RustcEncodable, RustcDecodable, Debug)]
|
||||
pub struct TypeBinding {
|
||||
pub id: NodeId,
|
||||
pub ident: Ident,
|
||||
|
@ -1634,7 +1634,7 @@ pub struct TypeBinding {
|
|||
}
|
||||
|
||||
|
||||
#[derive(Clone, PartialEq, Eq, RustcEncodable, RustcDecodable, Hash)]
|
||||
#[derive(Clone, RustcEncodable, RustcDecodable)]
|
||||
pub struct Ty {
|
||||
pub id: NodeId,
|
||||
pub node: Ty_,
|
||||
|
@ -1660,7 +1660,7 @@ pub enum PrimTy {
|
|||
TyChar,
|
||||
}
|
||||
|
||||
#[derive(Clone, PartialEq, Eq, RustcEncodable, RustcDecodable, Hash, Debug)]
|
||||
#[derive(Clone, RustcEncodable, RustcDecodable, Debug)]
|
||||
pub struct BareFnTy {
|
||||
pub unsafety: Unsafety,
|
||||
pub abi: Abi,
|
||||
|
@ -1669,14 +1669,14 @@ pub struct BareFnTy {
|
|||
pub arg_names: HirVec<Ident>,
|
||||
}
|
||||
|
||||
#[derive(Clone, PartialEq, Eq, RustcEncodable, RustcDecodable, Hash, Debug)]
|
||||
#[derive(Clone, RustcEncodable, RustcDecodable, Debug)]
|
||||
pub struct ExistTy {
|
||||
pub generics: Generics,
|
||||
pub bounds: GenericBounds,
|
||||
pub impl_trait_fn: Option<DefId>,
|
||||
}
|
||||
|
||||
#[derive(Clone, PartialEq, Eq, RustcEncodable, RustcDecodable, Hash, Debug)]
|
||||
#[derive(Clone, RustcEncodable, RustcDecodable, Debug)]
|
||||
/// The different kinds of types recognized by the compiler
|
||||
pub enum Ty_ {
|
||||
/// A variable length slice (`[T]`)
|
||||
|
@ -1710,14 +1710,14 @@ pub enum Ty_ {
|
|||
TyErr,
|
||||
}
|
||||
|
||||
#[derive(Clone, PartialEq, Eq, RustcEncodable, RustcDecodable, Hash, Debug)]
|
||||
#[derive(Clone, RustcEncodable, RustcDecodable, Debug)]
|
||||
pub struct InlineAsmOutput {
|
||||
pub constraint: Symbol,
|
||||
pub is_rw: bool,
|
||||
pub is_indirect: bool,
|
||||
}
|
||||
|
||||
#[derive(Clone, PartialEq, Eq, RustcEncodable, RustcDecodable, Hash, Debug)]
|
||||
#[derive(Clone, RustcEncodable, RustcDecodable, Debug)]
|
||||
pub struct InlineAsm {
|
||||
pub asm: Symbol,
|
||||
pub asm_str_style: StrStyle,
|
||||
|
@ -1731,7 +1731,7 @@ pub struct InlineAsm {
|
|||
}
|
||||
|
||||
/// represents an argument in a function header
|
||||
#[derive(Clone, PartialEq, Eq, RustcEncodable, RustcDecodable, Hash, Debug)]
|
||||
#[derive(Clone, RustcEncodable, RustcDecodable, Debug)]
|
||||
pub struct Arg {
|
||||
pub pat: P<Pat>,
|
||||
pub id: NodeId,
|
||||
|
@ -1739,7 +1739,7 @@ pub struct Arg {
|
|||
}
|
||||
|
||||
/// Represents the header (not the body) of a function declaration
|
||||
#[derive(Clone, PartialEq, Eq, RustcEncodable, RustcDecodable, Hash, Debug)]
|
||||
#[derive(Clone, RustcEncodable, RustcDecodable, Debug)]
|
||||
pub struct FnDecl {
|
||||
pub inputs: HirVec<Ty>,
|
||||
pub output: FunctionRetTy,
|
||||
|
@ -1750,13 +1750,13 @@ pub struct FnDecl {
|
|||
}
|
||||
|
||||
/// Is the trait definition an auto trait?
|
||||
#[derive(Copy, Clone, PartialEq, Eq, RustcEncodable, RustcDecodable, Hash, Debug)]
|
||||
#[derive(Copy, Clone, PartialEq, RustcEncodable, RustcDecodable, Debug)]
|
||||
pub enum IsAuto {
|
||||
Yes,
|
||||
No
|
||||
}
|
||||
|
||||
#[derive(Copy, Clone, PartialEq, Eq, PartialOrd, Ord, RustcEncodable, RustcDecodable, Hash, Debug)]
|
||||
#[derive(Copy, Clone, PartialEq, Eq, PartialOrd, Ord, RustcEncodable, RustcDecodable, Debug)]
|
||||
pub enum IsAsync {
|
||||
Async,
|
||||
NotAsync,
|
||||
|
@ -1768,13 +1768,13 @@ pub enum Unsafety {
|
|||
Normal,
|
||||
}
|
||||
|
||||
#[derive(Copy, Clone, PartialEq, Eq, RustcEncodable, RustcDecodable, Hash, Debug)]
|
||||
#[derive(Copy, Clone, PartialEq, RustcEncodable, RustcDecodable, Debug)]
|
||||
pub enum Constness {
|
||||
Const,
|
||||
NotConst,
|
||||
}
|
||||
|
||||
#[derive(Copy, Clone, PartialEq, Eq, RustcEncodable, RustcDecodable, Hash, Debug)]
|
||||
#[derive(Copy, Clone, PartialEq, RustcEncodable, RustcDecodable, Debug)]
|
||||
pub enum Defaultness {
|
||||
Default { has_value: bool },
|
||||
Final,
|
||||
|
@ -1810,7 +1810,7 @@ impl fmt::Display for Unsafety {
|
|||
}
|
||||
}
|
||||
|
||||
#[derive(Copy, Clone, PartialEq, Eq, RustcEncodable, RustcDecodable, Hash)]
|
||||
#[derive(Copy, Clone, PartialEq, RustcEncodable, RustcDecodable)]
|
||||
pub enum ImplPolarity {
|
||||
/// `impl Trait for Type`
|
||||
Positive,
|
||||
|
@ -1828,7 +1828,7 @@ impl fmt::Debug for ImplPolarity {
|
|||
}
|
||||
|
||||
|
||||
#[derive(Clone, PartialEq, Eq, RustcEncodable, RustcDecodable, Hash, Debug)]
|
||||
#[derive(Clone, RustcEncodable, RustcDecodable, Debug)]
|
||||
pub enum FunctionRetTy {
|
||||
/// Return type is not specified.
|
||||
///
|
||||
|
@ -1849,7 +1849,7 @@ impl FunctionRetTy {
|
|||
}
|
||||
}
|
||||
|
||||
#[derive(Clone, PartialEq, Eq, RustcEncodable, RustcDecodable, Hash, Debug)]
|
||||
#[derive(Clone, RustcEncodable, RustcDecodable, Debug)]
|
||||
pub struct Mod {
|
||||
/// A span from the first token past `{` to the last token until `}`.
|
||||
/// For `mod foo;`, the inner span ranges from the first token
|
||||
|
@ -1858,24 +1858,24 @@ pub struct Mod {
|
|||
pub item_ids: HirVec<ItemId>,
|
||||
}
|
||||
|
||||
#[derive(Clone, PartialEq, Eq, RustcEncodable, RustcDecodable, Hash, Debug)]
|
||||
#[derive(Clone, RustcEncodable, RustcDecodable, Debug)]
|
||||
pub struct ForeignMod {
|
||||
pub abi: Abi,
|
||||
pub items: HirVec<ForeignItem>,
|
||||
}
|
||||
|
||||
#[derive(Clone, PartialEq, Eq, RustcEncodable, RustcDecodable, Hash, Debug)]
|
||||
#[derive(Clone, RustcEncodable, RustcDecodable, Debug)]
|
||||
pub struct GlobalAsm {
|
||||
pub asm: Symbol,
|
||||
pub ctxt: SyntaxContext,
|
||||
}
|
||||
|
||||
#[derive(Clone, PartialEq, Eq, RustcEncodable, RustcDecodable, Hash, Debug)]
|
||||
#[derive(Clone, RustcEncodable, RustcDecodable, Debug)]
|
||||
pub struct EnumDef {
|
||||
pub variants: HirVec<Variant>,
|
||||
}
|
||||
|
||||
#[derive(Clone, PartialEq, Eq, RustcEncodable, RustcDecodable, Hash, Debug)]
|
||||
#[derive(Clone, RustcEncodable, RustcDecodable, Debug)]
|
||||
pub struct Variant_ {
|
||||
pub name: Name,
|
||||
pub attrs: HirVec<Attribute>,
|
||||
|
@ -1886,7 +1886,7 @@ pub struct Variant_ {
|
|||
|
||||
pub type Variant = Spanned<Variant_>;
|
||||
|
||||
#[derive(Copy, Clone, PartialEq, Eq, RustcEncodable, RustcDecodable, Hash, Debug)]
|
||||
#[derive(Copy, Clone, PartialEq, RustcEncodable, RustcDecodable, Debug)]
|
||||
pub enum UseKind {
|
||||
/// One import, e.g. `use foo::bar` or `use foo::bar as baz`.
|
||||
/// Also produced for each element of a list `use`, e.g.
|
||||
|
@ -1908,13 +1908,13 @@ pub enum UseKind {
|
|||
/// that the ref_id is for. Note that ref_id's value is not the NodeId of the
|
||||
/// trait being referred to but just a unique NodeId that serves as a key
|
||||
/// within the DefMap.
|
||||
#[derive(Clone, PartialEq, Eq, RustcEncodable, RustcDecodable, Hash, Debug)]
|
||||
#[derive(Clone, RustcEncodable, RustcDecodable, Debug)]
|
||||
pub struct TraitRef {
|
||||
pub path: Path,
|
||||
pub ref_id: NodeId,
|
||||
}
|
||||
|
||||
#[derive(Clone, PartialEq, Eq, RustcEncodable, RustcDecodable, Hash, Debug)]
|
||||
#[derive(Clone, RustcEncodable, RustcDecodable, Debug)]
|
||||
pub struct PolyTraitRef {
|
||||
/// The `'a` in `<'a> Foo<&'a T>`
|
||||
pub bound_generic_params: HirVec<GenericParam>,
|
||||
|
@ -1927,7 +1927,7 @@ pub struct PolyTraitRef {
|
|||
|
||||
pub type Visibility = Spanned<VisibilityKind>;
|
||||
|
||||
#[derive(Clone, PartialEq, Eq, RustcEncodable, RustcDecodable, Hash, Debug)]
|
||||
#[derive(Clone, RustcEncodable, RustcDecodable, Debug)]
|
||||
pub enum VisibilityKind {
|
||||
Public,
|
||||
Crate(CrateSugar),
|
||||
|
@ -1953,7 +1953,7 @@ impl VisibilityKind {
|
|||
}
|
||||
}
|
||||
|
||||
#[derive(Clone, PartialEq, Eq, RustcEncodable, RustcDecodable, Hash, Debug)]
|
||||
#[derive(Clone, RustcEncodable, RustcDecodable, Debug)]
|
||||
pub struct StructField {
|
||||
pub span: Span,
|
||||
pub ident: Ident,
|
||||
|
@ -1982,7 +1982,7 @@ impl StructField {
|
|||
/// used for `Struct`-structs (but still presents). Structures don't have an analogue of "Id of
|
||||
/// the variant itself" from enum variants.
|
||||
/// Id of the whole struct lives in `Item`.
|
||||
#[derive(Clone, PartialEq, Eq, RustcEncodable, RustcDecodable, Hash, Debug)]
|
||||
#[derive(Clone, RustcEncodable, RustcDecodable, Debug)]
|
||||
pub enum VariantData {
|
||||
Struct(HirVec<StructField>, NodeId),
|
||||
Tuple(HirVec<StructField>, NodeId),
|
||||
|
@ -2027,7 +2027,7 @@ impl VariantData {
|
|||
// The bodies for items are stored "out of line", in a separate
|
||||
// hashmap in the `Crate`. Here we just record the node-id of the item
|
||||
// so it can fetched later.
|
||||
#[derive(Copy, Clone, PartialEq, Eq, RustcEncodable, RustcDecodable, Hash, Debug)]
|
||||
#[derive(Copy, Clone, RustcEncodable, RustcDecodable, Debug)]
|
||||
pub struct ItemId {
|
||||
pub id: NodeId,
|
||||
}
|
||||
|
@ -2035,7 +2035,7 @@ pub struct ItemId {
|
|||
/// An item
|
||||
///
|
||||
/// The name might be a dummy name in case of anonymous items
|
||||
#[derive(Clone, PartialEq, Eq, RustcEncodable, RustcDecodable, Hash, Debug)]
|
||||
#[derive(Clone, RustcEncodable, RustcDecodable, Debug)]
|
||||
pub struct Item {
|
||||
pub name: Name,
|
||||
pub id: NodeId,
|
||||
|
@ -2046,7 +2046,7 @@ pub struct Item {
|
|||
pub span: Span,
|
||||
}
|
||||
|
||||
#[derive(Clone, Copy, PartialEq, Eq, RustcEncodable, RustcDecodable, Hash, Debug)]
|
||||
#[derive(Clone, Copy, RustcEncodable, RustcDecodable, Debug)]
|
||||
pub struct FnHeader {
|
||||
pub unsafety: Unsafety,
|
||||
pub constness: Constness,
|
||||
|
@ -2054,7 +2054,7 @@ pub struct FnHeader {
|
|||
pub abi: Abi,
|
||||
}
|
||||
|
||||
#[derive(Clone, PartialEq, Eq, RustcEncodable, RustcDecodable, Hash, Debug)]
|
||||
#[derive(Clone, RustcEncodable, RustcDecodable, Debug)]
|
||||
pub enum Item_ {
|
||||
/// An `extern crate` item, with optional *original* crate name if the crate was renamed.
|
||||
///
|
||||
|
@ -2156,7 +2156,7 @@ impl Item_ {
|
|||
/// type or method, and whether it is public). This allows other
|
||||
/// passes to find the impl they want without loading the id (which
|
||||
/// means fewer edges in the incremental compilation graph).
|
||||
#[derive(Clone, PartialEq, Eq, RustcEncodable, RustcDecodable, Hash, Debug)]
|
||||
#[derive(Clone, RustcEncodable, RustcDecodable, Debug)]
|
||||
pub struct TraitItemRef {
|
||||
pub id: TraitItemId,
|
||||
pub ident: Ident,
|
||||
|
@ -2171,7 +2171,7 @@ pub struct TraitItemRef {
|
|||
/// type or method, and whether it is public). This allows other
|
||||
/// passes to find the impl they want without loading the id (which
|
||||
/// means fewer edges in the incremental compilation graph).
|
||||
#[derive(Clone, PartialEq, Eq, RustcEncodable, RustcDecodable, Hash, Debug)]
|
||||
#[derive(Clone, RustcEncodable, RustcDecodable, Debug)]
|
||||
pub struct ImplItemRef {
|
||||
pub id: ImplItemId,
|
||||
pub ident: Ident,
|
||||
|
@ -2181,14 +2181,14 @@ pub struct ImplItemRef {
|
|||
pub defaultness: Defaultness,
|
||||
}
|
||||
|
||||
#[derive(Copy, Clone, PartialEq, Eq, RustcEncodable, RustcDecodable, Hash, Debug)]
|
||||
#[derive(Copy, Clone, PartialEq, RustcEncodable, RustcDecodable, Debug)]
|
||||
pub enum AssociatedItemKind {
|
||||
Const,
|
||||
Method { has_self: bool },
|
||||
Type,
|
||||
}
|
||||
|
||||
#[derive(Clone, PartialEq, Eq, RustcEncodable, RustcDecodable, Hash, Debug)]
|
||||
#[derive(Clone, RustcEncodable, RustcDecodable, Debug)]
|
||||
pub struct ForeignItem {
|
||||
pub name: Name,
|
||||
pub attrs: HirVec<Attribute>,
|
||||
|
@ -2199,7 +2199,7 @@ pub struct ForeignItem {
|
|||
}
|
||||
|
||||
/// An item within an `extern` block
|
||||
#[derive(Clone, PartialEq, Eq, RustcEncodable, RustcDecodable, Hash, Debug)]
|
||||
#[derive(Clone, RustcEncodable, RustcDecodable, Debug)]
|
||||
pub enum ForeignItem_ {
|
||||
/// A foreign function
|
||||
ForeignItemFn(P<FnDecl>, HirVec<Ident>, Generics),
|
||||
|
@ -2261,7 +2261,7 @@ pub fn provide(providers: &mut Providers) {
|
|||
providers.describe_def = map::describe_def;
|
||||
}
|
||||
|
||||
#[derive(Clone, RustcEncodable, RustcDecodable, Hash)]
|
||||
#[derive(Clone, RustcEncodable, RustcDecodable)]
|
||||
pub struct CodegenFnAttrs {
|
||||
pub flags: CodegenFnAttrFlags,
|
||||
pub inline: InlineAttr,
|
||||
|
|
|
@ -1914,7 +1914,9 @@ impl<'a> State<'a> {
|
|||
if !before.is_empty() {
|
||||
self.word_space(",")?;
|
||||
}
|
||||
if p.node != PatKind::Wild {
|
||||
if let PatKind::Wild = p.node {
|
||||
// Print nothing
|
||||
} else {
|
||||
self.print_pat(&p)?;
|
||||
}
|
||||
self.s.word("..")?;
|
||||
|
@ -2033,7 +2035,9 @@ impl<'a> State<'a> {
|
|||
s.ann.nested(s, Nested::BodyArgPat(body_id, i))?;
|
||||
i += 1;
|
||||
|
||||
if ty.node != hir::TyInfer {
|
||||
if let hir::TyInfer = ty.node {
|
||||
// Print nothing
|
||||
} else {
|
||||
s.s.word(":")?;
|
||||
s.s.space()?;
|
||||
s.print_type(ty)?;
|
||||
|
|
|
@ -111,7 +111,7 @@ impl<'a, 'gcx, 'tcx> NiceRegionError<'a, 'gcx, 'tcx> {
|
|||
|
||||
let (span_1, span_2, main_label, span_label) = match (sup_is_ret_type, sub_is_ret_type) {
|
||||
(None, None) => {
|
||||
let (main_label_1, span_label_1) = if ty_sup == ty_sub {
|
||||
let (main_label_1, span_label_1) = if ty_sup.id == ty_sub.id {
|
||||
(
|
||||
format!("this type is declared with multiple lifetimes..."),
|
||||
format!(
|
||||
|
|
|
@ -125,7 +125,7 @@ pub enum NativeLibraryKind {
|
|||
NativeUnknown,
|
||||
}
|
||||
|
||||
#[derive(Clone, Hash, RustcEncodable, RustcDecodable)]
|
||||
#[derive(Clone, RustcEncodable, RustcDecodable)]
|
||||
pub struct NativeLibrary {
|
||||
pub kind: NativeLibraryKind,
|
||||
pub name: Symbol,
|
||||
|
|
|
@ -174,7 +174,7 @@ pub struct ImplHeader<'tcx> {
|
|||
pub predicates: Vec<Predicate<'tcx>>,
|
||||
}
|
||||
|
||||
#[derive(Copy, Clone, Debug, PartialEq, Eq)]
|
||||
#[derive(Copy, Clone, Debug, PartialEq)]
|
||||
pub struct AssociatedItem {
|
||||
pub def_id: DefId,
|
||||
pub ident: Ident,
|
||||
|
|
|
@ -397,7 +397,7 @@ impl<'a, 'tcx> LateLintPass<'a, 'tcx> for MissingDoc {
|
|||
hir::ItemUnion(..) => "a union",
|
||||
hir::ItemTrait(.., ref trait_item_refs) => {
|
||||
// Issue #11592, traits are always considered exported, even when private.
|
||||
if it.vis.node == hir::VisibilityKind::Inherited {
|
||||
if let hir::VisibilityKind::Inherited = it.vis.node {
|
||||
self.private_traits.insert(it.id);
|
||||
for trait_item_ref in trait_item_refs {
|
||||
self.private_traits.insert(trait_item_ref.id.node_id);
|
||||
|
@ -414,7 +414,7 @@ impl<'a, 'tcx> LateLintPass<'a, 'tcx> for MissingDoc {
|
|||
if let Some(node_id) = cx.tcx.hir.as_local_node_id(real_trait) {
|
||||
match cx.tcx.hir.find(node_id) {
|
||||
Some(hir_map::NodeItem(item)) => {
|
||||
if item.vis.node == hir::VisibilityKind::Inherited {
|
||||
if let hir::VisibilityKind::Inherited = item.vis.node {
|
||||
for impl_item_ref in impl_item_refs {
|
||||
self.private_traits.insert(impl_item_ref.id.node_id);
|
||||
}
|
||||
|
|
|
@ -60,19 +60,21 @@ impl<'a> AstValidator<'a> {
|
|||
}
|
||||
|
||||
fn invalid_visibility(&self, vis: &Visibility, note: Option<&str>) {
|
||||
if vis.node != VisibilityKind::Inherited {
|
||||
let mut err = struct_span_err!(self.session,
|
||||
vis.span,
|
||||
E0449,
|
||||
"unnecessary visibility qualifier");
|
||||
if vis.node == VisibilityKind::Public {
|
||||
err.span_label(vis.span, "`pub` not permitted here because it's implied");
|
||||
}
|
||||
if let Some(note) = note {
|
||||
err.note(note);
|
||||
}
|
||||
err.emit();
|
||||
if let VisibilityKind::Inherited = vis.node {
|
||||
return
|
||||
}
|
||||
|
||||
let mut err = struct_span_err!(self.session,
|
||||
vis.span,
|
||||
E0449,
|
||||
"unnecessary visibility qualifier");
|
||||
if vis.node.is_pub() {
|
||||
err.span_label(vis.span, "`pub` not permitted here because it's implied");
|
||||
}
|
||||
if let Some(note) = note {
|
||||
err.note(note);
|
||||
}
|
||||
err.emit();
|
||||
}
|
||||
|
||||
fn check_decl_no_pat<ReportFn: Fn(Span, bool)>(&self, decl: &FnDecl, report_err: ReportFn) {
|
||||
|
@ -268,7 +270,7 @@ impl<'a> Visitor<'a> for AstValidator<'a> {
|
|||
match item.node {
|
||||
ItemKind::Impl(unsafety, polarity, _, _, Some(..), ref ty, ref impl_items) => {
|
||||
self.invalid_visibility(&item.vis, None);
|
||||
if ty.node == TyKind::Err {
|
||||
if let TyKind::Err = ty.node {
|
||||
self.err_handler()
|
||||
.struct_span_err(item.span, "`impl Trait for .. {}` is an obsolete syntax")
|
||||
.help("use `auto trait Trait {}` instead").emit();
|
||||
|
|
|
@ -86,7 +86,7 @@ impl<'a, 'b> Visitor<'a> for UnusedImportCheckVisitor<'a, 'b> {
|
|||
// because this means that they were generated in some fashion by the
|
||||
// compiler and we don't need to consider them.
|
||||
if let ast::ItemKind::Use(..) = item.node {
|
||||
if item.vis.node == ast::VisibilityKind::Public || item.span.is_dummy() {
|
||||
if item.vis.node.is_pub() || item.span.is_dummy() {
|
||||
return;
|
||||
}
|
||||
}
|
||||
|
|
|
@ -456,7 +456,7 @@ enum AliasPossibility {
|
|||
Maybe,
|
||||
}
|
||||
|
||||
#[derive(Copy, Clone, PartialEq, Eq, Debug)]
|
||||
#[derive(Copy, Clone, Debug)]
|
||||
enum PathSource<'a> {
|
||||
// Type paths `Path`.
|
||||
Type,
|
||||
|
|
|
@ -65,14 +65,14 @@ macro_rules! down_cast_data {
|
|||
macro_rules! access_from {
|
||||
($save_ctxt:expr, $vis:expr, $id:expr) => {
|
||||
Access {
|
||||
public: $vis.node == ast::VisibilityKind::Public,
|
||||
public: $vis.node.is_pub(),
|
||||
reachable: $save_ctxt.analysis.access_levels.is_reachable($id),
|
||||
}
|
||||
};
|
||||
|
||||
($save_ctxt:expr, $item:expr) => {
|
||||
Access {
|
||||
public: $item.vis.node == ast::VisibilityKind::Public,
|
||||
public: $item.vis.node.is_pub(),
|
||||
reachable: $save_ctxt.analysis.access_levels.is_reachable($item.id),
|
||||
}
|
||||
};
|
||||
|
@ -523,7 +523,7 @@ impl<'l, 'tcx: 'l, 'll, O: DumpOutput + 'll> DumpVisitor<'l, 'tcx, 'll, O> {
|
|||
.iter()
|
||||
.enumerate()
|
||||
.filter_map(|(i, f)| {
|
||||
if include_priv_fields || f.vis.node == ast::VisibilityKind::Public {
|
||||
if include_priv_fields || f.vis.node.is_pub() {
|
||||
f.ident
|
||||
.map(|i| i.to_string())
|
||||
.or_else(|| Some(i.to_string()))
|
||||
|
|
|
@ -119,7 +119,7 @@ enum ProbeResult {
|
|||
Match,
|
||||
}
|
||||
|
||||
#[derive(Debug, PartialEq, Eq, Clone)]
|
||||
#[derive(Debug, PartialEq, Clone)]
|
||||
pub struct Pick<'tcx> {
|
||||
pub item: ty::AssociatedItem,
|
||||
pub kind: PickKind<'tcx>,
|
||||
|
|
|
@ -49,6 +49,7 @@ use rustc::lint as lint;
|
|||
|
||||
use std::collections::hash_map::Entry;
|
||||
use std::fmt;
|
||||
use std::hash::{Hash, Hasher};
|
||||
use std::default::Default;
|
||||
use std::{mem, slice, vec};
|
||||
use std::iter::{FromIterator, once};
|
||||
|
@ -754,7 +755,7 @@ impl<'a> FromIterator<&'a DocFragment> for String {
|
|||
}
|
||||
}
|
||||
|
||||
#[derive(Clone, RustcEncodable, RustcDecodable, PartialEq, Eq, Debug, Default, Hash)]
|
||||
#[derive(Clone, RustcEncodable, RustcDecodable, Debug, Default)]
|
||||
pub struct Attributes {
|
||||
pub doc_strings: Vec<DocFragment>,
|
||||
pub other_attrs: Vec<ast::Attribute>,
|
||||
|
@ -974,6 +975,30 @@ impl Attributes {
|
|||
}
|
||||
}
|
||||
|
||||
impl PartialEq for Attributes {
|
||||
fn eq(&self, rhs: &Self) -> bool {
|
||||
self.doc_strings == rhs.doc_strings &&
|
||||
self.cfg == rhs.cfg &&
|
||||
self.span == rhs.span &&
|
||||
self.links == rhs.links &&
|
||||
self.other_attrs.iter().map(|attr| attr.id).eq(rhs.other_attrs.iter().map(|attr| attr.id))
|
||||
}
|
||||
}
|
||||
|
||||
impl Eq for Attributes {}
|
||||
|
||||
impl Hash for Attributes {
|
||||
fn hash<H: Hasher>(&self, hasher: &mut H) {
|
||||
self.doc_strings.hash(hasher);
|
||||
self.cfg.hash(hasher);
|
||||
self.span.hash(hasher);
|
||||
self.links.hash(hasher);
|
||||
for attr in &self.other_attrs {
|
||||
attr.id.hash(hasher);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
impl AttributesExt for Attributes {
|
||||
fn lists<'a>(&'a self, name: &'a str) -> ListAttributesIter<'a> {
|
||||
self.other_attrs.lists(name)
|
||||
|
|
|
@ -67,7 +67,7 @@ impl<T:Decodable> Decodable for VecDeque<T> {
|
|||
|
||||
impl<
|
||||
K: Encodable + PartialEq + Ord,
|
||||
V: Encodable + PartialEq
|
||||
V: Encodable
|
||||
> Encodable for BTreeMap<K, V> {
|
||||
fn encode<S: Encoder>(&self, e: &mut S) -> Result<(), S::Error> {
|
||||
e.emit_map(self.len(), |e| {
|
||||
|
@ -84,7 +84,7 @@ impl<
|
|||
|
||||
impl<
|
||||
K: Decodable + PartialEq + Ord,
|
||||
V: Decodable + PartialEq
|
||||
V: Decodable
|
||||
> Decodable for BTreeMap<K, V> {
|
||||
fn decode<D: Decoder>(d: &mut D) -> Result<BTreeMap<K, V>, D::Error> {
|
||||
d.read_map(|d, len| {
|
||||
|
|
|
@ -34,7 +34,7 @@ use std::u32;
|
|||
|
||||
pub use rustc_target::abi::FloatTy;
|
||||
|
||||
#[derive(Clone, PartialEq, Eq, RustcEncodable, RustcDecodable, Hash, Copy)]
|
||||
#[derive(Clone, RustcEncodable, RustcDecodable, Copy)]
|
||||
pub struct Label {
|
||||
pub ident: Ident,
|
||||
}
|
||||
|
@ -45,7 +45,7 @@ impl fmt::Debug for Label {
|
|||
}
|
||||
}
|
||||
|
||||
#[derive(Clone, PartialEq, Eq, RustcEncodable, RustcDecodable, Hash, Copy)]
|
||||
#[derive(Clone, RustcEncodable, RustcDecodable, Copy)]
|
||||
pub struct Lifetime {
|
||||
pub id: NodeId,
|
||||
pub ident: Ident,
|
||||
|
@ -63,7 +63,7 @@ impl fmt::Debug for Lifetime {
|
|||
/// along with a bunch of supporting information.
|
||||
///
|
||||
/// E.g. `std::cmp::PartialEq`
|
||||
#[derive(Clone, PartialEq, Eq, RustcEncodable, RustcDecodable, Hash)]
|
||||
#[derive(Clone, RustcEncodable, RustcDecodable)]
|
||||
pub struct Path {
|
||||
pub span: Span,
|
||||
/// The segments in the path: the things separated by `::`.
|
||||
|
@ -115,7 +115,7 @@ impl Path {
|
|||
/// A segment of a path: an identifier, an optional lifetime, and a set of types.
|
||||
///
|
||||
/// E.g. `std`, `String` or `Box<T>`
|
||||
#[derive(Clone, PartialEq, Eq, RustcEncodable, RustcDecodable, Hash, Debug)]
|
||||
#[derive(Clone, RustcEncodable, RustcDecodable, Debug)]
|
||||
pub struct PathSegment {
|
||||
/// The identifier portion of this path segment.
|
||||
pub ident: Ident,
|
||||
|
@ -141,7 +141,7 @@ impl PathSegment {
|
|||
/// Arguments of a path segment.
|
||||
///
|
||||
/// E.g. `<A, B>` as in `Foo<A, B>` or `(A, B)` as in `Foo(A, B)`
|
||||
#[derive(Clone, PartialEq, Eq, RustcEncodable, RustcDecodable, Hash, Debug)]
|
||||
#[derive(Clone, RustcEncodable, RustcDecodable, Debug)]
|
||||
pub enum GenericArgs {
|
||||
/// The `<'a, A,B,C>` in `foo::bar::baz::<'a, A,B,C>`
|
||||
AngleBracketed(AngleBracketedArgs),
|
||||
|
@ -158,14 +158,14 @@ impl GenericArgs {
|
|||
}
|
||||
}
|
||||
|
||||
#[derive(Clone, PartialEq, Eq, RustcEncodable, RustcDecodable, Hash, Debug)]
|
||||
#[derive(Clone, RustcEncodable, RustcDecodable, Debug)]
|
||||
pub enum GenericArg {
|
||||
Lifetime(Lifetime),
|
||||
Type(P<Ty>),
|
||||
}
|
||||
|
||||
/// A path like `Foo<'a, T>`
|
||||
#[derive(Clone, PartialEq, Eq, RustcEncodable, RustcDecodable, Hash, Debug, Default)]
|
||||
#[derive(Clone, RustcEncodable, RustcDecodable, Debug, Default)]
|
||||
pub struct AngleBracketedArgs {
|
||||
/// Overall span
|
||||
pub span: Span,
|
||||
|
@ -190,7 +190,7 @@ impl Into<Option<P<GenericArgs>>> for ParenthesisedArgs {
|
|||
}
|
||||
|
||||
/// A path like `Foo(A,B) -> C`
|
||||
#[derive(Clone, PartialEq, Eq, RustcEncodable, RustcDecodable, Hash, Debug)]
|
||||
#[derive(Clone, RustcEncodable, RustcDecodable, Debug)]
|
||||
pub struct ParenthesisedArgs {
|
||||
/// Overall span
|
||||
pub span: Span,
|
||||
|
@ -202,7 +202,7 @@ pub struct ParenthesisedArgs {
|
|||
pub output: Option<P<Ty>>,
|
||||
}
|
||||
|
||||
#[derive(Clone, Copy, PartialEq, PartialOrd, Eq, Ord, Hash, Debug)]
|
||||
#[derive(Clone, Copy, PartialEq, Eq, PartialOrd, Ord, Hash, Debug)]
|
||||
pub struct NodeId(u32);
|
||||
|
||||
impl NodeId {
|
||||
|
@ -270,7 +270,7 @@ pub const DUMMY_NODE_ID: NodeId = NodeId(!0);
|
|||
|
||||
/// A modifier on a bound, currently this is only used for `?Sized`, where the
|
||||
/// modifier is `Maybe`. Negative bounds should also be handled here.
|
||||
#[derive(Copy, Clone, PartialEq, Eq, RustcEncodable, RustcDecodable, Hash, Debug)]
|
||||
#[derive(Copy, Clone, PartialEq, Eq, RustcEncodable, RustcDecodable, Debug)]
|
||||
pub enum TraitBoundModifier {
|
||||
None,
|
||||
Maybe,
|
||||
|
@ -280,7 +280,7 @@ pub enum TraitBoundModifier {
|
|||
/// typeck::collect::compute_bounds matches these against
|
||||
/// the "special" built-in traits (see middle::lang_items) and
|
||||
/// detects Copy, Send and Sync.
|
||||
#[derive(Clone, PartialEq, Eq, RustcEncodable, RustcDecodable, Hash, Debug)]
|
||||
#[derive(Clone, RustcEncodable, RustcDecodable, Debug)]
|
||||
pub enum GenericBound {
|
||||
Trait(PolyTraitRef, TraitBoundModifier),
|
||||
Outlives(Lifetime)
|
||||
|
@ -297,7 +297,7 @@ impl GenericBound {
|
|||
|
||||
pub type GenericBounds = Vec<GenericBound>;
|
||||
|
||||
#[derive(Clone, PartialEq, Eq, RustcEncodable, RustcDecodable, Hash, Debug)]
|
||||
#[derive(Clone, RustcEncodable, RustcDecodable, Debug)]
|
||||
pub enum GenericParamKind {
|
||||
/// A lifetime definition, e.g. `'a: 'b+'c+'d`.
|
||||
Lifetime,
|
||||
|
@ -306,7 +306,7 @@ pub enum GenericParamKind {
|
|||
}
|
||||
}
|
||||
|
||||
#[derive(Clone, PartialEq, Eq, RustcEncodable, RustcDecodable, Hash, Debug)]
|
||||
#[derive(Clone, RustcEncodable, RustcDecodable, Debug)]
|
||||
pub struct GenericParam {
|
||||
pub id: NodeId,
|
||||
pub ident: Ident,
|
||||
|
@ -318,7 +318,7 @@ pub struct GenericParam {
|
|||
|
||||
/// Represents lifetime, type and const parameters attached to a declaration of
|
||||
/// a function, enum, trait, etc.
|
||||
#[derive(Clone, PartialEq, Eq, RustcEncodable, RustcDecodable, Hash, Debug)]
|
||||
#[derive(Clone, RustcEncodable, RustcDecodable, Debug)]
|
||||
pub struct Generics {
|
||||
pub params: Vec<GenericParam>,
|
||||
pub where_clause: WhereClause,
|
||||
|
@ -341,7 +341,7 @@ impl Default for Generics {
|
|||
}
|
||||
|
||||
/// A `where` clause in a definition
|
||||
#[derive(Clone, PartialEq, Eq, RustcEncodable, RustcDecodable, Hash, Debug)]
|
||||
#[derive(Clone, RustcEncodable, RustcDecodable, Debug)]
|
||||
pub struct WhereClause {
|
||||
pub id: NodeId,
|
||||
pub predicates: Vec<WherePredicate>,
|
||||
|
@ -349,7 +349,7 @@ pub struct WhereClause {
|
|||
}
|
||||
|
||||
/// A single predicate in a `where` clause
|
||||
#[derive(Clone, PartialEq, Eq, RustcEncodable, RustcDecodable, Hash, Debug)]
|
||||
#[derive(Clone, RustcEncodable, RustcDecodable, Debug)]
|
||||
pub enum WherePredicate {
|
||||
/// A type binding, e.g. `for<'c> Foo: Send+Clone+'c`
|
||||
BoundPredicate(WhereBoundPredicate),
|
||||
|
@ -372,7 +372,7 @@ impl WherePredicate {
|
|||
/// A type bound.
|
||||
///
|
||||
/// E.g. `for<'c> Foo: Send+Clone+'c`
|
||||
#[derive(Clone, PartialEq, Eq, RustcEncodable, RustcDecodable, Hash, Debug)]
|
||||
#[derive(Clone, RustcEncodable, RustcDecodable, Debug)]
|
||||
pub struct WhereBoundPredicate {
|
||||
pub span: Span,
|
||||
/// Any generics from a `for` binding
|
||||
|
@ -386,7 +386,7 @@ pub struct WhereBoundPredicate {
|
|||
/// A lifetime predicate.
|
||||
///
|
||||
/// E.g. `'a: 'b+'c`
|
||||
#[derive(Clone, PartialEq, Eq, RustcEncodable, RustcDecodable, Hash, Debug)]
|
||||
#[derive(Clone, RustcEncodable, RustcDecodable, Debug)]
|
||||
pub struct WhereRegionPredicate {
|
||||
pub span: Span,
|
||||
pub lifetime: Lifetime,
|
||||
|
@ -396,7 +396,7 @@ pub struct WhereRegionPredicate {
|
|||
/// An equality predicate (unsupported).
|
||||
///
|
||||
/// E.g. `T=int`
|
||||
#[derive(Clone, PartialEq, Eq, RustcEncodable, RustcDecodable, Hash, Debug)]
|
||||
#[derive(Clone, RustcEncodable, RustcDecodable, Debug)]
|
||||
pub struct WhereEqPredicate {
|
||||
pub id: NodeId,
|
||||
pub span: Span,
|
||||
|
@ -408,7 +408,7 @@ pub struct WhereEqPredicate {
|
|||
/// used to drive conditional compilation
|
||||
pub type CrateConfig = HashSet<(Name, Option<Symbol>)>;
|
||||
|
||||
#[derive(Clone, PartialEq, Eq, RustcEncodable, RustcDecodable, Hash, Debug)]
|
||||
#[derive(Clone, RustcEncodable, RustcDecodable, Debug)]
|
||||
pub struct Crate {
|
||||
pub module: Mod,
|
||||
pub attrs: Vec<Attribute>,
|
||||
|
@ -421,7 +421,7 @@ pub type NestedMetaItem = Spanned<NestedMetaItemKind>;
|
|||
/// Possible values inside of compile-time attribute lists.
|
||||
///
|
||||
/// E.g. the '..' in `#[name(..)]`.
|
||||
#[derive(Clone, Eq, RustcEncodable, RustcDecodable, Hash, Debug, PartialEq)]
|
||||
#[derive(Clone, RustcEncodable, RustcDecodable, Debug)]
|
||||
pub enum NestedMetaItemKind {
|
||||
/// A full MetaItem, for recursive meta items.
|
||||
MetaItem(MetaItem),
|
||||
|
@ -434,7 +434,7 @@ pub enum NestedMetaItemKind {
|
|||
/// A spanned compile-time attribute item.
|
||||
///
|
||||
/// E.g. `#[test]`, `#[derive(..)]`, `#[rustfmt::skip]` or `#[feature = "foo"]`
|
||||
#[derive(Clone, PartialEq, Eq, RustcEncodable, RustcDecodable, Hash, Debug)]
|
||||
#[derive(Clone, RustcEncodable, RustcDecodable, Debug)]
|
||||
pub struct MetaItem {
|
||||
pub ident: Path,
|
||||
pub node: MetaItemKind,
|
||||
|
@ -444,7 +444,7 @@ pub struct MetaItem {
|
|||
/// A compile-time attribute item.
|
||||
///
|
||||
/// E.g. `#[test]`, `#[derive(..)]` or `#[feature = "foo"]`
|
||||
#[derive(Clone, PartialEq, Eq, RustcEncodable, RustcDecodable, Hash, Debug)]
|
||||
#[derive(Clone, RustcEncodable, RustcDecodable, Debug)]
|
||||
pub enum MetaItemKind {
|
||||
/// Word meta item.
|
||||
///
|
||||
|
@ -463,7 +463,7 @@ pub enum MetaItemKind {
|
|||
/// A Block (`{ .. }`).
|
||||
///
|
||||
/// E.g. `{ .. }` as in `fn foo() { .. }`
|
||||
#[derive(Clone, PartialEq, Eq, RustcEncodable, RustcDecodable, Hash, Debug)]
|
||||
#[derive(Clone, RustcEncodable, RustcDecodable, Debug)]
|
||||
pub struct Block {
|
||||
/// Statements in a block
|
||||
pub stmts: Vec<Stmt>,
|
||||
|
@ -474,7 +474,7 @@ pub struct Block {
|
|||
pub recovered: bool,
|
||||
}
|
||||
|
||||
#[derive(Clone, PartialEq, Eq, RustcEncodable, RustcDecodable, Hash)]
|
||||
#[derive(Clone, RustcEncodable, RustcDecodable)]
|
||||
pub struct Pat {
|
||||
pub id: NodeId,
|
||||
pub node: PatKind,
|
||||
|
@ -552,7 +552,7 @@ impl Pat {
|
|||
/// Patterns like the fields of Foo `{ x, ref y, ref mut z }`
|
||||
/// are treated the same as` x: x, y: ref y, z: ref mut z`,
|
||||
/// except is_shorthand is true
|
||||
#[derive(Clone, PartialEq, Eq, RustcEncodable, RustcDecodable, Hash, Debug)]
|
||||
#[derive(Clone, RustcEncodable, RustcDecodable, Debug)]
|
||||
pub struct FieldPat {
|
||||
/// The identifier for the field
|
||||
pub ident: Ident,
|
||||
|
@ -562,25 +562,25 @@ pub struct FieldPat {
|
|||
pub attrs: ThinVec<Attribute>,
|
||||
}
|
||||
|
||||
#[derive(Clone, PartialEq, Eq, RustcEncodable, RustcDecodable, Hash, Debug, Copy)]
|
||||
#[derive(Clone, PartialEq, RustcEncodable, RustcDecodable, Debug, Copy)]
|
||||
pub enum BindingMode {
|
||||
ByRef(Mutability),
|
||||
ByValue(Mutability),
|
||||
}
|
||||
|
||||
#[derive(Clone, PartialEq, Eq, RustcEncodable, RustcDecodable, Hash, Debug)]
|
||||
#[derive(Clone, RustcEncodable, RustcDecodable, Debug)]
|
||||
pub enum RangeEnd {
|
||||
Included(RangeSyntax),
|
||||
Excluded,
|
||||
}
|
||||
|
||||
#[derive(Clone, PartialEq, Eq, RustcEncodable, RustcDecodable, Hash, Debug)]
|
||||
#[derive(Clone, RustcEncodable, RustcDecodable, Debug)]
|
||||
pub enum RangeSyntax {
|
||||
DotDotDot,
|
||||
DotDotEq,
|
||||
}
|
||||
|
||||
#[derive(Clone, PartialEq, Eq, RustcEncodable, RustcDecodable, Hash, Debug)]
|
||||
#[derive(Clone, RustcEncodable, RustcDecodable, Debug)]
|
||||
pub enum PatKind {
|
||||
/// Represents a wildcard pattern (`_`)
|
||||
Wild,
|
||||
|
@ -627,13 +627,13 @@ pub enum PatKind {
|
|||
Mac(Mac),
|
||||
}
|
||||
|
||||
#[derive(Clone, PartialEq, Eq, PartialOrd, Ord, RustcEncodable, RustcDecodable, Hash, Debug, Copy)]
|
||||
#[derive(Clone, PartialEq, Eq, PartialOrd, Ord, Hash, RustcEncodable, RustcDecodable, Debug, Copy)]
|
||||
pub enum Mutability {
|
||||
Mutable,
|
||||
Immutable,
|
||||
}
|
||||
|
||||
#[derive(Clone, PartialEq, Eq, RustcEncodable, RustcDecodable, Hash, Debug, Copy)]
|
||||
#[derive(Clone, PartialEq, RustcEncodable, RustcDecodable, Debug, Copy)]
|
||||
pub enum BinOpKind {
|
||||
/// The `+` operator (addition)
|
||||
Add,
|
||||
|
@ -730,7 +730,7 @@ impl BinOpKind {
|
|||
|
||||
pub type BinOp = Spanned<BinOpKind>;
|
||||
|
||||
#[derive(Clone, PartialEq, Eq, RustcEncodable, RustcDecodable, Hash, Debug, Copy)]
|
||||
#[derive(Clone, RustcEncodable, RustcDecodable, Debug, Copy)]
|
||||
pub enum UnOp {
|
||||
/// The `*` operator for dereferencing
|
||||
Deref,
|
||||
|
@ -759,7 +759,7 @@ impl UnOp {
|
|||
}
|
||||
|
||||
/// A statement
|
||||
#[derive(Clone, PartialEq, Eq, RustcEncodable, RustcDecodable, Hash)]
|
||||
#[derive(Clone, RustcEncodable, RustcDecodable)]
|
||||
pub struct Stmt {
|
||||
pub id: NodeId,
|
||||
pub node: StmtKind,
|
||||
|
@ -800,7 +800,7 @@ impl fmt::Debug for Stmt {
|
|||
}
|
||||
|
||||
|
||||
#[derive(Clone, PartialEq, Eq, RustcEncodable, RustcDecodable, Hash)]
|
||||
#[derive(Clone, RustcEncodable, RustcDecodable)]
|
||||
pub enum StmtKind {
|
||||
/// A local (let) binding.
|
||||
Local(P<Local>),
|
||||
|
@ -816,7 +816,7 @@ pub enum StmtKind {
|
|||
Mac(P<(Mac, MacStmtStyle, ThinVec<Attribute>)>),
|
||||
}
|
||||
|
||||
#[derive(Clone, Copy, PartialEq, Eq, RustcEncodable, RustcDecodable, Hash, Debug)]
|
||||
#[derive(Clone, Copy, PartialEq, RustcEncodable, RustcDecodable, Debug)]
|
||||
pub enum MacStmtStyle {
|
||||
/// The macro statement had a trailing semicolon, e.g. `foo! { ... };`
|
||||
/// `foo!(...);`, `foo![...];`
|
||||
|
@ -830,7 +830,7 @@ pub enum MacStmtStyle {
|
|||
}
|
||||
|
||||
/// Local represents a `let` statement, e.g., `let <pat>:<ty> = <expr>;`
|
||||
#[derive(Clone, PartialEq, Eq, RustcEncodable, RustcDecodable, Hash, Debug)]
|
||||
#[derive(Clone, RustcEncodable, RustcDecodable, Debug)]
|
||||
pub struct Local {
|
||||
pub pat: P<Pat>,
|
||||
pub ty: Option<P<Ty>>,
|
||||
|
@ -851,7 +851,7 @@ pub struct Local {
|
|||
/// _ => { println!("no match!") },
|
||||
/// }
|
||||
/// ```
|
||||
#[derive(Clone, PartialEq, Eq, RustcEncodable, RustcDecodable, Hash, Debug)]
|
||||
#[derive(Clone, RustcEncodable, RustcDecodable, Debug)]
|
||||
pub struct Arm {
|
||||
pub attrs: Vec<Attribute>,
|
||||
pub pats: Vec<P<Pat>>,
|
||||
|
@ -859,7 +859,7 @@ pub struct Arm {
|
|||
pub body: P<Expr>,
|
||||
}
|
||||
|
||||
#[derive(Clone, PartialEq, Eq, RustcEncodable, RustcDecodable, Hash, Debug)]
|
||||
#[derive(Clone, RustcEncodable, RustcDecodable, Debug)]
|
||||
pub struct Field {
|
||||
pub ident: Ident,
|
||||
pub expr: P<Expr>,
|
||||
|
@ -868,13 +868,15 @@ pub struct Field {
|
|||
pub attrs: ThinVec<Attribute>,
|
||||
}
|
||||
|
||||
#[derive(Clone, PartialEq, Eq, RustcEncodable, RustcDecodable, Hash, Debug, Copy)]
|
||||
pub type SpannedIdent = Spanned<Ident>;
|
||||
|
||||
#[derive(Clone, RustcEncodable, RustcDecodable, Debug, Copy)]
|
||||
pub enum BlockCheckMode {
|
||||
Default,
|
||||
Unsafe(UnsafeSource),
|
||||
}
|
||||
|
||||
#[derive(Clone, PartialEq, Eq, RustcEncodable, RustcDecodable, Hash, Debug, Copy)]
|
||||
#[derive(Clone, RustcEncodable, RustcDecodable, Debug, Copy)]
|
||||
pub enum UnsafeSource {
|
||||
CompilerGenerated,
|
||||
UserProvided,
|
||||
|
@ -885,7 +887,7 @@ pub enum UnsafeSource {
|
|||
/// These are usually found nested inside types (e.g. array lengths)
|
||||
/// or expressions (e.g. repeat counts), and also used to define
|
||||
/// explicit discriminant values for enum variants.
|
||||
#[derive(Clone, PartialEq, Eq, RustcEncodable, RustcDecodable, Hash, Debug)]
|
||||
#[derive(Clone, RustcEncodable, RustcDecodable, Debug)]
|
||||
pub struct AnonConst {
|
||||
pub id: NodeId,
|
||||
pub value: P<Expr>,
|
||||
|
@ -893,7 +895,7 @@ pub struct AnonConst {
|
|||
|
||||
|
||||
/// An expression
|
||||
#[derive(Clone, PartialEq, Eq, RustcEncodable, RustcDecodable, Hash,)]
|
||||
#[derive(Clone, RustcEncodable, RustcDecodable)]
|
||||
pub struct Expr {
|
||||
pub id: NodeId,
|
||||
pub node: ExprKind,
|
||||
|
@ -1016,7 +1018,7 @@ impl fmt::Debug for Expr {
|
|||
}
|
||||
|
||||
/// Limit types of a range (inclusive or exclusive)
|
||||
#[derive(Copy, Clone, PartialEq, Eq, RustcEncodable, RustcDecodable, Hash, Debug)]
|
||||
#[derive(Copy, Clone, PartialEq, RustcEncodable, RustcDecodable, Debug)]
|
||||
pub enum RangeLimits {
|
||||
/// Inclusive at the beginning, exclusive at the end
|
||||
HalfOpen,
|
||||
|
@ -1024,7 +1026,7 @@ pub enum RangeLimits {
|
|||
Closed,
|
||||
}
|
||||
|
||||
#[derive(Clone, PartialEq, Eq, RustcEncodable, RustcDecodable, Hash, Debug)]
|
||||
#[derive(Clone, RustcEncodable, RustcDecodable, Debug)]
|
||||
pub enum ExprKind {
|
||||
/// A `box x` expression.
|
||||
Box(P<Expr>),
|
||||
|
@ -1181,7 +1183,7 @@ pub enum ExprKind {
|
|||
/// ^~~~~ ^
|
||||
/// ty position = 0
|
||||
/// ```
|
||||
#[derive(Clone, PartialEq, Eq, RustcEncodable, RustcDecodable, Hash, Debug)]
|
||||
#[derive(Clone, RustcEncodable, RustcDecodable, Debug)]
|
||||
pub struct QSelf {
|
||||
pub ty: P<Ty>,
|
||||
|
||||
|
@ -1193,14 +1195,14 @@ pub struct QSelf {
|
|||
}
|
||||
|
||||
/// A capture clause
|
||||
#[derive(Clone, PartialEq, Eq, RustcEncodable, RustcDecodable, Hash, Debug, Copy)]
|
||||
#[derive(Clone, Copy, PartialEq, RustcEncodable, RustcDecodable, Debug)]
|
||||
pub enum CaptureBy {
|
||||
Value,
|
||||
Ref,
|
||||
}
|
||||
|
||||
/// The movability of a generator / closure literal
|
||||
#[derive(Clone, PartialEq, Eq, RustcEncodable, RustcDecodable, Hash, Debug, Copy)]
|
||||
#[derive(Clone, PartialEq, RustcEncodable, RustcDecodable, Debug, Copy)]
|
||||
pub enum Movability {
|
||||
Static,
|
||||
Movable,
|
||||
|
@ -1214,14 +1216,14 @@ pub type Mac = Spanned<Mac_>;
|
|||
///
|
||||
/// NB: the additional ident for a macro_rules-style macro is actually
|
||||
/// stored in the enclosing item. Oog.
|
||||
#[derive(Clone, PartialEq, Eq, RustcEncodable, RustcDecodable, Hash, Debug)]
|
||||
#[derive(Clone, RustcEncodable, RustcDecodable, Debug)]
|
||||
pub struct Mac_ {
|
||||
pub path: Path,
|
||||
pub delim: MacDelimiter,
|
||||
pub tts: ThinTokenStream,
|
||||
}
|
||||
|
||||
#[derive(Copy, Clone, PartialEq, Eq, RustcEncodable, RustcDecodable, Hash, Debug)]
|
||||
#[derive(Copy, Clone, PartialEq, Eq, RustcEncodable, RustcDecodable, Debug)]
|
||||
pub enum MacDelimiter {
|
||||
Parenthesis,
|
||||
Bracket,
|
||||
|
@ -1234,7 +1236,7 @@ impl Mac_ {
|
|||
}
|
||||
}
|
||||
|
||||
#[derive(Clone, PartialEq, Eq, RustcEncodable, RustcDecodable, Hash, Debug)]
|
||||
#[derive(Clone, RustcEncodable, RustcDecodable, Debug)]
|
||||
pub struct MacroDef {
|
||||
pub tokens: ThinTokenStream,
|
||||
pub legacy: bool,
|
||||
|
@ -1246,7 +1248,7 @@ impl MacroDef {
|
|||
}
|
||||
}
|
||||
|
||||
#[derive(Clone, PartialEq, Eq, RustcEncodable, RustcDecodable, Hash, Debug, Copy)]
|
||||
#[derive(Clone, RustcEncodable, RustcDecodable, Debug, Copy)]
|
||||
pub enum StrStyle {
|
||||
/// A regular string, like `"foo"`
|
||||
Cooked,
|
||||
|
@ -1259,7 +1261,7 @@ pub enum StrStyle {
|
|||
/// A literal
|
||||
pub type Lit = Spanned<LitKind>;
|
||||
|
||||
#[derive(Clone, PartialEq, Eq, RustcEncodable, RustcDecodable, Hash, Debug, Copy)]
|
||||
#[derive(Clone, RustcEncodable, RustcDecodable, Debug, Copy)]
|
||||
pub enum LitIntType {
|
||||
Signed(IntTy),
|
||||
Unsigned(UintTy),
|
||||
|
@ -1269,7 +1271,7 @@ pub enum LitIntType {
|
|||
/// Literal kind.
|
||||
///
|
||||
/// E.g. `"foo"`, `42`, `12.34` or `bool`
|
||||
#[derive(Clone, PartialEq, Eq, RustcEncodable, RustcDecodable, Hash, Debug)]
|
||||
#[derive(Clone, RustcEncodable, RustcDecodable, Debug)]
|
||||
pub enum LitKind {
|
||||
/// A string literal (`"foo"`)
|
||||
Str(Symbol, StrStyle),
|
||||
|
@ -1335,7 +1337,7 @@ impl LitKind {
|
|||
|
||||
// NB: If you change this, you'll probably want to change the corresponding
|
||||
// type structure in middle/ty.rs as well.
|
||||
#[derive(Clone, PartialEq, Eq, RustcEncodable, RustcDecodable, Hash, Debug)]
|
||||
#[derive(Clone, RustcEncodable, RustcDecodable, Debug)]
|
||||
pub struct MutTy {
|
||||
pub ty: P<Ty>,
|
||||
pub mutbl: Mutability,
|
||||
|
@ -1343,7 +1345,7 @@ pub struct MutTy {
|
|||
|
||||
/// Represents a method's signature in a trait declaration,
|
||||
/// or in an implementation.
|
||||
#[derive(Clone, PartialEq, Eq, RustcEncodable, RustcDecodable, Hash, Debug)]
|
||||
#[derive(Clone, RustcEncodable, RustcDecodable, Debug)]
|
||||
pub struct MethodSig {
|
||||
pub header: FnHeader,
|
||||
pub decl: P<FnDecl>,
|
||||
|
@ -1353,7 +1355,7 @@ pub struct MethodSig {
|
|||
/// possibly including a default implementation. A trait item is
|
||||
/// either required (meaning it doesn't have an implementation, just a
|
||||
/// signature) or provided (meaning it has a default implementation).
|
||||
#[derive(Clone, PartialEq, Eq, RustcEncodable, RustcDecodable, Hash, Debug)]
|
||||
#[derive(Clone, RustcEncodable, RustcDecodable, Debug)]
|
||||
pub struct TraitItem {
|
||||
pub id: NodeId,
|
||||
pub ident: Ident,
|
||||
|
@ -1365,7 +1367,7 @@ pub struct TraitItem {
|
|||
pub tokens: Option<TokenStream>,
|
||||
}
|
||||
|
||||
#[derive(Clone, PartialEq, Eq, RustcEncodable, RustcDecodable, Hash, Debug)]
|
||||
#[derive(Clone, RustcEncodable, RustcDecodable, Debug)]
|
||||
pub enum TraitItemKind {
|
||||
Const(P<Ty>, Option<P<Expr>>),
|
||||
Method(MethodSig, Option<P<Block>>),
|
||||
|
@ -1373,7 +1375,7 @@ pub enum TraitItemKind {
|
|||
Macro(Mac),
|
||||
}
|
||||
|
||||
#[derive(Clone, PartialEq, Eq, RustcEncodable, RustcDecodable, Hash, Debug)]
|
||||
#[derive(Clone, RustcEncodable, RustcDecodable, Debug)]
|
||||
pub struct ImplItem {
|
||||
pub id: NodeId,
|
||||
pub ident: Ident,
|
||||
|
@ -1387,7 +1389,7 @@ pub struct ImplItem {
|
|||
pub tokens: Option<TokenStream>,
|
||||
}
|
||||
|
||||
#[derive(Clone, PartialEq, Eq, RustcEncodable, RustcDecodable, Hash, Debug)]
|
||||
#[derive(Clone, RustcEncodable, RustcDecodable, Debug)]
|
||||
pub enum ImplItemKind {
|
||||
Const(P<Ty>, P<Expr>),
|
||||
Method(MethodSig, P<Block>),
|
||||
|
@ -1395,8 +1397,7 @@ pub enum ImplItemKind {
|
|||
Macro(Mac),
|
||||
}
|
||||
|
||||
#[derive(Clone, PartialEq, Eq, RustcEncodable, RustcDecodable, Hash, Copy,
|
||||
PartialOrd, Ord)]
|
||||
#[derive(Clone, PartialEq, Eq, PartialOrd, Ord, Hash, RustcEncodable, RustcDecodable, Copy)]
|
||||
pub enum IntTy {
|
||||
Isize,
|
||||
I8,
|
||||
|
@ -1449,8 +1450,7 @@ impl IntTy {
|
|||
}
|
||||
}
|
||||
|
||||
#[derive(Clone, PartialEq, Eq, RustcEncodable, RustcDecodable, Hash, Copy,
|
||||
PartialOrd, Ord)]
|
||||
#[derive(Clone, PartialEq, Eq, PartialOrd, Ord, Hash, RustcEncodable, RustcDecodable, Copy)]
|
||||
pub enum UintTy {
|
||||
Usize,
|
||||
U8,
|
||||
|
@ -1501,7 +1501,7 @@ impl fmt::Display for UintTy {
|
|||
}
|
||||
|
||||
// Bind a type to an associated type: `A=Foo`.
|
||||
#[derive(Clone, PartialEq, Eq, RustcEncodable, RustcDecodable, Hash, Debug)]
|
||||
#[derive(Clone, RustcEncodable, RustcDecodable, Debug)]
|
||||
pub struct TypeBinding {
|
||||
pub id: NodeId,
|
||||
pub ident: Ident,
|
||||
|
@ -1509,7 +1509,7 @@ pub struct TypeBinding {
|
|||
pub span: Span,
|
||||
}
|
||||
|
||||
#[derive(Clone, PartialEq, Eq, RustcEncodable, RustcDecodable, Hash)]
|
||||
#[derive(Clone, RustcEncodable, RustcDecodable)]
|
||||
pub struct Ty {
|
||||
pub id: NodeId,
|
||||
pub node: TyKind,
|
||||
|
@ -1522,7 +1522,7 @@ impl fmt::Debug for Ty {
|
|||
}
|
||||
}
|
||||
|
||||
#[derive(Clone, PartialEq, Eq, RustcEncodable, RustcDecodable, Hash, Debug)]
|
||||
#[derive(Clone, RustcEncodable, RustcDecodable, Debug)]
|
||||
pub struct BareFnTy {
|
||||
pub unsafety: Unsafety,
|
||||
pub abi: Abi,
|
||||
|
@ -1531,7 +1531,7 @@ pub struct BareFnTy {
|
|||
}
|
||||
|
||||
/// The different kinds of types recognized by the compiler
|
||||
#[derive(Clone, PartialEq, Eq, RustcEncodable, RustcDecodable, Hash, Debug)]
|
||||
#[derive(Clone, RustcEncodable, RustcDecodable, Debug)]
|
||||
pub enum TyKind {
|
||||
/// A variable-length slice (`[T]`)
|
||||
Slice(P<Ty>),
|
||||
|
@ -1577,8 +1577,18 @@ pub enum TyKind {
|
|||
Err,
|
||||
}
|
||||
|
||||
impl TyKind {
|
||||
pub fn is_implicit_self(&self) -> bool {
|
||||
if let TyKind::ImplicitSelf = *self { true } else { false }
|
||||
}
|
||||
|
||||
crate fn is_unit(&self) -> bool {
|
||||
if let TyKind::Tup(ref tys) = *self { tys.is_empty() } else { false }
|
||||
}
|
||||
}
|
||||
|
||||
/// Syntax used to declare a trait object.
|
||||
#[derive(Clone, Copy, PartialEq, Eq, RustcEncodable, RustcDecodable, Hash, Debug)]
|
||||
#[derive(Clone, Copy, PartialEq, RustcEncodable, RustcDecodable, Debug)]
|
||||
pub enum TraitObjectSyntax {
|
||||
Dyn,
|
||||
None,
|
||||
|
@ -1587,7 +1597,7 @@ pub enum TraitObjectSyntax {
|
|||
/// Inline assembly dialect.
|
||||
///
|
||||
/// E.g. `"intel"` as in `asm!("mov eax, 2" : "={eax}"(result) : : : "intel")`
|
||||
#[derive(Clone, PartialEq, Eq, RustcEncodable, RustcDecodable, Hash, Debug, Copy)]
|
||||
#[derive(Clone, PartialEq, RustcEncodable, RustcDecodable, Debug, Copy)]
|
||||
pub enum AsmDialect {
|
||||
Att,
|
||||
Intel,
|
||||
|
@ -1596,7 +1606,7 @@ pub enum AsmDialect {
|
|||
/// Inline assembly.
|
||||
///
|
||||
/// E.g. `"={eax}"(result)` as in `asm!("mov eax, 2" : "={eax}"(result) : : : "intel")`
|
||||
#[derive(Clone, PartialEq, Eq, RustcEncodable, RustcDecodable, Hash, Debug)]
|
||||
#[derive(Clone, RustcEncodable, RustcDecodable, Debug)]
|
||||
pub struct InlineAsmOutput {
|
||||
pub constraint: Symbol,
|
||||
pub expr: P<Expr>,
|
||||
|
@ -1607,7 +1617,7 @@ pub struct InlineAsmOutput {
|
|||
/// Inline assembly.
|
||||
///
|
||||
/// E.g. `asm!("NOP");`
|
||||
#[derive(Clone, PartialEq, Eq, RustcEncodable, RustcDecodable, Hash, Debug)]
|
||||
#[derive(Clone, RustcEncodable, RustcDecodable, Debug)]
|
||||
pub struct InlineAsm {
|
||||
pub asm: Symbol,
|
||||
pub asm_str_style: StrStyle,
|
||||
|
@ -1623,7 +1633,7 @@ pub struct InlineAsm {
|
|||
/// An argument in a function header.
|
||||
///
|
||||
/// E.g. `bar: usize` as in `fn foo(bar: usize)`
|
||||
#[derive(Clone, PartialEq, Eq, RustcEncodable, RustcDecodable, Hash, Debug)]
|
||||
#[derive(Clone, RustcEncodable, RustcDecodable, Debug)]
|
||||
pub struct Arg {
|
||||
pub ty: P<Ty>,
|
||||
pub pat: P<Pat>,
|
||||
|
@ -1633,7 +1643,7 @@ pub struct Arg {
|
|||
/// Alternative representation for `Arg`s describing `self` parameter of methods.
|
||||
///
|
||||
/// E.g. `&mut self` as in `fn foo(&mut self)`
|
||||
#[derive(Clone, PartialEq, Eq, RustcEncodable, RustcDecodable, Hash, Debug)]
|
||||
#[derive(Clone, RustcEncodable, RustcDecodable, Debug)]
|
||||
pub enum SelfKind {
|
||||
/// `self`, `mut self`
|
||||
Value(Mutability),
|
||||
|
@ -1651,7 +1661,7 @@ impl Arg {
|
|||
if ident.name == keywords::SelfValue.name() {
|
||||
return match self.ty.node {
|
||||
TyKind::ImplicitSelf => Some(respan(self.pat.span, SelfKind::Value(mutbl))),
|
||||
TyKind::Rptr(lt, MutTy{ref ty, mutbl}) if ty.node == TyKind::ImplicitSelf => {
|
||||
TyKind::Rptr(lt, MutTy{ref ty, mutbl}) if ty.node.is_implicit_self() => {
|
||||
Some(respan(self.pat.span, SelfKind::Region(lt, mutbl)))
|
||||
}
|
||||
_ => Some(respan(self.pat.span.to(self.ty.span),
|
||||
|
@ -1701,7 +1711,7 @@ impl Arg {
|
|||
/// Header (not the body) of a function declaration.
|
||||
///
|
||||
/// E.g. `fn foo(bar: baz)`
|
||||
#[derive(Clone, PartialEq, Eq, RustcEncodable, RustcDecodable, Hash, Debug)]
|
||||
#[derive(Clone, RustcEncodable, RustcDecodable, Debug)]
|
||||
pub struct FnDecl {
|
||||
pub inputs: Vec<Arg>,
|
||||
pub output: FunctionRetTy,
|
||||
|
@ -1718,19 +1728,19 @@ impl FnDecl {
|
|||
}
|
||||
|
||||
/// Is the trait definition an auto trait?
|
||||
#[derive(Copy, Clone, PartialEq, Eq, RustcEncodable, RustcDecodable, Hash, Debug)]
|
||||
#[derive(Copy, Clone, PartialEq, RustcEncodable, RustcDecodable, Debug)]
|
||||
pub enum IsAuto {
|
||||
Yes,
|
||||
No
|
||||
}
|
||||
|
||||
#[derive(Copy, Clone, PartialEq, Eq, RustcEncodable, RustcDecodable, Hash, Debug)]
|
||||
#[derive(Copy, Clone, PartialEq, RustcEncodable, RustcDecodable, Debug)]
|
||||
pub enum Unsafety {
|
||||
Unsafe,
|
||||
Normal,
|
||||
}
|
||||
|
||||
#[derive(Copy, Clone, PartialEq, Eq, RustcEncodable, RustcDecodable, Hash, Debug)]
|
||||
#[derive(Copy, Clone, RustcEncodable, RustcDecodable, Debug)]
|
||||
pub enum IsAsync {
|
||||
Async {
|
||||
closure_id: NodeId,
|
||||
|
@ -1756,13 +1766,13 @@ impl IsAsync {
|
|||
}
|
||||
}
|
||||
|
||||
#[derive(Copy, Clone, PartialEq, Eq, RustcEncodable, RustcDecodable, Hash, Debug)]
|
||||
#[derive(Copy, Clone, PartialEq, RustcEncodable, RustcDecodable, Debug)]
|
||||
pub enum Constness {
|
||||
Const,
|
||||
NotConst,
|
||||
}
|
||||
|
||||
#[derive(Copy, Clone, PartialEq, Eq, RustcEncodable, RustcDecodable, Hash, Debug)]
|
||||
#[derive(Copy, Clone, PartialEq, RustcEncodable, RustcDecodable, Debug)]
|
||||
pub enum Defaultness {
|
||||
Default,
|
||||
Final,
|
||||
|
@ -1777,7 +1787,7 @@ impl fmt::Display for Unsafety {
|
|||
}
|
||||
}
|
||||
|
||||
#[derive(Copy, Clone, PartialEq, Eq, RustcEncodable, RustcDecodable, Hash)]
|
||||
#[derive(Copy, Clone, PartialEq, RustcEncodable, RustcDecodable)]
|
||||
pub enum ImplPolarity {
|
||||
/// `impl Trait for Type`
|
||||
Positive,
|
||||
|
@ -1795,7 +1805,7 @@ impl fmt::Debug for ImplPolarity {
|
|||
}
|
||||
|
||||
|
||||
#[derive(Clone, PartialEq, Eq, RustcEncodable, RustcDecodable, Hash, Debug)]
|
||||
#[derive(Clone, RustcEncodable, RustcDecodable, Debug)]
|
||||
pub enum FunctionRetTy {
|
||||
/// Return type is not specified.
|
||||
///
|
||||
|
@ -1819,7 +1829,7 @@ impl FunctionRetTy {
|
|||
/// Module declaration.
|
||||
///
|
||||
/// E.g. `mod foo;` or `mod foo { .. }`
|
||||
#[derive(Clone, PartialEq, Eq, RustcEncodable, RustcDecodable, Hash, Debug)]
|
||||
#[derive(Clone, RustcEncodable, RustcDecodable, Debug)]
|
||||
pub struct Mod {
|
||||
/// A span from the first token past `{` to the last token until `}`.
|
||||
/// For `mod foo;`, the inner span ranges from the first token
|
||||
|
@ -1831,7 +1841,7 @@ pub struct Mod {
|
|||
/// Foreign module declaration.
|
||||
///
|
||||
/// E.g. `extern { .. }` or `extern C { .. }`
|
||||
#[derive(Clone, PartialEq, Eq, RustcEncodable, RustcDecodable, Hash, Debug)]
|
||||
#[derive(Clone, RustcEncodable, RustcDecodable, Debug)]
|
||||
pub struct ForeignMod {
|
||||
pub abi: Abi,
|
||||
pub items: Vec<ForeignItem>,
|
||||
|
@ -1840,18 +1850,18 @@ pub struct ForeignMod {
|
|||
/// Global inline assembly
|
||||
///
|
||||
/// aka module-level assembly or file-scoped assembly
|
||||
#[derive(Clone, PartialEq, Eq, RustcEncodable, RustcDecodable, Hash, Debug, Copy)]
|
||||
#[derive(Clone, RustcEncodable, RustcDecodable, Debug, Copy)]
|
||||
pub struct GlobalAsm {
|
||||
pub asm: Symbol,
|
||||
pub ctxt: SyntaxContext,
|
||||
}
|
||||
|
||||
#[derive(Clone, PartialEq, Eq, RustcEncodable, RustcDecodable, Hash, Debug)]
|
||||
#[derive(Clone, RustcEncodable, RustcDecodable, Debug)]
|
||||
pub struct EnumDef {
|
||||
pub variants: Vec<Variant>,
|
||||
}
|
||||
|
||||
#[derive(Clone, PartialEq, Eq, RustcEncodable, RustcDecodable, Hash, Debug)]
|
||||
#[derive(Clone, RustcEncodable, RustcDecodable, Debug)]
|
||||
pub struct Variant_ {
|
||||
pub ident: Ident,
|
||||
pub attrs: Vec<Attribute>,
|
||||
|
@ -1863,7 +1873,7 @@ pub struct Variant_ {
|
|||
pub type Variant = Spanned<Variant_>;
|
||||
|
||||
/// Part of `use` item to the right of its prefix.
|
||||
#[derive(Clone, PartialEq, Eq, RustcEncodable, RustcDecodable, Hash, Debug)]
|
||||
#[derive(Clone, RustcEncodable, RustcDecodable, Debug)]
|
||||
pub enum UseTreeKind {
|
||||
/// `use prefix` or `use prefix as rename`
|
||||
///
|
||||
|
@ -1878,7 +1888,7 @@ pub enum UseTreeKind {
|
|||
|
||||
/// A tree of paths sharing common prefixes.
|
||||
/// Used in `use` items both at top-level and inside of braces in import groups.
|
||||
#[derive(Clone, PartialEq, Eq, RustcEncodable, RustcDecodable, Hash, Debug)]
|
||||
#[derive(Clone, RustcEncodable, RustcDecodable, Debug)]
|
||||
pub struct UseTree {
|
||||
pub prefix: Path,
|
||||
pub kind: UseTreeKind,
|
||||
|
@ -1899,7 +1909,7 @@ impl UseTree {
|
|||
/// Distinguishes between Attributes that decorate items and Attributes that
|
||||
/// are contained as statements within items. These two cases need to be
|
||||
/// distinguished for pretty-printing.
|
||||
#[derive(Clone, PartialEq, Eq, RustcEncodable, RustcDecodable, Hash, Debug, Copy)]
|
||||
#[derive(Clone, PartialEq, RustcEncodable, RustcDecodable, Debug, Copy)]
|
||||
pub enum AttrStyle {
|
||||
Outer,
|
||||
Inner,
|
||||
|
@ -1910,7 +1920,7 @@ pub struct AttrId(pub usize);
|
|||
|
||||
/// Meta-data associated with an item
|
||||
/// Doc-comments are promoted to attributes that have is_sugared_doc = true
|
||||
#[derive(Clone, PartialEq, Eq, RustcEncodable, RustcDecodable, Hash, Debug)]
|
||||
#[derive(Clone, RustcEncodable, RustcDecodable, Debug)]
|
||||
pub struct Attribute {
|
||||
pub id: AttrId,
|
||||
pub style: AttrStyle,
|
||||
|
@ -1926,13 +1936,13 @@ pub struct Attribute {
|
|||
/// that the ref_id is for. The impl_id maps to the "self type" of this impl.
|
||||
/// If this impl is an ItemKind::Impl, the impl_id is redundant (it could be the
|
||||
/// same as the impl's node id).
|
||||
#[derive(Clone, PartialEq, Eq, RustcEncodable, RustcDecodable, Hash, Debug)]
|
||||
#[derive(Clone, RustcEncodable, RustcDecodable, Debug)]
|
||||
pub struct TraitRef {
|
||||
pub path: Path,
|
||||
pub ref_id: NodeId,
|
||||
}
|
||||
|
||||
#[derive(Clone, PartialEq, Eq, RustcEncodable, RustcDecodable, Hash, Debug)]
|
||||
#[derive(Clone, RustcEncodable, RustcDecodable, Debug)]
|
||||
pub struct PolyTraitRef {
|
||||
/// The `'a` in `<'a> Foo<&'a T>`
|
||||
pub bound_generic_params: Vec<GenericParam>,
|
||||
|
@ -1953,7 +1963,7 @@ impl PolyTraitRef {
|
|||
}
|
||||
}
|
||||
|
||||
#[derive(Copy, Clone, PartialEq, Eq, RustcEncodable, RustcDecodable, Hash, Debug)]
|
||||
#[derive(Copy, Clone, RustcEncodable, RustcDecodable, Debug)]
|
||||
pub enum CrateSugar {
|
||||
/// Source is `pub(crate)`
|
||||
PubCrate,
|
||||
|
@ -1964,7 +1974,7 @@ pub enum CrateSugar {
|
|||
|
||||
pub type Visibility = Spanned<VisibilityKind>;
|
||||
|
||||
#[derive(Clone, PartialEq, Eq, RustcEncodable, RustcDecodable, Hash, Debug)]
|
||||
#[derive(Clone, RustcEncodable, RustcDecodable, Debug)]
|
||||
pub enum VisibilityKind {
|
||||
Public,
|
||||
Crate(CrateSugar),
|
||||
|
@ -1972,10 +1982,16 @@ pub enum VisibilityKind {
|
|||
Inherited,
|
||||
}
|
||||
|
||||
impl VisibilityKind {
|
||||
pub fn is_pub(&self) -> bool {
|
||||
if let VisibilityKind::Public = *self { true } else { false }
|
||||
}
|
||||
}
|
||||
|
||||
/// Field of a struct.
|
||||
///
|
||||
/// E.g. `bar: usize` as in `struct Foo { bar: usize }`
|
||||
#[derive(Clone, PartialEq, Eq, RustcEncodable, RustcDecodable, Hash, Debug)]
|
||||
#[derive(Clone, RustcEncodable, RustcDecodable, Debug)]
|
||||
pub struct StructField {
|
||||
pub span: Span,
|
||||
pub ident: Option<Ident>,
|
||||
|
@ -1996,7 +2012,7 @@ pub struct StructField {
|
|||
/// used for `Struct`-structs (but still presents). Structures don't have an analogue of "Id of
|
||||
/// the variant itself" from enum variants.
|
||||
/// Id of the whole struct lives in `Item`.
|
||||
#[derive(Clone, PartialEq, Eq, RustcEncodable, RustcDecodable, Hash, Debug)]
|
||||
#[derive(Clone, RustcEncodable, RustcDecodable, Debug)]
|
||||
pub enum VariantData {
|
||||
/// Struct variant.
|
||||
///
|
||||
|
@ -2038,7 +2054,7 @@ impl VariantData {
|
|||
/// An item
|
||||
///
|
||||
/// The name might be a dummy name in case of anonymous items
|
||||
#[derive(Clone, PartialEq, Eq, RustcEncodable, RustcDecodable, Hash, Debug)]
|
||||
#[derive(Clone, RustcEncodable, RustcDecodable, Debug)]
|
||||
pub struct Item {
|
||||
pub ident: Ident,
|
||||
pub attrs: Vec<Attribute>,
|
||||
|
@ -2061,7 +2077,7 @@ pub struct Item {
|
|||
///
|
||||
/// All the information between the visibility & the name of the function is
|
||||
/// included in this struct (e.g. `async unsafe fn` or `const extern "C" fn`)
|
||||
#[derive(Clone, Copy, PartialEq, Eq, RustcEncodable, RustcDecodable, Hash, Debug)]
|
||||
#[derive(Clone, Copy, RustcEncodable, RustcDecodable, Debug)]
|
||||
pub struct FnHeader {
|
||||
pub unsafety: Unsafety,
|
||||
pub asyncness: IsAsync,
|
||||
|
@ -2080,7 +2096,7 @@ impl Default for FnHeader {
|
|||
}
|
||||
}
|
||||
|
||||
#[derive(Clone, PartialEq, Eq, RustcEncodable, RustcDecodable, Hash, Debug)]
|
||||
#[derive(Clone, RustcEncodable, RustcDecodable, Debug)]
|
||||
pub enum ItemKind {
|
||||
/// An `extern crate` item, with optional *original* crate name if the crate was renamed.
|
||||
///
|
||||
|
@ -2179,7 +2195,7 @@ impl ItemKind {
|
|||
}
|
||||
}
|
||||
|
||||
#[derive(Clone, PartialEq, Eq, RustcEncodable, RustcDecodable, Hash, Debug)]
|
||||
#[derive(Clone, RustcEncodable, RustcDecodable, Debug)]
|
||||
pub struct ForeignItem {
|
||||
pub ident: Ident,
|
||||
pub attrs: Vec<Attribute>,
|
||||
|
@ -2190,7 +2206,7 @@ pub struct ForeignItem {
|
|||
}
|
||||
|
||||
/// An item within an `extern` block
|
||||
#[derive(Clone, PartialEq, Eq, RustcEncodable, RustcDecodable, Hash, Debug)]
|
||||
#[derive(Clone, RustcEncodable, RustcDecodable, Debug)]
|
||||
pub enum ForeignItemKind {
|
||||
/// A foreign function
|
||||
Fn(P<FnDecl>, Generics),
|
||||
|
|
|
@ -725,7 +725,7 @@ pub trait Resolver {
|
|||
fn check_unused_macros(&self);
|
||||
}
|
||||
|
||||
#[derive(Copy, Clone, Debug, PartialEq)]
|
||||
#[derive(Copy, Clone, PartialEq, Debug)]
|
||||
pub enum Determinacy {
|
||||
Determined,
|
||||
Undetermined,
|
||||
|
|
|
@ -22,7 +22,7 @@ use rustc_data_structures::sync::Lrc;
|
|||
|
||||
/// Contains the sub-token-trees of a "delimited" token tree, such as the contents of `(`. Note
|
||||
/// that the delimiter itself might be `NoDelim`.
|
||||
#[derive(Clone, PartialEq, Eq, RustcEncodable, RustcDecodable, Hash, Debug)]
|
||||
#[derive(Clone, PartialEq, RustcEncodable, RustcDecodable, Debug)]
|
||||
pub struct Delimited {
|
||||
pub delim: token::DelimToken,
|
||||
pub tts: Vec<TokenTree>,
|
||||
|
@ -60,7 +60,7 @@ impl Delimited {
|
|||
}
|
||||
}
|
||||
|
||||
#[derive(Clone, PartialEq, Eq, RustcEncodable, RustcDecodable, Hash, Debug)]
|
||||
#[derive(Clone, PartialEq, RustcEncodable, RustcDecodable, Debug)]
|
||||
pub struct SequenceRepetition {
|
||||
/// The sequence of token trees
|
||||
pub tts: Vec<TokenTree>,
|
||||
|
@ -74,7 +74,7 @@ pub struct SequenceRepetition {
|
|||
|
||||
/// A Kleene-style [repetition operator](http://en.wikipedia.org/wiki/Kleene_star)
|
||||
/// for token sequences.
|
||||
#[derive(Clone, PartialEq, Eq, RustcEncodable, RustcDecodable, Hash, Debug, Copy)]
|
||||
#[derive(Clone, PartialEq, RustcEncodable, RustcDecodable, Hash, Debug, Copy)]
|
||||
pub enum KleeneOp {
|
||||
/// Kleene star (`*`) for zero or more repetitions
|
||||
ZeroOrMore,
|
||||
|
@ -85,7 +85,7 @@ pub enum KleeneOp {
|
|||
|
||||
/// Similar to `tokenstream::TokenTree`, except that `$i`, `$i:ident`, and `$(...)`
|
||||
/// are "first-class" token trees. Useful for parsing macros.
|
||||
#[derive(Debug, Clone, PartialEq, Eq, RustcEncodable, RustcDecodable, Hash)]
|
||||
#[derive(Debug, Clone, PartialEq, RustcEncodable, RustcDecodable)]
|
||||
pub enum TokenTree {
|
||||
Token(Span, token::Token),
|
||||
Delimited(Span, Lrc<Delimited>),
|
||||
|
|
|
@ -632,7 +632,7 @@ declare_features! (
|
|||
// move that documentation into the relevant place in the other docs, and
|
||||
// remove the chapter on the flag.
|
||||
|
||||
#[derive(PartialEq, Copy, Clone, Debug)]
|
||||
#[derive(Copy, Clone, PartialEq, Debug)]
|
||||
pub enum AttributeType {
|
||||
/// Normal, builtin attribute that is consumed
|
||||
/// by the compiler before the unused_attribute check
|
||||
|
@ -665,7 +665,7 @@ impl AttributeGate {
|
|||
}
|
||||
}
|
||||
|
||||
#[derive(Copy, Clone, PartialEq, Eq, Debug)]
|
||||
#[derive(Copy, Clone, Debug)]
|
||||
pub enum Stability {
|
||||
Unstable,
|
||||
// Argument is tracking issue link.
|
||||
|
@ -1113,7 +1113,7 @@ const GATED_CFGS: &[(&str, &str, fn(&Features) -> bool)] = &[
|
|||
("target_has_atomic", "cfg_target_has_atomic", cfg_fn!(cfg_target_has_atomic)),
|
||||
];
|
||||
|
||||
#[derive(Debug, Eq, PartialEq)]
|
||||
#[derive(Debug)]
|
||||
pub struct GatedCfg {
|
||||
span: Span,
|
||||
index: usize,
|
||||
|
@ -1272,7 +1272,7 @@ pub enum GateIssue {
|
|||
Library(Option<u32>)
|
||||
}
|
||||
|
||||
#[derive(Debug, Copy, Clone, PartialEq, Eq)]
|
||||
#[derive(Debug, Copy, Clone, PartialEq)]
|
||||
pub enum GateStrength {
|
||||
/// A hard error. (Most feature gates should use this.)
|
||||
Hard,
|
||||
|
@ -1704,7 +1704,9 @@ impl<'a> Visitor<'a> for PostExpansionVisitor<'a> {
|
|||
|
||||
fn visit_fn_ret_ty(&mut self, ret_ty: &'a ast::FunctionRetTy) {
|
||||
if let ast::FunctionRetTy::Ty(ref output_ty) = *ret_ty {
|
||||
if output_ty.node != ast::TyKind::Never {
|
||||
if let ast::TyKind::Never = output_ty.node {
|
||||
// Do nothing
|
||||
} else {
|
||||
self.visit_ty(output_ty)
|
||||
}
|
||||
}
|
||||
|
@ -2046,7 +2048,7 @@ pub fn check_crate(krate: &ast::Crate,
|
|||
visit::walk_crate(visitor, krate);
|
||||
}
|
||||
|
||||
#[derive(Clone, Copy, PartialEq, Eq, Hash)]
|
||||
#[derive(Clone, Copy, Hash)]
|
||||
pub enum UnstableFeatures {
|
||||
/// Hard errors for unstable features are active, as on
|
||||
/// beta/stable channels.
|
||||
|
|
|
@ -16,7 +16,7 @@ use parse::token::{self, Nonterminal};
|
|||
use parse::parser::{Parser, TokenType, PathStyle};
|
||||
use tokenstream::TokenStream;
|
||||
|
||||
#[derive(PartialEq, Eq, Debug)]
|
||||
#[derive(Debug)]
|
||||
enum InnerAttributeParsePolicy<'a> {
|
||||
Permitted,
|
||||
NotPermitted { reason: &'a str },
|
||||
|
@ -94,7 +94,7 @@ impl<'a> Parser<'a> {
|
|||
let lo = self.span;
|
||||
self.bump();
|
||||
|
||||
if inner_parse_policy == InnerAttributeParsePolicy::Permitted {
|
||||
if let InnerAttributeParsePolicy::Permitted = inner_parse_policy {
|
||||
self.expected_tokens.push(TokenType::Token(token::Not));
|
||||
}
|
||||
let style = if self.token == token::Not {
|
||||
|
|
|
@ -26,7 +26,7 @@ pub mod comments;
|
|||
mod tokentrees;
|
||||
mod unicode_chars;
|
||||
|
||||
#[derive(Clone, PartialEq, Eq, Debug)]
|
||||
#[derive(Clone, Debug)]
|
||||
pub struct TokenAndSpan {
|
||||
pub tok: token::Token,
|
||||
pub sp: Span,
|
||||
|
@ -1842,7 +1842,8 @@ mod tests {
|
|||
tok: token::Ident(id, false),
|
||||
sp: Span::new(BytePos(21), BytePos(23), NO_EXPANSION),
|
||||
};
|
||||
assert_eq!(tok1, tok2);
|
||||
assert_eq!(tok1.tok, tok2.tok);
|
||||
assert_eq!(tok1.sp, tok2.sp);
|
||||
assert_eq!(string_reader.next_token().tok, token::Whitespace);
|
||||
// the 'main' id is already read:
|
||||
assert_eq!(string_reader.pos.clone(), BytePos(28));
|
||||
|
@ -1852,7 +1853,8 @@ mod tests {
|
|||
tok: mk_ident("main"),
|
||||
sp: Span::new(BytePos(24), BytePos(28), NO_EXPANSION),
|
||||
};
|
||||
assert_eq!(tok3, tok4);
|
||||
assert_eq!(tok3.tok, tok4.tok);
|
||||
assert_eq!(tok3.sp, tok4.sp);
|
||||
// the lparen is already read:
|
||||
assert_eq!(string_reader.pos.clone(), BytePos(29))
|
||||
})
|
||||
|
|
|
@ -673,22 +673,40 @@ fn integer_lit(s: &str, suffix: Option<Symbol>, diag: Option<(Span, &Handler)>)
|
|||
})
|
||||
}
|
||||
|
||||
/// `SeqSep` : a sequence separator (token)
|
||||
/// and whether a trailing separator is allowed.
|
||||
pub struct SeqSep {
|
||||
pub sep: Option<token::Token>,
|
||||
pub trailing_sep_allowed: bool,
|
||||
}
|
||||
|
||||
impl SeqSep {
|
||||
pub fn trailing_allowed(t: token::Token) -> SeqSep {
|
||||
SeqSep {
|
||||
sep: Some(t),
|
||||
trailing_sep_allowed: true,
|
||||
}
|
||||
}
|
||||
|
||||
pub fn none() -> SeqSep {
|
||||
SeqSep {
|
||||
sep: None,
|
||||
trailing_sep_allowed: false,
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
#[cfg(test)]
|
||||
mod tests {
|
||||
use super::*;
|
||||
use syntax_pos::{self, Span, BytePos, Pos, NO_EXPANSION};
|
||||
use codemap::{respan, Spanned};
|
||||
use syntax_pos::{Span, BytePos, Pos, NO_EXPANSION};
|
||||
use ast::{self, Ident, PatKind};
|
||||
use rustc_target::spec::abi::Abi;
|
||||
use attr::first_attr_value_str_by_name;
|
||||
use parse;
|
||||
use parse::parser::Parser;
|
||||
use print::pprust::item_to_string;
|
||||
use ptr::P;
|
||||
use tokenstream::{self, TokenTree};
|
||||
use util::parser_testing::{string_to_stream, string_to_parser};
|
||||
use util::parser_testing::{string_to_expr, string_to_item, string_to_stmt};
|
||||
use util::ThinVec;
|
||||
use util::parser_testing::string_to_stream;
|
||||
use util::parser_testing::{string_to_expr, string_to_item};
|
||||
use with_globals;
|
||||
|
||||
// produce a syntax_pos::span
|
||||
|
@ -696,42 +714,6 @@ mod tests {
|
|||
Span::new(BytePos(a), BytePos(b), NO_EXPANSION)
|
||||
}
|
||||
|
||||
fn str2seg(s: &str, lo: u32, hi: u32) -> ast::PathSegment {
|
||||
ast::PathSegment::from_ident(Ident::new(Symbol::intern(s), sp(lo, hi)))
|
||||
}
|
||||
|
||||
#[test] fn path_exprs_1() {
|
||||
with_globals(|| {
|
||||
assert!(string_to_expr("a".to_string()) ==
|
||||
P(ast::Expr{
|
||||
id: ast::DUMMY_NODE_ID,
|
||||
node: ast::ExprKind::Path(None, ast::Path {
|
||||
span: sp(0, 1),
|
||||
segments: vec![str2seg("a", 0, 1)],
|
||||
}),
|
||||
span: sp(0, 1),
|
||||
attrs: ThinVec::new(),
|
||||
}))
|
||||
})
|
||||
}
|
||||
|
||||
#[test] fn path_exprs_2 () {
|
||||
with_globals(|| {
|
||||
assert!(string_to_expr("::a::b".to_string()) ==
|
||||
P(ast::Expr {
|
||||
id: ast::DUMMY_NODE_ID,
|
||||
node: ast::ExprKind::Path(None, ast::Path {
|
||||
span: sp(0, 6),
|
||||
segments: vec![ast::PathSegment::crate_root(sp(0, 0)),
|
||||
str2seg("a", 2, 3),
|
||||
str2seg("b", 5, 6)]
|
||||
}),
|
||||
span: sp(0, 6),
|
||||
attrs: ThinVec::new(),
|
||||
}))
|
||||
})
|
||||
}
|
||||
|
||||
#[should_panic]
|
||||
#[test] fn bad_path_expr_1() {
|
||||
with_globals(|| {
|
||||
|
@ -832,143 +814,6 @@ mod tests {
|
|||
})
|
||||
}
|
||||
|
||||
#[test] fn ret_expr() {
|
||||
with_globals(|| {
|
||||
assert!(string_to_expr("return d".to_string()) ==
|
||||
P(ast::Expr{
|
||||
id: ast::DUMMY_NODE_ID,
|
||||
node:ast::ExprKind::Ret(Some(P(ast::Expr{
|
||||
id: ast::DUMMY_NODE_ID,
|
||||
node:ast::ExprKind::Path(None, ast::Path{
|
||||
span: sp(7, 8),
|
||||
segments: vec![str2seg("d", 7, 8)],
|
||||
}),
|
||||
span:sp(7,8),
|
||||
attrs: ThinVec::new(),
|
||||
}))),
|
||||
span:sp(0,8),
|
||||
attrs: ThinVec::new(),
|
||||
}))
|
||||
})
|
||||
}
|
||||
|
||||
#[test] fn parse_stmt_1 () {
|
||||
with_globals(|| {
|
||||
assert!(string_to_stmt("b;".to_string()) ==
|
||||
Some(ast::Stmt {
|
||||
node: ast::StmtKind::Expr(P(ast::Expr {
|
||||
id: ast::DUMMY_NODE_ID,
|
||||
node: ast::ExprKind::Path(None, ast::Path {
|
||||
span:sp(0,1),
|
||||
segments: vec![str2seg("b", 0, 1)],
|
||||
}),
|
||||
span: sp(0,1),
|
||||
attrs: ThinVec::new()})),
|
||||
id: ast::DUMMY_NODE_ID,
|
||||
span: sp(0,1)}))
|
||||
})
|
||||
}
|
||||
|
||||
fn parser_done(p: Parser){
|
||||
assert_eq!(p.token.clone(), token::Eof);
|
||||
}
|
||||
|
||||
#[test] fn parse_ident_pat () {
|
||||
with_globals(|| {
|
||||
let sess = ParseSess::new(FilePathMapping::empty());
|
||||
let mut parser = string_to_parser(&sess, "b".to_string());
|
||||
assert!(panictry!(parser.parse_pat())
|
||||
== P(ast::Pat{
|
||||
id: ast::DUMMY_NODE_ID,
|
||||
node: PatKind::Ident(ast::BindingMode::ByValue(ast::Mutability::Immutable),
|
||||
Ident::new(Symbol::intern("b"), sp(0, 1)),
|
||||
None),
|
||||
span: sp(0,1)}));
|
||||
parser_done(parser);
|
||||
})
|
||||
}
|
||||
|
||||
// check the contents of the tt manually:
|
||||
#[test] fn parse_fundecl () {
|
||||
with_globals(|| {
|
||||
// this test depends on the intern order of "fn" and "i32"
|
||||
let item = string_to_item("fn a (b : i32) { b; }".to_string()).map(|m| {
|
||||
m.map(|mut m| {
|
||||
m.tokens = None;
|
||||
m
|
||||
})
|
||||
});
|
||||
assert_eq!(item,
|
||||
Some(
|
||||
P(ast::Item{ident:Ident::from_str("a"),
|
||||
attrs:Vec::new(),
|
||||
id: ast::DUMMY_NODE_ID,
|
||||
tokens: None,
|
||||
node: ast::ItemKind::Fn(P(ast::FnDecl {
|
||||
inputs: vec![ast::Arg{
|
||||
ty: P(ast::Ty{id: ast::DUMMY_NODE_ID,
|
||||
node: ast::TyKind::Path(None, ast::Path{
|
||||
span:sp(10,13),
|
||||
segments: vec![str2seg("i32", 10, 13)],
|
||||
}),
|
||||
span:sp(10,13)
|
||||
}),
|
||||
pat: P(ast::Pat {
|
||||
id: ast::DUMMY_NODE_ID,
|
||||
node: PatKind::Ident(
|
||||
ast::BindingMode::ByValue(
|
||||
ast::Mutability::Immutable),
|
||||
Ident::new(Symbol::intern("b"), sp(6, 7)),
|
||||
None
|
||||
),
|
||||
span: sp(6,7)
|
||||
}),
|
||||
id: ast::DUMMY_NODE_ID
|
||||
}],
|
||||
output: ast::FunctionRetTy::Default(sp(15, 15)),
|
||||
variadic: false
|
||||
}),
|
||||
ast::FnHeader {
|
||||
unsafety: ast::Unsafety::Normal,
|
||||
asyncness: ast::IsAsync::NotAsync,
|
||||
constness: Spanned {
|
||||
span: sp(0,2),
|
||||
node: ast::Constness::NotConst,
|
||||
},
|
||||
abi: Abi::Rust,
|
||||
},
|
||||
ast::Generics{
|
||||
params: Vec::new(),
|
||||
where_clause: ast::WhereClause {
|
||||
id: ast::DUMMY_NODE_ID,
|
||||
predicates: Vec::new(),
|
||||
span: syntax_pos::DUMMY_SP,
|
||||
},
|
||||
span: syntax_pos::DUMMY_SP,
|
||||
},
|
||||
P(ast::Block {
|
||||
stmts: vec![ast::Stmt {
|
||||
node: ast::StmtKind::Semi(P(ast::Expr{
|
||||
id: ast::DUMMY_NODE_ID,
|
||||
node: ast::ExprKind::Path(None,
|
||||
ast::Path{
|
||||
span:sp(17,18),
|
||||
segments: vec![str2seg("b", 17, 18)],
|
||||
}),
|
||||
span: sp(17,18),
|
||||
attrs: ThinVec::new()})),
|
||||
id: ast::DUMMY_NODE_ID,
|
||||
span: sp(17,19)}],
|
||||
id: ast::DUMMY_NODE_ID,
|
||||
rules: ast::BlockCheckMode::Default, // no idea
|
||||
span: sp(15,21),
|
||||
recovered: false,
|
||||
})),
|
||||
vis: respan(sp(0, 0), ast::VisibilityKind::Inherited),
|
||||
span: sp(0,21)})));
|
||||
})
|
||||
}
|
||||
|
||||
#[test] fn parse_use() {
|
||||
with_globals(|| {
|
||||
let use_s = "use foo::bar::baz;";
|
||||
|
@ -1133,26 +978,3 @@ mod tests {
|
|||
});
|
||||
}
|
||||
}
|
||||
|
||||
/// `SeqSep` : a sequence separator (token)
|
||||
/// and whether a trailing separator is allowed.
|
||||
pub struct SeqSep {
|
||||
pub sep: Option<token::Token>,
|
||||
pub trailing_sep_allowed: bool,
|
||||
}
|
||||
|
||||
impl SeqSep {
|
||||
pub fn trailing_allowed(t: token::Token) -> SeqSep {
|
||||
SeqSep {
|
||||
sep: Some(t),
|
||||
trailing_sep_allowed: true,
|
||||
}
|
||||
}
|
||||
|
||||
pub fn none() -> SeqSep {
|
||||
SeqSep {
|
||||
sep: None,
|
||||
trailing_sep_allowed: false,
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
|
@ -95,13 +95,13 @@ pub enum PathStyle {
|
|||
Mod,
|
||||
}
|
||||
|
||||
#[derive(Clone, Copy, Debug, PartialEq)]
|
||||
#[derive(Clone, Copy, PartialEq, Debug)]
|
||||
enum SemiColonMode {
|
||||
Break,
|
||||
Ignore,
|
||||
}
|
||||
|
||||
#[derive(Clone, Copy, Debug, PartialEq)]
|
||||
#[derive(Clone, Copy, PartialEq, Debug)]
|
||||
enum BlockMode {
|
||||
Break,
|
||||
Ignore,
|
||||
|
@ -376,7 +376,7 @@ impl TokenCursor {
|
|||
}
|
||||
}
|
||||
|
||||
#[derive(PartialEq, Eq, Clone)]
|
||||
#[derive(Clone, PartialEq)]
|
||||
crate enum TokenType {
|
||||
Token(token::Token),
|
||||
Keyword(keywords::Keyword),
|
||||
|
@ -522,7 +522,7 @@ fn dummy_arg(span: Span) -> Arg {
|
|||
Arg { ty: P(ty), pat: pat, id: ast::DUMMY_NODE_ID }
|
||||
}
|
||||
|
||||
#[derive(Copy, Clone, Debug, PartialEq, Eq)]
|
||||
#[derive(Copy, Clone, Debug)]
|
||||
enum TokenExpectType {
|
||||
Expect,
|
||||
NoExpect,
|
||||
|
@ -6999,7 +6999,7 @@ impl<'a> Parser<'a> {
|
|||
|
||||
// Verify whether we have encountered a struct or method definition where the user forgot to
|
||||
// add the `struct` or `fn` keyword after writing `pub`: `pub S {}`
|
||||
if visibility.node == VisibilityKind::Public &&
|
||||
if visibility.node.is_pub() &&
|
||||
self.check_ident() &&
|
||||
self.look_ahead(1, |t| *t != token::Not)
|
||||
{
|
||||
|
|
|
@ -30,7 +30,7 @@ use std::{cmp, fmt};
|
|||
use std::mem;
|
||||
use rustc_data_structures::sync::{Lrc, Lock};
|
||||
|
||||
#[derive(Clone, RustcEncodable, RustcDecodable, PartialEq, Eq, Hash, Debug, Copy)]
|
||||
#[derive(Clone, PartialEq, RustcEncodable, RustcDecodable, Hash, Debug, Copy)]
|
||||
pub enum BinOpToken {
|
||||
Plus,
|
||||
Minus,
|
||||
|
@ -45,7 +45,7 @@ pub enum BinOpToken {
|
|||
}
|
||||
|
||||
/// A delimiter token
|
||||
#[derive(Clone, RustcEncodable, RustcDecodable, PartialEq, Eq, Hash, Debug, Copy)]
|
||||
#[derive(Clone, PartialEq, RustcEncodable, RustcDecodable, Hash, Debug, Copy)]
|
||||
pub enum DelimToken {
|
||||
/// A round parenthesis: `(` or `)`
|
||||
Paren,
|
||||
|
@ -67,7 +67,7 @@ impl DelimToken {
|
|||
}
|
||||
}
|
||||
|
||||
#[derive(Clone, RustcEncodable, RustcDecodable, PartialEq, Eq, Hash, Debug, Copy)]
|
||||
#[derive(Clone, PartialEq, RustcEncodable, RustcDecodable, Hash, Debug, Copy)]
|
||||
pub enum Lit {
|
||||
Byte(ast::Name),
|
||||
Char(ast::Name),
|
||||
|
@ -139,7 +139,7 @@ fn ident_can_begin_type(ident: ast::Ident, is_raw: bool) -> bool {
|
|||
].contains(&ident.name)
|
||||
}
|
||||
|
||||
#[derive(Clone, RustcEncodable, RustcDecodable, PartialEq, Eq, Hash, Debug)]
|
||||
#[derive(Clone, RustcEncodable, RustcDecodable, PartialEq, Debug)]
|
||||
pub enum Token {
|
||||
/* Expression-operator symbols. */
|
||||
Eq,
|
||||
|
@ -638,7 +638,7 @@ impl Token {
|
|||
}
|
||||
}
|
||||
|
||||
#[derive(Clone, RustcEncodable, RustcDecodable, Eq, Hash)]
|
||||
#[derive(Clone, RustcEncodable, RustcDecodable)]
|
||||
/// For interpolation during macro expansion.
|
||||
pub enum Nonterminal {
|
||||
NtItem(P<ast::Item>),
|
||||
|
|
|
@ -2641,7 +2641,9 @@ impl<'a> State<'a> {
|
|||
|s, p| s.print_pat(p))?;
|
||||
if let Some(ref p) = *slice {
|
||||
if !before.is_empty() { self.word_space(",")?; }
|
||||
if p.node != PatKind::Wild {
|
||||
if let PatKind::Wild = p.node {
|
||||
// Print nothing
|
||||
} else {
|
||||
self.print_pat(p)?;
|
||||
}
|
||||
self.s.word("..")?;
|
||||
|
|
|
@ -46,7 +46,7 @@ use serialize::{Encodable, Decodable, Encoder, Decoder};
|
|||
use rustc_data_structures::stable_hasher::{StableHasher, StableHasherResult,
|
||||
HashStable};
|
||||
/// An owned smart pointer.
|
||||
#[derive(Hash, PartialEq, Eq, PartialOrd, Ord)]
|
||||
#[derive(Hash, PartialEq, Eq)]
|
||||
pub struct P<T: ?Sized> {
|
||||
ptr: Box<T>
|
||||
}
|
||||
|
|
|
@ -329,7 +329,6 @@ fn ignored_span(cx: &TestCtxt, sp: Span) -> Span {
|
|||
sp.with_ctxt(cx.ctxt)
|
||||
}
|
||||
|
||||
#[derive(PartialEq)]
|
||||
enum HasTestSignature {
|
||||
Yes,
|
||||
No(BadTestSignature),
|
||||
|
@ -354,7 +353,7 @@ fn is_test_fn(cx: &TestCtxt, i: &ast::Item) -> bool {
|
|||
// type implements the `Termination` trait as `libtest` enforces that.
|
||||
let has_output = match decl.output {
|
||||
ast::FunctionRetTy::Default(..) => false,
|
||||
ast::FunctionRetTy::Ty(ref t) if t.node == ast::TyKind::Tup(vec![]) => false,
|
||||
ast::FunctionRetTy::Ty(ref t) if t.node.is_unit() => false,
|
||||
_ => true
|
||||
};
|
||||
|
||||
|
|
|
@ -33,10 +33,9 @@ use util::RcSlice;
|
|||
|
||||
use std::borrow::Cow;
|
||||
use std::{fmt, iter, mem};
|
||||
use std::hash::{self, Hash};
|
||||
|
||||
/// A delimited sequence of token trees
|
||||
#[derive(Clone, PartialEq, Eq, RustcEncodable, RustcDecodable, Hash, Debug)]
|
||||
#[derive(Clone, PartialEq, RustcEncodable, RustcDecodable, Debug)]
|
||||
pub struct Delimited {
|
||||
/// The type of delimiter
|
||||
pub delim: token::DelimToken,
|
||||
|
@ -93,7 +92,7 @@ impl Delimited {
|
|||
///
|
||||
/// The RHS of an MBE macro is the only place `SubstNt`s are substituted.
|
||||
/// Nothing special happens to misnamed or misplaced `SubstNt`s.
|
||||
#[derive(Debug, Clone, PartialEq, Eq, RustcEncodable, RustcDecodable, Hash)]
|
||||
#[derive(Debug, Clone, PartialEq, RustcEncodable, RustcDecodable)]
|
||||
pub enum TokenTree {
|
||||
/// A single token
|
||||
Token(Span, token::Token),
|
||||
|
@ -605,14 +604,6 @@ impl Decodable for TokenStream {
|
|||
}
|
||||
}
|
||||
|
||||
impl Hash for TokenStream {
|
||||
fn hash<H: hash::Hasher>(&self, state: &mut H) {
|
||||
for tree in self.trees() {
|
||||
tree.hash(state);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
impl Encodable for ThinTokenStream {
|
||||
fn encode<E: Encoder>(&self, encoder: &mut E) -> Result<(), E::Error> {
|
||||
TokenStream::from(self.clone()).encode(encoder)
|
||||
|
@ -625,13 +616,6 @@ impl Decodable for ThinTokenStream {
|
|||
}
|
||||
}
|
||||
|
||||
impl Hash for ThinTokenStream {
|
||||
fn hash<H: hash::Hasher>(&self, state: &mut H) {
|
||||
TokenStream::from(self.clone()).hash(state);
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
#[cfg(test)]
|
||||
mod tests {
|
||||
use super::*;
|
||||
|
|
|
@ -11,12 +11,10 @@ use parse::token::{Token, BinOpToken};
|
|||
use symbol::keywords;
|
||||
use ast::{self, BinOpKind};
|
||||
|
||||
use std::cmp::Ordering;
|
||||
|
||||
/// Associative operator with precedence.
|
||||
///
|
||||
/// This is the enum which specifies operator precedence and fixity to the parser.
|
||||
#[derive(Debug, PartialEq, Eq)]
|
||||
#[derive(PartialEq, Debug)]
|
||||
pub enum AssocOp {
|
||||
/// `+`
|
||||
Add,
|
||||
|
@ -70,7 +68,7 @@ pub enum AssocOp {
|
|||
Colon,
|
||||
}
|
||||
|
||||
#[derive(Debug, PartialEq, Eq)]
|
||||
#[derive(PartialEq, Debug)]
|
||||
pub enum Fixity {
|
||||
/// The operator is left-associative
|
||||
Left,
|
||||
|
@ -230,7 +228,7 @@ pub const PREC_POSTFIX: i8 = 60;
|
|||
pub const PREC_PAREN: i8 = 99;
|
||||
pub const PREC_FORCE_PAREN: i8 = 100;
|
||||
|
||||
#[derive(Debug, Clone, Copy, PartialEq, Eq)]
|
||||
#[derive(Debug, Clone, Copy)]
|
||||
pub enum ExprPrecedence {
|
||||
Closure,
|
||||
Break,
|
||||
|
@ -280,18 +278,6 @@ pub enum ExprPrecedence {
|
|||
Async,
|
||||
}
|
||||
|
||||
impl PartialOrd for ExprPrecedence {
|
||||
fn partial_cmp(&self, other: &Self) -> Option<Ordering> {
|
||||
Some(self.order().cmp(&other.order()))
|
||||
}
|
||||
}
|
||||
|
||||
impl Ord for ExprPrecedence {
|
||||
fn cmp(&self, other: &Self) -> Ordering {
|
||||
self.order().cmp(&other.order())
|
||||
}
|
||||
}
|
||||
|
||||
impl ExprPrecedence {
|
||||
pub fn order(self) -> i8 {
|
||||
match self {
|
||||
|
|
|
@ -63,14 +63,6 @@ pub fn string_to_item (source_str : String) -> Option<P<ast::Item>> {
|
|||
})
|
||||
}
|
||||
|
||||
/// Parse a string, return a stmt
|
||||
pub fn string_to_stmt(source_str : String) -> Option<ast::Stmt> {
|
||||
let ps = ParseSess::new(FilePathMapping::empty());
|
||||
with_error_checking_parse(source_str, &ps, |p| {
|
||||
p.parse_stmt()
|
||||
})
|
||||
}
|
||||
|
||||
/// Parse a string, return a pat. Uses "irrefutable"... which doesn't
|
||||
/// (currently) affect parsing.
|
||||
pub fn string_to_pat(source_str: String) -> P<ast::Pat> {
|
||||
|
|
|
@ -28,7 +28,7 @@ use syntax_pos::Span;
|
|||
use parse::token::Token;
|
||||
use tokenstream::{TokenTree, TokenStream};
|
||||
|
||||
#[derive(Copy, Clone, PartialEq, Eq)]
|
||||
#[derive(Copy, Clone)]
|
||||
pub enum FnKind<'a> {
|
||||
/// fn foo() or extern "Abi" fn foo()
|
||||
ItemFn(Ident, FnHeader, &'a Visibility, &'a Block),
|
||||
|
|
|
@ -188,7 +188,6 @@ pub use self::StaticFields::*;
|
|||
pub use self::SubstructureFields::*;
|
||||
|
||||
use std::cell::RefCell;
|
||||
use std::collections::HashSet;
|
||||
use std::vec;
|
||||
|
||||
use rustc_target::spec::abi::Abi;
|
||||
|
@ -617,7 +616,6 @@ impl<'a> TraitDef<'a> {
|
|||
.map(|ty_param| ty_param.ident.name)
|
||||
.collect();
|
||||
|
||||
let mut processed_field_types = HashSet::new();
|
||||
for field_ty in field_tys {
|
||||
let tys = find_type_parameters(&field_ty, &ty_param_names, self.span, cx);
|
||||
|
||||
|
@ -625,11 +623,9 @@ impl<'a> TraitDef<'a> {
|
|||
// if we have already handled this type, skip it
|
||||
if let ast::TyKind::Path(_, ref p) = ty.node {
|
||||
if p.segments.len() == 1 &&
|
||||
ty_param_names.contains(&p.segments[0].ident.name) ||
|
||||
processed_field_types.contains(&p.segments) {
|
||||
ty_param_names.contains(&p.segments[0].ident.name) {
|
||||
continue;
|
||||
};
|
||||
processed_field_types.insert(p.segments.clone());
|
||||
}
|
||||
let mut bounds: Vec<_> = self.additional_bounds
|
||||
.iter()
|
||||
|
@ -913,7 +909,7 @@ impl<'a> MethodDef<'a> {
|
|||
Self_ if nonstatic => {
|
||||
self_args.push(arg_expr);
|
||||
}
|
||||
Ptr(ref ty, _) if **ty == Self_ && nonstatic => {
|
||||
Ptr(ref ty, _) if (if let Self_ = **ty { true } else { false }) && nonstatic => {
|
||||
self_args.push(cx.expr_deref(trait_.span, arg_expr))
|
||||
}
|
||||
_ => {
|
||||
|
|
|
@ -24,8 +24,7 @@ use syntax_pos::Span;
|
|||
use syntax_pos::symbol::keywords;
|
||||
|
||||
/// The types of pointers
|
||||
#[derive(Clone, Eq, PartialEq)]
|
||||
#[allow(dead_code)]
|
||||
#[derive(Clone)]
|
||||
pub enum PtrTy<'a> {
|
||||
/// &'lifetime mut
|
||||
Borrowed(Option<&'a str>, ast::Mutability),
|
||||
|
@ -35,7 +34,7 @@ pub enum PtrTy<'a> {
|
|||
|
||||
/// A path, e.g. `::std::option::Option::<i32>` (global). Has support
|
||||
/// for type parameters and a lifetime.
|
||||
#[derive(Clone, Eq, PartialEq)]
|
||||
#[derive(Clone)]
|
||||
pub struct Path<'a> {
|
||||
path: Vec<&'a str>,
|
||||
lifetime: Option<&'a str>,
|
||||
|
@ -43,7 +42,7 @@ pub struct Path<'a> {
|
|||
kind: PathKind,
|
||||
}
|
||||
|
||||
#[derive(Clone, Eq, PartialEq)]
|
||||
#[derive(Clone)]
|
||||
pub enum PathKind {
|
||||
Local,
|
||||
Global,
|
||||
|
@ -107,7 +106,7 @@ impl<'a> Path<'a> {
|
|||
}
|
||||
|
||||
/// A type. Supports pointers, Self, and literals
|
||||
#[derive(Clone, Eq, PartialEq)]
|
||||
#[derive(Clone)]
|
||||
pub enum Ty<'a> {
|
||||
Self_,
|
||||
/// &/Box/ Ty
|
||||
|
|
|
@ -12,7 +12,7 @@ pub mod printf {
|
|||
use super::strcursor::StrCursor as Cur;
|
||||
|
||||
/// Represents a single `printf`-style substitution.
|
||||
#[derive(Clone, Eq, PartialEq, Debug)]
|
||||
#[derive(Clone, PartialEq, Debug)]
|
||||
pub enum Substitution<'a> {
|
||||
/// A formatted output substitution.
|
||||
Format(Format<'a>),
|
||||
|
@ -40,7 +40,7 @@ pub mod printf {
|
|||
}
|
||||
}
|
||||
|
||||
#[derive(Clone, Eq, PartialEq, Debug)]
|
||||
#[derive(Clone, PartialEq, Debug)]
|
||||
/// A single `printf`-style formatting directive.
|
||||
pub struct Format<'a> {
|
||||
/// The entire original formatting directive.
|
||||
|
@ -213,7 +213,7 @@ pub mod printf {
|
|||
}
|
||||
|
||||
/// A general number used in a `printf` formatting directive.
|
||||
#[derive(Copy, Clone, Eq, PartialEq, Debug)]
|
||||
#[derive(Copy, Clone, PartialEq, Debug)]
|
||||
pub enum Num {
|
||||
// The range of these values is technically bounded by `NL_ARGMAX`... but, at least for GNU
|
||||
// libc, it apparently has no real fixed limit. A `u16` is used here on the basis that it
|
||||
|
@ -739,7 +739,7 @@ pub mod printf {
|
|||
pub mod shell {
|
||||
use super::strcursor::StrCursor as Cur;
|
||||
|
||||
#[derive(Clone, Eq, PartialEq, Debug)]
|
||||
#[derive(Clone, PartialEq, Debug)]
|
||||
pub enum Substitution<'a> {
|
||||
Ordinal(u8),
|
||||
Name(&'a str),
|
||||
|
|
|
@ -101,9 +101,7 @@ fn is_proc_macro_attr(attr: &ast::Attribute) -> bool {
|
|||
|
||||
impl<'a> CollectProcMacros<'a> {
|
||||
fn check_not_pub_in_root(&self, vis: &ast::Visibility, sp: Span) {
|
||||
if self.is_proc_macro_crate &&
|
||||
self.in_root &&
|
||||
vis.node == ast::VisibilityKind::Public {
|
||||
if self.is_proc_macro_crate && self.in_root && vis.node.is_pub() {
|
||||
self.handler.span_err(sp,
|
||||
"`proc-macro` crate types cannot \
|
||||
export any items other than functions \
|
||||
|
@ -181,7 +179,7 @@ impl<'a> CollectProcMacros<'a> {
|
|||
Vec::new()
|
||||
};
|
||||
|
||||
if self.in_root && item.vis.node == ast::VisibilityKind::Public {
|
||||
if self.in_root && item.vis.node.is_pub() {
|
||||
self.derives.push(ProcMacroDerive {
|
||||
span: item.span,
|
||||
trait_name,
|
||||
|
@ -206,7 +204,7 @@ impl<'a> CollectProcMacros<'a> {
|
|||
return;
|
||||
}
|
||||
|
||||
if self.in_root && item.vis.node == ast::VisibilityKind::Public {
|
||||
if self.in_root && item.vis.node.is_pub() {
|
||||
self.attr_macros.push(ProcMacroDef {
|
||||
span: item.span,
|
||||
function_name: item.ident,
|
||||
|
@ -229,7 +227,7 @@ impl<'a> CollectProcMacros<'a> {
|
|||
return;
|
||||
}
|
||||
|
||||
if self.in_root && item.vis.node == ast::VisibilityKind::Public {
|
||||
if self.in_root && item.vis.node.is_pub() {
|
||||
self.bang_macros.push(ProcMacroDef {
|
||||
span: item.span,
|
||||
function_name: item.ident,
|
||||
|
@ -271,7 +269,8 @@ impl<'a> Visitor<'a> for CollectProcMacros<'a> {
|
|||
for attr in &item.attrs {
|
||||
if is_proc_macro_attr(&attr) {
|
||||
if let Some(prev_attr) = found_attr {
|
||||
let msg = if attr.path == prev_attr.path {
|
||||
let msg = if attr.path.segments[0].ident.name ==
|
||||
prev_attr.path.segments[0].ident.name {
|
||||
format!("Only one `#[{}]` attribute is allowed on any given function",
|
||||
attr.path)
|
||||
} else {
|
||||
|
|
|
@ -12,7 +12,7 @@ use std::fmt;
|
|||
use std::str::FromStr;
|
||||
|
||||
/// The edition of the compiler (RFC 2052)
|
||||
#[derive(Clone, Copy, Hash, PartialOrd, Ord, Eq, PartialEq, Debug, RustcEncodable, RustcDecodable)]
|
||||
#[derive(Clone, Copy, Hash, PartialEq, PartialOrd, Debug, RustcEncodable, RustcDecodable)]
|
||||
#[non_exhaustive]
|
||||
pub enum Edition {
|
||||
// editions must be kept in order, oldest to newest
|
||||
|
|
|
@ -1,59 +0,0 @@
|
|||
// Copyright 2017 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.
|
||||
|
||||
// ignore-stage1
|
||||
// ignore-cross-compile
|
||||
#![feature(quote, rustc_private)]
|
||||
|
||||
extern crate syntax;
|
||||
extern crate rustc_data_structures;
|
||||
|
||||
use syntax::ext::base::{ExtCtxt, DummyResolver};
|
||||
use syntax::ext::expand::ExpansionConfig;
|
||||
use syntax::parse::ParseSess;
|
||||
use syntax::codemap::{FilePathMapping, dummy_spanned};
|
||||
use syntax::print::pprust::expr_to_string;
|
||||
use syntax::ast::{ExprKind, LitKind, RangeLimits};
|
||||
use syntax::ptr::P;
|
||||
|
||||
use rustc_data_structures::sync::Lrc;
|
||||
|
||||
fn main() {
|
||||
syntax::with_globals(|| run());
|
||||
}
|
||||
|
||||
fn run() {
|
||||
let parse_sess = ParseSess::new(FilePathMapping::empty());
|
||||
let exp_cfg = ExpansionConfig::default("issue_35829".to_owned());
|
||||
let mut resolver = DummyResolver;
|
||||
let cx = ExtCtxt::new(&parse_sess, exp_cfg, &mut resolver);
|
||||
|
||||
// check byte string
|
||||
let byte_string = quote_expr!(&cx, b"one");
|
||||
let byte_string_lit_kind = LitKind::ByteStr(Lrc::new(b"one".to_vec()));
|
||||
assert_eq!(byte_string.node, ExprKind::Lit(P(dummy_spanned(byte_string_lit_kind))));
|
||||
|
||||
// check raw byte string
|
||||
let raw_byte_string = quote_expr!(&cx, br###"#"two"#"###);
|
||||
let raw_byte_string_lit_kind = LitKind::ByteStr(Lrc::new(b"#\"two\"#".to_vec()));
|
||||
assert_eq!(raw_byte_string.node, ExprKind::Lit(P(dummy_spanned(raw_byte_string_lit_kind))));
|
||||
|
||||
// check dotdoteq
|
||||
let closed_range = quote_expr!(&cx, 0 ..= 1);
|
||||
assert_eq!(closed_range.node, ExprKind::Range(
|
||||
Some(quote_expr!(&cx, 0)),
|
||||
Some(quote_expr!(&cx, 1)),
|
||||
RangeLimits::Closed
|
||||
));
|
||||
|
||||
// test case from 35829
|
||||
let expr_35829 = quote_expr!(&cx, std::io::stdout().write(b"one"));
|
||||
assert_eq!(expr_to_string(&expr_35829), r#"std::io::stdout().write(b"one")"#);
|
||||
}
|
Loading…
Reference in New Issue