Skip to content
体验新版
项目
组织
正在加载...
登录
切换导航
打开侧边栏
int
Rust
提交
e4e880df
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,发现更多精彩内容 >>
提交
e4e880df
编写于
11月 11, 2015
作者:
S
Simonas Kazlauskas
浏览文件
操作
浏览文件
下载
电子邮件补丁
差异文件
Const-eval array element repetition count
上级
db89a75a
变更
3
隐藏空白更改
内联
并排
Showing
3 changed file
with
23 addition
and
8 deletion
+23
-8
src/librustc_mir/hair/cx/expr.rs
src/librustc_mir/hair/cx/expr.rs
+14
-7
src/librustc_mir/hair/cx/mod.rs
src/librustc_mir/hair/cx/mod.rs
+6
-1
src/librustc_mir/hair/mod.rs
src/librustc_mir/hair/mod.rs
+3
-0
未找到文件。
src/librustc_mir/hair/cx/expr.rs
浏览文件 @
e4e880df
...
...
@@ -17,7 +17,6 @@
use
hair
::
cx
::
pattern
::
PatNode
;
use
hair
::
cx
::
to_ref
::
ToRef
;
use
rustc
::
front
::
map
;
use
rustc
::
middle
::
const_eval
;
use
rustc
::
middle
::
def
;
use
rustc
::
middle
::
region
::
CodeExtent
;
use
rustc
::
middle
::
pat_util
;
...
...
@@ -81,10 +80,9 @@ fn make_mirror<'a>(self, cx: &mut Cx<'a, 'tcx>) -> Expr<'tcx> {
}
}
hir
::
ExprLit
(
..
)
=>
{
let
value
=
const_eval
::
eval_const_expr
(
cx
.tcx
,
self
);
ExprKind
::
Literal
{
literal
:
Literal
::
Value
{
value
:
value
}
}
}
hir
::
ExprLit
(
..
)
=>
ExprKind
::
Literal
{
literal
:
cx
.const_eval_literal
(
self
)
},
hir
::
ExprBinary
(
op
,
ref
lhs
,
ref
rhs
)
=>
{
if
cx
.tcx
.is_method_call
(
self
.id
)
{
...
...
@@ -273,8 +271,17 @@ fn make_mirror<'a>(self, cx: &mut Cx<'a, 'tcx>) -> Expr<'tcx> {
// Now comes the rote stuff:
hir
::
ExprRepeat
(
ref
v
,
ref
c
)
=>
ExprKind
::
Repeat
{
value
:
v
.to_ref
(),
count
:
c
.to_ref
()
},
hir
::
ExprRepeat
(
ref
v
,
ref
c
)
=>
ExprKind
::
Repeat
{
value
:
v
.to_ref
(),
count
:
Expr
{
ty
:
cx
.tcx
.expr_ty
(
c
),
temp_lifetime
:
None
,
span
:
c
.span
,
kind
:
ExprKind
::
Literal
{
literal
:
cx
.const_eval_literal
(
c
)
}
}
.to_ref
()
},
hir
::
ExprRet
(
ref
v
)
=>
ExprKind
::
Return
{
value
:
v
.to_ref
()
},
hir
::
ExprBreak
(
label
)
=>
...
...
src/librustc_mir/hair/cx/mod.rs
浏览文件 @
e4e880df
...
...
@@ -18,13 +18,14 @@
use
hair
::
*
;
use
repr
::
*
;
use
rustc
::
middle
::
const_eval
::
ConstVal
;
use
rustc
::
middle
::
const_eval
::
{
self
,
ConstVal
}
;
use
rustc
::
middle
::
def_id
::
DefId
;
use
rustc
::
middle
::
infer
::
InferCtxt
;
use
rustc
::
middle
::
subst
::{
Subst
,
Substs
};
use
rustc
::
middle
::
ty
::{
self
,
Ty
};
use
syntax
::
codemap
::
Span
;
use
syntax
::
parse
::
token
;
use
rustc_front
::
hir
;
#[derive(Copy,
Clone)]
pub
struct
Cx
<
'a
,
'tcx
:
'a
>
{
...
...
@@ -73,6 +74,10 @@ pub fn false_literal(&mut self) -> Literal<'tcx> {
Literal
::
Value
{
value
:
ConstVal
::
Bool
(
false
)
}
}
pub
fn
const_eval_literal
(
&
mut
self
,
e
:
&
hir
::
Expr
)
->
Literal
<
'tcx
>
{
Literal
::
Value
{
value
:
const_eval
::
eval_const_expr
(
self
.tcx
,
e
)
}
}
pub
fn
partial_eq
(
&
mut
self
,
ty
:
Ty
<
'tcx
>
)
->
ItemRef
<
'tcx
>
{
let
eq_def_id
=
self
.tcx.lang_items
.eq_trait
()
.unwrap
();
self
.cmp_method_ref
(
eq_def_id
,
"eq"
,
ty
)
...
...
src/librustc_mir/hair/mod.rs
浏览文件 @
e4e880df
...
...
@@ -210,6 +210,9 @@ pub enum ExprKind<'tcx> {
},
Repeat
{
value
:
ExprRef
<
'tcx
>
,
// FIXME(#29789): Add a separate hair::Constant<'tcx> so this could be more explicit about
// its contained data. Currently this should only contain expression of ExprKind::Literal
// kind.
count
:
ExprRef
<
'tcx
>
,
},
Vec
{
...
...
编辑
预览
Markdown
is supported
0%
请重试
或
添加新附件
.
添加附件
取消
You are about to add
0
people
to the discussion. Proceed with caution.
先完成此消息的编辑!
取消
想要评论请
注册
或
登录