FrameIterator::FrameIterator(const WasmActivation& activation) : cx_(activation.cx()), instance_(&activation.instance()), callsite_(nullptr), codeRange_(nullptr), fp_(activation.fp()), missingFrameMessage_(false) { if (fp_) { settle(); return; } void* pc = activation.resumePC(); if (!pc) return; const CodeRange* codeRange = instance_->lookupCodeRange(pc); MOZ_ASSERT(codeRange); if (codeRange->kind() == CodeRange::Function) codeRange_ = codeRange; else missingFrameMessage_ = true; MOZ_ASSERT(!done()); }
// Use an int32_t return type instead of bool since bool does not have a // specified width and the caller is assuming a word-sized return. static int32_t InvokeImport_Void(int32_t importIndex, int32_t argc, Value* argv) { WasmActivation* activation = JSRuntime::innermostWasmActivation(); JSContext* cx = activation->cx(); RootedValue rval(cx); return activation->module().callImport(cx, importIndex, argc, argv, &rval); }
FrameIterator::FrameIterator(const WasmActivation& activation) : cx_(activation.cx()), module_(&activation.module()), callsite_(nullptr), codeRange_(nullptr), fp_(activation.fp()) { if (fp_) settle(); }
static int32_t InvokeImport_I64(int32_t importIndex, int32_t argc, uint64_t* argv) { WasmActivation* activation = JSRuntime::innermostWasmActivation(); JSContext* cx = activation->cx(); RootedValue rval(cx); if (!activation->module().callImport(cx, importIndex, argc, argv, &rval)) return false; if (!ReadI64Object(cx, rval, (int64_t*)argv)) return false; return true; }
// Use an int32_t return type instead of bool since bool does not have a // specified width and the caller is assuming a word-sized return. static int32_t InvokeImport_F64(int32_t importIndex, int32_t argc, Value* argv) { WasmActivation* activation = JSRuntime::innermostWasmActivation(); JSContext* cx = activation->cx(); RootedValue rval(cx); if (!activation->module().callImport(cx, importIndex, argc, argv, &rval)) return false; double dbl; if (!ToNumber(cx, rval, &dbl)) return false; argv[0] = DoubleValue(dbl); return true; }
// Use an int32_t return type instead of bool since bool does not have a // specified width and the caller is assuming a word-sized return. static int32_t InvokeImport_I32(int32_t importIndex, int32_t argc, Value* argv) { WasmActivation* activation = JSRuntime::innermostWasmActivation(); JSContext* cx = activation->cx(); RootedValue rval(cx); if (!activation->module().callImport(cx, importIndex, argc, argv, &rval)) return false; int32_t i32; if (!ToInt32(cx, rval, &i32)) return false; argv[0] = Int32Value(i32); return true; }