Skip to content
体验新版
项目
组织
正在加载...
登录
切换导航
打开侧边栏
int
Rust
提交
d16cca1f
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,发现更多精彩内容 >>
提交
d16cca1f
编写于
12月 18, 2013
作者:
P
Patrick Walton
浏览文件
操作
浏览文件
下载
电子邮件补丁
差异文件
librustc: De-`@mut` `const_values`.
上级
28943e96
变更
3
隐藏空白更改
内联
并排
Showing
3 changed file
with
19 addition
and
7 deletion
+19
-7
src/librustc/middle/trans/base.rs
src/librustc/middle/trans/base.rs
+8
-2
src/librustc/middle/trans/consts.rs
src/librustc/middle/trans/consts.rs
+9
-3
src/librustc/middle/trans/context.rs
src/librustc/middle/trans/context.rs
+2
-2
未找到文件。
src/librustc/middle/trans/base.rs
浏览文件 @
d16cca1f
...
...
@@ -2233,7 +2233,9 @@ pub fn trans_item(ccx: @mut CrateContext, item: &ast::item) {
"cannot have static_assert on a mutable
\
static"
);
}
let
v
=
ccx
.const_values
.get_copy
(
&
item
.id
);
let
const_values
=
ccx
.const_values
.borrow
();
let
v
=
const_values
.get
()
.get_copy
(
&
item
.id
);
unsafe
{
if
!
(
llvm
::
LLVMConstIntGetZExtValue
(
v
)
!=
0
)
{
ccx
.sess
.span_fatal
(
expr
.span
,
"static assertion failed"
);
...
...
@@ -2489,7 +2491,11 @@ pub fn get_item_val(ccx: @mut CrateContext, id: ast::NodeId) -> ValueRef {
// We need the translated value here, because for enums the
// LLVM type is not fully determined by the Rust type.
let
(
v
,
inlineable
)
=
consts
::
const_expr
(
ccx
,
expr
);
ccx
.const_values
.insert
(
id
,
v
);
{
let
mut
const_values
=
ccx
.const_values
.borrow_mut
();
const_values
.get
()
.insert
(
id
,
v
);
}
let
mut
inlineable
=
inlineable
;
unsafe
{
...
...
src/librustc/middle/trans/consts.rs
浏览文件 @
d16cca1f
...
...
@@ -157,7 +157,10 @@ fn const_deref(cx: &mut CrateContext, v: ValueRef, t: ty::t, explicit: bool)
pub
fn
get_const_val
(
cx
:
@
mut
CrateContext
,
mut
def_id
:
ast
::
DefId
)
->
(
ValueRef
,
bool
)
{
let
contains_key
=
cx
.const_values
.contains_key
(
&
def_id
.node
);
let
contains_key
=
{
let
const_values
=
cx
.const_values
.borrow
();
const_values
.get
()
.contains_key
(
&
def_id
.node
)
};
if
!
ast_util
::
is_local
(
def_id
)
||
!
contains_key
{
if
!
ast_util
::
is_local
(
def_id
)
{
def_id
=
inline
::
maybe_instantiate_inline
(
cx
,
def_id
);
...
...
@@ -171,7 +174,9 @@ pub fn get_const_val(cx: @mut CrateContext,
_
=>
cx
.tcx.sess
.bug
(
"expected a const to be an item"
)
}
}
(
cx
.const_values
.get_copy
(
&
def_id
.node
),
let
const_values
=
cx
.const_values
.borrow
();
(
const_values
.get
()
.get_copy
(
&
def_id
.node
),
!
cx
.non_inlineable_statics
.contains
(
&
def_id
.node
))
}
...
...
@@ -642,7 +647,8 @@ pub fn trans_const(ccx: @mut CrateContext, m: ast::Mutability, id: ast::NodeId)
let
g
=
base
::
get_item_val
(
ccx
,
id
);
// At this point, get_item_val has already translated the
// constant's initializer to determine its LLVM type.
let
v
=
ccx
.const_values
.get_copy
(
&
id
);
let
const_values
=
ccx
.const_values
.borrow
();
let
v
=
const_values
.get
()
.get_copy
(
&
id
);
llvm
::
LLVMSetInitializer
(
g
,
v
);
if
m
!=
ast
::
MutMutable
{
llvm
::
LLVMSetGlobalConstant
(
g
,
True
);
...
...
src/librustc/middle/trans/context.rs
浏览文件 @
d16cca1f
...
...
@@ -84,7 +84,7 @@ pub struct CrateContext {
const_globals
:
RefCell
<
HashMap
<
int
,
ValueRef
>>
,
// Cache of emitted const values
const_values
:
HashMap
<
ast
::
NodeId
,
ValueRef
>
,
const_values
:
RefCell
<
HashMap
<
ast
::
NodeId
,
ValueRef
>
>
,
// Cache of external const values
extern_const_values
:
HashMap
<
ast
::
DefId
,
ValueRef
>
,
...
...
@@ -199,7 +199,7 @@ pub fn new(sess: session::Session,
vtables
:
RefCell
::
new
(
HashMap
::
new
()),
const_cstr_cache
:
RefCell
::
new
(
HashMap
::
new
()),
const_globals
:
RefCell
::
new
(
HashMap
::
new
()),
const_values
:
HashMap
::
new
(
),
const_values
:
RefCell
::
new
(
HashMap
::
new
()
),
extern_const_values
:
HashMap
::
new
(),
impl_method_cache
:
HashMap
::
new
(),
module_data
:
HashMap
::
new
(),
...
...
编辑
预览
Markdown
is supported
0%
请重试
或
添加新附件
.
添加附件
取消
You are about to add
0
people
to the discussion. Proceed with caution.
先完成此消息的编辑!
取消
想要评论请
注册
或
登录