Skip to content

Commit ecb75bb

Browse files
committed
Fix trait_object_trace! macro
1 parent 1594170 commit ecb75bb

File tree

6 files changed

+19
-14
lines changed

6 files changed

+19
-14
lines changed

libs/simple/examples/binary_trees_parallel.rs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -9,7 +9,7 @@ use rayon::prelude::*;
99
use slog::{Logger, Drain, o};
1010

1111
#[derive(Trace)]
12-
#[zerogc(collector_id(SimpleCollectorId))]
12+
#[zerogc(collector_ids(SimpleCollectorId))]
1313
struct Tree<'gc> {
1414
#[zerogc(mutable(public))]
1515
children: GcCell<Option<(Gc<'gc, Tree<'gc>>, Gc<'gc, Tree<'gc>>)>>,

libs/simple/tests/arrays.rs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -15,7 +15,7 @@ fn test_collector() -> SimpleCollector {
1515
}
1616

1717
#[derive(Trace, Copy, Clone, Debug)]
18-
#[zerogc(copy, collector_id(SimpleCollectorId))]
18+
#[zerogc(copy, collector_ids(SimpleCollectorId))]
1919
struct Dummy<'gc> {
2020
val: usize,
2121
inner: Option<Gc<'gc, Dummy<'gc>>>

libs/simple/tests/trait_objects.rs

Lines changed: 8 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -15,11 +15,16 @@ fn test_collector() -> SimpleCollector {
1515
)
1616
}
1717

