Skip to content

Commit add9031

Browse files
committed
rustc: Use interior vectors for record types
1 parent fd0d1cb commit add9031

File tree

5 files changed

+24
-27
lines changed

5 files changed

+24
-27
lines changed

src/comp/metadata/tydecode.rs

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -198,14 +198,14 @@ fn parse_ty(@pstate st, str_def sd) -> ty::t {
198198
}
199199
case ('R') {
200200
assert (next(st) as char == '[');
201-
let vec[ty::field] fields = [];
201+
let ty::field[] fields = ~[];
202202
while (peek(st) as char != ']') {
203203
auto name = "";
204204
while (peek(st) as char != '=') {
205205
name += str::unsafe_from_byte(next(st));
206206
}
207207
st.pos = st.pos + 1u;
208-
fields += [rec(ident=name, mt=parse_mt(st, sd))];
208+
fields += ~[rec(ident=name, mt=parse_mt(st, sd))];
209209
}
210210
st.pos = st.pos + 1u;
211211
ret ty::mk_rec(st.tcx, fields);

src/comp/middle/trans.rs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -5901,7 +5901,7 @@ fn trans_rec(&@block_ctxt cx, &vec[ast::field] fields,
59015901
base_val = base_res.val;
59025902
}
59035903
}
5904-
let vec[ty::field] ty_fields = [];
5904+
let ty::field[] ty_fields = ~[];
59055905
alt (ty::struct(cx.fcx.lcx.ccx.tcx, t)) {
59065906
case (ty::ty_rec(?flds)) { ty_fields = flds; }
59075907
}

src/comp/middle/ty.rs

