@@ -19,7 +19,7 @@ use rustc::mir::interpret::{
1919use rustc:: mir:: CastKind ;
2020use rustc_apfloat:: Float ;
2121
22- use super :: { EvalContext , Machine , PlaceTy , OpTy , Value } ;
22+ use super :: { EvalContext , Machine , PlaceTy , OpTy , Immediate } ;
2323
2424impl < ' a , ' mir , ' tcx , M : Machine < ' a , ' mir , ' tcx > > EvalContext < ' a , ' mir , ' tcx , M > {
2525 fn type_is_fat_ptr ( & self , ty : Ty < ' tcx > ) -> bool {
@@ -45,7 +45,7 @@ impl<'a, 'mir, 'tcx, M: Machine<'a, 'mir, 'tcx>> EvalContext<'a, 'mir, 'tcx, M>
4545
4646 Misc => {
4747 let src_layout = src. layout ;
48- let src = self . read_value ( src) ?;
48+ let src = self . read_immediate ( src) ?;
4949
5050 let src = if M :: ENABLE_PTR_TRACKING_HOOKS && src_layout. ty . is_region_ptr ( ) {
5151 // The only `Misc` casts on references are those creating raw pointers.
@@ -61,14 +61,14 @@ impl<'a, 'mir, 'tcx, M: Machine<'a, 'mir, 'tcx>> EvalContext<'a, 'mir, 'tcx, M>
6161 if self . type_is_fat_ptr ( src_layout. ty ) {
6262 match ( src, self . type_is_fat_ptr ( dest. layout . ty ) ) {
6363 // pointers to extern types
64- ( Value :: Scalar ( _) , _) |
64+ ( Immediate :: Scalar ( _) , _) |
6565 // slices and trait objects to other slices/trait objects
66- ( Value :: ScalarPair ( ..) , true ) => {
67- // No change to value
68- self . write_value ( src, dest) ?;
66+ ( Immediate :: ScalarPair ( ..) , true ) => {
67+ // No change to immediate
68+ self . write_immediate ( src, dest) ?;
6969 }
7070 // slices and trait objects to thin pointers (dropping the metadata)
71- ( Value :: ScalarPair ( data, _) , false ) => {
71+ ( Immediate :: ScalarPair ( data, _) , false ) => {
7272 self . write_scalar ( data, dest) ?;
7373 }
7474 }
@@ -118,11 +118,11 @@ impl<'a, 'mir, 'tcx, M: Machine<'a, 'mir, 'tcx>> EvalContext<'a, 'mir, 'tcx, M>
118118 }
119119
120120 UnsafeFnPointer => {
121- let src = self . read_value ( src) ?;
121+ let src = self . read_immediate ( src) ?;
122122 match dest. layout . ty . sty {
123123 ty:: FnPtr ( _) => {
124124 // No change to value
125- self . write_value ( * src, dest) ?;
125+ self . write_immediate ( * src, dest) ?;
126126 }
127127 ref other => bug ! ( "fn to unsafe fn cast on {:?}" , other) ,
128128 }
@@ -144,8 +144,8 @@ impl<'a, 'mir, 'tcx, M: Machine<'a, 'mir, 'tcx>> EvalContext<'a, 'mir, 'tcx, M>
144144 ty:: ClosureKind :: FnOnce ,
145145 ) ;
146146 let fn_ptr = self . memory . create_fn_alloc ( instance) . with_default_tag ( ) ;
147- let val = Value :: Scalar ( Scalar :: Ptr ( fn_ptr. into ( ) ) . into ( ) ) ;
148- self . write_value ( val, dest) ?;
147+ let val = Immediate :: Scalar ( Scalar :: Ptr ( fn_ptr. into ( ) ) . into ( ) ) ;
148+ self . write_immediate ( val, dest) ?;
149149 }
150150 ref other => bug ! ( "closure fn pointer on {:?}" , other) ,
151151 }
@@ -326,24 +326,28 @@ impl<'a, 'mir, 'tcx, M: Machine<'a, 'mir, 'tcx>> EvalContext<'a, 'mir, 'tcx, M>
326326
327327 match ( & src_pointee_ty. sty , & dest_pointee_ty. sty ) {
328328 ( & ty:: Array ( _, length) , & ty:: Slice ( _) ) => {
329- let ptr = self . read_value ( src) ?. to_scalar_ptr ( ) ?;
329+ let ptr = self . read_immediate ( src) ?. to_scalar_ptr ( ) ?;
330330 // u64 cast is from usize to u64, which is always good
331- let val = Value :: new_slice ( ptr, length. unwrap_usize ( self . tcx . tcx ) , self . tcx . tcx ) ;
332- self . write_value ( val, dest)
331+ let val = Immediate :: new_slice (
332+ ptr,
333+ length. unwrap_usize ( self . tcx . tcx ) ,
334+ self . tcx . tcx ,
335+ ) ;
336+ self . write_immediate ( val, dest)
333337 }
334338 ( & ty:: Dynamic ( ..) , & ty:: Dynamic ( ..) ) => {
335339 // For now, upcasts are limited to changes in marker
336340 // traits, and hence never actually require an actual
337341 // change to the vtable.
338- let val = self . read_value ( src) ?;
339- self . write_value ( * val, dest)
342+ let val = self . read_immediate ( src) ?;
343+ self . write_immediate ( * val, dest)
340344 }
341345 ( _, & ty:: Dynamic ( ref data, _) ) => {
342346 // Initial cast from sized to dyn trait
343347 let vtable = self . get_vtable ( src_pointee_ty, data. principal ( ) ) ?;
344- let ptr = self . read_value ( src) ?. to_scalar_ptr ( ) ?;
345- let val = Value :: new_dyn_trait ( ptr, vtable) ;
346- self . write_value ( val, dest)
348+ let ptr = self . read_immediate ( src) ?. to_scalar_ptr ( ) ?;
349+ let val = Immediate :: new_dyn_trait ( ptr, vtable) ;
350+ self . write_immediate ( val, dest)
347351 }
348352
349353 _ => bug ! ( "invalid unsizing {:?} -> {:?}" , src. layout. ty, dest. layout. ty) ,
0 commit comments