Skip to content
体验新版
项目
组织
正在加载...
登录
切换导航
打开侧边栏
int
Rust
提交
32e7dcb6
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,发现更多精彩内容 >>
提交
32e7dcb6
编写于
6月 28, 2017
作者:
D
David Renshaw
浏览文件
操作
浏览文件
下载
电子邮件补丁
差异文件
update for upstream changes to TyFnDef
上级
695f9723
变更
2
隐藏空白更改
内联
并排
Showing
2 changed file
with
11 addition
and
8 deletion
+11
-8
src/eval_context.rs
src/eval_context.rs
+8
-6
src/terminator/mod.rs
src/terminator/mod.rs
+3
-2
未找到文件。
src/eval_context.rs
浏览文件 @
32e7dcb6
...
...
@@ -771,7 +771,7 @@ pub(super) fn eval_rvalue_into_lvalue(
}
ReifyFnPointer
=>
match
self
.operand_ty
(
operand
)
.sty
{
ty
::
TyFnDef
(
def_id
,
substs
,
_
)
=>
{
ty
::
TyFnDef
(
def_id
,
substs
)
=>
{
let
instance
=
resolve
(
self
.tcx
,
def_id
,
substs
);
let
fn_ptr
=
self
.memory
.create_fn_alloc
(
instance
);
self
.write_value
(
Value
::
ByVal
(
PrimVal
::
Ptr
(
fn_ptr
)),
dest
,
dest_ty
)
?
;
...
...
@@ -1686,7 +1686,7 @@ fn run_main<'a, 'tcx: 'a>(
let
main_ptr
=
ecx
.memory
.create_fn_alloc
(
main_instance
);
let
dest
=
ecx
.eval_lvalue
(
&
mir
::
Lvalue
::
Local
(
args
.next
()
.unwrap
()))
?
;
let
main_ty
=
main_instance
.def
.def_ty
(
ecx
.tcx
);
let
main_ptr_ty
=
ecx
.tcx
.mk_fn_ptr
(
main_ty
.fn_sig
());
let
main_ptr_ty
=
ecx
.tcx
.mk_fn_ptr
(
main_ty
.fn_sig
(
ecx
.tcx
));
ecx
.write_value
(
Value
::
ByVal
(
PrimVal
::
Ptr
(
main_ptr
)),
dest
,
main_ptr_ty
)
?
;
// Second argument (argc): 0
...
...
@@ -1830,7 +1830,7 @@ fn fn_once_adapter_instance<'a, 'tcx>(
let
self_ty
=
tcx
.mk_closure_from_closure_substs
(
closure_did
,
substs
);
let
sig
=
tcx
.
closure_type
(
closure_did
)
.subst
(
tcx
,
substs
.substs
);
let
sig
=
tcx
.
fn_sig
(
closure_did
)
.subst
(
tcx
,
substs
.substs
);
let
sig
=
tcx
.erase_late_bound_regions_and_normalize
(
&
sig
);
assert_eq!
(
sig
.inputs
()
.len
(),
1
);
let
substs
=
tcx
.mk_substs
([
...
...
@@ -1891,9 +1891,11 @@ pub fn resolve<'a, 'tcx>(
}
else
{
let
item_type
=
def_ty
(
tcx
,
def_id
,
substs
);
let
def
=
match
item_type
.sty
{
ty
::
TyFnDef
(
_
,
_
,
f
)
if
f
.abi
()
==
Abi
::
RustIntrinsic
||
f
.abi
()
==
Abi
::
PlatformIntrinsic
=>
ty
::
TyFnDef
(
..
)
if
{
let
f
=
item_type
.fn_sig
(
tcx
);
f
.abi
()
==
Abi
::
RustIntrinsic
||
f
.abi
()
==
Abi
::
PlatformIntrinsic
}
=>
{
debug!
(
" => intrinsic"
);
ty
::
InstanceDef
::
Intrinsic
(
def_id
)
...
...
src/terminator/mod.rs
浏览文件 @
32e7dcb6
...
...
@@ -72,7 +72,8 @@ pub(super) fn eval_terminator(
let
instance_ty
=
instance
.def
.def_ty
(
self
.tcx
);
let
instance_ty
=
self
.monomorphize
(
instance_ty
,
instance
.substs
);
match
instance_ty
.sty
{
ty
::
TyFnDef
(
_
,
_
,
real_sig
)
=>
{
ty
::
TyFnDef
(
..
)
=>
{
let
real_sig
=
instance_ty
.fn_sig
(
self
.tcx
);
let
sig
=
self
.erase_lifetimes
(
&
sig
);
let
real_sig
=
self
.erase_lifetimes
(
&
real_sig
);
if
!
self
.check_sig_compat
(
sig
,
real_sig
)
?
{
...
...
@@ -83,7 +84,7 @@ pub(super) fn eval_terminator(
}
(
instance
,
sig
)
},
ty
::
TyFnDef
(
def_id
,
substs
,
sig
)
=>
(::
eval_context
::
resolve
(
self
.tcx
,
def_id
,
substs
),
sig
),
ty
::
TyFnDef
(
def_id
,
substs
)
=>
(::
eval_context
::
resolve
(
self
.tcx
,
def_id
,
substs
),
func_ty
.fn_sig
(
self
.tcx
)
),
_
=>
{
let
msg
=
format!
(
"can't handle callee of type {:?}"
,
func_ty
);
return
Err
(
EvalError
::
Unimplemented
(
msg
));
...
...
编辑
预览
Markdown
is supported
0%
请重试
或
添加新附件
.
添加附件
取消
You are about to add
0
people
to the discussion. Proceed with caution.
先完成此消息的编辑!
取消
想要评论请
注册
或
登录