Skip to content

Commit e84f92d

Browse files
committed
Use with_mut/with for Ptr::write/Ptr::read
1 parent ac52c1f commit e84f92d

1 file changed

Lines changed: 3 additions & 41 deletions

File tree

libcc2rs/src/rc.rs

Lines changed: 3 additions & 41 deletions
Original file line numberDiff line numberDiff line change
@@ -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

508490
impl<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

Comments
 (0)