Skip to content

Commit 7be8f0a

Browse files
committed
auto merge of #16306 : pnkfelix/rust/fsk-ast-refactor-PatWild, r=alexcrichton
AST refactoring: merge PatWild and PatWildMulti into one variant with a flag
2 parents 8fe73f1 + d320235 commit 7be8f0a

File tree

20 files changed

+42
-36
lines changed

20 files changed

+42
-36
lines changed

src/libregex_macros/lib.rs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -594,7 +594,7 @@ fn exec<'t>(which: ::regex::native::MatchKind, input: &'t str,
594594
pats: vec!(box(GC) ast::Pat{
595595
id: ast::DUMMY_NODE_ID,
596596
span: self.sp,
597-
node: ast::PatWild,
597+
node: ast::PatWild(ast::PatWildSingle),
598598
}),
599599
guard: None,
600600
body: body,

src/librustc/middle/cfg/construct.rs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -112,7 +112,7 @@ impl<'a> CFGBuilder<'a> {
112112
ast::PatEnum(_, None) |
113113
ast::PatLit(..) |
114114
ast::PatRange(..) |
115-
ast::PatWild | ast::PatWildMulti => {
115+
ast::PatWild(_) => {
116116
self.add_node(pat.id, [pred])
117117
}
118118

src/librustc/middle/check_match.rs

Lines changed: 5 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -344,7 +344,7 @@ fn construct_witness(cx: &MatchCheckCtxt, ctor: &Constructor,
344344
let fields = ty::lookup_struct_fields(cx.tcx, vid);
345345
let field_pats: Vec<FieldPat> = fields.move_iter()
346346
.zip(pats.iter())
347-
.filter(|&(_, pat)| pat.node != PatWild)
347+
.filter(|&(_, pat)| pat.node != PatWild(PatWildSingle))
348348
.map(|(field, pat)| FieldPat {
349349
ident: Ident::new(field.name),
350350
pat: pat.clone()
@@ -372,7 +372,7 @@ fn construct_witness(cx: &MatchCheckCtxt, ctor: &Constructor,
372372
},
373373
_ => unreachable!()
374374
},
375-
ty::ty_str => PatWild,
375+
ty::ty_str => PatWild(PatWildSingle),
376376

377377
_ => {
378378
assert_eq!(pats.len(), 1);
@@ -394,7 +394,7 @@ fn construct_witness(cx: &MatchCheckCtxt, ctor: &Constructor,
394394
_ => {
395395
match *ctor {
396396
ConstantValue(ref v) => PatLit(const_val_to_expr(v)),
397-
_ => PatWild
397+
_ => PatWild(PatWildSingle),
398398
}
399399
}
400400
};
@@ -599,7 +599,7 @@ fn pat_constructors(cx: &MatchCheckCtxt, p: Gc<Pat>,
599599
},
600600
PatBox(_) | PatTup(_) | PatRegion(..) =>
601601
vec!(Single),
602-
PatWild | PatWildMulti =>
602+
PatWild(_) =>
603603
vec!(),
604604
PatMac(_) =>
605605
cx.tcx.sess.bug("unexpanded macro")
@@ -666,10 +666,7 @@ pub fn specialize(cx: &MatchCheckCtxt, r: &[Gc<Pat>],
666666
id: pat_id, node: ref node, span: pat_span
667667
} = &(*raw_pat(r[col]));
668668
let head: Option<Vec<Gc<Pat>>> = match node {
669-
&PatWild =>
670-
Some(Vec::from_elem(arity, wild())),
671-
672-
&PatWildMulti =>
669+
&PatWild(_) =>
673670
Some(Vec::from_elem(arity, wild())),
674671

675672
&PatIdent(_, _, _) => {

src/librustc/middle/kind.rs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -706,7 +706,7 @@ fn check_sized(tcx: &ty::ctxt, ty: ty::t, name: String, sp: Span) {
706706
// Check that any variables in a pattern have types with statically known size.
707707
fn check_pat(cx: &mut Context, pat: &Pat) {
708708
let var_name = match pat.node {
709-
PatWild => Some("_".to_string()),
709+
PatWild(PatWildSingle) => Some("_".to_string()),
710710
PatIdent(_, ref path1, _) => Some(ident_to_string(&path1.node).to_string()),
711711
_ => None
712712
};

src/librustc/middle/mem_categorization.rs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1026,7 +1026,7 @@ impl<'t,TYPER:Typer> MemCategorizationContext<'t,TYPER> {
10261026
op(self, cmt.clone(), pat);
10271027

10281028
match pat.node {
1029-
ast::PatWild | ast::PatWildMulti => {
1029+
ast::PatWild(_) => {
10301030
// _
10311031
}
10321032

src/librustc/middle/pat_util.rs

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -68,7 +68,7 @@ pub fn pat_is_binding(dm: &resolve::DefMap, pat: &Pat) -> bool {
6868
pub fn pat_is_binding_or_wild(dm: &resolve::DefMap, pat: &Pat) -> bool {
6969
match pat.node {
7070
PatIdent(..) => pat_is_binding(dm, pat),
71-
PatWild | PatWildMulti => true,
71+
PatWild(_) => true,
7272
_ => false
7373
}
7474
}
@@ -116,7 +116,7 @@ pub fn simple_identifier<'a>(pat: &'a Pat) -> Option<&'a Ident> {
116116
}
117117

118118
pub fn wild() -> Gc<Pat> {
119-
box (GC) Pat { id: 0, node: PatWild, span: DUMMY_SP }
119+
box (GC) Pat { id: 0, node: PatWild(PatWildSingle), span: DUMMY_SP }
120120
}
121121

122122
pub fn def_to_path(tcx: &ty::ctxt, id: DefId) -> Path {

src/librustc/middle/trans/_match.rs

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1392,7 +1392,7 @@ fn trans_match_inner<'a>(scope_cx: &'a Block<'a>,
13921392
// to the default arm.
13931393
let has_default = arms.last().map_or(false, |arm| {
13941394
arm.pats.len() == 1
1395-
&& arm.pats.last().unwrap().node == ast::PatWild
1395+
&& arm.pats.last().unwrap().node == ast::PatWild(ast::PatWildSingle)
13961396
});
13971397

13981398
compile_submatch(bcx, matches.as_slice(), [discr_datum.val], &chk, has_default);
@@ -1762,7 +1762,7 @@ fn bind_irrefutable_pat<'a>(
17621762
ast::PatMac(..) => {
17631763
bcx.sess().span_bug(pat.span, "unexpanded macro");
17641764
}
1765-
ast::PatWild | ast::PatWildMulti | ast::PatLit(_) | ast::PatRange(_, _) => ()
1765+
ast::PatWild(_) | ast::PatLit(_) | ast::PatRange(_, _) => ()
17661766
}
17671767
return bcx;
17681768
}

src/librustc/middle/trans/base.rs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1032,7 +1032,7 @@ pub fn store_ty(cx: &Block, v: ValueRef, dst: ValueRef, t: ty::t) {
10321032

10331033
pub fn ignore_lhs(_bcx: &Block, local: &ast::Local) -> bool {
10341034
match local.pat.node {
1035-
ast::PatWild => true, _ => false
1035+
ast::PatWild(ast::PatWildSingle) => true, _ => false
10361036
}
10371037
}
10381038

src/librustc/middle/trans/debuginfo.rs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -3429,7 +3429,7 @@ fn populate_scope_map(cx: &CrateContext,
34293429
}
34303430
}
34313431

3432-
ast::PatWild | ast::PatWildMulti => {
3432+
ast::PatWild(_) => {
34333433
scope_map.insert(pat.id, scope_stack.last().unwrap().scope_metadata);
34343434
}
34353435

src/librustc/middle/typeck/check/_match.rs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -412,7 +412,7 @@ pub fn check_pat(pcx: &pat_ctxt, pat: &ast::Pat, expected: ty::t) {
412412
let tcx = pcx.fcx.ccx.tcx;
413413

414414
match pat.node {
415-
ast::PatWild | ast::PatWildMulti => {
415+
ast::PatWild(_) => {
416416
fcx.write_ty(pat.id, expected);
417417
}
418418
ast::PatLit(ref lt) => {

src/librustc/middle/typeck/collect.rs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1257,7 +1257,7 @@ pub fn ty_of_foreign_fn_decl(ccx: &CrateCtxt,
12571257
for i in decl.inputs.iter() {
12581258
match (*i).pat.node {
12591259
ast::PatIdent(_, _, _) => (),
1260-
ast::PatWild => (),
1260+
ast::PatWild(ast::PatWildSingle) => (),
12611261
_ => {
12621262
span_err!(ccx.tcx.sess, (*i).pat.span, E0130,
12631263
"patterns aren't allowed in foreign function declarations");

src/librustdoc/clean/mod.rs

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1959,8 +1959,8 @@ fn name_from_pat(p: &ast::Pat) -> String {
19591959
debug!("Trying to get a name from pattern: {:?}", p);
19601960

19611961
match p.node {
1962-
PatWild => "_".to_string(),
1963-
PatWildMulti => "..".to_string(),
1962+
PatWild(PatWildSingle) => "_".to_string(),
1963+
PatWild(PatWildMulti) => "..".to_string(),
19641964
PatIdent(_, ref p, _) => token::get_ident(p.node).get().to_string(),
19651965
PatEnum(ref p, _) => path_to_string(p),
19661966
PatStruct(ref name, ref fields, etc) => {

src/libsyntax/ast.rs

Lines changed: 12 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -324,9 +324,19 @@ pub enum BindingMode {
324324
}
325325

326326
#[deriving(Clone, PartialEq, Eq, Encodable, Decodable, Hash, Show)]
327-
pub enum Pat_ {
328-
PatWild,
327+
pub enum PatWildKind {
328+
/// Represents the wildcard pattern `_`
329+
PatWildSingle,
330+
331+
/// Represents the wildcard pattern `..`
329332
PatWildMulti,
333+
}
334+
335+
#[deriving(Clone, PartialEq, Eq, Encodable, Decodable, Hash, Show)]
336+
pub enum Pat_ {
337+
/// Represents a wildcard pattern (either `_` or `..`)
338+
PatWild(PatWildKind),
339+
330340
/// A PatIdent may either be a new bound variable,
331341
/// or a nullary enum (in which case the third field
332342
/// is None).

src/libsyntax/ast_util.rs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -636,7 +636,7 @@ pub fn walk_pat(pat: &Pat, it: |&Pat| -> bool) -> bool {
636636
after.iter().all(|p| walk_pat(&**p, |p| it(p)))
637637
}
638638
PatMac(_) => fail!("attempted to analyze unexpanded pattern"),
639-
PatWild | PatWildMulti | PatLit(_) | PatRange(_, _) | PatIdent(_, _, _) |
639+
PatWild(_) | PatLit(_) | PatRange(_, _) | PatIdent(_, _, _) |
640640
PatEnum(_, _) => {
641641
true
642642
}

src/libsyntax/ext/base.rs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -229,7 +229,7 @@ impl DummyResult {
229229
pub fn raw_pat(sp: Span) -> Gc<ast::Pat> {
230230
box(GC) ast::Pat {
231231
id: ast::DUMMY_NODE_ID,
232-
node: ast::PatWild,
232+
node: ast::PatWild(ast::PatWildSingle),
233233
span: sp,
234234
}
235235
}

src/libsyntax/ext/build.rs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -763,7 +763,7 @@ impl<'a> AstBuilder for ExtCtxt<'a> {
763763
box(GC) ast::Pat { id: ast::DUMMY_NODE_ID, node: pat, span: span }
764764
}
765765
fn pat_wild(&self, span: Span) -> Gc<ast::Pat> {
766-
self.pat(span, ast::PatWild)
766+
self.pat(span, ast::PatWild(ast::PatWildSingle))
767767
}
768768
fn pat_lit(&self, span: Span, expr: Gc<ast::Expr>) -> Gc<ast::Pat> {
769769
self.pat(span, ast::PatLit(expr))

src/libsyntax/fold.rs

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -969,8 +969,7 @@ pub fn noop_fold_method<T: Folder>(m: &Method, folder: &mut T) -> SmallVector<Gc
969969
pub fn noop_fold_pat<T: Folder>(p: Gc<Pat>, folder: &mut T) -> Gc<Pat> {
970970
let id = folder.new_id(p.id);
971971
let node = match p.node {
972-
PatWild => PatWild,
973-
PatWildMulti => PatWildMulti,
972+
PatWild(k) => PatWild(k),
974973
PatIdent(binding_mode, ref pth1, ref sub) => {
975974
PatIdent(binding_mode,
976975
Spanned{span: folder.new_span(pth1.span),

src/libsyntax/parse/parser.rs

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -39,7 +39,7 @@ use ast::{MutImmutable, MutMutable, Mac_, MacInvocTT, Matcher, MatchNonterminal}
3939
use ast::{MatchSeq, MatchTok, Method, MutTy, BiMul, Mutability};
4040
use ast::{NamedField, UnNeg, NoReturn, UnNot, P, Pat, PatEnum};
4141
use ast::{PatIdent, PatLit, PatRange, PatRegion, PatStruct};
42-
use ast::{PatTup, PatBox, PatWild, PatWildMulti};
42+
use ast::{PatTup, PatBox, PatWild, PatWildMulti, PatWildSingle};
4343
use ast::{BiRem, Required};
4444
use ast::{RetStyle, Return, BiShl, BiShr, Stmt, StmtDecl};
4545
use ast::{StmtExpr, StmtSemi, StmtMac, StructDef, StructField};
@@ -2822,7 +2822,7 @@ impl<'a> Parser<'a> {
28222822
if self.token == token::COMMA || self.token == token::RBRACKET {
28232823
slice = Some(box(GC) ast::Pat {
28242824
id: ast::DUMMY_NODE_ID,
2825-
node: PatWildMulti,
2825+
node: PatWild(PatWildMulti),
28262826
span: self.span,
28272827
})
28282828
} else {
@@ -2920,7 +2920,7 @@ impl<'a> Parser<'a> {
29202920
// parse _
29212921
token::UNDERSCORE => {
29222922
self.bump();
2923-
pat = PatWild;
2923+
pat = PatWild(PatWildSingle);
29242924
hi = self.last_span.hi;
29252925
return box(GC) ast::Pat {
29262926
id: ast::DUMMY_NODE_ID,

src/libsyntax/print/pprust.rs

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1732,8 +1732,8 @@ impl<'a> State<'a> {
17321732
/* Pat isn't normalized, but the beauty of it
17331733
is that it doesn't matter */
17341734
match pat.node {
1735-
ast::PatWild => try!(word(&mut self.s, "_")),
1736-
ast::PatWildMulti => try!(word(&mut self.s, "..")),
1735+
ast::PatWild(ast::PatWildSingle) => try!(word(&mut self.s, "_")),
1736+
ast::PatWild(ast::PatWildMulti) => try!(word(&mut self.s, "..")),
17371737
ast::PatIdent(binding_mode, ref path1, sub) => {
17381738
match binding_mode {
17391739
ast::BindByRef(mutbl) => {
@@ -1822,7 +1822,7 @@ impl<'a> State<'a> {
18221822
for p in slice.iter() {
18231823
if !before.is_empty() { try!(self.word_space(",")); }
18241824
match **p {
1825-
ast::Pat { node: ast::PatWildMulti, .. } => {
1825+
ast::Pat { node: ast::PatWild(ast::PatWildMulti), .. } => {
18261826
// this case is handled by print_pat
18271827
}
18281828
_ => try!(word(&mut self.s, "..")),

src/libsyntax/visit.rs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -481,7 +481,7 @@ pub fn walk_pat<E: Clone, V: Visitor<E>>(visitor: &mut V, pattern: &Pat, env: E)
481481
visitor.visit_expr(&**lower_bound, env.clone());
482482
visitor.visit_expr(&**upper_bound, env)
483483
}
484-
PatWild | PatWildMulti => (),
484+
PatWild(_) => (),
485485
PatVec(ref prepattern, ref slice_pattern, ref postpatterns) => {
486486
for prepattern in prepattern.iter() {
487487
visitor.visit_pat(&**prepattern, env.clone())

0 commit comments

Comments
 (0)