18-
trait Foo<'gc>: 'gc + DynTrace {
18+
trait Foo<'gc>: DynTrace<'gc, SimpleCollectorId> {
1919
fn method(&self) -> i32;
2020
fn validate(&self);
2121
}
22-
trait_object_trace!(impl<'gc,> Trace for dyn Foo<'gc>; Branded<'new_gc> => dyn Foo<'new_gc>, Erased<'min> => dyn Foo<'min>);
22+
trait_object_trace!(
23+
impl<'gc,> Trace for dyn Foo<'gc>;
24+
Branded<'new_gc> => dyn Foo<'new_gc>,
25+
collector_id => SimpleCollectorId,
26+
gc_lifetime => 'gc
27+
);
2328

2429
fn foo<'gc, T: ?Sized + Trace + Foo<'gc>>(t: &T) -> i32 {
2530
assert_eq!(t.method(), 12);
@@ -29,7 +34,7 @@ fn bar<'gc>(gc: Gc<'gc, dyn Foo + 'gc>) -> i32 {
2934
foo(gc.value())
3035
}
3136
#[derive(Trace)]
32-
#[zerogc(collector_id(SimpleCollectorId), unsafe_skip_drop)]
37+
#[zerogc(collector_ids(SimpleCollectorId), unsafe_skip_drop)]
3338
struct Bar<'gc> {
3439
inner: Option<Gc<'gc, Bar<'gc>>>,
3540
val: Gc<'gc, i32>

src/lib.rs

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -986,7 +986,7 @@ pub unsafe trait TrustedDrop: Trace {}
986986
/// #[derive(Trace)]
987987
/// struct MixedGc<'gc, 'js> {
988988
/// internal_ptr: Gc<'gc, i32, OtherGcId>,
989-
/// js_ptr: Gc<'gc, i32, JsGcId>
989+
/// js_ptr: Gc<'js, i32, JsGcId>
990990
/// }
991991
/// impl<'gc, 'js> MixedGc<'gc, 'js> {
992992
/// fn verify(&self) {
@@ -1233,7 +1233,7 @@ pub unsafe trait TraceImmutable: Trace {
12331233
/// The garbage collector will be able to use its runtime type information
12341234
/// to find the appropriate implementation at runtime,
12351235
/// even though its not known at compile tme.
1236-
pub unsafe trait DynTrace<'gc, Id: CollectorId> {}
1236+
pub unsafe trait DynTrace<'gc, Id: CollectorId>: 'gc {}
12371237
unsafe impl<'gc, Id: CollectorId, T: ?Sized + Trace + GcSafe<'gc, Id>> DynTrace<'gc, Id> for T {}
12381238

12391239
impl<'gc, T, U, Id> CoerceUnsized<Gc<'gc, U, Id>> for Gc<'gc, T, Id>

src/macros.rs

Lines changed: 6 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -13,7 +13,7 @@
1313
/// }
1414
/// trait_object_trace!(
1515
/// impl<'gc,> Trace for dyn Foo<'gc>;
16-
/// Branded<'new_gc> => dyn Foo<'new_gc> + 'new_gc,
16+
/// Branded<'new_gc> => (dyn Foo<'new_gc> + 'new_gc),
1717
/// collector_id => OurSpecificId,
1818
/// gc_lifetime => 'gc
1919
/// );
@@ -25,7 +25,7 @@
2525
/// foo(gc.value())
2626
/// }
2727
/// #[derive(Trace)]
28-
/// # #[zerogc(collector_ids(DummyCollectorId))]
28+
/// # #[zerogc(collector_ids(EpsilonCollectorId))]
2929
/// struct Bar<'gc> {
3030
/// val: Gc<'gc, i32>
3131
/// }
@@ -47,9 +47,9 @@ macro_rules! trait_object_trace {
4747
Branded<$branded_lt:lifetime> => $branded:ty,
4848
collector_id => $collector_id:path,
4949
gc_lifetime => $gc_lt:lifetime) => {
50-
unsafe impl$(<$($lt,)* $($param:ident),*>)? $crate::TrustedDrop for dyn $target where Self: $crate::DynTrace<$gc_lt, $collector_id>, $($($where_clause)*)? {}
51-
unsafe impl$(<$($lt,)* $($param:ident),*>)? $crate::GcSafe<$gc_lt, $collector_id> for dyn $target where Self: $crate::DynTrace<$gc_lt, $collector_id>, $($($where_clause)*)? {}
52-
unsafe impl$(<$($lt,)* $($param:ident),*>)? $crate::Trace for dyn $target where Self: $crate::DynTrace::<$gc_lt, $collector_id>, $($($where_clause)*)? {
50+
unsafe impl$(<$($lt,)* $($param:ident),*>)? $crate::TrustedDrop for (dyn $target + $gc_lt) where Self: $crate::DynTrace<$gc_lt, $collector_id>, $($($where_clause)*)? {}
51+
unsafe impl$(<$($lt,)* $($param:ident),*>)? $crate::GcSafe<$gc_lt, $collector_id> for (dyn $target + $gc_lt) where Self: $crate::DynTrace<$gc_lt, $collector_id>, $($($where_clause)*)? {}
52+
unsafe impl$(<$($lt,)* $($param:ident),*>)? $crate::Trace for (dyn $target + $gc_lt) where Self: $crate::DynTrace::<$gc_lt, $collector_id>, $($($where_clause)*)? {
5353
/*
5454
* Insufficient compile-time information to know whether we need to be traced.
5555
*
@@ -69,7 +69,7 @@ macro_rules! trait_object_trace {
6969
visitor.visit_trait_object(gc)
7070
}
7171
}
72-
unsafe impl<$branded_lt, $($($lt,)* $($param:ident,)*)?> $crate::GcRebrand<$branded_lt, $collector_id> for dyn $target where Self: $crate::DynTrace<$gc_lt, $collector_id>, T::Branded: $crate::DynTrace<$branded_lt, $collectorId>, $($($where_clause)*)? {
72+
unsafe impl<$branded_lt, $($($lt,)* $($param:ident,)*)?> $crate::GcRebrand<$branded_lt, $collector_id> for dyn $target $(where $($where_clause)*)? {
7373
type Branded = $branded;
7474
}
7575
}

src/manually_traced/core.rs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -360,7 +360,7 @@ mod test {
360360

361361
}
362362
#[derive(Trace)]
363-
#[zerogc(collector_ids(DummyCollectorId))]
363+
#[zerogc(collector_ids(EpsilonCollectorId))]
364364
struct Rec<'gc> {
365365
inner: Gc<'gc, Rec<'gc>>,
366366
inner_tuple: (Gc<'gc, Rec<'gc>>, Gc<'gc, Option<i32>>),

0 commit comments

Comments
 (0)