summaryrefslogtreecommitdiffstats
path: root/js/rust/src/glue.rs
diff options
context:
space:
mode:
Diffstat (limited to 'js/rust/src/glue.rs')
-rw-r--r--js/rust/src/glue.rs474
1 files changed, 474 insertions, 0 deletions
diff --git a/js/rust/src/glue.rs b/js/rust/src/glue.rs
new file mode 100644
index 0000000000..9a0fd861f4
--- /dev/null
+++ b/js/rust/src/glue.rs
@@ -0,0 +1,474 @@
+/* This Source Code Form is subject to the terms of the Mozilla Public
+ * License, v. 2.0. If a copy of the MPL was not distributed with this file,
+ * You can obtain one at http://mozilla.org/MPL/2.0/. */
+
+use heap::Heap;
+use jsapi::root::*;
+use std::os::raw::c_void;
+
+pub enum Action {}
+unsafe impl Sync for ProxyTraps {}
+
+#[repr(C)]
+#[derive(Copy, Clone)]
+pub struct ProxyTraps {
+ pub enter: ::std::option::Option<
+ unsafe extern "C" fn(
+ cx: *mut JSContext,
+ proxy: JS::HandleObject,
+ id: JS::HandleId,
+ action: Action,
+ bp: *mut bool,
+ ) -> bool,
+ >,
+ pub getOwnPropertyDescriptor: ::std::option::Option<
+ unsafe extern "C" fn(
+ cx: *mut JSContext,
+ proxy: JS::HandleObject,
+ id: JS::HandleId,
+ desc: JS::MutableHandle<JS::PropertyDescriptor>,
+ ) -> bool,
+ >,
+ pub defineProperty: ::std::option::Option<
+ unsafe extern "C" fn(
+ cx: *mut JSContext,
+ proxy: JS::HandleObject,
+ id: JS::HandleId,
+ desc: JS::Handle<JS::PropertyDescriptor>,
+ result: *mut JS::ObjectOpResult,
+ ) -> bool,
+ >,
+ pub ownPropertyKeys: ::std::option::Option<
+ unsafe extern "C" fn(
+ cx: *mut JSContext,
+ proxy: JS::HandleObject,
+ props: JS::MutableHandleIdVector,
+ ) -> bool,
+ >,
+ pub delete_: ::std::option::Option<
+ unsafe extern "C" fn(
+ cx: *mut JSContext,
+ proxy: JS::HandleObject,
+ id: JS::HandleId,
+ result: *mut JS::ObjectOpResult,
+ ) -> bool,
+ >,
+ pub enumerate: ::std::option::Option<
+ unsafe extern "C" fn(
+ cx: *mut JSContext,
+ proxy: JS::HandleObject,
+ objp: JS::MutableHandleObject,
+ ) -> bool,
+ >,
+ pub getPrototypeIfOrdinary: ::std::option::Option<
+ unsafe extern "C" fn(
+ cx: *mut JSContext,
+ proxy: JS::HandleObject,
+ isOrdinary: *mut bool,
+ protop: JS::MutableHandleObject,
+ ) -> bool,
+ >,
+ pub preventExtensions: ::std::option::Option<
+ unsafe extern "C" fn(
+ cx: *mut JSContext,
+ proxy: JS::HandleObject,
+ result: *mut JS::ObjectOpResult,
+ ) -> bool,
+ >,
+ pub isExtensible: ::std::option::Option<
+ unsafe extern "C" fn(
+ cx: *mut JSContext,
+ proxy: JS::HandleObject,
+ succeeded: *mut bool,
+ ) -> bool,
+ >,
+ pub has: ::std::option::Option<
+ unsafe extern "C" fn(
+ cx: *mut JSContext,
+ proxy: JS::HandleObject,
+ id: JS::HandleId,
+ bp: *mut bool,
+ ) -> bool,
+ >,
+ pub get: ::std::option::Option<
+ unsafe extern "C" fn(
+ cx: *mut JSContext,
+ proxy: JS::HandleObject,
+ receiver: JS::HandleValue,
+ id: JS::HandleId,
+ vp: JS::MutableHandleValue,
+ ) -> bool,
+ >,
+ pub set: ::std::option::Option<
+ unsafe extern "C" fn(
+ cx: *mut JSContext,
+ proxy: JS::HandleObject,
+ id: JS::HandleId,
+ v: JS::HandleValue,
+ receiver: JS::HandleValue,
+ result: *mut JS::ObjectOpResult,
+ ) -> bool,
+ >,
+ pub call: ::std::option::Option<
+ unsafe extern "C" fn(
+ cx: *mut JSContext,
+ proxy: JS::HandleObject,
+ args: *const JS::CallArgs,
+ ) -> bool,
+ >,
+ pub construct: ::std::option::Option<
+ unsafe extern "C" fn(
+ cx: *mut JSContext,
+ proxy: JS::HandleObject,
+ args: *const JS::CallArgs,
+ ) -> bool,
+ >,
+ pub hasOwn: ::std::option::Option<
+ unsafe extern "C" fn(
+ cx: *mut JSContext,
+ proxy: JS::HandleObject,
+ id: JS::HandleId,
+ bp: *mut bool,
+ ) -> bool,
+ >,
+ pub getOwnEnumerablePropertyKeys: ::std::option::Option<
+ unsafe extern "C" fn(
+ cx: *mut JSContext,
+ proxy: JS::HandleObject,
+ props: JS::MutableHandleIdVector,
+ ) -> bool,
+ >,
+ pub nativeCall: ::std::option::Option<
+ unsafe extern "C" fn(
+ cx: *mut JSContext,
+ test: JS::IsAcceptableThis,
+ _impl: JS::NativeImpl,
+ args: JS::CallArgs,
+ ) -> bool,
+ >,
+ pub hasInstance: ::std::option::Option<
+ unsafe extern "C" fn(
+ cx: *mut JSContext,
+ proxy: JS::HandleObject,
+ v: JS::MutableHandleValue,
+ bp: *mut bool,
+ ) -> bool,
+ >,
+ pub objectClassIs: ::std::option::Option<
+ unsafe extern "C" fn(
+ obj: JS::HandleObject,
+ classValue: js::ESClass,
+ cx: *mut JSContext,
+ ) -> bool,
+ >,
+ pub className: ::std::option::Option<
+ unsafe extern "C" fn(cx: *mut JSContext, proxy: JS::HandleObject) -> *const i8,
+ >,
+ pub fun_toString: ::std::option::Option<
+ unsafe extern "C" fn(
+ cx: *mut JSContext,
+ proxy: JS::HandleObject,
+ indent: u32,
+ ) -> *mut JSString,
+ >,
+ pub boxedValue_unbox: ::std::option::Option<
+ unsafe extern "C" fn(
+ cx: *mut JSContext,
+ proxy: JS::HandleObject,
+ vp: JS::MutableHandleValue,
+ ) -> bool,
+ >,
+ pub defaultValue: ::std::option::Option<
+ unsafe extern "C" fn(
+ cx: *mut JSContext,
+ obj: JS::HandleObject,
+ hint: JSType,
+ vp: JS::MutableHandleValue,
+ ) -> bool,
+ >,
+ pub trace:
+ ::std::option::Option<unsafe extern "C" fn(trc: *mut JSTracer, proxy: *mut JSObject)>,
+ pub finalize:
+ ::std::option::Option<unsafe extern "C" fn(fop: *mut JSFreeOp, proxy: *mut JSObject)>,
+ pub objectMoved: ::std::option::Option<
+ unsafe extern "C" fn(proxy: *mut JSObject, old: *mut JSObject) -> usize,
+ >,
+ pub isCallable: ::std::option::Option<unsafe extern "C" fn(obj: *mut JSObject) -> bool>,
+ pub isConstructor: ::std::option::Option<unsafe extern "C" fn(obj: *mut JSObject) -> bool>,
+}
+impl ::std::default::Default for ProxyTraps {
+ fn default() -> ProxyTraps {
+ unsafe { ::std::mem::zeroed() }
+ }
+}
+#[repr(C)]
+#[derive(Copy, Clone)]
+pub struct WrapperProxyHandler {
+ pub mTraps: ProxyTraps,
+}
+impl ::std::default::Default for WrapperProxyHandler {
+ fn default() -> WrapperProxyHandler {
+ unsafe { ::std::mem::zeroed() }
+ }
+}
+#[repr(C)]
+#[derive(Copy, Clone)]
+pub struct ForwardingProxyHandler {
+ pub mTraps: ProxyTraps,
+ pub mExtra: *const ::libc::c_void,
+}
+impl ::std::default::Default for ForwardingProxyHandler {
+ fn default() -> ForwardingProxyHandler {
+ unsafe { ::std::mem::zeroed() }
+ }
+}
+
+extern "C" {
+ pub fn InvokeGetOwnPropertyDescriptor(
+ handler: *const ::libc::c_void,
+ cx: *mut JSContext,
+ proxy: JS::HandleObject,
+ id: JS::HandleId,
+ desc: JS::MutableHandle<JS::PropertyDescriptor>,
+ ) -> bool;
+ pub fn InvokeHasOwn(
+ handler: *const ::libc::c_void,
+ cx: *mut JSContext,
+ proxy: JS::HandleObject,
+ id: JS::HandleId,
+ bp: *mut bool,
+ ) -> bool;
+ pub fn RUST_JS_NumberValue(d: f64) -> JS::Value;
+ pub fn RUST_FUNCTION_VALUE_TO_JITINFO(v: JS::Value) -> *const JSJitInfo;
+ pub fn CreateCallArgsFromVp(argc: u32, v: *mut JS::Value) -> JS::CallArgs;
+ pub fn CallJitGetterOp(
+ info: *const JSJitInfo,
+ cx: *mut JSContext,
+ thisObj: JS::HandleObject,
+ specializedThis: *mut ::libc::c_void,
+ argc: u32,
+ vp: *mut JS::Value,
+ ) -> bool;
+ pub fn CallJitSetterOp(
+ info: *const JSJitInfo,
+ cx: *mut JSContext,
+ thisObj: JS::HandleObject,
+ specializedThis: *mut ::libc::c_void,
+ argc: u32,
+ vp: *mut JS::Value,
+ ) -> bool;
+ pub fn CallJitMethodOp(
+ info: *const JSJitInfo,
+ cx: *mut JSContext,
+ thisObj: JS::HandleObject,
+ specializedThis: *mut ::libc::c_void,
+ argc: u32,
+ vp: *mut JS::Value,
+ ) -> bool;
+ pub fn CreateProxyHandler(
+ aTraps: *const ProxyTraps,
+ aExtra: *const ::libc::c_void,
+ ) -> *const ::libc::c_void;
+ pub fn CreateWrapperProxyHandler(aTraps: *const ProxyTraps) -> *const ::libc::c_void;
+ pub fn CreateRustJSPrincipal(
+ origin: *const ::libc::c_void,
+ destroy: Option<unsafe extern "C" fn(principal: *mut JSPrincipals)>,
+ write: Option<
+ unsafe extern "C" fn(cx: *mut JSContext, writer: *mut JSStructuredCloneWriter) -> bool,
+ >,
+ ) -> *mut JSPrincipals;
+ pub fn GetPrincipalOrigin(principal: *const JSPrincipals) -> *const ::libc::c_void;
+ pub fn GetCrossCompartmentWrapper() -> *const ::libc::c_void;
+ pub fn GetSecurityWrapper() -> *const ::libc::c_void;
+ pub fn NewCompileOptions(
+ aCx: *mut JSContext,
+ aFile: *const ::libc::c_char,
+ aLine: u32,
+ ) -> *mut JS::ReadOnlyCompileOptions;
+ pub fn DeleteCompileOptions(aOpts: *mut JS::ReadOnlyCompileOptions);
+ pub fn NewProxyObject(
+ aCx: *mut JSContext,
+ aHandler: *const ::libc::c_void,
+ aPriv: JS::HandleValue,
+ proto: *mut JSObject,
+ parent: *mut JSObject,
+ call: *mut JSObject,
+ construct: *mut JSObject,
+ ) -> *mut JSObject;
+ pub fn WrapperNew(
+ aCx: *mut JSContext,
+ aObj: JS::HandleObject,
+ aHandler: *const ::libc::c_void,
+ aClass: *const JSClass,
+ ) -> *mut JSObject;
+ pub fn WrapperNewSingleton(
+ aCx: *mut JSContext,
+ aObj: JS::HandleObject,
+ aHandler: *const ::libc::c_void,
+ aClass: *const JSClass,
+ ) -> *mut JSObject;
+ pub fn NewWindowProxy(
+ aCx: *mut JSContext,
+ aObj: JS::HandleObject,
+ aHandler: *const ::libc::c_void,
+ ) -> *mut JSObject;
+ pub fn GetWindowProxyClass() -> *const JSClass;
+ pub fn GetProxyPrivate(obj: *mut JSObject) -> JS::Value;
+ pub fn SetProxyPrivate(obj: *mut JSObject, private: *const JS::Value);
+ pub fn GetProxyReservedSlot(obj: *mut JSObject, slot: u32) -> JS::Value;
+ pub fn SetProxyReservedSlot(obj: *mut JSObject, slot: u32, val: *const JS::Value);
+ pub fn RUST_JSID_IS_INT(id: JS::HandleId) -> bool;
+ pub fn RUST_JSID_TO_INT(id: JS::HandleId) -> i32;
+ pub fn int_to_jsid(i: i32) -> jsid;
+ pub fn RUST_JSID_IS_STRING(id: JS::HandleId) -> bool;
+ pub fn RUST_JSID_TO_STRING(id: JS::HandleId) -> *mut JSString;
+ pub fn RUST_SYMBOL_TO_JSID(sym: *mut JS::Symbol) -> jsid;
+ pub fn RUST_SET_JITINFO(func: *mut JSFunction, info: *const JSJitInfo);
+ pub fn RUST_INTERNED_STRING_TO_JSID(cx: *mut JSContext, str: *mut JSString) -> jsid;
+ pub fn RUST_js_GetErrorMessage(
+ userRef: *mut ::libc::c_void,
+ errorNumber: u32,
+ ) -> *const JSErrorFormatString;
+ pub fn IsProxyHandlerFamily(obj: *mut JSObject) -> u8;
+ pub fn GetProxyHandlerExtra(obj: *mut JSObject) -> *const ::libc::c_void;
+ pub fn GetProxyHandler(obj: *mut JSObject) -> *const ::libc::c_void;
+ pub fn ReportError(aCx: *mut JSContext, aError: *const i8);
+ pub fn IsWrapper(obj: *mut JSObject) -> bool;
+ pub fn UnwrapObjectStatic(obj: *mut JSObject) -> *mut JSObject;
+ pub fn UncheckedUnwrapObject(obj: *mut JSObject, stopAtOuter: u8) -> *mut JSObject;
+ pub fn CreateRootedIdVector(cx: *mut JSContext) -> *mut JS::PersistentRootedIdVector;
+ pub fn AppendToRootedIdVector(v: *mut JS::PersistentRootedIdVector, id: jsid) -> bool;
+ pub fn SliceRootedIdVector(
+ v: *const JS::PersistentRootedIdVector,
+ length: *mut usize,
+ ) -> *const jsid;
+ pub fn DestroyRootedIdVector(v: *mut JS::PersistentRootedIdVector);
+ pub fn GetMutableHandleIdVector(
+ v: *mut JS::PersistentRootedIdVector,
+ ) -> JS::MutableHandleIdVector;
+ pub fn CreateRootedObjectVector(aCx: *mut JSContext) -> *mut JS::PersistentRootedObjectVector;
+ pub fn AppendToRootedObjectVector(
+ v: *mut JS::PersistentRootedObjectVector,
+ obj: *mut JSObject,
+ ) -> bool;
+ pub fn DeleteRootedObjectVector(v: *mut JS::PersistentRootedObjectVector);
+ pub fn CollectServoSizes(rt: *mut JSRuntime, sizes: *mut JS::ServoSizes) -> bool;
+ pub fn CallIdTracer(trc: *mut JSTracer, idp: *mut Heap<jsid>, name: *const ::libc::c_char);
+ pub fn CallValueTracer(
+ trc: *mut JSTracer,
+ valuep: *mut Heap<JS::Value>,
+ name: *const ::libc::c_char,
+ );
+ pub fn CallObjectTracer(
+ trc: *mut JSTracer,
+ objp: *mut Heap<*mut JSObject>,
+ name: *const ::libc::c_char,
+ );
+ pub fn CallStringTracer(
+ trc: *mut JSTracer,
+ strp: *mut Heap<*mut JSString>,
+ name: *const ::libc::c_char,
+ );
+ #[cfg(feature = "bigint")]
+ pub fn CallBigIntTracer(
+ trc: *mut JSTracer,
+ bip: *mut Heap<*mut JS::BigInt>,
+ name: *const ::libc::c_char,
+ );
+ pub fn CallScriptTracer(
+ trc: *mut JSTracer,
+ scriptp: *mut Heap<*mut JSScript>,
+ name: *const ::libc::c_char,
+ );
+ pub fn CallFunctionTracer(
+ trc: *mut JSTracer,
+ funp: *mut Heap<*mut JSFunction>,
+ name: *const ::libc::c_char,
+ );
+ pub fn CallUnbarrieredObjectTracer(
+ trc: *mut JSTracer,
+ objp: *mut *mut JSObject,
+ name: *const ::libc::c_char,
+ );
+ pub fn GetProxyHandlerFamily() -> *const c_void;
+
+ pub fn GetInt8ArrayLengthAndData(
+ obj: *mut JSObject,
+ length: *mut u32,
+ isSharedMemory: *mut bool,
+ data: *mut *mut i8,
+ );
+ pub fn GetUint8ArrayLengthAndData(
+ obj: *mut JSObject,
+ length: *mut u32,
+ isSharedMemory: *mut bool,
+ data: *mut *mut u8,
+ );
+ pub fn GetUint8ClampedArrayLengthAndData(
+ obj: *mut JSObject,
+ length: *mut u32,
+ isSharedMemory: *mut bool,
+ data: *mut *mut u8,
+ );
+ pub fn GetInt16ArrayLengthAndData(
+ obj: *mut JSObject,
+ length: *mut u32,
+ isSharedMemory: *mut bool,
+ data: *mut *mut i16,
+ );
+ pub fn GetUint16ArrayLengthAndData(
+ obj: *mut JSObject,
+ length: *mut u32,
+ isSharedMemory: *mut bool,
+ data: *mut *mut u16,
+ );
+ pub fn GetInt32ArrayLengthAndData(
+ obj: *mut JSObject,
+ length: *mut u32,
+ isSharedMemory: *mut bool,
+ data: *mut *mut i32,
+ );
+ pub fn GetUint32ArrayLengthAndData(
+ obj: *mut JSObject,
+ length: *mut u32,
+ isSharedMemory: *mut bool,
+ data: *mut *mut u32,
+ );
+ pub fn GetFloat32ArrayLengthAndData(
+ obj: *mut JSObject,
+ length: *mut u32,
+ isSharedMemory: *mut bool,
+ data: *mut *mut f32,
+ );
+ pub fn GetFloat64ArrayLengthAndData(
+ obj: *mut JSObject,
+ length: *mut u32,
+ isSharedMemory: *mut bool,
+ data: *mut *mut f64,
+ );
+
+ pub fn NewJSAutoStructuredCloneBuffer(
+ scope: JS::StructuredCloneScope,
+ callbacks: *const JSStructuredCloneCallbacks,
+ ) -> *mut JSAutoStructuredCloneBuffer;
+ pub fn DeleteJSAutoStructuredCloneBuffer(buf: *mut JSAutoStructuredCloneBuffer);
+ pub fn GetLengthOfJSStructuredCloneData(data: *mut JSStructuredCloneData) -> usize;
+ pub fn CopyJSStructuredCloneData(src: *mut JSStructuredCloneData, dest: *mut u8);
+ pub fn WriteBytesToJSStructuredCloneData(
+ src: *const u8,
+ len: usize,
+ dest: *mut JSStructuredCloneData,
+ ) -> bool;
+
+ pub fn JSEncodeStringToUTF8(
+ cx: *mut JSContext,
+ string: JS::HandleString,
+ ) -> *mut ::libc::c_char;
+
+ pub fn IsDebugBuild() -> bool;
+}
+
+#[test]
+fn jsglue_cpp_configured_correctly() {
+ assert_eq!(cfg!(feature = "debugmozjs"), unsafe { IsDebugBuild() });
+}