Skip to content
体验新版
项目
组织
正在加载...
登录
切换导航
打开侧边栏
int
Rust
提交
d7a1d6a1
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,发现更多精彩内容 >>
提交
d7a1d6a1
编写于
9月 15, 2011
作者:
M
Marijn Haverbeke
浏览文件
操作
浏览文件
下载
电子邮件补丁
差异文件
Make trans understand by-ref bindings
Issue #918
上级
8aad1611
变更
1
隐藏空白更改
内联
并排
Showing
1 changed file
with
19 addition
and
8 deletion
+19
-8
src/comp/middle/trans.rs
src/comp/middle/trans.rs
+19
-8
未找到文件。
src/comp/middle/trans.rs
浏览文件 @
d7a1d6a1
...
...
@@ -4444,7 +4444,7 @@ fn trans_be(cx: @block_ctxt, e: @ast::expr) : ast_util::is_call_expr(e) ->
ret
trans_ret
(
cx
,
some
(
e
));
}
fn
init_local
(
bcx
:
@
block_ctxt
,
local
:
@
ast
::
local
)
->
resul
t
{
fn
init_local
(
bcx
:
@
block_ctxt
,
local
:
@
ast
::
local
)
->
@
block_ctx
t
{
let
ty
=
node_id_type
(
bcx_ccx
(
bcx
),
local
.node.id
);
let
llptr
=
bcx
.fcx.lllocals
.get
(
local
.node.id
);
// Make a note to drop this slot on the way out.
...
...
@@ -4476,7 +4476,7 @@ fn init_local(bcx: @block_ctxt, local: @ast::local) -> result {
bcx
=
trans_alt
::
bind_irrefutable_pat
(
bcx
,
local
.node.pat
,
llptr
,
bcx
.fcx.lllocals
,
false
);
ret
rslt
(
bcx
,
llptr
)
;
ret
bcx
;
fn
must_zero
(
ccx
:
@
crate_ctxt
,
local
:
@
ast
::
local
)
->
bool
{
alt
local
.node.init
{
...
...
@@ -4513,6 +4513,14 @@ fn visit_expr(ex: @ast::expr, e: env, v: vt<env>) {
}
}
fn
init_ref_local
(
bcx
:
@
block_ctxt
,
local
:
@
ast
::
local
)
->
@
block_ctxt
{
let
init_expr
=
option
::
get
(
local
.node.init
)
.expr
;
let
val
=
trans_lval
(
bcx
,
init_expr
);
assert
val
.is_mem
;
ret
trans_alt
::
bind_irrefutable_pat
(
bcx
,
local
.node.pat
,
val
.res.val
,
bcx
.fcx.lllocals
,
false
);
}
fn
zero_alloca
(
cx
:
@
block_ctxt
,
llptr
:
ValueRef
,
t
:
ty
::
t
)
->
result
{
let
bcx
=
cx
;
let
ccx
=
bcx_ccx
(
cx
);
...
...
@@ -4538,8 +4546,12 @@ fn trans_stmt(cx: @block_ctxt, s: ast::stmt) -> result {
ast
::
stmt_decl
(
d
,
_
)
{
alt
d
.node
{
ast
::
decl_local
(
locals
)
{
for
(
_
,
local
)
in
locals
{
bcx
=
init_local
(
bcx
,
local
)
.bcx
;
for
(
style
,
local
)
in
locals
{
if
style
==
ast
::
let_copy
{
bcx
=
init_local
(
bcx
,
local
);
}
else
{
bcx
=
init_ref_local
(
bcx
,
local
);
}
}
}
ast
::
decl_item
(
i
)
{
trans_item
(
cx
.fcx.lcx
,
*
i
);
}
...
...
@@ -4646,15 +4658,14 @@ fn trans_fn_cleanups(fcx: @fn_ctxt, cx: @block_ctxt) {
}
iter
block_locals
(
b
:
ast
::
blk
)
->
@
ast
::
local
{
// FIXME: putting from inside an iter block doesn't work, so we can't
// use the index here.
for
s
:
@
ast
::
stmt
in
b
.node.stmts
{
alt
s
.node
{
ast
::
stmt_decl
(
d
,
_
)
{
alt
d
.node
{
ast
::
decl_local
(
locals
)
{
for
(
_
,
local
)
in
locals
{
put
local
;
}
for
(
style
,
local
)
in
locals
{
if
style
==
ast
::
let_copy
{
put
local
;
}
}
}
_
{
/* fall through */
}
}
...
...
编辑
预览
Markdown
is supported
0%
请重试
或
添加新附件
.
添加附件
取消
You are about to add
0
people
to the discussion. Proceed with caution.
先完成此消息的编辑!
取消
想要评论请
注册
或
登录