Add PointerKind to LpDeref
This commit is contained in:
parent
2246d56e71
commit
0ea2a20397
3 changed files with 22 additions and 22 deletions
|
|
@ -101,7 +101,7 @@ impl RestrictionsContext {
|
|||
self.extend(result, cmt.mutbl, LpInterior(i), restrictions)
|
||||
}
|
||||
|
||||
mc::cat_deref(cmt_base, _, mc::uniq_ptr) => {
|
||||
mc::cat_deref(cmt_base, _, pk @ mc::uniq_ptr) => {
|
||||
// R-Deref-Send-Pointer
|
||||
//
|
||||
// When we borrow the interior of an owned pointer, we
|
||||
|
|
@ -110,7 +110,7 @@ impl RestrictionsContext {
|
|||
let result = self.restrict(
|
||||
cmt_base,
|
||||
restrictions | RESTR_MUTATE | RESTR_CLAIM);
|
||||
self.extend(result, cmt.mutbl, LpDeref, restrictions)
|
||||
self.extend(result, cmt.mutbl, LpDeref(pk), restrictions)
|
||||
}
|
||||
|
||||
mc::cat_copied_upvar(*) | // FIXME(#2152) allow mutation of upvars
|
||||
|
|
@ -129,7 +129,7 @@ impl RestrictionsContext {
|
|||
Safe
|
||||
}
|
||||
|
||||
mc::cat_deref(cmt_base, _, mc::gc_ptr(m_mutbl)) => {
|
||||
mc::cat_deref(cmt_base, _, pk @ mc::gc_ptr(m_mutbl)) => {
|
||||
// R-Deref-Managed-Borrowed
|
||||
//
|
||||
// Technically, no restrictions are *necessary* here.
|
||||
|
|
@ -170,14 +170,14 @@ impl RestrictionsContext {
|
|||
match opt_loan_path(cmt_base) {
|
||||
None => Safe,
|
||||
Some(lp_base) => {
|
||||
let lp = @LpExtend(lp_base, cmt.mutbl, LpDeref);
|
||||
let lp = @LpExtend(lp_base, cmt.mutbl, LpDeref(pk));
|
||||
SafeIf(lp, ~[Restriction {loan_path: lp,
|
||||
set: restrictions}])
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
mc::cat_deref(cmt_base, _, mc::region_ptr(m_mutbl, _)) => {
|
||||
mc::cat_deref(cmt_base, _, pk @ mc::region_ptr(m_mutbl, _)) => {
|
||||
// Because an `&mut` pointer does not inherit its
|
||||
// mutability, we can only prevent mutation or prevent
|
||||
// freezing if it is not aliased. Therefore, in such
|
||||
|
|
@ -187,7 +187,7 @@ impl RestrictionsContext {
|
|||
let result = self.restrict(
|
||||
cmt_base,
|
||||
RESTR_ALIAS | RESTR_MUTATE | RESTR_CLAIM);
|
||||
self.extend(result, cmt.mutbl, LpDeref, restrictions)
|
||||
self.extend(result, cmt.mutbl, LpDeref(pk), restrictions)
|
||||
} else {
|
||||
// R-Deref-Mut-Borrowed-2
|
||||
Safe
|
||||
|
|
|
|||
|
|
@ -261,7 +261,7 @@ pub enum LoanPath {
|
|||
|
||||
#[deriving(Eq, IterBytes)]
|
||||
pub enum LoanPathElem {
|
||||
LpDeref, // `*LV` in doc.rs
|
||||
LpDeref(mc::PointerKind), // `*LV` in doc.rs
|
||||
LpInterior(mc::InteriorKind) // `LV.f` in doc.rs
|
||||
}
|
||||
|
||||
|
|
@ -295,9 +295,9 @@ pub fn opt_loan_path(cmt: mc::cmt) -> Option<@LoanPath> {
|
|||
Some(@LpVar(id))
|
||||
}
|
||||
|
||||
mc::cat_deref(cmt_base, _, _) => {
|
||||
mc::cat_deref(cmt_base, _, pk) => {
|
||||
do opt_loan_path(cmt_base).map_move |lp| {
|
||||
@LpExtend(lp, cmt.mutbl, LpDeref)
|
||||
@LpExtend(lp, cmt.mutbl, LpDeref(pk))
|
||||
}
|
||||
}
|
||||
|
||||
|
|
@ -728,7 +728,7 @@ impl BorrowckCtxt {
|
|||
loan_path: &LoanPath,
|
||||
out: &mut ~str) {
|
||||
match *loan_path {
|
||||
LpExtend(_, _, LpDeref) => {
|
||||
LpExtend(_, _, LpDeref(_)) => {
|
||||
out.push_char('(');
|
||||
self.append_loan_path_to_str(loan_path, out);
|
||||
out.push_char(')');
|
||||
|
|
@ -776,7 +776,7 @@ impl BorrowckCtxt {
|
|||
out.push_str("[]");
|
||||
}
|
||||
|
||||
LpExtend(lp_base, _, LpDeref) => {
|
||||
LpExtend(lp_base, _, LpDeref(_)) => {
|
||||
out.push_char('*');
|
||||
self.append_loan_path_to_str(lp_base, out);
|
||||
}
|
||||
|
|
@ -854,7 +854,7 @@ impl Repr for LoanPath {
|
|||
fmt!("$(%?)", id)
|
||||
}
|
||||
|
||||
&LpExtend(lp, _, LpDeref) => {
|
||||
&LpExtend(lp, _, LpDeref(_)) => {
|
||||
fmt!("%s.*", lp.repr(tcx))
|
||||
}
|
||||
|
||||
|
|
|
|||
|
|
@ -59,18 +59,18 @@ use syntax::print::pprust;
|
|||
|
||||
#[deriving(Eq)]
|
||||
pub enum categorization {
|
||||
cat_rvalue(ast::NodeId), // temporary val, argument is its scope
|
||||
cat_rvalue(ast::NodeId), // temporary val, argument is its scope
|
||||
cat_static_item,
|
||||
cat_implicit_self,
|
||||
cat_copied_upvar(CopiedUpvar), // upvar copied into @fn or ~fn env
|
||||
cat_stack_upvar(cmt), // by ref upvar from &fn
|
||||
cat_local(ast::NodeId), // local variable
|
||||
cat_arg(ast::NodeId), // formal argument
|
||||
cat_deref(cmt, uint, ptr_kind), // deref of a ptr
|
||||
cat_local(ast::NodeId), // local variable
|
||||
cat_arg(ast::NodeId), // formal argument
|
||||
cat_deref(cmt, uint, PointerKind), // deref of a ptr
|
||||
cat_interior(cmt, InteriorKind), // something interior: field, tuple, etc
|
||||
cat_downcast(cmt), // selects a particular enum variant (*)
|
||||
cat_discr(cmt, ast::NodeId), // match discriminant (see preserve())
|
||||
cat_self(ast::NodeId), // explicit `self`
|
||||
cat_discr(cmt, ast::NodeId), // match discriminant (see preserve())
|
||||
cat_self(ast::NodeId), // explicit `self`
|
||||
|
||||
// (*) downcast is only required if the enum has more than one variant
|
||||
}
|
||||
|
|
@ -82,8 +82,8 @@ pub struct CopiedUpvar {
|
|||
}
|
||||
|
||||
// different kinds of pointers:
|
||||
#[deriving(Eq)]
|
||||
pub enum ptr_kind {
|
||||
#[deriving(Eq, IterBytes)]
|
||||
pub enum PointerKind {
|
||||
uniq_ptr,
|
||||
gc_ptr(ast::mutability),
|
||||
region_ptr(ast::mutability, ty::Region),
|
||||
|
|
@ -147,7 +147,7 @@ pub type cmt = @cmt_;
|
|||
// We pun on *T to mean both actual deref of a ptr as well
|
||||
// as accessing of components:
|
||||
pub enum deref_kind {
|
||||
deref_ptr(ptr_kind),
|
||||
deref_ptr(PointerKind),
|
||||
deref_interior(InteriorKind),
|
||||
}
|
||||
|
||||
|
|
@ -1233,7 +1233,7 @@ impl Repr for categorization {
|
|||
}
|
||||
}
|
||||
|
||||
pub fn ptr_sigil(ptr: ptr_kind) -> ~str {
|
||||
pub fn ptr_sigil(ptr: PointerKind) -> ~str {
|
||||
match ptr {
|
||||
uniq_ptr => ~"~",
|
||||
gc_ptr(_) => ~"@",
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue