Skip to content

Commit f8734df

Browse files
committed
rustc: remove use of @[].
1 parent 891ada9 commit f8734df

27 files changed

+189
-180
lines changed

src/librustc/metadata/csearch.rs

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -18,6 +18,7 @@ use middle::ty;
1818
use middle::typeck;
1919

2020
use std::vec;
21+
use std::rc::Rc;
2122
use reader = extra::ebml::reader;
2223
use syntax::ast;
2324
use syntax::ast_map;
@@ -221,8 +222,8 @@ pub fn get_field_type(tcx: ty::ctxt, class_id: ast::DefId,
221222
class_id, def) );
222223
let ty = decoder::item_type(def, the_field, tcx, cdata);
223224
ty::ty_param_bounds_and_ty {
224-
generics: ty::Generics {type_param_defs: @~[],
225-
region_param_defs: @[]},
225+
generics: ty::Generics {type_param_defs: Rc::new(~[]),
226+
region_param_defs: Rc::new(~[])},
226227
ty: ty
227228
}
228229
}

src/librustc/metadata/decoder.rs

Lines changed: 9 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -25,11 +25,11 @@ use middle::ty;
2525
use middle::typeck;
2626
use middle::astencode::vtable_decoder_helpers;
2727

28-
use std::at_vec;
2928
use std::u64;
3029
use std::io;
3130
use std::io::extensions::u64_from_be_bytes;
3231
use std::option;
32+
use std::rc::Rc;
3333
use std::vec;
3434
use extra::ebml::reader;
3535
use extra::ebml;
@@ -246,7 +246,7 @@ fn item_ty_param_defs(item: ebml::Doc,
246246
tcx: ty::ctxt,
247247
cdata: Cmd,
248248
tag: uint)
249-
-> @~[ty::TypeParameterDef] {
249+
-> Rc<~[ty::TypeParameterDef]> {
250250
let mut bounds = ~[];
251251
reader::tagged_docs(item, tag, |p| {
252252
let bd = parse_type_param_def_data(
@@ -255,27 +255,27 @@ fn item_ty_param_defs(item: ebml::Doc,
255255
bounds.push(bd);
256256
true
257257
});
258-
@bounds
258+
Rc::new(bounds)
259259
}
260260

261261
fn item_region_param_defs(item_doc: ebml::Doc,
262262
tcx: ty::ctxt,
263263
cdata: Cmd)
264-
-> @[ty::RegionParameterDef] {
265-
at_vec::build(None, |push| {
266-
reader::tagged_docs(item_doc, tag_region_param_def, |rp_doc| {
264+
-> Rc<~[ty::RegionParameterDef]> {
265+
let mut v = ~[];
266+
reader::tagged_docs(item_doc, tag_region_param_def, |rp_doc| {
267267
let ident_str_doc = reader::get_doc(rp_doc,
268268
tag_region_param_def_ident);
269269
let ident = item_name(tcx.sess.intr(), ident_str_doc);
270270
let def_id_doc = reader::get_doc(rp_doc,
271271
tag_region_param_def_def_id);
272272
let def_id = reader::with_doc_data(def_id_doc, parse_def_id);
273273
let def_id = translate_def_id(cdata, def_id);
274-
push(ty::RegionParameterDef { ident: ident,
275-
def_id: def_id });
274+
v.push(ty::RegionParameterDef { ident: ident,
275+
def_id: def_id });
276276
true
277277
});
278-
})
278+
Rc::new(v)
279279
}
280280

281281
fn item_ty_param_count(item: ebml::Doc) -> uint {

src/librustc/metadata/encoder.rs

Lines changed: 8 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -171,7 +171,7 @@ pub fn def_to_str(did: DefId) -> ~str {
171171

172172
fn encode_ty_type_param_defs(ebml_w: &mut writer::Encoder,
173173
ecx: &EncodeContext,
174-
params: @~[ty::TypeParameterDef],
174+
params: &[ty::TypeParameterDef],
175175
tag: uint) {
176176
let ty_str_ctxt = @tyencode::ctxt {
177177
diag: ecx.diag,
@@ -188,7 +188,7 @@ fn encode_ty_type_param_defs(ebml_w: &mut writer::Encoder,
188188

189189
fn encode_region_param_defs(ebml_w: &mut writer::Encoder,
190190
ecx: &EncodeContext,
191-
params: @[ty::RegionParameterDef]) {
191+
params: &[ty::RegionParameterDef]) {
192192
for param in params.iter() {
193193
ebml_w.start_tag(tag_region_param_def);
194194

@@ -215,9 +215,9 @@ fn encode_item_variances(ebml_w: &mut writer::Encoder,
215215
fn encode_bounds_and_type(ebml_w: &mut writer::Encoder,
216216
ecx: &EncodeContext,
217217
tpt: &ty::ty_param_bounds_and_ty) {
218-
encode_ty_type_param_defs(ebml_w, ecx, tpt.generics.type_param_defs,
218+
encode_ty_type_param_defs(ebml_w, ecx, tpt.generics.type_param_defs(),
219219
tag_items_data_item_ty_param_bounds);
220-
encode_region_param_defs(ebml_w, ecx, tpt.generics.region_param_defs);
220+
encode_region_param_defs(ebml_w, ecx, tpt.generics.region_param_defs());
221221
encode_type(ecx, ebml_w, tpt.ty);
222222
}
223223

@@ -786,7 +786,7 @@ fn encode_method_ty_fields(ecx: &EncodeContext,
786786
encode_def_id(ebml_w, method_ty.def_id);
787787
encode_name(ecx, ebml_w, method_ty.ident);
788788
encode_ty_type_param_defs(ebml_w, ecx,
789-
method_ty.generics.type_param_defs,
789+
method_ty.generics.type_param_defs(),
790790
tag_item_method_tps);
791791
encode_method_fty(ecx, ebml_w, &method_ty.fty);
792792
encode_visibility(ebml_w, method_ty.vis);
@@ -827,7 +827,7 @@ fn encode_info_for_method(ecx: &EncodeContext,
827827
}
828828

829829
for &ast_method in ast_method_opt.iter() {
830-
let num_params = tpt.generics.type_param_defs.len();
830+
let num_params = tpt.generics.type_param_defs().len();
831831
if num_params > 0u || is_default_impl
832832
|| should_inline(ast_method.attrs) {
833833
(ecx.encode_inlined_item)(
@@ -1171,10 +1171,10 @@ fn encode_info_for_item(ecx: &EncodeContext,
11711171
encode_item_variances(ebml_w, ecx, item.id);
11721172
let trait_def = ty::lookup_trait_def(tcx, def_id);
11731173
encode_ty_type_param_defs(ebml_w, ecx,
1174-
trait_def.generics.type_param_defs,
1174+
trait_def.generics.type_param_defs(),
11751175
tag_items_data_item_ty_param_bounds);
11761176
encode_region_param_defs(ebml_w, ecx,
1177-
trait_def.generics.region_param_defs);
1177+
trait_def.generics.region_param_defs());
11781178
encode_trait_ref(ebml_w, ecx, trait_def.trait_ref, tag_item_trait_ref);
11791179
encode_name(ecx, ebml_w, item.ident);
11801180
encode_attributes(ebml_w, item.attrs);

src/librustc/middle/astencode.rs

Lines changed: 9 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -32,10 +32,10 @@ use syntax::fold::Folder;
3232
use syntax::parse::token;
3333
use syntax;
3434

35-
use std::at_vec;
3635
use std::libc;
3736
use std::cast;
3837
use std::io::Seek;
38+
use std::rc::Rc;
3939

4040
use extra::ebml::reader;
4141
use extra::ebml;
@@ -812,13 +812,13 @@ impl<'a> ebml_writer_helpers for writer::Encoder<'a> {
812812
this.emit_struct_field("generics", 0, |this| {
813813
this.emit_struct("Generics", 2, |this| {
814814
this.emit_struct_field("type_param_defs", 0, |this| {
815-
this.emit_from_vec(*tpbt.generics.type_param_defs,
815+
this.emit_from_vec(tpbt.generics.type_param_defs(),
816816
|this, type_param_def| {
817817
this.emit_type_param_def(ecx, type_param_def);
818818
})
819819
});
820820
this.emit_struct_field("region_param_defs", 1, |this| {
821-
tpbt.generics.region_param_defs.encode(this);
821+
tpbt.generics.region_param_defs().encode(this);
822822
})
823823
})
824824
});
@@ -997,7 +997,7 @@ fn encode_side_tables_for_id(ecx: &e::EncodeContext,
997997
ebml_w.tag(c::tag_table_tcache, |ebml_w| {
998998
ebml_w.id(id);
999999
ebml_w.tag(c::tag_table_val, |ebml_w| {
1000-
ebml_w.emit_tpbt(ecx, *tpbt);
1000+
ebml_w.emit_tpbt(ecx, tpbt.clone());
10011001
})
10021002
})
10031003
}
@@ -1064,7 +1064,7 @@ fn encode_side_tables_for_id(ecx: &e::EncodeContext,
10641064
ebml_w.tag(c::tag_table_capture_map, |ebml_w| {
10651065
ebml_w.id(id);
10661066
ebml_w.tag(c::tag_table_val, |ebml_w| {
1067-
ebml_w.emit_from_vec(*cap_vars, |ebml_w, cap_var| {
1067+
ebml_w.emit_from_vec(*cap_vars.borrow(), |ebml_w, cap_var| {
10681068
cap_var.encode(ebml_w);
10691069
})
10701070
})
@@ -1183,8 +1183,8 @@ impl<'a> ebml_decoder_decoder_helpers for reader::Decoder<'a> {
11831183
this.read_struct_field("type_param_defs",
11841184
0,
11851185
|this| {
1186-
@this.read_to_vec(|this|
1187-
this.read_type_param_def(xcx))
1186+
Rc::new(this.read_to_vec(|this|
1187+
this.read_type_param_def(xcx)))
11881188
}),
11891189
region_param_defs:
11901190
this.read_struct_field("region_param_defs",
@@ -1382,13 +1382,11 @@ fn decode_side_tables(xcx: @ExtendedDecodeContext,
13821382
}
13831383
c::tag_table_capture_map => {
13841384
let cvars =
1385-
at_vec::to_managed_move(
1386-
val_dsr.read_to_vec(
1387-
|val_dsr| val_dsr.read_capture_var(xcx)));
1385+
val_dsr.read_to_vec(|val_dsr| val_dsr.read_capture_var(xcx));
13881386
let mut capture_map = dcx.maps
13891387
.capture_map
13901388
.borrow_mut();
1391-
capture_map.get().insert(id, cvars);
1389+
capture_map.get().insert(id, Rc::new(cvars));
13921390
}
13931391
_ => {
13941392
xcx.dcx.tcx.sess.bug(

src/librustc/middle/borrowck/check_loans.rs

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -733,7 +733,7 @@ fn check_loans_in_fn<'a>(this: &mut CheckLoanCtxt<'a>,
733733
span: Span) {
734734
let capture_map = this.bccx.capture_map.borrow();
735735
let cap_vars = capture_map.get().get(&closure_id);
736-
for cap_var in cap_vars.iter() {
736+
for cap_var in cap_vars.borrow().iter() {
737737
let var_id = ast_util::def_id_of_def(cap_var.def).node;
738738
let var_path = @LpVar(var_id);
739739
this.check_if_path_is_moved(closure_id, span,
@@ -839,4 +839,3 @@ fn check_loans_in_block<'a>(this: &mut CheckLoanCtxt<'a>,
839839
visit::walk_block(this, blk, ());
840840
this.check_for_conflicting_loans(blk.id);
841841
}
842-

src/librustc/middle/borrowck/gather_loans/gather_moves.rs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -69,7 +69,7 @@ pub fn gather_captures(bccx: &BorrowckCtxt,
6969
closure_expr: &ast::Expr) {
7070
let capture_map = bccx.capture_map.borrow();
7171
let captured_vars = capture_map.get().get(&closure_expr.id);
72-
for captured_var in captured_vars.iter() {
72+
for captured_var in captured_vars.borrow().iter() {
7373
match captured_var.mode {
7474
moves::CapMove => {
7575
let fvar_id = ast_util::def_id_of_def(captured_var.def).node;

src/librustc/middle/const_eval.rs

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -24,6 +24,7 @@ use syntax::{ast, ast_map, ast_util};
2424

2525
use std::cell::RefCell;
2626
use std::hashmap::HashMap;
27+
use std::rc::Rc;
2728

2829
//
2930
// This pass classifies expressions by their constant-ness.
@@ -321,7 +322,7 @@ pub enum const_val {
321322
const_int(i64),
322323
const_uint(u64),
323324
const_str(InternedString),
324-
const_binary(@[u8]),
325+
const_binary(Rc<~[u8]>),
325326
const_bool(bool)
326327
}
327328

@@ -510,7 +511,7 @@ pub fn eval_const_expr_partial<T: ty::ExprTyProvider>(tcx: &T, e: &Expr)
510511
pub fn lit_to_const(lit: &Lit) -> const_val {
511512
match lit.node {
512513
LitStr(ref s, _) => const_str((*s).clone()),
513-
LitBinary(data) => const_binary(data),
514+
LitBinary(ref data) => const_binary(data.clone()),
514515
LitChar(n) => const_uint(n as u64),
515516
LitInt(n, _) => const_int(n),
516517
LitUint(n, _) => const_uint(n),

src/librustc/middle/kind.rs

Lines changed: 4 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -277,7 +277,7 @@ pub fn check_expr(cx: &mut Context, e: &Expr) {
277277
ExprPath(_) => {
278278
let did = ast_util::def_id_of_def(def_map.get()
279279
.get_copy(&e.id));
280-
ty::lookup_item_type(cx.tcx, did).generics.type_param_defs
280+
ty::lookup_item_type(cx.tcx, did).generics.type_param_defs.clone()
281281
}
282282
_ => {
283283
// Type substitutions should only occur on paths and
@@ -289,6 +289,7 @@ pub fn check_expr(cx: &mut Context, e: &Expr) {
289289
"non path/method call expr has type substs??")
290290
}
291291
};
292+
let type_param_defs = type_param_defs.borrow();
292293
if ts.len() != type_param_defs.len() {
293294
// Fail earlier to make debugging easier
294295
fail!("internal error: in kind::check_expr, length \
@@ -362,8 +363,8 @@ fn check_ty(cx: &mut Context, aty: &Ty) {
362363
for ts in r.iter() {
363364
let def_map = cx.tcx.def_map.borrow();
364365
let did = ast_util::def_id_of_def(def_map.get().get_copy(&id));
365-
let type_param_defs =
366-
ty::lookup_item_type(cx.tcx, did).generics.type_param_defs;
366+
let generics = ty::lookup_item_type(cx.tcx, did).generics;
367+
let type_param_defs = generics.type_param_defs();
367368
for (&ty, type_param_def) in ts.iter().zip(type_param_defs.iter()) {
368369
check_typaram_bounds(cx, aty.id, aty.span, ty, type_param_def)
369370
}

src/librustc/middle/liveness.rs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -502,7 +502,7 @@ fn visit_expr(v: &mut LivenessVisitor, expr: &Expr, this: @IrMaps) {
502502
let capture_map = this.capture_map.borrow();
503503
let cvs = capture_map.get().get(&expr.id);
504504
let mut call_caps = ~[];
505-
for cv in cvs.iter() {
505+
for cv in cvs.borrow().iter() {
506506
match moves::moved_variable_node_id_from_def(cv.def) {
507507
Some(rv) => {
508508
let cv_ln = this.add_live_node(FreeVarNode(cv.span));

src/librustc/middle/moves.rs

Lines changed: 13 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -136,9 +136,9 @@ use util::ppaux::Repr;
136136
use util::common::indenter;
137137
use util::ppaux::UserString;
138138

139-
use std::at_vec;
140139
use std::cell::RefCell;
141140
use std::hashmap::{HashSet, HashMap};
141+
use std::rc::Rc;
142142
use syntax::ast::*;
143143
use syntax::ast_util;
144144
use syntax::visit;
@@ -159,7 +159,7 @@ pub struct CaptureVar {
159159
mode: CaptureMode // How variable is being accessed
160160
}
161161

162-
pub type CaptureMap = @RefCell<HashMap<NodeId, @[CaptureVar]>>;
162+
pub type CaptureMap = @RefCell<HashMap<NodeId, Rc<~[CaptureVar]>>>;
163163

164164
pub type MovesMap = @RefCell<HashSet<NodeId>>;
165165

@@ -681,23 +681,22 @@ impl VisitContext {
681681
self.consume_expr(arg_expr)
682682
}
683683

684-
pub fn compute_captures(&mut self, fn_expr_id: NodeId) -> @[CaptureVar] {
684+
pub fn compute_captures(&mut self, fn_expr_id: NodeId) -> Rc<~[CaptureVar]> {
685685
debug!("compute_capture_vars(fn_expr_id={:?})", fn_expr_id);
686686
let _indenter = indenter();
687687

688688
let fn_ty = ty::node_id_to_type(self.tcx, fn_expr_id);
689689
let sigil = ty::ty_closure_sigil(fn_ty);
690690
let freevars = freevars::get_freevars(self.tcx, fn_expr_id);
691-
if sigil == BorrowedSigil {
691+
let v = if sigil == BorrowedSigil {
692692
// || captures everything by ref
693-
at_vec::from_fn(freevars.len(), |i| {
694-
let fvar = &freevars[i];
695-
CaptureVar {def: fvar.def, span: fvar.span, mode: CapRef}
696-
})
693+
freevars.iter()
694+
.map(|fvar| CaptureVar {def: fvar.def, span: fvar.span, mode: CapRef})
695+
.collect()
697696
} else {
698697
// @fn() and ~fn() capture by copy or by move depending on type
699-
at_vec::from_fn(freevars.len(), |i| {
700-
let fvar = &freevars[i];
698+
freevars.iter()
699+
.map(|fvar| {
701700
let fvar_def_id = ast_util::def_id_of_def(fvar.def).node;
702701
let fvar_ty = ty::node_id_to_type(self.tcx, fvar_def_id);
703702
debug!("fvar_def_id={:?} fvar_ty={}",
@@ -708,7 +707,9 @@ impl VisitContext {
708707
CapCopy
709708
};
710709
CaptureVar {def: fvar.def, span: fvar.span, mode:mode}
711-
})
712-
}
710+
711+
}).collect()
712+
};
713+
Rc::new(v)
713714
}
714715
}

src/librustc/middle/subst.rs

Lines changed: 5 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -13,8 +13,9 @@
1313
use middle::ty;
1414
use middle::ty_fold;
1515
use middle::ty_fold::TypeFolder;
16+
17+
use std::rc::Rc;
1618
use syntax::opt_vec::OptVec;
17-
use std::at_vec;
1819

1920
///////////////////////////////////////////////////////////////////////////
2021
// Public trait `Subst`
@@ -84,10 +85,9 @@ impl<T:Subst> Subst for ~[T] {
8485
self.map(|t| t.subst(tcx, substs))
8586
}
8687
}
87-
88-
impl<T:Subst> Subst for @[T] {
89-
fn subst(&self, tcx: ty::ctxt, substs: &ty::substs) -> @[T] {
90-
at_vec::map(*self, |t| t.subst(tcx, substs))
88+
impl<T:Subst> Subst for Rc<T> {
89+
fn subst(&self, tcx: ty::ctxt, substs: &ty::substs) -> Rc<T> {
90+
Rc::new(self.borrow().subst(tcx, substs))
9191
}
9292
}
9393

src/librustc/middle/trans/callee.rs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -220,7 +220,7 @@ fn resolve_default_method_vtables(bcx: &Block,
220220
bcx.tcx(), param_substs, impl_res.trait_vtables);
221221

222222
// Now we pull any vtables for parameters on the actual method.
223-
let num_method_vtables = method.generics.type_param_defs.len();
223+
let num_method_vtables = method.generics.type_param_defs().len();
224224
let method_vtables = match impl_vtables {
225225
Some(vtables) => {
226226
let num_impl_type_parameters =

0 commit comments

Comments
 (0)