1
Fork 0

remove sty_by_ref, though traces still remain due to dtors

This commit is contained in:
Niko Matsakis 2013-03-26 06:05:40 -04:00
parent 2888563510
commit aa67deff33
15 changed files with 18 additions and 88 deletions

View file

@ -630,7 +630,6 @@ fn get_self_ty(item: ebml::Doc) -> ast::self_ty_ {
let self_ty_kind = string[0]; let self_ty_kind = string[0];
match self_ty_kind as char { match self_ty_kind as char {
's' => { return ast::sty_static; } 's' => { return ast::sty_static; }
'r' => { return ast::sty_by_ref; }
'v' => { return ast::sty_value; } 'v' => { return ast::sty_value; }
'@' => { return ast::sty_box(get_mutability(string[1])); } '@' => { return ast::sty_box(get_mutability(string[1])); }
'~' => { return ast::sty_uniq(get_mutability(string[1])); } '~' => { return ast::sty_uniq(get_mutability(string[1])); }

View file

@ -410,9 +410,6 @@ fn encode_self_type(ebml_w: writer::Encoder, self_type: ast::self_ty_) {
sty_static => { sty_static => {
ebml_w.writer.write(&[ 's' as u8 ]); ebml_w.writer.write(&[ 's' as u8 ]);
} }
sty_by_ref => {
ebml_w.writer.write(&[ 'r' as u8 ]);
}
sty_value => { sty_value => {
ebml_w.writer.write(&[ 'v' as u8 ]); ebml_w.writer.write(&[ 'v' as u8 ]);
} }

View file

@ -180,21 +180,6 @@ fn req_loans_in_expr(ex: @ast::expr,
} }
} }
match self.bccx.method_map.find(&ex.id) {
Some(ref method_map_entry) => {
match (*method_map_entry).explicit_self {
ast::sty_by_ref => {
let rcvr_cmt = self.bccx.cat_expr(rcvr);
self.guarantee_valid(rcvr_cmt, m_imm, scope_r);
}
_ => {} // Nothing to do.
}
}
None => {
self.tcx().sess.span_bug(ex.span, ~"no method map entry");
}
}
visit::visit_expr(ex, self, vt); visit::visit_expr(ex, self, vt);
} }

View file

