diff --git a/.travis.yml b/.travis.yml index 177492a9c..35ad10706 100644 --- a/.travis.yml +++ b/.travis.yml @@ -17,8 +17,13 @@ addons: - llvm-toolchain-xenial-5.0 packages: - autoconf2.13 + - gcc-6 - g++-6 - clang-5.0 + homebrew: + packages: + - python + - python@2 env: - FEATURES="" @@ -30,7 +35,7 @@ before_script: script: - ccache -z - - CCACHE=$(which ccache) travis_wait cargo build --verbose $FEATURES + - CCACHE=$(which ccache) travis_wait 30 cargo build --verbose $FEATURES - CCACHE=$(which ccache) RUST_BACKTRACE=1 cargo test --verbose $FEATURES - ccache -s diff --git a/Cargo.toml b/Cargo.toml index d9744ed6d..14d8289c4 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -2,7 +2,7 @@ name = "mozjs" description = "Rust bindings to the Mozilla SpiderMonkey JavaScript engine." repository = "https://github.com/servo/rust-mozjs" -version = "0.10.1" +version = "0.11.0" authors = ["The Servo Project Developers"] build = "build.rs" license = "MPL-2.0" @@ -51,4 +51,4 @@ lazy_static = "1" libc = "0.2" log = "0.4" num-traits = "0.2" -mozjs_sys = "0.61.8" +mozjs_sys = { git = "https://github.com/servo/mozjs", rev = "e21c05b415dfc246175ff8d5fc48b0e8c5b4e9e9" } diff --git a/appveyor.yml b/appveyor.yml index 9142e16aa..b2c4e4a9e 100644 --- a/appveyor.yml +++ b/appveyor.yml @@ -5,6 +5,7 @@ matrix: fast_finish: true environment: + PYTHON3: "C:\\Python37-x64\\python.exe" # The appveyor image we use has a pretty huge set of things installed... we make the # initial PATH something sane so we know what to expect PATH: "C:\\windows\\system32;\ diff --git a/src/generate_wrappers.sh b/src/generate_wrappers.sh index 8d12de7be..4a1444fdc 100755 --- a/src/generate_wrappers.sh +++ b/src/generate_wrappers.sh @@ -4,17 +4,18 @@ grep_heur() { grep -v "link_name" "$1" | \ grep -v '"\]' | \ grep -F -v '/\*\*' | \ - sed -z 's/,\n */, /g' | \ - sed -z 's/:\n */: /g' | \ - sed -z 's/\n *->/ ->/g' | \ + gsed -z 's/,\n */, /g' | \ + gsed -z 's/:\n */: /g' | \ + gsed -z 's/\n *->/ ->/g' | \ grep -v '^\}$' | \ sed 's/^ *pub/pub/' | \ - sed -z 's/\;\n/\n/g' | \ + gsed -z 's/\;\n/\n/g' | \ grep 'pub fn' | \ grep Handle | \ grep -v roxyHandler | \ grep -v '\bIdVector\b' | # name clash between rust::IdVector and JS::IdVector \ grep -v 'pub fn Unbox' | # this function seems to be platform specific \ + grep -v 'CopyAsyncStack' | # arch-specific bindgen output sed 's/root:://g' | sed 's/JS:://g' | sed 's/js:://g' | diff --git a/src/glue.rs b/src/glue.rs index dc2d64be8..ec1cfa4d1 100644 --- a/src/glue.rs +++ b/src/glue.rs @@ -1,5 +1,5 @@ use jsapi::*; -use std::os::raw::c_void; +use std::os::raw::{c_char, c_void}; pub enum Action { } unsafe impl Sync for ProxyTraps { } @@ -347,4 +347,5 @@ extern "C" { pub fn JS_GetPositiveInfinityValue (cx: *mut JSContext, dest: *mut JS::Value); pub fn JS_GetEmptyStringValue (cx: *mut JSContext, dest: *mut JS::Value); pub fn JS_GetReservedSlot (obj: *mut JSObject , index: u32, dest: *mut JS::Value); + pub fn EncodeStringToUTF8(cx: *mut JSContext, str: JS::HandleString, cb: fn(*const c_char)); } diff --git a/src/glue_wrappers.in b/src/glue_wrappers.in index 149978abb..7b5266ff7 100644 --- a/src/glue_wrappers.in +++ b/src/glue_wrappers.in @@ -11,3 +11,4 @@ wrap!(glue: pub fn RUST_JSID_TO_INT(id: HandleId) -> i32); wrap!(glue: pub fn RUST_JSID_IS_STRING(id: HandleId) -> bool); wrap!(glue: pub fn RUST_JSID_TO_STRING(id: HandleId) -> *mut JSString); wrap!(glue: pub fn JS_GetPromiseResult (promise: HandleObject, dest: *mut Value)); +wrap!(glue: pub fn EncodeStringToUTF8(cx: *mut JSContext, str: HandleString, cb: fn(*const c_char))); diff --git a/src/jsapi_wrappers.in b/src/jsapi_wrappers.in index e5afefa3e..173cd3977 100644 --- a/src/jsapi_wrappers.in +++ b/src/jsapi_wrappers.in @@ -1,27 +1,20 @@ +wrap!(jsapi: pub fn GetRealmGlobalOrNull(realm: Handle<*mut Realm>) -> *mut JSObject); +wrap!(jsapi: pub fn ComputeThis(cx: *mut JSContext, vp: *mut Value, thisObject: MutableHandleObject) -> bool); wrap!(jsapi: pub fn IsArray(cx: *mut JSContext, obj: HandleObject, isArray: *mut bool) -> bool); wrap!(jsapi: pub fn IsArray1(cx: *mut JSContext, obj: HandleObject, answer: *mut IsArrayAnswer) -> bool); -wrap!(jsapi: pub fn GetRealmGlobalOrNull(realm: Handle<*mut Realm>) -> *mut JSObject); -wrap!(jsapi: pub fn NewReadableDefaultStreamObject(cx: *mut JSContext, underlyingSource: HandleObject, size: HandleFunction, highWaterMark: f64, proto: HandleObject) -> *mut JSObject); -wrap!(jsapi: pub fn NewReadableByteStreamObject(cx: *mut JSContext, underlyingSource: HandleObject, highWaterMark: f64, proto: HandleObject) -> *mut JSObject); -wrap!(jsapi: pub fn NewReadableExternalSourceStreamObject(cx: *mut JSContext, underlyingSource: *mut ::std::os::raw::c_void, flags: u8, proto: HandleObject) -> *mut JSObject); -wrap!(jsapi: pub fn ReadableStreamGetExternalUnderlyingSource(cx: *mut JSContext, stream: HandleObject, source: *mut *mut ::std::os::raw::c_void) -> bool); -wrap!(jsapi: pub fn ReadableStreamUpdateDataAvailableFromSource(cx: *mut JSContext, stream: HandleObject, availableData: u32) -> bool); -wrap!(jsapi: pub fn ReadableStreamCancel(cx: *mut JSContext, stream: HandleObject, reason: HandleValue) -> *mut JSObject); -wrap!(jsapi: pub fn ReadableStreamGetReader(cx: *mut JSContext, stream: HandleObject, mode: ReadableStreamReaderMode) -> *mut JSObject); -wrap!(jsapi: pub fn ReadableStreamTee(cx: *mut JSContext, stream: HandleObject, branch1Stream: MutableHandleObject, branch2Stream: MutableHandleObject) -> bool); -wrap!(jsapi: pub fn ReadableStreamClose(cx: *mut JSContext, stream: HandleObject) -> bool); -wrap!(jsapi: pub fn ReadableStreamEnqueue(cx: *mut JSContext, stream: HandleObject, chunk: HandleValue) -> bool); -wrap!(jsapi: pub fn ReadableByteStreamEnqueueBuffer(cx: *mut JSContext, stream: HandleObject, buffer: HandleObject) -> bool); -wrap!(jsapi: pub fn ReadableStreamError(cx: *mut JSContext, stream: HandleObject, error: HandleValue) -> bool); -wrap!(jsapi: pub fn ReadableStreamReaderCancel(cx: *mut JSContext, reader: HandleObject, reason: HandleValue) -> bool); -wrap!(jsapi: pub fn ReadableStreamReaderReleaseLock(cx: *mut JSContext, reader: HandleObject) -> bool); -wrap!(jsapi: pub fn ReadableStreamDefaultReaderRead(cx: *mut JSContext, reader: HandleObject) -> *mut JSObject); -wrap!(jsapi: pub fn ReadableStreamBYOBReaderRead(cx: *mut JSContext, reader: HandleObject, view: HandleObject) -> *mut JSObject); +wrap!(jsapi: pub fn EncodeScript(cx: *mut JSContext, buffer: *mut TranscodeBuffer, script: Handle<*mut JSScript>) -> TranscodeResult); +wrap!(jsapi: pub fn EncodeInterpretedFunction(cx: *mut JSContext, buffer: *mut TranscodeBuffer, funobj: HandleObject) -> TranscodeResult); +wrap!(jsapi: pub fn DecodeScript(cx: *mut JSContext, buffer: *mut TranscodeBuffer, scriptp: MutableHandle<*mut JSScript>, cursorIndex: usize) -> TranscodeResult); +wrap!(jsapi: pub fn DecodeScript1(cx: *mut JSContext, range: *const TranscodeRange, scriptp: MutableHandle<*mut JSScript>) -> TranscodeResult); +wrap!(jsapi: pub fn DecodeInterpretedFunction(cx: *mut JSContext, buffer: *mut TranscodeBuffer, funp: MutableHandle<*mut JSFunction>, cursorIndex: usize) -> TranscodeResult); +wrap!(jsapi: pub fn StartIncrementalEncoding(cx: *mut JSContext, script: Handle<*mut JSScript>) -> bool); +wrap!(jsapi: pub fn FinishIncrementalEncoding(cx: *mut JSContext, script: Handle<*mut JSScript>, buffer: *mut TranscodeBuffer) -> bool); +wrap!(jsapi: pub fn ObjectToCompletePropertyDescriptor(cx: *mut JSContext, obj: HandleObject, descriptor: Handle, desc: MutableHandle) -> bool); +wrap!(jsapi: pub fn FromPropertyDescriptor(cx: *mut JSContext, desc: Handle, vp: MutableHandle) -> bool); wrap!(jsapi: pub fn ProtoKeyToId(cx: *mut JSContext, key: JSProtoKey, idp: MutableHandleId)); wrap!(jsapi: pub fn ToPrimitive(cx: *mut JSContext, obj: HandleObject, hint: JSType, vp: MutableHandleValue) -> bool); wrap!(jsapi: pub fn OrdinaryHasInstance(cx: *mut JSContext, objArg: HandleObject, v: HandleValue, bp: *mut bool) -> bool); -wrap!(jsapi: pub fn ObjectToCompletePropertyDescriptor(cx: *mut JSContext, obj: HandleObject, descriptor: HandleValue, desc: MutableHandle) -> bool); -wrap!(jsapi: pub fn FromPropertyDescriptor(cx: *mut JSContext, desc: Handle, vp: MutableHandleValue) -> bool); +wrap!(jsapi: pub fn InstanceofOperator(cx: *mut JSContext, obj: HandleObject, v: HandleValue, bp: *mut bool) -> bool); wrap!(jsapi: pub fn Call(cx: *mut JSContext, thisv: HandleValue, fun: HandleValue, args: *const HandleValueArray, rval: MutableHandleValue) -> bool); wrap!(jsapi: pub fn Construct(cx: *mut JSContext, fun: HandleValue, newTarget: HandleObject, args: *const HandleValueArray, objp: MutableHandleObject) -> bool); wrap!(jsapi: pub fn Construct1(cx: *mut JSContext, fun: HandleValue, args: *const HandleValueArray, objp: MutableHandleObject) -> bool); @@ -31,59 +24,15 @@ wrap!(jsapi: pub fn GetSelfHostedFunction(cx: *mut JSContext, selfHostedName: *c wrap!(jsapi: pub fn NewFunctionFromSpec(cx: *mut JSContext, fs: *const JSFunctionSpec, id: HandleId) -> *mut JSFunction); wrap!(jsapi: pub fn CloneFunctionObject(cx: *mut JSContext, funobj: HandleObject) -> *mut JSObject); wrap!(jsapi: pub fn CloneFunctionObject1(cx: *mut JSContext, funobj: HandleObject, scopeChain: *mut AutoObjectVector) -> *mut JSObject); -wrap!(jsapi: pub fn Compile(cx: *mut JSContext, options: *const ReadOnlyCompileOptions, srcBuf: *mut SourceBufferHolder, script: MutableHandleScript) -> bool); -wrap!(jsapi: pub fn Compile1(cx: *mut JSContext, options: *const ReadOnlyCompileOptions, bytes: *const ::std::os::raw::c_char, length: usize, script: MutableHandleScript) -> bool); -wrap!(jsapi: pub fn Compile2(cx: *mut JSContext, options: *const ReadOnlyCompileOptions, chars: *const u16, length: usize, script: MutableHandleScript) -> bool); -wrap!(jsapi: pub fn Compile3(cx: *mut JSContext, options: *const ReadOnlyCompileOptions, file: *mut FILE, script: MutableHandleScript) -> bool); -wrap!(jsapi: pub fn Compile4(cx: *mut JSContext, options: *const ReadOnlyCompileOptions, filename: *const ::std::os::raw::c_char, script: MutableHandleScript) -> bool); -wrap!(jsapi: pub fn CompileForNonSyntacticScope(cx: *mut JSContext, options: *const ReadOnlyCompileOptions, srcBuf: *mut SourceBufferHolder, script: MutableHandleScript) -> bool); -wrap!(jsapi: pub fn CompileForNonSyntacticScope1(cx: *mut JSContext, options: *const ReadOnlyCompileOptions, bytes: *const ::std::os::raw::c_char, length: usize, script: MutableHandleScript) -> bool); -wrap!(jsapi: pub fn CompileForNonSyntacticScope2(cx: *mut JSContext, options: *const ReadOnlyCompileOptions, chars: *const u16, length: usize, script: MutableHandleScript) -> bool); -wrap!(jsapi: pub fn CompileForNonSyntacticScope3(cx: *mut JSContext, options: *const ReadOnlyCompileOptions, file: *mut FILE, script: MutableHandleScript) -> bool); -wrap!(jsapi: pub fn CompileForNonSyntacticScope4(cx: *mut JSContext, options: *const ReadOnlyCompileOptions, filename: *const ::std::os::raw::c_char, script: MutableHandleScript) -> bool); -wrap!(jsapi: pub fn FinishMultiOffThreadScriptsDecoder(cx: *mut JSContext, token: *mut ::std::os::raw::c_void, scripts: MutableHandle) -> bool); -wrap!(jsapi: pub fn CompileFunction(cx: *mut JSContext, envChain: *mut AutoObjectVector, options: *const ReadOnlyCompileOptions, name: *const ::std::os::raw::c_char, nargs: ::std::os::raw::c_uint, argnames: *const *const ::std::os::raw::c_char, chars: *const u16, length: usize, fun: MutableHandleFunction) -> bool); -wrap!(jsapi: pub fn CompileFunction1(cx: *mut JSContext, envChain: *mut AutoObjectVector, options: *const ReadOnlyCompileOptions, name: *const ::std::os::raw::c_char, nargs: ::std::os::raw::c_uint, argnames: *const *const ::std::os::raw::c_char, srcBuf: *mut SourceBufferHolder, fun: MutableHandleFunction) -> bool); -wrap!(jsapi: pub fn CompileFunction2(cx: *mut JSContext, envChain: *mut AutoObjectVector, options: *const ReadOnlyCompileOptions, name: *const ::std::os::raw::c_char, nargs: ::std::os::raw::c_uint, argnames: *const *const ::std::os::raw::c_char, bytes: *const ::std::os::raw::c_char, length: usize, fun: MutableHandleFunction) -> bool); -wrap!(jsapi: pub fn InitScriptSourceElement(cx: *mut JSContext, script: HandleScript, element: HandleObject, elementAttrName: HandleString) -> bool); -wrap!(jsapi: pub fn ExposeScriptToDebugger(cx: *mut JSContext, script: HandleScript)); -wrap!(jsapi: pub fn CloneAndExecuteScript(cx: *mut JSContext, script: Handle<*mut JSScript>, rval: MutableHandleValue) -> bool); -wrap!(jsapi: pub fn CloneAndExecuteScript1(cx: *mut JSContext, envChain: *mut AutoObjectVector, script: Handle<*mut JSScript>, rval: MutableHandleValue) -> bool); -wrap!(jsapi: pub fn Evaluate(cx: *mut JSContext, options: *const ReadOnlyCompileOptions, srcBuf: *mut SourceBufferHolder, rval: MutableHandleValue) -> bool); -wrap!(jsapi: pub fn Evaluate1(cx: *mut JSContext, envChain: *mut AutoObjectVector, options: *const ReadOnlyCompileOptions, srcBuf: *mut SourceBufferHolder, rval: MutableHandleValue) -> bool); -wrap!(jsapi: pub fn Evaluate2(cx: *mut JSContext, options: *const ReadOnlyCompileOptions, chars: *const u16, length: usize, rval: MutableHandleValue) -> bool); -wrap!(jsapi: pub fn Evaluate3(cx: *mut JSContext, envChain: *mut AutoObjectVector, options: *const ReadOnlyCompileOptions, chars: *const u16, length: usize, rval: MutableHandleValue) -> bool); -wrap!(jsapi: pub fn Evaluate4(cx: *mut JSContext, options: *const ReadOnlyCompileOptions, bytes: *const ::std::os::raw::c_char, length: usize, rval: MutableHandleValue) -> bool); -wrap!(jsapi: pub fn Evaluate5(cx: *mut JSContext, options: *const ReadOnlyCompileOptions, filename: *const ::std::os::raw::c_char, rval: MutableHandleValue) -> bool); -wrap!(jsapi: pub fn SetModuleResolveHook(cx: *mut JSContext, func: HandleFunction)); -wrap!(jsapi: pub fn CompileModule(cx: *mut JSContext, options: *const ReadOnlyCompileOptions, srcBuf: *mut SourceBufferHolder, moduleRecord: MutableHandleObject) -> bool); +wrap!(jsapi: pub fn FinishDynamicModuleImport(cx: *mut JSContext, referencingPrivate: HandleValue, specifier: HandleString, promise: HandleObject) -> bool); +wrap!(jsapi: pub fn CompileModule(cx: *mut JSContext, options: *const ReadOnlyCompileOptions, srcBuf: *mut SourceText, moduleRecord: MutableHandleObject) -> bool); wrap!(jsapi: pub fn ModuleInstantiate(cx: *mut JSContext, moduleRecord: HandleObject) -> bool); wrap!(jsapi: pub fn ModuleEvaluate(cx: *mut JSContext, moduleRecord: HandleObject) -> bool); wrap!(jsapi: pub fn GetRequestedModules(cx: *mut JSContext, moduleRecord: HandleObject) -> *mut JSObject); wrap!(jsapi: pub fn GetRequestedModuleSpecifier(cx: *mut JSContext, requestedModuleObject: HandleValue) -> *mut JSString); wrap!(jsapi: pub fn GetRequestedModuleSourcePos(cx: *mut JSContext, requestedModuleObject: HandleValue, lineNumber: *mut u32, columnNumber: *mut u32)); wrap!(jsapi: pub fn GetModuleScript(moduleRecord: HandleObject) -> *mut JSScript); -wrap!(jsapi: pub fn NewPromiseObject(cx: *mut JSContext, executor: HandleObject, proto: HandleObject) -> *mut JSObject); -wrap!(jsapi: pub fn IsPromiseObject(obj: HandleObject) -> bool); -wrap!(jsapi: pub fn GetPromiseState(promise: HandleObject) -> PromiseState); -wrap!(jsapi: pub fn GetPromiseID(promise: HandleObject) -> u64); -wrap!(jsapi: pub fn GetPromiseResult(promise: HandleObject) -> Value); -wrap!(jsapi: pub fn GetPromiseIsHandled(promise: HandleObject) -> bool); -wrap!(jsapi: pub fn GetPromiseAllocationSite(promise: HandleObject) -> *mut JSObject); -wrap!(jsapi: pub fn GetPromiseResolutionSite(promise: HandleObject) -> *mut JSObject); -wrap!(jsapi: pub fn CallOriginalPromiseResolve(cx: *mut JSContext, resolutionValue: HandleValue) -> *mut JSObject); -wrap!(jsapi: pub fn CallOriginalPromiseReject(cx: *mut JSContext, rejectionValue: HandleValue) -> *mut JSObject); -wrap!(jsapi: pub fn ResolvePromise(cx: *mut JSContext, promiseObj: HandleObject, resolutionValue: HandleValue) -> bool); -wrap!(jsapi: pub fn RejectPromise(cx: *mut JSContext, promiseObj: HandleObject, rejectionValue: HandleValue) -> bool); -wrap!(jsapi: pub fn CallOriginalPromiseThen(cx: *mut JSContext, promise: HandleObject, onResolve: HandleObject, onReject: HandleObject) -> *mut JSObject); -wrap!(jsapi: pub fn AddPromiseReactions(cx: *mut JSContext, promise: HandleObject, onResolve: HandleObject, onReject: HandleObject) -> bool); -wrap!(jsapi: pub fn NewAddonId(cx: *mut JSContext, str: HandleString) -> *mut JSAddonId); -wrap!(jsapi: pub fn NewSymbol(cx: *mut JSContext, description: HandleString) -> *mut Symbol); -wrap!(jsapi: pub fn GetSymbolFor(cx: *mut JSContext, key: HandleString) -> *mut Symbol); -wrap!(jsapi: pub fn GetSymbolDescription(symbol: HandleSymbol) -> *mut JSString); -wrap!(jsapi: pub fn GetSymbolCode(symbol: Handle<*mut Symbol>) -> SymbolCode); wrap!(jsapi: pub fn PropertySpecNameEqualsId(name: *const ::std::os::raw::c_char, id: HandleId) -> bool); -wrap!(jsapi: pub fn ToJSONMaybeSafely(cx: *mut JSContext, input: HandleObject, callback: JSONWriteCallback, data: *mut ::std::os::raw::c_void) -> bool); wrap!(jsapi: pub fn CreateError(cx: *mut JSContext, type_: JSExnType, stack: HandleObject, fileName: HandleString, lineNumber: u32, columnNumber: u32, report: *mut JSErrorReport, message: HandleString, rval: MutableHandleValue) -> bool); wrap!(jsapi: pub fn GetWeakMapEntry(cx: *mut JSContext, mapObj: HandleObject, key: HandleObject, val: MutableHandleValue) -> bool); wrap!(jsapi: pub fn SetWeakMapEntry(cx: *mut JSContext, mapObj: HandleObject, key: HandleObject, val: HandleValue) -> bool); @@ -107,51 +56,105 @@ wrap!(jsapi: pub fn SetValues(cx: *mut JSContext, obj: HandleObject, rval: Mutab wrap!(jsapi: pub fn SetEntries(cx: *mut JSContext, obj: HandleObject, rval: MutableHandleValue) -> bool); wrap!(jsapi: pub fn SetForEach(cx: *mut JSContext, obj: HandleObject, callbackFn: HandleValue, thisVal: HandleValue) -> bool); wrap!(jsapi: pub fn ExceptionStackOrNull(obj: HandleObject) -> *mut JSObject); -wrap!(jsapi: pub fn EncodeScript(cx: *mut JSContext, buffer: *mut TranscodeBuffer, script: HandleScript) -> TranscodeResult); -wrap!(jsapi: pub fn EncodeInterpretedFunction(cx: *mut JSContext, buffer: *mut TranscodeBuffer, funobj: HandleObject) -> TranscodeResult); -wrap!(jsapi: pub fn DecodeScript(cx: *mut JSContext, buffer: *mut TranscodeBuffer, scriptp: MutableHandleScript, cursorIndex: usize) -> TranscodeResult); -wrap!(jsapi: pub fn DecodeScript1(cx: *mut JSContext, range: *const TranscodeRange, scriptp: MutableHandleScript) -> TranscodeResult); -wrap!(jsapi: pub fn DecodeInterpretedFunction(cx: *mut JSContext, buffer: *mut TranscodeBuffer, funp: MutableHandleFunction, cursorIndex: usize) -> TranscodeResult); -wrap!(jsapi: pub fn StartIncrementalEncoding(cx: *mut JSContext, script: HandleScript) -> bool); -wrap!(jsapi: pub fn FinishIncrementalEncoding(cx: *mut JSContext, script: HandleScript, buffer: *mut TranscodeBuffer) -> bool); +wrap!(jsapi: pub fn ExceptionTimeWarpTarget(exn: HandleValue) -> u64); wrap!(jsapi: pub fn IsWasmModuleObject(obj: HandleObject) -> bool); wrap!(jsapi: pub fn GetWasmModule(obj: HandleObject) -> RefPtr); wrap!(jsapi: pub fn CaptureCurrentStack(cx: *mut JSContext, stackp: MutableHandleObject, capture: *mut StackCapture) -> bool); -wrap!(jsapi: pub fn CopyAsyncStack(cx: *mut JSContext, asyncStack: HandleObject, asyncCause: HandleString, stackp: MutableHandleObject, maxFrameCount: *const u8) -> bool); -wrap!(jsapi: pub fn GetSavedFrameSource(cx: *mut JSContext, savedFrame: HandleObject, sourcep: MutableHandleString, selfHosted: SavedFrameSelfHosted) -> SavedFrameResult); -wrap!(jsapi: pub fn GetSavedFrameLine(cx: *mut JSContext, savedFrame: HandleObject, linep: *mut u32, selfHosted: SavedFrameSelfHosted) -> SavedFrameResult); -wrap!(jsapi: pub fn GetSavedFrameColumn(cx: *mut JSContext, savedFrame: HandleObject, columnp: *mut u32, selfHosted: SavedFrameSelfHosted) -> SavedFrameResult); -wrap!(jsapi: pub fn GetSavedFrameFunctionDisplayName(cx: *mut JSContext, savedFrame: HandleObject, namep: MutableHandleString, selfHosted: SavedFrameSelfHosted) -> SavedFrameResult); -wrap!(jsapi: pub fn GetSavedFrameAsyncCause(cx: *mut JSContext, savedFrame: HandleObject, asyncCausep: MutableHandleString, selfHosted: SavedFrameSelfHosted) -> SavedFrameResult); -wrap!(jsapi: pub fn GetSavedFrameAsyncParent(cx: *mut JSContext, savedFrame: HandleObject, asyncParentp: MutableHandleObject, selfHosted: SavedFrameSelfHosted) -> SavedFrameResult); -wrap!(jsapi: pub fn GetSavedFrameParent(cx: *mut JSContext, savedFrame: HandleObject, parentp: MutableHandleObject, selfHosted: SavedFrameSelfHosted) -> SavedFrameResult); -wrap!(jsapi: pub fn BuildStackString(cx: *mut JSContext, stack: HandleObject, stringp: MutableHandleString, indent: usize, stackFormat: StackFormat) -> bool); +wrap!(jsapi: pub fn BuildStackString(cx: *mut JSContext, principals: *mut JSPrincipals, stack: HandleObject, stringp: MutableHandleString, indent: usize, stackFormat: StackFormat) -> bool); wrap!(jsapi: pub fn ForceLexicalInitialization(cx: *mut JSContext, obj: HandleObject) -> bool); +wrap!(jsapi: pub fn CloneAndExecuteScript(cx: *mut JSContext, script: Handle<*mut JSScript>, rval: MutableHandle) -> bool); +wrap!(jsapi: pub fn CloneAndExecuteScript1(cx: *mut JSContext, envChain: *mut u8, script: Handle<*mut JSScript>, rval: MutableHandle) -> bool); +wrap!(jsapi: pub fn Evaluate(cx: *mut JSContext, options: *const ReadOnlyCompileOptions, srcBuf: *mut SourceText, rval: MutableHandle) -> bool); +wrap!(jsapi: pub fn Evaluate1(cx: *mut JSContext, envChain: *mut u8, options: *const ReadOnlyCompileOptions, srcBuf: *mut SourceText, rval: MutableHandle) -> bool); +wrap!(jsapi: pub fn EvaluateUtf8(cx: *mut JSContext, options: *const ReadOnlyCompileOptions, bytes: *const ::std::os::raw::c_char, length: usize, rval: MutableHandle) -> bool); +wrap!(jsapi: pub fn EvaluateUtf8Path(cx: *mut JSContext, options: *const ReadOnlyCompileOptions, filename: *const ::std::os::raw::c_char, rval: MutableHandle) -> bool); +wrap!(jsapi: pub fn Compile(cx: *mut JSContext, options: *const ReadOnlyCompileOptions, srcBuf: *mut SourceText, script: MutableHandle<*mut JSScript>) -> bool); +wrap!(jsapi: pub fn CompileDontInflate(cx: *mut JSContext, options: *const ReadOnlyCompileOptions, srcBuf: *mut SourceText, script: MutableHandle<*mut JSScript>) -> bool); +wrap!(jsapi: pub fn CompileUtf8(cx: *mut JSContext, options: *const ReadOnlyCompileOptions, bytes: *const ::std::os::raw::c_char, length: usize, script: MutableHandle<*mut JSScript>) -> bool); +wrap!(jsapi: pub fn CompileUtf8DontInflate(cx: *mut JSContext, options: *const ReadOnlyCompileOptions, bytes: *const ::std::os::raw::c_char, length: usize, script: MutableHandle<*mut JSScript>) -> bool); +wrap!(jsapi: pub fn CompileUtf8File(cx: *mut JSContext, options: *const ReadOnlyCompileOptions, file: *mut FILE, script: MutableHandle<*mut JSScript>) -> bool); +wrap!(jsapi: pub fn CompileUtf8FileDontInflate(cx: *mut JSContext, options: *const ReadOnlyCompileOptions, file: *mut FILE, script: MutableHandle<*mut JSScript>) -> bool); +wrap!(jsapi: pub fn CompileUtf8Path(cx: *mut JSContext, options: *const ReadOnlyCompileOptions, filename: *const ::std::os::raw::c_char, script: MutableHandle<*mut JSScript>) -> bool); +wrap!(jsapi: pub fn CompileForNonSyntacticScope(cx: *mut JSContext, options: *const ReadOnlyCompileOptions, srcBuf: *mut SourceText, script: MutableHandle<*mut JSScript>) -> bool); +wrap!(jsapi: pub fn CompileUtf8ForNonSyntacticScope(cx: *mut JSContext, options: *const ReadOnlyCompileOptions, bytes: *const ::std::os::raw::c_char, length: usize, script: MutableHandle<*mut JSScript>) -> bool); +wrap!(jsapi: pub fn CompileFunction(cx: *mut JSContext, envChain: *mut u8, options: *const ReadOnlyCompileOptions, name: *const ::std::os::raw::c_char, nargs: ::std::os::raw::c_uint, argnames: *const *const ::std::os::raw::c_char, srcBuf: *mut SourceText, fun: MutableHandle<*mut JSFunction>) -> bool); +wrap!(jsapi: pub fn CompileFunctionUtf8(cx: *mut JSContext, envChain: *mut u8, options: *const ReadOnlyCompileOptions, name: *const ::std::os::raw::c_char, nargs: ::std::os::raw::c_uint, argnames: *const *const ::std::os::raw::c_char, utf8: *const ::std::os::raw::c_char, length: usize, fun: MutableHandle<*mut JSFunction>) -> bool); +wrap!(jsapi: pub fn InitScriptSourceElement(cx: *mut JSContext, script: Handle<*mut JSScript>, element: HandleObject, elementAttrName: Handle<*mut JSString>) -> bool); +wrap!(jsapi: pub fn ExposeScriptToDebugger(cx: *mut JSContext, script: Handle<*mut JSScript>)); wrap!(jsapi: pub fn OrdinaryToPrimitive(cx: *mut JSContext, obj: HandleObject, type_: JSType, vp: MutableHandleValue) -> bool); +wrap!(jsapi: pub fn ObjectIsDate(cx: *mut JSContext, obj: HandleObject, isDate: *mut bool) -> bool); +wrap!(jsapi: pub fn StrictlyEqual(cx: *mut JSContext, v1: Handle, v2: Handle, equal: *mut bool) -> bool); +wrap!(jsapi: pub fn LooselyEqual(cx: *mut JSContext, v1: Handle, v2: Handle, equal: *mut bool) -> bool); +wrap!(jsapi: pub fn SameValue(cx: *mut JSContext, v1: Handle, v2: Handle, same: *mut bool) -> bool); +wrap!(jsapi: pub fn ToJSONMaybeSafely(cx: *mut JSContext, input: HandleObject, callback: JSONWriteCallback, data: *mut ::std::os::raw::c_void) -> bool); wrap!(jsapi: pub fn AddSizeOfTab(cx: *mut JSContext, obj: HandleObject, mallocSizeOf: MallocSizeOf, opv: *mut ObjectPrivateVisitor, sizes: *mut TabSizes) -> bool); +wrap!(jsapi: pub fn NewPromiseObject(cx: *mut JSContext, executor: HandleObject, proto: HandleObject) -> *mut JSObject); +wrap!(jsapi: pub fn IsPromiseObject(obj: HandleObject) -> bool); +wrap!(jsapi: pub fn GetPromiseState(promise: HandleObject) -> PromiseState); +wrap!(jsapi: pub fn GetPromiseID(promise: HandleObject) -> u64); +wrap!(jsapi: pub fn GetPromiseResult(promise: HandleObject) -> Value); +wrap!(jsapi: pub fn GetPromiseIsHandled(promise: HandleObject) -> bool); +wrap!(jsapi: pub fn GetPromiseAllocationSite(promise: HandleObject) -> *mut JSObject); +wrap!(jsapi: pub fn GetPromiseResolutionSite(promise: HandleObject) -> *mut JSObject); +wrap!(jsapi: pub fn CallOriginalPromiseResolve(cx: *mut JSContext, resolutionValue: HandleValue) -> *mut JSObject); +wrap!(jsapi: pub fn CallOriginalPromiseReject(cx: *mut JSContext, rejectionValue: HandleValue) -> *mut JSObject); +wrap!(jsapi: pub fn ResolvePromise(cx: *mut JSContext, promiseObj: HandleObject, resolutionValue: HandleValue) -> bool); +wrap!(jsapi: pub fn RejectPromise(cx: *mut JSContext, promiseObj: HandleObject, rejectionValue: HandleValue) -> bool); +wrap!(jsapi: pub fn CallOriginalPromiseThen(cx: *mut JSContext, promise: HandleObject, onFulfilled: HandleObject, onRejected: HandleObject) -> *mut JSObject); +wrap!(jsapi: pub fn AddPromiseReactions(cx: *mut JSContext, promise: HandleObject, onFulfilled: HandleObject, onRejected: HandleObject) -> bool); +wrap!(jsapi: pub fn GetPromiseUserInputEventHandlingState(promise: HandleObject) -> PromiseUserInputEventHandlingState); +wrap!(jsapi: pub fn SetPromiseUserInputEventHandlingState(promise: HandleObject, state: PromiseUserInputEventHandlingState) -> bool); +wrap!(jsapi: pub fn GetSavedFrameSource(cx: *mut JSContext, principals: *mut JSPrincipals, savedFrame: HandleObject, sourcep: MutableHandle<*mut JSString>, selfHosted: SavedFrameSelfHosted) -> SavedFrameResult); +wrap!(jsapi: pub fn GetSavedFrameLine(cx: *mut JSContext, principals: *mut JSPrincipals, savedFrame: HandleObject, linep: *mut u32, selfHosted: SavedFrameSelfHosted) -> SavedFrameResult); +wrap!(jsapi: pub fn GetSavedFrameColumn(cx: *mut JSContext, principals: *mut JSPrincipals, savedFrame: HandleObject, columnp: *mut u32, selfHosted: SavedFrameSelfHosted) -> SavedFrameResult); +wrap!(jsapi: pub fn GetSavedFrameFunctionDisplayName(cx: *mut JSContext, principals: *mut JSPrincipals, savedFrame: HandleObject, namep: MutableHandle<*mut JSString>, selfHosted: SavedFrameSelfHosted) -> SavedFrameResult); +wrap!(jsapi: pub fn GetSavedFrameAsyncCause(cx: *mut JSContext, principals: *mut JSPrincipals, savedFrame: HandleObject, asyncCausep: MutableHandle<*mut JSString>, selfHosted: SavedFrameSelfHosted) -> SavedFrameResult); +wrap!(jsapi: pub fn GetSavedFrameAsyncParent(cx: *mut JSContext, principals: *mut JSPrincipals, savedFrame: HandleObject, asyncParentp: MutableHandleObject, selfHosted: SavedFrameSelfHosted) -> SavedFrameResult); +wrap!(jsapi: pub fn GetSavedFrameParent(cx: *mut JSContext, principals: *mut JSPrincipals, savedFrame: HandleObject, parentp: MutableHandleObject, selfHosted: SavedFrameSelfHosted) -> SavedFrameResult); +wrap!(jsapi: pub fn NewReadableDefaultStreamObject(cx: *mut JSContext, underlyingSource: HandleObject, size: HandleFunction, highWaterMark: f64, proto: HandleObject) -> *mut JSObject); +wrap!(jsapi: pub fn NewReadableExternalSourceStreamObject(cx: *mut JSContext, underlyingSource: *mut ReadableStreamUnderlyingSource, proto: HandleObject) -> *mut JSObject); +wrap!(jsapi: pub fn ReadableStreamGetExternalUnderlyingSource(cx: *mut JSContext, stream: HandleObject, source: *mut *mut ReadableStreamUnderlyingSource) -> bool); +wrap!(jsapi: pub fn ReadableStreamReleaseExternalUnderlyingSource(cx: *mut JSContext, stream: HandleObject) -> bool); +wrap!(jsapi: pub fn ReadableStreamUpdateDataAvailableFromSource(cx: *mut JSContext, stream: HandleObject, availableData: u32) -> bool); +wrap!(jsapi: pub fn ReadableStreamGetMode(cx: *mut JSContext, stream: HandleObject, mode: *mut ReadableStreamMode) -> bool); +wrap!(jsapi: pub fn ReadableStreamIsReadable(cx: *mut JSContext, stream: HandleObject, result: *mut bool) -> bool); +wrap!(jsapi: pub fn ReadableStreamIsLocked(cx: *mut JSContext, stream: HandleObject, result: *mut bool) -> bool); +wrap!(jsapi: pub fn ReadableStreamIsDisturbed(cx: *mut JSContext, stream: HandleObject, result: *mut bool) -> bool); +wrap!(jsapi: pub fn ReadableStreamCancel(cx: *mut JSContext, stream: HandleObject, reason: HandleValue) -> *mut JSObject); +wrap!(jsapi: pub fn ReadableStreamGetReader(cx: *mut JSContext, stream: HandleObject, mode: ReadableStreamReaderMode) -> *mut JSObject); +wrap!(jsapi: pub fn ReadableStreamTee(cx: *mut JSContext, stream: HandleObject, branch1Stream: MutableHandleObject, branch2Stream: MutableHandleObject) -> bool); +wrap!(jsapi: pub fn ReadableStreamClose(cx: *mut JSContext, stream: HandleObject) -> bool); +wrap!(jsapi: pub fn ReadableStreamReaderIsClosed(cx: *mut JSContext, reader: HandleObject, result: *mut bool) -> bool); +wrap!(jsapi: pub fn ReadableStreamEnqueue(cx: *mut JSContext, stream: HandleObject, chunk: HandleValue) -> bool); +wrap!(jsapi: pub fn ReadableStreamError(cx: *mut JSContext, stream: HandleObject, error: HandleValue) -> bool); +wrap!(jsapi: pub fn ReadableStreamReaderCancel(cx: *mut JSContext, reader: HandleObject, reason: HandleValue) -> bool); +wrap!(jsapi: pub fn ReadableStreamReaderReleaseLock(cx: *mut JSContext, reader: HandleObject) -> bool); +wrap!(jsapi: pub fn ReadableStreamDefaultReaderRead(cx: *mut JSContext, reader: HandleObject) -> *mut JSObject); +wrap!(jsapi: pub fn NewSymbol(cx: *mut JSContext, description: Handle<*mut JSString>) -> *mut Symbol); +wrap!(jsapi: pub fn GetSymbolFor(cx: *mut JSContext, key: Handle<*mut JSString>) -> *mut Symbol); +wrap!(jsapi: pub fn GetSymbolDescription(symbol: Handle<*mut Symbol>) -> *mut JSString); +wrap!(jsapi: pub fn GetSymbolCode(symbol: Handle<*mut Symbol>) -> SymbolCode); wrap!(jsapi: pub fn GetBuiltinClass(cx: *mut JSContext, obj: HandleObject, cls: *mut ESClass) -> bool); +wrap!(jsapi: pub fn IsArgumentsObject(obj: HandleObject) -> bool); wrap!(jsapi: pub fn ObjectClassName(cx: *mut JSContext, obj: HandleObject) -> *const ::std::os::raw::c_char); wrap!(jsapi: pub fn EnqueueJob(cx: *mut JSContext, job: HandleObject) -> bool); wrap!(jsapi: pub fn AssertSameCompartment1(cx: *mut JSContext, v: HandleValue)); wrap!(jsapi: pub fn GetObjectProto(cx: *mut JSContext, obj: HandleObject, proto: MutableHandleObject) -> bool); -wrap!(jsapi: pub fn GetOriginalEval(cx: *mut JSContext, scope: HandleObject, eval: MutableHandleObject) -> bool); +wrap!(jsapi: pub fn GetRealmOriginalEval(cx: *mut JSContext, eval: MutableHandleObject) -> bool); wrap!(jsapi: pub fn GetPropertyKeys(cx: *mut JSContext, obj: HandleObject, flags: ::std::os::raw::c_uint, props: *mut AutoIdVector) -> bool); wrap!(jsapi: pub fn RegExpToSharedNonInline(cx: *mut JSContext, regexp: HandleObject) -> *mut RegExpShared); wrap!(jsapi: pub fn DateIsValid(cx: *mut JSContext, obj: HandleObject, isValid: *mut bool) -> bool); wrap!(jsapi: pub fn DateGetMsecSinceEpoch(cx: *mut JSContext, obj: HandleObject, msecSinceEpoch: *mut f64) -> bool); -wrap!(jsapi: pub fn PrepareScriptEnvironmentAndInvoke(cx: *mut JSContext, scope: HandleObject, closure: *mut ScriptEnvironmentPreparer_Closure)); +wrap!(jsapi: pub fn PrepareScriptEnvironmentAndInvoke(cx: *mut JSContext, global: HandleObject, closure: *mut ScriptEnvironmentPreparer_Closure)); wrap!(jsapi: pub fn GetElementsWithAdder(cx: *mut JSContext, obj: HandleObject, receiver: HandleObject, begin: u32, end: u32, adder: *mut ElementAdder) -> bool); wrap!(jsapi: pub fn SetPropertyIgnoringNamedGetter(cx: *mut JSContext, obj: HandleObject, id: HandleId, v: HandleValue, receiver: HandleValue, ownDesc: Handle, result: *mut ObjectOpResult) -> bool); -wrap!(jsapi: pub fn ExecuteInGlobalAndReturnScope(cx: *mut JSContext, obj: HandleObject, script: HandleScript, scope: MutableHandleObject) -> bool); +wrap!(jsapi: pub fn ExecuteInFrameScriptEnvironment(cx: *mut JSContext, obj: HandleObject, script: HandleScript, scope: MutableHandleObject) -> bool); wrap!(jsapi: pub fn ExecuteInJSMEnvironment(cx: *mut JSContext, script: HandleScript, jsmEnv: HandleObject) -> bool); wrap!(jsapi: pub fn ExecuteInJSMEnvironment1(cx: *mut JSContext, script: HandleScript, jsmEnv: HandleObject, targetObj: *mut AutoObjectVector) -> bool); -wrap!(jsapi: pub fn GetFirstSubsumedSavedFrame(cx: *mut JSContext, savedFrame: HandleObject, selfHosted: SavedFrameSelfHosted) -> *mut JSObject); -wrap!(jsapi: pub fn GetFirstSubsumedSavedFrame1(cx: *mut JSContext, principals: *mut JSPrincipals, savedFrame: HandleObject, selfHosted: SavedFrameSelfHosted) -> *mut JSObject); wrap!(jsapi: pub fn ReportIsNotFunction(cx: *mut JSContext, v: HandleValue) -> bool); wrap!(jsapi: pub fn SetWindowProxy(cx: *mut JSContext, global: HandleObject, windowProxy: HandleObject)); wrap!(jsapi: pub fn AddMozDateTimeFormatConstructor(cx: *mut JSContext, intl: HandleObject) -> bool); -wrap!(jsapi: pub fn AddRelativeTimeFormatConstructor(cx: *mut JSContext, intl: HandleObject) -> bool); -wrap!(jsapi: pub fn SetCompartmentValidAccessPtr(cx: *mut JSContext, global: HandleObject, accessp: *mut bool)); +wrap!(jsapi: pub fn SetRealmValidAccessPtr(cx: *mut JSContext, global: HandleObject, accessp: *mut bool)); wrap!(jsapi: pub fn ToBooleanSlow(v: HandleValue) -> bool); wrap!(jsapi: pub fn ToNumberSlow(cx: *mut JSContext, v: HandleValue, dp: *mut f64) -> bool); wrap!(jsapi: pub fn ToInt8Slow(cx: *mut JSContext, v: HandleValue, out: *mut i8) -> bool); @@ -164,35 +167,24 @@ wrap!(jsapi: pub fn ToInt64Slow(cx: *mut JSContext, v: HandleValue, out: *mut i6 wrap!(jsapi: pub fn ToUint64Slow(cx: *mut JSContext, v: HandleValue, out: *mut u64) -> bool); wrap!(jsapi: pub fn ToStringSlow(cx: *mut JSContext, v: HandleValue) -> *mut JSString); wrap!(jsapi: pub fn ToObjectSlow(cx: *mut JSContext, v: HandleValue, reportScanStack: bool) -> *mut JSObject); -wrap!(jsapi: pub fn JS_ReadStructuredClone(cx: *mut JSContext, data: *mut JSStructuredCloneData, version: u32, scope: StructuredCloneScope, vp: MutableHandleValue, optionalCallbacks: *const JSStructuredCloneCallbacks, closure: *mut ::std::os::raw::c_void) -> bool); -wrap!(jsapi: pub fn JS_WriteStructuredClone(cx: *mut JSContext, v: HandleValue, data: *mut JSStructuredCloneData, scope: StructuredCloneScope, cloneDataPolicy: CloneDataPolicy, optionalCallbacks: *const JSStructuredCloneCallbacks, closure: *mut ::std::os::raw::c_void, transferable: HandleValue) -> bool); -wrap!(jsapi: pub fn JS_StructuredClone(cx: *mut JSContext, v: HandleValue, vp: MutableHandleValue, optionalCallbacks: *const JSStructuredCloneCallbacks, closure: *mut ::std::os::raw::c_void) -> bool); -wrap!(jsapi: pub fn JS_ReadTypedArray(r: *mut JSStructuredCloneReader, vp: MutableHandleValue) -> bool); -wrap!(jsapi: pub fn JS_WriteString(w: *mut JSStructuredCloneWriter, str: HandleString) -> bool); -wrap!(jsapi: pub fn JS_WriteTypedArray(w: *mut JSStructuredCloneWriter, v: HandleValue) -> bool); -wrap!(jsapi: pub fn JS_ObjectNotWritten(w: *mut JSStructuredCloneWriter, obj: HandleObject) -> bool); +wrap!(jsapi: pub fn GetFirstSubsumedSavedFrame(cx: *mut JSContext, principals: *mut JSPrincipals, savedFrame: HandleObject, selfHosted: SavedFrameSelfHosted) -> *mut JSObject); +wrap!(jsapi: pub fn JS_EncodeStringToUTF8(cx: *mut JSContext, str: Handle<*mut JSString>) -> UniqueChars); wrap!(jsapi: pub fn JS_ValueToObject(cx: *mut JSContext, v: HandleValue, objp: MutableHandleObject) -> bool); wrap!(jsapi: pub fn JS_ValueToFunction(cx: *mut JSContext, v: HandleValue) -> *mut JSFunction); wrap!(jsapi: pub fn JS_ValueToConstructor(cx: *mut JSContext, v: HandleValue) -> *mut JSFunction); wrap!(jsapi: pub fn JS_ValueToSource(cx: *mut JSContext, v: Handle) -> *mut JSString); wrap!(jsapi: pub fn JS_TypeOfValue(cx: *mut JSContext, v: Handle) -> JSType); -wrap!(jsapi: pub fn JS_StrictlyEqual(cx: *mut JSContext, v1: Handle, v2: Handle, equal: *mut bool) -> bool); -wrap!(jsapi: pub fn JS_LooselyEqual(cx: *mut JSContext, v1: Handle, v2: Handle, equal: *mut bool) -> bool); -wrap!(jsapi: pub fn JS_SameValue(cx: *mut JSContext, v1: Handle, v2: Handle, same: *mut bool) -> bool); wrap!(jsapi: pub fn JS_WrapObject(cx: *mut JSContext, objp: MutableHandleObject) -> bool); wrap!(jsapi: pub fn JS_WrapValue(cx: *mut JSContext, vp: MutableHandleValue) -> bool); wrap!(jsapi: pub fn JS_TransplantObject(cx: *mut JSContext, origobj: HandleObject, target: HandleObject) -> *mut JSObject); wrap!(jsapi: pub fn JS_RefreshCrossCompartmentWrappers(cx: *mut JSContext, obj: HandleObject) -> bool); -wrap!(jsapi: pub fn JS_InitStandardClasses(cx: *mut JSContext, obj: HandleObject) -> bool); wrap!(jsapi: pub fn JS_ResolveStandardClass(cx: *mut JSContext, obj: HandleObject, id: HandleId, resolved: *mut bool) -> bool); wrap!(jsapi: pub fn JS_EnumerateStandardClasses(cx: *mut JSContext, obj: HandleObject) -> bool); wrap!(jsapi: pub fn JS_NewEnumerateStandardClasses(cx: *mut JSContext, obj: HandleObject, properties: *mut AutoIdVector, enumerableOnly: bool) -> bool); +wrap!(jsapi: pub fn JS_NewEnumerateStandardClassesIncludingResolved(cx: *mut JSContext, obj: HandleObject, properties: *mut AutoIdVector, enumerableOnly: bool) -> bool); wrap!(jsapi: pub fn JS_GetClassObject(cx: *mut JSContext, key: JSProtoKey, objp: MutableHandleObject) -> bool); wrap!(jsapi: pub fn JS_GetClassPrototype(cx: *mut JSContext, key: JSProtoKey, objp: MutableHandleObject) -> bool); wrap!(jsapi: pub fn JS_IdToProtoKey(cx: *mut JSContext, id: HandleId) -> JSProtoKey); -wrap!(jsapi: pub fn JS_GetFunctionPrototype(cx: *mut JSContext, forObj: HandleObject) -> *mut JSObject); -wrap!(jsapi: pub fn JS_GetObjectPrototype(cx: *mut JSContext, forObj: HandleObject) -> *mut JSObject); -wrap!(jsapi: pub fn JS_GetArrayPrototype(cx: *mut JSContext, forObj: HandleObject) -> *mut JSObject); wrap!(jsapi: pub fn JS_InitReflectParse(cx: *mut JSContext, global: HandleObject) -> bool); wrap!(jsapi: pub fn JS_DefineProfilingFunctions(cx: *mut JSContext, obj: HandleObject) -> bool); wrap!(jsapi: pub fn JS_DefineDebuggerObject(cx: *mut JSContext, obj: HandleObject) -> bool); @@ -217,36 +209,39 @@ wrap!(jsapi: pub fn JS_PreventExtensions(cx: *mut JSContext, obj: HandleObject, wrap!(jsapi: pub fn JS_SetImmutablePrototype(cx: *mut JSContext, obj: HandleObject, succeeded: *mut bool) -> bool); wrap!(jsapi: pub fn JS_GetOwnPropertyDescriptorById(cx: *mut JSContext, obj: HandleObject, id: HandleId, desc: MutableHandle) -> bool); wrap!(jsapi: pub fn JS_GetOwnPropertyDescriptor(cx: *mut JSContext, obj: HandleObject, name: *const ::std::os::raw::c_char, desc: MutableHandle) -> bool); -wrap!(jsapi: pub fn JS_GetOwnUCPropertyDescriptor(cx: *mut JSContext, obj: HandleObject, name: *const u16, desc: MutableHandle) -> bool); +wrap!(jsapi: pub fn JS_GetOwnUCPropertyDescriptor(cx: *mut JSContext, obj: HandleObject, name: *const u16, namelen: usize, desc: MutableHandle) -> bool); wrap!(jsapi: pub fn JS_GetPropertyDescriptorById(cx: *mut JSContext, obj: HandleObject, id: HandleId, desc: MutableHandle) -> bool); wrap!(jsapi: pub fn JS_GetPropertyDescriptor(cx: *mut JSContext, obj: HandleObject, name: *const ::std::os::raw::c_char, desc: MutableHandle) -> bool); +wrap!(jsapi: pub fn JS_GetUCPropertyDescriptor(cx: *mut JSContext, obj: HandleObject, name: *const u16, namelen: usize, desc: MutableHandle) -> bool); wrap!(jsapi: pub fn JS_DefinePropertyById(cx: *mut JSContext, obj: HandleObject, id: HandleId, desc: Handle, result: *mut ObjectOpResult) -> bool); wrap!(jsapi: pub fn JS_DefinePropertyById1(cx: *mut JSContext, obj: HandleObject, id: HandleId, desc: Handle) -> bool); wrap!(jsapi: pub fn JS_DefinePropertyById2(cx: *mut JSContext, obj: HandleObject, id: HandleId, value: HandleValue, attrs: ::std::os::raw::c_uint) -> bool); wrap!(jsapi: pub fn JS_DefinePropertyById3(cx: *mut JSContext, obj: HandleObject, id: HandleId, getter: JSNative, setter: JSNative, attrs: ::std::os::raw::c_uint) -> bool); -wrap!(jsapi: pub fn JS_DefinePropertyById4(cx: *mut JSContext, obj: HandleObject, id: HandleId, value: HandleObject, attrs: ::std::os::raw::c_uint) -> bool); -wrap!(jsapi: pub fn JS_DefinePropertyById5(cx: *mut JSContext, obj: HandleObject, id: HandleId, value: HandleString, attrs: ::std::os::raw::c_uint) -> bool); -wrap!(jsapi: pub fn JS_DefinePropertyById6(cx: *mut JSContext, obj: HandleObject, id: HandleId, value: i32, attrs: ::std::os::raw::c_uint) -> bool); -wrap!(jsapi: pub fn JS_DefinePropertyById7(cx: *mut JSContext, obj: HandleObject, id: HandleId, value: u32, attrs: ::std::os::raw::c_uint) -> bool); -wrap!(jsapi: pub fn JS_DefinePropertyById8(cx: *mut JSContext, obj: HandleObject, id: HandleId, value: f64, attrs: ::std::os::raw::c_uint) -> bool); +wrap!(jsapi: pub fn JS_DefinePropertyById4(cx: *mut JSContext, obj: HandleObject, id: HandleId, getter: HandleObject, setter: HandleObject, attrs: ::std::os::raw::c_uint) -> bool); +wrap!(jsapi: pub fn JS_DefinePropertyById5(cx: *mut JSContext, obj: HandleObject, id: HandleId, value: HandleObject, attrs: ::std::os::raw::c_uint) -> bool); +wrap!(jsapi: pub fn JS_DefinePropertyById6(cx: *mut JSContext, obj: HandleObject, id: HandleId, value: HandleString, attrs: ::std::os::raw::c_uint) -> bool); +wrap!(jsapi: pub fn JS_DefinePropertyById7(cx: *mut JSContext, obj: HandleObject, id: HandleId, value: i32, attrs: ::std::os::raw::c_uint) -> bool); +wrap!(jsapi: pub fn JS_DefinePropertyById8(cx: *mut JSContext, obj: HandleObject, id: HandleId, value: u32, attrs: ::std::os::raw::c_uint) -> bool); +wrap!(jsapi: pub fn JS_DefinePropertyById9(cx: *mut JSContext, obj: HandleObject, id: HandleId, value: f64, attrs: ::std::os::raw::c_uint) -> bool); wrap!(jsapi: pub fn JS_DefineProperty(cx: *mut JSContext, obj: HandleObject, name: *const ::std::os::raw::c_char, value: HandleValue, attrs: ::std::os::raw::c_uint) -> bool); wrap!(jsapi: pub fn JS_DefineProperty1(cx: *mut JSContext, obj: HandleObject, name: *const ::std::os::raw::c_char, getter: JSNative, setter: JSNative, attrs: ::std::os::raw::c_uint) -> bool); -wrap!(jsapi: pub fn JS_DefineProperty2(cx: *mut JSContext, obj: HandleObject, name: *const ::std::os::raw::c_char, value: HandleObject, attrs: ::std::os::raw::c_uint) -> bool); -wrap!(jsapi: pub fn JS_DefineProperty3(cx: *mut JSContext, obj: HandleObject, name: *const ::std::os::raw::c_char, value: HandleString, attrs: ::std::os::raw::c_uint) -> bool); -wrap!(jsapi: pub fn JS_DefineProperty4(cx: *mut JSContext, obj: HandleObject, name: *const ::std::os::raw::c_char, value: i32, attrs: ::std::os::raw::c_uint) -> bool); -wrap!(jsapi: pub fn JS_DefineProperty5(cx: *mut JSContext, obj: HandleObject, name: *const ::std::os::raw::c_char, value: u32, attrs: ::std::os::raw::c_uint) -> bool); -wrap!(jsapi: pub fn JS_DefineProperty6(cx: *mut JSContext, obj: HandleObject, name: *const ::std::os::raw::c_char, value: f64, attrs: ::std::os::raw::c_uint) -> bool); +wrap!(jsapi: pub fn JS_DefineProperty2(cx: *mut JSContext, obj: HandleObject, name: *const ::std::os::raw::c_char, getter: HandleObject, setter: HandleObject, attrs: ::std::os::raw::c_uint) -> bool); +wrap!(jsapi: pub fn JS_DefineProperty3(cx: *mut JSContext, obj: HandleObject, name: *const ::std::os::raw::c_char, value: HandleObject, attrs: ::std::os::raw::c_uint) -> bool); +wrap!(jsapi: pub fn JS_DefineProperty4(cx: *mut JSContext, obj: HandleObject, name: *const ::std::os::raw::c_char, value: HandleString, attrs: ::std::os::raw::c_uint) -> bool); +wrap!(jsapi: pub fn JS_DefineProperty5(cx: *mut JSContext, obj: HandleObject, name: *const ::std::os::raw::c_char, value: i32, attrs: ::std::os::raw::c_uint) -> bool); +wrap!(jsapi: pub fn JS_DefineProperty6(cx: *mut JSContext, obj: HandleObject, name: *const ::std::os::raw::c_char, value: u32, attrs: ::std::os::raw::c_uint) -> bool); +wrap!(jsapi: pub fn JS_DefineProperty7(cx: *mut JSContext, obj: HandleObject, name: *const ::std::os::raw::c_char, value: f64, attrs: ::std::os::raw::c_uint) -> bool); wrap!(jsapi: pub fn JS_DefineUCProperty(cx: *mut JSContext, obj: HandleObject, name: *const u16, namelen: usize, desc: Handle, result: *mut ObjectOpResult) -> bool); wrap!(jsapi: pub fn JS_DefineUCProperty1(cx: *mut JSContext, obj: HandleObject, name: *const u16, namelen: usize, desc: Handle) -> bool); wrap!(jsapi: pub fn JS_DefineUCProperty2(cx: *mut JSContext, obj: HandleObject, name: *const u16, namelen: usize, value: HandleValue, attrs: ::std::os::raw::c_uint) -> bool); -wrap!(jsapi: pub fn JS_DefineUCProperty3(cx: *mut JSContext, obj: HandleObject, name: *const u16, namelen: usize, getter: JSNative, setter: JSNative, attrs: ::std::os::raw::c_uint) -> bool); +wrap!(jsapi: pub fn JS_DefineUCProperty3(cx: *mut JSContext, obj: HandleObject, name: *const u16, namelen: usize, getter: HandleObject, setter: HandleObject, attrs: ::std::os::raw::c_uint) -> bool); wrap!(jsapi: pub fn JS_DefineUCProperty4(cx: *mut JSContext, obj: HandleObject, name: *const u16, namelen: usize, value: HandleObject, attrs: ::std::os::raw::c_uint) -> bool); wrap!(jsapi: pub fn JS_DefineUCProperty5(cx: *mut JSContext, obj: HandleObject, name: *const u16, namelen: usize, value: HandleString, attrs: ::std::os::raw::c_uint) -> bool); wrap!(jsapi: pub fn JS_DefineUCProperty6(cx: *mut JSContext, obj: HandleObject, name: *const u16, namelen: usize, value: i32, attrs: ::std::os::raw::c_uint) -> bool); wrap!(jsapi: pub fn JS_DefineUCProperty7(cx: *mut JSContext, obj: HandleObject, name: *const u16, namelen: usize, value: u32, attrs: ::std::os::raw::c_uint) -> bool); wrap!(jsapi: pub fn JS_DefineUCProperty8(cx: *mut JSContext, obj: HandleObject, name: *const u16, namelen: usize, value: f64, attrs: ::std::os::raw::c_uint) -> bool); wrap!(jsapi: pub fn JS_DefineElement(cx: *mut JSContext, obj: HandleObject, index: u32, value: HandleValue, attrs: ::std::os::raw::c_uint) -> bool); -wrap!(jsapi: pub fn JS_DefineElement1(cx: *mut JSContext, obj: HandleObject, index: u32, getter: JSNative, setter: JSNative, attrs: ::std::os::raw::c_uint) -> bool); +wrap!(jsapi: pub fn JS_DefineElement1(cx: *mut JSContext, obj: HandleObject, index: u32, getter: HandleObject, setter: HandleObject, attrs: ::std::os::raw::c_uint) -> bool); wrap!(jsapi: pub fn JS_DefineElement2(cx: *mut JSContext, obj: HandleObject, index: u32, value: HandleObject, attrs: ::std::os::raw::c_uint) -> bool); wrap!(jsapi: pub fn JS_DefineElement3(cx: *mut JSContext, obj: HandleObject, index: u32, value: HandleString, attrs: ::std::os::raw::c_uint) -> bool); wrap!(jsapi: pub fn JS_DefineElement4(cx: *mut JSContext, obj: HandleObject, index: u32, value: i32, attrs: ::std::os::raw::c_uint) -> bool); @@ -300,30 +295,17 @@ wrap!(jsapi: pub fn JS_GetArrayLength(cx: *mut JSContext, obj: HandleObject, len wrap!(jsapi: pub fn JS_SetArrayLength(cx: *mut JSContext, obj: HandleObject, length: u32) -> bool); wrap!(jsapi: pub fn JS_StealArrayBufferContents(cx: *mut JSContext, obj: HandleObject) -> *mut ::std::os::raw::c_void); wrap!(jsapi: pub fn JS_ExternalizeArrayBufferContents(cx: *mut JSContext, obj: HandleObject) -> *mut ::std::os::raw::c_void); +wrap!(jsapi: pub fn JS_GetFunctionLength(cx: *mut JSContext, fun: HandleFunction, length: *mut u16) -> bool); wrap!(jsapi: pub fn JS_DefineFunctions(cx: *mut JSContext, obj: HandleObject, fs: *const JSFunctionSpec) -> bool); wrap!(jsapi: pub fn JS_DefineFunction(cx: *mut JSContext, obj: HandleObject, name: *const ::std::os::raw::c_char, call: JSNative, nargs: ::std::os::raw::c_uint, attrs: ::std::os::raw::c_uint) -> *mut JSFunction); wrap!(jsapi: pub fn JS_DefineUCFunction(cx: *mut JSContext, obj: HandleObject, name: *const u16, namelen: usize, call: JSNative, nargs: ::std::os::raw::c_uint, attrs: ::std::os::raw::c_uint) -> *mut JSFunction); wrap!(jsapi: pub fn JS_DefineFunctionById(cx: *mut JSContext, obj: HandleObject, id: Handle, call: JSNative, nargs: ::std::os::raw::c_uint, attrs: ::std::os::raw::c_uint) -> *mut JSFunction); -wrap!(jsapi: pub fn JS_BufferIsCompilableUnit(cx: *mut JSContext, obj: HandleObject, utf8: *const ::std::os::raw::c_char, length: usize) -> bool); -wrap!(jsapi: pub fn JS_CompileScript(cx: *mut JSContext, ascii: *const ::std::os::raw::c_char, length: usize, options: *const CompileOptions, script: MutableHandleScript) -> bool); -wrap!(jsapi: pub fn JS_CompileUCScript(cx: *mut JSContext, chars: *const u16, length: usize, options: *const CompileOptions, script: MutableHandleScript) -> bool); wrap!(jsapi: pub fn JS_GetFunctionScript(cx: *mut JSContext, fun: HandleFunction) -> *mut JSScript); wrap!(jsapi: pub fn JS_DecompileScript(cx: *mut JSContext, script: Handle<*mut JSScript>) -> *mut JSString); wrap!(jsapi: pub fn JS_DecompileFunction(cx: *mut JSContext, fun: Handle<*mut JSFunction>) -> *mut JSString); -wrap!(jsapi: pub fn JS_ExecuteScript(cx: *mut JSContext, script: HandleScript, rval: MutableHandleValue) -> bool); -wrap!(jsapi: pub fn JS_ExecuteScript1(cx: *mut JSContext, script: HandleScript) -> bool); -wrap!(jsapi: pub fn JS_ExecuteScript2(cx: *mut JSContext, envChain: *mut AutoObjectVector, script: HandleScript, rval: MutableHandleValue) -> bool); -wrap!(jsapi: pub fn JS_ExecuteScript3(cx: *mut JSContext, envChain: *mut AutoObjectVector, script: HandleScript) -> bool); wrap!(jsapi: pub fn JS_AtomizeAndPinJSString(cx: *mut JSContext, str: HandleString) -> *mut JSString); wrap!(jsapi: pub fn JS_NewDependentString(cx: *mut JSContext, str: HandleString, start: usize, length: usize) -> *mut JSString); wrap!(jsapi: pub fn JS_ConcatStrings(cx: *mut JSContext, left: HandleString, right: HandleString) -> *mut JSString); -wrap!(jsapi: pub fn JS_EncodeStringToUTF8(cx: *mut JSContext, str: HandleString) -> *mut ::std::os::raw::c_char); -wrap!(jsapi: pub fn JS_Stringify(cx: *mut JSContext, value: MutableHandleValue, replacer: HandleObject, space: HandleValue, callback: JSONWriteCallback, data: *mut ::std::os::raw::c_void) -> bool); -wrap!(jsapi: pub fn JS_ParseJSON(cx: *mut JSContext, chars: *const u16, len: u32, vp: MutableHandleValue) -> bool); -wrap!(jsapi: pub fn JS_ParseJSON1(cx: *mut JSContext, str: HandleString, vp: MutableHandleValue) -> bool); -wrap!(jsapi: pub fn JS_ParseJSONWithReviver(cx: *mut JSContext, chars: *const u16, len: u32, reviver: HandleValue, vp: MutableHandleValue) -> bool); -wrap!(jsapi: pub fn JS_ParseJSONWithReviver1(cx: *mut JSContext, str: HandleString, reviver: HandleValue, vp: MutableHandleValue) -> bool); -wrap!(jsapi: pub fn JS_ObjectIsDate(cx: *mut JSContext, obj: HandleObject, isDate: *mut bool) -> bool); wrap!(jsapi: pub fn JS_SetRegExpInput(cx: *mut JSContext, obj: HandleObject, input: HandleString) -> bool); wrap!(jsapi: pub fn JS_ClearRegExpStatics(cx: *mut JSContext, obj: HandleObject) -> bool); wrap!(jsapi: pub fn JS_ExecuteRegExp(cx: *mut JSContext, obj: HandleObject, reobj: HandleObject, chars: *mut u16, length: usize, indexp: *mut usize, test: bool, rval: MutableHandleValue) -> bool); @@ -341,12 +323,10 @@ wrap!(jsapi: pub fn JS_FindCompilationScope(cx: *mut JSContext, obj: HandleObjec wrap!(jsapi: pub fn JS_SplicePrototype(cx: *mut JSContext, obj: HandleObject, proto: HandleObject) -> bool); wrap!(jsapi: pub fn JS_NewObjectWithUniqueType(cx: *mut JSContext, clasp: *const JSClass, proto: HandleObject) -> *mut JSObject); wrap!(jsapi: pub fn JS_NewObjectWithoutMetadata(cx: *mut JSContext, clasp: *const JSClass, proto: HandleObject) -> *mut JSObject); -wrap!(jsapi: pub fn JS_ObjectCountDynamicSlots(obj: HandleObject) -> u32); wrap!(jsapi: pub fn JS_NondeterministicGetWeakMapKeys(cx: *mut JSContext, obj: HandleObject, ret: MutableHandleObject) -> bool); wrap!(jsapi: pub fn JS_NondeterministicGetWeakSetKeys(cx: *mut JSContext, obj: HandleObject, ret: MutableHandleObject) -> bool); wrap!(jsapi: pub fn JS_CloneObject(cx: *mut JSContext, obj: HandleObject, proto: HandleObject) -> *mut JSObject); wrap!(jsapi: pub fn JS_InitializePropertiesFromCompatibleNativeObject(cx: *mut JSContext, dst: HandleObject, src: HandleObject) -> bool); -wrap!(jsapi: pub fn JS_BasicObjectToString(cx: *mut JSContext, obj: HandleObject) -> *mut JSString); wrap!(jsapi: pub fn JS_CopyPropertiesFrom(cx: *mut JSContext, target: HandleObject, obj: HandleObject) -> bool); wrap!(jsapi: pub fn JS_CopyPropertyFrom(cx: *mut JSContext, id: HandleId, target: HandleObject, obj: HandleObject, copyBehavior: PropertyCopyBehavior) -> bool); wrap!(jsapi: pub fn JS_WrapPropertyDescriptor(cx: *mut JSContext, desc: MutableHandle) -> bool); @@ -372,5 +352,22 @@ wrap!(jsapi: pub fn JS_NewFloat64ArrayWithBuffer(cx: *mut JSContext, arrayBuffer wrap!(jsapi: pub fn JS_GetArrayBufferViewBuffer(cx: *mut JSContext, obj: HandleObject, isSharedMemory: *mut bool) -> *mut JSObject); wrap!(jsapi: pub fn JS_DetachArrayBuffer(cx: *mut JSContext, obj: HandleObject) -> bool); wrap!(jsapi: pub fn JS_NewDataView(cx: *mut JSContext, buffer: HandleObject, byteOffset: u32, byteLength: i32) -> *mut JSObject); +wrap!(jsapi: pub fn JS_Utf8BufferIsCompilableUnit(cx: *mut JSContext, obj: HandleObject, utf8: *const ::std::os::raw::c_char, length: usize) -> bool); +wrap!(jsapi: pub fn JS_ExecuteScript(cx: *mut JSContext, script: Handle<*mut JSScript>, rval: MutableHandle) -> bool); +wrap!(jsapi: pub fn JS_ExecuteScript1(cx: *mut JSContext, script: Handle<*mut JSScript>) -> bool); +wrap!(jsapi: pub fn JS_ExecuteScript2(cx: *mut JSContext, envChain: *mut u8, script: Handle<*mut JSScript>, rval: MutableHandle) -> bool); +wrap!(jsapi: pub fn JS_ExecuteScript3(cx: *mut JSContext, envChain: *mut u8, script: Handle<*mut JSScript>) -> bool); +wrap!(jsapi: pub fn JS_Stringify(cx: *mut JSContext, value: MutableHandle, replacer: HandleObject, space: Handle, callback: JSONWriteCallback, data: *mut ::std::os::raw::c_void) -> bool); +wrap!(jsapi: pub fn JS_ParseJSON(cx: *mut JSContext, chars: *const u16, len: u32, vp: MutableHandle) -> bool); +wrap!(jsapi: pub fn JS_ParseJSON1(cx: *mut JSContext, str: Handle<*mut JSString>, vp: MutableHandle) -> bool); +wrap!(jsapi: pub fn JS_ParseJSONWithReviver(cx: *mut JSContext, chars: *const u16, len: u32, reviver: Handle, vp: MutableHandle) -> bool); +wrap!(jsapi: pub fn JS_ParseJSONWithReviver1(cx: *mut JSContext, str: Handle<*mut JSString>, reviver: Handle, vp: MutableHandle) -> bool); +wrap!(jsapi: pub fn JS_ReadStructuredClone(cx: *mut JSContext, data: *mut JSStructuredCloneData, version: u32, scope: StructuredCloneScope, vp: MutableHandleValue, optionalCallbacks: *const JSStructuredCloneCallbacks, closure: *mut ::std::os::raw::c_void) -> bool); +wrap!(jsapi: pub fn JS_WriteStructuredClone(cx: *mut JSContext, v: HandleValue, data: *mut JSStructuredCloneData, scope: StructuredCloneScope, cloneDataPolicy: CloneDataPolicy, optionalCallbacks: *const JSStructuredCloneCallbacks, closure: *mut ::std::os::raw::c_void, transferable: HandleValue) -> bool); +wrap!(jsapi: pub fn JS_StructuredClone(cx: *mut JSContext, v: HandleValue, vp: MutableHandleValue, optionalCallbacks: *const JSStructuredCloneCallbacks, closure: *mut ::std::os::raw::c_void) -> bool); +wrap!(jsapi: pub fn JS_ReadTypedArray(r: *mut JSStructuredCloneReader, vp: MutableHandleValue) -> bool); +wrap!(jsapi: pub fn JS_WriteString(w: *mut JSStructuredCloneWriter, str: HandleString) -> bool); +wrap!(jsapi: pub fn JS_WriteTypedArray(w: *mut JSStructuredCloneWriter, v: HandleValue) -> bool); +wrap!(jsapi: pub fn JS_ObjectNotWritten(w: *mut JSStructuredCloneWriter, obj: HandleObject) -> bool); wrap!(jsapi: pub fn JS_ForOfIteratorInit(iterator: *mut ForOfIterator, iterable: HandleValue, nonIterableBehavior: ForOfIterator_NonIterableBehavior) -> bool); wrap!(jsapi: pub fn JS_ForOfIteratorNext(iterator: *mut ForOfIterator, val: MutableHandleValue, done: *mut bool) -> bool); diff --git a/src/jsglue.cpp b/src/jsglue.cpp index 2b5b97787..3d3d542cf 100644 --- a/src/jsglue.cpp +++ b/src/jsglue.cpp @@ -14,11 +14,16 @@ #include "jsapi.h" #include "jsfriendapi.h" -#include "js/Proxy.h" +#include "js/BuildId.h" #include "js/Class.h" +#include "js/Id.h" #include "js/MemoryMetrics.h" #include "js/Principals.h" +#include "js/Promise.h" +#include "js/Proxy.h" +#include "js/StructuredClone.h" #include "js/Wrapper.h" +#include "mozilla/Unused.h" #include "assert.h" typedef bool(*WantToMeasure)(JSObject *obj); @@ -576,7 +581,7 @@ JS::ReadOnlyCompileOptions* NewCompileOptions(JSContext* aCx, const char* aFile, unsigned aLine) { JS::OwningCompileOptions *opts = new JS::OwningCompileOptions(aCx); - opts->setFileAndLine(aCx, aFile, aLine); + mozilla::Unused << opts->setFileAndLine(aCx, aFile, aLine); return opts; } @@ -963,17 +968,7 @@ size_t GetLengthOfJSStructuredCloneData(JSStructuredCloneData* data) { assert(data != nullptr); - - size_t len = 0; - - auto iter = data->Iter(); - while (!iter.Done()) { - size_t len_of_this_segment = iter.RemainingInSegment(); - len += len_of_this_segment; - iter.Advance(*data, len_of_this_segment); - } - - return len; + return data->Size(); } void @@ -984,13 +979,11 @@ CopyJSStructuredCloneData(JSStructuredCloneData* src, uint8_t* dest) size_t bytes_copied = 0; - auto iter = src->Iter(); - while (!iter.Done()) { - size_t len_of_this_segment = iter.RemainingInSegment(); - memcpy(dest + bytes_copied, iter.Data(), len_of_this_segment); - bytes_copied += len_of_this_segment; - iter.Advance(*src, len_of_this_segment); - } + src->ForEachDataChunk([&](const char* aData, size_t aSize) { + memcpy(dest + bytes_copied, aData, aSize); + bytes_copied += aSize; + return true; + }); } bool @@ -999,7 +992,7 @@ WriteBytesToJSStructuredCloneData(const uint8_t* src, size_t len, JSStructuredCl assert(src != nullptr); assert(dest != nullptr); - return dest->WriteBytes(reinterpret_cast(src), len); + return dest->AppendBytes(reinterpret_cast(src), len); } // MSVC uses a different calling conventions for functions @@ -1010,26 +1003,11 @@ WriteBytesToJSStructuredCloneData(const uint8_t* src, size_t len, JSStructuredCl // https://docs.microsoft.com/en-us/cpp/build/return-values-cpp // https://mozilla.logbot.info/jsapi/20180622#c14918658 -void -JS_ComputeThis(JSContext* cx, JS::Value* vp, JS::Value* dest) { - *dest = JS::detail::ComputeThis(cx, vp); -} - -void -JS_GetModuleHostDefinedField(JSObject* module, JS::Value* dest) { - *dest = JS::GetModuleHostDefinedField(module); -} - void JS_GetPromiseResult(JS::HandleObject promise, JS::Value* dest) { *dest = JS::GetPromiseResult(promise); } -void -JS_THIS(JSContext* cx, JS::Value* vp, JS::Value* dest) { - *dest = JS_THIS(cx, vp); -} - void JS_GetNaNValue(JSContext* cx, JS::Value* dest) { *dest = JS_GetNaNValue(cx); @@ -1050,4 +1028,13 @@ JS_GetReservedSlot(JSObject* obj, uint32_t index, JS::Value* dest) { *dest = JS_GetReservedSlot(obj, index); } +typedef void (*EncodedStringCallback)(char*); + +void +EncodeStringToUTF8(JSContext* cx, JS::HandleString str, EncodedStringCallback cb) +{ + JS::UniqueChars chars = JS_EncodeStringToUTF8(cx, str); + cb(chars.get()); +} + } // extern "C" diff --git a/src/rust.rs b/src/rust.rs index 3f5e44332..17d163bcf 100644 --- a/src/rust.rs +++ b/src/rust.rs @@ -30,14 +30,14 @@ use consts::{JSCLASS_IS_DOMJSCLASS, JSCLASS_IS_GLOBAL}; use conversions::jsstr_to_string; use jsapi; -use jsapi::{AutoGCRooter, AutoGCRooter_CUSTOM, AutoIdVector, AutoObjectVector}; -use jsapi::{ContextOptionsRef, Evaluate2, HandleValueArray, Heap}; -use jsapi::{InitSelfHostedCode, IsWindowSlow, JS_BeginRequest}; -use jsapi::{JS_DefineFunctions, JS_DefineProperties, JS_DestroyContext, JS_EndRequest, JS_ShutDown}; +use jsapi::{AutoGCRooter, AutoGCRooter_Tag, AutoIdVector, AutoObjectVector}; +use jsapi::{ContextOptionsRef, EvaluateUtf8, HandleValueArray, Heap}; +use jsapi::{InitSelfHostedCode, IsWindowSlow}; +use jsapi::{JS_DefineFunctions, JS_DefineProperties, JS_DestroyContext, JS_ShutDown}; use jsapi::{JS_EnumerateStandardClasses, JS_GetRuntime, JS_GlobalObjectTraceHook}; use jsapi::{JS_MayResolveStandardClass, JS_NewContext, JS_ResolveStandardClass}; -use jsapi::{JS_SetGCParameter, JS_SetNativeStackQuota, JS_WrapValue, JSAutoCompartment}; -use jsapi::{JSClass, JSCLASS_RESERVED_SLOTS_SHIFT, JSClassOps, JSCompartment, JSContext}; +use jsapi::{JS_SetGCParameter, JS_SetNativeStackQuota, JS_WrapValue, JSAutoRealm}; +use jsapi::{JSClass, JSCLASS_RESERVED_SLOTS_SHIFT, JSClassOps, Realm, JSContext}; use jsapi::{JSErrorReport, JSFunction, JSFunctionSpec, JSGCParamKey}; use jsapi::{JSObject, JSPropertySpec, JSRuntime, JSScript}; use jsapi::{JSString, JSTracer}; @@ -46,7 +46,7 @@ use jsapi::{SetWarningReporter, Symbol, ToBooleanSlow}; use jsapi::{ToInt32Slow, ToInt64Slow, ToNumberSlow, ToStringSlow, ToUint16Slow}; use jsapi::{ToUint32Slow, ToUint64Slow, ToWindowProxyIfWindowSlow}; use jsapi::{Value, jsid}; -use jsapi::{CaptureCurrentStack, BuildStackString, IsSavedFrame, StackFormat}; +use jsapi::{CaptureCurrentStack, BuildStackString, StackFormat}; use jsapi::{JS_StackCapture_AllFrames, JS_StackCapture_MaxFrames}; use jsapi::Handle as RawHandle; use jsapi::MutableHandle as RawMutableHandle; @@ -288,8 +288,6 @@ impl Runtime { SetWarningReporter(js_context, Some(report_warning)); - JS_BeginRequest(js_context); - Runtime { engine, _parent_child_count: parent.map(|p| p.children_of_parent), @@ -313,22 +311,21 @@ impl Runtime { pub fn evaluate_script(&self, glob: HandleObject, script: &str, filename: &str, line_num: u32, rval: MutableHandleValue) -> Result<(),()> { - let script_utf16: Vec = script.encode_utf16().collect(); let filename_cstr = ffi::CString::new(filename.as_bytes()).unwrap(); debug!("Evaluating script from {} with content {}", filename, script); // SpiderMonkey does not approve of null pointers. - let (ptr, len) = if script_utf16.len() == 0 { - static empty: &'static [u16] = &[]; + let (ptr, len) = if script.len() == 0 { + static empty: &'static [u8] = &[]; (empty.as_ptr(), 0) } else { - (script_utf16.as_ptr(), script_utf16.len() as c_uint) + (script.as_bytes().as_ptr(), script.len() as c_uint) }; assert!(!ptr.is_null()); - let _ac = JSAutoCompartment::new(self.cx(), glob.get()); + let _ac = JSAutoRealm::new(self.cx(), glob.get()); let options = CompileOptionsWrapper::new(self.cx(), filename_cstr.as_ptr(), line_num); unsafe { - if !Evaluate2(self.cx(), options.ptr, ptr as *const u16, len as size_t, rval.into()) { + if !EvaluateUtf8(self.cx(), options.ptr, ptr as *const _, len as size_t, rval.into()) { debug!("...err!"); maybe_resume_unwind(); Err(()) @@ -348,7 +345,6 @@ impl Drop for Runtime { 1, "This runtime still has live children."); unsafe { - JS_EndRequest(self.cx); JS_DestroyContext(self.cx); CONTEXT.with(|context| { @@ -574,7 +570,7 @@ impl CustomAutoRooter { CustomAutoRooter { _base: jsapi::CustomAutoRooter { vtable_: vftable as *const _ as *const _, - _base: AutoGCRooter::new_unrooted(AutoGCRooter_CUSTOM), + _base: AutoGCRooter::new_unrooted(AutoGCRooter_Tag::Custom), #[cfg(feature = "debugmozjs")] _mCheckNotUsedAsTemporary: GuardObjectNotificationReceiver { mStatementDone: false, @@ -1119,14 +1115,14 @@ pub unsafe fn get_object_class(obj: *mut JSObject) -> *const JSClass { } #[inline] -pub unsafe fn get_object_compartment(obj: *mut JSObject) -> *mut JSCompartment { - (*get_object_group(obj)).compartment +pub unsafe fn get_object_realm(obj: *mut JSObject) -> *mut Realm { + (*get_object_group(obj)).realm } #[inline] -pub unsafe fn get_context_compartment(cx: *mut JSContext) -> *mut JSCompartment { +pub unsafe fn get_context_realm(cx: *mut JSContext) -> *mut Realm { let cx = cx as *mut RootingContext; - (*cx).compartment_ + (*cx).realm_ } #[inline] @@ -1158,7 +1154,7 @@ pub unsafe fn try_to_outerize(mut rval: MutableHandleValue) { pub unsafe fn maybe_wrap_object_value(cx: *mut JSContext, rval: MutableHandleValue) { assert!(rval.is_object()); let obj = rval.to_object(); - if get_object_compartment(obj) != get_context_compartment(cx) { + if get_object_realm(obj) != get_context_realm(cx) { assert!(JS_WrapValue(cx, rval.into())); } else if is_dom_object(obj) { try_to_outerize(rval); @@ -1242,11 +1238,8 @@ impl<'a> CapturedJSStack<'a> { rooted!(in(self.cx) let mut js_string = ptr::null_mut::()); let mut string_handle = js_string.handle_mut(); - if !IsSavedFrame(stack_handle.get()) { - return None; - } - if !BuildStackString(self.cx, + ptr::null_mut(), stack_handle.into(), string_handle.raw(), indent.unwrap_or(0), @@ -1368,11 +1361,9 @@ pub mod wrappers { use jsapi::AutoObjectVector; use jsapi::CloneDataPolicy; use jsapi::CallArgs; - use jsapi::CompileOptions; use jsapi::ESClass; use jsapi::ForOfIterator; use jsapi::ForOfIterator_NonIterableBehavior; - use jsapi::JSAddonId; use jsapi::JSClass; use jsapi::JSConstDoubleSpec; use jsapi::JSConstIntegerSpec; @@ -1388,14 +1379,17 @@ pub mod wrappers { use jsapi::JSScript; use jsapi::JSStructuredCloneData; use jsapi::PromiseState; + use jsapi::PromiseUserInputEventHandlingState; use jsapi::PropertyCopyBehavior; use jsapi::ReadOnlyCompileOptions; + use jsapi::ReadableStreamMode; use jsapi::ReadableStreamReaderMode; + use jsapi::ReadableStreamUnderlyingSource; use jsapi::Realm; use jsapi::RefPtr; use jsapi::RegExpShared; use jsapi::ScriptEnvironmentPreparer_Closure; - use jsapi::SourceBufferHolder; + use jsapi::SourceText; use jsapi::StackCapture; use jsapi::StructuredCloneScope; use jsapi::Symbol; @@ -1404,11 +1398,13 @@ pub mod wrappers { use jsapi::TranscodeResult; use jsapi::TranscodeRange; use jsapi::TwoByteChars; + use jsapi::UniqueChars; + use jsapi::mozilla::Utf8Unit; use jsapi::Value; use jsapi::WasmModule; use jsapi::jsid; - use jsapi::JS::ScriptVector; use libc::FILE; + use std::os::raw::c_char; use super::*; include!("jsapi_wrappers.in"); include!("glue_wrappers.in"); @@ -1511,11 +1507,9 @@ pub mod jsapi_wrapped { use jsapi::AutoObjectVector; use jsapi::CloneDataPolicy; use jsapi::CallArgs; - use jsapi::CompileOptions; use jsapi::ESClass; use jsapi::ForOfIterator; use jsapi::ForOfIterator_NonIterableBehavior; - use jsapi::JSAddonId; use jsapi::JSClass; use jsapi::JSConstDoubleSpec; use jsapi::JSConstIntegerSpec; @@ -1531,14 +1525,17 @@ pub mod jsapi_wrapped { use jsapi::JSScript; use jsapi::JSStructuredCloneData; use jsapi::PromiseState; + use jsapi::PromiseUserInputEventHandlingState; use jsapi::PropertyCopyBehavior; use jsapi::ReadOnlyCompileOptions; + use jsapi::ReadableStreamMode; use jsapi::ReadableStreamReaderMode; + use jsapi::ReadableStreamUnderlyingSource; use jsapi::Realm; use jsapi::RefPtr; use jsapi::RegExpShared; use jsapi::ScriptEnvironmentPreparer_Closure; - use jsapi::SourceBufferHolder; + use jsapi::SourceText; use jsapi::StackCapture; use jsapi::StructuredCloneScope; use jsapi::Symbol; @@ -1547,10 +1544,12 @@ pub mod jsapi_wrapped { use jsapi::TranscodeResult; use jsapi::TranscodeRange; use jsapi::TwoByteChars; + use jsapi::UniqueChars; + use jsapi::mozilla::Utf8Unit; use jsapi::Value; use jsapi::WasmModule; - use jsapi::JS::ScriptVector; use libc::FILE; + use std::os::raw::c_char; use super::*; include!("jsapi_wrappers.in"); include!("glue_wrappers.in"); diff --git a/tests/callback.rs b/tests/callback.rs index 83a6f6927..11e6c6f49 100644 --- a/tests/callback.rs +++ b/tests/callback.rs @@ -6,15 +6,15 @@ extern crate mozjs; extern crate libc; +use mozjs::glue::EncodeStringToUTF8; use mozjs::jsapi::CallArgs; -use mozjs::jsapi::CompartmentOptions; -use mozjs::jsapi::JSAutoCompartment; +use mozjs::jsapi::JSAutoRealm; use mozjs::jsapi::JSContext; use mozjs::jsapi::JS_DefineFunction; -use mozjs::jsapi::JS_EncodeStringToUTF8; use mozjs::jsapi::JS_NewGlobalObject; use mozjs::jsapi::JS_ReportErrorASCII; use mozjs::jsapi::OnNewGlobalHookOption; +use mozjs::jsapi::RealmOptions; use mozjs::jsapi::Value; use mozjs::jsval::UndefinedValue; use mozjs::rust::{JSEngine, Runtime, SIMPLE_GLOBAL_CLASS}; @@ -29,13 +29,13 @@ fn callback() { let runtime = Runtime::new(engine); let context = runtime.cx(); let h_option = OnNewGlobalHookOption::FireOnNewGlobalHook; - let c_option = CompartmentOptions::default(); + let c_option = RealmOptions::default(); unsafe { let global = JS_NewGlobalObject(context, &SIMPLE_GLOBAL_CLASS, ptr::null_mut(), h_option, &c_option); rooted!(in(context) let global_root = global); let global = global_root.handle(); - let _ac = JSAutoCompartment::new(context, global.get()); + let _ac = JSAutoRealm::new(context, global.get()); let function = JS_DefineFunction(context, global.into(), b"puts\0".as_ptr() as *const libc::c_char, Some(puts), 1, 0); assert!(!function.is_null()); @@ -56,9 +56,12 @@ unsafe extern "C" fn puts(context: *mut JSContext, argc: u32, vp: *mut Value) -> let arg = mozjs::rust::Handle::from_raw(args.get(0)); let js = mozjs::rust::ToString(context, arg); rooted!(in(context) let message_root = js); - let message = JS_EncodeStringToUTF8(context, message_root.handle().into()); - let message = CStr::from_ptr(message); - println!("{}", str::from_utf8(message.to_bytes()).unwrap()); + EncodeStringToUTF8(context, message_root.handle().into(), |message| { + let message = CStr::from_ptr(message); + let message = str::from_utf8(message.to_bytes()).unwrap(); + assert_eq!(message, "Test Iñtërnâtiônàlizætiøn ┬─┬ノ( º _ ºノ) "); + println!("{}", message); + }); args.rval().set(UndefinedValue()); return true; diff --git a/tests/capture_stack.rs b/tests/capture_stack.rs index dc6d60fe2..c2f44e807 100644 --- a/tests/capture_stack.rs +++ b/tests/capture_stack.rs @@ -7,12 +7,12 @@ extern crate mozjs; extern crate libc; use mozjs::jsapi::CallArgs; -use mozjs::jsapi::CompartmentOptions; -use mozjs::jsapi::JSAutoCompartment; +use mozjs::jsapi::JSAutoRealm; use mozjs::jsapi::JSContext; use mozjs::jsapi::JS_DefineFunction; use mozjs::jsapi::JS_NewGlobalObject; use mozjs::jsapi::OnNewGlobalHookOption; +use mozjs::jsapi::RealmOptions; use mozjs::jsapi::StackFormat; use mozjs::jsapi::Value; use mozjs::jsval::UndefinedValue; @@ -26,13 +26,13 @@ fn capture_stack() { let runtime = Runtime::new(engine); let context = runtime.cx(); let h_option = OnNewGlobalHookOption::FireOnNewGlobalHook; - let c_option = CompartmentOptions::default(); + let c_option = RealmOptions::default(); unsafe { let global = JS_NewGlobalObject(context, &SIMPLE_GLOBAL_CLASS, ptr::null_mut(), h_option, &c_option); rooted!(in(context) let global_root = global); let global = global_root.handle(); - let _ac = JSAutoCompartment::new(context, global.get()); + let _ac = JSAutoRealm::new(context, global.get()); let function = JS_DefineFunction(context, global.into(), b"print_stack\0".as_ptr() as *const libc::c_char, Some(print_stack), 0, 0); assert!(!function.is_null()); diff --git a/tests/custom_auto_rooter.rs b/tests/custom_auto_rooter.rs index 42d9e298c..dfdc2a82c 100644 --- a/tests/custom_auto_rooter.rs +++ b/tests/custom_auto_rooter.rs @@ -3,6 +3,7 @@ * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ extern crate mozjs; +use mozjs::jsapi::GCReason; use mozjs::jsapi::JSTracer; use mozjs::jsapi::JS_GC; use mozjs::rust::JSEngine; @@ -39,7 +40,7 @@ fn virtual_trace_called() { let mut rooter = CustomAutoRooter::new(TraceCheck::new()); let guard = rooter.root(cx); - unsafe { JS_GC(cx); } + unsafe { JS_GC(cx, GCReason::API); } assert!(guard.trace_was_called.get()); } diff --git a/tests/custom_auto_rooter_macro.rs b/tests/custom_auto_rooter_macro.rs index e8395584b..1dff7cb62 100644 --- a/tests/custom_auto_rooter_macro.rs +++ b/tests/custom_auto_rooter_macro.rs @@ -4,6 +4,7 @@ #[macro_use] extern crate mozjs; +use mozjs::jsapi::GCReason; use mozjs::jsapi::JSTracer; use mozjs::jsapi::JS_GC; use mozjs::rust::JSEngine; @@ -35,7 +36,7 @@ fn custom_auto_rooter_macro() { auto_root!(in(cx) let vec = vec![TraceCheck::new(), TraceCheck::new()]); - unsafe { JS_GC(cx); } + unsafe { JS_GC(cx, GCReason::API); } vec.iter().for_each(|elem| assert!(elem.trace_was_called.get())); } diff --git a/tests/enumerate.rs b/tests/enumerate.rs index f95ac95f3..c85ef4bf7 100644 --- a/tests/enumerate.rs +++ b/tests/enumerate.rs @@ -7,12 +7,12 @@ extern crate mozjs; use mozjs::glue::RUST_JSID_IS_STRING; use mozjs::glue::RUST_JSID_TO_STRING; -use mozjs::jsapi::CompartmentOptions; use mozjs::jsapi::GetPropertyKeys; use mozjs::jsapi::JSITER_OWNONLY; use mozjs::jsapi::JS_NewGlobalObject; use mozjs::jsapi::JS_StringEqualsAscii; use mozjs::jsapi::OnNewGlobalHookOption; +use mozjs::jsapi::RealmOptions; use mozjs::jsval::UndefinedValue; use mozjs::rust::IdVector; use mozjs::rust::JSEngine; @@ -30,7 +30,7 @@ fn enumerate() { rooted!(in(cx) let global = JS_NewGlobalObject(cx, &SIMPLE_GLOBAL_CLASS, ptr::null_mut(), OnNewGlobalHookOption::FireOnNewGlobalHook, - &CompartmentOptions::default()) + &RealmOptions::default()) ); rooted!(in(cx) let mut rval = UndefinedValue()); diff --git a/tests/evaluate.rs b/tests/evaluate.rs index 7c146e3f7..bad17eb29 100644 --- a/tests/evaluate.rs +++ b/tests/evaluate.rs @@ -5,9 +5,9 @@ #[macro_use] extern crate mozjs; -use mozjs::jsapi::CompartmentOptions; use mozjs::jsapi::JS_NewGlobalObject; use mozjs::jsapi::OnNewGlobalHookOption; +use mozjs::jsapi::RealmOptions; use mozjs::jsval::UndefinedValue; use mozjs::rust::{JSEngine, Runtime, SIMPLE_GLOBAL_CLASS}; @@ -24,7 +24,7 @@ fn evaluate() { rooted!(in(cx) let global = JS_NewGlobalObject(cx, &SIMPLE_GLOBAL_CLASS, ptr::null_mut(), OnNewGlobalHookOption::FireOnNewGlobalHook, - &CompartmentOptions::default()) + &RealmOptions::default()) ); rooted!(in(cx) let mut rval = UndefinedValue()); assert!(rt.evaluate_script(global.handle(), "1 + 1", diff --git a/tests/panic.rs b/tests/panic.rs index 0cc82dade..475b27fc4 100644 --- a/tests/panic.rs +++ b/tests/panic.rs @@ -5,12 +5,12 @@ #[macro_use] extern crate mozjs; -use mozjs::jsapi::CompartmentOptions; -use mozjs::jsapi::JSAutoCompartment; +use mozjs::jsapi::JSAutoRealm; use mozjs::jsapi::JSContext; use mozjs::jsapi::JS_DefineFunction; use mozjs::jsapi::JS_NewGlobalObject; use mozjs::jsapi::OnNewGlobalHookOption; +use mozjs::jsapi::RealmOptions; use mozjs::jsapi::Value; use mozjs::jsval::UndefinedValue; use mozjs::panic::wrap_panic; @@ -24,14 +24,14 @@ fn test_panic() { let runtime = Runtime::new(engine); let context = runtime.cx(); let h_option = OnNewGlobalHookOption::FireOnNewGlobalHook; - let c_option = CompartmentOptions::default(); + let c_option = RealmOptions::default(); unsafe { let global = JS_NewGlobalObject(context, &SIMPLE_GLOBAL_CLASS, ptr::null_mut(), h_option, &c_option); rooted!(in(context) let global_root = global); let global = global_root.handle(); - let _ac = JSAutoCompartment::new(context, global.get()); + let _ac = JSAutoRealm::new(context, global.get()); let function = JS_DefineFunction(context, global.into(), b"test\0".as_ptr() as *const _, Some(test), 0, 0); diff --git a/tests/rooting.rs b/tests/rooting.rs index 9a33d7f07..e11c55ec0 100644 --- a/tests/rooting.rs +++ b/tests/rooting.rs @@ -8,18 +8,18 @@ extern crate mozjs; extern crate libc; -use mozjs::jsapi::CompartmentOptions; -use mozjs::jsapi::JSAutoCompartment; +use mozjs::jsapi::GetRealmObjectPrototype; +use mozjs::jsapi::JSAutoRealm; use mozjs::jsapi::JSClass; use mozjs::jsapi::JSContext; use mozjs::jsapi::JSFunctionSpec; -use mozjs::jsapi::JS_GetObjectPrototype; use mozjs::jsapi::JSNativeWrapper; use mozjs::jsapi::JS_NewGlobalObject; use mozjs::jsapi::JS_NewObjectWithUniqueType; use mozjs::jsapi::JSPROP_ENUMERATE; use mozjs::jsapi::JS_SetGCZeal; use mozjs::jsapi::OnNewGlobalHookOption; +use mozjs::jsapi::RealmOptions; use mozjs::jsapi::Value; use mozjs::jsapi::{JSObject, JSString, JSFunction}; use mozjs::jsval::JSVal; @@ -35,15 +35,15 @@ fn rooting() { JS_SetGCZeal(cx, 2, 1); let h_option = OnNewGlobalHookOption::FireOnNewGlobalHook; - let c_option = CompartmentOptions::default(); + let c_option = RealmOptions::default(); rooted!(in(cx) let global = JS_NewGlobalObject(cx, &SIMPLE_GLOBAL_CLASS, ptr::null_mut(), h_option, &c_option)); - let _ac = JSAutoCompartment::new(cx, global.get()); - rooted!(in(cx) let prototype_proto = JS_GetObjectPrototype(cx, global.handle().into())); + let _ac = JSAutoRealm::new(cx, global.get()); + rooted!(in(cx) let prototype_proto = GetRealmObjectPrototype(cx)); rooted!(in(cx) let proto = JS_NewObjectWithUniqueType(cx, &CLASS as *const _, prototype_proto.handle().into())); diff --git a/tests/runtime.rs b/tests/runtime.rs index f87f2c214..0c83a962b 100644 --- a/tests/runtime.rs +++ b/tests/runtime.rs @@ -6,8 +6,7 @@ extern crate mozjs; extern crate libc; -use mozjs::jsapi::CompartmentOptions; -use mozjs::jsapi::JSAutoCompartment; +use mozjs::jsapi::JSAutoRealm; use mozjs::jsapi::JSClass; use mozjs::jsapi::JSCLASS_FOREGROUND_FINALIZE; use mozjs::jsapi::JSClassOps; @@ -16,6 +15,7 @@ use mozjs::jsapi::JS_NewGlobalObject; use mozjs::jsapi::JS_NewObject; use mozjs::jsapi::JSObject; use mozjs::jsapi::OnNewGlobalHookOption; +use mozjs::jsapi::RealmOptions; use mozjs::rust::{JSEngine, Runtime, SIMPLE_GLOBAL_CLASS}; use std::ptr; use std::thread; @@ -29,14 +29,14 @@ fn runtime() { unsafe { let cx = runtime.cx(); let h_option = OnNewGlobalHookOption::FireOnNewGlobalHook; - let c_option = CompartmentOptions::default(); + let c_option = RealmOptions::default(); rooted!(in(cx) let global = JS_NewGlobalObject(cx, &SIMPLE_GLOBAL_CLASS, ptr::null_mut(), h_option, &c_option)); - let _ac = JSAutoCompartment::new(cx, global.get()); + let _ac = JSAutoRealm::new(cx, global.get()); rooted!(in(cx) let _object = JS_NewObject(cx, &CLASS as *const _)); } diff --git a/tests/stack_limit.rs b/tests/stack_limit.rs index c5d51a998..bbd1dc905 100644 --- a/tests/stack_limit.rs +++ b/tests/stack_limit.rs @@ -5,9 +5,9 @@ #[macro_use] extern crate mozjs; -use mozjs::jsapi::CompartmentOptions; use mozjs::jsapi::JS_NewGlobalObject; use mozjs::jsapi::OnNewGlobalHookOption; +use mozjs::jsapi::RealmOptions; use mozjs::jsval::UndefinedValue; use mozjs::rust::{JSEngine, Runtime, SIMPLE_GLOBAL_CLASS}; @@ -21,7 +21,7 @@ fn stack_limit() { unsafe { let h_option = OnNewGlobalHookOption::FireOnNewGlobalHook; - let c_option = CompartmentOptions::default(); + let c_option = RealmOptions::default(); let global = JS_NewGlobalObject(cx, &SIMPLE_GLOBAL_CLASS, ptr::null_mut(), h_option, &c_option); rooted!(in(cx) let global_root = global); diff --git a/tests/typedarray.rs b/tests/typedarray.rs index 767e1a027..92aaefd78 100644 --- a/tests/typedarray.rs +++ b/tests/typedarray.rs @@ -5,11 +5,11 @@ #[macro_use] extern crate mozjs; -use mozjs::jsapi::CompartmentOptions; -use mozjs::jsapi::JSAutoCompartment; +use mozjs::jsapi::JSAutoRealm; use mozjs::jsapi::JSObject; use mozjs::jsapi::JS_NewGlobalObject; use mozjs::jsapi::OnNewGlobalHookOption; +use mozjs::jsapi::RealmOptions; use mozjs::jsapi::Type; use mozjs::jsval::UndefinedValue; use mozjs::rust::JSEngine; @@ -28,10 +28,10 @@ fn typedarray() { rooted!(in(cx) let global = JS_NewGlobalObject(cx, &SIMPLE_GLOBAL_CLASS, ptr::null_mut(), OnNewGlobalHookOption::FireOnNewGlobalHook, - &CompartmentOptions::default()) + &RealmOptions::default()) ); - let _ac = JSAutoCompartment::new(cx, global.get()); + let _ac = JSAutoRealm::new(cx, global.get()); rooted!(in(cx) let mut rval = UndefinedValue()); assert!(rt.evaluate_script(global.handle(), "new Uint8Array([0, 2, 4])", diff --git a/tests/typedarray_panic.rs b/tests/typedarray_panic.rs index 497505cbf..088421628 100644 --- a/tests/typedarray_panic.rs +++ b/tests/typedarray_panic.rs @@ -5,11 +5,11 @@ #[macro_use] extern crate mozjs; -use mozjs::jsapi::CompartmentOptions; -use mozjs::jsapi::JSAutoCompartment; +use mozjs::jsapi::JSAutoRealm; use mozjs::jsapi::JSObject; use mozjs::jsapi::JS_NewGlobalObject; use mozjs::jsapi::OnNewGlobalHookOption; +use mozjs::jsapi::RealmOptions; use mozjs::rust::JSEngine; use mozjs::rust::Runtime; use mozjs::rust::SIMPLE_GLOBAL_CLASS; @@ -27,10 +27,10 @@ fn typedarray_update_panic() { rooted!(in(cx) let global = JS_NewGlobalObject(cx, &SIMPLE_GLOBAL_CLASS, ptr::null_mut(), OnNewGlobalHookOption::FireOnNewGlobalHook, - &CompartmentOptions::default()) + &RealmOptions::default()) ); - let _ac = JSAutoCompartment::new(cx, global.get()); + let _ac = JSAutoRealm::new(cx, global.get()); rooted!(in(cx) let mut rval = ptr::null_mut::()); let _ = Uint32Array::create(cx, CreateWith::Slice(&[1, 2, 3, 4, 5]), rval.handle_mut()); typedarray!(in(cx) let mut array: Uint32Array = rval.get()); diff --git a/tests/vec_conversion.rs b/tests/vec_conversion.rs index f15dd9a29..44632ced9 100644 --- a/tests/vec_conversion.rs +++ b/tests/vec_conversion.rs @@ -9,11 +9,11 @@ use mozjs::conversions::ConversionBehavior; use mozjs::conversions::ConversionResult; use mozjs::conversions::FromJSValConvertible; use mozjs::conversions::ToJSValConvertible; -use mozjs::jsapi::CompartmentOptions; -use mozjs::jsapi::JSAutoCompartment; -use mozjs::jsapi::JS_InitStandardClasses; +use mozjs::jsapi::InitRealmStandardClasses; +use mozjs::jsapi::JSAutoRealm; use mozjs::jsapi::JS_NewGlobalObject; use mozjs::jsapi::OnNewGlobalHookOption; +use mozjs::jsapi::RealmOptions; use mozjs::jsval::UndefinedValue; use mozjs::rust::{JSEngine, Runtime, SIMPLE_GLOBAL_CLASS}; @@ -26,7 +26,7 @@ fn vec_conversion() { let cx = rt.cx(); let h_option = OnNewGlobalHookOption::FireOnNewGlobalHook; - let c_option = CompartmentOptions::default(); + let c_option = RealmOptions::default(); unsafe { let global = JS_NewGlobalObject(cx, &SIMPLE_GLOBAL_CLASS, @@ -34,8 +34,8 @@ fn vec_conversion() { rooted!(in(cx) let global_root = global); let global = global_root.handle(); - let _ac = JSAutoCompartment::new(cx, global.get()); - assert!(JS_InitStandardClasses(cx, global.into())); + let _ac = JSAutoRealm::new(cx, global.get()); + assert!(InitRealmStandardClasses(cx)); rooted!(in(cx) let mut rval = UndefinedValue());