@@ -41,8 +41,13 @@ use crate::jsapi::HandleObjectVector as RawHandleObjectVector;
4141use crate :: jsapi:: HandleValue as RawHandleValue ;
4242use crate :: jsapi:: JS_AddExtraGCRootsTracer ;
4343use crate :: jsapi:: MutableHandleIdVector as RawMutableHandleIdVector ;
44+ use crate :: jsapi:: OwningCompileOptions_for_fc ;
4445use crate :: jsapi:: { already_AddRefed, jsid} ;
4546use crate :: jsapi:: { BuildStackString , CaptureCurrentStack , StackFormat } ;
47+ use crate :: jsapi:: {
48+ DeleteOwningCompileOptions , OwningCompileOptions , PersistentRootedObjectVector ,
49+ ReadOnlyCompileOptions , RootingContext ,
50+ } ;
4651use crate :: jsapi:: { Evaluate2 , HandleValueArray , StencilRelease } ;
4752use crate :: jsapi:: { InitSelfHostedCode , IsWindowSlow } ;
4853use crate :: jsapi:: {
@@ -56,11 +61,11 @@ use crate::jsapi::{JS_DefineFunctions, JS_DefineProperties, JS_DestroyContext, J
5661use crate :: jsapi:: { JS_EnumerateStandardClasses , JS_GetRuntime , JS_GlobalObjectTraceHook } ;
5762use crate :: jsapi:: { JS_MayResolveStandardClass , JS_NewContext , JS_ResolveStandardClass } ;
5863use crate :: jsapi:: { JS_StackCapture_AllFrames , JS_StackCapture_MaxFrames } ;
59- use crate :: jsapi:: { PersistentRootedObjectVector , ReadOnlyCompileOptions , RootingContext } ;
6064use crate :: jsapi:: { SetWarningReporter , SourceText , ToBooleanSlow } ;
6165use crate :: jsapi:: { ToInt32Slow , ToInt64Slow , ToNumberSlow , ToStringSlow , ToUint16Slow } ;
6266use crate :: jsapi:: { ToUint32Slow , ToUint64Slow , ToWindowProxyIfWindowSlow } ;
6367use crate :: jsval:: ObjectValue ;
68+ use crate :: offthread:: FrontendContext ;
6469use crate :: panic:: maybe_resume_unwind;
6570use lazy_static:: lazy_static;
6671use log:: { debug, warn} ;
@@ -470,6 +475,30 @@ impl Drop for RootedObjectVectorWrapper {
470475 }
471476}
472477
478+ pub struct OwningCompileOptionsWrapper {
479+ pub ptr : * mut OwningCompileOptions ,
480+ }
481+
482+ impl OwningCompileOptionsWrapper {
483+ pub fn new_for_fc ( fc : & FrontendContext , options : * const ReadOnlyCompileOptions ) -> Self {
484+ Self {
485+ ptr : unsafe { OwningCompileOptions_for_fc ( * * fc, options) } ,
486+ }
487+ }
488+
489+ pub fn read_only ( & self ) -> & ReadOnlyCompileOptions {
490+ unsafe { & ( * self . ptr ) . _base }
491+ }
492+ }
493+
494+ unsafe impl Send for OwningCompileOptionsWrapper { }
495+
496+ impl Drop for OwningCompileOptionsWrapper {
497+ fn drop ( & mut self ) {
498+ unsafe { DeleteOwningCompileOptions ( self . ptr ) }
499+ }
500+ }
501+
473502pub struct CompileOptionsWrapper {
474503 pub ptr : * mut ReadOnlyCompileOptions ,
475504}
@@ -493,8 +522,7 @@ pub struct Stencil {
493522 inner : already_AddRefed < CompilationStencil > ,
494523}
495524
496- /*unsafe impl Send for Stencil {}
497- unsafe impl Sync for Stencil {}*/
525+ unsafe impl Send for Stencil { }
498526
499527impl Drop for Stencil {
500528 fn drop ( & mut self ) {
@@ -519,6 +547,10 @@ impl Stencil {
519547 pub fn is_null ( & self ) -> bool {
520548 self . inner . mRawPtr . is_null ( )
521549 }
550+
551+ pub unsafe fn from_raw ( inner : already_AddRefed < CompilationStencil > ) -> Self {
552+ Self { inner }
553+ }
522554}
523555
524556// ___________________________________________________________________________
0 commit comments