Skip to content

Commit 8f45c23

Browse files
committed
Implement Condemned for Option
1 parent 6d533c9 commit 8f45c23

File tree

2 files changed

+17
-6
lines changed

2 files changed

+17
-6
lines changed

src/mark.rs

Lines changed: 17 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -44,3 +44,20 @@ unsafe impl<T> Condemned for T {
4444
true
4545
};
4646
}
47+
48+
unsafe impl<T> Condemned for Option<T> {
49+
default fn feilds(s: &Self, grey_feilds: u8, region: Range<usize>) -> u8 {
50+
match s {
51+
Some(t) => Condemned::feilds(t, grey_feilds, region),
52+
None => 0b0000_0000,
53+
}
54+
}
55+
56+
default fn evacuate(_: &Self, _: u8, _: Range<usize>, _: *const fn(*const u8, GcTypeInfo)) {}
57+
58+
default const PRE_CONDTION: bool = if T::PRE_CONDTION {
59+
true
60+
} else {
61+
panic!("You need to derive Condemned for T. Required due to a direct Gc<A> in Option<T>");
62+
};
63+
}

tests/tests.rs

Lines changed: 0 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -151,12 +151,6 @@ unsafe impl<'r, T: NoGc + 'r> Condemned for List<'r, T> {
151151
};
152152
}
153153

154-
#[test]
155-
fn option_test() {
156-
assert!(Option::<usize>::PRE_CONDTION);
157-
// assert!(Option::<Gc<usize>>::PRE_CONDTION);
158-
}
159-
160154
#[test]
161155
fn churn_list() {
162156
let usizes: ArenaPrim<usize> = ArenaPrim::new();

0 commit comments

Comments
 (0)