Skip to content
体验新版
项目
组织
正在加载...
登录
切换导航
打开侧边栏
int
Rust
提交
95dc89f0
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,发现更多精彩内容 >>
提交
95dc89f0
编写于
3月 18, 2011
作者:
P
Patrick Walton
浏览文件
操作
浏览文件
下载
电子邮件补丁
差异文件
rustc: Make iter_structural_ty_full() generic-safe wrt tags
上级
b7972d34
变更
1
显示空白变更内容
内联
并排
Showing
1 changed file
with
10 addition
and
28 deletion
+10
-28
src/comp/middle/trans.rs
src/comp/middle/trans.rs
+10
-28
未找到文件。
src/comp/middle/trans.rs
浏览文件 @
95dc89f0
...
...
@@ -1738,19 +1738,6 @@ fn variant_types(@crate_ctxt cx, &ast.variant v) -> vec[@ty.t] {
ret
tys
;
}
fn
type_of_variant
(
@
crate_ctxt
cx
,
&
ast
.variant
v
,
vec
[
ast
.ty_param
]
ty_params
,
vec
[
@
ty
.t
]
ty_param_substs
)
->
TypeRef
{
let
vec
[
TypeRef
]
lltys
=
vec
();
auto
tys
=
variant_types
(
cx
,
v
);
for
(
@
ty
.t
typ
in
tys
)
{
auto
typ2
=
ty
.substitute_ty_params
(
ty_params
,
ty_param_substs
,
typ
);
lltys
+=
vec
(
type_of
(
cx
,
typ2
));
}
ret
T_struct
(
lltys
);
}
// Returns the type parameters of a tag.
fn
tag_ty_params
(
@
crate_ctxt
cx
,
ast
.def_id
id
)
->
vec
[
ast
.ty_param
]
{
check
(
cx
.items
.contains_key
(
id
));
...
...
@@ -1923,27 +1910,22 @@ fn iter_boxpp(@block_ctxt cx,
if
(
_
vec
.len
[
ast
.variant_arg
](
variant
.args
)
>
0u
)
{
// N-ary variant.
auto
llvarty
=
type_of_variant
(
bcx
.fcx.ccx
,
variants
.
(
i
),
ty_params
,
tps
);
auto
fn_ty
=
ty
.ann_to_type
(
variants
.
(
i
)
.ann
);
alt
(
fn_ty
.struct
)
{
case
(
ty
.ty_fn
(
_
,
?
args
,
_
))
{
auto
llvarp_a
=
variant_cx
.build
.
TruncOrBitCast
(
llunion_a_ptr
,
T_ptr
(
llvarty
));
auto
llvarp_b
=
variant_cx
.build
.
TruncOrBitCast
(
llunion_b_ptr
,
T_ptr
(
llvarty
));
auto
j
=
0u
;
auto
j
=
0
;
for
(
ty
.arg
a
in
args
)
{
auto
v
=
vec
(
C_int
(
0
),
C_int
(
j
as
int
));
auto
llfldp_a
=
variant_cx
.build
.GEP
(
llvarp_a
,
v
);
auto
rslt
=
GEP_tag
(
variant_cx
,
llunion_a_ptr
,
tid
,
variants
.
(
i
)
.id
,
tps
,
j
);
auto
llfldp_a
=
rslt
.val
;
variant_cx
=
rslt
.bcx
;
auto
llfldp_b
=
variant_cx
.build
.GEP
(
llvarp_b
,
v
);
rslt
=
GEP_tag
(
variant_cx
,
llunion_b_ptr
,
tid
,
variants
.
(
i
)
.id
,
tps
,
j
);
auto
llfldp_b
=
rslt
.val
;
variant_cx
=
rslt
.bcx
;
auto
ty_subst
=
ty
.substitute_ty_params
(
ty_params
,
tps
,
a
.ty
);
...
...
@@ -1961,7 +1943,7 @@ fn iter_boxpp(@block_ctxt cx,
auto
res
=
f
(
variant_cx
,
llfld_a
,
llfld_b
,
ty_subst
);
variant_cx
=
res
.bcx
;
j
+=
1
u
;
j
+=
1
;
}
}
case
(
_
)
{
fail
;
}
...
...
编辑
预览
Markdown
is supported
0%
请重试
或
添加新附件
.
添加附件
取消
You are about to add
0
people
to the discussion. Proceed with caution.
先完成此消息的编辑!
取消
想要评论请
注册
或
登录