@@ -28,6 +28,7 @@ use crate::glue::{CreateRootedIdVector, CreateRootedObjectVector};
28
28
use crate :: glue:: {
29
29
DeleteCompileOptions , DeleteRootedObjectVector , DescribeScriptedCaller , DestroyRootedIdVector ,
30
30
} ;
31
+ use crate :: glue:: { DeleteJSAutoStructuredCloneBuffer , NewJSAutoStructuredCloneBuffer } ;
31
32
use crate :: glue:: {
32
33
GetIdVectorAddress , GetObjectVectorAddress , NewCompileOptions , SliceRootedIdVector ,
33
34
} ;
@@ -47,6 +48,7 @@ use crate::jsapi::{InitSelfHostedCode, IsWindowSlow};
47
48
use crate :: jsapi:: {
48
49
JSAutoRealm , JS_SetGCParameter , JS_SetNativeStackQuota , JS_WrapObject , JS_WrapValue ,
49
50
} ;
51
+ use crate :: jsapi:: { JSAutoStructuredCloneBuffer , JSStructuredCloneCallbacks , StructuredCloneScope } ;
50
52
use crate :: jsapi:: { JSClass , JSClassOps , JSContext , Realm , JSCLASS_RESERVED_SLOTS_SHIFT } ;
51
53
use crate :: jsapi:: { JSErrorReport , JSFunctionSpec , JSGCParamKey } ;
52
54
use crate :: jsapi:: { JSObject , JSPropertySpec , JSRuntime } ;
@@ -532,6 +534,34 @@ impl Drop for CompileOptionsWrapper {
532
534
}
533
535
}
534
536
537
+ pub struct JSAutoStructuredCloneBufferWrapper {
538
+ ptr : NonNull < JSAutoStructuredCloneBuffer > ,
539
+ }
540
+
541
+ impl JSAutoStructuredCloneBufferWrapper {
542
+ pub unsafe fn new (
543
+ scope : StructuredCloneScope ,
544
+ callbacks : * const JSStructuredCloneCallbacks ,
545
+ ) -> Self {
546
+ let raw_ptr = NewJSAutoStructuredCloneBuffer ( scope, callbacks) ;
547
+ Self {
548
+ ptr : NonNull :: new ( raw_ptr) . unwrap ( ) ,
549
+ }
550
+ }
551
+
552
+ pub fn as_raw_ptr ( & self ) -> * mut JSAutoStructuredCloneBuffer {
553
+ self . ptr . as_ptr ( )
554
+ }
555
+ }
556
+
557
+ impl Drop for JSAutoStructuredCloneBufferWrapper {
558
+ fn drop ( & mut self ) {
559
+ unsafe {
560
+ DeleteJSAutoStructuredCloneBuffer ( self . ptr . as_ptr ( ) ) ;
561
+ }
562
+ }
563
+ }
564
+
535
565
pub struct Stencil {
536
566
inner : already_AddRefed < CompilationStencil > ,
537
567
}
0 commit comments