Skip to content
体验新版
项目
组织
正在加载...
登录
切换导航
打开侧边栏
int
Rust
提交
f9c06abc
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,发现更多精彩内容 >>
提交
f9c06abc
编写于
3月 06, 2016
作者:
E
Eduard Burtescu
浏览文件
操作
浏览文件
下载
电子邮件补丁
差异文件
trans: Simplify "try" intrinsic.
上级
bffb0dec
变更
1
隐藏空白更改
内联
并排
Showing
1 changed file
with
5 addition
and
37 deletion
+5
-37
src/librustc_trans/trans/intrinsic.rs
src/librustc_trans/trans/intrinsic.rs
+5
-37
未找到文件。
src/librustc_trans/trans/intrinsic.rs
浏览文件 @
f9c06abc
...
...
@@ -350,43 +350,6 @@ pub fn trans_intrinsic_call<'a, 'blk, 'tcx>(mut bcx: Block<'blk, 'tcx>,
}
}
// For `try` we need some custom control flow
if
&
name
[
..
]
==
"try"
{
if
let
callee
::
ArgExprs
(
ref
exprs
)
=
args
{
let
(
func
,
data
,
local_ptr
)
=
if
exprs
.len
()
!=
3
{
ccx
.sess
()
.bug
(
"expected three exprs as arguments for
\
`try` intrinsic"
);
}
else
{
(
&
exprs
[
0
],
&
exprs
[
1
],
&
exprs
[
2
])
};
// translate arguments
let
func
=
unpack_datum!
(
bcx
,
expr
::
trans
(
bcx
,
func
));
let
func
=
unpack_datum!
(
bcx
,
func
.to_rvalue_datum
(
bcx
,
"func"
));
let
data
=
unpack_datum!
(
bcx
,
expr
::
trans
(
bcx
,
data
));
let
data
=
unpack_datum!
(
bcx
,
data
.to_rvalue_datum
(
bcx
,
"data"
));
let
local_ptr
=
unpack_datum!
(
bcx
,
expr
::
trans
(
bcx
,
local_ptr
));
let
local_ptr
=
local_ptr
.to_rvalue_datum
(
bcx
,
"local_ptr"
);
let
local_ptr
=
unpack_datum!
(
bcx
,
local_ptr
);
let
dest
=
match
dest
{
expr
::
SaveIn
(
d
)
=>
d
,
expr
::
Ignore
=>
alloc_ty
(
bcx
,
tcx
.mk_mut_ptr
(
tcx
.types.i8
),
"try_result"
),
};
// do the invoke
bcx
=
try_intrinsic
(
bcx
,
func
.val
,
data
.val
,
local_ptr
.val
,
dest
,
call_debug_location
);
fcx
.pop_and_trans_custom_cleanup_scope
(
bcx
,
cleanup_scope
);
return
Result
::
new
(
bcx
,
dest
);
}
else
{
ccx
.sess
()
.bug
(
"expected two exprs as arguments for
\
`try` intrinsic"
);
}
}
// save the actual AST arguments for later (some places need to do
// const-evaluation on them)
let
expr_arguments
=
match
args
{
...
...
@@ -446,6 +409,11 @@ pub fn trans_intrinsic_call<'a, 'blk, 'tcx>(mut bcx: Block<'blk, 'tcx>,
(
Some
(
llfn
),
_
)
=>
{
Call
(
bcx
,
llfn
,
&
llargs
,
call_debug_location
)
}
(
_
,
"try"
)
=>
{
bcx
=
try_intrinsic
(
bcx
,
llargs
[
0
],
llargs
[
1
],
llargs
[
2
],
llresult
,
call_debug_location
);
C_nil
(
ccx
)
}
(
_
,
"breakpoint"
)
=>
{
let
llfn
=
ccx
.get_intrinsic
(
&
(
"llvm.debugtrap"
));
Call
(
bcx
,
llfn
,
&
[],
call_debug_location
)
...
...
编辑
预览
Markdown
is supported
0%
请重试
或
添加新附件
.
添加附件
取消
You are about to add
0
people
to the discussion. Proceed with caution.
先完成此消息的编辑!
取消
想要评论请
注册
或
登录