Add rustc::middle::cstrcache for getting c string bufs safely

We continue to leak string buffers in trans so this creates a way to get c
string buffers from strings while guaranteeing that they are not freed before
use.

Hopefully this can be made efficient in the istr regime.
This commit is contained in:
Brian Anderson 2011-08-26 12:22:33 -07:00
parent 3aef2c1d7d
commit 4e136d1fd9
2 changed files with 30 additions and 0 deletions

View file

@ -0,0 +1,29 @@
// Provides a safe way to get C pointers to strings, because in many
// places LLVM wants a string but doesn't take a copy.
import std::str;
export t;
export mk;
export get_cstr;
type t_ = @{
// This string is boxed so that I remember that it has to be boxed
// after the ivec conversion.
mutable cache: [@str]
};
tag t {
private(t_);
}
fn mk() -> t {
ret private(@{mutable cache: []});
}
fn get_cstr(t: &t, s: &str) -> str::rustrt::sbuf {
let boxed = @s;
let buf = str::buf(*boxed);
(*t).cache += [boxed];
ret buf;
}

View file

@ -30,6 +30,7 @@ mod middle {
mod freevars;
mod shape;
mod gc;
mod cstrcache;
mod tstate {
mod ck;