@@ -368,26 +368,7 @@ impl<T> Ptr<T> {
368368 where
369369 T : ByteRepr ,
370370 {
371- match & self . kind {
372- PtrKind :: Null => panic ! ( "ub: null pointer" ) ,
373- PtrKind :: StackSingle ( weak) | PtrKind :: HeapSingle ( weak) => {
374- let rc = weak. upgrade ( ) . expect ( "ub: dangling pointer" ) ;
375- * rc. borrow_mut ( ) = value;
376- }
377- PtrKind :: Vec ( weak) => {
378- let rc = weak. upgrade ( ) . expect ( "ub: dangling pointer" ) ;
379- rc. borrow_mut ( ) [ self . offset ] = value;
380- }
381- PtrKind :: StackArray ( weak) | PtrKind :: HeapArray ( weak) => {
382- let rc = weak. upgrade ( ) . expect ( "ub: dangling pointer" ) ;
383- rc. borrow_mut ( ) [ self . offset ] = value;
384- }
385- PtrKind :: Reinterpreted ( data) => {
386- let mut buf = vec ! [ 0u8 ; T :: byte_size( ) ] ;
387- value. to_bytes ( & mut buf) ;
388- data. alloc . write_bytes ( self . offset , & buf) ;
389- }
390- }
371+ self . with_mut ( |v| * v = value) ;
391372 }
392373
393374 pub fn to_strong ( & self ) -> Value < T > {
@@ -481,6 +462,7 @@ impl<T> Ptr<T> {
481462 match & self . kind {
482463 PtrKind :: Null => panic ! ( "ub: null pointer" ) ,
483464 PtrKind :: StackSingle ( weak) | PtrKind :: HeapSingle ( weak) => {
465+ assert_eq ! ( self . offset, 0 , "ub: invalid offset" ) ;
484466 let rc = weak. upgrade ( ) . expect ( "ub: dangling pointer" ) ;
485467 let borrow = rc. borrow ( ) ;
486468 f ( & * borrow)
@@ -507,27 +489,7 @@ impl<T> Ptr<T> {
507489
508490impl < T : Clone + ByteRepr > Ptr < T > {
509491 pub fn read ( & self ) -> T {
510- match self . kind {
511- PtrKind :: Null => panic ! ( "ub: null pointer" ) ,
512- PtrKind :: StackSingle ( ref weak) | PtrKind :: HeapSingle ( ref weak) => {
513- assert_eq ! ( self . offset, 0 , "ub: invalid offset" ) ;
514- weak. upgrade ( )
515- . expect ( "ub: dangling pointer" )
516- . borrow ( )
517- . clone ( )
518- }
519- PtrKind :: Vec ( ref weak) => {
520- weak. upgrade ( ) . expect ( "ub: dangling pointer" ) . borrow ( ) [ self . offset ] . clone ( )
521- }
522- PtrKind :: StackArray ( ref weak) | PtrKind :: HeapArray ( ref weak) => {
523- weak. upgrade ( ) . expect ( "ub: dangling pointer" ) . borrow ( ) [ self . offset ] . clone ( )
524- }
525- PtrKind :: Reinterpreted ( ref data) => {
526- let mut buf = vec ! [ 0u8 ; T :: byte_size( ) ] ;
527- data. alloc . read_bytes ( self . offset , & mut buf) ;
528- T :: from_bytes ( & buf)
529- }
530- }
492+ self . with ( |v| v. clone ( ) )
531493 }
532494}
533495
0 commit comments