diff options
| author | Patrick Walton <pcwalton@mimiga.net> | 2012-08-03 11:51:04 -0700 |
|---|---|---|
| committer | Patrick Walton <pcwalton@mimiga.net> | 2012-08-03 11:51:04 -0700 |
| commit | 4e60d7e3a60e143b274e7fbfe391b0b33b40ea67 (patch) | |
| tree | 7c9fea12e393e86d92285d1c5381b0ca16645b24 | |
| parent | 4bfd4fb8ea3000af665de8be5f72f0712668aa05 (diff) | |
| download | rust-4e60d7e3a60e143b274e7fbfe391b0b33b40ea67.tar.gz rust-4e60d7e3a60e143b274e7fbfe391b0b33b40ea67.zip | |
rustc: "foo" is now a static string
| -rw-r--r-- | src/rustc/middle/trans/alt.rs | 3 | ||||
| -rw-r--r-- | src/rustc/middle/trans/base.rs | 9 | ||||
| -rw-r--r-- | src/rustc/middle/trans/tvec.rs | 13 | ||||
| -rw-r--r-- | src/rustc/middle/typeck/check.rs | 2 |
4 files changed, 12 insertions, 15 deletions
diff --git a/src/rustc/middle/trans/alt.rs b/src/rustc/middle/trans/alt.rs index b0a2acbe3a7..539ec5d7e11 100644 --- a/src/rustc/middle/trans/alt.rs +++ b/src/rustc/middle/trans/alt.rs @@ -52,7 +52,8 @@ fn trans_opt(bcx: block, o: opt) -> opt_result { ast::vstore_uniq) { let strty = ty::mk_estr(bcx.tcx(), ty::vstore_uniq); let cell = empty_dest_cell(); - bcx = tvec::trans_estr(bcx, s, ast::vstore_uniq, by_val(cell)); + bcx = tvec::trans_estr(bcx, s, some(ast::vstore_uniq), + by_val(cell)); add_clean_temp(bcx, *cell, strty); return single_result(rslt(bcx, *cell)); } diff --git a/src/rustc/middle/trans/base.rs b/src/rustc/middle/trans/base.rs index d8518303804..9730c7e968d 100644 --- a/src/rustc/middle/trans/base.rs +++ b/src/rustc/middle/trans/base.rs @@ -1424,12 +1424,9 @@ fn store_temp_expr(cx: block, action: copy_action, dst: ValueRef, fn trans_lit(cx: block, e: @ast::expr, lit: ast::lit, dest: dest) -> block { let _icx = cx.insn_ctxt(~"trans_lit"); if dest == ignore { return cx; } - alt lit.node { - ast::lit_str(s) { tvec::trans_estr(cx, s, - ast::vstore_fixed(none), dest) } - _ { - store_in_dest(cx, consts::const_lit(cx.ccx(), e, lit), dest) - } + match lit.node { + ast::lit_str(s) => tvec::trans_estr(cx, s, none, dest), + _ => store_in_dest(cx, consts::const_lit(cx.ccx(), e, lit), dest) } } diff --git a/src/rustc/middle/trans/tvec.rs b/src/rustc/middle/trans/tvec.rs index 213117f15f4..0f99fe9b2f7 100644 --- a/src/rustc/middle/trans/tvec.rs +++ b/src/rustc/middle/trans/tvec.rs @@ -220,7 +220,7 @@ fn trans_vstore(bcx: block, e: @ast::expr, v: ast::vstore, dest: dest) -> block { alt e.node { ast::expr_lit(@{node: ast::lit_str(s), span: _}) { - return trans_estr(bcx, s, v, dest); + return trans_estr(bcx, s, some(v), dest); } ast::expr_vec(es, mutbl) { return trans_evec(bcx, es, v, e.id, dest); @@ -266,27 +266,26 @@ fn get_base_and_len(cx: block, v: ValueRef, e_ty: ty::t) } } -fn trans_estr(bcx: block, s: @~str, vstore: ast::vstore, +fn trans_estr(bcx: block, s: @~str, vstore: option<ast::vstore>, dest: dest) -> block { let _icx = bcx.insn_ctxt(~"tvec::trans_estr"); if dest == base::ignore { return bcx; } let ccx = bcx.ccx(); let c = alt vstore { - ast::vstore_fixed(_) - { + some(ast::vstore_fixed(_)) => { // "hello"/_ => "hello"/5 => ~[i8 x 6] in llvm debug!{"trans_estr: fixed: %s", *s}; C_postr(*s) } - ast::vstore_slice(_) { + some(ast::vstore_slice(_)) | none => { // "hello" => (*i8, 6u) in llvm debug!{"trans_estr: slice '%s'", *s}; C_estr_slice(ccx, *s) } - ast::vstore_uniq { + some(ast::vstore_uniq) => { let cs = PointerCast(bcx, C_cstr(ccx, *s), T_ptr(T_i8())); let len = C_uint(ccx, str::len(*s)); let c = Call(bcx, ccx.upcalls.str_new_uniq, ~[cs, len]); @@ -294,7 +293,7 @@ fn trans_estr(bcx: block, s: @~str, vstore: ast::vstore, T_unique_ptr(T_unique(ccx, T_vec(ccx, T_i8())))) } - ast::vstore_box { + some(ast::vstore_box) => { let cs = PointerCast(bcx, C_cstr(ccx, *s), T_ptr(T_i8())); let len = C_uint(ccx, str::len(*s)); let c = Call(bcx, ccx.upcalls.str_new_shared, ~[cs, len]); diff --git a/src/rustc/middle/typeck/check.rs b/src/rustc/middle/typeck/check.rs index 05f53018f41..0de0ae37ac2 100644 --- a/src/rustc/middle/typeck/check.rs +++ b/src/rustc/middle/typeck/check.rs @@ -703,7 +703,7 @@ fn check_lit(fcx: @fn_ctxt, lit: @ast::lit) -> ty::t { alt lit.node { ast::lit_str(s) { tcx.sess.span_warn(lit.span, ~"fixed length string"); - ty::mk_estr(tcx, ty::vstore_fixed(s.len())) + ty::mk_estr(tcx, ty::vstore_slice(ty::re_static)) } ast::lit_int(_, t) { ty::mk_mach_int(tcx, t) } ast::lit_uint(_, t) { ty::mk_mach_uint(tcx, t) } |
