Skip to content

Commit 4e60d7e

Browse files
committed
rustc: "foo" is now a static string
1 parent 4bfd4fb commit 4e60d7e

File tree

4 files changed

+12
-15
lines changed

4 files changed

+12
-15
lines changed

src/rustc/middle/trans/alt.rs

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -52,7 +52,8 @@ fn trans_opt(bcx: block, o: opt) -> opt_result {
5252
ast::vstore_uniq) {
5353
let strty = ty::mk_estr(bcx.tcx(), ty::vstore_uniq);
5454
let cell = empty_dest_cell();
55-
bcx = tvec::trans_estr(bcx, s, ast::vstore_uniq, by_val(cell));
55+
bcx = tvec::trans_estr(bcx, s, some(ast::vstore_uniq),
56+
by_val(cell));
5657
add_clean_temp(bcx, *cell, strty);
5758
return single_result(rslt(bcx, *cell));
5859
}

src/rustc/middle/trans/base.rs

Lines changed: 3 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -1424,12 +1424,9 @@ fn store_temp_expr(cx: block, action: copy_action, dst: ValueRef,
14241424
fn trans_lit(cx: block, e: @ast::expr, lit: ast::lit, dest: dest) -> block {
14251425
let _icx = cx.insn_ctxt(~"trans_lit");
14261426
if dest == ignore { return cx; }
1427-
alt lit.node {
1428-
ast::lit_str(s) { tvec::trans_estr(cx, s,
1429-
ast::vstore_fixed(none), dest) }
1430-
_ {
1431-
store_in_dest(cx, consts::const_lit(cx.ccx(), e, lit), dest)
1432-
}
1427+
match lit.node {
1428+
ast::lit_str(s) => tvec::trans_estr(cx, s, none, dest),
1429+
_ => store_in_dest(cx, consts::const_lit(cx.ccx(), e, lit), dest)
14331430
}
14341431
}
14351432

src/rustc/middle/trans/tvec.rs

Lines changed: 6 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -220,7 +220,7 @@ fn trans_vstore(bcx: block, e: @ast::expr,
220220
v: ast::vstore, dest: dest) -> block {
221221
alt e.node {
222222
ast::expr_lit(@{node: ast::lit_str(s), span: _}) {
223-
return trans_estr(bcx, s, v, dest);
223+
return trans_estr(bcx, s, some(v), dest);
224224
}
225225
ast::expr_vec(es, mutbl) {
226226
return trans_evec(bcx, es, v, e.id, dest);
@@ -266,35 +266,34 @@ fn get_base_and_len(cx: block, v: ValueRef, e_ty: ty::t)
266266
}
267267
}
268268

269-
fn trans_estr(bcx: block, s: @~str, vstore: ast::vstore,
269+
fn trans_estr(bcx: block, s: @~str, vstore: option<ast::vstore>,
270270
dest: dest) -> block {
271271
let _icx = bcx.insn_ctxt(~"tvec::trans_estr");
272272
if dest == base::ignore { return bcx; }
273273
let ccx = bcx.ccx();
274274

275275
let c = alt vstore {
276-
ast::vstore_fixed(_)
277-
{
276+
some(ast::vstore_fixed(_)) => {
278277
// "hello"/_ => "hello"/5 => ~[i8 x 6] in llvm
279278
debug!{"trans_estr: fixed: %s", *s};
280279
C_postr(*s)
281280
}
282281

283-
ast::vstore_slice(_) {
282+
some(ast::vstore_slice(_)) | none => {
284283
// "hello" => (*i8, 6u) in llvm
285284
debug!{"trans_estr: slice '%s'", *s};
286285
C_estr_slice(ccx, *s)
287286
}
288287

289-
ast::vstore_uniq {
288+
some(ast::vstore_uniq) => {
290289
let cs = PointerCast(bcx, C_cstr(ccx, *s), T_ptr(T_i8()));
291290
let len = C_uint(ccx, str::len(*s));
292291
let c = Call(bcx, ccx.upcalls.str_new_uniq, ~[cs, len]);
293292
PointerCast(bcx, c,
294293
T_unique_ptr(T_unique(ccx, T_vec(ccx, T_i8()))))
295294
}
296295

297-
ast::vstore_box {
296+
some(ast::vstore_box) => {
298297
let cs = PointerCast(bcx, C_cstr(ccx, *s), T_ptr(T_i8()));
299298
let len = C_uint(ccx, str::len(*s));
300299
let c = Call(bcx, ccx.upcalls.str_new_shared, ~[cs, len]);

src/rustc/middle/typeck/check.rs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -703,7 +703,7 @@ fn check_lit(fcx: @fn_ctxt, lit: @ast::lit) -> ty::t {
703703
alt lit.node {
704704
ast::lit_str(s) {
705705
tcx.sess.span_warn(lit.span, ~"fixed length string");
706-
ty::mk_estr(tcx, ty::vstore_fixed(s.len()))
706+
ty::mk_estr(tcx, ty::vstore_slice(ty::re_static))
707707
}
708708
ast::lit_int(_, t) { ty::mk_mach_int(tcx, t) }
709709
ast::lit_uint(_, t) { ty::mk_mach_uint(tcx, t) }

0 commit comments

Comments
 (0)