Skip to content
体验新版
项目
组织
正在加载...
登录
切换导航
打开侧边栏
int
Rust
提交
202dd5a3
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,发现更多精彩内容 >>
提交
202dd5a3
编写于
7月 21, 2017
作者:
O
Oliver Schneider
浏览文件
操作
浏览文件
下载
电子邮件补丁
差异文件
Remove unused `IntoValTyPair` hack
上级
6143ef03
变更
1
隐藏空白更改
内联
并排
Showing
1 changed file
with
12 addition
and
40 deletion
+12
-40
src/librustc_mir/interpret/eval_context.rs
src/librustc_mir/interpret/eval_context.rs
+12
-40
未找到文件。
src/librustc_mir/interpret/eval_context.rs
浏览文件 @
202dd5a3
...
...
@@ -426,21 +426,16 @@ pub fn deallocate_local(&mut self, local: Option<Value>) -> EvalResult<'tcx> {
Ok
(())
}
pub
fn
assign_discr_and_fields
<
V
:
IntoValTyPair
<
'tcx
>
,
J
:
IntoIterator
<
Item
=
V
>
,
>
(
pub
fn
assign_discr_and_fields
(
&
mut
self
,
dest
:
Lvalue
<
'tcx
>
,
dest_ty
:
Ty
<
'tcx
>
,
discr_offset
:
u64
,
operands
:
J
,
operands
:
&
[
mir
::
Operand
<
'tcx
>
]
,
discr_val
:
u128
,
variant_idx
:
usize
,
discr_size
:
u64
,
)
->
EvalResult
<
'tcx
>
where
J
::
IntoIter
:
ExactSizeIterator
,
{
)
->
EvalResult
<
'tcx
>
{
// FIXME(solson)
let
dest_ptr
=
self
.force_allocation
(
dest
)
?
.to_ptr
()
?
;
...
...
@@ -456,29 +451,25 @@ pub fn assign_discr_and_fields<
self
.assign_fields
(
dest
,
dest_ty
,
operands
)
}
pub
fn
assign_fields
<
V
:
IntoValTyPair
<
'tcx
>
,
J
:
IntoIterator
<
Item
=
V
>
,
>
(
pub
fn
assign_fields
(
&
mut
self
,
dest
:
Lvalue
<
'tcx
>
,
dest_ty
:
Ty
<
'tcx
>
,
operands
:
J
,
)
->
EvalResult
<
'tcx
>
where
J
::
IntoIter
:
ExactSizeIterator
,
{
operands
:
&
[
mir
::
Operand
<
'tcx
>
],
)
->
EvalResult
<
'tcx
>
{
if
self
.type_size
(
dest_ty
)
?
==
Some
(
0
)
{
// zst assigning is a nop
return
Ok
(());
}
if
self
.ty_to_primval_kind
(
dest_ty
)
.is_ok
()
{
let
mut
iter
=
operands
.into_iter
(
);
assert_eq!
(
iter
.len
(),
1
)
;
let
(
value
,
value_ty
)
=
iter
.next
()
.unwrap
()
.into_val_ty_pair
(
self
)
?
;
assert_eq!
(
operands
.len
(),
1
);
let
value
=
self
.eval_operand
(
&
operands
[
0
])
?
;
let
value_ty
=
self
.operand_ty
(
&
operands
[
0
])
;
return
self
.write_value
(
value
,
dest
,
value_ty
);
}
for
(
field_index
,
operand
)
in
operands
.into_iter
()
.enumerate
()
{
let
(
value
,
value_ty
)
=
operand
.into_val_ty_pair
(
self
)
?
;
for
(
field_index
,
operand
)
in
operands
.iter
()
.enumerate
()
{
let
value
=
self
.eval_operand
(
operand
)
?
;
let
value_ty
=
self
.operand_ty
(
operand
);
let
field_dest
=
self
.lvalue_field
(
dest
,
field_index
,
dest_ty
,
value_ty
)
?
;
self
.write_value
(
value
,
field_dest
,
value_ty
)
?
;
}
...
...
@@ -1802,25 +1793,6 @@ pub fn is_inhabited<'a, 'tcx: 'a>(tcx: TyCtxt<'a, 'tcx, 'tcx>, ty: Ty<'tcx>) ->
ty
.uninhabited_from
(
&
mut
HashMap
::
default
(),
tcx
)
.is_empty
()
}
pub
trait
IntoValTyPair
<
'tcx
>
{
fn
into_val_ty_pair
<
'a
>
(
self
,
ecx
:
&
mut
EvalContext
<
'a
,
'tcx
>
)
->
EvalResult
<
'tcx
,
(
Value
,
Ty
<
'tcx
>
)
>
where
'tcx
:
'a
;
}
impl
<
'tcx
>
IntoValTyPair
<
'tcx
>
for
(
Value
,
Ty
<
'tcx
>
)
{
fn
into_val_ty_pair
<
'a
>
(
self
,
_
:
&
mut
EvalContext
<
'a
,
'tcx
>
)
->
EvalResult
<
'tcx
,
(
Value
,
Ty
<
'tcx
>
)
>
where
'tcx
:
'a
{
Ok
(
self
)
}
}
impl
<
'b
,
'tcx
:
'b
>
IntoValTyPair
<
'tcx
>
for
&
'b
mir
::
Operand
<
'tcx
>
{
fn
into_val_ty_pair
<
'a
>
(
self
,
ecx
:
&
mut
EvalContext
<
'a
,
'tcx
>
)
->
EvalResult
<
'tcx
,
(
Value
,
Ty
<
'tcx
>
)
>
where
'tcx
:
'a
{
let
value
=
ecx
.eval_operand
(
self
)
?
;
let
value_ty
=
ecx
.operand_ty
(
self
);
Ok
((
value
,
value_ty
))
}
}
/// FIXME: expose trans::monomorphize::resolve_closure
pub
fn
resolve_closure
<
'a
,
'tcx
>
(
tcx
:
TyCtxt
<
'a
,
'tcx
,
'tcx
>
,
...
...
编辑
预览
Markdown
is supported
0%
请重试
或
添加新附件
.
添加附件
取消
You are about to add
0
people
to the discussion. Proceed with caution.
先完成此消息的编辑!
取消
想要评论请
注册
或
登录