@@ -3,7 +3,9 @@ use crate::glue::{
3
3
CallBigIntTracer , CallFunctionTracer , CallIdTracer , CallObjectTracer , CallScriptTracer ,
4
4
CallStringTracer , CallSymbolTracer , CallValueTracer ,
5
5
} ;
6
- use crate :: jsapi:: { jsid, JSFunction , JSObject , JSScript , JSString , JSTracer , Value } ;
6
+ use crate :: jsapi:: {
7
+ jsid, JSFunction , JSObject , JSScript , JSString , JSTracer , PropertyDescriptor , Value ,
8
+ } ;
7
9
use mozjs_sys:: jsapi:: js:: TraceValueArray ;
8
10
use mozjs_sys:: jsapi:: JS :: { BigInt , JobQueue , Symbol } ;
9
11
use mozjs_sys:: jsgc:: { Heap , ValueArray } ;
@@ -115,6 +117,32 @@ unsafe impl Traceable for Heap<jsid> {
115
117
}
116
118
}
117
119
120
+ unsafe impl Traceable for Heap < PropertyDescriptor > {
121
+ #[ inline]
122
+ unsafe fn trace ( & self , trc : * mut JSTracer ) {
123
+ let desc = & * self . get_unsafe ( ) ;
124
+ CallValueTracer (
125
+ trc,
126
+ & desc. value_ as * const _ as * mut Heap < Value > ,
127
+ c_str ! ( "PropertyDescriptor::value" ) ,
128
+ ) ;
129
+ if !desc. getter_ . is_null ( ) {
130
+ CallObjectTracer (
131
+ trc,
132
+ & desc. getter_ as * const _ as * mut Heap < * mut JSObject > ,
133
+ c_str ! ( "PropertyDescriptor::getter" ) ,
134
+ ) ;
135
+ }
136
+ if !desc. setter_ . is_null ( ) {
137
+ CallObjectTracer (
138
+ trc,
139
+ & desc. setter_ as * const _ as * mut Heap < * mut JSObject > ,
140
+ c_str ! ( "PropertyDescriptor::setter" ) ,
141
+ ) ;
142
+ }
143
+ }
144
+ }
145
+
118
146
unsafe impl < T : Traceable > Traceable for Rc < T > {
119
147
#[ inline]
120
148
unsafe fn trace ( & self , trc : * mut JSTracer ) {
0 commit comments