@@ -31,7 +31,7 @@ use core::nonzero::NonZero;
31
31
use error:: throw_type_error;
32
32
use glue:: RUST_JS_NumberValue ;
33
33
use jsapi:: { ForOfIterator , ForOfIterator_NonIterableBehavior , HandleValue } ;
34
- use jsapi:: { JS_DefineElement , JS_GetLatin1StringCharsAndLength } ;
34
+ use jsapi:: { Heap , JS_DefineElement , JS_GetLatin1StringCharsAndLength } ;
35
35
use jsapi:: { JS_GetTwoByteStringCharsAndLength , JS_NewArrayObject1 } ;
36
36
use jsapi:: { JS_NewUCStringCopyN , JSPROP_ENUMERATE , JS_StringHasLatin1Chars } ;
37
37
use jsapi:: { JSContext , JSObject , JSString , MutableHandleValue , RootedObject } ;
@@ -184,14 +184,6 @@ impl ToJSValConvertible for () {
184
184
}
185
185
}
186
186
187
- impl ToJSValConvertible for JSVal {
188
- #[ inline]
189
- unsafe fn to_jsval ( & self , cx : * mut JSContext , rval : MutableHandleValue ) {
190
- rval. set ( * self ) ;
191
- maybe_wrap_value ( cx, rval) ;
192
- }
193
- }
194
-
195
187
impl FromJSValConvertible for JSVal {
196
188
type Config = ( ) ;
197
189
unsafe fn from_jsval ( _cx : * mut JSContext ,
@@ -202,6 +194,24 @@ impl FromJSValConvertible for JSVal {
202
194
}
203
195
}
204
196
197
+ impl FromJSValConvertible for Heap < JSVal > {
198
+ type Config = ( ) ;
199
+ unsafe fn from_jsval ( _cx : * mut JSContext ,
200
+ value : HandleValue ,
201
+ _option : ( ) )
202
+ -> Result < ConversionResult < Self > , ( ) > {
203
+ Ok ( ConversionResult :: Success ( Heap :: new ( value. get ( ) ) ) )
204
+ }
205
+ }
206
+
207
+ impl ToJSValConvertible for JSVal {
208
+ #[ inline]
209
+ unsafe fn to_jsval ( & self , cx : * mut JSContext , rval : MutableHandleValue ) {
210
+ rval. set ( * self ) ;
211
+ maybe_wrap_value ( cx, rval) ;
212
+ }
213
+ }
214
+
205
215
impl ToJSValConvertible for HandleValue {
206
216
#[ inline]
207
217
unsafe fn to_jsval ( & self , cx : * mut JSContext , rval : MutableHandleValue ) {
@@ -210,6 +220,14 @@ impl ToJSValConvertible for HandleValue {
210
220
}
211
221
}
212
222
223
+ impl ToJSValConvertible for Heap < JSVal > {
224
+ #[ inline]
225
+ unsafe fn to_jsval ( & self , cx : * mut JSContext , rval : MutableHandleValue ) {
226
+ rval. set ( self . get ( ) ) ;
227
+ maybe_wrap_value ( cx, rval) ;
228
+ }
229
+ }
230
+
213
231
#[ inline]
214
232
unsafe fn convert_int_from_jsval < T , M > ( cx : * mut JSContext , value : HandleValue ,
215
233
option : ConversionBehavior ,
@@ -630,3 +648,12 @@ impl ToJSValConvertible for NonZero<*mut JSObject> {
630
648
maybe_wrap_object_value ( cx, rval) ;
631
649
}
632
650
}
651
+
652
+ // https://heycam.github.io/webidl/#es-object
653
+ impl ToJSValConvertible for Heap < * mut JSObject > {
654
+ #[ inline]
655
+ unsafe fn to_jsval ( & self , cx : * mut JSContext , rval : MutableHandleValue ) {
656
+ rval. set ( ObjectOrNullValue ( self . get ( ) ) ) ;
657
+ maybe_wrap_object_or_null_value ( cx, rval) ;
658
+ }
659
+ }
0 commit comments