Skip to content
体验新版
项目
组织
正在加载...
登录
切换导航
打开侧边栏
int
Rust
提交
b8531150
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,发现更多精彩内容 >>
提交
b8531150
编写于
11月 27, 2015
作者:
O
Oliver Schneider
浏览文件
操作
浏览文件
下载
电子邮件补丁
差异文件
prettify some statements
上级
8864f2c8
变更
1
隐藏空白更改
内联
并排
Showing
1 changed file
with
17 addition
and
23 deletion
+17
-23
src/librustc_trans/trans/consts.rs
src/librustc_trans/trans/consts.rs
+17
-23
未找到文件。
src/librustc_trans/trans/consts.rs
浏览文件 @
b8531150
...
...
@@ -287,27 +287,26 @@ pub fn get_const_expr_as_global<'a, 'tcx>(ccx: &CrateContext<'a, 'tcx>,
->
Result
<
ValueRef
,
ConstEvalFailure
>
{
debug!
(
"get_const_expr_as_global: {:?}"
,
expr
.id
);
// Special-case constants to cache a common global for all uses.
match
expr
.node
{
hir
::
ExprPath
(
..
)
=>
{
let
def
=
ccx
.tcx
()
.def_map
.borrow
()
.get
(
&
expr
.id
)
.unwrap
()
.full_def
();
match
def
{
def
::
DefConst
(
def_id
)
|
def
::
DefAssociatedConst
(
def_id
)
=>
{
if
!
ccx
.tcx
()
.tables
.borrow
()
.adjustments
.contains_key
(
&
expr
.id
)
{
debug!
(
"get_const_expr_as_global ({:?}): found const {:?}"
,
expr
.id
,
def_id
);
return
get_const_val
(
ccx
,
def_id
,
expr
);
}
if
let
hir
::
ExprPath
(
..
)
=
expr
.node
{
// `def` must be its own statement and cannot be in the `match`
// otherwise the `def_map` will be borrowed for the entire match instead
// of just to get the `def` value
let
def
=
ccx
.tcx
()
.def_map
.borrow
()
.get
(
&
expr
.id
)
.unwrap
()
.full_def
();
match
def
{
def
::
DefConst
(
def_id
)
|
def
::
DefAssociatedConst
(
def_id
)
=>
{
if
!
ccx
.tcx
()
.tables
.borrow
()
.adjustments
.contains_key
(
&
expr
.id
)
{
debug!
(
"get_const_expr_as_global ({:?}): found const {:?}"
,
expr
.id
,
def_id
);
return
get_const_val
(
ccx
,
def_id
,
expr
);
}
_
=>
{}
}
},
_
=>
{},
}
_
=>
{}
}
let
key
=
(
expr
.id
,
param_substs
);
match
ccx
.const_values
()
.borrow
()
.get
(
&
key
)
{
Some
(
&
val
)
=>
return
Ok
(
val
),
None
=>
{}
if
let
Some
(
&
val
)
=
ccx
.const_values
()
.borrow
()
.get
(
&
key
)
{
return
Ok
(
val
);
}
let
ty
=
monomorphize
::
apply_param_substs
(
ccx
.tcx
(),
param_substs
,
&
ccx
.tcx
()
.expr_ty
(
expr
));
...
...
@@ -316,10 +315,7 @@ pub fn get_const_expr_as_global<'a, 'tcx>(ccx: &CrateContext<'a, 'tcx>,
// references, even when only the latter are correct.
try!
(
const_expr_unadjusted
(
ccx
,
expr
,
ty
,
param_substs
,
None
,
trueconst
))
}
else
{
match
const_expr
(
ccx
,
expr
,
param_substs
,
None
,
trueconst
)
{
Err
(
err
)
=>
return
Err
(
err
),
Ok
((
ok
,
_
))
=>
ok
,
}
try!
(
const_expr
(
ccx
,
expr
,
param_substs
,
None
,
trueconst
))
.0
};
// boolean SSA values are i1, but they have to be stored in i8 slots,
...
...
@@ -577,9 +573,7 @@ fn const_expr_unadjusted<'a, 'tcx>(cx: &CrateContext<'a, 'tcx>,
};
let
_
icx
=
push_ctxt
(
"const_expr"
);
Ok
(
match
e
.node
{
hir
::
ExprLit
(
ref
lit
)
=>
{
const_lit
(
cx
,
e
,
&**
lit
)
},
hir
::
ExprLit
(
ref
lit
)
=>
const_lit
(
cx
,
e
,
&**
lit
),
hir
::
ExprBinary
(
b
,
ref
e1
,
ref
e2
)
=>
{
/* Neither type is bottom, and we expect them to be unified
* already, so the following is safe. */
...
...
编辑
预览
Markdown
is supported
0%
请重试
或
添加新附件
.
添加附件
取消
You are about to add
0
people
to the discussion. Proceed with caution.
先完成此消息的编辑!
取消
想要评论请
注册
或
登录