Lines changed: 13 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -265,7 +265,7 @@ tag sty {
265265
ty_chan(t);
266266
ty_task;
267267
ty_tup(mt[]);
268-
ty_rec(vec[field]);
268+
ty_rec(field[]);
269269
ty_fn(ast::proto, vec[arg], t, controlflow, vec[@constr_def]);
270270
ty_native_fn(ast::native_abi, vec[arg], t);
271271
ty_obj(vec[method]);
@@ -595,7 +595,7 @@ fn mk_imm_tup(&ctxt cx, &t[] tys) -> t {
595595
ret mk_tup(cx, mts);
596596
}
597597

598-
fn mk_rec(&ctxt cx, &vec[field] fs) -> t { ret gen_ty(cx, ty_rec(fs)); }
598+
fn mk_rec(&ctxt cx, &field[] fs) -> t { ret gen_ty(cx, ty_rec(fs)); }
599599

600600
fn mk_fn(&ctxt cx, &ast::proto proto, &vec[arg] args, &t ty, &controlflow cf,
601601
&vec[@constr_def] constrs) -> t {
@@ -784,11 +784,11 @@ fn fold_ty(&ctxt cx, fold_mode fld, t ty_0) -> t {
784784
ty = copy_cname(cx, mk_tup(cx, new_mts), ty);
785785
}
786786
case (ty_rec(?fields)) {
787-
let vec[field] new_fields = [];
787+
let field[] new_fields = ~[];
788788
for (field fl in fields) {
789789
auto new_ty = fold_ty(cx, fld, fl.mt.ty);
790790
auto new_mt = rec(ty=new_ty, mut=fl.mt.mut);
791-
new_fields += [rec(ident=fl.ident, mt=new_mt)];
791+
new_fields += ~[rec(ident=fl.ident, mt=new_mt)];
792792
}
793793
ty = copy_cname(cx, mk_rec(cx, new_fields), ty);
794794
}
@@ -1124,7 +1124,7 @@ fn type_has_dynamic_size(&ctxt cx, &t ty) -> bool {
11241124
}
11251125
case (ty_rec(?fields)) {
11261126
auto i = 0u;
1127-
while (i < vec::len[field](fields)) {
1127+
while (i < ivec::len[field](fields)) {
11281128
if (type_has_dynamic_size(cx, fields.(i).mt.ty)) { ret true; }
11291129
i += 1u;
11301130
}
@@ -1576,8 +1576,8 @@ fn equal_type_structures(&sty a, &sty b) -> bool {
15761576
case (ty_rec(?flds_a)) {
15771577
alt (b) {
15781578
case (ty_rec(?flds_b)) {
1579-
auto len = vec::len[field](flds_a);
1580-
if (len != vec::len[field](flds_b)) { ret false; }
1579+
auto len = ivec::len[field](flds_a);
1580+
if (len != ivec::len[field](flds_b)) { ret false; }
15811581
auto i = 0u;
15821582
while (i < len) {
15831583
auto fld_a = flds_a.(i);
@@ -1917,7 +1917,7 @@ fn field_num(&session::session sess, &span sp, &ast::ident id) -> uint {
19171917
}
19181918

19191919
fn field_idx(&session::session sess, &span sp, &ast::ident id,
1920-
&vec[field] fields) -> uint {
1920+
&field[] fields) -> uint {
19211921
let uint i = 0u;
19221922
for (field f in fields) { if (str::eq(f.ident, id)) { ret i; } i += 1u; }
19231923
sess.span_fatal(sp, "unknown field '" + id + "' of record");
@@ -2531,8 +2531,8 @@ mod unify {
25312531
case (ty::ty_rec(?expected_fields)) {
25322532
alt (struct(cx.tcx, actual)) {
25332533
case (ty::ty_rec(?actual_fields)) {
2534-
auto expected_len = vec::len[field](expected_fields);
2535-
auto actual_len = vec::len[field](actual_fields);
2534+
auto expected_len = ivec::len[field](expected_fields);
2535+
auto actual_len = ivec::len[field](actual_fields);
25362536
if (expected_len != actual_len) {
25372537
auto err =
25382538
terr_record_size(expected_len, actual_len);
@@ -2541,7 +2541,7 @@ mod unify {
25412541
// TODO: implement an iterator that can iterate over
25422542
// two arrays simultaneously.
25432543

2544-
let vec[field] result_fields = [];
2544+
let field[] result_fields = ~[];
25452545
auto i = 0u;
25462546
while (i < expected_len) {
25472547
auto expected_field = expected_fields.(i);
@@ -2567,10 +2567,8 @@ mod unify {
25672567
alt (result) {
25682568
case (ures_ok(?rty)) {
25692569
auto mt = rec(ty=rty, mut=mut);
2570-
vec::push[field](result_fields,
2571-
rec(mt=mt
2572-
with
2573-
expected_field));
2570+
result_fields +=
2571+
~[rec(mt=mt with expected_field)];
25742572
}
25752573
case (_) { ret result; }
25762574
}

src/comp/middle/typeck.rs

Lines changed: 6 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -302,10 +302,10 @@ fn ast_ty_to_ty(&ty::ctxt tcx, &ty_getter getter, &@ast::ty ast_ty) -> ty::t {
302302
typ = ty::mk_tup(tcx, flds);
303303
}
304304
case (ast::ty_rec(?fields)) {
305-
let vec[field] flds = [];
305+
let field[] flds = ~[];
306306
for (ast::ty_field f in fields) {
307307
auto tm = ast_mt_to_mt(tcx, getter, f.node.mt);
308-
vec::push[field](flds, rec(ident=f.node.ident, mt=tm));
308+
flds += ~[rec(ident=f.node.ident, mt=tm)];
309309
}
310310
typ = ty::mk_rec(tcx, flds);
311311
}
@@ -1954,13 +1954,12 @@ fn check_expr(&@fn_ctxt fcx, &@ast::expr expr) {
19541954
case (none) {/* no-op */ }
19551955
case (some(?b_0)) { check_expr(fcx, b_0); }
19561956
}
1957-
let vec[field] fields_t = [];
1957+
let field[] fields_t = ~[];
19581958
for (ast::field f in fields) {
19591959
check_expr(fcx, f.node.expr);
19601960
auto expr_t = expr_ty(fcx.ccx.tcx, f.node.expr);
19611961
auto expr_mt = rec(ty=expr_t, mut=f.node.mut);
1962-
vec::push[field](fields_t,
1963-
rec(ident=f.node.ident, mt=expr_mt));
1962+
fields_t += ~[rec(ident=f.node.ident, mt=expr_mt)];
19641963
}
19651964
alt (base) {
19661965
case (none) {
@@ -1970,7 +1969,7 @@ fn check_expr(&@fn_ctxt fcx, &@ast::expr expr) {
19701969
case (some(?bexpr)) {
19711970
check_expr(fcx, bexpr);
19721971
auto bexpr_t = expr_ty(fcx.ccx.tcx, bexpr);
1973-
let vec[field] base_fields = [];
1972+
let field[] base_fields = ~[];
19741973
alt (structure_of(fcx, expr.span, bexpr_t)) {
19751974
case (ty::ty_rec(?flds)) { base_fields = flds; }
19761975
case (_) {
@@ -2017,7 +2016,7 @@ fn check_expr(&@fn_ctxt fcx, &@ast::expr expr) {
20172016
let uint ix =
20182017
ty::field_idx(fcx.ccx.tcx.sess, expr.span, field,
20192018
fields);
2020-
if (ix >= vec::len[ty::field](fields)) {
2019+
if (ix >= ivec::len[ty::field](fields)) {
20212020
fcx.ccx.tcx.sess.span_fatal(expr.span,
20222021
"bad index on record");
20232022
}

src/comp/pretty/ppaux.rs

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -112,8 +112,8 @@ fn ty_to_str(&ctxt cx, &t typ) -> str {
112112
s += "tup(" + str::connect(strs, ",") + ")";
113113
}
114114
case (ty_rec(?elems)) {
115-
auto f = bind field_to_str(cx, _);
116-
auto strs = vec::map[field, str](f, elems);
115+
let vec[str] strs = [];
116+
for (field fld in elems) { strs += [field_to_str(cx, fld)]; }
117117
s += "rec(" + str::connect(strs, ",") + ")";
118118
}
119119
case (ty_tag(?id, ?tps)) {

0 commit comments

Comments
 (0)