Skip to content
体验新版
项目
组织
正在加载...
登录
切换导航
打开侧边栏
int
Rust
提交
e5b36848
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,发现更多精彩内容 >>
提交
e5b36848
编写于
6月 25, 2015
作者:
J
Jared Roesch
浏览文件
操作
浏览文件
下载
电子邮件补丁
差异文件
Remove ClosureTyper impl for FnCtxt
上级
480cd8fe
变更
10
隐藏空白更改
内联
并排
Showing
10 changed file
with
62 addition
and
92 deletion
+62
-92
src/librustc/middle/infer/mod.rs
src/librustc/middle/infer/mod.rs
+32
-4
src/librustc_typeck/check/callee.rs
src/librustc_typeck/check/callee.rs
+3
-3
src/librustc_typeck/check/coercion.rs
src/librustc_typeck/check/coercion.rs
+1
-1
src/librustc_typeck/check/method/mod.rs
src/librustc_typeck/check/method/mod.rs
+1
-1
src/librustc_typeck/check/method/probe.rs
src/librustc_typeck/check/method/probe.rs
+3
-3
src/librustc_typeck/check/method/suggest.rs
src/librustc_typeck/check/method/suggest.rs
+1
-1
src/librustc_typeck/check/mod.rs
src/librustc_typeck/check/mod.rs
+5
-64
src/librustc_typeck/check/regionck.rs
src/librustc_typeck/check/regionck.rs
+14
-13
src/librustc_typeck/check/upvar.rs
src/librustc_typeck/check/upvar.rs
+1
-1
src/librustc_typeck/check/wf.rs
src/librustc_typeck/check/wf.rs
+1
-1
未找到文件。
src/librustc/middle/infer/mod.rs
浏览文件 @
e5b36848
...
...
@@ -25,7 +25,7 @@
use
middle
::
free_region
::
FreeRegionMap
;
use
middle
::
mem_categorization
as
mc
;
use
middle
::
mem_categorization
::
McResult
;
use
middle
::
region
::
{
self
,
CodeExtent
}
;
use
middle
::
region
::
CodeExtent
;
use
middle
::
subst
;
use
middle
::
subst
::
Substs
;
use
middle
::
subst
::
Subst
;
...
...
@@ -40,7 +40,7 @@
use
syntax
::
ast
;
use
syntax
::
codemap
;
use
syntax
::
codemap
::
Span
;
use
util
::
nodemap
::{
DefIdMap
,
FnvHashMap
,
NodeMap
};
use
util
::
nodemap
::{
FnvHashMap
,
NodeMap
};
use
self
::
combine
::
CombineFields
;
use
self
::
region_inference
::{
RegionVarBindings
,
RegionSnapshot
};
...
...
@@ -524,7 +524,21 @@ fn closure_type(&self,
substs
:
&
subst
::
Substs
<
'tcx
>
)
->
ty
::
ClosureTy
<
'tcx
>
{
self
.tables
.borrow
()
.closure_tys
.get
(
&
def_id
)
.unwrap
()
.subst
(
self
.tcx
,
substs
)
// the substitutions in `substs` are already monomorphized,
// but we still must normalize associated types
let
closure_ty
=
self
.tables
.borrow
()
.closure_tys
.get
(
&
def_id
)
.unwrap
()
.subst
(
self
.tcx
,
substs
);
if
self
.normalize
{
// NOTE: this flag is *always* set to false currently
panic!
(
"issue XXXX: must finish fulfill refactor"
)
// normalize_associated_type(self.param_env.tcx, &closure_ty)
}
else
{
closure_ty
}
}
fn
closure_upvars
(
&
self
,
...
...
@@ -532,7 +546,16 @@ fn closure_upvars(&self,
substs
:
&
Substs
<
'tcx
>
)
->
Option
<
Vec
<
ty
::
ClosureUpvar
<
'tcx
>>>
{
ty
::
ctxt
::
closure_upvars
(
self
,
def_id
,
substs
)
// the substitutions in `substs` are already monomorphized,
// but we still must normalize associated types
let
result
=
ty
::
ctxt
::
closure_upvars
(
self
,
def_id
,
substs
)
if
self
.normalize
{
// NOTE: this flag is *always* set to false currently
panic!
(
"issue XXXX: must finish fulfill refactor"
)
// monomorphize::normalize_associated_type(self.param_env.tcx, &result)
}
else
{
result
}
}
}
...
...
@@ -1073,6 +1096,11 @@ pub fn resolve_type_vars_if_possible<T:TypeFoldable<'tcx>>(&self, value: &T) ->
value
.fold_with
(
&
mut
r
)
}
/// Resolves all type variables in `t` and then, if any were left
/// unresolved, substitutes an error type. This is used after the
/// main checking when doing a second pass before writeback. The
/// justification is that writeback will produce an error for
/// these unconstrained type variables.
fn
resolve_type_vars_or_error
(
&
self
,
t
:
&
Ty
<
'tcx
>
)
->
mc
::
McResult
<
Ty
<
'tcx
>>
{
let
ty
=
self
.resolve_type_vars_if_possible
(
t
);
if
ty
.has_infer_types
()
||
ty
.references_error
()
{
Err
(())
}
else
{
Ok
(
ty
)
}
...
...
src/librustc_typeck/check/callee.rs
浏览文件 @
e5b36848
...
...
@@ -137,9 +137,9 @@ fn try_overloaded_call_step<'a, 'tcx>(fcx: &FnCtxt<'a, 'tcx>,
// Check whether this is a call to a closure where we
// haven't yet decided on whether the closure is fn vs
// fnmut vs fnonce. If so, we have to defer further processing.
if
fcx
.closure_kind
(
def_id
)
.is_none
()
{
if
fcx
.
infcx
()
.
closure_kind
(
def_id
)
.is_none
()
{
let
closure_ty
=
fcx
.closure_type
(
def_id
,
substs
);
fcx
.
infcx
()
.
closure_type
(
def_id
,
substs
);
let
fn_sig
=
fcx
.infcx
()
.replace_late_bound_regions_with_fresh_var
(
call_expr
.span
,
infer
::
FnCall
,
...
...
@@ -344,7 +344,7 @@ fn resolve<'a>(&mut self, fcx: &FnCtxt<'a,'tcx>) {
// we should not be invoked until the closure kind has been
// determined by upvar inference
assert
!
(
fcx
.closure_kind
(
self
.closure_def_id
)
.is_some
());
assert
!
(
fcx
.
infcx
()
.
closure_kind
(
self
.closure_def_id
)
.is_some
());
// We may now know enough to figure out fn vs fnmut etc.
match
try_overloaded_call_traits
(
fcx
,
self
.call_expr
,
self
.callee_expr
,
...
...
src/librustc_typeck/check/coercion.rs
浏览文件 @
e5b36848
...
...
@@ -273,7 +273,7 @@ fn coerce_unsized(&self,
};
let
source
=
source
.adjust_for_autoref
(
self
.tcx
(),
reborrow
);
let
mut
selcx
=
traits
::
SelectionContext
::
new
(
self
.fcx
.infcx
(),
self
.fcx
);
let
mut
selcx
=
traits
::
SelectionContext
::
new
(
self
.fcx
.infcx
(),
self
.fcx
.infcx
()
);
// Use a FIFO queue for this custom fulfillment procedure.
let
mut
queue
=
VecDeque
::
new
();
...
...
src/librustc_typeck/check/method/mod.rs
浏览文件 @
e5b36848
...
...
@@ -195,7 +195,7 @@ pub fn lookup_in_trait_adjusted<'a, 'tcx>(fcx: &FnCtxt<'a, 'tcx>,
poly_trait_ref
.to_predicate
());
// Now we want to know if this can be matched
let
mut
selcx
=
traits
::
SelectionContext
::
new
(
fcx
.infcx
(),
fcx
);
let
mut
selcx
=
traits
::
SelectionContext
::
new
(
fcx
.infcx
(),
fcx
.infcx
()
);
if
!
selcx
.evaluate_obligation
(
&
obligation
)
{
debug!
(
"--> Cannot match obligation"
);
return
None
;
// Cannot be matched, no such method resolution is possible.
...
...
src/librustc_typeck/check/method/probe.rs
浏览文件 @
e5b36848
...
...
@@ -421,7 +421,7 @@ fn assemble_inherent_impl_probe(&mut self, impl_def_id: ast::DefId) {
// We can't use normalize_associated_types_in as it will pollute the
// fcx's fulfillment context after this probe is over.
let
cause
=
traits
::
ObligationCause
::
misc
(
self
.span
,
self
.fcx.body_id
);
let
mut
selcx
=
&
mut
traits
::
SelectionContext
::
new
(
self
.fcx
.infcx
(),
self
.fcx
);
let
mut
selcx
=
&
mut
traits
::
SelectionContext
::
new
(
self
.fcx
.infcx
(),
self
.fcx
.infcx
()
);
let
traits
::
Normalized
{
value
:
xform_self_ty
,
obligations
}
=
traits
::
normalize
(
selcx
,
cause
,
&
xform_self_ty
);
debug!
(
"assemble_inherent_impl_probe: xform_self_ty = {:?}"
,
...
...
@@ -681,7 +681,7 @@ fn assemble_extension_candidates_for_trait_impls(&mut self,
// as it will pollute the fcx's fulfillment context after this probe
// is over.
let
cause
=
traits
::
ObligationCause
::
misc
(
self
.span
,
self
.fcx.body_id
);
let
mut
selcx
=
&
mut
traits
::
SelectionContext
::
new
(
self
.fcx
.infcx
(),
self
.fcx
);
let
mut
selcx
=
&
mut
traits
::
SelectionContext
::
new
(
self
.fcx
.infcx
(),
self
.fcx
.infcx
()
);
let
traits
::
Normalized
{
value
:
xform_self_ty
,
obligations
}
=
traits
::
normalize
(
selcx
,
cause
,
&
xform_self_ty
);
...
...
@@ -1076,7 +1076,7 @@ fn consider_probe(&self, self_ty: Ty<'tcx>, probe: &Candidate<'tcx>,
match
probe
.kind
{
InherentImplCandidate
(
impl_def_id
,
ref
substs
,
ref
ref_obligations
)
|
ExtensionImplCandidate
(
impl_def_id
,
_
,
ref
substs
,
_
,
ref
ref_obligations
)
=>
{
let
selcx
=
&
mut
traits
::
SelectionContext
::
new
(
self
.infcx
(),
self
.fcx
);
let
selcx
=
&
mut
traits
::
SelectionContext
::
new
(
self
.infcx
(),
self
.fcx
.infcx
()
);
let
cause
=
traits
::
ObligationCause
::
misc
(
self
.span
,
self
.fcx.body_id
);
// Check whether the impl imposes obligations we have to worry about.
...
...
src/librustc_typeck/check/method/suggest.rs
浏览文件 @
e5b36848
...
...
@@ -102,7 +102,7 @@ pub fn report_error<'a, 'tcx>(fcx: &FnCtxt<'a, 'tcx>,
let
obligation
=
Obligation
::
misc
(
span
,
fcx
.body_id
,
poly_trait_ref
.to_predicate
());
let
mut
selcx
=
SelectionContext
::
new
(
infcx
,
fcx
);
let
mut
selcx
=
SelectionContext
::
new
(
infcx
,
fcx
.infcx
()
);
if
selcx
.evaluate_obligation
(
&
obligation
)
{
span_stored_function
();
...
...
src/librustc_typeck/check/mod.rs
浏览文件 @
e5b36848
...
...
@@ -316,65 +316,6 @@ fn node_method_ty(&self, method_call: ty::MethodCall)
.map
(|
ty
|
self
.infcx
()
.resolve_type_vars_if_possible
(
&
ty
))
}
fn
node_method_origin
(
&
self
,
method_call
:
ty
::
MethodCall
)
->
Option
<
ty
::
MethodOrigin
<
'tcx
>>
{
self
.inh.tables
.borrow
()
.method_map
.get
(
&
method_call
)
.map
(|
method
|
method
.origin
.clone
())
}
fn
adjustments
(
&
self
)
->
Ref
<
NodeMap
<
ty
::
AutoAdjustment
<
'tcx
>>>
{
fn
project_adjustments
<
'a
,
'tcx
>
(
tables
:
&
'a
ty
::
Tables
<
'tcx
>
)
->
&
'a
NodeMap
<
ty
::
AutoAdjustment
<
'tcx
>>
{
&
tables
.adjustments
}
Ref
::
map
(
self
.inh.tables
.borrow
(),
project_adjustments
)
}
fn
is_method_call
(
&
self
,
id
:
ast
::
NodeId
)
->
bool
{
self
.inh.tables
.borrow
()
.method_map
.contains_key
(
&
ty
::
MethodCall
::
expr
(
id
))
}
fn
temporary_scope
(
&
self
,
rvalue_id
:
ast
::
NodeId
)
->
Option
<
CodeExtent
>
{
self
.param_env
()
.temporary_scope
(
rvalue_id
)
}
fn
upvar_capture
(
&
self
,
upvar_id
:
ty
::
UpvarId
)
->
Option
<
ty
::
UpvarCapture
>
{
self
.inh.tables
.borrow
()
.upvar_capture_map
.get
(
&
upvar_id
)
.cloned
()
}
}
impl
<
'a
,
'tcx
>
ty
::
ClosureTyper
<
'tcx
>
for
FnCtxt
<
'a
,
'tcx
>
{
fn
param_env
<
'b
>
(
&
'b
self
)
->
&
'b
ty
::
ParameterEnvironment
<
'b
,
'tcx
>
{
&
self
.inh.infcx.parameter_environment
}
fn
closure_kind
(
&
self
,
def_id
:
ast
::
DefId
)
->
Option
<
ty
::
ClosureKind
>
{
self
.inh.tables
.borrow
()
.closure_kinds
.get
(
&
def_id
)
.cloned
()
}
fn
closure_type
(
&
self
,
def_id
:
ast
::
DefId
,
substs
:
&
subst
::
Substs
<
'tcx
>
)
->
ty
::
ClosureTy
<
'tcx
>
{
self
.inh.tables
.borrow
()
.closure_tys
.get
(
&
def_id
)
.unwrap
()
.subst
(
self
.tcx
(),
substs
)
}
fn
closure_upvars
(
&
self
,
def_id
:
ast
::
DefId
,
substs
:
&
Substs
<
'tcx
>
)
->
Option
<
Vec
<
ty
::
ClosureUpvar
<
'tcx
>>>
{
ty
::
ctxt
::
closure_upvars
(
self
,
def_id
,
substs
)
}
}
impl
<
'a
,
'tcx
>
Inherited
<
'a
,
'tcx
>
{
fn
new
(
tcx
:
&
'a
ty
::
ctxt
<
'tcx
>
,
tables
:
&
'a
RefCell
<
ty
::
Tables
<
'tcx
>>
,
...
...
@@ -1473,7 +1414,7 @@ fn instantiate_bounds(&self,
fn
normalize_associated_types_in
<
T
>
(
&
self
,
span
:
Span
,
value
:
&
T
)
->
T
where
T
:
TypeFoldable
<
'tcx
>
+
HasTypeFlags
{
self
.inh
.normalize_associated_types_in
(
self
,
span
,
self
.body_id
,
value
)
self
.inh
.normalize_associated_types_in
(
self
.infcx
()
,
span
,
self
.body_id
,
value
)
}
fn
normalize_associated_type
(
&
self
,
...
...
@@ -1488,7 +1429,7 @@ fn normalize_associated_type(&self,
self
.inh.fulfillment_cx
.borrow_mut
()
.normalize_projection_type
(
self
.infcx
(),
self
,
self
.infcx
()
,
ty
::
ProjectionTy
{
trait_ref
:
trait_ref
,
item_name
:
item_name
,
...
...
@@ -1843,7 +1784,7 @@ fn select_all_obligations_or_error(&self) {
self
.select_all_obligations_and_apply_defaults
();
let
mut
fulfillment_cx
=
self
.inh.fulfillment_cx
.borrow_mut
();
match
fulfillment_cx
.select_all_or_error
(
self
.infcx
(),
self
)
{
match
fulfillment_cx
.select_all_or_error
(
self
.infcx
(),
self
.infcx
()
)
{
Ok
(())
=>
{
}
Err
(
errors
)
=>
{
report_fulfillment_errors
(
self
.infcx
(),
&
errors
);
}
}
...
...
@@ -1854,7 +1795,7 @@ fn select_obligations_where_possible(&self) {
match
self
.inh.fulfillment_cx
.borrow_mut
()
.select_where_possible
(
self
.infcx
(),
self
)
.select_where_possible
(
self
.infcx
(),
self
.infcx
()
)
{
Ok
(())
=>
{
}
Err
(
errors
)
=>
{
report_fulfillment_errors
(
self
.infcx
(),
&
errors
);
}
...
...
@@ -1869,7 +1810,7 @@ fn select_new_obligations(&self) {
match
self
.inh.fulfillment_cx
.borrow_mut
()
.select_new_obligations
(
self
.infcx
(),
self
)
.select_new_obligations
(
self
.infcx
(),
self
.infcx
()
)
{
Ok
(())
=>
{
}
Err
(
errors
)
=>
{
report_fulfillment_errors
(
self
.infcx
(),
&
errors
);
}
...
...
src/librustc_typeck/check/regionck.rs
浏览文件 @
e5b36848
...
...
@@ -86,6 +86,7 @@
use
check
::
dropck
;
use
check
::
FnCtxt
;
use
middle
::
free_region
::
FreeRegionMap
;
use
middle
::
infer
::
InferCtxt
;
use
middle
::
implicator
;
use
middle
::
mem_categorization
as
mc
;
use
middle
::
region
::
CodeExtent
;
...
...
@@ -353,7 +354,7 @@ fn relate_free_regions(&mut self,
debug!
(
"relate_free_regions(t={:?})"
,
ty
);
let
body_scope
=
CodeExtent
::
from_node_id
(
body_id
);
let
body_scope
=
ty
::
ReScope
(
body_scope
);
let
implications
=
implicator
::
implications
(
self
.fcx
.infcx
(),
self
.fcx
,
body_id
,
let
implications
=
implicator
::
implications
(
self
.fcx
.infcx
(),
self
.fcx
.infcx
()
,
body_id
,
ty
,
body_scope
,
span
);
// Record any relations between free regions that we observe into the free-region-map.
...
...
@@ -549,7 +550,7 @@ fn visit_expr(rcx: &mut Rcx, expr: &ast::Expr) {
// If necessary, constrain destructors in the unadjusted form of this
// expression.
let
cmt_result
=
{
let
mc
=
mc
::
MemCategorizationContext
::
new
(
rcx
.fcx
);
let
mc
=
mc
::
MemCategorizationContext
::
new
(
rcx
.fcx
.infcx
()
);
mc
.cat_expr_unadjusted
(
expr
)
};
match
cmt_result
{
...
...
@@ -568,7 +569,7 @@ fn visit_expr(rcx: &mut Rcx, expr: &ast::Expr) {
// If necessary, constrain destructors in this expression. This will be
// the adjusted form if there is an adjustment.
let
cmt_result
=
{
let
mc
=
mc
::
MemCategorizationContext
::
new
(
rcx
.fcx
);
let
mc
=
mc
::
MemCategorizationContext
::
new
(
rcx
.fcx
.infcx
()
);
mc
.cat_expr
(
expr
)
};
match
cmt_result
{
...
...
@@ -912,7 +913,7 @@ fn constrain_autoderefs<'a, 'tcx>(rcx: &mut Rcx<'a, 'tcx>,
r
,
m
);
{
let
mc
=
mc
::
MemCategorizationContext
::
new
(
rcx
.fcx
);
let
mc
=
mc
::
MemCategorizationContext
::
new
(
rcx
.fcx
.infcx
()
);
let
self_cmt
=
ignore_err!
(
mc
.cat_expr_autoderefd
(
deref_expr
,
i
));
debug!
(
"constrain_autoderefs: self_cmt={:?}"
,
self_cmt
);
...
...
@@ -1037,7 +1038,7 @@ fn link_addr_of(rcx: &mut Rcx, expr: &ast::Expr,
debug!
(
"link_addr_of(expr={:?}, base={:?})"
,
expr
,
base
);
let
cmt
=
{
let
mc
=
mc
::
MemCategorizationContext
::
new
(
rcx
.fcx
);
let
mc
=
mc
::
MemCategorizationContext
::
new
(
rcx
.fcx
.infcx
()
);
ignore_err!
(
mc
.cat_expr
(
base
))
};
...
...
@@ -1055,7 +1056,7 @@ fn link_local(rcx: &Rcx, local: &ast::Local) {
None
=>
{
return
;
}
Some
(
ref
expr
)
=>
&**
expr
,
};
let
mc
=
mc
::
MemCategorizationContext
::
new
(
rcx
.fcx
);
let
mc
=
mc
::
MemCategorizationContext
::
new
(
rcx
.fcx
.infcx
()
);
let
discr_cmt
=
ignore_err!
(
mc
.cat_expr
(
init_expr
));
link_pattern
(
rcx
,
mc
,
discr_cmt
,
&*
local
.pat
);
}
...
...
@@ -1065,7 +1066,7 @@ fn link_local(rcx: &Rcx, local: &ast::Local) {
/// linked to the lifetime of its guarantor (if any).
fn
link_match
(
rcx
:
&
Rcx
,
discr
:
&
ast
::
Expr
,
arms
:
&
[
ast
::
Arm
])
{
debug!
(
"regionck::for_match()"
);
let
mc
=
mc
::
MemCategorizationContext
::
new
(
rcx
.fcx
);
let
mc
=
mc
::
MemCategorizationContext
::
new
(
rcx
.fcx
.infcx
()
);
let
discr_cmt
=
ignore_err!
(
mc
.cat_expr
(
discr
));
debug!
(
"discr_cmt={:?}"
,
discr_cmt
);
for
arm
in
arms
{
...
...
@@ -1080,7 +1081,7 @@ fn link_match(rcx: &Rcx, discr: &ast::Expr, arms: &[ast::Arm]) {
/// linked to the lifetime of its guarantor (if any).
fn
link_fn_args
(
rcx
:
&
Rcx
,
body_scope
:
CodeExtent
,
args
:
&
[
ast
::
Arg
])
{
debug!
(
"regionck::link_fn_args(body_scope={:?})"
,
body_scope
);
let
mc
=
mc
::
MemCategorizationContext
::
new
(
rcx
.fcx
);
let
mc
=
mc
::
MemCategorizationContext
::
new
(
rcx
.fcx
.infcx
()
);
for
arg
in
args
{
let
arg_ty
=
rcx
.fcx
.node_ty
(
arg
.id
);
let
re_scope
=
ty
::
ReScope
(
body_scope
);
...
...
@@ -1095,7 +1096,7 @@ fn link_fn_args(rcx: &Rcx, body_scope: CodeExtent, args: &[ast::Arg]) {
/// Link lifetimes of any ref bindings in `root_pat` to the pointers found in the discriminant, if
/// needed.
fn
link_pattern
<
'a
,
'tcx
>
(
rcx
:
&
Rcx
<
'a
,
'tcx
>
,
mc
:
mc
::
MemCategorizationContext
<
Fn
Ctxt
<
'a
,
'tcx
>>
,
mc
:
mc
::
MemCategorizationContext
<
Infer
Ctxt
<
'a
,
'tcx
>>
,
discr_cmt
:
mc
::
cmt
<
'tcx
>
,
root_pat
:
&
ast
::
Pat
)
{
debug!
(
"link_pattern(discr_cmt={:?}, root_pat={:?})"
,
...
...
@@ -1134,7 +1135,7 @@ fn link_autoref(rcx: &Rcx,
autoref
:
&
ty
::
AutoRef
)
{
debug!
(
"link_autoref(autoref={:?})"
,
autoref
);
let
mc
=
mc
::
MemCategorizationContext
::
new
(
rcx
.fcx
);
let
mc
=
mc
::
MemCategorizationContext
::
new
(
rcx
.fcx
.infcx
()
);
let
expr_cmt
=
ignore_err!
(
mc
.cat_expr_autoderefd
(
expr
,
autoderefs
));
debug!
(
"expr_cmt={:?}"
,
expr_cmt
);
...
...
@@ -1158,7 +1159,7 @@ fn link_by_ref(rcx: &Rcx,
callee_scope
:
CodeExtent
)
{
debug!
(
"link_by_ref(expr={:?}, callee_scope={:?})"
,
expr
,
callee_scope
);
let
mc
=
mc
::
MemCategorizationContext
::
new
(
rcx
.fcx
);
let
mc
=
mc
::
MemCategorizationContext
::
new
(
rcx
.fcx
.infcx
()
);
let
expr_cmt
=
ignore_err!
(
mc
.cat_expr
(
expr
));
let
borrow_region
=
ty
::
ReScope
(
callee_scope
);
link_region
(
rcx
,
expr
.span
,
&
borrow_region
,
ty
::
ImmBorrow
,
expr_cmt
);
...
...
@@ -1402,7 +1403,7 @@ pub fn type_must_outlive<'a, 'tcx>(rcx: &mut Rcx<'a, 'tcx>,
ty
,
region
);
let
implications
=
implicator
::
implications
(
rcx
.fcx
.infcx
(),
rcx
.fcx
,
rcx
.body_id
,
let
implications
=
implicator
::
implications
(
rcx
.fcx
.infcx
(),
rcx
.fcx
.infcx
()
,
rcx
.body_id
,
ty
,
region
,
origin
.span
());
for
implication
in
implications
{
debug!
(
"implication: {:?}"
,
implication
);
...
...
@@ -1443,7 +1444,7 @@ fn closure_must_outlive<'a, 'tcx>(rcx: &mut Rcx<'a, 'tcx>,
debug!
(
"closure_must_outlive(region={:?}, def_id={:?}, substs={:?})"
,
region
,
def_id
,
substs
);
let
upvars
=
rcx
.fcx
.closure_upvars
(
def_id
,
substs
)
.unwrap
();
let
upvars
=
rcx
.fcx
.
infcx
()
.
closure_upvars
(
def_id
,
substs
)
.unwrap
();
for
upvar
in
upvars
{
let
var_id
=
upvar
.def
.def_id
()
.local_id
();
type_must_outlive
(
...
...
src/librustc_typeck/check/upvar.rs
浏览文件 @
e5b36848
...
...
@@ -186,7 +186,7 @@ fn analyze_closure(&mut self, id: ast::NodeId, decl: &ast::FnDecl, body: &ast::B
debug!
(
"analyzing closure `{}` with fn body id `{}`"
,
id
,
body
.id
);
let
mut
euv
=
euv
::
ExprUseVisitor
::
new
(
self
,
self
.fcx
);
let
mut
euv
=
euv
::
ExprUseVisitor
::
new
(
self
,
self
.fcx
.infcx
()
);
euv
.walk_fn
(
decl
,
body
);
// If we had not yet settled on a closure kind for this closure,
...
...
src/librustc_typeck/check/wf.rs
浏览文件 @
e5b36848
...
...
@@ -259,7 +259,7 @@ fn check_impl(&mut self,
let
predicates
=
fcx
.tcx
()
.lookup_super_predicates
(
poly_trait_ref
.def_id
());
let
predicates
=
predicates
.instantiate_supertrait
(
fcx
.tcx
(),
&
poly_trait_ref
);
let
predicates
=
{
let
selcx
=
&
mut
traits
::
SelectionContext
::
new
(
fcx
.infcx
(),
fcx
);
let
selcx
=
&
mut
traits
::
SelectionContext
::
new
(
fcx
.infcx
(),
fcx
.infcx
()
);
traits
::
normalize
(
selcx
,
cause
.clone
(),
&
predicates
)
};
for
predicate
in
predicates
.value.predicates
{
...
...
编辑
预览
Markdown
is supported
0%
请重试
或
添加新附件
.
添加附件
取消
You are about to add
0
people
to the discussion. Proceed with caution.
先完成此消息的编辑!
取消
想要评论请
注册
或
登录