1
Fork 0

extend+improve HIR types documentation

This commit is contained in:
Andre Bogus 2016-06-28 12:32:45 +02:00
parent ea0dc92972
commit ad7d7eaba3

View file

@ -836,7 +836,7 @@ pub enum Expr_ {
ExprVec(HirVec<P<Expr>>), ExprVec(HirVec<P<Expr>>),
/// A function call /// A function call
/// ///
/// The first field resolves to the function itself, /// The first field resolves to the function itself (usually an `ExprPath`),
/// and the second field is the list of arguments /// and the second field is the list of arguments
ExprCall(P<Expr>, HirVec<P<Expr>>), ExprCall(P<Expr>, HirVec<P<Expr>>),
/// A method call (`x.foo::<Bar, Baz>(a, b, c, d)`) /// A method call (`x.foo::<Bar, Baz>(a, b, c, d)`)
@ -845,9 +845,9 @@ pub enum Expr_ {
/// The vector of `Ty`s are the ascripted type parameters for the method /// The vector of `Ty`s are the ascripted type parameters for the method
/// (within the angle brackets). /// (within the angle brackets).
/// ///
/// The first element of the vector of `Expr`s is the expression that evaluates /// The first element of the vector of `Expr`s is the expression that
/// to the object on which the method is being called on (the receiver), /// evaluates to the object on which the method is being called on (the
/// and the remaining elements are the rest of the arguments. /// receiver), and the remaining elements are the rest of the arguments.
/// ///
/// Thus, `x.foo::<Bar, Baz>(a, b, c, d)` is represented as /// Thus, `x.foo::<Bar, Baz>(a, b, c, d)` is represented as
/// `ExprMethodCall(foo, [Bar, Baz], [x, a, b, c, d])`. /// `ExprMethodCall(foo, [Bar, Baz], [x, a, b, c, d])`.
@ -919,13 +919,13 @@ pub enum Expr_ {
/// Inline assembly (from `asm!`), with its outputs and inputs. /// Inline assembly (from `asm!`), with its outputs and inputs.
ExprInlineAsm(InlineAsm, Vec<P<Expr>>, Vec<P<Expr>>), ExprInlineAsm(InlineAsm, Vec<P<Expr>>, Vec<P<Expr>>),
/// A struct literal expression. /// A struct or enum variant literal expression.
/// ///
/// For example, `Foo {x: 1, y: 2}`, or /// For example, `Foo {x: 1, y: 2}`, or
/// `Foo {x: 1, .. base}`, where `base` is the `Option<Expr>`. /// `Foo {x: 1, .. base}`, where `base` is the `Option<Expr>`.
ExprStruct(Path, HirVec<Field>, Option<P<Expr>>), ExprStruct(Path, HirVec<Field>, Option<P<Expr>>),
/// A vector literal constructed from one repeated element. /// An array literal constructed from one repeated element.
/// ///
/// For example, `[1; 5]`. The first expression is the element /// For example, `[1; 5]`. The first expression is the element
/// to be repeated; the second is the number of times to repeat it. /// to be repeated; the second is the number of times to repeat it.
@ -950,14 +950,21 @@ pub struct QSelf {
pub position: usize, pub position: usize,
} }
/// Hints at the original code for a `match _ { .. }`
#[derive(Clone, PartialEq, Eq, RustcEncodable, RustcDecodable, Hash, Debug, Copy)] #[derive(Clone, PartialEq, Eq, RustcEncodable, RustcDecodable, Hash, Debug, Copy)]
pub enum MatchSource { pub enum MatchSource {
/// A `match _ { .. }`
Normal, Normal,
/// An `if let _ = _ { .. }` (optionally with `else { .. }`
IfLetDesugar { IfLetDesugar {
contains_else_clause: bool, contains_else_clause: bool,
}, },
/// A `while let _ = _ { .. }` (which was desugared to a
/// `loop { match _ { .. } }`
WhileLetDesugar, WhileLetDesugar,
/// A desugared `for _ in _ { .. }` loop
ForLoopDesugar, ForLoopDesugar,
/// A desugared `?` operator
TryDesugar, TryDesugar,
} }
@ -975,8 +982,7 @@ pub struct MutTy {
pub mutbl: Mutability, pub mutbl: Mutability,
} }
/// Represents a method's signature in a trait declaration, /// Represents a method's signature in a trait declaration or implementation.
/// or in an implementation.
#[derive(Clone, PartialEq, Eq, RustcEncodable, RustcDecodable, Hash, Debug)] #[derive(Clone, PartialEq, Eq, RustcEncodable, RustcDecodable, Hash, Debug)]
pub struct MethodSig { pub struct MethodSig {
pub unsafety: Unsafety, pub unsafety: Unsafety,
@ -999,13 +1005,20 @@ pub struct TraitItem {
pub span: Span, pub span: Span,
} }
/// Represents a trait method or associated constant or type
#[derive(Clone, PartialEq, Eq, RustcEncodable, RustcDecodable, Hash, Debug)] #[derive(Clone, PartialEq, Eq, RustcEncodable, RustcDecodable, Hash, Debug)]
pub enum TraitItem_ { pub enum TraitItem_ {
/// An associated constant with an optional value (otherwise `impl`s
/// must contain a value)
ConstTraitItem(P<Ty>, Option<P<Expr>>), ConstTraitItem(P<Ty>, Option<P<Expr>>),
/// A method with an optional body
MethodTraitItem(MethodSig, Option<P<Block>>), MethodTraitItem(MethodSig, Option<P<Block>>),
/// An associated type with (possibly empty) bounds and optional concrete
/// type
TypeTraitItem(TyParamBounds, Option<P<Ty>>), TypeTraitItem(TyParamBounds, Option<P<Ty>>),
} }
/// Represents anything within an `impl` block
#[derive(Clone, PartialEq, Eq, RustcEncodable, RustcDecodable, Hash, Debug)] #[derive(Clone, PartialEq, Eq, RustcEncodable, RustcDecodable, Hash, Debug)]
pub struct ImplItem { pub struct ImplItem {
pub id: NodeId, pub id: NodeId,
@ -1017,10 +1030,15 @@ pub struct ImplItem {
pub span: Span, pub span: Span,
} }
/// Represents different contents within `impl`s
#[derive(Clone, PartialEq, Eq, RustcEncodable, RustcDecodable, Hash, Debug)] #[derive(Clone, PartialEq, Eq, RustcEncodable, RustcDecodable, Hash, Debug)]
pub enum ImplItemKind { pub enum ImplItemKind {
/// An associated constant of the given type, set to the constant result
/// of the expression
Const(P<Ty>, P<Expr>), Const(P<Ty>, P<Expr>),
/// A method implementation with the given signature and body
Method(MethodSig, P<Block>), Method(MethodSig, P<Block>),
/// An associated type
Type(P<Ty>), Type(P<Ty>),
} }