diff --git a/glue.rs b/glue.rs index 3203d3a97..ba4f49e2b 100644 --- a/glue.rs +++ b/glue.rs @@ -12,35 +12,35 @@ use jsval::JSVal; type c_bool = libc::c_int; pub struct ProxyTraps { - pub getPropertyDescriptor: Option c_bool>, - pub getOwnPropertyDescriptor: Option JSBool>, - pub defineProperty: Option JSBool>, + pub getPropertyDescriptor: Option c_bool>, + pub getOwnPropertyDescriptor: Option JSBool>, + pub defineProperty: Option JSBool>, pub getOwnPropertyNames: *u8, //XXX need a representation for AutoIdVector& - pub delete_: Option JSBool>, + pub delete_: Option JSBool>, pub enumerate: *u8, //XXX need a representation for AutoIdVector& - pub has: Option JSBool>, - pub hasOwn: Option JSBool>, - pub get: Option JSBool>, - pub set: Option JSBool>, + pub has: Option JSBool>, + pub hasOwn: Option JSBool>, + pub get: Option JSBool>, + pub set: Option JSBool>, pub keys: *u8, //XXX need a representation for AutoIdVector& - pub iterate: Option JSBool>, + pub iterate: Option JSBool>, - pub call: Option JSBool>, - pub construct: Option JSBool>, + pub call: Option JSBool>, + pub construct: Option JSBool>, pub nativeCall: *u8, //XXX need a representation for IsAcceptableThis, NativeImpl, and CallArgs - pub hasInstance: Option JSBool>, - pub typeOf: Option uint>, //XXX JSType enum - pub objectClassIs: Option JSBool>, //XXX ESClassValue enum - pub obj_toString: Option *JSString>, - pub fun_toString: Option *JSString>, + pub hasInstance: Option JSBool>, + pub typeOf: Option uint>, //XXX JSType enum + pub objectClassIs: Option JSBool>, //XXX ESClassValue enum + pub obj_toString: Option *mut JSString>, + pub fun_toString: Option *mut JSString>, //regexp_toShared: *u8, - pub defaultValue: Option JSBool>, //XXX JSType enum - pub iteratorNext: Option JSBool>, - pub finalize: Option, - pub getElementIfPresent: Option JSBool>, - pub getPrototypeOf: Option JSBool>, - pub trace: Option, + pub defaultValue: Option JSBool>, //XXX JSType enum + pub iteratorNext: Option JSBool>, + pub finalize: Option, + pub getElementIfPresent: Option JSBool>, + pub getPrototypeOf: Option JSBool>, + pub trace: Option, } #[link(name = "jsglue")] @@ -57,54 +57,54 @@ extern { pub fn RUST_JS_NumberValue(d: f64) -> JSVal; //#[rust_stack] -pub fn CallJitPropertyOp(info: *JSJitInfo, cx: *JSContext, thisObj: *JSObject, specializedThis: *libc::c_void, vp: *JSVal) -> JSBool; +pub fn CallJitPropertyOp(info: *JSJitInfo, cx: *mut JSContext, thisObj: *mut JSObject, specializedThis: *libc::c_void, vp: *mut JSVal) -> JSBool; //#[rust_stack] -pub fn CallJitMethodOp(info: *JSJitInfo, cx: *JSContext, thisObj: *JSObject, specializedThis: *libc::c_void, argc: libc::c_uint, vp: *JSVal) -> JSBool; +pub fn CallJitMethodOp(info: *JSJitInfo, cx: *mut JSContext, thisObj: *mut JSObject, specializedThis: *libc::c_void, argc: libc::c_uint, vp: *mut JSVal) -> JSBool; //#[rust_stack] pub fn RUST_FUNCTION_VALUE_TO_JITINFO(v: JSVal) -> *JSJitInfo; -pub fn SetFunctionNativeReserved(fun: *JSObject, which: libc::size_t, val: *JSVal); -pub fn GetFunctionNativeReserved(fun: *JSObject, which: libc::size_t) -> *JSVal; +pub fn SetFunctionNativeReserved(fun: *mut JSObject, which: libc::size_t, val: *mut JSVal); +pub fn GetFunctionNativeReserved(fun: *mut JSObject, which: libc::size_t) -> *mut JSVal; pub fn CreateProxyHandler(traps: *ProxyTraps, extra: *libc::c_void) -> *libc::c_void; pub fn CreateWrapperProxyHandler(traps: *ProxyTraps) -> *libc::c_void; -pub fn NewProxyObject(cx: *JSContext, handler: *libc::c_void, priv_: *JSVal, - proto: *JSObject, parent: *JSObject, call: *JSObject, - construct: *JSObject) -> *JSObject; -pub fn WrapperNew(cx: *JSContext, parent: *JSObject, handler: *libc::c_void) -> *JSObject; +pub fn NewProxyObject(cx: *mut JSContext, handler: *libc::c_void, priv_: *JSVal, + proto: *mut JSObject, parent: *mut JSObject, call: *mut JSObject, + construct: *mut JSObject) -> *mut JSObject; +pub fn WrapperNew(cx: *mut JSContext, parent: *mut JSObject, handler: *libc::c_void) -> *mut JSObject; -pub fn GetProxyExtra(obj: *JSObject, slot: libc::c_uint) -> JSVal; -pub fn GetProxyPrivate(obj: *JSObject) -> JSVal; -pub fn SetProxyExtra(obj: *JSObject, slot: libc::c_uint, val: JSVal); +pub fn GetProxyExtra(obj: *mut JSObject, slot: libc::c_uint) -> JSVal; +pub fn GetProxyPrivate(obj: *mut JSObject) -> JSVal; +pub fn SetProxyExtra(obj: *mut JSObject, slot: libc::c_uint, val: JSVal); -pub fn GetObjectProto(obj: *JSObject) -> *JSObject; -pub fn GetObjectParent(obj: *JSObject) -> *JSObject; +pub fn GetObjectProto(obj: *mut JSObject) -> *mut JSObject; +pub fn GetObjectParent(obj: *mut JSObject) -> *mut JSObject; pub fn RUST_JSID_IS_INT(id: jsid) -> JSBool; pub fn RUST_JSID_TO_INT(id: jsid) -> libc::c_int; pub fn RUST_JSID_IS_STRING(id: jsid) -> JSBool; -pub fn RUST_JSID_TO_STRING(id: jsid) -> *JSString; +pub fn RUST_JSID_TO_STRING(id: jsid) -> *mut JSString; pub fn RUST_SET_JITINFO(func: *JSFunction, info: *JSJitInfo); -pub fn RUST_INTERNED_STRING_TO_JSID(cx: *JSContext, str: *JSString) -> jsid; +pub fn RUST_INTERNED_STRING_TO_JSID(cx: *mut JSContext, str: *mut JSString) -> jsid; -pub fn DefineFunctionWithReserved(cx: *JSContext, obj: *JSObject, +pub fn DefineFunctionWithReserved(cx: *mut JSContext, obj: *mut JSObject, name: *libc::c_char, call: JSNative, nargs: libc::c_uint, - attrs: libc::c_uint) -> *JSObject; -pub fn GetObjectJSClass(obj: *JSObject) -> *JSClass; + attrs: libc::c_uint) -> *mut JSObject; +pub fn GetObjectJSClass(obj: *mut JSObject) -> *JSClass; pub fn RUST_js_GetErrorMessage(userRef: *libc::c_void, locale: *libc::c_char, errorNumber: libc::c_uint) -> *JSErrorFormatString; -pub fn js_IsObjectProxyClass(obj: *JSObject) -> bool; -pub fn js_IsFunctionProxyClass(obj: *JSObject) -> bool; -pub fn IsProxyHandlerFamily(obj: *JSObject) -> bool; -pub fn GetProxyHandlerExtra(obj: *JSObject) -> *libc::c_void; -pub fn GetProxyHandler(obj: *JSObject) -> *libc::c_void; -pub fn InvokeGetOwnPropertyDescriptor(handler: *libc::c_void, cx: *JSContext, proxy: *JSObject, id: jsid, set: JSBool, desc: *mut JSPropertyDescriptor) -> JSBool; -pub fn GetGlobalForObjectCrossCompartment(obj: *JSObject) -> *JSObject; -pub fn ReportError(cx: *JSContext, error: *libc::c_char); -pub fn IsWrapper(obj: *JSObject) -> JSBool; -pub fn UnwrapObject(obj: *JSObject, stopAtOuter: JSBool, flags: *libc::c_uint) -> *JSObject; +pub fn js_IsObjectProxyClass(obj: *mut JSObject) -> bool; +pub fn js_IsFunctionProxyClass(obj: *mut JSObject) -> bool; +pub fn IsProxyHandlerFamily(obj: *mut JSObject) -> bool; +pub fn GetProxyHandlerExtra(obj: *mut JSObject) -> *libc::c_void; +pub fn GetProxyHandler(obj: *mut JSObject) -> *libc::c_void; +pub fn InvokeGetOwnPropertyDescriptor(handler: *libc::c_void, cx: *mut JSContext, proxy: *mut JSObject, id: jsid, set: JSBool, desc: *mut JSPropertyDescriptor) -> JSBool; +pub fn GetGlobalForObjectCrossCompartment(obj: *mut JSObject) -> *mut JSObject; +pub fn ReportError(cx: *mut JSContext, error: *libc::c_char); +pub fn IsWrapper(obj: *mut JSObject) -> JSBool; +pub fn UnwrapObject(obj: *mut JSObject, stopAtOuter: JSBool, flags: *libc::c_uint) -> *mut JSObject; } diff --git a/js.rc b/js.rc index c8e81cbfc..a7cf33bf4 100644 --- a/js.rc +++ b/js.rc @@ -106,20 +106,19 @@ pub fn JSCLASS_HAS_RESERVED_SLOTS(n: c_uint) -> c_uint { } #[inline(always)] -pub unsafe fn JS_ARGV(_cx: *JSContext, vp: *JSVal) -> *JSVal { +pub unsafe fn JS_ARGV(_cx: *mut JSContext, vp: *mut JSVal) -> *mut JSVal { vp.offset(2) } -pub unsafe fn JS_SET_RVAL(_cx: *JSContext, vp: *JSVal, v: JSVal) { - let vp = vp as *mut JSVal; +pub unsafe fn JS_SET_RVAL(_cx: *mut JSContext, vp: *mut JSVal, v: JSVal) { *vp = v; } #[inline(alwyas)] -pub unsafe fn JS_THIS_OBJECT(cx: *JSContext, vp: *mut JSVal) -> *JSObject { +pub unsafe fn JS_THIS_OBJECT(cx: *mut JSContext, vp: *mut JSVal) -> *mut JSObject { let r = if (*(vp.offset(1))).is_primitive() { - JS_ComputeThis(cx, &*vp) + JS_ComputeThis(cx, vp) } else { *(vp.offset(1)) }; @@ -127,7 +126,7 @@ pub unsafe fn JS_THIS_OBJECT(cx: *JSContext, vp: *mut JSVal) -> *JSObject { } #[inline(always)] -pub unsafe fn JS_CALLEE(_cx: *JSContext, vp: *JSVal) -> JSVal { +pub unsafe fn JS_CALLEE(_cx: *mut JSContext, vp: *mut JSVal) -> JSVal { *vp } @@ -142,24 +141,24 @@ fn start(argc: int, argv: **u8) -> int { green::start(argc, argv, rustuv::event_loop, __test::main) } -pub type JSObjectOp = extern "C" fn(*JSContext, JSHandleObject) -> *JSObject; +pub type JSObjectOp = extern "C" fn(*mut JSContext, JSHandleObject) -> *mut JSObject; pub struct Class { pub name: *libc::c_char, pub flags: uint32_t, - pub addProperty: Option, - pub delProperty: Option, - pub getProperty: Option, - pub setProperty: Option, - pub enumerate: Option, - pub resolve: Option, - pub convert: Option, - pub finalize: Option, - pub checkAccess: Option, - pub call: Option, - pub hasInstance: Option, - pub construct: Option, - pub trace: Option, + pub addProperty: JSPropertyOp, + pub delProperty: JSPropertyOp, + pub getProperty: JSPropertyOp, + pub setProperty: JSStrictPropertyOp, + pub enumerate: JSEnumerateOp, + pub resolve: JSResolveOp, + pub convert: JSConvertOp, + pub finalize: JSFinalizeOp, + pub checkAccess: JSCheckAccessOp, + pub call: JSNative, + pub hasInstance: JSHasInstanceOp, + pub construct: JSNative, + pub trace: JSTraceOp, pub ext: ClassExtension, pub ops: ObjectOps, diff --git a/jsapi.rs b/jsapi.rs index 3e12201b2..80dc2d1f3 100644 --- a/jsapi.rs +++ b/jsapi.rs @@ -1,559 +1,342 @@ -/* 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/. */ - /* automatically generated by rust-bindgen */ -#![allow(non_uppercase_statics, non_camel_case_types)] - use libc::*; use jsfriendapi::JSJitInfo; use jsval::JSVal; -pub type moz_static_assert0 = c_int; - -pub type moz_static_assert1 = c_int; - -pub type moz_static_assert2 = c_int; - -pub type moz_static_assert3 = c_int; - -pub type moz_static_assert4 = c_int; - -pub type union_MozDoublePun = c_void /* FIXME: union type */; - +pub enum JSString {} +pub enum JSFlatString {} +pub enum JSObject {} +pub enum JSScript {} +pub enum JSFunction {} +pub enum JSContext {} +pub enum JSRuntime {} +pub enum JSIdArray {} +pub enum JSExceptionState {} +pub enum JSStructuredCloneReader {} +pub enum JSStructuredCloneWriter {} +pub enum JSCompartment {} +pub enum JSCrossCompartmentCall {} pub type JSBool = c_int; - -pub type jsid = ptrdiff_t; - pub type jschar = uint16_t; - -pub type enum_JSVersion = c_int; -pub static JSVERSION_1_0: i32 = 100_i32; -pub static JSVERSION_1_1: i32 = 110_i32; -pub static JSVERSION_1_2: i32 = 120_i32; -pub static JSVERSION_1_3: i32 = 130_i32; -pub static JSVERSION_1_4: i32 = 140_i32; -pub static JSVERSION_ECMA_3: i32 = 148_i32; -pub static JSVERSION_1_5: i32 = 150_i32; -pub static JSVERSION_1_6: i32 = 160_i32; -pub static JSVERSION_1_7: i32 = 170_i32; -pub static JSVERSION_1_8: i32 = 180_i32; -pub static JSVERSION_ECMA_5: i32 = 185_i32; -pub static JSVERSION_DEFAULT: i32 = 0_i32; -pub static JSVERSION_UNKNOWN: i32 = -1_i32; -pub static JSVERSION_LATEST: i32 = 185_i32; - -pub type JSVersion = enum_JSVersion; - -pub type enum_JSType = c_uint; -pub static JSTYPE_VOID: u32 = 0_u32; -pub static JSTYPE_OBJECT: u32 = 1_u32; -pub static JSTYPE_FUNCTION: u32 = 2_u32; -pub static JSTYPE_STRING: u32 = 3_u32; -pub static JSTYPE_NUMBER: u32 = 4_u32; -pub static JSTYPE_BOOLEAN: u32 = 5_u32; -pub static JSTYPE_NULL: u32 = 6_u32; -pub static JSTYPE_XML: u32 = 7_u32; -pub static JSTYPE_LIMIT: u32 = 8_u32; - -pub type JSType = enum_JSType; - -pub type enum_JSProtoKey = c_uint; -pub static JSProto_Null: u32 = 0_u32; -pub static JSProto_Object: u32 = 1_u32; -pub static JSProto_Function: u32 = 2_u32; -pub static JSProto_Array: u32 = 3_u32; -pub static JSProto_Boolean: u32 = 4_u32; -pub static JSProto_JSON: u32 = 5_u32; -pub static JSProto_Date: u32 = 6_u32; -pub static JSProto_Math: u32 = 7_u32; -pub static JSProto_Number: u32 = 8_u32; -pub static JSProto_String: u32 = 9_u32; -pub static JSProto_RegExp: u32 = 10_u32; -pub static JSProto_XML: u32 = 11_u32; -pub static JSProto_Namespace: u32 = 12_u32; -pub static JSProto_QName: u32 = 13_u32; -pub static JSProto_Error: u32 = 14_u32; -pub static JSProto_InternalError: u32 = 15_u32; -pub static JSProto_EvalError: u32 = 16_u32; -pub static JSProto_RangeError: u32 = 17_u32; -pub static JSProto_ReferenceError: u32 = 18_u32; -pub static JSProto_SyntaxError: u32 = 19_u32; -pub static JSProto_TypeError: u32 = 20_u32; -pub static JSProto_URIError: u32 = 21_u32; -pub static JSProto_Iterator: u32 = 22_u32; -pub static JSProto_StopIteration: u32 = 23_u32; -pub static JSProto_ArrayBuffer: u32 = 24_u32; -pub static JSProto_Int8Array: u32 = 25_u32; -pub static JSProto_Uint8Array: u32 = 26_u32; -pub static JSProto_Int16Array: u32 = 27_u32; -pub static JSProto_Uint16Array: u32 = 28_u32; -pub static JSProto_Int32Array: u32 = 29_u32; -pub static JSProto_Uint32Array: u32 = 30_u32; -pub static JSProto_Float32Array: u32 = 31_u32; -pub static JSProto_Float64Array: u32 = 32_u32; -pub static JSProto_Uint8ClampedArray: u32 = 33_u32; -pub static JSProto_Proxy: u32 = 34_u32; -pub static JSProto_AnyName: u32 = 35_u32; -pub static JSProto_WeakMap: u32 = 36_u32; -pub static JSProto_Map: u32 = 37_u32; -pub static JSProto_Set: u32 = 38_u32; -pub static JSProto_DataView: u32 = 39_u32; -pub static JSProto_ParallelArray: u32 = 40_u32; -pub static JSProto_LIMIT: u32 = 41_u32; - -pub type JSProtoKey = enum_JSProtoKey; - -pub type enum_JSAccessMode = c_uint; -pub static JSACC_PROTO: u32 = 0_u32; -pub static JSACC_WATCH: u32 = 3_u32; -pub static JSACC_READ: u32 = 4_u32; -pub static JSACC_WRITE: u32 = 8_u32; -pub static JSACC_LIMIT: u32 = 9_u32; - -pub type JSAccessMode = enum_JSAccessMode; - -pub type enum_JSIterateOp = c_uint; -pub static JSENUMERATE_INIT: u32 = 0_u32; -pub static JSENUMERATE_INIT_ALL: u32 = 1_u32; -pub static JSENUMERATE_NEXT: u32 = 2_u32; -pub static JSENUMERATE_DESTROY: u32 = 3_u32; - -pub type JSIterateOp = enum_JSIterateOp; - - -pub type JSGCTraceKind = c_uint; -pub static JSTRACE_OBJECT: u32 = 0_u32; -pub static JSTRACE_STRING: u32 = 1_u32; -pub static JSTRACE_SCRIPT: u32 = 2_u32; -pub static JSTRACE_XML: u32 = 3_u32; -pub static JSTRACE_SHAPE: u32 = 4_u32; -pub static JSTRACE_BASE_SHAPE: u32 = 5_u32; -pub static JSTRACE_TYPE_OBJECT: u32 = 6_u32; -pub static JSTRACE_LAST: u32 = 6_u32; - -pub type struct_JSCompartment = c_void; - -pub type JSCompartment = struct_JSCompartment; - -pub type JSConstDoubleSpec = struct_JSConstDoubleSpec; - -pub type struct_JSContext = c_void; - -pub type JSContext = struct_JSContext; - -pub type struct_JSCrossCompartmentCall = c_void; - -pub type JSCrossCompartmentCall = struct_JSCrossCompartmentCall; - -pub type JSErrorReport = struct_JSErrorReport; - -pub type struct_JSExceptionState = c_void; - -pub type JSExceptionState = struct_JSExceptionState; - -pub type struct_JSFunction = c_void; - -pub type JSFunction = struct_JSFunction; - -pub type struct_JSIdArray = c_void; - -pub type JSIdArray = struct_JSIdArray; - -pub type JSLocaleCallbacks = struct_JSLocaleCallbacks; - -pub type struct_JSObject = c_void; - -pub type JSObject = struct_JSObject; - -pub type struct_JSObjectMap = c_void; - -pub type JSObjectMap = struct_JSObjectMap; - -pub type JSPrincipals = struct_JSPrincipals; - -pub type JSPropertyDescriptor = struct_JSPropertyDescriptor; - -pub type struct_JSPropertyName = c_void; - -pub type JSPropertyName = struct_JSPropertyName; - -pub type struct_JSRuntime = c_void; - -pub type JSRuntime = struct_JSRuntime; - -pub type JSSecurityCallbacks = struct_JSSecurityCallbacks; - -pub type struct_JSStackFrame = c_void; - -pub type JSStackFrame = struct_JSStackFrame; - -pub type struct_JSScript = c_void; - -pub type JSScript = struct_JSScript; - -pub type JSStructuredCloneCallbacks = struct_JSStructuredCloneCallbacks; - -pub type struct_JSStructuredCloneReader = c_void; - -pub type JSStructuredCloneReader = struct_JSStructuredCloneReader; - -pub type struct_JSStructuredCloneWriter = c_void; - -pub type JSStructuredCloneWriter = struct_JSStructuredCloneWriter; - -pub type JSTracer = struct_JSTracer; - -pub type struct_JSFlatString = c_void; - -pub type JSFlatString = struct_JSFlatString; - -pub type struct_JSString = c_void; - -pub type JSString = struct_JSString; - +pub type jsid = ptrdiff_t; pub type JSCallOnceType = JSBool; - pub type JSInitCallback = *u8; -pub type JSMallocSizeOfFun = *u8; +pub type JSProtoKey = c_uint; +pub static JSProto_LIMIT: JSProtoKey = 41; -pub type jsbitmap = size_t; - -pub type JSValueType = uint8_t; - -pub type JSValueTag = uint32_t; - -pub type JSValueShiftedTag = uint64_t; - -pub type enum_JSWhyMagic = c_uint; -pub static JS_ARRAY_HOLE: u32 = 0_u32; -pub static JS_NATIVE_ENUMERATE: u32 = 1_u32; -pub static JS_NO_ITER_VALUE: u32 = 2_u32; -pub static JS_GENERATOR_CLOSING: u32 = 3_u32; -pub static JS_NO_CONSTANT: u32 = 4_u32; -pub static JS_THIS_POISON: u32 = 5_u32; -pub static JS_ARG_POISON: u32 = 6_u32; -pub static JS_SERIALIZE_NO_NODE: u32 = 7_u32; -pub static JS_LAZY_ARGUMENTS: u32 = 8_u32; -pub static JS_OPTIMIZED_ARGUMENTS: u32 = 9_u32; -pub static JS_IS_CONSTRUCTING: u32 = 10_u32; -pub static JS_OVERWRITTEN_CALLEE: u32 = 11_u32; -pub static JS_FORWARD_TO_CALL_OBJECT: u32 = 12_u32; -pub static JS_BLOCK_NEEDS_CLONE: u32 = 13_u32; -pub static JS_HASH_KEY_EMPTY: u32 = 14_u32; -pub static JS_GENERIC_MAGIC: u32 = 15_u32; +#[repr(u32)] +pub enum JSVersion { + JSVERSION_DEFAULT = 0, + JSVERSION_LATEST = 185 +} -pub type JSWhyMagic = enum_JSWhyMagic; +#[repr(u32)] +pub enum JSIterateOp { + JSENUMERATE_INIT = 0, + JSENUMERATE_INIT_ALL = 1, + JSENUMERATE_NEXT = 2, + JSENUMERATE_DESTROY = 3, +} -pub type union_jsval_layout = c_void /* FIXME: union type */; +#[repr(u32)] +pub enum JSType { + JSTYPE_VOID, /* undefined */ + JSTYPE_OBJECT, /* object */ + JSTYPE_FUNCTION, /* function */ + JSTYPE_STRING, /* string */ + JSTYPE_NUMBER, /* number */ + JSTYPE_BOOLEAN, /* boolean */ + JSTYPE_NULL, /* null */ + JSTYPE_XML, /* xml object */ + JSTYPE_LIMIT +} -pub type jsval_layout = union_jsval_layout; +#[repr(u32)] +pub enum JSAccessMode { + JSACC_PROTO = 0, + JSACC_WATCH = 3, + JSACC_READ = 4, + JSACC_WRITE = 8, + JSACC_LIMIT +} -pub type moz_static_assert5 = c_int; +#[repr(u32)] +pub enum JSGCTraceKind { + JSTRACE_OBJECT = 0, + JSTRACE_STRING = 1, + JSTRACE_SCRIPT = 2, +} -pub type moz_static_assert6 = c_int; +pub static JS_DEFAULT_ZEAL_FREQ: u32 = 100; +pub type moz_static_assert6 = [c_int, ..1u]; pub struct JSHandleObject { - pub unnamed: **JSObject, + pub unnamed_field1: *mut *mut JSObject, } - pub struct JSHandleValue { - pub unnamed: JSVal, + pub unnamed_field1: JSVal, } - pub struct JSHandleString { - pub unnamed: **JSString, + pub unnamed_field1: *mut *mut JSString, } - pub struct JSMutableHandleObject { - pub unnamed: **JSObject, + pub unnamed_field1: *mut *mut JSObject, } - pub struct JSHandleId { - pub unnamed: *jsid, + pub unnamed_field1: *mut jsid, } - pub struct JSMutableHandleValue { - pub unnamed: *JSVal, + pub unnamed_field1: *mut JSVal, } - -pub type JSRawObject = *JSObject; - -pub type JSPropertyOp = extern "C" unsafe fn(*JSContext, JSHandleObject, JSHandleId, JSMutableHandleValue) -> JSBool; - -pub type JSStrictPropertyOp = extern "C" unsafe fn(*JSContext, JSHandleObject, JSHandleId, JSBool, JSMutableHandleValue) -> JSBool; - -pub type JSNewEnumerateOp = *u8; - -pub type JSEnumerateOp = extern "C" unsafe fn(*JSContext, JSHandleObject) -> JSBool; - -pub type JSResolveOp = extern "C" unsafe fn(*JSContext, JSHandleObject, JSHandleId) -> JSBool; - -pub type JSNewResolveOp = *u8; - -pub type JSConvertOp = extern "C" unsafe fn(*JSContext, JSHandleObject, JSType, JSMutableHandleValue) -> JSBool; - -pub type JSTypeOfOp = *u8; - -pub type JSFreeOp = struct_JSFreeOp; - -pub struct struct_JSFreeOp { - pub runtime: *JSRuntime, +pub type JSRawObject = *mut JSObject; +pub type JSPropertyOp = + Option JSBool>; +pub type JSStrictPropertyOp = + Option JSBool>; +pub type JSNewEnumerateOp = + Option JSBool>; +pub type JSEnumerateOp = + Option JSBool>; +pub type JSResolveOp = + Option JSBool>; +pub type JSNewResolveOp = + Option JSBool>; +pub type JSConvertOp = + Option JSBool>; +pub type JSTypeOfOp = + Option JSType>; +pub struct JSFreeOp { + pub runtime: *mut JSRuntime, } - -pub type JSFinalizeOp = extern "C" fn(*JSFreeOp, *JSObject); - -pub type JSStringFinalizer = struct_JSStringFinalizer; - -pub struct struct_JSStringFinalizer { - pub finalize: *u8, +pub type JSFinalizeOp = + Option; +pub struct JSStringFinalizer { + pub finalize: Option, } - -//XXXjdm JSAccessMode is an enum; uint32_t may not be correct. -pub type JSCheckAccessOp = extern "C" fn(*JSContext, **JSObject, *jsid, uint32_t, *mut JSVal) -> JSBool; - -pub type JSHasInstanceOp = extern "C" fn(*JSContext, **JSObject, *JSVal, *mut JSBool) -> JSBool; - -pub type JSTraceOp = extern "C" fn(*mut JSTracer, *JSObject); - -pub type JSTraceNamePrinter = *u8; - -pub type JSEqualityOp = *u8; - -pub type JSNative = extern "C" unsafe fn(*JSContext, c_uint, *mut JSVal) -> JSBool; - -pub type enum_JSContextOp = c_uint; -pub static JSCONTEXT_NEW: u32 = 0_u32; -pub static JSCONTEXT_DESTROY: u32 = 1_u32; - -pub type JSContextOp = enum_JSContextOp; - -pub type JSContextCallback = *u8; - -pub type enum_JSGCStatus = c_uint; -pub static JSGC_BEGIN: u32 = 0_u32; -pub static JSGC_END: u32 = 1_u32; - -pub type JSGCStatus = enum_JSGCStatus; - -pub type JSGCCallback = extern "C" fn(*JSRuntime, JSGCStatus); - -pub type enum_JSFinalizeStatus = c_uint; -pub static JSFINALIZE_START: u32 = 0_u32; -pub static JSFINALIZE_END: u32 = 1_u32; - -pub type JSFinalizeStatus = enum_JSFinalizeStatus; - -pub type JSFinalizeCallback = *u8; - -pub type JSTraceDataOp = *u8; - -pub type JSOperationCallback = *u8; - -pub type JSErrorReporter = extern "C" fn(*JSContext, *c_char, *JSErrorReport); - -pub type enum_JSExnType = c_int; -pub static JSEXN_NONE: i32 = -1_i32; -pub static JSEXN_ERR: i32 = 0_i32; -pub static JSEXN_INTERNALERR: i32 = 1_i32; -pub static JSEXN_EVALERR: i32 = 2_i32; -pub static JSEXN_RANGEERR: i32 = 3_i32; -pub static JSEXN_REFERENCEERR: i32 = 4_i32; -pub static JSEXN_SYNTAXERR: i32 = 5_i32; -pub static JSEXN_TYPEERR: i32 = 6_i32; -pub static JSEXN_URIERR: i32 = 7_i32; -pub static JSEXN_LIMIT: i32 = 8_i32; - -pub type JSExnType = enum_JSExnType; - -pub struct struct_JSErrorFormatString { +pub type JSCheckAccessOp = + Option JSBool>; +pub type JSHasInstanceOp = + Option JSBool>; +pub type JSTraceOp = + Option; +pub type JSTraceNamePrinter = + Option; +pub type JSEqualityOp = + Option JSBool>; +pub type JSNative = + Option JSBool>; +pub type Enum_JSContextOp = c_uint; +pub static JSCONTEXT_NEW: c_uint = 0; +pub static JSCONTEXT_DESTROY: c_uint = 1; +pub type JSContextOp = Enum_JSContextOp; +pub type JSContextCallback = + Option JSBool>; +pub type Enum_JSGCStatus = c_uint; +pub static JSGC_BEGIN: c_uint = 0; +pub static JSGC_END: c_uint = 1; +pub type JSGCStatus = Enum_JSGCStatus; +pub type JSGCCallback = + Option; +pub type Enum_JSFinalizeStatus = c_uint; +pub static JSFINALIZE_START: c_uint = 0; +pub static JSFINALIZE_END: c_uint = 1; +pub type JSFinalizeStatus = Enum_JSFinalizeStatus; +pub type JSFinalizeCallback = + Option; +pub type JSTraceDataOp = + Option; +pub type JSOperationCallback = + Option JSBool>; +pub type JSErrorReporter = + Option; +pub type Enum_JSExnType = c_int; +pub static JSEXN_NONE: c_int = -1; +pub static JSEXN_ERR: c_int = 0; +pub static JSEXN_INTERNALERR: c_int = 1; +pub static JSEXN_EVALERR: c_int = 2; +pub static JSEXN_RANGEERR: c_int = 3; +pub static JSEXN_REFERENCEERR: c_int = 4; +pub static JSEXN_SYNTAXERR: c_int = 5; +pub static JSEXN_TYPEERR: c_int = 6; +pub static JSEXN_URIERR: c_int = 7; +pub static JSEXN_LIMIT: c_int = 8; +pub type JSExnType = Enum_JSExnType; +pub struct JSErrorFormatString { pub format: *c_char, pub argCount: uint16_t, pub exnType: int16_t, } - -pub type JSErrorFormatString = struct_JSErrorFormatString; - -pub type JSErrorCallback = extern "C" fn(*mut c_void, *c_char, c_uint) -> *JSErrorFormatString; - -pub type JSLocaleToUpperCase = *u8; - -pub type JSLocaleToLowerCase = *u8; - -pub type JSLocaleCompare = *u8; - -pub type JSLocaleToUnicode = *u8; - -pub type JSDestroyPrincipalsOp = *u8; - -pub type JSSubsumePrincipalsOp = *u8; - -pub type JSObjectPrincipalsFinder = *u8; - -pub type JSCSPEvalChecker = *u8; - -pub type JSWrapObjectCallback = *u8; - +pub type JSErrorCallback = + Option *JSErrorFormatString>; +pub type JSLocaleToUpperCase = + Option JSBool>; +pub type JSLocaleToLowerCase = + Option JSBool>; +pub type JSLocaleCompare = + Option JSBool>; +pub type JSLocaleToUnicode = + Option JSBool>; +pub type JSDestroyPrincipalsOp = + Option; +pub type JSSubsumePrincipalsOp = + Option JSBool>; +pub type JSObjectPrincipalsFinder = + Option *mut JSPrincipals>; +pub type JSCSPEvalChecker = + Option JSBool>; +pub type JSWrapObjectCallback = + Option *mut JSObject>; pub type JSPreWrapCallback = - Option *mut JSObject>; - -pub type JSSameCompartmentWrapObjectCallback = extern "C" fn(*JSContext, *JSObject) -> *JSObject; - -pub type JSDestroyCompartmentCallback = *u8; - -pub type JSCompartmentNameCallback = *u8; - -pub type ReadStructuredCloneOp = *u8; - -pub type WriteStructuredCloneOp = *u8; - -pub type StructuredCloneErrorOp = *u8; - -/* FIXME: global variable JSVAL_NULL */ - -/* FIXME: global variable JSVAL_ZERO */ - -/* FIXME: global variable JSVAL_ONE */ - -/* FIXME: global variable JSVAL_FALSE */ - -/* FIXME: global variable JSVAL_TRUE */ - -/* FIXME: global variable JSVAL_VOID */ - -pub type JSIterateCompartmentCallback = *u8; - -pub type JSEnumerateDiagnosticMemoryCallback = *u8; - -pub type enum_JSGCRootType = c_uint; -pub static JS_GC_ROOT_VALUE_PTR: u32 = 0_u32; -pub static JS_GC_ROOT_GCTHING_PTR: u32 = 1_u32; - -pub type JSGCRootType = enum_JSGCRootType; - -pub type JSGCRootMapFun = *u8; - -pub type JSTraceCallback = *u8; - -pub struct struct_JSTracer { - pub runtime: *JSRuntime, + Option *mut JSObject>; +pub type JSSameCompartmentWrapObjectCallback = + Option *mut JSObject>; +pub type JSDestroyCompartmentCallback = + Option; +pub type JSCompartmentNameCallback = + Option; +pub type ReadStructuredCloneOp = + Option *mut JSObject>; +pub type WriteStructuredCloneOp = + Option JSBool>; +pub type StructuredCloneErrorOp = + Option; +pub type JSIterateCompartmentCallback = + Option; +pub type JSEnumerateDiagnosticMemoryCallback = + Option JSBool>; +pub type Enum_JSGCRootType = c_uint; +pub static JS_GC_ROOT_VALUE_PTR: c_uint = 0; +pub static JS_GC_ROOT_GCTHING_PTR: c_uint = 1; +pub type JSGCRootType = Enum_JSGCRootType; +pub type JSGCRootMapFun = + Option c_int>; +pub type JSTraceCallback = + Option; +pub struct JSTracer { + pub runtime: *mut JSRuntime, pub callback: JSTraceCallback, pub debugPrinter: JSTraceNamePrinter, pub debugPrintArg: *c_void, pub debugPrintIndex: size_t, pub eagerlyTraceWeakMaps: JSBool, + pub realLocation: *mut c_void, } - -pub type enum_JSGCParamKey = c_uint; -pub static JSGC_MAX_BYTES: u32 = 0_u32; -pub static JSGC_MAX_MALLOC_BYTES: u32 = 1_u32; -pub static JSGC_BYTES: u32 = 3_u32; -pub static JSGC_NUMBER: u32 = 4_u32; -pub static JSGC_MAX_CODE_CACHE_BYTES: u32 = 5_u32; -pub static JSGC_MODE: u32 = 6_u32; -pub static JSGC_UNUSED_CHUNKS: u32 = 7_u32; -pub static JSGC_TOTAL_CHUNKS: u32 = 8_u32; -pub static JSGC_SLICE_TIME_BUDGET: u32 = 9_u32; -pub static JSGC_MARK_STACK_LIMIT: u32 = 10_u32; -pub static JSGC_HIGH_FREQUENCY_TIME_LIMIT: u32 = 11_u32; -pub static JSGC_HIGH_FREQUENCY_LOW_LIMIT: u32 = 12_u32; -pub static JSGC_HIGH_FREQUENCY_HIGH_LIMIT: u32 = 13_u32; -pub static JSGC_HIGH_FREQUENCY_HEAP_GROWTH_MAX: u32 = 14_u32; -pub static JSGC_HIGH_FREQUENCY_HEAP_GROWTH_MIN: u32 = 15_u32; -pub static JSGC_LOW_FREQUENCY_HEAP_GROWTH: u32 = 16_u32; -pub static JSGC_DYNAMIC_HEAP_GROWTH: u32 = 17_u32; -pub static JSGC_DYNAMIC_MARK_SLICE: u32 = 18_u32; -pub static JSGC_ANALYSIS_PURGE_TRIGGER: u32 = 19_u32; - -pub type JSGCParamKey = enum_JSGCParamKey; - -pub type enum_JSGCMode = c_uint; -pub static JSGC_MODE_GLOBAL: u32 = 0_u32; -pub static JSGC_MODE_COMPARTMENT: u32 = 1_u32; -pub static JSGC_MODE_INCREMENTAL: u32 = 2_u32; - -pub type JSGCMode = enum_JSGCMode; - -pub type JSClassInternal = *u8; - +pub type Enum_JSGCParamKey = c_uint; +pub static JSGC_MAX_BYTES: c_uint = 0; +pub static JSGC_MAX_MALLOC_BYTES: c_uint = 1; +pub static JSGC_BYTES: c_uint = 3; +pub static JSGC_NUMBER: c_uint = 4; +pub static JSGC_MAX_CODE_CACHE_BYTES: c_uint = 5; +pub static JSGC_MODE: c_uint = 6; +pub static JSGC_UNUSED_CHUNKS: c_uint = 7; +pub static JSGC_TOTAL_CHUNKS: c_uint = 8; +pub static JSGC_SLICE_TIME_BUDGET: c_uint = 9; +pub static JSGC_MARK_STACK_LIMIT: c_uint = 10; +pub static JSGC_HIGH_FREQUENCY_TIME_LIMIT: c_uint = 11; +pub static JSGC_HIGH_FREQUENCY_LOW_LIMIT: c_uint = 12; +pub static JSGC_HIGH_FREQUENCY_HIGH_LIMIT: c_uint = 13; +pub static JSGC_HIGH_FREQUENCY_HEAP_GROWTH_MAX: c_uint = 14; +pub static JSGC_HIGH_FREQUENCY_HEAP_GROWTH_MIN: c_uint = 15; +pub static JSGC_LOW_FREQUENCY_HEAP_GROWTH: c_uint = 16; +pub static JSGC_DYNAMIC_HEAP_GROWTH: c_uint = 17; +pub static JSGC_DYNAMIC_MARK_SLICE: c_uint = 18; +pub static JSGC_ANALYSIS_PURGE_TRIGGER: c_uint = 19; +pub type JSGCParamKey = Enum_JSGCParamKey; +pub type Enum_JSGCMode = c_uint; +pub static JSGC_MODE_GLOBAL: c_uint = 0; +pub static JSGC_MODE_COMPARTMENT: c_uint = 1; +pub static JSGC_MODE_INCREMENTAL: c_uint = 2; +pub type JSGCMode = Enum_JSGCMode; +pub type JSClassInternal = Option; pub struct JSClass { pub name: *c_char, pub flags: uint32_t, - pub addProperty: Option, - pub delProperty: Option, - pub getProperty: Option, - pub setProperty: Option, - pub enumerate: Option, - pub resolve: Option, - pub convert: Option, - pub finalize: Option, - pub checkAccess: Option, - pub call: Option, - pub hasInstance: Option, - pub construct: Option, - pub trace: Option, - pub reserved: (*c_void,*c_void,*c_void,*c_void,*c_void,*c_void,*c_void,*c_void,*c_void,*c_void,*c_void,*c_void,*c_void,*c_void,*c_void,*c_void,*c_void,*c_void,*c_void,*c_void,*c_void,*c_void,*c_void,*c_void,*c_void,*c_void,*c_void,*c_void,*c_void,*c_void,*c_void,*c_void,*c_void,*c_void,*c_void,*c_void,*c_void,*c_void,*c_void,*c_void), + pub addProperty: JSPropertyOp, + pub delProperty: JSPropertyOp, + pub getProperty: JSPropertyOp, + pub setProperty: JSStrictPropertyOp, + pub enumerate: JSEnumerateOp, + pub resolve: JSResolveOp, + pub convert: JSConvertOp, + pub finalize: JSFinalizeOp, + pub checkAccess: JSCheckAccessOp, + pub call: JSNative, + pub hasInstance: JSHasInstanceOp, + pub construct: JSNative, + pub trace: JSTraceOp, + pub reserved: [*mut c_void, ..40u], } - -pub struct struct_JSConstDoubleSpec { +pub struct JSConstDoubleSpec { pub dval: c_double, pub name: *c_char, pub flags: uint8_t, - pub spare: (uint8_t,uint8_t,uint8_t), + pub spare: [uint8_t, ..3u], } - -pub type struct_JSJitInfo = c_void; - -//pub type JSJitInfo = struct_JSJitInfo; //XXXjdm - -// FIXME: We need these Clone impls for certain operations in Servo, -// but do they really make sense? pub struct JSStrictPropertyOpWrapper { - pub op: Option, + pub op: JSNative, pub info: *JSJitInfo, } - -impl Clone for JSStrictPropertyOpWrapper { - fn clone(&self) -> JSStrictPropertyOpWrapper { - JSStrictPropertyOpWrapper { - op: self.op, - info: self.info - } - } -} - pub struct JSPropertyOpWrapper { - pub op: Option, + pub op: JSNative, pub info: *JSJitInfo, } - -impl Clone for JSPropertyOpWrapper { - fn clone(&self) -> JSPropertyOpWrapper { - JSPropertyOpWrapper { - op: self.op, - info: self.info - } - } -} - pub struct JSNativeWrapper { - pub op: Option, + pub op: JSNative, pub info: *JSJitInfo, } - -impl Clone for JSNativeWrapper { - fn clone(&self) -> JSNativeWrapper { - JSNativeWrapper { - op: self.op, - info: self.info - } - } -} - -#[deriving(Clone)] pub struct JSPropertySpec { pub name: *c_char, pub tinyid: int8_t, @@ -561,8 +344,6 @@ pub struct JSPropertySpec { pub getter: JSPropertyOpWrapper, pub setter: JSStrictPropertyOpWrapper, } - -#[deriving(Clone)] pub struct JSFunctionSpec { pub name: *c_char, pub call: JSNativeWrapper, @@ -570,54 +351,45 @@ pub struct JSFunctionSpec { pub flags: uint16_t, pub selfHostedName: *c_char, } - -pub struct struct_JSPropertyDescriptor { - pub obj: *JSObject, +pub struct JSPropertyDescriptor { + pub obj: *mut JSObject, pub attrs: c_uint, pub shortid: c_uint, - pub getter: Option, - pub setter: Option, + pub getter: JSPropertyOp, + pub setter: JSStrictPropertyOp, pub value: JSVal, } - -pub struct struct_JSPrincipals { +pub struct JSPrincipals { pub refcount: c_int, } - -pub struct struct_JSSecurityCallbacks { +pub struct JSSecurityCallbacks { pub checkObjectAccess: JSCheckAccessOp, pub subsumePrincipals: JSSubsumePrincipalsOp, pub findObjectPrincipals: JSObjectPrincipalsFinder, pub contentSecurityPolicyAllows: JSCSPEvalChecker, } - -pub type enum_JSExecPart = c_uint; -pub static JSEXEC_PROLOG: u32 = 0_u32; -pub static JSEXEC_MAIN: u32 = 1_u32; - -pub static JS_DEFAULT_ZEAL_FREQ: u32 = 100; - -pub type JSExecPart = enum_JSExecPart; - -pub type JSONWriteCallback = *u8; - -pub struct struct_JSStructuredCloneCallbacks { +pub type Enum_JSExecPart = c_uint; +pub static JSEXEC_PROLOG: c_uint = 0; +pub static JSEXEC_MAIN: c_uint = 1; +pub type JSExecPart = Enum_JSExecPart; +pub type JSONWriteCallback = + Option JSBool>; +pub struct JSStructuredCloneCallbacks { pub read: ReadStructuredCloneOp, pub write: WriteStructuredCloneOp, pub reportError: StructuredCloneErrorOp, } - -pub struct struct_JSLocaleCallbacks { +pub struct JSLocaleCallbacks { pub localeToUpperCase: JSLocaleToUpperCase, pub localeToLowerCase: JSLocaleToLowerCase, pub localeCompare: JSLocaleCompare, pub localeToUnicode: JSLocaleToUnicode, pub localeGetErrorMessage: JSErrorCallback, } - -pub struct struct_JSErrorReport { +pub struct JSErrorReport { pub filename: *c_char, - pub originPrincipals: *JSPrincipals, + pub originPrincipals: *mut JSPrincipals, pub lineno: c_uint, pub linebuf: *c_char, pub tokenptr: *c_char, @@ -626,874 +398,856 @@ pub struct struct_JSErrorReport { pub flags: c_uint, pub errorNumber: c_uint, pub ucmessage: *jschar, - pub messageArgs: **jschar, + pub messageArgs: *mut *jschar, pub exnType: int16_t, pub column: c_uint, } +extern "C" { +pub fn JS_CreateHandleObject(cx: *mut JSContext, obj: *mut JSObject, phandle: *mut JSHandleObject) -> JSBool; -pub struct struct_unnamed1 { - pub payload: union_unnamed2, -} - -pub type union_unnamed2 = c_void /* FIXME: union type */; - -#[nolink] -extern { +pub fn JS_DestroyHandleObject(cx: *mut JSContext, handle: JSHandleObject); -pub fn JS_Assert(s: *c_char, file: *c_char, ln: c_int); +pub fn JS_CreateMutableHandleObject(cx: *mut JSContext, obj: *mut JSObject, phandle: *mut JSMutableHandleObject) -> JSBool; -//fn JS_Abort(); +pub fn JS_DestroyMutableHandleObject(cx: *mut JSContext, handle: JSMutableHandleObject); -//fn JS_CreateHandleObject(cx: *JSContext, obj: *JSObject, phandle: *JSHandleObject) -> JSBool; +pub fn JS_CreateHandleId(cx: *mut JSContext, id: jsid, phandle: *mut JSHandleId) -> JSBool; -//fn JS_DestroyHandleObject(cx: *JSContext, handle: JSHandleObject); +pub fn JS_DestroyHandleId(cx: *mut JSContext, handle: JSHandleId); -//fn JS_CreateMutableHandleObject(cx: *JSContext, obj: *JSObject, phandle: *JSMutableHandleObject) -> JSBool; +pub fn JS_StringHasBeenInterned(cx: *mut JSContext, str: *mut JSString) -> JSBool; -//fn JS_DestroyMutableHandleObject(cx: *JSContext, handle: JSMutableHandleObject); +pub fn INTERNED_STRING_TO_JSID(cx: *mut JSContext, str: *mut JSString) -> jsid; -//fn JS_CreateHandleId(cx: *JSContext, id: jsid, phandle: *JSHandleId) -> JSBool; - -//fn JS_DestroyHandleId(cx: *JSContext, handle: JSHandleId); - -pub fn JS_StringHasBeenInterned(cx: *JSContext, str: *JSString) -> JSBool; - -pub fn INTERNED_STRING_TO_JSID(cx: *JSContext, str: *JSString) -> jsid; - -pub fn JS_CallOnce(once_: *JSCallOnceType, func: JSInitCallback) -> JSBool; +pub fn JS_CallOnce(_once: *mut JSCallOnceType, func: JSInitCallback) -> JSBool; pub fn JS_Now() -> int64_t; -pub fn JS_GetNaNValue(cx: *JSContext) -> JSVal; +pub fn JS_GetNaNValue(cx: *mut JSContext) -> JSVal; -pub fn JS_GetNegativeInfinityValue(cx: *JSContext) -> JSVal; +pub fn JS_GetNegativeInfinityValue(cx: *mut JSContext) -> JSVal; -pub fn JS_GetPositiveInfinityValue(cx: *JSContext) -> JSVal; +pub fn JS_GetPositiveInfinityValue(cx: *mut JSContext) -> JSVal; -pub fn JS_GetEmptyStringValue(cx: *JSContext) -> JSVal; +pub fn JS_GetEmptyStringValue(cx: *mut JSContext) -> JSVal; -pub fn JS_GetEmptyString(rt: *JSRuntime) -> *JSString; +pub fn JS_GetEmptyString(rt: *mut JSRuntime) -> *mut JSString; -pub fn JS_ConvertArguments(cx: *JSContext, argc: c_uint, argv: *JSVal, format: *c_char/* FIXME: variadic function */) -> JSBool; +pub fn JS_ConvertArguments(cx: *mut JSContext, argc: c_uint, argv: *mut JSVal, format: *c_char, ...) -> JSBool; -pub fn JS_ConvertValue(cx: *JSContext, v: JSVal, _type: JSType, vp: *JSVal) -> JSBool; +pub fn JS_ConvertValue(cx: *mut JSContext, v: JSVal, _type: JSType, vp: *mut JSVal) -> JSBool; -pub fn JS_ValueToObject(cx: *JSContext, v: JSVal, objp: **JSObject) -> JSBool; +pub fn JS_ValueToObject(cx: *mut JSContext, v: JSVal, objp: *mut *mut JSObject) -> JSBool; -pub fn JS_ValueToFunction(cx: *JSContext, v: JSVal) -> *JSFunction; +pub fn JS_ValueToFunction(cx: *mut JSContext, v: JSVal) -> *mut JSFunction; -pub fn JS_ValueToConstructor(cx: *JSContext, v: JSVal) -> *JSFunction; +pub fn JS_ValueToConstructor(cx: *mut JSContext, v: JSVal) -> *mut JSFunction; -pub fn JS_ValueToString(cx: *JSContext, v: JSVal) -> *JSString; +pub fn JS_ValueToString(cx: *mut JSContext, v: JSVal) -> *mut JSString; -pub fn JS_ValueToSource(cx: *JSContext, v: JSVal) -> *JSString; +pub fn JS_ValueToSource(cx: *mut JSContext, v: JSVal) -> *mut JSString; -pub fn JS_ValueToNumber(cx: *JSContext, v: JSVal, dp: *c_double) -> JSBool; +pub fn JS_ValueToNumber(cx: *mut JSContext, v: JSVal, dp: *mut c_double) -> JSBool; -pub fn JS_DoubleIsInt32(d: c_double, ip: *int32_t) -> JSBool; +pub fn JS_DoubleIsInt32(d: c_double, ip: *mut int32_t) -> JSBool; pub fn JS_DoubleToInt32(d: c_double) -> int32_t; pub fn JS_DoubleToUint32(d: c_double) -> uint32_t; -pub fn JS_ValueToECMAInt32(cx: *JSContext, v: JSVal, ip: *int32_t) -> JSBool; +pub fn JS_ValueToECMAInt32(cx: *mut JSContext, v: JSVal, ip: *mut int32_t) -> JSBool; -pub fn JS_ValueToInt64(cx: *JSContext, v: JSVal, ip: *int64_t) -> JSBool; +pub fn JS_ValueToInt64(cx: *mut JSContext, v: JSVal, ip: *mut int64_t) -> JSBool; -pub fn JS_ValueToUint64(cx: *JSContext, v: JSVal, ip: *uint64_t) -> JSBool; +pub fn JS_ValueToUint64(cx: *mut JSContext, v: JSVal, ip: *mut uint64_t) -> JSBool; -pub fn JS_ValueToECMAUint32(cx: *JSContext, v: JSVal, ip: *uint32_t) -> JSBool; +pub fn JS_ValueToECMAUint32(cx: *mut JSContext, v: JSVal, ip: *mut uint32_t) -> JSBool; -pub fn JS_ValueToInt32(cx: *JSContext, v: JSVal, ip: *int32_t) -> JSBool; +pub fn JS_ValueToInt32(cx: *mut JSContext, v: JSVal, ip: *mut int32_t) -> JSBool; -pub fn JS_ValueToUint16(cx: *JSContext, v: JSVal, ip: *uint16_t) -> JSBool; +pub fn JS_ValueToUint16(cx: *mut JSContext, v: JSVal, ip: *mut uint16_t) -> JSBool; -pub fn JS_ValueToBoolean(cx: *JSContext, v: JSVal, bp: *JSBool) -> JSBool; +pub fn JS_ValueToBoolean(cx: *mut JSContext, v: JSVal, bp: *mut JSBool) -> JSBool; -pub fn JS_TypeOfValue(cx: *JSContext, v: JSVal) -> JSType; +pub fn JS_TypeOfValue(cx: *mut JSContext, v: JSVal) -> JSType; -pub fn JS_GetTypeName(cx: *JSContext, _type: JSType) -> *c_char; +pub fn JS_GetTypeName(cx: *mut JSContext, _type: JSType) -> *c_char; -pub fn JS_StrictlyEqual(cx: *JSContext, v1: JSVal, v2: JSVal, equal: *JSBool) -> JSBool; +pub fn JS_StrictlyEqual(cx: *mut JSContext, v1: JSVal, v2: JSVal, equal: *mut JSBool) -> JSBool; -pub fn JS_LooselyEqual(cx: *JSContext, v1: JSVal, v2: JSVal, equal: *JSBool) -> JSBool; +pub fn JS_LooselyEqual(cx: *mut JSContext, v1: JSVal, v2: JSVal, equal: *mut JSBool) -> JSBool; -pub fn JS_SameValue(cx: *JSContext, v1: JSVal, v2: JSVal, same: *JSBool) -> JSBool; +pub fn JS_SameValue(cx: *mut JSContext, v1: JSVal, v2: JSVal, same: *mut JSBool) -> JSBool; -pub fn JS_IsBuiltinEvalFunction(fun: *JSFunction) -> JSBool; +pub fn JS_IsBuiltinEvalFunction(fun: *mut JSFunction) -> JSBool; -pub fn JS_IsBuiltinFunctionConstructor(fun: *JSFunction) -> JSBool; +pub fn JS_IsBuiltinFunctionConstructor(fun: *mut JSFunction) -> JSBool; -pub fn JS_Init(maxbytes: uint32_t) -> *JSRuntime; +pub fn JS_Init(maxbytes: uint32_t) -> *mut JSRuntime; -pub fn JS_Finish(rt: *JSRuntime); +pub fn JS_Finish(rt: *mut JSRuntime); pub fn JS_ShutDown(); -pub fn JS_GetRuntimePrivate(rt: *JSRuntime) -> *c_void; +pub fn JS_GetRuntimePrivate(rt: *mut JSRuntime) -> *mut c_void; -pub fn JS_GetRuntime(cx: *JSContext) -> *JSRuntime; +pub fn JS_GetRuntime(cx: *mut JSContext) -> *mut JSRuntime; -pub fn JS_SetRuntimePrivate(rt: *JSRuntime, data: *c_void); +pub fn JS_SetRuntimePrivate(rt: *mut JSRuntime, data: *mut c_void); -pub fn JS_BeginRequest(cx: *JSContext); +pub fn JS_BeginRequest(cx: *mut JSContext); -pub fn JS_EndRequest(cx: *JSContext); +pub fn JS_EndRequest(cx: *mut JSContext); -pub fn JS_YieldRequest(cx: *JSContext); +pub fn JS_YieldRequest(cx: *mut JSContext); -pub fn JS_SuspendRequest(cx: *JSContext) -> c_uint; +pub fn JS_SuspendRequest(cx: *mut JSContext) -> c_uint; -pub fn JS_ResumeRequest(cx: *JSContext, saveDepth: c_uint); +pub fn JS_ResumeRequest(cx: *mut JSContext, saveDepth: c_uint); -pub fn JS_IsInRequest(rt: *JSRuntime) -> JSBool; +pub fn JS_IsInRequest(rt: *mut JSRuntime) -> JSBool; -pub fn JS_IsInSuspendedRequest(rt: *JSRuntime) -> JSBool; +pub fn JS_IsInSuspendedRequest(rt: *mut JSRuntime) -> JSBool; -pub fn JS_SetContextCallback(rt: *JSRuntime, cxCallback: JSContextCallback) -> JSContextCallback; +pub fn JS_SetContextCallback(rt: *mut JSRuntime, cxCallback: JSContextCallback) -> JSContextCallback; -pub fn JS_NewContext(rt: *JSRuntime, stackChunkSize: size_t) -> *JSContext; +pub fn JS_NewContext(rt: *mut JSRuntime, stackChunkSize: size_t) -> *mut JSContext; -pub fn JS_DestroyContext(cx: *JSContext); +pub fn JS_DestroyContext(cx: *mut JSContext); -pub fn JS_DestroyContextNoGC(cx: *JSContext); +pub fn JS_DestroyContextNoGC(cx: *mut JSContext); -pub fn JS_GetContextPrivate(cx: *JSContext) -> *c_void; +pub fn JS_GetContextPrivate(cx: *mut JSContext) -> *mut c_void; -pub fn JS_SetContextPrivate(cx: *JSContext, data: *c_void); +pub fn JS_SetContextPrivate(cx: *mut JSContext, data: *mut c_void); -pub fn JS_GetSecondContextPrivate(cx: *JSContext) -> *c_void; +pub fn JS_GetSecondContextPrivate(cx: *mut JSContext) -> *mut c_void; -pub fn JS_SetSecondContextPrivate(cx: *JSContext, data: *c_void); +pub fn JS_SetSecondContextPrivate(cx: *mut JSContext, data: *mut c_void); -pub fn JS_ContextIterator(rt: *JSRuntime, iterp: **JSContext) -> *JSContext; +pub fn JS_ContextIterator(rt: *mut JSRuntime, iterp: *mut *mut JSContext) -> *mut JSContext; -pub fn JS_GetVersion(cx: *JSContext) -> JSVersion; +pub fn JS_GetVersion(cx: *mut JSContext) -> JSVersion; -pub fn JS_SetVersion(cx: *JSContext, version: JSVersion) -> JSVersion; +pub fn JS_SetVersion(cx: *mut JSContext, version: JSVersion) -> JSVersion; pub fn JS_VersionToString(version: JSVersion) -> *c_char; pub fn JS_StringToVersion(string: *c_char) -> JSVersion; -pub fn JS_GetOptions(cx: *JSContext) -> uint32_t; +pub fn JS_GetOptions(cx: *mut JSContext) -> uint32_t; -pub fn JS_SetOptions(cx: *JSContext, options: uint32_t) -> uint32_t; +pub fn JS_SetOptions(cx: *mut JSContext, options: uint32_t) -> uint32_t; -pub fn JS_ToggleOptions(cx: *JSContext, options: uint32_t) -> uint32_t; +pub fn JS_ToggleOptions(cx: *mut JSContext, options: uint32_t) -> uint32_t; -pub fn JS_SetJitHardening(rt: *JSRuntime, enabled: JSBool); +pub fn JS_SetJitHardening(rt: *mut JSRuntime, enabled: JSBool); pub fn JS_GetImplementationVersion() -> *c_char; -pub fn JS_SetDestroyCompartmentCallback(rt: *JSRuntime, callback: JSDestroyCompartmentCallback); +pub fn JS_SetDestroyCompartmentCallback(rt: *mut JSRuntime, callback: JSDestroyCompartmentCallback); -pub fn JS_SetCompartmentNameCallback(rt: *JSRuntime, callback: JSCompartmentNameCallback); +pub fn JS_SetCompartmentNameCallback(rt: *mut JSRuntime, callback: JSCompartmentNameCallback); -pub fn JS_SetWrapObjectCallbacks(rt: *JSRuntime, callback: JSWrapObjectCallback, sccallback: JSSameCompartmentWrapObjectCallback, precallback: JSPreWrapCallback) -> JSWrapObjectCallback; +pub fn JS_SetWrapObjectCallbacks(rt: *mut JSRuntime, callback: JSWrapObjectCallback, sccallback: JSSameCompartmentWrapObjectCallback, precallback: JSPreWrapCallback) -> JSWrapObjectCallback; -pub fn JS_EnterCrossCompartmentCall(cx: *JSContext, target: JSRawObject) -> *JSCrossCompartmentCall; +pub fn JS_EnterCrossCompartmentCall(cx: *mut JSContext, target: JSRawObject) -> *mut JSCrossCompartmentCall; -pub fn JS_LeaveCrossCompartmentCall(call: *JSCrossCompartmentCall); +pub fn JS_LeaveCrossCompartmentCall(call: *mut JSCrossCompartmentCall); -pub fn JS_SetCompartmentPrivate(compartment: *JSCompartment, data: *c_void); +pub fn JS_SetCompartmentPrivate(compartment: *mut JSCompartment, data: *mut c_void); -pub fn JS_GetCompartmentPrivate(compartment: *JSCompartment) -> *c_void; +pub fn JS_GetCompartmentPrivate(compartment: *mut JSCompartment) -> *mut c_void; -pub fn JS_WrapObject(cx: *JSContext, objp: **JSObject) -> JSBool; +pub fn JS_WrapObject(cx: *mut JSContext, objp: *mut *mut JSObject) -> JSBool; -pub fn JS_WrapValue(cx: *JSContext, vp: *JSVal) -> JSBool; +pub fn JS_WrapValue(cx: *mut JSContext, vp: *mut JSVal) -> JSBool; -pub fn JS_TransplantObject(cx: *JSContext, origobj: *JSObject, target: *JSObject) -> *JSObject; +pub fn JS_TransplantObject(cx: *mut JSContext, origobj: *mut JSObject, target: *mut JSObject) -> *mut JSObject; -pub fn js_TransplantObjectWithWrapper(cx: *JSContext, origobj: *JSObject, origwrapper: *JSObject, targetobj: *JSObject, targetwrapper: *JSObject) -> *JSObject; +pub fn js_TransplantObjectWithWrapper(cx: *mut JSContext, origobj: *mut JSObject, origwrapper: *mut JSObject, targetobj: *mut JSObject, targetwrapper: *mut JSObject) -> *mut JSObject; -pub fn JS_RefreshCrossCompartmentWrappers(cx: *JSContext, ob: *JSObject) -> JSBool; +pub fn JS_RefreshCrossCompartmentWrappers(cx: *mut JSContext, ob: *mut JSObject) -> JSBool; -pub fn JS_IterateCompartments(rt: *JSRuntime, data: *c_void, compartmentCallback: JSIterateCompartmentCallback); +pub fn JS_IterateCompartments(rt: *mut JSRuntime, data: *mut c_void, compartmentCallback: JSIterateCompartmentCallback); -pub fn JS_GetGlobalObject(cx: *JSContext) -> *JSObject; +pub fn JS_GetGlobalObject(cx: *mut JSContext) -> *mut JSObject; -pub fn JS_SetGlobalObject(cx: *JSContext, obj: JSRawObject); +pub fn JS_SetGlobalObject(cx: *mut JSContext, obj: JSRawObject); -pub fn JS_InitStandardClasses(cx: *JSContext, obj: *JSObject) -> JSBool; +pub fn JS_InitStandardClasses(cx: *mut JSContext, obj: *mut JSObject) -> JSBool; -pub fn JS_ResolveStandardClass(cx: *JSContext, obj: *JSObject, id: jsid, resolved: *JSBool) -> JSBool; +pub fn JS_ResolveStandardClass(cx: *mut JSContext, obj: *mut JSObject, id: jsid, resolved: *mut JSBool) -> JSBool; -pub fn JS_EnumerateStandardClasses(cx: *JSContext, obj: *JSObject) -> JSBool; +pub fn JS_EnumerateStandardClasses(cx: *mut JSContext, obj: *mut JSObject) -> JSBool; -pub fn JS_EnumerateResolvedStandardClasses(cx: *JSContext, obj: *JSObject, ida: *JSIdArray) -> *JSIdArray; +pub fn JS_EnumerateResolvedStandardClasses(cx: *mut JSContext, obj: *mut JSObject, ida: *mut JSIdArray) -> *mut JSIdArray; -pub fn JS_GetClassObject(cx: *JSContext, obj: JSRawObject, key: JSProtoKey, objp: **JSObject) -> JSBool; +pub fn JS_GetClassObject(cx: *mut JSContext, obj: JSRawObject, key: JSProtoKey, objp: *mut *mut JSObject) -> JSBool; -pub fn JS_GetClassPrototype(cx: *JSContext, key: JSProtoKey, objp: **JSObject) -> JSBool; +pub fn JS_GetClassPrototype(cx: *mut JSContext, key: JSProtoKey, objp: *mut *mut JSObject) -> JSBool; -pub fn JS_IdentifyClassPrototype(cx: *JSContext, obj: *JSObject) -> JSProtoKey; +pub fn JS_IdentifyClassPrototype(cx: *mut JSContext, obj: *mut JSObject) -> JSProtoKey; -pub fn JS_GetFunctionPrototype(cx: *JSContext, forObj: JSRawObject) -> *JSObject; +pub fn JS_GetFunctionPrototype(cx: *mut JSContext, forObj: JSRawObject) -> *mut JSObject; -pub fn JS_GetObjectPrototype(cx: *JSContext, forObj: JSRawObject) -> *JSObject; +pub fn JS_GetObjectPrototype(cx: *mut JSContext, forObj: JSRawObject) -> *mut JSObject; -pub fn JS_GetGlobalForObject(cx: *JSContext, obj: JSRawObject) -> *JSObject; +pub fn JS_GetGlobalForObject(cx: *mut JSContext, obj: JSRawObject) -> *mut JSObject; -pub fn JS_GetGlobalForCompartmentOrNull(cx: *JSContext, c: *JSCompartment) -> *JSObject; +pub fn JS_GetGlobalForCompartmentOrNull(cx: *mut JSContext, c: *mut JSCompartment) -> *mut JSObject; -pub fn JS_GetGlobalForScopeChain(cx: *JSContext) -> *JSObject; +pub fn JS_GetGlobalForScopeChain(cx: *mut JSContext) -> *mut JSObject; -pub fn JS_GetScriptedGlobal(cx: *JSContext) -> *JSObject; +pub fn JS_GetScriptedGlobal(cx: *mut JSContext) -> *mut JSObject; -pub fn JS_InitReflect(cx: *JSContext, global: *JSObject) -> *JSObject; +pub fn JS_InitReflect(cx: *mut JSContext, global: *mut JSObject) -> *mut JSObject; pub fn JS_EnumerateDiagnosticMemoryRegions(callback: JSEnumerateDiagnosticMemoryCallback); -// FIXME: Couldn't run on rust_stack until rust issue #6470 fixed. -//#[rust_stack] -pub fn JS_ComputeThis(cx: *JSContext, vp: *JSVal) -> JSVal; +pub fn JS_ComputeThis(cx: *mut JSContext, vp: *mut JSVal) -> JSVal; -pub fn JS_MallocInCompartment(comp: *JSCompartment, nbytes: size_t); +pub fn JS_MallocInCompartment(comp: *mut JSCompartment, nbytes: size_t); -pub fn JS_FreeInCompartment(comp: *JSCompartment, nbytes: size_t); +pub fn JS_FreeInCompartment(comp: *mut JSCompartment, nbytes: size_t); -pub fn JS_malloc(cx: *JSContext, nbytes: size_t) -> *c_void; +pub fn JS_malloc(cx: *mut JSContext, nbytes: size_t) -> *mut c_void; -pub fn JS_realloc(cx: *JSContext, p: *c_void, nbytes: size_t) -> *c_void; +pub fn JS_realloc(cx: *mut JSContext, p: *mut c_void, nbytes: size_t) -> *mut c_void; -pub fn JS_free(cx: *JSContext, p: *c_void); +pub fn JS_free(cx: *mut JSContext, p: *mut c_void); -pub fn JS_freeop(fop: *JSFreeOp, p: *c_void); +pub fn JS_freeop(fop: *mut JSFreeOp, p: *mut c_void); -pub fn JS_GetDefaultFreeOp(rt: *JSRuntime) -> *JSFreeOp; +pub fn JS_GetDefaultFreeOp(rt: *mut JSRuntime) -> *mut JSFreeOp; -pub fn JS_updateMallocCounter(cx: *JSContext, nbytes: size_t); +pub fn JS_updateMallocCounter(cx: *mut JSContext, nbytes: size_t); -pub fn JS_strdup(cx: *JSContext, s: *c_char) -> *c_char; +pub fn JS_strdup(cx: *mut JSContext, s: *c_char) -> *mut c_char; -pub fn JS_AddValueRoot(cx: *JSContext, vp: *JSVal) -> JSBool; +pub fn JS_AddValueRoot(cx: *mut JSContext, vp: *mut JSVal) -> JSBool; -pub fn JS_AddStringRoot(cx: *JSContext, rp: **JSString) -> JSBool; +pub fn JS_AddStringRoot(cx: *mut JSContext, rp: *mut *mut JSString) -> JSBool; -pub fn JS_AddObjectRoot(cx: *JSContext, rp: **JSObject) -> JSBool; +pub fn JS_AddObjectRoot(cx: *mut JSContext, rp: *mut *mut JSObject) -> JSBool; -pub fn JS_AddGCThingRoot(cx: *JSContext, rp: **c_void) -> JSBool; +pub fn JS_AddGCThingRoot(cx: *mut JSContext, rp: *mut *mut c_void) -> JSBool; -pub fn JS_AddNamedValueRoot(cx: *JSContext, vp: *JSVal, name: *c_char) -> JSBool; +pub fn JS_AddNamedValueRoot(cx: *mut JSContext, vp: *mut JSVal, name: *c_char) -> JSBool; -pub fn JS_AddNamedStringRoot(cx: *JSContext, rp: **JSString, name: *c_char) -> JSBool; +pub fn JS_AddNamedStringRoot(cx: *mut JSContext, rp: *mut *mut JSString, name: *c_char) -> JSBool; -pub fn JS_AddNamedObjectRoot(cx: *JSContext, rp: **JSObject, name: *c_char) -> JSBool; +pub fn JS_AddNamedObjectRoot(cx: *mut JSContext, rp: *mut *mut JSObject, name: *c_char) -> JSBool; -pub fn JS_AddNamedScriptRoot(cx: *JSContext, rp: **JSScript, name: *c_char) -> JSBool; +pub fn JS_AddNamedScriptRoot(cx: *mut JSContext, rp: *mut *mut JSScript, name: *c_char) -> JSBool; -pub fn JS_AddNamedGCThingRoot(cx: *JSContext, rp: **c_void, name: *c_char) -> JSBool; +pub fn JS_AddNamedGCThingRoot(cx: *mut JSContext, rp: *mut *mut c_void, name: *c_char) -> JSBool; -pub fn JS_RemoveValueRoot(cx: *JSContext, vp: *JSVal); +pub fn JS_RemoveValueRoot(cx: *mut JSContext, vp: *mut JSVal); -pub fn JS_RemoveStringRoot(cx: *JSContext, rp: **JSString); +pub fn JS_RemoveStringRoot(cx: *mut JSContext, rp: *mut *mut JSString); -pub fn JS_RemoveObjectRoot(cx: *JSContext, rp: **JSObject); +pub fn JS_RemoveObjectRoot(cx: *mut JSContext, rp: *mut *mut JSObject); -pub fn JS_RemoveScriptRoot(cx: *JSContext, rp: **JSScript); +pub fn JS_RemoveScriptRoot(cx: *mut JSContext, rp: *mut *mut JSScript); -pub fn JS_RemoveGCThingRoot(cx: *JSContext, rp: **c_void); +pub fn JS_RemoveGCThingRoot(cx: *mut JSContext, rp: *mut *mut c_void); -pub fn JS_RemoveValueRootRT(rt: *JSRuntime, vp: *JSVal); +pub fn JS_RemoveValueRootRT(rt: *mut JSRuntime, vp: *mut JSVal); -pub fn JS_RemoveStringRootRT(rt: *JSRuntime, rp: **JSString); +pub fn JS_RemoveStringRootRT(rt: *mut JSRuntime, rp: *mut *mut JSString); -pub fn JS_RemoveObjectRootRT(rt: *JSRuntime, rp: **JSObject); +pub fn JS_RemoveObjectRootRT(rt: *mut JSRuntime, rp: *mut *mut JSObject); -pub fn js_AddRootRT(rt: *JSRuntime, vp: *JSVal, name: *c_char) -> JSBool; +pub fn js_AddRootRT(rt: *mut JSRuntime, vp: *mut JSVal, name: *c_char) -> JSBool; -pub fn js_AddGCThingRootRT(rt: *JSRuntime, rp: **c_void, name: *c_char) -> JSBool; +pub fn js_AddGCThingRootRT(rt: *mut JSRuntime, rp: *mut *mut c_void, name: *c_char) -> JSBool; -pub fn js_RemoveRoot(rt: *JSRuntime, rp: *c_void); +pub fn js_RemoveRoot(rt: *mut JSRuntime, rp: *mut c_void); -pub fn JS_AnchorPtr(p: *c_void); +pub fn JS_AnchorPtr(p: *mut c_void); -pub fn JS_MapGCRoots(rt: *JSRuntime, map: JSGCRootMapFun, data: *c_void) -> uint32_t; +pub fn JS_MapGCRoots(rt: *mut JSRuntime, map: JSGCRootMapFun, data: *mut c_void) -> uint32_t; -pub fn JS_LockGCThing(cx: *JSContext, thing: *c_void) -> JSBool; +pub fn JS_LockGCThing(cx: *mut JSContext, thing: *mut c_void) -> JSBool; -pub fn JS_LockGCThingRT(rt: *JSRuntime, thing: *c_void) -> JSBool; +pub fn JS_LockGCThingRT(rt: *mut JSRuntime, thing: *mut c_void) -> JSBool; -pub fn JS_UnlockGCThing(cx: *JSContext, thing: *c_void) -> JSBool; +pub fn JS_UnlockGCThing(cx: *mut JSContext, thing: *mut c_void) -> JSBool; -pub fn JS_UnlockGCThingRT(rt: *JSRuntime, thing: *c_void) -> JSBool; +pub fn JS_UnlockGCThingRT(rt: *mut JSRuntime, thing: *mut c_void) -> JSBool; -pub fn JS_SetExtraGCRootsTracer(rt: *JSRuntime, traceOp: JSTraceDataOp, data: *c_void); +pub fn JS_SetExtraGCRootsTracer(rt: *mut JSRuntime, traceOp: JSTraceDataOp, data: *mut c_void); -pub fn JS_CallTracer(trc: *JSTracer, thing: *c_void, kind: JSGCTraceKind); +pub fn JS_CallTracer(trc: *mut JSTracer, thing: *mut c_void, kind: JSGCTraceKind); -pub fn JS_TracerInit(trc: *JSTracer, rt: *JSRuntime, callback: JSTraceCallback); +pub fn JS_TracerInit(trc: *mut JSTracer, rt: *mut JSRuntime, callback: JSTraceCallback); -pub fn JS_TraceChildren(trc: *JSTracer, thing: *c_void, kind: JSGCTraceKind); +pub fn JS_TraceChildren(trc: *mut JSTracer, thing: *mut c_void, kind: JSGCTraceKind); -pub fn JS_TraceRuntime(trc: *JSTracer); +pub fn JS_TraceRuntime(trc: *mut JSTracer); -pub fn JS_GetTraceThingInfo(buf: *c_char, bufsize: size_t, trc: *JSTracer, thing: *c_void, kind: JSGCTraceKind, includeDetails: JSBool); +pub fn JS_GetTraceThingInfo(buf: *mut c_char, bufsize: size_t, trc: *mut JSTracer, thing: *mut c_void, kind: JSGCTraceKind, includeDetails: JSBool); -pub fn JS_GetTraceEdgeName(trc: *JSTracer, buffer: *c_char, bufferSize: c_int) -> *c_char; +pub fn JS_GetTraceEdgeName(trc: *mut JSTracer, buffer: *mut c_char, bufferSize: c_int) -> *c_char; -pub fn JS_GC(rt: *JSRuntime); +pub fn JS_GC(rt: *mut JSRuntime); -pub fn JS_MaybeGC(cx: *JSContext); +pub fn JS_MaybeGC(cx: *mut JSContext); -pub fn JS_SetGCZeal(cx: *JSContext, zeal: u8, frequency: u32); +pub fn JS_SetGCZeal(cx: *mut JSContext, zeal: uint8_t, frequency: uint32_t); -pub fn JS_InhibitGC(cx: *JSContext); +pub fn JS_InhibitGC(cx: *mut JSContext); -pub fn JS_AllowGC(cx: *JSContext); +pub fn JS_AllowGC(cx: *mut JSContext); -pub fn JS_SetGCCallback(rt: *JSRuntime, cb: JSGCCallback); +pub fn JS_SetGCCallback(rt: *mut JSRuntime, cb: JSGCCallback); -pub fn JS_SetFinalizeCallback(rt: *JSRuntime, cb: JSFinalizeCallback); +pub fn JS_SetFinalizeCallback(rt: *mut JSRuntime, cb: JSFinalizeCallback); -pub fn JS_IsGCMarkingTracer(trc: *JSTracer) -> JSBool; +pub fn JS_IsGCMarkingTracer(trc: *mut JSTracer) -> JSBool; -pub fn JS_IsAboutToBeFinalized(thing: *c_void) -> JSBool; +pub fn JS_IsAboutToBeFinalized(thing: *mut c_void) -> JSBool; -pub fn JS_SetGCParameter(rt: *JSRuntime, key: JSGCParamKey, value: uint32_t); +pub fn JS_SetGCParameter(rt: *mut JSRuntime, key: JSGCParamKey, value: uint32_t); -pub fn JS_GetGCParameter(rt: *JSRuntime, key: JSGCParamKey) -> uint32_t; +pub fn JS_GetGCParameter(rt: *mut JSRuntime, key: JSGCParamKey) -> uint32_t; -pub fn JS_SetGCParameterForThread(cx: *JSContext, key: JSGCParamKey, value: uint32_t); +pub fn JS_SetGCParameterForThread(cx: *mut JSContext, key: JSGCParamKey, value: uint32_t); -pub fn JS_GetGCParameterForThread(cx: *JSContext, key: JSGCParamKey) -> uint32_t; +pub fn JS_GetGCParameterForThread(cx: *mut JSContext, key: JSGCParamKey) -> uint32_t; -pub fn JS_NewExternalString(cx: *JSContext, chars: *jschar, length: size_t, fin: *JSStringFinalizer) -> *JSString; +pub fn JS_NewExternalString(cx: *mut JSContext, chars: *jschar, length: size_t, fin: *JSStringFinalizer) -> *mut JSString; -pub fn JS_IsExternalString(str: *JSString) -> JSBool; +pub fn JS_IsExternalString(str: *mut JSString) -> JSBool; -pub fn JS_GetExternalStringFinalizer(str: *JSString) -> *JSStringFinalizer; +pub fn JS_GetExternalStringFinalizer(str: *mut JSString) -> *JSStringFinalizer; -pub fn JS_SetNativeStackQuota(cx: *JSRuntime, stackSize: size_t); +pub fn JS_SetNativeStackQuota(cx: *mut JSRuntime, stackSize: size_t); -pub fn JS_IdArrayLength(cx: *JSContext, ida: *JSIdArray) -> c_int; +pub fn JS_IdArrayLength(cx: *mut JSContext, ida: *mut JSIdArray) -> c_int; -pub fn JS_IdArrayGet(cx: *JSContext, ida: *JSIdArray, index: c_int) -> jsid; +pub fn JS_IdArrayGet(cx: *mut JSContext, ida: *mut JSIdArray, index: c_int) -> jsid; -pub fn JS_DestroyIdArray(cx: *JSContext, ida: *JSIdArray); +pub fn JS_DestroyIdArray(cx: *mut JSContext, ida: *mut JSIdArray); -pub fn JS_ValueToId(cx: *JSContext, v: JSVal, idp: *jsid) -> JSBool; +pub fn JS_ValueToId(cx: *mut JSContext, v: JSVal, idp: *mut jsid) -> JSBool; -pub fn JS_IdToValue(cx: *JSContext, id: jsid, vp: *JSVal) -> JSBool; +pub fn JS_IdToValue(cx: *mut JSContext, id: jsid, vp: *mut JSVal) -> JSBool; -pub fn JS_DefaultValue(cx: *JSContext, obj: *JSObject, hint: JSType, vp: *JSVal) -> JSBool; +pub fn JS_DefaultValue(cx: *mut JSContext, obj: *mut JSObject, hint: JSType, vp: *mut JSVal) -> JSBool; -pub fn JS_PropertyStub(cx: *JSContext, obj: JSHandleObject, id: JSHandleId, vp: JSMutableHandleValue) -> JSBool; +pub fn JS_PropertyStub(cx: *mut JSContext, obj: JSHandleObject, id: JSHandleId, vp: JSMutableHandleValue) -> JSBool; -pub fn JS_StrictPropertyStub(cx: *JSContext, obj: JSHandleObject, id: JSHandleId, strict: JSBool, vp: JSMutableHandleValue) -> JSBool; +pub fn JS_StrictPropertyStub(cx: *mut JSContext, obj: JSHandleObject, id: JSHandleId, strict: JSBool, vp: JSMutableHandleValue) -> JSBool; -pub fn JS_EnumerateStub(cx: *JSContext, obj: JSHandleObject) -> JSBool; +pub fn JS_EnumerateStub(cx: *mut JSContext, obj: JSHandleObject) -> JSBool; -pub fn JS_ResolveStub(cx: *JSContext, obj: JSHandleObject, id: JSHandleId) -> JSBool; +pub fn JS_ResolveStub(cx: *mut JSContext, obj: JSHandleObject, id: JSHandleId) -> JSBool; -pub fn JS_ConvertStub(cx: *JSContext, obj: JSHandleObject, _type: JSType, vp: JSMutableHandleValue) -> JSBool; +pub fn JS_ConvertStub(cx: *mut JSContext, obj: JSHandleObject, _type: JSType, vp: JSMutableHandleValue) -> JSBool; -pub fn JS_InitClass(cx: *JSContext, obj: *JSObject, parent_proto: *JSObject, clasp: *JSClass, constructor: JSNative, nargs: c_uint, ps: *JSPropertySpec, fs: *JSFunctionSpec, static_ps: *JSPropertySpec, static_fs: *JSFunctionSpec) -> *JSObject; +pub fn JS_InitClass(cx: *mut JSContext, obj: *mut JSObject, parent_proto: *mut JSObject, clasp: *JSClass, constructor: JSNative, nargs: c_uint, ps: *JSPropertySpec, fs: *JSFunctionSpec, static_ps: *JSPropertySpec, static_fs: *JSFunctionSpec) -> *mut JSObject; -pub fn JS_LinkConstructorAndPrototype(cx: *JSContext, ctor: *JSObject, proto: *JSObject) -> JSBool; +pub fn JS_LinkConstructorAndPrototype(cx: *mut JSContext, ctor: *mut JSObject, proto: *mut JSObject) -> JSBool; pub fn JS_GetClass(obj: JSRawObject) -> *JSClass; -pub fn JS_InstanceOf(cx: *JSContext, obj: *JSObject, clasp: *JSClass, argv: *JSVal) -> JSBool; +pub fn JS_InstanceOf(cx: *mut JSContext, obj: *mut JSObject, clasp: *JSClass, argv: *mut JSVal) -> JSBool; -pub fn JS_HasInstance(cx: *JSContext, obj: *JSObject, v: JSVal, bp: *JSBool) -> JSBool; +pub fn JS_HasInstance(cx: *mut JSContext, obj: *mut JSObject, v: JSVal, bp: *mut JSBool) -> JSBool; -pub fn JS_GetPrivate(obj: JSRawObject) -> *c_void; +pub fn JS_GetPrivate(obj: JSRawObject) -> *mut c_void; -pub fn JS_SetPrivate(obj: JSRawObject, data: *c_void); +pub fn JS_SetPrivate(obj: JSRawObject, data: *mut c_void); -pub fn JS_GetInstancePrivate(cx: *JSContext, obj: *JSObject, clasp: *JSClass, argv: *JSVal) -> *c_void; +pub fn JS_GetInstancePrivate(cx: *mut JSContext, obj: *mut JSObject, clasp: *JSClass, argv: *mut JSVal) -> *mut c_void; -pub fn JS_GetPrototype(obj: JSRawObject) -> *JSObject; +pub fn JS_GetPrototype(obj: JSRawObject) -> *mut JSObject; -pub fn JS_SetPrototype(cx: *JSContext, obj: *JSObject, proto: *JSObject) -> JSBool; +pub fn JS_SetPrototype(cx: *mut JSContext, obj: *mut JSObject, proto: *mut JSObject) -> JSBool; -pub fn JS_GetParent(obj: JSRawObject) -> *JSObject; +pub fn JS_GetParent(obj: JSRawObject) -> *mut JSObject; -pub fn JS_SetParent(cx: *JSContext, obj: *JSObject, parent: *JSObject) -> JSBool; +pub fn JS_SetParent(cx: *mut JSContext, obj: *mut JSObject, parent: *mut JSObject) -> JSBool; -pub fn JS_GetConstructor(cx: *JSContext, proto: *JSObject) -> *JSObject; +pub fn JS_GetConstructor(cx: *mut JSContext, proto: *mut JSObject) -> *mut JSObject; -pub fn JS_GetObjectId(cx: *JSContext, obj: JSRawObject, idp: *jsid) -> JSBool; +pub fn JS_GetObjectId(cx: *mut JSContext, obj: JSRawObject, idp: *mut jsid) -> JSBool; -pub fn JS_NewGlobalObject(cx: *JSContext, clasp: *JSClass, principals: *JSPrincipals) -> *JSObject; +pub fn JS_NewGlobalObject(cx: *mut JSContext, clasp: *JSClass, principals: *mut JSPrincipals) -> *mut JSObject; -pub fn JS_NewObject(cx: *JSContext, clasp: *JSClass, proto: *JSObject, parent: *JSObject) -> *JSObject; +pub fn JS_NewObject(cx: *mut JSContext, clasp: *JSClass, proto: *mut JSObject, parent: *mut JSObject) -> *mut JSObject; pub fn JS_IsExtensible(obj: JSRawObject) -> JSBool; pub fn JS_IsNative(obj: JSRawObject) -> JSBool; -pub fn JS_GetObjectRuntime(obj: JSRawObject) -> *JSRuntime; +pub fn JS_GetObjectRuntime(obj: JSRawObject) -> *mut JSRuntime; -pub fn JS_NewObjectWithGivenProto(cx: *JSContext, clasp: *JSClass, proto: *JSObject, parent: *JSObject) -> *JSObject; +pub fn JS_NewObjectWithGivenProto(cx: *mut JSContext, clasp: *JSClass, proto: *mut JSObject, parent: *mut JSObject) -> *mut JSObject; -pub fn JS_DeepFreezeObject(cx: *JSContext, obj: *JSObject) -> JSBool; +pub fn JS_DeepFreezeObject(cx: *mut JSContext, obj: *mut JSObject) -> JSBool; -pub fn JS_FreezeObject(cx: *JSContext, obj: *JSObject) -> JSBool; +pub fn JS_FreezeObject(cx: *mut JSContext, obj: *mut JSObject) -> JSBool; -pub fn JS_New(cx: *JSContext, ctor: *JSObject, argc: c_uint, argv: *JSVal) -> *JSObject; +pub fn JS_New(cx: *mut JSContext, ctor: *mut JSObject, argc: c_uint, argv: *mut JSVal) -> *mut JSObject; -pub fn JS_DefineObject(cx: *JSContext, obj: *JSObject, name: *c_char, clasp: *JSClass, proto: *JSObject, attrs: c_uint) -> *JSObject; +pub fn JS_DefineObject(cx: *mut JSContext, obj: *mut JSObject, name: *c_char, clasp: *JSClass, proto: *mut JSObject, attrs: c_uint) -> *mut JSObject; -pub fn JS_DefineConstDoubles(cx: *JSContext, obj: *JSObject, cds: *JSConstDoubleSpec) -> JSBool; +pub fn JS_DefineConstDoubles(cx: *mut JSContext, obj: *mut JSObject, cds: *mut JSConstDoubleSpec) -> JSBool; -pub fn JS_DefineProperties(cx: *JSContext, obj: *JSObject, ps: *JSPropertySpec) -> JSBool; +pub fn JS_DefineProperties(cx: *mut JSContext, obj: *mut JSObject, ps: *JSPropertySpec) -> JSBool; -pub fn JS_DefineProperty(cx: *JSContext, obj: *JSObject, name: *c_char, value: JSVal, getter: Option, setter: Option, attrs: c_uint) -> JSBool; +pub fn JS_DefineProperty(cx: *mut JSContext, obj: *mut JSObject, name: *c_char, value: JSVal, getter: JSPropertyOp, setter: JSStrictPropertyOp, attrs: c_uint) -> JSBool; -pub fn JS_DefinePropertyById(cx: *JSContext, obj: *JSObject, id: jsid, value: JSVal, getter: Option, setter: Option, attrs: c_uint) -> JSBool; +pub fn JS_DefinePropertyById(cx: *mut JSContext, obj: *mut JSObject, id: jsid, value: JSVal, getter: JSPropertyOp, setter: JSStrictPropertyOp, attrs: c_uint) -> JSBool; -pub fn JS_DefineOwnProperty(cx: *JSContext, obj: *JSObject, id: jsid, descriptor: JSVal, bp: *JSBool) -> JSBool; +pub fn JS_DefineOwnProperty(cx: *mut JSContext, obj: *mut JSObject, id: jsid, descriptor: JSVal, bp: *mut JSBool) -> JSBool; -pub fn JS_GetPropertyAttributes(cx: *JSContext, obj: *JSObject, name: *c_char, attrsp: *c_uint, foundp: *JSBool) -> JSBool; +pub fn JS_GetPropertyAttributes(cx: *mut JSContext, obj: *mut JSObject, name: *c_char, attrsp: *mut c_uint, foundp: *mut JSBool) -> JSBool; -pub fn JS_GetPropertyAttrsGetterAndSetter(cx: *JSContext, obj: *JSObject, name: *c_char, attrsp: *c_uint, foundp: *JSBool, getterp: *JSPropertyOp, setterp: *JSStrictPropertyOp) -> JSBool; +pub fn JS_GetPropertyAttrsGetterAndSetter(cx: *mut JSContext, obj: *mut JSObject, name: *c_char, attrsp: *mut c_uint, foundp: *mut JSBool, getterp: *mut JSPropertyOp, setterp: *mut JSStrictPropertyOp) -> JSBool; -pub fn JS_GetPropertyAttrsGetterAndSetterById(cx: *JSContext, obj: *JSObject, id: jsid, attrsp: *c_uint, foundp: *JSBool, getterp: *JSPropertyOp, setterp: *JSStrictPropertyOp) -> JSBool; +pub fn JS_GetPropertyAttrsGetterAndSetterById(cx: *mut JSContext, obj: *mut JSObject, id: jsid, attrsp: *mut c_uint, foundp: *mut JSBool, getterp: *mut JSPropertyOp, setterp: *mut JSStrictPropertyOp) -> JSBool; -pub fn JS_SetPropertyAttributes(cx: *JSContext, obj: *JSObject, name: *c_char, attrs: c_uint, foundp: *JSBool) -> JSBool; +pub fn JS_SetPropertyAttributes(cx: *mut JSContext, obj: *mut JSObject, name: *c_char, attrs: c_uint, foundp: *mut JSBool) -> JSBool; -pub fn JS_DefinePropertyWithTinyId(cx: *JSContext, obj: *JSObject, name: *c_char, tinyid: int8_t, value: JSVal, getter: JSPropertyOp, setter: JSStrictPropertyOp, attrs: c_uint) -> JSBool; +pub fn JS_DefinePropertyWithTinyId(cx: *mut JSContext, obj: *mut JSObject, name: *c_char, tinyid: int8_t, value: JSVal, getter: JSPropertyOp, setter: JSStrictPropertyOp, attrs: c_uint) -> JSBool; -pub fn JS_AlreadyHasOwnProperty(cx: *JSContext, obj: *JSObject, name: *c_char, foundp: *JSBool) -> JSBool; +pub fn JS_AlreadyHasOwnProperty(cx: *mut JSContext, obj: *mut JSObject, name: *c_char, foundp: *mut JSBool) -> JSBool; -pub fn JS_AlreadyHasOwnPropertyById(cx: *JSContext, obj: *JSObject, id: jsid, foundp: *JSBool) -> JSBool; +pub fn JS_AlreadyHasOwnPropertyById(cx: *mut JSContext, obj: *mut JSObject, id: jsid, foundp: *mut JSBool) -> JSBool; -pub fn JS_HasProperty(cx: *JSContext, obj: *JSObject, name: *c_char, foundp: *JSBool) -> JSBool; +pub fn JS_HasProperty(cx: *mut JSContext, obj: *mut JSObject, name: *c_char, foundp: *mut JSBool) -> JSBool; -pub fn JS_HasPropertyById(cx: *JSContext, obj: *JSObject, id: jsid, foundp: *JSBool) -> JSBool; +pub fn JS_HasPropertyById(cx: *mut JSContext, obj: *mut JSObject, id: jsid, foundp: *mut JSBool) -> JSBool; -pub fn JS_LookupProperty(cx: *JSContext, obj: *JSObject, name: *c_char, vp: *JSVal) -> JSBool; +pub fn JS_LookupProperty(cx: *mut JSContext, obj: *mut JSObject, name: *c_char, vp: *mut JSVal) -> JSBool; -pub fn JS_LookupPropertyById(cx: *JSContext, obj: *JSObject, id: jsid, vp: *JSVal) -> JSBool; +pub fn JS_LookupPropertyById(cx: *mut JSContext, obj: *mut JSObject, id: jsid, vp: *mut JSVal) -> JSBool; -pub fn JS_LookupPropertyWithFlags(cx: *JSContext, obj: *JSObject, name: *c_char, flags: c_uint, vp: *JSVal) -> JSBool; +pub fn JS_LookupPropertyWithFlags(cx: *mut JSContext, obj: *mut JSObject, name: *c_char, flags: c_uint, vp: *mut JSVal) -> JSBool; -pub fn JS_LookupPropertyWithFlagsById(cx: *JSContext, obj: *JSObject, id: jsid, flags: c_uint, objp: **JSObject, vp: *JSVal) -> JSBool; +pub fn JS_LookupPropertyWithFlagsById(cx: *mut JSContext, obj: *mut JSObject, id: jsid, flags: c_uint, objp: *mut *mut JSObject, vp: *mut JSVal) -> JSBool; -pub fn JS_GetPropertyDescriptorById(cx: *JSContext, obj: *JSObject, id: jsid, flags: c_uint, desc: *JSPropertyDescriptor) -> JSBool; +pub fn JS_GetPropertyDescriptorById(cx: *mut JSContext, obj: *mut JSObject, id: jsid, flags: c_uint, desc: *mut JSPropertyDescriptor) -> JSBool; -pub fn JS_GetOwnPropertyDescriptor(cx: *JSContext, obj: *JSObject, id: jsid, vp: *JSVal) -> JSBool; +pub fn JS_GetOwnPropertyDescriptor(cx: *mut JSContext, obj: *mut JSObject, id: jsid, vp: *mut JSVal) -> JSBool; -pub fn JS_GetProperty(cx: *JSContext, obj: *JSObject, name: *c_char, vp: *JSVal) -> JSBool; +pub fn JS_GetProperty(cx: *mut JSContext, obj: *mut JSObject, name: *c_char, vp: *mut JSVal) -> JSBool; -pub fn JS_GetPropertyDefault(cx: *JSContext, obj: *JSObject, name: *c_char, def: JSVal, vp: *JSVal) -> JSBool; +pub fn JS_GetPropertyDefault(cx: *mut JSContext, obj: *mut JSObject, name: *c_char, def: JSVal, vp: *mut JSVal) -> JSBool; -pub fn JS_GetPropertyById(cx: *JSContext, obj: *JSObject, id: jsid, vp: *JSVal) -> JSBool; +pub fn JS_GetPropertyById(cx: *mut JSContext, obj: *mut JSObject, id: jsid, vp: *mut JSVal) -> JSBool; -pub fn JS_GetPropertyByIdDefault(cx: *JSContext, obj: *JSObject, id: jsid, def: JSVal, vp: *JSVal) -> JSBool; +pub fn JS_GetPropertyByIdDefault(cx: *mut JSContext, obj: *mut JSObject, id: jsid, def: JSVal, vp: *mut JSVal) -> JSBool; -pub fn JS_ForwardGetPropertyTo(cx: *JSContext, obj: *JSObject, id: jsid, onBehalfOf: *JSObject, vp: *JSVal) -> JSBool; +pub fn JS_ForwardGetPropertyTo(cx: *mut JSContext, obj: *mut JSObject, id: jsid, onBehalfOf: *mut JSObject, vp: *mut JSVal) -> JSBool; -pub fn JS_GetMethodById(cx: *JSContext, obj: *JSObject, id: jsid, objp: **JSObject, vp: *JSVal) -> JSBool; +pub fn JS_GetMethodById(cx: *mut JSContext, obj: *mut JSObject, id: jsid, objp: *mut *mut JSObject, vp: *mut JSVal) -> JSBool; -pub fn JS_GetMethod(cx: *JSContext, obj: *JSObject, name: *c_char, objp: **JSObject, vp: *JSVal) -> JSBool; +pub fn JS_GetMethod(cx: *mut JSContext, obj: *mut JSObject, name: *c_char, objp: *mut *mut JSObject, vp: *mut JSVal) -> JSBool; -pub fn JS_SetProperty(cx: *JSContext, obj: *JSObject, name: *c_char, vp: *JSVal) -> JSBool; +pub fn JS_SetProperty(cx: *mut JSContext, obj: *mut JSObject, name: *c_char, vp: *mut JSVal) -> JSBool; -pub fn JS_SetPropertyById(cx: *JSContext, obj: *JSObject, id: jsid, vp: *JSVal) -> JSBool; +pub fn JS_SetPropertyById(cx: *mut JSContext, obj: *mut JSObject, id: jsid, vp: *mut JSVal) -> JSBool; -pub fn JS_DeleteProperty(cx: *JSContext, obj: *JSObject, name: *c_char) -> JSBool; +pub fn JS_DeleteProperty(cx: *mut JSContext, obj: *mut JSObject, name: *c_char) -> JSBool; -pub fn JS_DeleteProperty2(cx: *JSContext, obj: *JSObject, name: *c_char, rval: *JSVal) -> JSBool; +pub fn JS_DeleteProperty2(cx: *mut JSContext, obj: *mut JSObject, name: *c_char, rval: *mut JSVal) -> JSBool; -pub fn JS_DeletePropertyById(cx: *JSContext, obj: *JSObject, id: jsid) -> JSBool; +pub fn JS_DeletePropertyById(cx: *mut JSContext, obj: *mut JSObject, id: jsid) -> JSBool; -pub fn JS_DeletePropertyById2(cx: *JSContext, obj: *JSObject, id: jsid, rval: *JSVal) -> JSBool; +pub fn JS_DeletePropertyById2(cx: *mut JSContext, obj: *mut JSObject, id: jsid, rval: *mut JSVal) -> JSBool; -pub fn JS_DefineUCProperty(cx: *JSContext, obj: *JSObject, name: *jschar, namelen: size_t, value: JSVal, getter: JSPropertyOp, setter: JSStrictPropertyOp, attrs: c_uint) -> JSBool; +pub fn JS_DefineUCProperty(cx: *mut JSContext, obj: *mut JSObject, name: *jschar, namelen: size_t, value: JSVal, getter: JSPropertyOp, setter: JSStrictPropertyOp, attrs: c_uint) -> JSBool; -pub fn JS_GetUCPropertyAttributes(cx: *JSContext, obj: *JSObject, name: *jschar, namelen: size_t, attrsp: *c_uint, foundp: *JSBool) -> JSBool; +pub fn JS_GetUCPropertyAttributes(cx: *mut JSContext, obj: *mut JSObject, name: *jschar, namelen: size_t, attrsp: *mut c_uint, foundp: *mut JSBool) -> JSBool; -pub fn JS_GetUCPropertyAttrsGetterAndSetter(cx: *JSContext, obj: *JSObject, name: *jschar, namelen: size_t, attrsp: *c_uint, foundp: *JSBool, getterp: *JSPropertyOp, setterp: *JSStrictPropertyOp) -> JSBool; +pub fn JS_GetUCPropertyAttrsGetterAndSetter(cx: *mut JSContext, obj: *mut JSObject, name: *jschar, namelen: size_t, attrsp: *mut c_uint, foundp: *mut JSBool, getterp: *mut JSPropertyOp, setterp: *mut JSStrictPropertyOp) -> JSBool; -pub fn JS_SetUCPropertyAttributes(cx: *JSContext, obj: *JSObject, name: *jschar, namelen: size_t, attrs: c_uint, foundp: *JSBool) -> JSBool; +pub fn JS_SetUCPropertyAttributes(cx: *mut JSContext, obj: *mut JSObject, name: *jschar, namelen: size_t, attrs: c_uint, foundp: *mut JSBool) -> JSBool; -pub fn JS_DefineUCPropertyWithTinyId(cx: *JSContext, obj: *JSObject, name: *jschar, namelen: size_t, tinyid: int8_t, value: JSVal, getter: JSPropertyOp, setter: JSStrictPropertyOp, attrs: c_uint) -> JSBool; +pub fn JS_DefineUCPropertyWithTinyId(cx: *mut JSContext, obj: *mut JSObject, name: *jschar, namelen: size_t, tinyid: int8_t, value: JSVal, getter: JSPropertyOp, setter: JSStrictPropertyOp, attrs: c_uint) -> JSBool; -pub fn JS_AlreadyHasOwnUCProperty(cx: *JSContext, obj: *JSObject, name: *jschar, namelen: size_t, foundp: *JSBool) -> JSBool; +pub fn JS_AlreadyHasOwnUCProperty(cx: *mut JSContext, obj: *mut JSObject, name: *jschar, namelen: size_t, foundp: *mut JSBool) -> JSBool; -pub fn JS_HasUCProperty(cx: *JSContext, obj: *JSObject, name: *jschar, namelen: size_t, vp: *JSBool) -> JSBool; +pub fn JS_HasUCProperty(cx: *mut JSContext, obj: *mut JSObject, name: *jschar, namelen: size_t, vp: *mut JSBool) -> JSBool; -pub fn JS_LookupUCProperty(cx: *JSContext, obj: *JSObject, name: *jschar, namelen: size_t, vp: *JSVal) -> JSBool; +pub fn JS_LookupUCProperty(cx: *mut JSContext, obj: *mut JSObject, name: *jschar, namelen: size_t, vp: *mut JSVal) -> JSBool; -pub fn JS_GetUCProperty(cx: *JSContext, obj: *JSObject, name: *jschar, namelen: size_t, vp: *JSVal) -> JSBool; +pub fn JS_GetUCProperty(cx: *mut JSContext, obj: *mut JSObject, name: *jschar, namelen: size_t, vp: *mut JSVal) -> JSBool; -pub fn JS_SetUCProperty(cx: *JSContext, obj: *JSObject, name: *jschar, namelen: size_t, vp: *JSVal) -> JSBool; +pub fn JS_SetUCProperty(cx: *mut JSContext, obj: *mut JSObject, name: *jschar, namelen: size_t, vp: *mut JSVal) -> JSBool; -pub fn JS_DeleteUCProperty2(cx: *JSContext, obj: *JSObject, name: *jschar, namelen: size_t, rval: *JSVal) -> JSBool; +pub fn JS_DeleteUCProperty2(cx: *mut JSContext, obj: *mut JSObject, name: *jschar, namelen: size_t, rval: *mut JSVal) -> JSBool; -pub fn JS_NewArrayObject(cx: *JSContext, length: c_int, vector: *JSVal) -> *JSObject; +pub fn JS_NewArrayObject(cx: *mut JSContext, length: c_int, vector: *mut JSVal) -> *mut JSObject; -pub fn JS_IsArrayObject(cx: *JSContext, obj: *JSObject) -> JSBool; +pub fn JS_IsArrayObject(cx: *mut JSContext, obj: *mut JSObject) -> JSBool; -pub fn JS_GetArrayLength(cx: *JSContext, obj: *JSObject, lengthp: *uint32_t) -> JSBool; +pub fn JS_GetArrayLength(cx: *mut JSContext, obj: *mut JSObject, lengthp: *mut uint32_t) -> JSBool; -pub fn JS_SetArrayLength(cx: *JSContext, obj: *JSObject, length: uint32_t) -> JSBool; +pub fn JS_SetArrayLength(cx: *mut JSContext, obj: *mut JSObject, length: uint32_t) -> JSBool; -pub fn JS_DefineElement(cx: *JSContext, obj: *JSObject, index: uint32_t, value: JSVal, getter: JSPropertyOp, setter: JSStrictPropertyOp, attrs: c_uint) -> JSBool; +pub fn JS_DefineElement(cx: *mut JSContext, obj: *mut JSObject, index: uint32_t, value: JSVal, getter: JSPropertyOp, setter: JSStrictPropertyOp, attrs: c_uint) -> JSBool; -pub fn JS_AlreadyHasOwnElement(cx: *JSContext, obj: *JSObject, index: uint32_t, foundp: *JSBool) -> JSBool; +pub fn JS_AlreadyHasOwnElement(cx: *mut JSContext, obj: *mut JSObject, index: uint32_t, foundp: *mut JSBool) -> JSBool; -pub fn JS_HasElement(cx: *JSContext, obj: *JSObject, index: uint32_t, foundp: *JSBool) -> JSBool; +pub fn JS_HasElement(cx: *mut JSContext, obj: *mut JSObject, index: uint32_t, foundp: *mut JSBool) -> JSBool; -pub fn JS_LookupElement(cx: *JSContext, obj: *JSObject, index: uint32_t, vp: *JSVal) -> JSBool; +pub fn JS_LookupElement(cx: *mut JSContext, obj: *mut JSObject, index: uint32_t, vp: *mut JSVal) -> JSBool; -pub fn JS_GetElement(cx: *JSContext, obj: *JSObject, index: uint32_t, vp: *JSVal) -> JSBool; +pub fn JS_GetElement(cx: *mut JSContext, obj: *mut JSObject, index: uint32_t, vp: *mut JSVal) -> JSBool; -pub fn JS_ForwardGetElementTo(cx: *JSContext, obj: *JSObject, index: uint32_t, onBehalfOf: *JSObject, vp: *JSVal) -> JSBool; +pub fn JS_ForwardGetElementTo(cx: *mut JSContext, obj: *mut JSObject, index: uint32_t, onBehalfOf: *mut JSObject, vp: *mut JSVal) -> JSBool; -pub fn JS_GetElementIfPresent(cx: *JSContext, obj: *JSObject, index: uint32_t, onBehalfOf: *JSObject, vp: *JSVal, present: *JSBool) -> JSBool; +pub fn JS_GetElementIfPresent(cx: *mut JSContext, obj: *mut JSObject, index: uint32_t, onBehalfOf: *mut JSObject, vp: *mut JSVal, present: *mut JSBool) -> JSBool; -pub fn JS_SetElement(cx: *JSContext, obj: *JSObject, index: uint32_t, vp: *JSVal) -> JSBool; +pub fn JS_SetElement(cx: *mut JSContext, obj: *mut JSObject, index: uint32_t, vp: *mut JSVal) -> JSBool; -pub fn JS_DeleteElement(cx: *JSContext, obj: *JSObject, index: uint32_t) -> JSBool; +pub fn JS_DeleteElement(cx: *mut JSContext, obj: *mut JSObject, index: uint32_t) -> JSBool; -pub fn JS_DeleteElement2(cx: *JSContext, obj: *JSObject, index: uint32_t, rval: *JSVal) -> JSBool; +pub fn JS_DeleteElement2(cx: *mut JSContext, obj: *mut JSObject, index: uint32_t, rval: *mut JSVal) -> JSBool; -pub fn JS_ClearScope(cx: *JSContext, obj: *JSObject); +pub fn JS_ClearScope(cx: *mut JSContext, obj: *mut JSObject); -pub fn JS_Enumerate(cx: *JSContext, obj: *JSObject) -> *JSIdArray; +pub fn JS_Enumerate(cx: *mut JSContext, obj: *mut JSObject) -> *mut JSIdArray; -pub fn JS_NewPropertyIterator(cx: *JSContext, obj: *JSObject) -> *JSObject; +pub fn JS_NewPropertyIterator(cx: *mut JSContext, obj: *mut JSObject) -> *mut JSObject; -pub fn JS_NextProperty(cx: *JSContext, iterobj: *JSObject, idp: *jsid) -> JSBool; +pub fn JS_NextProperty(cx: *mut JSContext, iterobj: *mut JSObject, idp: *mut jsid) -> JSBool; -pub fn JS_ArrayIterator(cx: *JSContext, argc: c_uint, vp: *mut JSVal) -> JSBool; +pub fn JS_ArrayIterator(cx: *mut JSContext, argc: c_uint, vp: *mut JSVal) -> JSBool; -pub fn JS_CheckAccess(cx: *JSContext, obj: *JSObject, id: jsid, mode: JSAccessMode, vp: *JSVal, attrsp: *c_uint) -> JSBool; +pub fn JS_CheckAccess(cx: *mut JSContext, obj: *mut JSObject, id: jsid, mode: JSAccessMode, vp: *mut JSVal, attrsp: *mut c_uint) -> JSBool; -// FIXME: couldn't run on rust_stack until rust issue #6470 fixed. -//#[rust_stack] pub fn JS_GetReservedSlot(obj: JSRawObject, index: uint32_t) -> JSVal; pub fn JS_SetReservedSlot(obj: JSRawObject, index: uint32_t, v: JSVal); -pub fn JS_HoldPrincipals(principals: *JSPrincipals); +pub fn JS_HoldPrincipals(principals: *mut JSPrincipals); -pub fn JS_DropPrincipals(rt: *JSRuntime, principals: *JSPrincipals); +pub fn JS_DropPrincipals(rt: *mut JSRuntime, principals: *mut JSPrincipals); -pub fn JS_SetSecurityCallbacks(rt: *JSRuntime, callbacks: *JSSecurityCallbacks); +pub fn JS_SetSecurityCallbacks(rt: *mut JSRuntime, callbacks: *JSSecurityCallbacks); -pub fn JS_GetSecurityCallbacks(rt: *JSRuntime) -> *JSSecurityCallbacks; +pub fn JS_GetSecurityCallbacks(rt: *mut JSRuntime) -> *JSSecurityCallbacks; -pub fn JS_SetTrustedPrincipals(rt: *JSRuntime, prin: *JSPrincipals); +pub fn JS_SetTrustedPrincipals(rt: *mut JSRuntime, prin: *mut JSPrincipals); -pub fn JS_InitDestroyPrincipalsCallback(rt: *JSRuntime, destroyPrincipals: JSDestroyPrincipalsOp); +pub fn JS_InitDestroyPrincipalsCallback(rt: *mut JSRuntime, destroyPrincipals: JSDestroyPrincipalsOp); -pub fn JS_NewFunction(cx: *JSContext, call: Option, nargs: c_uint, flags: c_uint, parent: *JSObject, name: *c_char) -> *JSFunction; +pub fn JS_NewFunction(cx: *mut JSContext, call: JSNative, nargs: c_uint, flags: c_uint, parent: *mut JSObject, name: *c_char) -> *mut JSFunction; -pub fn JS_NewFunctionById(cx: *JSContext, call: JSNative, nargs: c_uint, flags: c_uint, parent: *JSObject, id: jsid) -> *JSFunction; +pub fn JS_NewFunctionById(cx: *mut JSContext, call: JSNative, nargs: c_uint, flags: c_uint, parent: *mut JSObject, id: jsid) -> *mut JSFunction; -pub fn JS_GetFunctionObject(fun: *JSFunction) -> *JSObject; +pub fn JS_GetFunctionObject(fun: *mut JSFunction) -> *mut JSObject; -pub fn JS_GetFunctionId(fun: *JSFunction) -> *JSString; +pub fn JS_GetFunctionId(fun: *mut JSFunction) -> *mut JSString; -pub fn JS_GetFunctionDisplayId(fun: *JSFunction) -> *JSString; +pub fn JS_GetFunctionDisplayId(fun: *mut JSFunction) -> *mut JSString; -pub fn JS_GetFunctionFlags(fun: *JSFunction) -> c_uint; +pub fn JS_GetFunctionFlags(fun: *mut JSFunction) -> c_uint; -pub fn JS_GetFunctionArity(fun: *JSFunction) -> uint16_t; +pub fn JS_GetFunctionArity(fun: *mut JSFunction) -> uint16_t; -pub fn JS_ObjectIsFunction(cx: *JSContext, obj: JSRawObject) -> JSBool; +pub fn JS_ObjectIsFunction(cx: *mut JSContext, obj: JSRawObject) -> JSBool; -pub fn JS_ObjectIsCallable(cx: *JSContext, obj: JSRawObject) -> JSBool; +pub fn JS_ObjectIsCallable(cx: *mut JSContext, obj: JSRawObject) -> JSBool; pub fn JS_IsNativeFunction(funobj: JSRawObject, call: JSNative) -> JSBool; -pub fn JS_BindCallable(cx: *JSContext, callable: *JSObject, newThis: JSRawObject) -> *JSObject; +pub fn JS_BindCallable(cx: *mut JSContext, callable: *mut JSObject, newThis: JSRawObject) -> *mut JSObject; -pub fn JS_DefineFunctions(cx: *JSContext, obj: *JSObject, fs: *JSFunctionSpec) -> JSBool; +pub fn JS_DefineFunctions(cx: *mut JSContext, obj: *mut JSObject, fs: *JSFunctionSpec) -> JSBool; -pub fn JS_DefineFunction(cx: *JSContext, obj: *JSObject, name: *c_char, call: JSNative, nargs: c_uint, attrs: c_uint) -> *JSFunction; +pub fn JS_DefineFunction(cx: *mut JSContext, obj: *mut JSObject, name: *c_char, call: JSNative, nargs: c_uint, attrs: c_uint) -> *mut JSFunction; -pub fn JS_DefineUCFunction(cx: *JSContext, obj: *JSObject, name: *jschar, namelen: size_t, call: JSNative, nargs: c_uint, attrs: c_uint) -> *JSFunction; +pub fn JS_DefineUCFunction(cx: *mut JSContext, obj: *mut JSObject, name: *jschar, namelen: size_t, call: JSNative, nargs: c_uint, attrs: c_uint) -> *mut JSFunction; -pub fn JS_DefineFunctionById(cx: *JSContext, obj: *JSObject, id: jsid, call: JSNative, nargs: c_uint, attrs: c_uint) -> *JSFunction; +pub fn JS_DefineFunctionById(cx: *mut JSContext, obj: *mut JSObject, id: jsid, call: JSNative, nargs: c_uint, attrs: c_uint) -> *mut JSFunction; -pub fn JS_CloneFunctionObject(cx: *JSContext, funobj: *JSObject, parent: JSRawObject) -> *JSObject; +pub fn JS_CloneFunctionObject(cx: *mut JSContext, funobj: *mut JSObject, parent: JSRawObject) -> *mut JSObject; -pub fn JS_BufferIsCompilableUnit(cx: *JSContext, bytes_are_utf8: JSBool, obj: *JSObject, bytes: *c_char, length: size_t) -> JSBool; +pub fn JS_BufferIsCompilableUnit(cx: *mut JSContext, bytes_are_utf8: JSBool, obj: *mut JSObject, bytes: *c_char, length: size_t) -> JSBool; -pub fn JS_CompileScript(cx: *JSContext, obj: *JSObject, bytes: *c_char, length: size_t, filename: *c_char, lineno: c_uint) -> *JSScript; +pub fn JS_CompileScript(cx: *mut JSContext, obj: *mut JSObject, bytes: *c_char, length: size_t, filename: *c_char, lineno: c_uint) -> *mut JSScript; -pub fn JS_CompileScriptForPrincipals(cx: *JSContext, obj: *JSObject, principals: *JSPrincipals, bytes: *c_char, length: size_t, filename: *c_char, lineno: c_uint) -> *JSScript; +pub fn JS_CompileScriptForPrincipals(cx: *mut JSContext, obj: *mut JSObject, principals: *mut JSPrincipals, bytes: *c_char, length: size_t, filename: *c_char, lineno: c_uint) -> *mut JSScript; -pub fn JS_CompileScriptForPrincipalsVersion(cx: *JSContext, obj: *JSObject, principals: *JSPrincipals, bytes: *c_char, length: size_t, filename: *c_char, lineno: c_uint, version: JSVersion) -> *JSScript; +pub fn JS_CompileScriptForPrincipalsVersion(cx: *mut JSContext, obj: *mut JSObject, principals: *mut JSPrincipals, bytes: *c_char, length: size_t, filename: *c_char, lineno: c_uint, version: JSVersion) -> *mut JSScript; -pub fn JS_CompileUCScript(cx: *JSContext, obj: *JSObject, chars: *jschar, length: size_t, filename: *c_char, lineno: c_uint) -> *JSScript; +pub fn JS_CompileUCScript(cx: *mut JSContext, obj: *mut JSObject, chars: *jschar, length: size_t, filename: *c_char, lineno: c_uint) -> *mut JSScript; -pub fn JS_CompileUCScriptForPrincipals(cx: *JSContext, obj: *JSObject, principals: *JSPrincipals, chars: *jschar, length: size_t, filename: *c_char, lineno: c_uint) -> *JSScript; +pub fn JS_CompileUCScriptForPrincipals(cx: *mut JSContext, obj: *mut JSObject, principals: *mut JSPrincipals, chars: *jschar, length: size_t, filename: *c_char, lineno: c_uint) -> *mut JSScript; -pub fn JS_CompileUCScriptForPrincipalsVersion(cx: *JSContext, obj: *JSObject, principals: *JSPrincipals, chars: *jschar, length: size_t, filename: *c_char, lineno: c_uint, version: JSVersion) -> *JSScript; +pub fn JS_CompileUCScriptForPrincipalsVersion(cx: *mut JSContext, obj: *mut JSObject, principals: *mut JSPrincipals, chars: *jschar, length: size_t, filename: *c_char, lineno: c_uint, version: JSVersion) -> *mut JSScript; -pub fn JS_CompileUCScriptForPrincipalsVersionOrigin(cx: *JSContext, obj: *JSObject, principals: *JSPrincipals, originPrincipals: *JSPrincipals, chars: *jschar, length: size_t, filename: *c_char, lineno: c_uint, version: JSVersion) -> *JSScript; +pub fn JS_CompileUCScriptForPrincipalsVersionOrigin(cx: *mut JSContext, obj: *mut JSObject, principals: *mut JSPrincipals, originPrincipals: *mut JSPrincipals, chars: *jschar, length: size_t, filename: *c_char, lineno: c_uint, version: JSVersion) -> *mut JSScript; -pub fn JS_CompileUTF8File(cx: *JSContext, obj: *JSObject, filename: *c_char) -> *JSScript; +pub fn JS_CompileUTF8File(cx: *mut JSContext, obj: *mut JSObject, filename: *c_char) -> *mut JSScript; -pub fn JS_CompileUTF8FileHandle(cx: *JSContext, obj: *JSObject, filename: *c_char, fh: *FILE) -> *JSScript; +pub fn JS_CompileUTF8FileHandle(cx: *mut JSContext, obj: *mut JSObject, filename: *c_char, fh: *mut FILE) -> *mut JSScript; -pub fn JS_CompileUTF8FileHandleForPrincipals(cx: *JSContext, obj: *JSObject, filename: *c_char, fh: *FILE, principals: *JSPrincipals) -> *JSScript; +pub fn JS_CompileUTF8FileHandleForPrincipals(cx: *mut JSContext, obj: *mut JSObject, filename: *c_char, fh: *mut FILE, principals: *mut JSPrincipals) -> *mut JSScript; -pub fn JS_CompileUTF8FileHandleForPrincipalsVersion(cx: *JSContext, obj: *JSObject, filename: *c_char, fh: *FILE, principals: *JSPrincipals, version: JSVersion) -> *JSScript; +pub fn JS_CompileUTF8FileHandleForPrincipalsVersion(cx: *mut JSContext, obj: *mut JSObject, filename: *c_char, fh: *mut FILE, principals: *mut JSPrincipals, version: JSVersion) -> *mut JSScript; -pub fn JS_GetGlobalFromScript(script: *JSScript) -> *JSObject; +pub fn JS_GetGlobalFromScript(script: *mut JSScript) -> *mut JSObject; -pub fn JS_CompileFunction(cx: *JSContext, obj: *JSObject, name: *c_char, nargs: c_uint, argnames: **c_char, bytes: *c_char, length: size_t, filename: *c_char, lineno: c_uint) -> *JSFunction; +pub fn JS_CompileFunction(cx: *mut JSContext, obj: *mut JSObject, name: *c_char, nargs: c_uint, argnames: *mut *c_char, bytes: *c_char, length: size_t, filename: *c_char, lineno: c_uint) -> *mut JSFunction; -pub fn JS_CompileFunctionForPrincipals(cx: *JSContext, obj: *JSObject, principals: *JSPrincipals, name: *c_char, nargs: c_uint, argnames: **c_char, bytes: *c_char, length: size_t, filename: *c_char, lineno: c_uint) -> *JSFunction; +pub fn JS_CompileFunctionForPrincipals(cx: *mut JSContext, obj: *mut JSObject, principals: *mut JSPrincipals, name: *c_char, nargs: c_uint, argnames: *mut *c_char, bytes: *c_char, length: size_t, filename: *c_char, lineno: c_uint) -> *mut JSFunction; -pub fn JS_CompileUCFunction(cx: *JSContext, obj: *JSObject, name: *c_char, nargs: c_uint, argnames: **c_char, chars: *jschar, length: size_t, filename: *c_char, lineno: c_uint) -> *JSFunction; +pub fn JS_CompileUCFunction(cx: *mut JSContext, obj: *mut JSObject, name: *c_char, nargs: c_uint, argnames: *mut *c_char, chars: *jschar, length: size_t, filename: *c_char, lineno: c_uint) -> *mut JSFunction; -pub fn JS_CompileUCFunctionForPrincipals(cx: *JSContext, obj: *JSObject, principals: *JSPrincipals, name: *c_char, nargs: c_uint, argnames: **c_char, chars: *jschar, length: size_t, filename: *c_char, lineno: c_uint) -> *JSFunction; +pub fn JS_CompileUCFunctionForPrincipals(cx: *mut JSContext, obj: *mut JSObject, principals: *mut JSPrincipals, name: *c_char, nargs: c_uint, argnames: *mut *c_char, chars: *jschar, length: size_t, filename: *c_char, lineno: c_uint) -> *mut JSFunction; -pub fn JS_CompileUCFunctionForPrincipalsVersion(cx: *JSContext, obj: *JSObject, principals: *JSPrincipals, name: *c_char, nargs: c_uint, argnames: **c_char, chars: *jschar, length: size_t, filename: *c_char, lineno: c_uint, version: JSVersion) -> *JSFunction; +pub fn JS_CompileUCFunctionForPrincipalsVersion(cx: *mut JSContext, obj: *mut JSObject, principals: *mut JSPrincipals, name: *c_char, nargs: c_uint, argnames: *mut *c_char, chars: *jschar, length: size_t, filename: *c_char, lineno: c_uint, version: JSVersion) -> *mut JSFunction; -pub fn JS_DecompileScript(cx: *JSContext, script: *JSScript, name: *c_char, indent: c_uint) -> *JSString; +pub fn JS_DecompileScript(cx: *mut JSContext, script: *mut JSScript, name: *c_char, indent: c_uint) -> *mut JSString; -pub fn JS_DecompileFunction(cx: *JSContext, fun: *JSFunction, indent: c_uint) -> *JSString; +pub fn JS_DecompileFunction(cx: *mut JSContext, fun: *mut JSFunction, indent: c_uint) -> *mut JSString; -pub fn JS_DecompileFunctionBody(cx: *JSContext, fun: *JSFunction, indent: c_uint) -> *JSString; +pub fn JS_DecompileFunctionBody(cx: *mut JSContext, fun: *mut JSFunction, indent: c_uint) -> *mut JSString; -pub fn JS_ExecuteScript(cx: *JSContext, obj: *JSObject, script: *JSScript, rval: *JSVal) -> JSBool; +pub fn JS_ExecuteScript(cx: *mut JSContext, obj: *mut JSObject, script: *mut JSScript, rval: *mut JSVal) -> JSBool; -pub fn JS_ExecuteScriptVersion(cx: *JSContext, obj: *JSObject, script: *JSScript, rval: *JSVal, version: JSVersion) -> JSBool; +pub fn JS_ExecuteScriptVersion(cx: *mut JSContext, obj: *mut JSObject, script: *mut JSScript, rval: *mut JSVal, version: JSVersion) -> JSBool; -pub fn JS_EvaluateScript(cx: *JSContext, obj: *JSObject, bytes: *c_char, length: c_uint, filename: *c_char, lineno: c_uint, rval: *JSVal) -> JSBool; +pub fn JS_EvaluateScript(cx: *mut JSContext, obj: *mut JSObject, bytes: *c_char, length: c_uint, filename: *c_char, lineno: c_uint, rval: *mut JSVal) -> JSBool; -pub fn JS_EvaluateScriptForPrincipals(cx: *JSContext, obj: *JSObject, principals: *JSPrincipals, bytes: *c_char, length: c_uint, filename: *c_char, lineno: c_uint, rval: *JSVal) -> JSBool; +pub fn JS_EvaluateScriptForPrincipals(cx: *mut JSContext, obj: *mut JSObject, principals: *mut JSPrincipals, bytes: *c_char, length: c_uint, filename: *c_char, lineno: c_uint, rval: *mut JSVal) -> JSBool; -pub fn JS_EvaluateScriptForPrincipalsVersion(cx: *JSContext, obj: *JSObject, principals: *JSPrincipals, bytes: *c_char, length: c_uint, filename: *c_char, lineno: c_uint, rval: *JSVal, version: JSVersion) -> JSBool; +pub fn JS_EvaluateScriptForPrincipalsVersion(cx: *mut JSContext, obj: *mut JSObject, principals: *mut JSPrincipals, bytes: *c_char, length: c_uint, filename: *c_char, lineno: c_uint, rval: *mut JSVal, version: JSVersion) -> JSBool; -pub fn JS_EvaluateUCScript(cx: *JSContext, obj: *JSObject, chars: *jschar, length: c_uint, filename: *c_char, lineno: c_uint, rval: *JSVal) -> JSBool; +pub fn JS_EvaluateUCScript(cx: *mut JSContext, obj: *mut JSObject, chars: *jschar, length: c_uint, filename: *c_char, lineno: c_uint, rval: *mut JSVal) -> JSBool; -pub fn JS_EvaluateUCScriptForPrincipals(cx: *JSContext, obj: *JSObject, principals: *JSPrincipals, chars: *jschar, length: c_uint, filename: *c_char, lineno: c_uint, rval: *JSVal) -> JSBool; +pub fn JS_EvaluateUCScriptForPrincipals(cx: *mut JSContext, obj: *mut JSObject, principals: *mut JSPrincipals, chars: *jschar, length: c_uint, filename: *c_char, lineno: c_uint, rval: *mut JSVal) -> JSBool; -pub fn JS_EvaluateUCScriptForPrincipalsVersion(cx: *JSContext, obj: *JSObject, principals: *JSPrincipals, chars: *jschar, length: c_uint, filename: *c_char, lineno: c_uint, rval: *JSVal, version: JSVersion) -> JSBool; +pub fn JS_EvaluateUCScriptForPrincipalsVersion(cx: *mut JSContext, obj: *mut JSObject, principals: *mut JSPrincipals, chars: *jschar, length: c_uint, filename: *c_char, lineno: c_uint, rval: *mut JSVal, version: JSVersion) -> JSBool; -pub fn JS_EvaluateUCScriptForPrincipalsVersionOrigin(cx: *JSContext, obj: *JSObject, principals: *JSPrincipals, originPrincipals: *JSPrincipals, chars: *jschar, length: c_uint, filename: *c_char, lineno: c_uint, rval: *JSVal, version: JSVersion) -> JSBool; +pub fn JS_EvaluateUCScriptForPrincipalsVersionOrigin(cx: *mut JSContext, obj: *mut JSObject, principals: *mut JSPrincipals, originPrincipals: *mut JSPrincipals, chars: *jschar, length: c_uint, filename: *c_char, lineno: c_uint, rval: *mut JSVal, version: JSVersion) -> JSBool; -pub fn JS_CallFunction(cx: *JSContext, obj: *JSObject, fun: *JSFunction, argc: c_uint, argv: *JSVal, rval: *JSVal) -> JSBool; +pub fn JS_CallFunction(cx: *mut JSContext, obj: *mut JSObject, fun: *mut JSFunction, argc: c_uint, argv: *mut JSVal, rval: *mut JSVal) -> JSBool; -pub fn JS_CallFunctionName(cx: *JSContext, obj: *JSObject, name: *c_char, argc: c_uint, argv: *JSVal, rval: *JSVal) -> JSBool; +pub fn JS_CallFunctionName(cx: *mut JSContext, obj: *mut JSObject, name: *c_char, argc: c_uint, argv: *mut JSVal, rval: *mut JSVal) -> JSBool; -pub fn JS_CallFunctionValue(cx: *JSContext, obj: *JSObject, fval: JSVal, argc: c_uint, argv: *JSVal, rval: *JSVal) -> JSBool; +pub fn JS_CallFunctionValue(cx: *mut JSContext, obj: *mut JSObject, fval: JSVal, argc: c_uint, argv: *mut JSVal, rval: *mut JSVal) -> JSBool; -pub fn JS_SetOperationCallback(cx: *JSContext, callback: JSOperationCallback) -> JSOperationCallback; +pub fn JS_SetOperationCallback(cx: *mut JSContext, callback: JSOperationCallback) -> JSOperationCallback; -pub fn JS_GetOperationCallback(cx: *JSContext) -> JSOperationCallback; +pub fn JS_GetOperationCallback(cx: *mut JSContext) -> JSOperationCallback; -pub fn JS_TriggerOperationCallback(rt: *JSRuntime); +pub fn JS_TriggerOperationCallback(rt: *mut JSRuntime); -pub fn JS_IsRunning(cx: *JSContext) -> JSBool; +pub fn JS_IsRunning(cx: *mut JSContext) -> JSBool; -pub fn JS_SaveFrameChain(cx: *JSContext) -> JSBool; +pub fn JS_SaveFrameChain(cx: *mut JSContext) -> JSBool; -pub fn JS_RestoreFrameChain(cx: *JSContext); +pub fn JS_RestoreFrameChain(cx: *mut JSContext); -pub fn JS_NewStringCopyN(cx: *JSContext, s: *c_char, n: size_t) -> *JSString; +pub fn JS_NewStringCopyN(cx: *mut JSContext, s: *c_char, n: size_t) -> *mut JSString; -pub fn JS_NewStringCopyZ(cx: *JSContext, s: *c_char) -> *JSString; +pub fn JS_NewStringCopyZ(cx: *mut JSContext, s: *c_char) -> *mut JSString; -pub fn JS_InternJSString(cx: *JSContext, str: *JSString) -> *JSString; +pub fn JS_InternJSString(cx: *mut JSContext, str: *mut JSString) -> *mut JSString; -pub fn JS_InternStringN(cx: *JSContext, s: *c_char, length: size_t) -> *JSString; +pub fn JS_InternStringN(cx: *mut JSContext, s: *c_char, length: size_t) -> *mut JSString; -pub fn JS_InternString(cx: *JSContext, s: *c_char) -> *JSString; +pub fn JS_InternString(cx: *mut JSContext, s: *c_char) -> *mut JSString; -pub fn JS_NewUCString(cx: *JSContext, chars: *jschar, length: size_t) -> *JSString; +pub fn JS_NewUCString(cx: *mut JSContext, chars: *mut jschar, length: size_t) -> *mut JSString; -pub fn JS_NewUCStringCopyN(cx: *JSContext, s: *jschar, n: size_t) -> *JSString; +pub fn JS_NewUCStringCopyN(cx: *mut JSContext, s: *jschar, n: size_t) -> *mut JSString; -pub fn JS_NewUCStringCopyZ(cx: *JSContext, s: *jschar) -> *JSString; +pub fn JS_NewUCStringCopyZ(cx: *mut JSContext, s: *jschar) -> *mut JSString; -pub fn JS_InternUCStringN(cx: *JSContext, s: *jschar, length: size_t) -> *JSString; +pub fn JS_InternUCStringN(cx: *mut JSContext, s: *jschar, length: size_t) -> *mut JSString; -pub fn JS_InternUCString(cx: *JSContext, s: *jschar) -> *JSString; +pub fn JS_InternUCString(cx: *mut JSContext, s: *jschar) -> *mut JSString; -pub fn JS_CompareStrings(cx: *JSContext, str1: *JSString, str2: *JSString, result: *int32_t) -> JSBool; +pub fn JS_CompareStrings(cx: *mut JSContext, str1: *mut JSString, str2: *mut JSString, result: *mut int32_t) -> JSBool; -pub fn JS_StringEqualsAscii(cx: *JSContext, str: *JSString, asciiBytes: *c_char, _match: *JSBool) -> JSBool; +pub fn JS_StringEqualsAscii(cx: *mut JSContext, str: *mut JSString, asciiBytes: *c_char, _match: *mut JSBool) -> JSBool; -pub fn JS_PutEscapedString(cx: *JSContext, buffer: *c_char, size: size_t, str: *JSString, quote: c_char) -> size_t; +pub fn JS_PutEscapedString(cx: *mut JSContext, buffer: *mut c_char, size: size_t, str: *mut JSString, quote: c_char) -> size_t; -pub fn JS_FileEscapedString(fp: *FILE, str: *JSString, quote: c_char) -> JSBool; +pub fn JS_FileEscapedString(fp: *mut FILE, str: *mut JSString, quote: c_char) -> JSBool; -pub fn JS_GetStringLength(str: *JSString) -> size_t; +pub fn JS_GetStringLength(str: *mut JSString) -> size_t; -pub fn JS_GetStringCharsAndLength(cx: *JSContext, str: *JSString, length: *size_t) -> *jschar; +pub fn JS_GetStringCharsAndLength(cx: *mut JSContext, str: *mut JSString, length: *mut size_t) -> *jschar; -pub fn JS_GetInternedStringChars(str: *JSString) -> *jschar; +pub fn JS_GetInternedStringChars(str: *mut JSString) -> *jschar; -pub fn JS_GetInternedStringCharsAndLength(str: *JSString, length: *size_t) -> *jschar; +pub fn JS_GetInternedStringCharsAndLength(str: *mut JSString, length: *mut size_t) -> *jschar; -pub fn JS_GetStringCharsZ(cx: *JSContext, str: *JSString) -> *jschar; +pub fn JS_GetStringCharsZ(cx: *mut JSContext, str: *mut JSString) -> *jschar; -pub fn JS_GetStringCharsZAndLength(cx: *JSContext, str: *JSString, length: *size_t) -> *jschar; +pub fn JS_GetStringCharsZAndLength(cx: *mut JSContext, str: *mut JSString, length: *mut size_t) -> *jschar; -pub fn JS_FlattenString(cx: *JSContext, str: *JSString) -> *JSFlatString; +pub fn JS_FlattenString(cx: *mut JSContext, str: *mut JSString) -> *mut JSFlatString; -pub fn JS_GetFlatStringChars(str: *JSFlatString) -> *jschar; +pub fn JS_GetFlatStringChars(str: *mut JSFlatString) -> *jschar; -pub fn JS_FlatStringEqualsAscii(str: *JSFlatString, asciiBytes: *c_char) -> JSBool; +pub fn JS_FlatStringEqualsAscii(str: *mut JSFlatString, asciiBytes: *c_char) -> JSBool; -pub fn JS_PutEscapedFlatString(buffer: *c_char, size: size_t, str: *JSFlatString, quote: c_char) -> size_t; +pub fn JS_PutEscapedFlatString(buffer: *mut c_char, size: size_t, str: *mut JSFlatString, quote: c_char) -> size_t; -pub fn JS_NewGrowableString(cx: *JSContext, chars: *jschar, length: size_t) -> *JSString; +pub fn JS_NewGrowableString(cx: *mut JSContext, chars: *mut jschar, length: size_t) -> *mut JSString; -pub fn JS_NewDependentString(cx: *JSContext, str: *JSString, start: size_t, length: size_t) -> *JSString; +pub fn JS_NewDependentString(cx: *mut JSContext, str: *mut JSString, start: size_t, length: size_t) -> *mut JSString; -pub fn JS_ConcatStrings(cx: *JSContext, left: *JSString, right: *JSString) -> *JSString; +pub fn JS_ConcatStrings(cx: *mut JSContext, left: *mut JSString, right: *mut JSString) -> *mut JSString; -pub fn JS_UndependString(cx: *JSContext, str: *JSString) -> *jschar; +pub fn JS_UndependString(cx: *mut JSContext, str: *mut JSString) -> *jschar; -pub fn JS_MakeStringImmutable(cx: *JSContext, str: *JSString) -> JSBool; +pub fn JS_MakeStringImmutable(cx: *mut JSContext, str: *mut JSString) -> JSBool; pub fn JS_CStringsAreUTF8() -> JSBool; pub fn JS_SetCStringsAreUTF8(); -pub fn JS_EncodeCharacters(cx: *JSContext, src: *jschar, srclen: size_t, dst: *c_char, dstlenp: *size_t) -> JSBool; - -pub fn JS_DecodeBytes(cx: *JSContext, src: *c_char, srclen: size_t, dst: *jschar, dstlenp: *size_t) -> JSBool; +pub fn JS_EncodeCharacters(cx: *mut JSContext, src: *jschar, srclen: size_t, dst: *mut c_char, dstlenp: *mut size_t) -> JSBool; -pub fn JS_DecodeUTF8(cx: *JSContext, src: *c_char, srclen: size_t, dst: *jschar, dstlenp: *size_t) -> JSBool; +pub fn JS_DecodeBytes(cx: *mut JSContext, src: *c_char, srclen: size_t, dst: *mut jschar, dstlenp: *mut size_t) -> JSBool; -pub fn JS_EncodeString(cx: *JSContext, str: *JSString) -> *c_char; +pub fn JS_DecodeUTF8(cx: *mut JSContext, src: *c_char, srclen: size_t, dst: *mut jschar, dstlenp: *mut size_t) -> JSBool; -pub fn JS_GetStringEncodingLength(cx: *JSContext, str: *JSString) -> size_t; +pub fn JS_EncodeString(cx: *mut JSContext, str: *mut JSString) -> *mut c_char; -pub fn JS_EncodeStringToBuffer(str: *JSString, buffer: *c_char, length: size_t) -> size_t; +pub fn JS_GetStringEncodingLength(cx: *mut JSContext, str: *mut JSString) -> size_t; -pub fn JS_Stringify(cx: *JSContext, vp: *JSVal, replacer: *JSObject, space: JSVal, callback: JSONWriteCallback, data: *c_void) -> JSBool; +pub fn JS_EncodeStringToBuffer(str: *mut JSString, buffer: *mut c_char, length: size_t) -> size_t; -pub fn JS_ParseJSON(cx: *JSContext, chars: *jschar, len: uint32_t, vp: *JSVal) -> JSBool; +pub fn JS_Stringify(cx: *mut JSContext, vp: *mut JSVal, replacer: *mut JSObject, space: JSVal, callback: JSONWriteCallback, data: *mut c_void) -> JSBool; -pub fn JS_ParseJSONWithReviver(cx: *JSContext, chars: *jschar, len: uint32_t, reviver: JSVal, vp: *JSVal) -> JSBool; +pub fn JS_ParseJSON(cx: *mut JSContext, chars: *jschar, len: uint32_t, vp: *mut JSVal) -> JSBool; -pub fn JS_ReadStructuredClone(cx: *JSContext, data: *uint64_t, nbytes: size_t, version: uint32_t, vp: *JSVal, optionalCallbacks: *JSStructuredCloneCallbacks, closure: *c_void) -> JSBool; +pub fn JS_ParseJSONWithReviver(cx: *mut JSContext, chars: *jschar, len: uint32_t, reviver: JSVal, vp: *mut JSVal) -> JSBool; -pub fn JS_WriteStructuredClone(cx: *JSContext, v: JSVal, datap: **uint64_t, nbytesp: *size_t, optionalCallbacks: *JSStructuredCloneCallbacks, closure: *c_void) -> JSBool; +pub fn JS_ReadStructuredClone(cx: *mut JSContext, data: *uint64_t, nbytes: size_t, version: uint32_t, vp: *mut JSVal, optionalCallbacks: *JSStructuredCloneCallbacks, closure: *mut c_void) -> JSBool; -pub fn JS_StructuredClone(cx: *JSContext, v: JSVal, vp: *JSVal, optionalCallbacks: *JSStructuredCloneCallbacks, closure: *c_void) -> JSBool; +pub fn JS_WriteStructuredClone(cx: *mut JSContext, v: JSVal, datap: *mut *mut uint64_t, nbytesp: *mut size_t, optionalCallbacks: *JSStructuredCloneCallbacks, closure: *mut c_void) -> JSBool; -pub fn JS_SetStructuredCloneCallbacks(rt: *JSRuntime, callbacks: *JSStructuredCloneCallbacks); +pub fn JS_StructuredClone(cx: *mut JSContext, v: JSVal, vp: *mut JSVal, optionalCallbacks: *JSStructuredCloneCallbacks, closure: *mut c_void) -> JSBool; -pub fn JS_ReadUint32Pair(r: *JSStructuredCloneReader, p1: *uint32_t, p2: *uint32_t) -> JSBool; +pub fn JS_SetStructuredCloneCallbacks(rt: *mut JSRuntime, callbacks: *JSStructuredCloneCallbacks); -pub fn JS_ReadBytes(r: *JSStructuredCloneReader, p: *c_void, len: size_t) -> JSBool; +pub fn JS_ReadUint32Pair(r: *mut JSStructuredCloneReader, p1: *mut uint32_t, p2: *mut uint32_t) -> JSBool; -pub fn JS_ReadTypedArray(r: *JSStructuredCloneReader, vp: *JSVal) -> JSBool; +pub fn JS_ReadBytes(r: *mut JSStructuredCloneReader, p: *mut c_void, len: size_t) -> JSBool; -pub fn JS_WriteUint32Pair(w: *JSStructuredCloneWriter, tag: uint32_t, data: uint32_t) -> JSBool; +pub fn JS_ReadTypedArray(r: *mut JSStructuredCloneReader, vp: *mut JSVal) -> JSBool; -pub fn JS_WriteBytes(w: *JSStructuredCloneWriter, p: *c_void, len: size_t) -> JSBool; +pub fn JS_WriteUint32Pair(w: *mut JSStructuredCloneWriter, tag: uint32_t, data: uint32_t) -> JSBool; -pub fn JS_WriteTypedArray(w: *JSStructuredCloneWriter, v: JSVal) -> JSBool; +pub fn JS_WriteBytes(w: *mut JSStructuredCloneWriter, p: *c_void, len: size_t) -> JSBool; -pub fn JS_SetLocaleCallbacks(cx: *JSContext, callbacks: *JSLocaleCallbacks); +pub fn JS_WriteTypedArray(w: *mut JSStructuredCloneWriter, v: JSVal) -> JSBool; -pub fn JS_GetLocaleCallbacks(cx: *JSContext) -> *JSLocaleCallbacks; +pub fn JS_SetLocaleCallbacks(cx: *mut JSContext, callbacks: *mut JSLocaleCallbacks); -pub fn JS_ReportError(cx: *JSContext, format: *c_char/* FIXME: variadic function */); +pub fn JS_GetLocaleCallbacks(cx: *mut JSContext) -> *mut JSLocaleCallbacks; -pub fn JS_ReportErrorNumber(cx: *JSContext, errorCallback: JSErrorCallback, userRef: *c_void, errorNumber: c_uint, ...); +pub fn JS_ReportError(cx: *mut JSContext, format: *c_char, ...); -pub fn JS_ReportErrorNumberUC(cx: *JSContext, errorCallback: JSErrorCallback, userRef: *c_void, errorNumber: c_uint/* FIXME: variadic function */); +pub fn JS_ReportErrorNumber(cx: *mut JSContext, errorCallback: JSErrorCallback, userRef: *mut c_void, errorNumber: c_uint, ...); -pub fn JS_ReportWarning(cx: *JSContext, format: *c_char/* FIXME: variadic function */) -> JSBool; +pub fn JS_ReportErrorNumberUC(cx: *mut JSContext, errorCallback: JSErrorCallback, userRef: *mut c_void, errorNumber: c_uint, ...); -pub fn JS_ReportErrorFlagsAndNumber(cx: *JSContext, flags: c_uint, errorCallback: JSErrorCallback, userRef: *c_void, errorNumber: c_uint/* FIXME: variadic function */) -> JSBool; +pub fn JS_ReportWarning(cx: *mut JSContext, format: *c_char, ...) -> JSBool; -pub fn JS_ReportErrorFlagsAndNumberUC(cx: *JSContext, flags: c_uint, errorCallback: JSErrorCallback, userRef: *c_void, errorNumber: c_uint/* FIXME: variadic function */) -> JSBool; +pub fn JS_ReportErrorFlagsAndNumber(cx: *mut JSContext, flags: c_uint, errorCallback: JSErrorCallback, userRef: *mut c_void, errorNumber: c_uint, ...) -> JSBool; -pub fn JS_ReportOutOfMemory(cx: *JSContext); +pub fn JS_ReportErrorFlagsAndNumberUC(cx: *mut JSContext, flags: c_uint, errorCallback: JSErrorCallback, userRef: *mut c_void, errorNumber: c_uint, ...) -> JSBool; -pub fn JS_ReportAllocationOverflow(cx: *JSContext); +pub fn JS_ReportOutOfMemory(cx: *mut JSContext); -pub fn JS_GetErrorReporter(cx: *JSContext) -> JSErrorReporter; +pub fn JS_ReportAllocationOverflow(cx: *mut JSContext); -pub fn JS_SetErrorReporter(cx: *JSContext, er: JSErrorReporter) -> JSErrorReporter; +pub fn JS_GetErrorReporter(cx: *mut JSContext) -> JSErrorReporter; -pub fn JS_NewDateObject(cx: *JSContext, year: c_int, mon: c_int, mday: c_int, hour: c_int, min: c_int, sec: c_int) -> *JSObject; +pub fn JS_SetErrorReporter(cx: *mut JSContext, er: JSErrorReporter) -> JSErrorReporter; -pub fn JS_NewDateObjectMsec(cx: *JSContext, msec: c_double) -> *JSObject; +pub fn JS_NewDateObject(cx: *mut JSContext, year: c_int, mon: c_int, mday: c_int, hour: c_int, min: c_int, sec: c_int) -> *mut JSObject; -pub fn JS_ObjectIsDate(cx: *JSContext, obj: JSRawObject) -> JSBool; +pub fn JS_NewDateObjectMsec(cx: *mut JSContext, msec: c_double) -> *mut JSObject; -pub fn JS_ClearDateCaches(cx: *JSContext); +pub fn JS_ObjectIsDate(cx: *mut JSContext, obj: JSRawObject) -> JSBool; -pub fn JS_NewRegExpObject(cx: *JSContext, obj: *JSObject, bytes: *c_char, length: size_t, flags: c_uint) -> *JSObject; +pub fn JS_ClearDateCaches(cx: *mut JSContext); -pub fn JS_NewUCRegExpObject(cx: *JSContext, obj: *JSObject, chars: *jschar, length: size_t, flags: c_uint) -> *JSObject; +pub fn JS_NewRegExpObject(cx: *mut JSContext, obj: *mut JSObject, bytes: *mut c_char, length: size_t, flags: c_uint) -> *mut JSObject; -pub fn JS_SetRegExpInput(cx: *JSContext, obj: *JSObject, input: *JSString, multiline: JSBool); +pub fn JS_NewUCRegExpObject(cx: *mut JSContext, obj: *mut JSObject, chars: *mut jschar, length: size_t, flags: c_uint) -> *mut JSObject; -pub fn JS_ClearRegExpStatics(cx: *JSContext, obj: *JSObject); +pub fn JS_SetRegExpInput(cx: *mut JSContext, obj: *mut JSObject, input: *mut JSString, multiline: JSBool); -pub fn JS_ExecuteRegExp(cx: *JSContext, obj: *JSObject, reobj: *JSObject, chars: *jschar, length: size_t, indexp: *size_t, test: JSBool, rval: *JSVal) -> JSBool; +pub fn JS_ClearRegExpStatics(cx: *mut JSContext, obj: *mut JSObject); -pub fn JS_NewRegExpObjectNoStatics(cx: *JSContext, bytes: *c_char, length: size_t, flags: c_uint) -> *JSObject; +pub fn JS_ExecuteRegExp(cx: *mut JSContext, obj: *mut JSObject, reobj: *mut JSObject, chars: *mut jschar, length: size_t, indexp: *mut size_t, test: JSBool, rval: *mut JSVal) -> JSBool; -pub fn JS_NewUCRegExpObjectNoStatics(cx: *JSContext, chars: *jschar, length: size_t, flags: c_uint) -> *JSObject; +pub fn JS_NewRegExpObjectNoStatics(cx: *mut JSContext, bytes: *mut c_char, length: size_t, flags: c_uint) -> *mut JSObject; -pub fn JS_ExecuteRegExpNoStatics(cx: *JSContext, reobj: *JSObject, chars: *jschar, length: size_t, indexp: *size_t, test: JSBool, rval: *JSVal) -> JSBool; +pub fn JS_NewUCRegExpObjectNoStatics(cx: *mut JSContext, chars: *mut jschar, length: size_t, flags: c_uint) -> *mut JSObject; -pub fn JS_ObjectIsRegExp(cx: *JSContext, obj: *JSObject) -> JSBool; +pub fn JS_ExecuteRegExpNoStatics(cx: *mut JSContext, reobj: *mut JSObject, chars: *mut jschar, length: size_t, indexp: *mut size_t, test: JSBool, rval: *mut JSVal) -> JSBool; -pub fn JS_GetRegExpFlags(cx: *JSContext, obj: *JSObject) -> c_uint; +pub fn JS_ObjectIsRegExp(cx: *mut JSContext, obj: *mut JSObject) -> JSBool; -pub fn JS_GetRegExpSource(cx: *JSContext, obj: *JSObject) -> *JSString; +pub fn JS_GetRegExpFlags(cx: *mut JSContext, obj: *mut JSObject) -> c_uint; -pub fn JS_IsExceptionPending(cx: *JSContext) -> JSBool; +pub fn JS_GetRegExpSource(cx: *mut JSContext, obj: *mut JSObject) -> *mut JSString; -pub fn JS_GetPendingException(cx: *JSContext, vp: *JSVal) -> JSBool; +pub fn JS_IsExceptionPending(cx: *mut JSContext) -> JSBool; -pub fn JS_SetPendingException(cx: *JSContext, v: JSVal); +pub fn JS_GetPendingException(cx: *mut JSContext, vp: *mut JSVal) -> JSBool; -pub fn JS_ClearPendingException(cx: *JSContext); +pub fn JS_SetPendingException(cx: *mut JSContext, v: JSVal); -pub fn JS_ReportPendingException(cx: *JSContext) -> JSBool; +pub fn JS_ClearPendingException(cx: *mut JSContext); -pub fn JS_SaveExceptionState(cx: *JSContext) -> *JSExceptionState; +pub fn JS_ReportPendingException(cx: *mut JSContext) -> JSBool; -pub fn JS_RestoreExceptionState(cx: *JSContext, state: *JSExceptionState); +pub fn JS_SaveExceptionState(cx: *mut JSContext) -> *mut JSExceptionState; -pub fn JS_DropExceptionState(cx: *JSContext, state: *JSExceptionState); +pub fn JS_RestoreExceptionState(cx: *mut JSContext, state: *mut JSExceptionState); -pub fn JS_ErrorFromException(cx: *JSContext, v: JSVal) -> *JSErrorReport; +pub fn JS_DropExceptionState(cx: *mut JSContext, state: *mut JSExceptionState); -pub fn JS_ThrowReportedError(cx: *JSContext, message: *c_char, reportp: *JSErrorReport) -> JSBool; +pub fn JS_ErrorFromException(cx: *mut JSContext, v: JSVal) -> *mut JSErrorReport; -pub fn JS_ThrowStopIteration(cx: *JSContext) -> JSBool; +pub fn JS_ThrowReportedError(cx: *mut JSContext, message: *c_char, reportp: *mut JSErrorReport) -> JSBool; -pub fn JS_GetCurrentThread(/* FIXME: variadic function */) -> intptr_t; +pub fn JS_ThrowStopIteration(cx: *mut JSContext) -> JSBool; -pub fn JS_AbortIfWrongThread(rt: *JSRuntime); +pub fn JS_GetCurrentThread() -> intptr_t; -pub fn JS_ClearRuntimeThread(rt: *JSRuntime); +pub fn JS_AbortIfWrongThread(rt: *mut JSRuntime); -pub fn JS_SetRuntimeThread(rt: *JSRuntime); +pub fn JS_ClearRuntimeThread(rt: *mut JSRuntime); -pub fn JS_SetNativeStackBounds(rt: *JSRuntime, stackBase: uintptr_t, stackEnd: uintptr_t); +pub fn JS_SetRuntimeThread(rt: *mut JSRuntime); -pub fn JS_NewObjectForConstructor(cx: *JSContext, clasp: *JSClass, vp: *JSVal) -> *JSObject; +pub fn JS_SetNativeStackBounds(rt: *mut JSRuntime, minValue: uintptr_t, maxValue: uintptr_t); -pub fn JS_IndexToId(cx: *JSContext, index: uint32_t, id: *jsid) -> JSBool; +pub fn JS_NewObjectForConstructor(cx: *mut JSContext, clasp: *JSClass, vp: *JSVal) -> *mut JSObject; -pub fn JS_IsIdentifier(cx: *JSContext, str: *JSString, isIdentifier: *JSBool) -> JSBool; +pub fn JS_IndexToId(cx: *mut JSContext, index: uint32_t, id: *mut jsid) -> JSBool; -pub fn JS_DescribeScriptedCaller(cx: *JSContext, script: **JSScript, lineno: *c_uint) -> JSBool; +pub fn JS_IsIdentifier(cx: *mut JSContext, str: *mut JSString, isIdentifier: *mut JSBool) -> JSBool; -pub fn JS_EncodeScript(cx: *JSContext, script: *JSScript, lengthp: *uint32_t) -> *c_void; +pub fn JS_DescribeScriptedCaller(cx: *mut JSContext, script: *mut *mut JSScript, lineno: *mut c_uint) -> JSBool; -pub fn JS_EncodeInterpretedFunction(cx: *JSContext, funobj: JSRawObject, lengthp: *uint32_t) -> *c_void; +pub fn JS_EncodeScript(cx: *mut JSContext, script: *mut JSScript, lengthp: *mut uint32_t) -> *mut c_void; -pub fn JS_DecodeScript(cx: *JSContext, data: *c_void, length: uint32_t, principals: *JSPrincipals, originPrincipals: *JSPrincipals) -> *JSScript; +pub fn JS_EncodeInterpretedFunction(cx: *mut JSContext, funobj: JSRawObject, lengthp: *mut uint32_t) -> *mut c_void; -pub fn JS_DecodeInterpretedFunction(cx: *JSContext, data: *c_void, length: uint32_t, principals: *JSPrincipals, originPrincipals: *JSPrincipals) -> *JSObject; +pub fn JS_DecodeScript(cx: *mut JSContext, data: *c_void, length: uint32_t, principals: *mut JSPrincipals, originPrincipals: *mut JSPrincipals) -> *mut JSScript; +pub fn JS_DecodeInterpretedFunction(cx: *mut JSContext, data: *c_void, length: uint32_t, principals: *mut JSPrincipals, originPrincipals: *mut JSPrincipals) -> *mut JSObject; } diff --git a/jsfriendapi.rs b/jsfriendapi.rs index 74bbdef06..b16595808 100644 --- a/jsfriendapi.rs +++ b/jsfriendapi.rs @@ -27,8 +27,8 @@ pub mod bindgen { use libc::uintptr_t; extern { - pub fn JS_NewObjectWithUniqueType(cx: *JSContext, clasp: *JSClass, - proto: *JSObject, parent: *JSObject) -> *JSObject; - pub fn JS_GetAddressableObject(rt: *JSRuntime, candidateObj: uintptr_t) -> *JSObject; + pub fn JS_NewObjectWithUniqueType(cx: *mut JSContext, clasp: *JSClass, + proto: *mut JSObject, parent: *mut JSObject) -> *mut JSObject; + pub fn JS_GetAddressableObject(rt: *mut JSRuntime, candidateObj: uintptr_t) -> *mut JSObject; } } diff --git a/jsval.rs b/jsval.rs index 478cfc54e..e898ea3f0 100644 --- a/jsval.rs +++ b/jsval.rs @@ -2,7 +2,7 @@ * 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 jsapi::{JSObject, JSString}; +use jsapi::{JSObject, JSString, JSGCTraceKind, JSTRACE_OBJECT, JSTRACE_STRING}; use libc::c_void; use std::cast; @@ -122,7 +122,7 @@ pub fn ObjectValue(o: &JSObject) -> JSVal { } #[inline(always)] -pub fn ObjectOrNullValue(o: *JSObject) -> JSVal { +pub fn ObjectOrNullValue(o: *mut JSObject) -> JSVal { if o.is_null() { NullValue() } else { @@ -170,7 +170,7 @@ impl JSVal { self.v >= JSVAL_SHIFTED_TAG_OBJECT as u64 } - pub fn to_object(&self) -> *JSObject { + pub fn to_object(&self) -> *mut JSObject { assert!(self.is_object()); self.to_object_or_null() } @@ -181,11 +181,11 @@ impl JSVal { self.v >= JSVAL_LOWER_INCL_SHIFTED_TAG_OF_OBJ_OR_NULL_SET } - pub fn to_object_or_null(&self) -> *JSObject { + pub fn to_object_or_null(&self) -> *mut JSObject { assert!(self.is_object_or_null()); let ptrBits = self.v & JSVAL_PAYLOAD_MASK; assert!((ptrBits & 0x7) == 0); - ptrBits as uint as *JSObject + ptrBits as uint as *mut JSObject } pub fn to_private(&self) -> *c_void { @@ -199,19 +199,24 @@ impl JSVal { self.v >= JSVAL_LOWER_INCL_SHIFTED_TAG_OF_GCTHING_SET } - pub fn to_gcthing(&self) -> *c_void { + pub fn to_gcthing(&self) -> *mut c_void { assert!(self.is_gcthing()); let ptrBits = self.v & JSVAL_PAYLOAD_MASK; assert!((ptrBits & 0x7) == 0); - ptrBits as *c_void + ptrBits as *mut c_void } pub fn is_markable(&self) -> bool { self.is_gcthing() && !self.is_null() } - pub fn trace_kind(&self) -> u32 { + pub fn trace_kind(&self) -> JSGCTraceKind { assert!(self.is_markable()); - (!self.is_object()) as u32 + if self.is_object() { + JSTRACE_OBJECT + } else { + JSTRACE_STRING + } + } } diff --git a/rust.rs b/rust.rs index 004d6c25a..7e641627d 100644 --- a/rust.rs +++ b/rust.rs @@ -26,7 +26,7 @@ use green::task::GreenTask; pub type rt = rc::Rc; pub struct rt_rsrc { - pub ptr : *JSRuntime, + pub ptr : *mut JSRuntime, } impl Drop for rt_rsrc { @@ -37,7 +37,7 @@ impl Drop for rt_rsrc { } } -pub fn new_runtime(p: *JSRuntime) -> rt { +pub fn new_runtime(p: *mut JSRuntime) -> rt { return rc::Rc::new(rt_rsrc { ptr: p }) @@ -56,7 +56,7 @@ impl RtUtils for rc::Rc { } } -extern fn gc_callback(rt: *JSRuntime, _status: JSGCStatus) { +extern fn gc_callback(rt: *mut JSRuntime, _status: JSGCStatus) { use std::rt::local::Local; use std::rt::task::Task; unsafe { @@ -71,7 +71,7 @@ extern fn gc_callback(rt: *JSRuntime, _status: JSGCStatus) { pub fn rt() -> rt { unsafe { let runtime = JS_Init(default_heapsize); - JS_SetGCCallback(runtime, gc_callback); + JS_SetGCCallback(runtime, Some(gc_callback)); return new_runtime(runtime); } } @@ -80,7 +80,7 @@ pub fn rt() -> rt { // contexts pub struct Cx { - pub ptr: *JSContext, + pub ptr: *mut JSContext, pub rt: rt, } @@ -93,7 +93,7 @@ impl Drop for Cx { } } -pub fn new_context(ptr: *JSContext, rt: rt) -> rc::Rc { +pub fn new_context(ptr: *mut JSContext, rt: rt) -> rc::Rc { return rc::Rc::new(Cx { ptr: ptr, rt: rt, @@ -113,7 +113,7 @@ impl Cx { } } - pub fn set_version(&self, v: i32) { + pub fn set_version(&self, v: JSVersion) { unsafe { JS_SetVersion(self.ptr, v); } @@ -121,27 +121,27 @@ impl Cx { pub fn set_logging_error_reporter(&self) { unsafe { - JS_SetErrorReporter(self.ptr, reportError); + JS_SetErrorReporter(self.ptr, Some(reportError)); } } - pub fn set_error_reporter(&self, reportfn: extern "C" fn(*JSContext, *c_char, *JSErrorReport)) { + pub fn set_error_reporter(&self, reportfn: extern "C" unsafe fn(*mut JSContext, *c_char, *mut JSErrorReport)) { unsafe { - JS_SetErrorReporter(self.ptr, reportfn); + JS_SetErrorReporter(self.ptr, Some(reportfn)); } } - pub fn evaluate_script(&self, glob: *JSObject, script: ~str, filename: ~str, line_num: uint) + pub fn evaluate_script(&self, glob: *mut JSObject, script: ~str, filename: ~str, line_num: uint) -> Result<(),()> { let script_utf16 = script.to_utf16(); filename.to_c_str().with_ref(|filename_cstr| { - let rval: JSVal = NullValue(); + let mut rval: JSVal = NullValue(); debug!("Evaluating script from {:s} with content {}", filename, script); unsafe { if ERR == JS_EvaluateUCScript(self.ptr, glob, script_utf16.as_ptr(), script_utf16.len() as c_uint, filename_cstr, line_num as c_uint, - &rval) { + &mut rval) { debug!("...err!"); Err(()) } else { @@ -155,7 +155,7 @@ impl Cx { } } -pub extern fn reportError(_cx: *JSContext, msg: *c_char, report: *JSErrorReport) { +pub extern fn reportError(_cx: *mut JSContext, msg: *c_char, report: *mut JSErrorReport) { unsafe { let fnptr = (*report).filename; let fname = if fnptr.is_not_null() {from_c_str(fnptr)} else {"none".to_owned()}; @@ -165,7 +165,7 @@ pub extern fn reportError(_cx: *JSContext, msg: *c_char, report: *JSErrorReport) } } -pub fn with_compartment(cx: *JSContext, object: *JSObject, cb: || -> R) -> R { +pub fn with_compartment(cx: *mut JSContext, object: *mut JSObject, cb: || -> R) -> R { unsafe { let call = JS_EnterCrossCompartmentCall(cx, object); let result = cb();