auto merge of #14483 : ahmedcharles/rust/patbox, r=alexcrichton
This commit is contained in:
commit
729ee20338
@ -113,7 +113,7 @@ impl<'a> CFGBuilder<'a> {
|
|||||||
self.add_node(pat.id, [pred])
|
self.add_node(pat.id, [pred])
|
||||||
}
|
}
|
||||||
|
|
||||||
ast::PatUniq(subpat) |
|
ast::PatBox(subpat) |
|
||||||
ast::PatRegion(subpat) |
|
ast::PatRegion(subpat) |
|
||||||
ast::PatIdent(_, _, Some(subpat)) => {
|
ast::PatIdent(_, _, Some(subpat)) => {
|
||||||
let subpat_exit = self.pat(subpat, pred);
|
let subpat_exit = self.pat(subpat, pred);
|
||||||
|
@ -383,7 +383,7 @@ fn pat_ctor_id(cx: &MatchCheckCtxt, p: @Pat) -> Option<ctor> {
|
|||||||
_ => Some(single)
|
_ => Some(single)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
PatUniq(_) | PatTup(_) | PatRegion(..) => {
|
PatBox(_) | PatTup(_) | PatRegion(..) => {
|
||||||
Some(single)
|
Some(single)
|
||||||
}
|
}
|
||||||
PatVec(ref before, slice, ref after) => {
|
PatVec(ref before, slice, ref after) => {
|
||||||
@ -764,7 +764,7 @@ fn specialize(cx: &MatchCheckCtxt,
|
|||||||
PatTup(args) => {
|
PatTup(args) => {
|
||||||
Some(args.iter().map(|x| *x).collect::<Vec<_>>().append(r.tail()))
|
Some(args.iter().map(|x| *x).collect::<Vec<_>>().append(r.tail()))
|
||||||
}
|
}
|
||||||
PatUniq(a) | PatRegion(a) => {
|
PatBox(a) | PatRegion(a) => {
|
||||||
Some((vec!(a)).append(r.tail()))
|
Some((vec!(a)).append(r.tail()))
|
||||||
}
|
}
|
||||||
PatLit(expr) => {
|
PatLit(expr) => {
|
||||||
@ -924,7 +924,7 @@ fn find_refutable(cx: &MatchCheckCtxt, pat: &Pat, spans: &mut Vec<Span>) {
|
|||||||
}
|
}
|
||||||
|
|
||||||
match pat.node {
|
match pat.node {
|
||||||
PatUniq(sub) | PatRegion(sub) | PatIdent(_, _, Some(sub)) => {
|
PatBox(sub) | PatRegion(sub) | PatIdent(_, _, Some(sub)) => {
|
||||||
find_refutable(cx, sub, spans)
|
find_refutable(cx, sub, spans)
|
||||||
}
|
}
|
||||||
PatWild | PatWildMulti | PatIdent(_, _, None) => {}
|
PatWild | PatWildMulti | PatIdent(_, _, None) => {}
|
||||||
|
@ -1064,7 +1064,7 @@ impl<'t,TYPER:Typer> MemCategorizationContext<'t,TYPER> {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
ast::PatUniq(subpat) | ast::PatRegion(subpat) => {
|
ast::PatBox(subpat) | ast::PatRegion(subpat) => {
|
||||||
// @p1, ~p1
|
// @p1, ~p1
|
||||||
let subcmt = self.cat_deref(pat, cmt, 0);
|
let subcmt = self.cat_deref(pat, cmt, 0);
|
||||||
if_ok!(self.cat_pattern(subcmt, subpat, op));
|
if_ok!(self.cat_pattern(subcmt, subpat, op));
|
||||||
|
@ -671,7 +671,7 @@ fn resolve_local(visitor: &mut RegionResolutionVisitor,
|
|||||||
subpats.iter().any(|&p| is_binding_pat(p))
|
subpats.iter().any(|&p| is_binding_pat(p))
|
||||||
}
|
}
|
||||||
|
|
||||||
ast::PatUniq(subpat) => {
|
ast::PatBox(subpat) => {
|
||||||
is_binding_pat(subpat)
|
is_binding_pat(subpat)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -838,7 +838,7 @@ fn enter_uniq<'a, 'b>(
|
|||||||
let dummy = @ast::Pat {id: 0, node: ast::PatWild, span: DUMMY_SP};
|
let dummy = @ast::Pat {id: 0, node: ast::PatWild, span: DUMMY_SP};
|
||||||
enter_match(bcx, dm, m, col, val, |p| {
|
enter_match(bcx, dm, m, col, val, |p| {
|
||||||
match p.node {
|
match p.node {
|
||||||
ast::PatUniq(sub) => {
|
ast::PatBox(sub) => {
|
||||||
Some(vec!(sub))
|
Some(vec!(sub))
|
||||||
}
|
}
|
||||||
_ => {
|
_ => {
|
||||||
@ -1105,7 +1105,7 @@ macro_rules! any_pat (
|
|||||||
)
|
)
|
||||||
|
|
||||||
fn any_uniq_pat(m: &[Match], col: uint) -> bool {
|
fn any_uniq_pat(m: &[Match], col: uint) -> bool {
|
||||||
any_pat!(m, ast::PatUniq(_))
|
any_pat!(m, ast::PatBox(_))
|
||||||
}
|
}
|
||||||
|
|
||||||
fn any_region_pat(m: &[Match], col: uint) -> bool {
|
fn any_region_pat(m: &[Match], col: uint) -> bool {
|
||||||
@ -2270,7 +2270,7 @@ fn bind_irrefutable_pat<'a>(
|
|||||||
binding_mode, cleanup_scope);
|
binding_mode, cleanup_scope);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
ast::PatUniq(inner) => {
|
ast::PatBox(inner) => {
|
||||||
let llbox = Load(bcx, val);
|
let llbox = Load(bcx, val);
|
||||||
bcx = bind_irrefutable_pat(bcx, inner, llbox, binding_mode, cleanup_scope);
|
bcx = bind_irrefutable_pat(bcx, inner, llbox, binding_mode, cleanup_scope);
|
||||||
}
|
}
|
||||||
|
@ -2632,7 +2632,7 @@ fn populate_scope_map(cx: &CrateContext,
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
ast::PatUniq(sub_pat) | ast::PatRegion(sub_pat) => {
|
ast::PatBox(sub_pat) | ast::PatRegion(sub_pat) => {
|
||||||
scope_map.insert(pat.id, scope_stack.last().unwrap().scope_metadata);
|
scope_map.insert(pat.id, scope_stack.last().unwrap().scope_metadata);
|
||||||
walk_pattern(cx, sub_pat, scope_stack, scope_map);
|
walk_pattern(cx, sub_pat, scope_stack, scope_map);
|
||||||
}
|
}
|
||||||
|
@ -626,7 +626,7 @@ pub fn check_pat(pcx: &pat_ctxt, pat: &ast::Pat, expected: ty::t) {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
ast::PatUniq(inner) => {
|
ast::PatBox(inner) => {
|
||||||
check_pointer_pat(pcx, Send, inner, pat.id, pat.span, expected);
|
check_pointer_pat(pcx, Send, inner, pat.id, pat.span, expected);
|
||||||
}
|
}
|
||||||
ast::PatRegion(inner) => {
|
ast::PatRegion(inner) => {
|
||||||
|
@ -1721,7 +1721,7 @@ fn name_from_pat(p: &ast::Pat) -> String {
|
|||||||
PatStruct(..) => fail!("tried to get argument name from pat_struct, \
|
PatStruct(..) => fail!("tried to get argument name from pat_struct, \
|
||||||
which is not allowed in function arguments"),
|
which is not allowed in function arguments"),
|
||||||
PatTup(..) => "(tuple arg NYI)".to_string(),
|
PatTup(..) => "(tuple arg NYI)".to_string(),
|
||||||
PatUniq(p) => name_from_pat(p),
|
PatBox(p) => name_from_pat(p),
|
||||||
PatRegion(p) => name_from_pat(p),
|
PatRegion(p) => name_from_pat(p),
|
||||||
PatLit(..) => {
|
PatLit(..) => {
|
||||||
warn!("tried to get argument name from PatLit, \
|
warn!("tried to get argument name from PatLit, \
|
||||||
|
@ -347,7 +347,7 @@ pub enum Pat_ {
|
|||||||
* we don't bind the fields to names */
|
* we don't bind the fields to names */
|
||||||
PatStruct(Path, Vec<FieldPat> , bool),
|
PatStruct(Path, Vec<FieldPat> , bool),
|
||||||
PatTup(Vec<@Pat> ),
|
PatTup(Vec<@Pat> ),
|
||||||
PatUniq(@Pat),
|
PatBox(@Pat),
|
||||||
PatRegion(@Pat), // reference pattern
|
PatRegion(@Pat), // reference pattern
|
||||||
PatLit(@Expr),
|
PatLit(@Expr),
|
||||||
PatRange(@Expr, @Expr),
|
PatRange(@Expr, @Expr),
|
||||||
|
@ -657,7 +657,7 @@ pub fn walk_pat(pat: &Pat, it: |&Pat| -> bool) -> bool {
|
|||||||
PatEnum(_, Some(ref s)) | PatTup(ref s) => {
|
PatEnum(_, Some(ref s)) | PatTup(ref s) => {
|
||||||
s.iter().advance(|&p| walk_pat(p, |p| it(p)))
|
s.iter().advance(|&p| walk_pat(p, |p| it(p)))
|
||||||
}
|
}
|
||||||
PatUniq(s) | PatRegion(s) => {
|
PatBox(s) | PatRegion(s) => {
|
||||||
walk_pat(s, it)
|
walk_pat(s, it)
|
||||||
}
|
}
|
||||||
PatVec(ref before, ref slice, ref after) => {
|
PatVec(ref before, ref slice, ref after) => {
|
||||||
|
@ -760,7 +760,7 @@ pub fn noop_fold_pat<T: Folder>(p: @Pat, folder: &mut T) -> @Pat {
|
|||||||
PatStruct(pth_, fs, etc)
|
PatStruct(pth_, fs, etc)
|
||||||
}
|
}
|
||||||
PatTup(ref elts) => PatTup(elts.iter().map(|x| folder.fold_pat(*x)).collect()),
|
PatTup(ref elts) => PatTup(elts.iter().map(|x| folder.fold_pat(*x)).collect()),
|
||||||
PatUniq(inner) => PatUniq(folder.fold_pat(inner)),
|
PatBox(inner) => PatBox(folder.fold_pat(inner)),
|
||||||
PatRegion(inner) => PatRegion(folder.fold_pat(inner)),
|
PatRegion(inner) => PatRegion(folder.fold_pat(inner)),
|
||||||
PatRange(e1, e2) => {
|
PatRange(e1, e2) => {
|
||||||
PatRange(folder.fold_expr(e1), folder.fold_expr(e2))
|
PatRange(folder.fold_expr(e1), folder.fold_expr(e2))
|
||||||
|
@ -39,7 +39,7 @@ use ast::{MutImmutable, MutMutable, Mac_, MacInvocTT, Matcher, MatchNonterminal}
|
|||||||
use ast::{MatchSeq, MatchTok, Method, MutTy, BiMul, Mutability};
|
use ast::{MatchSeq, MatchTok, Method, MutTy, BiMul, Mutability};
|
||||||
use ast::{NamedField, UnNeg, NoReturn, UnNot, P, Pat, PatEnum};
|
use ast::{NamedField, UnNeg, NoReturn, UnNot, P, Pat, PatEnum};
|
||||||
use ast::{PatIdent, PatLit, PatRange, PatRegion, PatStruct};
|
use ast::{PatIdent, PatLit, PatRange, PatRegion, PatStruct};
|
||||||
use ast::{PatTup, PatUniq, PatWild, PatWildMulti};
|
use ast::{PatTup, PatBox, PatWild, PatWildMulti};
|
||||||
use ast::{BiRem, Required};
|
use ast::{BiRem, Required};
|
||||||
use ast::{RetStyle, Return, BiShl, BiShr, Stmt, StmtDecl};
|
use ast::{RetStyle, Return, BiShl, BiShr, Stmt, StmtDecl};
|
||||||
use ast::{Sized, DynSize, StaticSize};
|
use ast::{Sized, DynSize, StaticSize};
|
||||||
@ -2784,7 +2784,7 @@ impl<'a> Parser<'a> {
|
|||||||
// parse ~pat
|
// parse ~pat
|
||||||
self.bump();
|
self.bump();
|
||||||
let sub = self.parse_pat();
|
let sub = self.parse_pat();
|
||||||
pat = PatUniq(sub);
|
pat = PatBox(sub);
|
||||||
hi = self.last_span.hi;
|
hi = self.last_span.hi;
|
||||||
self.obsolete(self.last_span, ObsoleteOwnedPattern);
|
self.obsolete(self.last_span, ObsoleteOwnedPattern);
|
||||||
return @ast::Pat {
|
return @ast::Pat {
|
||||||
@ -2888,7 +2888,7 @@ impl<'a> Parser<'a> {
|
|||||||
// FIXME(#13910): Rename to `PatBox` and extend to full DST
|
// FIXME(#13910): Rename to `PatBox` and extend to full DST
|
||||||
// support.
|
// support.
|
||||||
let sub = self.parse_pat();
|
let sub = self.parse_pat();
|
||||||
pat = PatUniq(sub);
|
pat = PatBox(sub);
|
||||||
hi = self.last_span.hi;
|
hi = self.last_span.hi;
|
||||||
return @ast::Pat {
|
return @ast::Pat {
|
||||||
id: ast::DUMMY_NODE_ID,
|
id: ast::DUMMY_NODE_ID,
|
||||||
|
@ -1721,7 +1721,7 @@ impl<'a> State<'a> {
|
|||||||
}
|
}
|
||||||
try!(self.pclose());
|
try!(self.pclose());
|
||||||
}
|
}
|
||||||
ast::PatUniq(inner) => {
|
ast::PatBox(inner) => {
|
||||||
try!(word(&mut self.s, "box "));
|
try!(word(&mut self.s, "box "));
|
||||||
try!(self.print_pat(inner));
|
try!(self.print_pat(inner));
|
||||||
}
|
}
|
||||||
|
@ -429,7 +429,7 @@ pub fn walk_pat<E: Clone, V: Visitor<E>>(visitor: &mut V, pattern: &Pat, env: E)
|
|||||||
visitor.visit_pat(*tuple_element, env.clone())
|
visitor.visit_pat(*tuple_element, env.clone())
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
PatUniq(subpattern) |
|
PatBox(subpattern) |
|
||||||
PatRegion(subpattern) => {
|
PatRegion(subpattern) => {
|
||||||
visitor.visit_pat(subpattern, env)
|
visitor.visit_pat(subpattern, env)
|
||||||
}
|
}
|
||||||
|
Loading…
Reference in New Issue
Block a user