@ -467,11 +467,6 @@ fn visit_fn(fk: &visit::fn_kind,
match *fk { match *fk {
fk_method(_, _, method) => { fk_method(_, _, method) => {
match method.self_ty.node { match method.self_ty.node {
sty_by_ref => {
fn_maps.add_variable(Arg(method.self_id,
special_idents::self_,
by_ref));
}
sty_value | sty_region(*) | sty_box(_) | sty_uniq(_) => { sty_value | sty_region(*) | sty_box(_) | sty_uniq(_) => {
fn_maps.add_variable(Arg(method.self_id, fn_maps.add_variable(Arg(method.self_id,
special_idents::self_, special_idents::self_,

View file

@ -737,20 +737,7 @@ pub impl VisitContext {
receiver_expr: @expr, receiver_expr: @expr,
visitor: vt<VisitContext>) visitor: vt<VisitContext>)
{ {
let callee_mode = match self.method_map.find(&expr_id) { self.use_fn_arg(by_copy, receiver_expr, visitor);
Some(ref method_map_entry) => {
match method_map_entry.explicit_self {
sty_by_ref => by_ref,
_ => by_copy
}
}
None => {
self.tcx.sess.span_bug(
span,
~"no method map entry");
}
};
self.use_fn_arg(callee_mode, receiver_expr, visitor);
} }
fn use_fn_args(&self, fn use_fn_args(&self,

View file

@ -50,7 +50,7 @@ use syntax::ast::{named_field, ne, neg, node_id, pat, pat_enum, pat_ident};
use syntax::ast::{path, pat_box, pat_lit, pat_range, pat_struct}; use syntax::ast::{path, pat_box, pat_lit, pat_range, pat_struct};
use syntax::ast::{pat_tup, pat_uniq, pat_wild, prim_ty, private, provided}; use syntax::ast::{pat_tup, pat_uniq, pat_wild, prim_ty, private, provided};
use syntax::ast::{public, required, rem, self_ty_, shl, shr, stmt_decl}; use syntax::ast::{public, required, rem, self_ty_, shl, shr, stmt_decl};
use syntax::ast::{struct_dtor, struct_field, struct_variant_kind, sty_by_ref}; use syntax::ast::{struct_dtor, struct_field, struct_variant_kind};
use syntax::ast::{sty_static, subtract, trait_ref, tuple_variant_kind, Ty}; use syntax::ast::{sty_static, subtract, trait_ref, tuple_variant_kind, Ty};
use syntax::ast::{ty_bool, ty_char, ty_f, ty_f32, ty_f64, ty_float, ty_i}; use syntax::ast::{ty_bool, ty_char, ty_f, ty_f32, ty_f64, ty_float, ty_i};
use syntax::ast::{ty_i16, ty_i32, ty_i64, ty_i8, ty_int, TyParam, ty_path}; use syntax::ast::{ty_i16, ty_i32, ty_i64, ty_i8, ty_int, TyParam, ty_path};
@ -3792,7 +3792,6 @@ pub impl Resolver {
// we only have self ty if it is a non static method // we only have self ty if it is a non static method
let self_binding = match method.self_ty.node { let self_binding = match method.self_ty.node {
sty_static => { NoSelfBinding } sty_static => { NoSelfBinding }
sty_by_ref => { HasSelfBinding(method.self_id, true) }
_ => { HasSelfBinding(method.self_id, false) } _ => { HasSelfBinding(method.self_id, false) }
}; };

View file

@ -596,7 +596,7 @@ pub fn trans_trait_callee(bcx: block,
let llpair = match explicit_self { let llpair = match explicit_self {
ast::sty_region(*) => Load(bcx, llpair), ast::sty_region(*) => Load(bcx, llpair),
ast::sty_static | ast::sty_by_ref | ast::sty_value | ast::sty_static | ast::sty_value |
ast::sty_box(_) | ast::sty_uniq(_) => llpair ast::sty_box(_) | ast::sty_uniq(_) => llpair
}; };
@ -645,21 +645,6 @@ pub fn trans_trait_callee_from_llval(bcx: block,
ast::sty_static => { ast::sty_static => {
bcx.tcx().sess.bug(~"shouldn't see static method here"); bcx.tcx().sess.bug(~"shouldn't see static method here");
} }
ast::sty_by_ref => {
// We need to pass a pointer to a pointer to the payload.
match store {
ty::BoxTraitStore |
ty::BareTraitStore |
ty::UniqTraitStore => {
llself = GEPi(bcx, llbox, [0u, abi::box_field_body]);
}
ty::RegionTraitStore(_) => {
llself = llbox;
}
}
self_mode = ast::by_ref;
}
ast::sty_value => { ast::sty_value => {
bcx.tcx().sess.bug(~"methods with by-value self should not be \ bcx.tcx().sess.bug(~"methods with by-value self should not be \
called on objects"); called on objects");

View file

@ -99,7 +99,7 @@ use core::hashmap::linear::LinearSet;
use core::result; use core::result;
use core::uint; use core::uint;
use core::vec; use core::vec;
use syntax::ast::{def_id, sty_by_ref, sty_value, sty_region, sty_box}; use syntax::ast::{def_id, sty_value, sty_region, sty_box};
use syntax::ast::{sty_uniq, sty_static, node_id, by_copy, by_ref}; use syntax::ast::{sty_uniq, sty_static, node_id, by_copy, by_ref};
use syntax::ast::{m_const, m_mutbl, m_imm}; use syntax::ast::{m_const, m_mutbl, m_imm};
use syntax::ast; use syntax::ast;
@ -527,7 +527,7 @@ pub impl<'self> LookupContext<'self> {
ast::sty_region(_) => { ast::sty_region(_) => {
return; // inapplicable return; // inapplicable
} }
ast::sty_by_ref | ast::sty_region(_) => vstore_slice(r) ast::sty_region(_) => vstore_slice(r)
ast::sty_box(_) => vstore_box, // XXX NDM mutability ast::sty_box(_) => vstore_box, // XXX NDM mutability
ast::sty_uniq(_) => vstore_uniq ast::sty_uniq(_) => vstore_uniq
} }
@ -741,7 +741,7 @@ pub impl<'self> LookupContext<'self> {
// shouldn't really have to be. // shouldn't really have to be.
let rcvr_substs = { let rcvr_substs = {
match self_decl { match self_decl {
sty_static | sty_value | sty_by_ref | sty_static | sty_value |
sty_box(_) | sty_uniq(_) => { sty_box(_) | sty_uniq(_) => {
self_substs self_substs
} }
@ -1327,7 +1327,7 @@ pub fn transform_self_type_for_method(tcx: ty::ctxt,
tcx.sess.bug(~"calling transform_self_type_for_method on \ tcx.sess.bug(~"calling transform_self_type_for_method on \
static method"); static method");
} }
sty_by_ref | sty_value => { sty_value => {
impl_ty impl_ty
} }
sty_region(_, mutability) => { sty_region(_, mutability) => {

View file

@ -1003,7 +1003,6 @@ impl to_bytes::IterBytes for ret_style {
#[deriving(Eq)] #[deriving(Eq)]
pub enum self_ty_ { pub enum self_ty_ {
sty_static, // no self sty_static, // no self
sty_by_ref, // ``
sty_value, // `self` sty_value, // `self`
sty_region(Option<@Lifetime>, mutability), // `&'lt self` sty_region(Option<@Lifetime>, mutability), // `&'lt self`
sty_box(mutability), // `@self` sty_box(mutability), // `@self`

View file

@ -17,7 +17,7 @@ use ast::{item_enum, item_impl, item_struct, Generics};
use ast::{m_imm, meta_item, method}; use ast::{m_imm, meta_item, method};
use ast::{named_field, or, pat, pat_ident, pat_wild, public, pure_fn}; use ast::{named_field, or, pat, pat_ident, pat_wild, public, pure_fn};
use ast::{stmt, struct_def, struct_variant_kind}; use ast::{stmt, struct_def, struct_variant_kind};
use ast::{sty_by_ref, sty_region, tuple_variant_kind, ty_nil, TyParam}; use ast::{sty_region, tuple_variant_kind, ty_nil, TyParam};
use ast::{TyParamBound, ty_path, ty_rptr, unnamed_field, variant}; use ast::{TyParamBound, ty_path, ty_rptr, unnamed_field, variant};
use ext::base::ext_ctxt; use ext::base::ext_ctxt;
use ext::build; use ext::build;

View file

@ -17,7 +17,7 @@ use ast::{item_enum, item_impl, item_struct, Generics};
use ast::{m_imm, meta_item, method}; use ast::{m_imm, meta_item, method};
use ast::{named_field, or, pat, pat_ident, pat_wild, public, pure_fn}; use ast::{named_field, or, pat, pat_ident, pat_wild, public, pure_fn};
use ast::{stmt, struct_def, struct_variant_kind}; use ast::{stmt, struct_def, struct_variant_kind};
use ast::{sty_by_ref, sty_region, tuple_variant_kind, ty_nil, TyParam}; use ast::{sty_region, tuple_variant_kind, ty_nil, TyParam};
use ast::{TyParamBound, ty_path, ty_rptr, unnamed_field, variant}; use ast::{TyParamBound, ty_path, ty_rptr, unnamed_field, variant};
use ext::base::ext_ctxt; use ext::base::ext_ctxt;
use ext::build; use ext::build;

View file

@ -17,7 +17,7 @@ use ast::{item_enum, item_impl, item_struct, Generics};
use ast::{m_imm, meta_item, method}; use ast::{m_imm, meta_item, method};
use ast::{named_field, or, pat, pat_ident, pat_wild, public, pure_fn}; use ast::{named_field, or, pat, pat_ident, pat_wild, public, pure_fn};
use ast::{stmt, struct_def, struct_variant_kind}; use ast::{stmt, struct_def, struct_variant_kind};
use ast::{sty_by_ref, sty_region, tuple_variant_kind, ty_nil, TyParam}; use ast::{sty_region, tuple_variant_kind, ty_nil, TyParam};
use ast::{TyParamBound, ty_path, ty_rptr, unnamed_field, variant}; use ast::{TyParamBound, ty_path, ty_rptr, unnamed_field, variant};
use ext::base::ext_ctxt; use ext::base::ext_ctxt;
use ext::build; use ext::build;

View file

@ -20,7 +20,7 @@ use ast::{item_enum, item_impl, item_struct, Generics};
use ast::{m_imm, meta_item, method}; use ast::{m_imm, meta_item, method};
use ast::{named_field, or, pat, pat_ident, pat_wild, public, pure_fn}; use ast::{named_field, or, pat, pat_ident, pat_wild, public, pure_fn};
use ast::{stmt, struct_def, struct_variant_kind}; use ast::{stmt, struct_def, struct_variant_kind};
use ast::{sty_by_ref, sty_region, tuple_variant_kind, ty_nil, TyParam}; use ast::{sty_region, tuple_variant_kind, ty_nil, TyParam};
use ast::{TyParamBound, ty_path, ty_rptr, unnamed_field, variant}; use ast::{TyParamBound, ty_path, ty_rptr, unnamed_field, variant};
use ext::base::ext_ctxt; use ext::base::ext_ctxt;
use ext::build; use ext::build;

View file

@ -46,7 +46,7 @@ use ast::{rem, required};
use ast::{ret_style, return_val, self_ty, shl, shr, stmt, stmt_decl}; use ast::{ret_style, return_val, self_ty, shl, shr, stmt, stmt_decl};
use ast::{stmt_expr, stmt_semi, stmt_mac, struct_def, struct_field}; use ast::{stmt_expr, stmt_semi, stmt_mac, struct_def, struct_field};
use ast::{struct_immutable, struct_mutable, struct_variant_kind, subtract}; use ast::{struct_immutable, struct_mutable, struct_variant_kind, subtract};
use ast::{sty_box, sty_by_ref, sty_region, sty_static, sty_uniq, sty_value}; use ast::{sty_box, sty_region, sty_static, sty_uniq, sty_value};
use ast::{token_tree, trait_method, trait_ref, tt_delim, tt_seq, tt_tok}; use ast::{token_tree, trait_method, trait_ref, tt_delim, tt_seq, tt_tok};
use ast::{tt_nonterminal, tuple_variant_kind, Ty, ty_, ty_bot, ty_box}; use ast::{tt_nonterminal, tuple_variant_kind, Ty, ty_, ty_bot, ty_box};
use ast::{ty_field, ty_fixed_length_vec, ty_closure, ty_bare_fn}; use ast::{ty_field, ty_fixed_length_vec, ty_closure, ty_bare_fn};
@ -471,8 +471,6 @@ pub impl Parser {
) |p| { ) |p| {
let attrs = p.parse_outer_attributes(); let attrs = p.parse_outer_attributes();
let lo = p.span.lo; let lo = p.span.lo;
let is_static = p.parse_staticness();
let static_sty = spanned(lo, p.span.hi, sty_static);
let vis = p.parse_visibility(); let vis = p.parse_visibility();
let pur = p.parse_fn_purity(); let pur = p.parse_fn_purity();
@ -487,12 +485,6 @@ pub impl Parser {
// names to be left off if there is a definition... // names to be left off if there is a definition...
either::Left(p.parse_arg_general(false)) either::Left(p.parse_arg_general(false))
}; };
// XXX: Wrong. Shouldn't allow both static and self_ty
let self_ty = if is_static || self_ty.node == sty_by_ref {
static_sty
} else {
self_ty
};
let hi = p.last_span.hi; let hi = p.last_span.hi;
debug!("parse_trait_methods(): trait method signature ends in \ debug!("parse_trait_methods(): trait method signature ends in \
@ -2877,7 +2869,7 @@ pub impl Parser {
p.expect_self_ident(); p.expect_self_ident();
cnstr(mutability) cnstr(mutability)
} else { } else {
sty_by_ref sty_static
} }
} }
@ -2926,7 +2918,7 @@ pub impl Parser {
self.expect_self_ident(); self.expect_self_ident();
sty_region(Some(lifetime), mutability) sty_region(Some(lifetime), mutability)
} else { } else {
sty_by_ref sty_static
} }
} }
@ -2950,13 +2942,13 @@ pub impl Parser {
sty_value sty_value
} }
_ => { _ => {
sty_by_ref sty_static
} }
}; };
// If we parsed a self type, expect a comma before the argument list. // If we parsed a self type, expect a comma before the argument list.
let args_or_capture_items; let args_or_capture_items;
if self_ty != sty_by_ref { if self_ty != sty_static {
match *self.token { match *self.token {
token::COMMA => { token::COMMA => {
self.bump(); self.bump();
@ -3058,7 +3050,6 @@ pub impl Parser {
let attrs = self.parse_outer_attributes(); let attrs = self.parse_outer_attributes();
let lo = self.span.lo; let lo = self.span.lo;
let is_static = self.parse_staticness();
let static_sty = spanned(lo, self.span.hi, sty_static); let static_sty = spanned(lo, self.span.hi, sty_static);
let visa = self.parse_visibility(); let visa = self.parse_visibility();
@ -3068,12 +3059,6 @@ pub impl Parser {
let (self_ty, decl) = do self.parse_fn_decl_with_self() |p| { let (self_ty, decl) = do self.parse_fn_decl_with_self() |p| {
p.parse_arg() p.parse_arg()
}; };
// XXX: interaction between staticness, self_ty is broken now
let self_ty = if is_static || self_ty.node == sty_by_ref {
static_sty
} else {
self_ty
};
let (inner_attrs, body) = self.parse_inner_attrs_and_block(true); let (inner_attrs, body) = self.parse_inner_attrs_and_block(true);
let hi = body.span.hi; let hi = body.span.hi;

View file

@ -1643,7 +1643,7 @@ pub fn print_pat(s: @ps, &&pat: @ast::pat, refutable: bool) {
// Returns whether it printed anything // Returns whether it printed anything
pub fn print_self_ty(s: @ps, self_ty: ast::self_ty_) -> bool { pub fn print_self_ty(s: @ps, self_ty: ast::self_ty_) -> bool {
match self_ty { match self_ty {
ast::sty_static | ast::sty_by_ref => { return false; } ast::sty_static => { return false; }
ast::sty_value => { word(s.s, ~"self"); } ast::sty_value => { word(s.s, ~"self"); }
ast::sty_region(lt, m) => { ast::sty_region(lt, m) => {
word(s.s, ~"&"); word(s.s, ~"&");
@ -1669,7 +1669,7 @@ pub fn print_fn(s: @ps,
opt_self_ty: Option<ast::self_ty_>, opt_self_ty: Option<ast::self_ty_>,
vis: ast::visibility) { vis: ast::visibility) {
head(s, ~""); head(s, ~"");
print_fn_header_info(s, opt_self_ty, purity, ast::Many, None, vis); print_fn_header_info(s, purity, ast::Many, None, vis);
nbsp(s); nbsp(s);
print_ident(s, name); print_ident(s, name);
print_generics(s, generics); print_generics(s, generics);
@ -2175,7 +2175,6 @@ pub fn print_opt_sigil(s: @ps, opt_sigil: Option<ast::Sigil>) {
} }
pub fn print_fn_header_info(s: @ps, pub fn print_fn_header_info(s: @ps,
opt_sty: Option<ast::self_ty_>,
purity: ast::purity, purity: ast::purity,
onceness: ast::Onceness, onceness: ast::Onceness,
opt_sigil: Option<ast::Sigil>, opt_sigil: Option<ast::Sigil>,