Skip to content
体验新版
项目
组织
正在加载...
登录
切换导航
打开侧边栏
int
Rust
提交
d5173b1f
R
Rust
项目概览
int
/
Rust
大约 1 年 前同步成功
通知
1
Star
0
Fork
0
代码
文件
提交
分支
Tags
贡献者
分支图
Diff
Issue
0
列表
看板
标记
里程碑
合并请求
0
DevOps
流水线
流水线任务
计划
Wiki
0
Wiki
分析
仓库
DevOps
项目成员
Pages
R
Rust
项目概览
项目概览
详情
发布
仓库
仓库
文件
提交
分支
标签
贡献者
分支图
比较
Issue
0
Issue
0
列表
看板
标记
里程碑
合并请求
0
合并请求
0
Pages
DevOps
DevOps
流水线
流水线任务
计划
分析
分析
仓库分析
DevOps
Wiki
0
Wiki
成员
成员
收起侧边栏
关闭侧边栏
动态
分支图
创建新Issue
流水线任务
提交
Issue看板
体验新版 GitCode,发现更多精彩内容 >>
提交
d5173b1f
编写于
8月 26, 2011
作者:
B
Brian Anderson
浏览文件
操作
浏览文件
下载
电子邮件补丁
差异文件
Use cstrcache in C_str, C_cstr, C_shape.
This fixes up the current leaks.
上级
4e136d1f
变更
2
隐藏空白更改
内联
并排
Showing
2 changed file
with
14 addition
and
7 deletion
+14
-7
src/comp/middle/trans.rs
src/comp/middle/trans.rs
+2
-1
src/comp/middle/trans_common.rs
src/comp/middle/trans_common.rs
+12
-6
未找到文件。
src/comp/middle/trans.rs
浏览文件 @
d5173b1f
...
...
@@ -6395,7 +6395,8 @@ fn trans_crate(sess: &session::session, crate: &@ast::crate, tcx: &ty::ctxt,
task_type
:
task_type
,
builder
:
BuilderRef_res
(
llvm
::
LLVMCreateBuilder
()),
shape_cx
:
shape
::
mk_ctxt
(
llmod
),
gc_cx
:
gc
::
mk_ctxt
()};
gc_cx
:
gc
::
mk_ctxt
(),
cstrcache
:
cstrcache
::
mk
()};
let
cx
=
new_local_ctxt
(
ccx
);
collect_items
(
ccx
,
crate
);
collect_tag_ctors
(
ccx
,
crate
);
...
...
src/comp/middle/trans_common.rs
浏览文件 @
d5173b1f
...
...
@@ -154,7 +154,8 @@
task_type
:
TypeRef
,
builder
:
BuilderRef_res
,
shape_cx
:
shape
::
ctxt
,
gc_cx
:
gc
::
ctxt
};
gc_cx
:
gc
::
ctxt
,
cstrcache
:
cstrcache
::
t
};
type
local_ctxt
=
{
path
:
[
str
],
...
...
@@ -842,10 +843,11 @@ fn C_bool(b: bool) -> ValueRef {
// This is a 'c-like' raw string, which differs from
// our boxed-and-length-annotated strings.
fn
C_cstr
(
cx
:
&@
crate_ctxt
,
s
:
&
str
)
->
ValueRef
{
let
sc
=
llvm
::
LLVMConstString
(
str
::
buf
(
s
),
str
::
byte_len
(
s
),
False
);
let
sc
=
llvm
::
LLVMConstString
(
safe_sbuf
(
cx
,
s
),
str
::
byte_len
(
s
),
False
);
let
g
=
llvm
::
LLVMAddGlobal
(
cx
.llmod
,
val_ty
(
sc
),
s
tr
::
buf
(
cx
.names
.next
(
"str"
)));
s
afe_sbuf
(
cx
,
cx
.names
.next
(
"str"
)));
llvm
::
LLVMSetInitializer
(
g
,
sc
);
llvm
::
LLVMSetGlobalConstant
(
g
,
True
);
llvm
::
LLVMSetLinkage
(
g
,
lib
::
llvm
::
LLVMInternalLinkage
as
llvm
::
Linkage
);
...
...
@@ -863,10 +865,10 @@ fn C_str(cx: &@crate_ctxt, s: &str) -> ValueRef {
let
box
=
C_struct
([
C_int
(
abi
::
const_refcount
as
int
),
C_int
(
len
+
1u
as
int
),
C_int
(
len
+
1u
as
int
),
C_int
(
0
),
llvm
::
LLVMConstString
(
s
tr
::
buf
(
s
),
len
,
False
)]);
llvm
::
LLVMConstString
(
s
afe_sbuf
(
cx
,
s
),
len
,
False
)]);
let
g
=
llvm
::
LLVMAddGlobal
(
cx
.llmod
,
val_ty
(
box
),
s
tr
::
buf
(
cx
.names
.next
(
"str"
)));
s
afe_sbuf
(
cx
,
cx
.names
.next
(
"str"
)));
llvm
::
LLVMSetInitializer
(
g
,
box
);
llvm
::
LLVMSetGlobalConstant
(
g
,
True
);
llvm
::
LLVMSetLinkage
(
g
,
lib
::
llvm
::
LLVMInternalLinkage
as
llvm
::
Linkage
);
...
...
@@ -909,7 +911,7 @@ fn C_shape(ccx: &@crate_ctxt, bytes: &[u8]) -> ValueRef {
let
llshape
=
C_bytes
(
bytes
);
let
llglobal
=
llvm
::
LLVMAddGlobal
(
ccx
.llmod
,
val_ty
(
llshape
),
s
tr
::
buf
(
ccx
.names
.next
(
"shape"
)));
s
afe_sbuf
(
ccx
,
ccx
.names
.next
(
"shape"
)));
llvm
::
LLVMSetInitializer
(
llglobal
,
llshape
);
llvm
::
LLVMSetGlobalConstant
(
llglobal
,
True
);
llvm
::
LLVMSetLinkage
(
llglobal
,
...
...
@@ -917,6 +919,10 @@ fn C_shape(ccx: &@crate_ctxt, bytes: &[u8]) -> ValueRef {
ret
llvm
::
LLVMConstPointerCast
(
llglobal
,
T_ptr
(
T_i8
()));
}
fn
safe_sbuf
(
ccx
:
&@
crate_ctxt
,
s
:
&
str
)
->
str
::
rustrt
::
sbuf
{
cstrcache
::
get_cstr
(
ccx
.cstrcache
,
s
)
}
//
// Local Variables:
// mode: rust
...
...
编辑
预览
Markdown
is supported
0%
请重试
或
添加新附件
.
添加附件
取消
You are about to add
0
people
to the discussion. Proceed with caution.
先完成此消息的编辑!
取消
想要评论请
注册
或
登录