@@ -36,7 +36,6 @@ use util::nodemap::NodeMap;
36
36
use util:: ppaux:: Repr ;
37
37
38
38
use syntax:: ast;
39
- use syntax:: ast_util:: PostExpansionMethod ;
40
39
use syntax:: codemap:: Span ;
41
40
use syntax:: visit:: { self , Visitor } ;
42
41
@@ -149,16 +148,16 @@ impl<'a, 'tcx> CheckCrateVisitor<'a, 'tcx> {
149
148
Entry :: Occupied ( entry) => return * entry. get ( ) ,
150
149
Entry :: Vacant ( entry) => {
151
150
// Prevent infinite recursion on re-entry.
152
- entry. insert ( PURE_CONST ) ;
151
+ entry. insert ( ConstQualif :: empty ( ) ) ;
153
152
}
154
153
}
155
154
156
155
let mode = match fk {
157
- visit:: FkItemFn ( _, _, _, ast:: Constness :: Const , _) => {
156
+ visit:: FkItemFn ( _, _, _, ast:: Constness :: Const , _, _ ) => {
158
157
Mode :: ConstFn
159
158
}
160
- visit:: FkMethod ( _, _ , m ) => {
161
- if m. pe_constness ( ) == ast:: Constness :: Const {
159
+ visit:: FkMethod ( _, m , _ ) => {
160
+ if m. constness == ast:: Constness :: Const {
162
161
Mode :: ConstFn
163
162
} else {
164
163
Mode :: Var
@@ -189,7 +188,7 @@ impl<'a, 'tcx> CheckCrateVisitor<'a, 'tcx> {
189
188
190
189
// Keep only bits that aren't affected by function body (NON_ZERO_SIZED),
191
190
// and bits that don't change semantics, just optimizations (PREFER_IN_PLACE).
192
- let qualif = qualif & ( NON_ZERO_SIZED | PREFER_IN_PLACE ) ;
191
+ let qualif = qualif & ( ConstQualif :: NON_ZERO_SIZED | ConstQualif :: PREFER_IN_PLACE ) ;
193
192
194
193
self . tcx . const_qualif_map . borrow_mut ( ) . insert ( fn_id, qualif) ;
195
194
qualif
@@ -210,7 +209,7 @@ impl<'a, 'tcx> CheckCrateVisitor<'a, 'tcx> {
210
209
self . add_qualif ( qualif) ;
211
210
212
211
if ty:: type_contents ( self . tcx , ret_ty) . interior_unsafe ( ) {
213
- self . add_qualif ( MUTABLE_MEM ) ;
212
+ self . add_qualif ( ConstQualif :: MUTABLE_MEM ) ;
214
213
}
215
214
216
215
true
@@ -366,7 +365,7 @@ impl<'a, 'tcx, 'v> Visitor<'v> for CheckCrateVisitor<'a, 'tcx> {
366
365
macro in const?!")
367
366
}
368
367
} ;
369
- self . add_qualif ( NOT_CONST ) ;
368
+ self . add_qualif ( ConstQualif :: NOT_CONST ) ;
370
369
if self . mode != Mode :: Var {
371
370
span_err ! ( self . tcx. sess, span, E0016 ,
372
371
"blocks in {}s are limited to items and \
@@ -602,7 +601,7 @@ fn check_expr<'a, 'tcx>(v: &mut CheckCrateVisitor<'a, 'tcx>,
602
601
}
603
602
Some ( def:: DefLocal ( _) ) if v. mode == Mode :: ConstFn => {
604
603
// Sadly, we can't determine whether the types are zero-sized.
605
- v. add_qualif ( NOT_CONST | NON_ZERO_SIZED ) ;
604
+ v. add_qualif ( ConstQualif :: NOT_CONST | ConstQualif :: NON_ZERO_SIZED ) ;
606
605
}
607
606
def => {
608
607
v. add_qualif ( ConstQualif :: NOT_CONST ) ;
@@ -651,20 +650,8 @@ fn check_expr<'a, 'tcx>(v: &mut CheckCrateVisitor<'a, 'tcx>,
651
650
}
652
651
}
653
652
}
654
- ast:: ExprBlock ( ref block) => {
655
- // Check all statements in the block
656
- let mut block_span_err = |span| {
657
- v. add_qualif ( ConstQualif :: NOT_CONST ) ;
658
- if v. mode != Mode :: Var {
659
- span_err ! ( v. tcx. sess, e. span, E0015 ,
660
- "function calls in {}s are limited to \
661
- constant functions, \
662
- struct and enum constructors", v. msg( ) ) ;
663
- }
664
- }
665
- }
666
653
ast:: ExprMethodCall ( ..) => {
667
- let method_did = match v. tcx . method_map . borrow ( ) [ method_call] . origin {
654
+ let method_did = match v. tcx . method_map . borrow ( ) [ & method_call] . origin {
668
655
ty:: MethodStatic ( did) => Some ( did) ,
669
656
_ => None
670
657
} ;
@@ -673,9 +660,9 @@ fn check_expr<'a, 'tcx>(v: &mut CheckCrateVisitor<'a, 'tcx>,
673
660
None => false
674
661
} ;
675
662
if !is_const {
676
- v. add_qualif ( NOT_CONST ) ;
663
+ v. add_qualif ( ConstQualif :: NOT_CONST ) ;
677
664
if v. mode != Mode :: Var {
678
- span_err ! ( v. tcx. sess, e. span, E0021 ,
665
+ span_err ! ( v. tcx. sess, e. span, E0378 ,
679
666
"method calls in {}s are limited to \
680
667
constant inherent methods", v. msg( ) ) ;
681
668
}
0 commit comments