Skip to content
体验新版
项目
组织
正在加载...
登录
切换导航
打开侧边栏
int
Rust
提交
f753a6ef
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,发现更多精彩内容 >>
提交
f753a6ef
编写于
2月 23, 2017
作者:
E
est31
浏览文件
操作
浏览文件
下载
电子邮件补丁
差异文件
Feature gate
上级
1b9b3228
变更
3
隐藏空白更改
内联
并排
Showing
3 changed file
with
17 addition
and
1 deletion
+17
-1
src/librustc_typeck/check/coercion.rs
src/librustc_typeck/check/coercion.rs
+9
-0
src/libsyntax/feature_gate.rs
src/libsyntax/feature_gate.rs
+7
-0
src/test/run-pass/closure-to-fn-coercion.rs
src/test/run-pass/closure-to-fn-coercion.rs
+1
-1
未找到文件。
src/librustc_typeck/check/coercion.rs
浏览文件 @
f753a6ef
...
...
@@ -74,6 +74,7 @@
use
rustc
::
ty
::
relate
::
RelateResult
;
use
syntax
::
ast
::
NodeId
;
use
syntax
::
abi
;
use
syntax
::
feature_gate
;
use
util
::
common
::
indent
;
use
std
::
cell
::
RefCell
;
...
...
@@ -575,6 +576,14 @@ fn coerce_closure_to_fn(&self,
let
node_id_a
:
NodeId
=
self
.tcx.hir
.as_local_node_id
(
def_id_a
)
.unwrap
();
match
b
.sty
{
ty
::
TyFnPtr
(
_
)
if
self
.tcx
.with_freevars
(
node_id_a
,
|
v
|
v
.is_empty
())
=>
{
if
!
self
.tcx.sess.features
.borrow
()
.closure_to_fn_coercion
{
feature_gate
::
emit_feature_err
(
&
self
.tcx.sess.parse_sess
,
"closure_to_fn_coercion"
,
self
.cause.span
,
feature_gate
::
GateIssue
::
Language
,
feature_gate
::
CLOSURE_TO_FN_COERCION
);
return
self
.unify_and_identity
(
a
,
b
);
}
// We coerce the closure, which has fn type
// `extern "rust-call" fn((arg0,arg1,...)) -> _`
// to
...
...
src/libsyntax/feature_gate.rs
浏览文件 @
f753a6ef
...
...
@@ -323,6 +323,10 @@ pub fn new() -> Features {
// `extern "msp430-interrupt" fn()`
(
active
,
abi_msp430_interrupt
,
"1.16.0"
,
Some
(
38487
)),
// Used to identify crates that contain sanitizer runtimes
// rustc internal
(
active
,
closure_to_fn_coercion
,
"1.17.0"
,
Some
(
39817
)),
// Used to identify crates that contain sanitizer runtimes
// rustc internal
(
active
,
sanitizer_runtime
,
"1.17.0"
,
None
),
...
...
@@ -977,6 +981,9 @@ pub fn feature_err<'a>(sess: &'a ParseSess, feature: &str, span: Span, issue: Ga
pub
const
EXPLAIN_PLACEMENT_IN
:
&
'static
str
=
"placement-in expression syntax is experimental and subject to change."
;
pub
const
CLOSURE_TO_FN_COERCION
:
&
'static
str
=
"non-capturing closure to fn coercion is experimental"
;
struct
PostExpansionVisitor
<
'a
>
{
context
:
&
'a
Context
<
'a
>
,
}
...
...
src/test/run-pass/closure-to-fn-coercion.rs
浏览文件 @
f753a6ef
...
...
@@ -10,7 +10,7 @@
// ignore-stage0: new feature, remove this when SNAP
//
#![feature(closure_to_fn_coercion)]
#![feature(closure_to_fn_coercion)]
const
FOO
:
fn
(
u8
)
->
u8
=
|
v
:
u8
|
{
v
};
...
...
编辑
预览
Markdown
is supported
0%
请重试
或
添加新附件
.
添加附件
取消
You are about to add
0
people
to the discussion. Proceed with caution.
先完成此消息的编辑!
取消
想要评论请
注册
或
登录