Skip to content
体验新版
项目
组织
正在加载...
登录
切换导航
打开侧边栏
int
Rust
提交
8dca7be1
R
Rust
项目概览
int
/
Rust
12 个月 前同步成功
通知
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,发现更多精彩内容 >>
提交
8dca7be1
编写于
2月 28, 2013
作者:
J
Jed Davis
浏览文件
操作
浏览文件
下载
电子邮件补丁
差异文件
A little more cosmetic cleanup
上级
d6acb96c
变更
1
隐藏空白更改
内联
并排
Showing
1 changed file
with
29 addition
and
22 deletion
+29
-22
src/librustc/middle/trans/adt.rs
src/librustc/middle/trans/adt.rs
+29
-22
未找到文件。
src/librustc/middle/trans/adt.rs
浏览文件 @
8dca7be1
...
...
@@ -230,24 +230,6 @@ fn generic_fields_of(cx: @CrateContext, r: &Repr, sizing: bool)
}
}
fn
load_discr
(
bcx
:
block
,
scrutinee
:
ValueRef
,
min
:
int
,
max
:
int
)
->
ValueRef
{
let
ptr
=
GEPi
(
bcx
,
scrutinee
,
[
0
,
0
]);
if
max
+
1
==
min
{
// i.e., if the range is everything. The lo==hi case would be
// rejected by the LLVM verifier (it would mean either an
// empty set, which is impossible, or the entire range of the
// type, which is pointless).
Load
(
bcx
,
ptr
)
}
else
{
// llvm::ConstantRange can deal with ranges that wrap around,
// so an overflow on (max + 1) is fine.
LoadRangeAssert
(
bcx
,
ptr
,
min
as
c_ulonglong
,
(
max
+
1
)
as
c_ulonglong
,
/* signed: */
True
)
}
}
/**
* Obtain as much of a "discriminant" as this representation has.
* This should ideally be less tightly tied to `_match`.
...
...
@@ -282,6 +264,24 @@ pub fn trans_cast_to_int(bcx: block, r: &Repr, scrutinee: ValueRef)
}
}
fn
load_discr
(
bcx
:
block
,
scrutinee
:
ValueRef
,
min
:
int
,
max
:
int
)
->
ValueRef
{
let
ptr
=
GEPi
(
bcx
,
scrutinee
,
[
0
,
0
]);
if
max
+
1
==
min
{
// i.e., if the range is everything. The lo==hi case would be
// rejected by the LLVM verifier (it would mean either an
// empty set, which is impossible, or the entire range of the
// type, which is pointless).
Load
(
bcx
,
ptr
)
}
else
{
// llvm::ConstantRange can deal with ranges that wrap around,
// so an overflow on (max + 1) is fine.
LoadRangeAssert
(
bcx
,
ptr
,
min
as
c_ulonglong
,
(
max
+
1
)
as
c_ulonglong
,
/* signed: */
True
)
}
}
/**
* Yield information about how to dispatch a case of the
* discriminant-like value returned by `trans_switch`.
...
...
@@ -433,10 +433,10 @@ pub fn trans_const(ccx: @CrateContext, r: &Repr, discr: int,
}
}
fn
padding
(
size
:
u64
)
->
ValueRef
{
C_undef
(
T_array
(
T_i8
(),
size
/*bad*/
as
uint
))
}
/**
* Building structs is a little complicated, because we might need to
* insert padding if a field's value is less aligned than its type.
*/
fn
build_const_struct
(
ccx
:
@
CrateContext
,
st
:
&
Struct
,
vals
:
&
[
ValueRef
])
->
~
[
ValueRef
]
{
assert
vals
.len
()
==
st
.fields
.len
();
...
...
@@ -457,12 +457,18 @@ fn build_const_struct(ccx: @CrateContext, st: &Struct, vals: &[ValueRef])
}
assert
!
is_undef
(
vals
[
i
]);
// If that assert fails, could change it to wrap in a struct?
// (See `const_struct_field` for why real fields must not be undef.)
cfields
.push
(
vals
[
i
]);
}
return
cfields
;
}
fn
padding
(
size
:
u64
)
->
ValueRef
{
C_undef
(
T_array
(
T_i8
(),
size
/*bad*/
as
uint
))
}
// XXX this utility routine should be somewhere more general
#[always_inline]
fn
roundup
(
x
:
u64
,
a
:
u64
)
->
u64
{
((
x
+
(
a
-
1
))
/
a
)
*
a
}
...
...
@@ -492,6 +498,7 @@ pub fn const_get_element(ccx: @CrateContext, r: &Repr, val: ValueRef,
}
}
/// Extract field of struct-like const, skipping our alignment padding.
fn
const_struct_field
(
ccx
:
@
CrateContext
,
val
:
ValueRef
,
ix
:
uint
)
->
ValueRef
{
// Get the ix-th non-undef element of the struct.
...
...
编辑
预览
Markdown
is supported
0%
请重试
或
添加新附件
.
添加附件
取消
You are about to add
0
people
to the discussion. Proceed with caution.
先完成此消息的编辑!
取消
想要评论请
注册
或
登录