Rename ast::Pat_ and its variants
This commit is contained in:
parent
5801991b5d
commit
14adc9bb63
16 changed files with 145 additions and 145 deletions
|
@ -913,26 +913,26 @@ pub fn lower_pat(lctx: &LoweringContext, p: &Pat) -> P<hir::Pat> {
|
||||||
P(hir::Pat {
|
P(hir::Pat {
|
||||||
id: p.id,
|
id: p.id,
|
||||||
node: match p.node {
|
node: match p.node {
|
||||||
PatWild => hir::PatWild,
|
PatKind::Wild => hir::PatWild,
|
||||||
PatIdent(ref binding_mode, pth1, ref sub) => {
|
PatKind::Ident(ref binding_mode, pth1, ref sub) => {
|
||||||
hir::PatIdent(lower_binding_mode(lctx, binding_mode),
|
hir::PatIdent(lower_binding_mode(lctx, binding_mode),
|
||||||
respan(pth1.span, lower_ident(lctx, pth1.node)),
|
respan(pth1.span, lower_ident(lctx, pth1.node)),
|
||||||
sub.as_ref().map(|x| lower_pat(lctx, x)))
|
sub.as_ref().map(|x| lower_pat(lctx, x)))
|
||||||
}
|
}
|
||||||
PatLit(ref e) => hir::PatLit(lower_expr(lctx, e)),
|
PatKind::Lit(ref e) => hir::PatLit(lower_expr(lctx, e)),
|
||||||
PatEnum(ref pth, ref pats) => {
|
PatKind::Enum(ref pth, ref pats) => {
|
||||||
hir::PatEnum(lower_path(lctx, pth),
|
hir::PatEnum(lower_path(lctx, pth),
|
||||||
pats.as_ref()
|
pats.as_ref()
|
||||||
.map(|pats| pats.iter().map(|x| lower_pat(lctx, x)).collect()))
|
.map(|pats| pats.iter().map(|x| lower_pat(lctx, x)).collect()))
|
||||||
}
|
}
|
||||||
PatQPath(ref qself, ref pth) => {
|
PatKind::QPath(ref qself, ref pth) => {
|
||||||
let qself = hir::QSelf {
|
let qself = hir::QSelf {
|
||||||
ty: lower_ty(lctx, &qself.ty),
|
ty: lower_ty(lctx, &qself.ty),
|
||||||
position: qself.position,
|
position: qself.position,
|
||||||
};
|
};
|
||||||
hir::PatQPath(qself, lower_path(lctx, pth))
|
hir::PatQPath(qself, lower_path(lctx, pth))
|
||||||
}
|
}
|
||||||
PatStruct(ref pth, ref fields, etc) => {
|
PatKind::Struct(ref pth, ref fields, etc) => {
|
||||||
let pth = lower_path(lctx, pth);
|
let pth = lower_path(lctx, pth);
|
||||||
let fs = fields.iter()
|
let fs = fields.iter()
|
||||||
.map(|f| {
|
.map(|f| {
|
||||||
|
@ -948,20 +948,22 @@ pub fn lower_pat(lctx: &LoweringContext, p: &Pat) -> P<hir::Pat> {
|
||||||
.collect();
|
.collect();
|
||||||
hir::PatStruct(pth, fs, etc)
|
hir::PatStruct(pth, fs, etc)
|
||||||
}
|
}
|
||||||
PatTup(ref elts) => hir::PatTup(elts.iter().map(|x| lower_pat(lctx, x)).collect()),
|
PatKind::Tup(ref elts) => {
|
||||||
PatBox(ref inner) => hir::PatBox(lower_pat(lctx, inner)),
|
hir::PatTup(elts.iter().map(|x| lower_pat(lctx, x)).collect())
|
||||||
PatRegion(ref inner, mutbl) => {
|
}
|
||||||
|
PatKind::Box(ref inner) => hir::PatBox(lower_pat(lctx, inner)),
|
||||||
|
PatKind::Ref(ref inner, mutbl) => {
|
||||||
hir::PatRegion(lower_pat(lctx, inner), lower_mutability(lctx, mutbl))
|
hir::PatRegion(lower_pat(lctx, inner), lower_mutability(lctx, mutbl))
|
||||||
}
|
}
|
||||||
PatRange(ref e1, ref e2) => {
|
PatKind::Range(ref e1, ref e2) => {
|
||||||
hir::PatRange(lower_expr(lctx, e1), lower_expr(lctx, e2))
|
hir::PatRange(lower_expr(lctx, e1), lower_expr(lctx, e2))
|
||||||
}
|
}
|
||||||
PatVec(ref before, ref slice, ref after) => {
|
PatKind::Vec(ref before, ref slice, ref after) => {
|
||||||
hir::PatVec(before.iter().map(|x| lower_pat(lctx, x)).collect(),
|
hir::PatVec(before.iter().map(|x| lower_pat(lctx, x)).collect(),
|
||||||
slice.as_ref().map(|x| lower_pat(lctx, x)),
|
slice.as_ref().map(|x| lower_pat(lctx, x)),
|
||||||
after.iter().map(|x| lower_pat(lctx, x)).collect())
|
after.iter().map(|x| lower_pat(lctx, x)).collect())
|
||||||
}
|
}
|
||||||
PatMac(_) => panic!("Shouldn't exist here"),
|
PatKind::Mac(_) => panic!("Shouldn't exist here"),
|
||||||
},
|
},
|
||||||
span: p.span,
|
span: p.span,
|
||||||
})
|
})
|
||||||
|
|
|
@ -13,7 +13,7 @@
|
||||||
|
|
||||||
use rustc::session::{Session, CompileResult};
|
use rustc::session::{Session, CompileResult};
|
||||||
|
|
||||||
use syntax::ast;
|
use syntax::ast::{self, PatKind};
|
||||||
use syntax::visit::{self, Visitor, FnKind};
|
use syntax::visit::{self, Visitor, FnKind};
|
||||||
use syntax::codemap::Span;
|
use syntax::codemap::Span;
|
||||||
|
|
||||||
|
@ -104,8 +104,8 @@ impl<'a, 'v> Visitor<'v> for CheckConstFn<'a> {
|
||||||
// Ensure the arguments are simple, not mutable/by-ref or patterns.
|
// Ensure the arguments are simple, not mutable/by-ref or patterns.
|
||||||
for arg in &fd.inputs {
|
for arg in &fd.inputs {
|
||||||
match arg.pat.node {
|
match arg.pat.node {
|
||||||
ast::PatWild => {}
|
PatKind::Wild => {}
|
||||||
ast::PatIdent(ast::BindingMode::ByValue(ast::Mutability::Immutable), _, None) => {}
|
PatKind::Ident(ast::BindingMode::ByValue(ast::Mutability::Immutable), _, None) => {}
|
||||||
_ => {
|
_ => {
|
||||||
span_err!(self.sess, arg.pat.span, E0022,
|
span_err!(self.sess, arg.pat.span, E0022,
|
||||||
"arguments of constant functions can only \
|
"arguments of constant functions can only \
|
||||||
|
|
|
@ -40,7 +40,7 @@ use std::fs::File;
|
||||||
use std::hash::*;
|
use std::hash::*;
|
||||||
use std::collections::HashSet;
|
use std::collections::HashSet;
|
||||||
|
|
||||||
use syntax::ast::{self, NodeId};
|
use syntax::ast::{self, NodeId, PatKind};
|
||||||
use syntax::codemap::*;
|
use syntax::codemap::*;
|
||||||
use syntax::parse::token::{self, keywords};
|
use syntax::parse::token::{self, keywords};
|
||||||
use syntax::visit::{self, Visitor};
|
use syntax::visit::{self, Visitor};
|
||||||
|
@ -780,7 +780,7 @@ impl <'l, 'tcx> DumpCsvVisitor<'l, 'tcx> {
|
||||||
|
|
||||||
fn process_pat(&mut self, p: &ast::Pat) {
|
fn process_pat(&mut self, p: &ast::Pat) {
|
||||||
match p.node {
|
match p.node {
|
||||||
ast::PatStruct(ref path, ref fields, _) => {
|
PatKind::Struct(ref path, ref fields, _) => {
|
||||||
visit::walk_path(self, path);
|
visit::walk_path(self, path);
|
||||||
let adt = self.tcx.node_id_to_type(p.id).ty_adt_def().unwrap();
|
let adt = self.tcx.node_id_to_type(p.id).ty_adt_def().unwrap();
|
||||||
let def = self.tcx.def_map.borrow()[&p.id].full_def();
|
let def = self.tcx.def_map.borrow()[&p.id].full_def();
|
||||||
|
|
|
@ -21,7 +21,7 @@ use rustc_front::{hir, lowering};
|
||||||
use rustc::front::map::NodeItem;
|
use rustc::front::map::NodeItem;
|
||||||
use rustc::session::config::CrateType::CrateTypeExecutable;
|
use rustc::session::config::CrateType::CrateTypeExecutable;
|
||||||
|
|
||||||
use syntax::ast::{self, NodeId};
|
use syntax::ast::{self, NodeId, PatKind};
|
||||||
use syntax::ast_util;
|
use syntax::ast_util;
|
||||||
use syntax::codemap::*;
|
use syntax::codemap::*;
|
||||||
use syntax::parse::token::{self, keywords};
|
use syntax::parse::token::{self, keywords};
|
||||||
|
@ -758,16 +758,16 @@ impl PathCollector {
|
||||||
impl<'v> Visitor<'v> for PathCollector {
|
impl<'v> Visitor<'v> for PathCollector {
|
||||||
fn visit_pat(&mut self, p: &ast::Pat) {
|
fn visit_pat(&mut self, p: &ast::Pat) {
|
||||||
match p.node {
|
match p.node {
|
||||||
ast::PatStruct(ref path, _, _) => {
|
PatKind::Struct(ref path, _, _) => {
|
||||||
self.collected_paths.push((p.id, path.clone(),
|
self.collected_paths.push((p.id, path.clone(),
|
||||||
ast::Mutability::Mutable, recorder::TypeRef));
|
ast::Mutability::Mutable, recorder::TypeRef));
|
||||||
}
|
}
|
||||||
ast::PatEnum(ref path, _) |
|
PatKind::Enum(ref path, _) |
|
||||||
ast::PatQPath(_, ref path) => {
|
PatKind::QPath(_, ref path) => {
|
||||||
self.collected_paths.push((p.id, path.clone(),
|
self.collected_paths.push((p.id, path.clone(),
|
||||||
ast::Mutability::Mutable, recorder::VarRef));
|
ast::Mutability::Mutable, recorder::VarRef));
|
||||||
}
|
}
|
||||||
ast::PatIdent(bm, ref path1, _) => {
|
PatKind::Ident(bm, ref path1, _) => {
|
||||||
debug!("PathCollector, visit ident in pat {}: {:?} {:?}",
|
debug!("PathCollector, visit ident in pat {}: {:?} {:?}",
|
||||||
path1.node,
|
path1.node,
|
||||||
p.span,
|
p.span,
|
||||||
|
|
|
@ -10,7 +10,6 @@
|
||||||
|
|
||||||
// The Rust abstract syntax tree.
|
// The Rust abstract syntax tree.
|
||||||
|
|
||||||
pub use self::Pat_::*;
|
|
||||||
pub use self::StructFieldKind::*;
|
pub use self::StructFieldKind::*;
|
||||||
pub use self::TyParamBound::*;
|
pub use self::TyParamBound::*;
|
||||||
pub use self::UnsafeSource::*;
|
pub use self::UnsafeSource::*;
|
||||||
|
@ -521,7 +520,7 @@ pub struct Block {
|
||||||
#[derive(Clone, PartialEq, Eq, RustcEncodable, RustcDecodable, Hash)]
|
#[derive(Clone, PartialEq, Eq, RustcEncodable, RustcDecodable, Hash)]
|
||||||
pub struct Pat {
|
pub struct Pat {
|
||||||
pub id: NodeId,
|
pub id: NodeId,
|
||||||
pub node: Pat_,
|
pub node: PatKind,
|
||||||
pub span: Span,
|
pub span: Span,
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -552,11 +551,11 @@ pub enum BindingMode {
|
||||||
}
|
}
|
||||||
|
|
||||||
#[derive(Clone, PartialEq, Eq, RustcEncodable, RustcDecodable, Hash, Debug)]
|
#[derive(Clone, PartialEq, Eq, RustcEncodable, RustcDecodable, Hash, Debug)]
|
||||||
pub enum Pat_ {
|
pub enum PatKind {
|
||||||
/// Represents a wildcard pattern (`_`)
|
/// Represents a wildcard pattern (`_`)
|
||||||
PatWild,
|
Wild,
|
||||||
|
|
||||||
/// A PatIdent may either be a new bound variable,
|
/// A PatKind::Ident may either be a new bound variable,
|
||||||
/// or a nullary enum (in which case the third field
|
/// or a nullary enum (in which case the third field
|
||||||
/// is None).
|
/// is None).
|
||||||
///
|
///
|
||||||
|
@ -564,35 +563,35 @@ pub enum Pat_ {
|
||||||
/// which it is. The resolver determines this, and
|
/// which it is. The resolver determines this, and
|
||||||
/// records this pattern's NodeId in an auxiliary
|
/// records this pattern's NodeId in an auxiliary
|
||||||
/// set (of "PatIdents that refer to nullary enums")
|
/// set (of "PatIdents that refer to nullary enums")
|
||||||
PatIdent(BindingMode, SpannedIdent, Option<P<Pat>>),
|
Ident(BindingMode, SpannedIdent, Option<P<Pat>>),
|
||||||
|
|
||||||
/// "None" means a `Variant(..)` pattern where we don't bind the fields to names.
|
/// "None" means a `Variant(..)` pattern where we don't bind the fields to names.
|
||||||
PatEnum(Path, Option<Vec<P<Pat>>>),
|
Enum(Path, Option<Vec<P<Pat>>>),
|
||||||
|
|
||||||
/// An associated const named using the qualified path `<T>::CONST` or
|
/// An associated const named using the qualified path `<T>::CONST` or
|
||||||
/// `<T as Trait>::CONST`. Associated consts from inherent impls can be
|
/// `<T as Trait>::CONST`. Associated consts from inherent impls can be
|
||||||
/// referred to as simply `T::CONST`, in which case they will end up as
|
/// referred to as simply `T::CONST`, in which case they will end up as
|
||||||
/// PatEnum, and the resolver will have to sort that out.
|
/// PatKind::Enum, and the resolver will have to sort that out.
|
||||||
PatQPath(QSelf, Path),
|
QPath(QSelf, Path),
|
||||||
|
|
||||||
/// Destructuring of a struct, e.g. `Foo {x, y, ..}`
|
/// Destructuring of a struct, e.g. `Foo {x, y, ..}`
|
||||||
/// The `bool` is `true` in the presence of a `..`
|
/// The `bool` is `true` in the presence of a `..`
|
||||||
PatStruct(Path, Vec<Spanned<FieldPat>>, bool),
|
Struct(Path, Vec<Spanned<FieldPat>>, bool),
|
||||||
/// A tuple pattern `(a, b)`
|
/// A tuple pattern `(a, b)`
|
||||||
PatTup(Vec<P<Pat>>),
|
Tup(Vec<P<Pat>>),
|
||||||
/// A `box` pattern
|
/// A `box` pattern
|
||||||
PatBox(P<Pat>),
|
Box(P<Pat>),
|
||||||
/// A reference pattern, e.g. `&mut (a, b)`
|
/// A reference pattern, e.g. `&mut (a, b)`
|
||||||
PatRegion(P<Pat>, Mutability),
|
Ref(P<Pat>, Mutability),
|
||||||
/// A literal
|
/// A literal
|
||||||
PatLit(P<Expr>),
|
Lit(P<Expr>),
|
||||||
/// A range pattern, e.g. `1...2`
|
/// A range pattern, e.g. `1...2`
|
||||||
PatRange(P<Expr>, P<Expr>),
|
Range(P<Expr>, P<Expr>),
|
||||||
/// `[a, b, ..i, y, z]` is represented as:
|
/// `[a, b, ..i, y, z]` is represented as:
|
||||||
/// `PatVec(box [a, b], Some(i), box [y, z])`
|
/// `PatKind::Vec(box [a, b], Some(i), box [y, z])`
|
||||||
PatVec(Vec<P<Pat>>, Option<P<Pat>>, Vec<P<Pat>>),
|
Vec(Vec<P<Pat>>, Option<P<Pat>>, Vec<P<Pat>>),
|
||||||
/// A macro pattern; pre-expansion
|
/// A macro pattern; pre-expansion
|
||||||
PatMac(Mac),
|
Mac(Mac),
|
||||||
}
|
}
|
||||||
|
|
||||||
#[derive(Clone, PartialEq, Eq, RustcEncodable, RustcDecodable, Hash, Debug, Copy)]
|
#[derive(Clone, PartialEq, Eq, RustcEncodable, RustcDecodable, Hash, Debug, Copy)]
|
||||||
|
@ -1609,7 +1608,7 @@ impl Arg {
|
||||||
}),
|
}),
|
||||||
pat: P(Pat {
|
pat: P(Pat {
|
||||||
id: DUMMY_NODE_ID,
|
id: DUMMY_NODE_ID,
|
||||||
node: PatIdent(BindingMode::ByValue(mutability), path, None),
|
node: PatKind::Ident(BindingMode::ByValue(mutability), path, None),
|
||||||
span: span
|
span: span
|
||||||
}),
|
}),
|
||||||
id: DUMMY_NODE_ID
|
id: DUMMY_NODE_ID
|
||||||
|
|
|
@ -69,7 +69,7 @@ pub fn ident_to_pat(id: NodeId, s: Span, i: Ident) -> P<Pat> {
|
||||||
let spanned = codemap::Spanned{ span: s, node: i };
|
let spanned = codemap::Spanned{ span: s, node: i };
|
||||||
P(Pat {
|
P(Pat {
|
||||||
id: id,
|
id: id,
|
||||||
node: PatIdent(BindingMode::ByValue(Mutability::Immutable), spanned, None),
|
node: PatKind::Ident(BindingMode::ByValue(Mutability::Immutable), spanned, None),
|
||||||
span: s
|
span: s
|
||||||
})
|
})
|
||||||
}
|
}
|
||||||
|
@ -348,7 +348,7 @@ pub fn compute_id_range_for_fn_body(fk: FnKind,
|
||||||
/// and false otherwise.
|
/// and false otherwise.
|
||||||
pub fn pat_is_ident(pat: P<ast::Pat>) -> bool {
|
pub fn pat_is_ident(pat: P<ast::Pat>) -> bool {
|
||||||
match pat.node {
|
match pat.node {
|
||||||
ast::PatIdent(..) => true,
|
PatKind::Ident(..) => true,
|
||||||
_ => false,
|
_ => false,
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -11,7 +11,7 @@
|
||||||
pub use self::SyntaxExtension::*;
|
pub use self::SyntaxExtension::*;
|
||||||
|
|
||||||
use ast;
|
use ast;
|
||||||
use ast::Name;
|
use ast::{Name, PatKind};
|
||||||
use codemap;
|
use codemap;
|
||||||
use codemap::{CodeMap, Span, ExpnId, ExpnInfo, NO_EXPANSION};
|
use codemap::{CodeMap, Span, ExpnId, ExpnInfo, NO_EXPANSION};
|
||||||
use errors::DiagnosticBuilder;
|
use errors::DiagnosticBuilder;
|
||||||
|
@ -307,7 +307,7 @@ impl MacResult for MacEager {
|
||||||
return Some(P(ast::Pat {
|
return Some(P(ast::Pat {
|
||||||
id: ast::DUMMY_NODE_ID,
|
id: ast::DUMMY_NODE_ID,
|
||||||
span: e.span,
|
span: e.span,
|
||||||
node: ast::PatLit(e),
|
node: PatKind::Lit(e),
|
||||||
}));
|
}));
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -359,7 +359,7 @@ impl DummyResult {
|
||||||
pub fn raw_pat(sp: Span) -> ast::Pat {
|
pub fn raw_pat(sp: Span) -> ast::Pat {
|
||||||
ast::Pat {
|
ast::Pat {
|
||||||
id: ast::DUMMY_NODE_ID,
|
id: ast::DUMMY_NODE_ID,
|
||||||
node: ast::PatWild,
|
node: PatKind::Wild,
|
||||||
span: sp,
|
span: sp,
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -9,7 +9,7 @@
|
||||||
// except according to those terms.
|
// except according to those terms.
|
||||||
|
|
||||||
use abi::Abi;
|
use abi::Abi;
|
||||||
use ast::{self, Ident, Generics, Expr, BlockCheckMode, UnOp};
|
use ast::{self, Ident, Generics, Expr, BlockCheckMode, UnOp, PatKind};
|
||||||
use attr;
|
use attr;
|
||||||
use codemap::{Span, respan, Spanned, DUMMY_SP, Pos};
|
use codemap::{Span, respan, Spanned, DUMMY_SP, Pos};
|
||||||
use ext::base::ExtCtxt;
|
use ext::base::ExtCtxt;
|
||||||
|
@ -166,7 +166,7 @@ pub trait AstBuilder {
|
||||||
fn expr_err(&self, span: Span, expr: P<ast::Expr>) -> P<ast::Expr>;
|
fn expr_err(&self, span: Span, expr: P<ast::Expr>) -> P<ast::Expr>;
|
||||||
fn expr_try(&self, span: Span, head: P<ast::Expr>) -> P<ast::Expr>;
|
fn expr_try(&self, span: Span, head: P<ast::Expr>) -> P<ast::Expr>;
|
||||||
|
|
||||||
fn pat(&self, span: Span, pat: ast::Pat_) -> P<ast::Pat>;
|
fn pat(&self, span: Span, pat: PatKind) -> P<ast::Pat>;
|
||||||
fn pat_wild(&self, span: Span) -> P<ast::Pat>;
|
fn pat_wild(&self, span: Span) -> P<ast::Pat>;
|
||||||
fn pat_lit(&self, span: Span, expr: P<ast::Expr>) -> P<ast::Pat>;
|
fn pat_lit(&self, span: Span, expr: P<ast::Expr>) -> P<ast::Pat>;
|
||||||
fn pat_ident(&self, span: Span, ident: ast::Ident) -> P<ast::Pat>;
|
fn pat_ident(&self, span: Span, ident: ast::Ident) -> P<ast::Pat>;
|
||||||
|
@ -805,14 +805,14 @@ impl<'a> AstBuilder for ExtCtxt<'a> {
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
fn pat(&self, span: Span, pat: ast::Pat_) -> P<ast::Pat> {
|
fn pat(&self, span: Span, pat: PatKind) -> P<ast::Pat> {
|
||||||
P(ast::Pat { id: ast::DUMMY_NODE_ID, node: pat, span: span })
|
P(ast::Pat { id: ast::DUMMY_NODE_ID, node: pat, span: span })
|
||||||
}
|
}
|
||||||
fn pat_wild(&self, span: Span) -> P<ast::Pat> {
|
fn pat_wild(&self, span: Span) -> P<ast::Pat> {
|
||||||
self.pat(span, ast::PatWild)
|
self.pat(span, PatKind::Wild)
|
||||||
}
|
}
|
||||||
fn pat_lit(&self, span: Span, expr: P<ast::Expr>) -> P<ast::Pat> {
|
fn pat_lit(&self, span: Span, expr: P<ast::Expr>) -> P<ast::Pat> {
|
||||||
self.pat(span, ast::PatLit(expr))
|
self.pat(span, PatKind::Lit(expr))
|
||||||
}
|
}
|
||||||
fn pat_ident(&self, span: Span, ident: ast::Ident) -> P<ast::Pat> {
|
fn pat_ident(&self, span: Span, ident: ast::Ident) -> P<ast::Pat> {
|
||||||
let binding_mode = ast::BindingMode::ByValue(ast::Mutability::Immutable);
|
let binding_mode = ast::BindingMode::ByValue(ast::Mutability::Immutable);
|
||||||
|
@ -823,20 +823,20 @@ impl<'a> AstBuilder for ExtCtxt<'a> {
|
||||||
span: Span,
|
span: Span,
|
||||||
ident: ast::Ident,
|
ident: ast::Ident,
|
||||||
bm: ast::BindingMode) -> P<ast::Pat> {
|
bm: ast::BindingMode) -> P<ast::Pat> {
|
||||||
let pat = ast::PatIdent(bm, Spanned{span: span, node: ident}, None);
|
let pat = PatKind::Ident(bm, Spanned{span: span, node: ident}, None);
|
||||||
self.pat(span, pat)
|
self.pat(span, pat)
|
||||||
}
|
}
|
||||||
fn pat_enum(&self, span: Span, path: ast::Path, subpats: Vec<P<ast::Pat>>) -> P<ast::Pat> {
|
fn pat_enum(&self, span: Span, path: ast::Path, subpats: Vec<P<ast::Pat>>) -> P<ast::Pat> {
|
||||||
let pat = ast::PatEnum(path, Some(subpats));
|
let pat = PatKind::Enum(path, Some(subpats));
|
||||||
self.pat(span, pat)
|
self.pat(span, pat)
|
||||||
}
|
}
|
||||||
fn pat_struct(&self, span: Span,
|
fn pat_struct(&self, span: Span,
|
||||||
path: ast::Path, field_pats: Vec<Spanned<ast::FieldPat>>) -> P<ast::Pat> {
|
path: ast::Path, field_pats: Vec<Spanned<ast::FieldPat>>) -> P<ast::Pat> {
|
||||||
let pat = ast::PatStruct(path, field_pats, false);
|
let pat = PatKind::Struct(path, field_pats, false);
|
||||||
self.pat(span, pat)
|
self.pat(span, pat)
|
||||||
}
|
}
|
||||||
fn pat_tuple(&self, span: Span, pats: Vec<P<ast::Pat>>) -> P<ast::Pat> {
|
fn pat_tuple(&self, span: Span, pats: Vec<P<ast::Pat>>) -> P<ast::Pat> {
|
||||||
self.pat(span, ast::PatTup(pats))
|
self.pat(span, PatKind::Tup(pats))
|
||||||
}
|
}
|
||||||
|
|
||||||
fn pat_some(&self, span: Span, pat: P<ast::Pat>) -> P<ast::Pat> {
|
fn pat_some(&self, span: Span, pat: P<ast::Pat>) -> P<ast::Pat> {
|
||||||
|
|
|
@ -8,7 +8,7 @@
|
||||||
// option. This file may not be copied, modified, or distributed
|
// option. This file may not be copied, modified, or distributed
|
||||||
// except according to those terms.
|
// except according to those terms.
|
||||||
|
|
||||||
use ast::{Block, Crate, DeclKind, PatMac};
|
use ast::{Block, Crate, DeclKind, PatKind};
|
||||||
use ast::{Local, Ident, Mac_, Name};
|
use ast::{Local, Ident, Mac_, Name};
|
||||||
use ast::{MacStmtStyle, Mrk, Stmt, StmtKind, ItemKind};
|
use ast::{MacStmtStyle, Mrk, Stmt, StmtKind, ItemKind};
|
||||||
use ast::TokenTree;
|
use ast::TokenTree;
|
||||||
|
@ -666,7 +666,7 @@ fn rename_in_scope<X, F>(pats: Vec<P<ast::Pat>>,
|
||||||
(f(&mut rename_fld, fld, x), rewritten_pats)
|
(f(&mut rename_fld, fld, x), rewritten_pats)
|
||||||
}
|
}
|
||||||
|
|
||||||
/// A visitor that extracts the PatIdent (binding) paths
|
/// A visitor that extracts the PatKind::Ident (binding) paths
|
||||||
/// from a given thingy and puts them in a mutable
|
/// from a given thingy and puts them in a mutable
|
||||||
/// array
|
/// array
|
||||||
#[derive(Clone)]
|
#[derive(Clone)]
|
||||||
|
@ -677,9 +677,9 @@ struct PatIdentFinder {
|
||||||
impl<'v> Visitor<'v> for PatIdentFinder {
|
impl<'v> Visitor<'v> for PatIdentFinder {
|
||||||
fn visit_pat(&mut self, pattern: &ast::Pat) {
|
fn visit_pat(&mut self, pattern: &ast::Pat) {
|
||||||
match *pattern {
|
match *pattern {
|
||||||
ast::Pat { id: _, node: ast::PatIdent(_, ref path1, ref inner), span: _ } => {
|
ast::Pat { id: _, node: PatKind::Ident(_, ref path1, ref inner), span: _ } => {
|
||||||
self.ident_accumulator.push(path1.node);
|
self.ident_accumulator.push(path1.node);
|
||||||
// visit optional subpattern of PatIdent:
|
// visit optional subpattern of PatKind::Ident:
|
||||||
if let Some(ref subpat) = *inner {
|
if let Some(ref subpat) = *inner {
|
||||||
self.visit_pat(subpat)
|
self.visit_pat(subpat)
|
||||||
}
|
}
|
||||||
|
@ -690,14 +690,14 @@ impl<'v> Visitor<'v> for PatIdentFinder {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
/// find the PatIdent paths in a pattern
|
/// find the PatKind::Ident paths in a pattern
|
||||||
fn pattern_bindings(pat: &ast::Pat) -> Vec<ast::Ident> {
|
fn pattern_bindings(pat: &ast::Pat) -> Vec<ast::Ident> {
|
||||||
let mut name_finder = PatIdentFinder{ident_accumulator:Vec::new()};
|
let mut name_finder = PatIdentFinder{ident_accumulator:Vec::new()};
|
||||||
name_finder.visit_pat(pat);
|
name_finder.visit_pat(pat);
|
||||||
name_finder.ident_accumulator
|
name_finder.ident_accumulator
|
||||||
}
|
}
|
||||||
|
|
||||||
/// find the PatIdent paths in a
|
/// find the PatKind::Ident paths in a
|
||||||
fn fn_decl_arg_bindings(fn_decl: &ast::FnDecl) -> Vec<ast::Ident> {
|
fn fn_decl_arg_bindings(fn_decl: &ast::FnDecl) -> Vec<ast::Ident> {
|
||||||
let mut pat_idents = PatIdentFinder{ident_accumulator:Vec::new()};
|
let mut pat_idents = PatIdentFinder{ident_accumulator:Vec::new()};
|
||||||
for arg in &fn_decl.inputs {
|
for arg in &fn_decl.inputs {
|
||||||
|
@ -746,12 +746,12 @@ pub fn expand_block_elts(b: P<Block>, fld: &mut MacroExpander) -> P<Block> {
|
||||||
|
|
||||||
fn expand_pat(p: P<ast::Pat>, fld: &mut MacroExpander) -> P<ast::Pat> {
|
fn expand_pat(p: P<ast::Pat>, fld: &mut MacroExpander) -> P<ast::Pat> {
|
||||||
match p.node {
|
match p.node {
|
||||||
PatMac(_) => {}
|
PatKind::Mac(_) => {}
|
||||||
_ => return noop_fold_pat(p, fld)
|
_ => return noop_fold_pat(p, fld)
|
||||||
}
|
}
|
||||||
p.map(|ast::Pat {node, span, ..}| {
|
p.map(|ast::Pat {node, span, ..}| {
|
||||||
let (pth, tts) = match node {
|
let (pth, tts) = match node {
|
||||||
PatMac(mac) => (mac.node.path, mac.node.tts),
|
PatKind::Mac(mac) => (mac.node.path, mac.node.tts),
|
||||||
_ => unreachable!()
|
_ => unreachable!()
|
||||||
};
|
};
|
||||||
if pth.segments.len() > 1 {
|
if pth.segments.len() > 1 {
|
||||||
|
@ -840,7 +840,7 @@ impl<'a> Folder for IdentRenamer<'a> {
|
||||||
}
|
}
|
||||||
|
|
||||||
/// A tree-folder that applies every rename in its list to
|
/// A tree-folder that applies every rename in its list to
|
||||||
/// the idents that are in PatIdent patterns. This is more narrowly
|
/// the idents that are in PatKind::Ident patterns. This is more narrowly
|
||||||
/// focused than IdentRenamer, and is needed for FnDecl,
|
/// focused than IdentRenamer, and is needed for FnDecl,
|
||||||
/// where we want to rename the args but not the fn name or the generics etc.
|
/// where we want to rename the args but not the fn name or the generics etc.
|
||||||
pub struct PatIdentRenamer<'a> {
|
pub struct PatIdentRenamer<'a> {
|
||||||
|
@ -850,16 +850,16 @@ pub struct PatIdentRenamer<'a> {
|
||||||
impl<'a> Folder for PatIdentRenamer<'a> {
|
impl<'a> Folder for PatIdentRenamer<'a> {
|
||||||
fn fold_pat(&mut self, pat: P<ast::Pat>) -> P<ast::Pat> {
|
fn fold_pat(&mut self, pat: P<ast::Pat>) -> P<ast::Pat> {
|
||||||
match pat.node {
|
match pat.node {
|
||||||
ast::PatIdent(..) => {},
|
PatKind::Ident(..) => {},
|
||||||
_ => return noop_fold_pat(pat, self)
|
_ => return noop_fold_pat(pat, self)
|
||||||
}
|
}
|
||||||
|
|
||||||
pat.map(|ast::Pat {id, node, span}| match node {
|
pat.map(|ast::Pat {id, node, span}| match node {
|
||||||
ast::PatIdent(binding_mode, Spanned{span: sp, node: ident}, sub) => {
|
PatKind::Ident(binding_mode, Spanned{span: sp, node: ident}, sub) => {
|
||||||
let new_ident = Ident::new(ident.name,
|
let new_ident = Ident::new(ident.name,
|
||||||
mtwt::apply_renames(self.renames, ident.ctxt));
|
mtwt::apply_renames(self.renames, ident.ctxt));
|
||||||
let new_node =
|
let new_node =
|
||||||
ast::PatIdent(binding_mode,
|
PatKind::Ident(binding_mode,
|
||||||
Spanned{span: self.new_span(sp), node: new_ident},
|
Spanned{span: self.new_span(sp), node: new_ident},
|
||||||
sub.map(|p| self.fold_pat(p)));
|
sub.map(|p| self.fold_pat(p)));
|
||||||
ast::Pat {
|
ast::Pat {
|
||||||
|
|
|
@ -27,7 +27,7 @@ use self::AttributeType::*;
|
||||||
use self::AttributeGate::*;
|
use self::AttributeGate::*;
|
||||||
|
|
||||||
use abi::Abi;
|
use abi::Abi;
|
||||||
use ast::NodeId;
|
use ast::{NodeId, PatKind};
|
||||||
use ast;
|
use ast;
|
||||||
use attr;
|
use attr;
|
||||||
use attr::AttrMetaMethods;
|
use attr::AttrMetaMethods;
|
||||||
|
@ -1005,19 +1005,19 @@ impl<'a, 'v> Visitor<'v> for PostExpansionVisitor<'a> {
|
||||||
|
|
||||||
fn visit_pat(&mut self, pattern: &ast::Pat) {
|
fn visit_pat(&mut self, pattern: &ast::Pat) {
|
||||||
match pattern.node {
|
match pattern.node {
|
||||||
ast::PatVec(_, Some(_), ref last) if !last.is_empty() => {
|
PatKind::Vec(_, Some(_), ref last) if !last.is_empty() => {
|
||||||
self.gate_feature("advanced_slice_patterns",
|
self.gate_feature("advanced_slice_patterns",
|
||||||
pattern.span,
|
pattern.span,
|
||||||
"multiple-element slice matches anywhere \
|
"multiple-element slice matches anywhere \
|
||||||
but at the end of a slice (e.g. \
|
but at the end of a slice (e.g. \
|
||||||
`[0, ..xs, 0]`) are experimental")
|
`[0, ..xs, 0]`) are experimental")
|
||||||
}
|
}
|
||||||
ast::PatVec(..) => {
|
PatKind::Vec(..) => {
|
||||||
self.gate_feature("slice_patterns",
|
self.gate_feature("slice_patterns",
|
||||||
pattern.span,
|
pattern.span,
|
||||||
"slice pattern syntax is experimental");
|
"slice pattern syntax is experimental");
|
||||||
}
|
}
|
||||||
ast::PatBox(..) => {
|
PatKind::Box(..) => {
|
||||||
self.gate_feature("box_patterns",
|
self.gate_feature("box_patterns",
|
||||||
pattern.span,
|
pattern.span,
|
||||||
"box pattern syntax is experimental");
|
"box pattern syntax is experimental");
|
||||||
|
|
|
@ -1119,23 +1119,23 @@ pub fn noop_fold_pat<T: Folder>(p: P<Pat>, folder: &mut T) -> P<Pat> {
|
||||||
p.map(|Pat {id, node, span}| Pat {
|
p.map(|Pat {id, node, span}| Pat {
|
||||||
id: folder.new_id(id),
|
id: folder.new_id(id),
|
||||||
node: match node {
|
node: match node {
|
||||||
PatWild => PatWild,
|
PatKind::Wild => PatKind::Wild,
|
||||||
PatIdent(binding_mode, pth1, sub) => {
|
PatKind::Ident(binding_mode, pth1, sub) => {
|
||||||
PatIdent(binding_mode,
|
PatKind::Ident(binding_mode,
|
||||||
Spanned{span: folder.new_span(pth1.span),
|
Spanned{span: folder.new_span(pth1.span),
|
||||||
node: folder.fold_ident(pth1.node)},
|
node: folder.fold_ident(pth1.node)},
|
||||||
sub.map(|x| folder.fold_pat(x)))
|
sub.map(|x| folder.fold_pat(x)))
|
||||||
}
|
}
|
||||||
PatLit(e) => PatLit(folder.fold_expr(e)),
|
PatKind::Lit(e) => PatKind::Lit(folder.fold_expr(e)),
|
||||||
PatEnum(pth, pats) => {
|
PatKind::Enum(pth, pats) => {
|
||||||
PatEnum(folder.fold_path(pth),
|
PatKind::Enum(folder.fold_path(pth),
|
||||||
pats.map(|pats| pats.move_map(|x| folder.fold_pat(x))))
|
pats.map(|pats| pats.move_map(|x| folder.fold_pat(x))))
|
||||||
}
|
}
|
||||||
PatQPath(qself, pth) => {
|
PatKind::QPath(qself, pth) => {
|
||||||
let qself = QSelf {ty: folder.fold_ty(qself.ty), .. qself};
|
let qself = QSelf {ty: folder.fold_ty(qself.ty), .. qself};
|
||||||
PatQPath(qself, folder.fold_path(pth))
|
PatKind::QPath(qself, folder.fold_path(pth))
|
||||||
}
|
}
|
||||||
PatStruct(pth, fields, etc) => {
|
PatKind::Struct(pth, fields, etc) => {
|
||||||
let pth = folder.fold_path(pth);
|
let pth = folder.fold_path(pth);
|
||||||
let fs = fields.move_map(|f| {
|
let fs = fields.move_map(|f| {
|
||||||
Spanned { span: folder.new_span(f.span),
|
Spanned { span: folder.new_span(f.span),
|
||||||
|
@ -1145,20 +1145,20 @@ pub fn noop_fold_pat<T: Folder>(p: P<Pat>, folder: &mut T) -> P<Pat> {
|
||||||
is_shorthand: f.node.is_shorthand,
|
is_shorthand: f.node.is_shorthand,
|
||||||
}}
|
}}
|
||||||
});
|
});
|
||||||
PatStruct(pth, fs, etc)
|
PatKind::Struct(pth, fs, etc)
|
||||||
}
|
}
|
||||||
PatTup(elts) => PatTup(elts.move_map(|x| folder.fold_pat(x))),
|
PatKind::Tup(elts) => PatKind::Tup(elts.move_map(|x| folder.fold_pat(x))),
|
||||||
PatBox(inner) => PatBox(folder.fold_pat(inner)),
|
PatKind::Box(inner) => PatKind::Box(folder.fold_pat(inner)),
|
||||||
PatRegion(inner, mutbl) => PatRegion(folder.fold_pat(inner), mutbl),
|
PatKind::Ref(inner, mutbl) => PatKind::Ref(folder.fold_pat(inner), mutbl),
|
||||||
PatRange(e1, e2) => {
|
PatKind::Range(e1, e2) => {
|
||||||
PatRange(folder.fold_expr(e1), folder.fold_expr(e2))
|
PatKind::Range(folder.fold_expr(e1), folder.fold_expr(e2))
|
||||||
},
|
},
|
||||||
PatVec(before, slice, after) => {
|
PatKind::Vec(before, slice, after) => {
|
||||||
PatVec(before.move_map(|x| folder.fold_pat(x)),
|
PatKind::Vec(before.move_map(|x| folder.fold_pat(x)),
|
||||||
slice.map(|x| folder.fold_pat(x)),
|
slice.map(|x| folder.fold_pat(x)),
|
||||||
after.move_map(|x| folder.fold_pat(x)))
|
after.move_map(|x| folder.fold_pat(x)))
|
||||||
}
|
}
|
||||||
PatMac(mac) => PatMac(folder.fold_mac(mac))
|
PatKind::Mac(mac) => PatKind::Mac(folder.fold_mac(mac))
|
||||||
},
|
},
|
||||||
span: folder.new_span(span)
|
span: folder.new_span(span)
|
||||||
})
|
})
|
||||||
|
|
|
@ -675,7 +675,7 @@ mod tests {
|
||||||
use super::*;
|
use super::*;
|
||||||
use std::rc::Rc;
|
use std::rc::Rc;
|
||||||
use codemap::{Span, BytePos, Pos, Spanned, NO_EXPANSION};
|
use codemap::{Span, BytePos, Pos, Spanned, NO_EXPANSION};
|
||||||
use ast::{self, TokenTree};
|
use ast::{self, TokenTree, PatKind};
|
||||||
use abi::Abi;
|
use abi::Abi;
|
||||||
use attr::{first_attr_value_str_by_name, AttrMetaMethods};
|
use attr::{first_attr_value_str_by_name, AttrMetaMethods};
|
||||||
use parse;
|
use parse;
|
||||||
|
@ -896,7 +896,7 @@ mod tests {
|
||||||
assert!(panictry!(parser.parse_pat())
|
assert!(panictry!(parser.parse_pat())
|
||||||
== P(ast::Pat{
|
== P(ast::Pat{
|
||||||
id: ast::DUMMY_NODE_ID,
|
id: ast::DUMMY_NODE_ID,
|
||||||
node: ast::PatIdent(ast::BindingMode::ByValue(ast::Mutability::Immutable),
|
node: PatKind::Ident(ast::BindingMode::ByValue(ast::Mutability::Immutable),
|
||||||
Spanned{ span:sp(0, 1),
|
Spanned{ span:sp(0, 1),
|
||||||
node: str_to_ident("b")
|
node: str_to_ident("b")
|
||||||
},
|
},
|
||||||
|
@ -931,7 +931,7 @@ mod tests {
|
||||||
}),
|
}),
|
||||||
pat: P(ast::Pat {
|
pat: P(ast::Pat {
|
||||||
id: ast::DUMMY_NODE_ID,
|
id: ast::DUMMY_NODE_ID,
|
||||||
node: ast::PatIdent(
|
node: PatKind::Ident(
|
||||||
ast::BindingMode::ByValue(ast::Mutability::Immutable),
|
ast::BindingMode::ByValue(ast::Mutability::Immutable),
|
||||||
Spanned{
|
Spanned{
|
||||||
span: sp(6,7),
|
span: sp(6,7),
|
||||||
|
@ -1020,7 +1020,7 @@ mod tests {
|
||||||
impl<'v> ::visit::Visitor<'v> for PatIdentVisitor {
|
impl<'v> ::visit::Visitor<'v> for PatIdentVisitor {
|
||||||
fn visit_pat(&mut self, p: &'v ast::Pat) {
|
fn visit_pat(&mut self, p: &'v ast::Pat) {
|
||||||
match p.node {
|
match p.node {
|
||||||
ast::PatIdent(_ , ref spannedident, _) => {
|
PatKind::Ident(_ , ref spannedident, _) => {
|
||||||
self.spans.push(spannedident.span.clone());
|
self.spans.push(spannedident.span.clone());
|
||||||
}
|
}
|
||||||
_ => {
|
_ => {
|
||||||
|
|
|
@ -30,8 +30,7 @@ use ast::MacStmtStyle;
|
||||||
use ast::Mac_;
|
use ast::Mac_;
|
||||||
use ast::{MutTy, Mutability};
|
use ast::{MutTy, Mutability};
|
||||||
use ast::NamedField;
|
use ast::NamedField;
|
||||||
use ast::{Pat, PatBox, PatEnum, PatIdent, PatLit, PatQPath, PatMac, PatRange};
|
use ast::{Pat, PatKind};
|
||||||
use ast::{PatRegion, PatStruct, PatTup, PatVec, PatWild};
|
|
||||||
use ast::{PolyTraitRef, QSelf};
|
use ast::{PolyTraitRef, QSelf};
|
||||||
use ast::{Stmt, StmtKind};
|
use ast::{Stmt, StmtKind};
|
||||||
use ast::{VariantData, StructField};
|
use ast::{VariantData, StructField};
|
||||||
|
@ -3292,7 +3291,7 @@ impl<'a> Parser<'a> {
|
||||||
self.check(&token::CloseDelim(token::Bracket)) {
|
self.check(&token::CloseDelim(token::Bracket)) {
|
||||||
slice = Some(P(ast::Pat {
|
slice = Some(P(ast::Pat {
|
||||||
id: ast::DUMMY_NODE_ID,
|
id: ast::DUMMY_NODE_ID,
|
||||||
node: PatWild,
|
node: PatKind::Wild,
|
||||||
span: self.span,
|
span: self.span,
|
||||||
}));
|
}));
|
||||||
before_slice = false;
|
before_slice = false;
|
||||||
|
@ -3370,14 +3369,14 @@ impl<'a> Parser<'a> {
|
||||||
let fieldpath = codemap::Spanned{span:self.last_span, node:fieldname};
|
let fieldpath = codemap::Spanned{span:self.last_span, node:fieldname};
|
||||||
let fieldpat = P(ast::Pat{
|
let fieldpat = P(ast::Pat{
|
||||||
id: ast::DUMMY_NODE_ID,
|
id: ast::DUMMY_NODE_ID,
|
||||||
node: PatIdent(bind_type, fieldpath, None),
|
node: PatKind::Ident(bind_type, fieldpath, None),
|
||||||
span: mk_sp(boxed_span_lo, hi),
|
span: mk_sp(boxed_span_lo, hi),
|
||||||
});
|
});
|
||||||
|
|
||||||
let subpat = if is_box {
|
let subpat = if is_box {
|
||||||
P(ast::Pat{
|
P(ast::Pat{
|
||||||
id: ast::DUMMY_NODE_ID,
|
id: ast::DUMMY_NODE_ID,
|
||||||
node: PatBox(fieldpat),
|
node: PatKind::Box(fieldpat),
|
||||||
span: mk_sp(lo, hi),
|
span: mk_sp(lo, hi),
|
||||||
})
|
})
|
||||||
} else {
|
} else {
|
||||||
|
@ -3429,7 +3428,7 @@ impl<'a> Parser<'a> {
|
||||||
token::Underscore => {
|
token::Underscore => {
|
||||||
// Parse _
|
// Parse _
|
||||||
self.bump();
|
self.bump();
|
||||||
pat = PatWild;
|
pat = PatKind::Wild;
|
||||||
}
|
}
|
||||||
token::BinOp(token::And) | token::AndAnd => {
|
token::BinOp(token::And) | token::AndAnd => {
|
||||||
// Parse &pat / &mut pat
|
// Parse &pat / &mut pat
|
||||||
|
@ -3440,21 +3439,21 @@ impl<'a> Parser<'a> {
|
||||||
}
|
}
|
||||||
|
|
||||||
let subpat = try!(self.parse_pat());
|
let subpat = try!(self.parse_pat());
|
||||||
pat = PatRegion(subpat, mutbl);
|
pat = PatKind::Ref(subpat, mutbl);
|
||||||
}
|
}
|
||||||
token::OpenDelim(token::Paren) => {
|
token::OpenDelim(token::Paren) => {
|
||||||
// Parse (pat,pat,pat,...) as tuple pattern
|
// Parse (pat,pat,pat,...) as tuple pattern
|
||||||
self.bump();
|
self.bump();
|
||||||
let fields = try!(self.parse_pat_tuple_elements());
|
let fields = try!(self.parse_pat_tuple_elements());
|
||||||
try!(self.expect(&token::CloseDelim(token::Paren)));
|
try!(self.expect(&token::CloseDelim(token::Paren)));
|
||||||
pat = PatTup(fields);
|
pat = PatKind::Tup(fields);
|
||||||
}
|
}
|
||||||
token::OpenDelim(token::Bracket) => {
|
token::OpenDelim(token::Bracket) => {
|
||||||
// Parse [pat,pat,...] as slice pattern
|
// Parse [pat,pat,...] as slice pattern
|
||||||
self.bump();
|
self.bump();
|
||||||
let (before, slice, after) = try!(self.parse_pat_vec_elements());
|
let (before, slice, after) = try!(self.parse_pat_vec_elements());
|
||||||
try!(self.expect(&token::CloseDelim(token::Bracket)));
|
try!(self.expect(&token::CloseDelim(token::Bracket)));
|
||||||
pat = PatVec(before, slice, after);
|
pat = PatKind::Vec(before, slice, after);
|
||||||
}
|
}
|
||||||
_ => {
|
_ => {
|
||||||
// At this point, token != _, &, &&, (, [
|
// At this point, token != _, &, &&, (, [
|
||||||
|
@ -3468,7 +3467,7 @@ impl<'a> Parser<'a> {
|
||||||
} else if self.eat_keyword(keywords::Box) {
|
} else if self.eat_keyword(keywords::Box) {
|
||||||
// Parse box pat
|
// Parse box pat
|
||||||
let subpat = try!(self.parse_pat());
|
let subpat = try!(self.parse_pat());
|
||||||
pat = PatBox(subpat);
|
pat = PatKind::Box(subpat);
|
||||||
} else if self.is_path_start() {
|
} else if self.is_path_start() {
|
||||||
// Parse pattern starting with a path
|
// Parse pattern starting with a path
|
||||||
if self.token.is_plain_ident() && self.look_ahead(1, |t| *t != token::DotDotDot &&
|
if self.token.is_plain_ident() && self.look_ahead(1, |t| *t != token::DotDotDot &&
|
||||||
|
@ -3487,7 +3486,7 @@ impl<'a> Parser<'a> {
|
||||||
let tts = try!(self.parse_seq_to_end(&token::CloseDelim(delim),
|
let tts = try!(self.parse_seq_to_end(&token::CloseDelim(delim),
|
||||||
seq_sep_none(), |p| p.parse_token_tree()));
|
seq_sep_none(), |p| p.parse_token_tree()));
|
||||||
let mac = Mac_ { path: path, tts: tts, ctxt: EMPTY_CTXT };
|
let mac = Mac_ { path: path, tts: tts, ctxt: EMPTY_CTXT };
|
||||||
pat = PatMac(codemap::Spanned {node: mac,
|
pat = PatKind::Mac(codemap::Spanned {node: mac,
|
||||||
span: mk_sp(lo, self.last_span.hi)});
|
span: mk_sp(lo, self.last_span.hi)});
|
||||||
} else {
|
} else {
|
||||||
// Parse ident @ pat
|
// Parse ident @ pat
|
||||||
|
@ -3513,7 +3512,7 @@ impl<'a> Parser<'a> {
|
||||||
let begin = self.mk_expr(lo, hi, ExprKind::Path(qself, path), None);
|
let begin = self.mk_expr(lo, hi, ExprKind::Path(qself, path), None);
|
||||||
self.bump();
|
self.bump();
|
||||||
let end = try!(self.parse_pat_range_end());
|
let end = try!(self.parse_pat_range_end());
|
||||||
pat = PatRange(begin, end);
|
pat = PatKind::Range(begin, end);
|
||||||
}
|
}
|
||||||
token::OpenDelim(token::Brace) => {
|
token::OpenDelim(token::Brace) => {
|
||||||
if qself.is_some() {
|
if qself.is_some() {
|
||||||
|
@ -3523,7 +3522,7 @@ impl<'a> Parser<'a> {
|
||||||
self.bump();
|
self.bump();
|
||||||
let (fields, etc) = try!(self.parse_pat_fields());
|
let (fields, etc) = try!(self.parse_pat_fields());
|
||||||
self.bump();
|
self.bump();
|
||||||
pat = PatStruct(path, fields, etc);
|
pat = PatKind::Struct(path, fields, etc);
|
||||||
}
|
}
|
||||||
token::OpenDelim(token::Paren) => {
|
token::OpenDelim(token::Paren) => {
|
||||||
if qself.is_some() {
|
if qself.is_some() {
|
||||||
|
@ -3535,22 +3534,22 @@ impl<'a> Parser<'a> {
|
||||||
self.bump();
|
self.bump();
|
||||||
self.bump();
|
self.bump();
|
||||||
try!(self.expect(&token::CloseDelim(token::Paren)));
|
try!(self.expect(&token::CloseDelim(token::Paren)));
|
||||||
pat = PatEnum(path, None);
|
pat = PatKind::Enum(path, None);
|
||||||
} else {
|
} else {
|
||||||
let args = try!(self.parse_enum_variant_seq(
|
let args = try!(self.parse_enum_variant_seq(
|
||||||
&token::OpenDelim(token::Paren),
|
&token::OpenDelim(token::Paren),
|
||||||
&token::CloseDelim(token::Paren),
|
&token::CloseDelim(token::Paren),
|
||||||
seq_sep_trailing_allowed(token::Comma),
|
seq_sep_trailing_allowed(token::Comma),
|
||||||
|p| p.parse_pat()));
|
|p| p.parse_pat()));
|
||||||
pat = PatEnum(path, Some(args));
|
pat = PatKind::Enum(path, Some(args));
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
_ => {
|
_ => {
|
||||||
pat = match qself {
|
pat = match qself {
|
||||||
// Parse qualified path
|
// Parse qualified path
|
||||||
Some(qself) => PatQPath(qself, path),
|
Some(qself) => PatKind::QPath(qself, path),
|
||||||
// Parse nullary enum
|
// Parse nullary enum
|
||||||
None => PatEnum(path, Some(vec![]))
|
None => PatKind::Enum(path, Some(vec![]))
|
||||||
};
|
};
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -3560,9 +3559,9 @@ impl<'a> Parser<'a> {
|
||||||
let begin = try!(self.parse_pat_literal_maybe_minus());
|
let begin = try!(self.parse_pat_literal_maybe_minus());
|
||||||
if self.eat(&token::DotDotDot) {
|
if self.eat(&token::DotDotDot) {
|
||||||
let end = try!(self.parse_pat_range_end());
|
let end = try!(self.parse_pat_range_end());
|
||||||
pat = PatRange(begin, end);
|
pat = PatKind::Range(begin, end);
|
||||||
} else {
|
} else {
|
||||||
pat = PatLit(begin);
|
pat = PatKind::Lit(begin);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -3581,7 +3580,7 @@ impl<'a> Parser<'a> {
|
||||||
/// error message when parsing mistakes like ref foo(a,b)
|
/// error message when parsing mistakes like ref foo(a,b)
|
||||||
fn parse_pat_ident(&mut self,
|
fn parse_pat_ident(&mut self,
|
||||||
binding_mode: ast::BindingMode)
|
binding_mode: ast::BindingMode)
|
||||||
-> PResult<'a, ast::Pat_> {
|
-> PResult<'a, PatKind> {
|
||||||
if !self.token.is_plain_ident() {
|
if !self.token.is_plain_ident() {
|
||||||
let span = self.span;
|
let span = self.span;
|
||||||
let tok_str = self.this_token_to_string();
|
let tok_str = self.this_token_to_string();
|
||||||
|
@ -3610,7 +3609,7 @@ impl<'a> Parser<'a> {
|
||||||
"expected identifier, found enum pattern"))
|
"expected identifier, found enum pattern"))
|
||||||
}
|
}
|
||||||
|
|
||||||
Ok(PatIdent(binding_mode, name, sub))
|
Ok(PatKind::Ident(binding_mode, name, sub))
|
||||||
}
|
}
|
||||||
|
|
||||||
/// Parse a local variable declaration
|
/// Parse a local variable declaration
|
||||||
|
|
|
@ -11,7 +11,7 @@
|
||||||
pub use self::AnnNode::*;
|
pub use self::AnnNode::*;
|
||||||
|
|
||||||
use abi::{self, Abi};
|
use abi::{self, Abi};
|
||||||
use ast::{self, TokenTree, BlockCheckMode};
|
use ast::{self, TokenTree, BlockCheckMode, PatKind};
|
||||||
use ast::{RegionTyParamBound, TraitTyParamBound, TraitBoundModifier};
|
use ast::{RegionTyParamBound, TraitTyParamBound, TraitBoundModifier};
|
||||||
use ast::Attribute;
|
use ast::Attribute;
|
||||||
use attr::ThinAttributesExt;
|
use attr::ThinAttributesExt;
|
||||||
|
@ -2457,8 +2457,8 @@ impl<'a> State<'a> {
|
||||||
/* Pat isn't normalized, but the beauty of it
|
/* Pat isn't normalized, but the beauty of it
|
||||||
is that it doesn't matter */
|
is that it doesn't matter */
|
||||||
match pat.node {
|
match pat.node {
|
||||||
ast::PatWild => try!(word(&mut self.s, "_")),
|
PatKind::Wild => try!(word(&mut self.s, "_")),
|
||||||
ast::PatIdent(binding_mode, ref path1, ref sub) => {
|
PatKind::Ident(binding_mode, ref path1, ref sub) => {
|
||||||
match binding_mode {
|
match binding_mode {
|
||||||
ast::BindingMode::ByRef(mutbl) => {
|
ast::BindingMode::ByRef(mutbl) => {
|
||||||
try!(self.word_nbsp("ref"));
|
try!(self.word_nbsp("ref"));
|
||||||
|
@ -2478,7 +2478,7 @@ impl<'a> State<'a> {
|
||||||
None => ()
|
None => ()
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
ast::PatEnum(ref path, ref args_) => {
|
PatKind::Enum(ref path, ref args_) => {
|
||||||
try!(self.print_path(path, true, 0));
|
try!(self.print_path(path, true, 0));
|
||||||
match *args_ {
|
match *args_ {
|
||||||
None => try!(word(&mut self.s, "(..)")),
|
None => try!(word(&mut self.s, "(..)")),
|
||||||
|
@ -2492,10 +2492,10 @@ impl<'a> State<'a> {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
ast::PatQPath(ref qself, ref path) => {
|
PatKind::QPath(ref qself, ref path) => {
|
||||||
try!(self.print_qpath(path, qself, false));
|
try!(self.print_qpath(path, qself, false));
|
||||||
}
|
}
|
||||||
ast::PatStruct(ref path, ref fields, etc) => {
|
PatKind::Struct(ref path, ref fields, etc) => {
|
||||||
try!(self.print_path(path, true, 0));
|
try!(self.print_path(path, true, 0));
|
||||||
try!(self.nbsp());
|
try!(self.nbsp());
|
||||||
try!(self.word_space("{"));
|
try!(self.word_space("{"));
|
||||||
|
@ -2518,7 +2518,7 @@ impl<'a> State<'a> {
|
||||||
try!(space(&mut self.s));
|
try!(space(&mut self.s));
|
||||||
try!(word(&mut self.s, "}"));
|
try!(word(&mut self.s, "}"));
|
||||||
}
|
}
|
||||||
ast::PatTup(ref elts) => {
|
PatKind::Tup(ref elts) => {
|
||||||
try!(self.popen());
|
try!(self.popen());
|
||||||
try!(self.commasep(Inconsistent,
|
try!(self.commasep(Inconsistent,
|
||||||
&elts[..],
|
&elts[..],
|
||||||
|
@ -2528,32 +2528,32 @@ impl<'a> State<'a> {
|
||||||
}
|
}
|
||||||
try!(self.pclose());
|
try!(self.pclose());
|
||||||
}
|
}
|
||||||
ast::PatBox(ref inner) => {
|
PatKind::Box(ref inner) => {
|
||||||
try!(word(&mut self.s, "box "));
|
try!(word(&mut self.s, "box "));
|
||||||
try!(self.print_pat(&inner));
|
try!(self.print_pat(&inner));
|
||||||
}
|
}
|
||||||
ast::PatRegion(ref inner, mutbl) => {
|
PatKind::Ref(ref inner, mutbl) => {
|
||||||
try!(word(&mut self.s, "&"));
|
try!(word(&mut self.s, "&"));
|
||||||
if mutbl == ast::Mutability::Mutable {
|
if mutbl == ast::Mutability::Mutable {
|
||||||
try!(word(&mut self.s, "mut "));
|
try!(word(&mut self.s, "mut "));
|
||||||
}
|
}
|
||||||
try!(self.print_pat(&inner));
|
try!(self.print_pat(&inner));
|
||||||
}
|
}
|
||||||
ast::PatLit(ref e) => try!(self.print_expr(&e)),
|
PatKind::Lit(ref e) => try!(self.print_expr(&**e)),
|
||||||
ast::PatRange(ref begin, ref end) => {
|
PatKind::Range(ref begin, ref end) => {
|
||||||
try!(self.print_expr(&begin));
|
try!(self.print_expr(&begin));
|
||||||
try!(space(&mut self.s));
|
try!(space(&mut self.s));
|
||||||
try!(word(&mut self.s, "..."));
|
try!(word(&mut self.s, "..."));
|
||||||
try!(self.print_expr(&end));
|
try!(self.print_expr(&end));
|
||||||
}
|
}
|
||||||
ast::PatVec(ref before, ref slice, ref after) => {
|
PatKind::Vec(ref before, ref slice, ref after) => {
|
||||||
try!(word(&mut self.s, "["));
|
try!(word(&mut self.s, "["));
|
||||||
try!(self.commasep(Inconsistent,
|
try!(self.commasep(Inconsistent,
|
||||||
&before[..],
|
&before[..],
|
||||||
|s, p| s.print_pat(&p)));
|
|s, p| s.print_pat(&p)));
|
||||||
if let Some(ref p) = *slice {
|
if let Some(ref p) = *slice {
|
||||||
if !before.is_empty() { try!(self.word_space(",")); }
|
if !before.is_empty() { try!(self.word_space(",")); }
|
||||||
if p.node != ast::PatWild {
|
if p.node != PatKind::Wild {
|
||||||
try!(self.print_pat(&p));
|
try!(self.print_pat(&p));
|
||||||
}
|
}
|
||||||
try!(word(&mut self.s, ".."));
|
try!(word(&mut self.s, ".."));
|
||||||
|
@ -2564,7 +2564,7 @@ impl<'a> State<'a> {
|
||||||
|s, p| s.print_pat(&p)));
|
|s, p| s.print_pat(&p)));
|
||||||
try!(word(&mut self.s, "]"));
|
try!(word(&mut self.s, "]"));
|
||||||
}
|
}
|
||||||
ast::PatMac(ref m) => try!(self.print_mac(m, token::Paren)),
|
PatKind::Mac(ref m) => try!(self.print_mac(m, token::Paren)),
|
||||||
}
|
}
|
||||||
self.ann.post(self, NodePat(pat))
|
self.ann.post(self, NodePat(pat))
|
||||||
}
|
}
|
||||||
|
@ -2671,7 +2671,7 @@ impl<'a> State<'a> {
|
||||||
let m = match *explicit_self {
|
let m = match *explicit_self {
|
||||||
ast::SelfKind::Static => ast::Mutability::Immutable,
|
ast::SelfKind::Static => ast::Mutability::Immutable,
|
||||||
_ => match decl.inputs[0].pat.node {
|
_ => match decl.inputs[0].pat.node {
|
||||||
ast::PatIdent(ast::BindingMode::ByValue(m), _, _) => m,
|
PatKind::Ident(ast::BindingMode::ByValue(m), _, _) => m,
|
||||||
_ => ast::Mutability::Immutable
|
_ => ast::Mutability::Immutable
|
||||||
}
|
}
|
||||||
};
|
};
|
||||||
|
@ -2962,7 +2962,7 @@ impl<'a> State<'a> {
|
||||||
ast::TyKind::Infer if is_closure => try!(self.print_pat(&input.pat)),
|
ast::TyKind::Infer if is_closure => try!(self.print_pat(&input.pat)),
|
||||||
_ => {
|
_ => {
|
||||||
match input.pat.node {
|
match input.pat.node {
|
||||||
ast::PatIdent(_, ref path1, _) if
|
PatKind::Ident(_, ref path1, _) if
|
||||||
path1.node.name ==
|
path1.node.name ==
|
||||||
parse::token::special_idents::invalid.name => {
|
parse::token::special_idents::invalid.name => {
|
||||||
// Do nothing.
|
// Do nothing.
|
||||||
|
|
|
@ -419,46 +419,46 @@ pub fn walk_assoc_type_binding<'v, V: Visitor<'v>>(visitor: &mut V,
|
||||||
|
|
||||||
pub fn walk_pat<'v, V: Visitor<'v>>(visitor: &mut V, pattern: &'v Pat) {
|
pub fn walk_pat<'v, V: Visitor<'v>>(visitor: &mut V, pattern: &'v Pat) {
|
||||||
match pattern.node {
|
match pattern.node {
|
||||||
PatEnum(ref path, ref opt_children) => {
|
PatKind::Enum(ref path, ref opt_children) => {
|
||||||
visitor.visit_path(path, pattern.id);
|
visitor.visit_path(path, pattern.id);
|
||||||
if let Some(ref children) = *opt_children {
|
if let Some(ref children) = *opt_children {
|
||||||
walk_list!(visitor, visit_pat, children);
|
walk_list!(visitor, visit_pat, children);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
PatQPath(ref qself, ref path) => {
|
PatKind::QPath(ref qself, ref path) => {
|
||||||
visitor.visit_ty(&qself.ty);
|
visitor.visit_ty(&qself.ty);
|
||||||
visitor.visit_path(path, pattern.id)
|
visitor.visit_path(path, pattern.id)
|
||||||
}
|
}
|
||||||
PatStruct(ref path, ref fields, _) => {
|
PatKind::Struct(ref path, ref fields, _) => {
|
||||||
visitor.visit_path(path, pattern.id);
|
visitor.visit_path(path, pattern.id);
|
||||||
for field in fields {
|
for field in fields {
|
||||||
visitor.visit_ident(field.span, field.node.ident);
|
visitor.visit_ident(field.span, field.node.ident);
|
||||||
visitor.visit_pat(&field.node.pat)
|
visitor.visit_pat(&field.node.pat)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
PatTup(ref tuple_elements) => {
|
PatKind::Tup(ref tuple_elements) => {
|
||||||
walk_list!(visitor, visit_pat, tuple_elements);
|
walk_list!(visitor, visit_pat, tuple_elements);
|
||||||
}
|
}
|
||||||
PatBox(ref subpattern) |
|
PatKind::Box(ref subpattern) |
|
||||||
PatRegion(ref subpattern, _) => {
|
PatKind::Ref(ref subpattern, _) => {
|
||||||
visitor.visit_pat(subpattern)
|
visitor.visit_pat(subpattern)
|
||||||
}
|
}
|
||||||
PatIdent(_, ref pth1, ref optional_subpattern) => {
|
PatKind::Ident(_, ref pth1, ref optional_subpattern) => {
|
||||||
visitor.visit_ident(pth1.span, pth1.node);
|
visitor.visit_ident(pth1.span, pth1.node);
|
||||||
walk_list!(visitor, visit_pat, optional_subpattern);
|
walk_list!(visitor, visit_pat, optional_subpattern);
|
||||||
}
|
}
|
||||||
PatLit(ref expression) => visitor.visit_expr(expression),
|
PatKind::Lit(ref expression) => visitor.visit_expr(expression),
|
||||||
PatRange(ref lower_bound, ref upper_bound) => {
|
PatKind::Range(ref lower_bound, ref upper_bound) => {
|
||||||
visitor.visit_expr(lower_bound);
|
visitor.visit_expr(lower_bound);
|
||||||
visitor.visit_expr(upper_bound)
|
visitor.visit_expr(upper_bound)
|
||||||
}
|
}
|
||||||
PatWild => (),
|
PatKind::Wild => (),
|
||||||
PatVec(ref prepatterns, ref slice_pattern, ref postpatterns) => {
|
PatKind::Vec(ref prepatterns, ref slice_pattern, ref postpatterns) => {
|
||||||
walk_list!(visitor, visit_pat, prepatterns);
|
walk_list!(visitor, visit_pat, prepatterns);
|
||||||
walk_list!(visitor, visit_pat, slice_pattern);
|
walk_list!(visitor, visit_pat, slice_pattern);
|
||||||
walk_list!(visitor, visit_pat, postpatterns);
|
walk_list!(visitor, visit_pat, postpatterns);
|
||||||
}
|
}
|
||||||
PatMac(ref mac) => visitor.visit_mac(mac),
|
PatKind::Mac(ref mac) => visitor.visit_mac(mac),
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -193,7 +193,7 @@ use std::collections::HashSet;
|
||||||
use std::vec;
|
use std::vec;
|
||||||
|
|
||||||
use syntax::abi::Abi;
|
use syntax::abi::Abi;
|
||||||
use syntax::ast::{EnumDef, Expr, Ident, Generics, VariantData, BinOpKind, self};
|
use syntax::ast::{self, EnumDef, Expr, Ident, Generics, VariantData, BinOpKind, PatKind};
|
||||||
use syntax::ast_util;
|
use syntax::ast_util;
|
||||||
use syntax::attr;
|
use syntax::attr;
|
||||||
use syntax::attr::AttrMetaMethods;
|
use syntax::attr::AttrMetaMethods;
|
||||||
|
@ -1142,7 +1142,7 @@ impl<'a> MethodDef<'a> {
|
||||||
variant,
|
variant,
|
||||||
self_arg_name,
|
self_arg_name,
|
||||||
ast::Mutability::Immutable);
|
ast::Mutability::Immutable);
|
||||||
(cx.pat(sp, ast::PatRegion(p, ast::Mutability::Immutable)), idents)
|
(cx.pat(sp, PatKind::Ref(p, ast::Mutability::Immutable)), idents)
|
||||||
};
|
};
|
||||||
|
|
||||||
// A single arm has form (&VariantK, &VariantK, ...) => BodyK
|
// A single arm has form (&VariantK, &VariantK, ...) => BodyK
|
||||||
|
@ -1472,7 +1472,7 @@ impl<'a> TraitDef<'a> {
|
||||||
-> Vec<P<ast::Pat>> {
|
-> Vec<P<ast::Pat>> {
|
||||||
field_paths.iter().map(|path| {
|
field_paths.iter().map(|path| {
|
||||||
cx.pat(path.span,
|
cx.pat(path.span,
|
||||||
ast::PatIdent(ast::BindingMode::ByRef(mutbl), (*path).clone(), None))
|
PatKind::Ident(ast::BindingMode::ByRef(mutbl), (*path).clone(), None))
|
||||||
}).collect()
|
}).collect()
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue