@@ -19,7 +19,7 @@ use rustc::mir::interpret::{
19
19
use rustc:: mir:: CastKind ;
20
20
use rustc_apfloat:: Float ;
21
21
22
- use super :: { EvalContext , Machine , PlaceTy , OpTy , Value } ;
22
+ use super :: { EvalContext , Machine , PlaceTy , OpTy , Immediate } ;
23
23
24
24
impl < ' a , ' mir , ' tcx , M : Machine < ' a , ' mir , ' tcx > > EvalContext < ' a , ' mir , ' tcx , M > {
25
25
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>
45
45
46
46
Misc => {
47
47
let src_layout = src. layout ;
48
- let src = self . read_value ( src) ?;
48
+ let src = self . read_immediate ( src) ?;
49
49
50
50
let src = if M :: ENABLE_PTR_TRACKING_HOOKS && src_layout. ty . is_region_ptr ( ) {
51
51
// 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>
61
61
if self . type_is_fat_ptr ( src_layout. ty ) {
62
62
match ( src, self . type_is_fat_ptr ( dest. layout . ty ) ) {
63
63
// pointers to extern types
64
- ( Value :: Scalar ( _) , _) |
64
+ ( Immediate :: Scalar ( _) , _) |
65
65
// 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) ?;
69
69
}
70
70
// slices and trait objects to thin pointers (dropping the metadata)
71
- ( Value :: ScalarPair ( data, _) , false ) => {
71
+ ( Immediate :: ScalarPair ( data, _) , false ) => {
72
72
self . write_scalar ( data, dest) ?;
73
73
}
74
74
}
@@ -118,11 +118,11 @@ impl<'a, 'mir, 'tcx, M: Machine<'a, 'mir, 'tcx>> EvalContext<'a, 'mir, 'tcx, M>
118
118
}
119
119
120
120
UnsafeFnPointer => {
121
- let src = self . read_value ( src) ?;
121
+ let src = self . read_immediate ( src) ?;
122
122
match dest. layout . ty . sty {
123
123
ty:: FnPtr ( _) => {
124
124
// No change to value
125
- self . write_value ( * src, dest) ?;
125
+ self . write_immediate ( * src, dest) ?;
126
126
}
127
127
ref other => bug ! ( "fn to unsafe fn cast on {:?}" , other) ,
128
128
}
@@ -144,8 +144,8 @@ impl<'a, 'mir, 'tcx, M: Machine<'a, 'mir, 'tcx>> EvalContext<'a, 'mir, 'tcx, M>
144
144
ty:: ClosureKind :: FnOnce ,
145
145
) ;
146
146
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) ?;
149
149
}
150
150
ref other => bug ! ( "closure fn pointer on {:?}" , other) ,
151
151
}
@@ -326,24 +326,28 @@ impl<'a, 'mir, 'tcx, M: Machine<'a, 'mir, 'tcx>> EvalContext<'a, 'mir, 'tcx, M>
326
326
327
327
match ( & src_pointee_ty. sty , & dest_pointee_ty. sty ) {
328
328
( & 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 ( ) ?;
330
330
// 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)
333
337
}
334
338
( & ty:: Dynamic ( ..) , & ty:: Dynamic ( ..) ) => {
335
339
// For now, upcasts are limited to changes in marker
336
340
// traits, and hence never actually require an actual
337
341
// 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)
340
344
}
341
345
( _, & ty:: Dynamic ( ref data, _) ) => {
342
346
// Initial cast from sized to dyn trait
343
347
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)
347
351
}
348
352
349
353
_ => bug ! ( "invalid unsizing {:?} -> {:?}" , src. layout. ty, dest. layout. ty) ,
0 commit comments