Diff
Modified: trunk/Source/_javascript_Core/ChangeLog (215895 => 215896)
--- trunk/Source/_javascript_Core/ChangeLog 2017-04-27 21:52:32 UTC (rev 215895)
+++ trunk/Source/_javascript_Core/ChangeLog 2017-04-27 22:37:14 UTC (rev 215896)
@@ -1,3 +1,48 @@
+2017-04-27 Keith Miller <[email protected]>
+
+ REGRESSION (r215843): ASSERTION FAILED: !m_completionTasks[0].first in JSC::Wasm::Plan::tryRemoveVMAndCancelIfLast(JSC::VM &)
+ https://bugs.webkit.org/show_bug.cgi?id=171380
+
+ Reviewed by JF Bastien.
+
+ This patch fixes the association of VMs to Wasm::Plans. For validation
+ we want all the completion tasks to be associate with a VM. For BBQ,
+ we want the main task to not be associated with any VM.
+
+ * jsc.cpp:
+ (functionTestWasmModuleFunctions):
+ * wasm/WasmBBQPlan.cpp:
+ (JSC::Wasm::BBQPlan::BBQPlan):
+ * wasm/WasmBBQPlan.h:
+ * wasm/WasmCodeBlock.cpp:
+ (JSC::Wasm::CodeBlock::CodeBlock):
+ (JSC::Wasm::CodeBlock::compileAsync):
+ * wasm/WasmCodeBlock.h:
+ (JSC::Wasm::CodeBlock::create):
+ * wasm/WasmModule.cpp:
+ (JSC::Wasm::makeValidationCallback):
+ (JSC::Wasm::Module::validateSync):
+ (JSC::Wasm::Module::validateAsync):
+ (JSC::Wasm::Module::getOrCreateCodeBlock):
+ (JSC::Wasm::Module::compileSync):
+ (JSC::Wasm::Module::compileAsync):
+ * wasm/WasmModule.h:
+ * wasm/WasmOMGPlan.cpp:
+ (JSC::Wasm::OMGPlan::OMGPlan):
+ (JSC::Wasm::runOMGPlanForIndex):
+ * wasm/WasmOMGPlan.h:
+ * wasm/WasmPlan.cpp:
+ (JSC::Wasm::Plan::Plan):
+ (JSC::Wasm::Plan::runCompletionTasks):
+ (JSC::Wasm::Plan::addCompletionTask):
+ (JSC::Wasm::Plan::tryRemoveVMAndCancelIfLast):
+ * wasm/WasmPlan.h:
+ (JSC::Wasm::Plan::dontFinalize):
+ * wasm/js/WebAssemblyInstanceConstructor.cpp:
+ (JSC::constructJSWebAssemblyInstance):
+ * wasm/js/WebAssemblyPrototype.cpp:
+ (JSC::webAssemblyValidateFunc):
+
2017-04-27 Saam Barati <[email protected]>
Restore some caching functionality that got accidentally removed when doing Wasm PIC patches
Modified: trunk/Source/_javascript_Core/jsc.cpp (215895 => 215896)
--- trunk/Source/_javascript_Core/jsc.cpp 2017-04-27 21:52:32 UTC (rev 215895)
+++ trunk/Source/_javascript_Core/jsc.cpp 2017-04-27 22:37:14 UTC (rev 215896)
@@ -3191,7 +3191,7 @@
if (exec->argumentCount() != functionCount + 2)
CRASH();
- Ref<Wasm::BBQPlan> plan = adoptRef(*new Wasm::BBQPlan(vm, static_cast<uint8_t*>(source->vector()), source->length(), Wasm::BBQPlan::FullCompile, Wasm::Plan::dontFinalize()));
+ Ref<Wasm::BBQPlan> plan = adoptRef(*new Wasm::BBQPlan(nullptr, static_cast<uint8_t*>(source->vector()), source->length(), Wasm::BBQPlan::FullCompile, Wasm::Plan::dontFinalize()));
Wasm::ensureWorklist().enqueue(plan.copyRef());
Wasm::ensureWorklist().completePlanSynchronously(plan.get());
if (plan->failed()) {
Modified: trunk/Source/_javascript_Core/wasm/WasmBBQPlan.cpp (215895 => 215896)
--- trunk/Source/_javascript_Core/wasm/WasmBBQPlan.cpp 2017-04-27 21:52:32 UTC (rev 215895)
+++ trunk/Source/_javascript_Core/wasm/WasmBBQPlan.cpp 2017-04-27 22:37:14 UTC (rev 215896)
@@ -51,7 +51,7 @@
static const bool verbose = false;
-BBQPlan::BBQPlan(VM& vm, Ref<ModuleInformation> info, AsyncWork work, CompletionTask&& task)
+BBQPlan::BBQPlan(VM* vm, Ref<ModuleInformation> info, AsyncWork work, CompletionTask&& task)
: Base(vm, WTFMove(info), WTFMove(task))
, m_state(State::Validated)
, m_asyncWork(work)
@@ -58,13 +58,13 @@
{
}
-BBQPlan::BBQPlan(VM& vm, Vector<uint8_t>&& source, AsyncWork work, CompletionTask&& task)
+BBQPlan::BBQPlan(VM* vm, Vector<uint8_t>&& source, AsyncWork work, CompletionTask&& task)
: BBQPlan(vm, makeRef(*new ModuleInformation(WTFMove(source))), work, WTFMove(task))
{
m_state = State::Initial;
}
-BBQPlan::BBQPlan(VM& vm, const uint8_t* source, size_t sourceLength, AsyncWork work, CompletionTask&& task)
+BBQPlan::BBQPlan(VM* vm, const uint8_t* source, size_t sourceLength, AsyncWork work, CompletionTask&& task)
: Base(vm, source, sourceLength, WTFMove(task))
, m_state(State::Initial)
, m_asyncWork(work)
Modified: trunk/Source/_javascript_Core/wasm/WasmBBQPlan.h (215895 => 215896)
--- trunk/Source/_javascript_Core/wasm/WasmBBQPlan.h 2017-04-27 21:52:32 UTC (rev 215895)
+++ trunk/Source/_javascript_Core/wasm/WasmBBQPlan.h 2017-04-27 22:37:14 UTC (rev 215896)
@@ -51,11 +51,11 @@
using Base = Plan;
enum AsyncWork : uint8_t { FullCompile, Validation };
// Note: CompletionTask should not hold a reference to the Plan otherwise there will be a reference cycle.
- BBQPlan(VM&, Ref<ModuleInformation>, AsyncWork, CompletionTask&&);
- JS_EXPORT_PRIVATE BBQPlan(VM&, Vector<uint8_t>&&, AsyncWork, CompletionTask&&);
+ BBQPlan(VM*, Ref<ModuleInformation>, AsyncWork, CompletionTask&&);
+ JS_EXPORT_PRIVATE BBQPlan(VM*, Vector<uint8_t>&&, AsyncWork, CompletionTask&&);
// Note: This constructor should only be used if you are not actually building a module e.g. validation/function tests
// FIXME: When we get rid of function tests we should remove AsyncWork from this constructor.
- JS_EXPORT_PRIVATE BBQPlan(VM&, const uint8_t*, size_t, AsyncWork, CompletionTask&&);
+ JS_EXPORT_PRIVATE BBQPlan(VM*, const uint8_t*, size_t, AsyncWork, CompletionTask&&);
bool parseAndValidateModule();
Modified: trunk/Source/_javascript_Core/wasm/WasmCodeBlock.cpp (215895 => 215896)
--- trunk/Source/_javascript_Core/wasm/WasmCodeBlock.cpp 2017-04-27 21:52:32 UTC (rev 215895)
+++ trunk/Source/_javascript_Core/wasm/WasmCodeBlock.cpp 2017-04-27 22:37:14 UTC (rev 215896)
@@ -35,12 +35,12 @@
namespace JSC { namespace Wasm {
-CodeBlock::CodeBlock(VM& vm, MemoryMode mode, ModuleInformation& moduleInformation)
+CodeBlock::CodeBlock(MemoryMode mode, ModuleInformation& moduleInformation)
: m_calleeCount(moduleInformation.internalFunctionCount())
, m_mode(mode)
{
RefPtr<CodeBlock> protectedThis = this;
- m_plan = adoptRef(*new BBQPlan(vm, makeRef(moduleInformation), BBQPlan::FullCompile, createSharedTask<Plan::CallbackType>([this, protectedThis = WTFMove(protectedThis)] (VM&, Plan&) {
+ m_plan = adoptRef(*new BBQPlan(nullptr, makeRef(moduleInformation), BBQPlan::FullCompile, createSharedTask<Plan::CallbackType>([this, protectedThis = WTFMove(protectedThis)] (VM*, Plan&) {
auto locker = holdLock(m_lock);
if (m_plan->failed()) {
m_errorMessage = m_plan->errorMessage();
@@ -102,8 +102,9 @@
// We don't need to keep a RefPtr on the Plan because the worklist will keep
// a RefPtr on the Plan until the plan finishes notifying all of its callbacks.
RefPtr<CodeBlock> protectedThis = this;
- plan->addCompletionTask(vm, createSharedTask<Plan::CallbackType>([this, task = WTFMove(task), protectedThis = WTFMove(protectedThis)] (VM& vm, Plan&) {
- task->run(vm, makeRef(*this));
+ plan->addCompletionTask(vm, createSharedTask<Plan::CallbackType>([this, task = WTFMove(task), protectedThis = WTFMove(protectedThis)] (VM* vm, Plan&) {
+ ASSERT(vm);
+ task->run(*vm, makeRef(*this));
}));
} else
task->run(vm, makeRef(*this));
Modified: trunk/Source/_javascript_Core/wasm/WasmCodeBlock.h (215895 => 215896)
--- trunk/Source/_javascript_Core/wasm/WasmCodeBlock.h 2017-04-27 21:52:32 UTC (rev 215895)
+++ trunk/Source/_javascript_Core/wasm/WasmCodeBlock.h 2017-04-27 22:37:14 UTC (rev 215896)
@@ -53,9 +53,9 @@
public:
typedef void CallbackType(VM&, Ref<CodeBlock>&&);
using AsyncCompilationCallback = RefPtr<WTF::SharedTask<CallbackType>>;
- static Ref<CodeBlock> create(VM& vm, MemoryMode mode, ModuleInformation& moduleInformation)
+ static Ref<CodeBlock> create(MemoryMode mode, ModuleInformation& moduleInformation)
{
- return adoptRef(*new CodeBlock(vm, mode, moduleInformation));
+ return adoptRef(*new CodeBlock(mode, moduleInformation));
}
void waitUntilFinished();
@@ -114,7 +114,7 @@
private:
friend class OMGPlan;
- CodeBlock(VM&, MemoryMode, ModuleInformation&);
+ CodeBlock(MemoryMode, ModuleInformation&);
unsigned m_calleeCount;
MemoryMode m_mode;
Vector<RefPtr<Callee>> m_callees;
Modified: trunk/Source/_javascript_Core/wasm/WasmModule.cpp (215895 => 215896)
--- trunk/Source/_javascript_Core/wasm/WasmModule.cpp 2017-04-27 21:52:32 UTC (rev 215895)
+++ trunk/Source/_javascript_Core/wasm/WasmModule.cpp 2017-04-27 22:37:14 UTC (rev 215896)
@@ -56,15 +56,16 @@
static Plan::CompletionTask makeValidationCallback(Module::AsyncValidationCallback&& callback)
{
- return createSharedTask<Plan::CallbackType>([callback = WTFMove(callback)] (VM& vm, Plan& plan) {
+ return createSharedTask<Plan::CallbackType>([callback = WTFMove(callback)] (VM* vm, Plan& plan) {
ASSERT(!plan.hasWork());
- callback->run(vm, makeValidationResult(static_cast<BBQPlan&>(plan)));
+ ASSERT(vm);
+ callback->run(*vm, makeValidationResult(static_cast<BBQPlan&>(plan)));
});
}
Module::ValidationResult Module::validateSync(VM& vm, Vector<uint8_t>&& source)
{
- Ref<BBQPlan> plan = adoptRef(*new BBQPlan(vm, WTFMove(source), BBQPlan::Validation, Plan::dontFinalize()));
+ Ref<BBQPlan> plan = adoptRef(*new BBQPlan(&vm, WTFMove(source), BBQPlan::Validation, Plan::dontFinalize()));
plan->parseAndValidateModule();
return makeValidationResult(plan.get());
}
@@ -71,11 +72,11 @@
void Module::validateAsync(VM& vm, Vector<uint8_t>&& source, Module::AsyncValidationCallback&& callback)
{
- Ref<Plan> plan = adoptRef(*new BBQPlan(vm, WTFMove(source), BBQPlan::Validation, makeValidationCallback(WTFMove(callback))));
+ Ref<Plan> plan = adoptRef(*new BBQPlan(&vm, WTFMove(source), BBQPlan::Validation, makeValidationCallback(WTFMove(callback))));
Wasm::ensureWorklist().enqueue(WTFMove(plan));
}
-Ref<CodeBlock> Module::getOrCreateCodeBlock(VM& vm, MemoryMode mode)
+Ref<CodeBlock> Module::getOrCreateCodeBlock(MemoryMode mode)
{
RefPtr<CodeBlock> codeBlock;
auto locker = holdLock(m_lock);
@@ -86,15 +87,15 @@
// FIXME: We might want to back off retrying at some point:
// https://bugs.webkit.org/show_bug.cgi?id=170607
if (!codeBlock || (codeBlock->compilationFinished() && !codeBlock->runnable())) {
- codeBlock = CodeBlock::create(vm, mode, const_cast<ModuleInformation&>(moduleInformation()));
+ codeBlock = CodeBlock::create(mode, const_cast<ModuleInformation&>(moduleInformation()));
m_codeBlocks[static_cast<uint8_t>(mode)] = codeBlock;
}
return codeBlock.releaseNonNull();
}
-Ref<CodeBlock> Module::compileSync(VM& vm, MemoryMode mode)
+Ref<CodeBlock> Module::compileSync(MemoryMode mode)
{
- Ref<CodeBlock> codeBlock = getOrCreateCodeBlock(vm, mode);
+ Ref<CodeBlock> codeBlock = getOrCreateCodeBlock(mode);
codeBlock->waitUntilFinished();
return codeBlock;
}
@@ -101,7 +102,7 @@
void Module::compileAsync(VM& vm, MemoryMode mode, CodeBlock::AsyncCompilationCallback&& task)
{
- Ref<CodeBlock> codeBlock = getOrCreateCodeBlock(vm, mode);
+ Ref<CodeBlock> codeBlock = getOrCreateCodeBlock(mode);
codeBlock->compileAsync(vm, WTFMove(task));
}
Modified: trunk/Source/_javascript_Core/wasm/WasmModule.h (215895 => 215896)
--- trunk/Source/_javascript_Core/wasm/WasmModule.h 2017-04-27 21:52:32 UTC (rev 215895)
+++ trunk/Source/_javascript_Core/wasm/WasmModule.h 2017-04-27 22:37:14 UTC (rev 215896)
@@ -58,7 +58,7 @@
Wasm::SignatureIndex signatureIndexFromFunctionIndexSpace(unsigned functionIndexSpace) const;
const Wasm::ModuleInformation& moduleInformation() const { return m_moduleInformation.get(); }
- Ref<CodeBlock> compileSync(VM&, MemoryMode);
+ Ref<CodeBlock> compileSync(MemoryMode);
void compileAsync(VM&, MemoryMode, CodeBlock::AsyncCompilationCallback&&);
JS_EXPORT_PRIVATE ~Module();
@@ -65,7 +65,7 @@
CodeBlock* codeBlockFor(MemoryMode mode) { return m_codeBlocks[static_cast<uint8_t>(mode)].get(); }
private:
- Ref<CodeBlock> getOrCreateCodeBlock(VM&, MemoryMode);
+ Ref<CodeBlock> getOrCreateCodeBlock(MemoryMode);
Module(Ref<ModuleInformation>&&);
Ref<ModuleInformation> m_moduleInformation;
Modified: trunk/Source/_javascript_Core/wasm/WasmOMGPlan.cpp (215895 => 215896)
--- trunk/Source/_javascript_Core/wasm/WasmOMGPlan.cpp 2017-04-27 21:52:32 UTC (rev 215895)
+++ trunk/Source/_javascript_Core/wasm/WasmOMGPlan.cpp 2017-04-27 22:37:14 UTC (rev 215896)
@@ -50,8 +50,8 @@
static const bool verbose = false;
-OMGPlan::OMGPlan(VM& vm, Ref<Module> module, uint32_t functionIndex, MemoryMode mode, CompletionTask&& task)
- : Base(vm, makeRef(const_cast<ModuleInformation&>(module->moduleInformation())), WTFMove(task))
+OMGPlan::OMGPlan(Ref<Module> module, uint32_t functionIndex, MemoryMode mode, CompletionTask&& task)
+ : Base(nullptr, makeRef(const_cast<ModuleInformation&>(module->moduleInformation())), WTFMove(task))
, m_module(module.copyRef())
, m_codeBlock(*module->codeBlockFor(mode))
, m_functionIndex(functionIndex)
@@ -158,14 +158,12 @@
void runOMGPlanForIndex(Context* context, uint32_t functionIndex)
{
- VM& vm = *context->vm();
-
JSWebAssemblyCodeBlock* codeBlock = context->codeBlock();
ASSERT(context->memoryMode() == codeBlock->m_codeBlock->mode());
// We use the least significant bit of the tierUpCount to represent whether or not someone has already started the tier up.
if (codeBlock->m_codeBlock->tierUpCount(functionIndex).shouldStartTierUp()) {
- Ref<Plan> plan = adoptRef(*new OMGPlan(vm, context->module()->module(), functionIndex, codeBlock->m_codeBlock->mode(), Plan::dontFinalize()));
+ Ref<Plan> plan = adoptRef(*new OMGPlan(context->module()->module(), functionIndex, codeBlock->m_codeBlock->mode(), Plan::dontFinalize()));
ensureWorklist().enqueue(plan.copyRef());
if (UNLIKELY(!Options::useConcurrentJIT()))
plan->waitForCompletion();
Modified: trunk/Source/_javascript_Core/wasm/WasmOMGPlan.h (215895 => 215896)
--- trunk/Source/_javascript_Core/wasm/WasmOMGPlan.h 2017-04-27 21:52:32 UTC (rev 215895)
+++ trunk/Source/_javascript_Core/wasm/WasmOMGPlan.h 2017-04-27 22:37:14 UTC (rev 215896)
@@ -42,7 +42,7 @@
public:
using Base = Plan;
// Note: CompletionTask should not hold a reference to the Plan otherwise there will be a reference cycle.
- OMGPlan(VM&, Ref<Module>, uint32_t functionIndex, MemoryMode, CompletionTask&&);
+ OMGPlan(Ref<Module>, uint32_t functionIndex, MemoryMode, CompletionTask&&);
bool hasWork() const override { return !m_completed; }
void work(CompilationEffort) override;
Modified: trunk/Source/_javascript_Core/wasm/WasmPlan.cpp (215895 => 215896)
--- trunk/Source/_javascript_Core/wasm/WasmPlan.cpp 2017-04-27 21:52:32 UTC (rev 215895)
+++ trunk/Source/_javascript_Core/wasm/WasmPlan.cpp 2017-04-27 22:37:14 UTC (rev 215896)
@@ -50,20 +50,20 @@
static const bool verbose = false;
-Plan::Plan(VM& vm, Ref<ModuleInformation> info, CompletionTask&& task)
+Plan::Plan(VM* vm, Ref<ModuleInformation> info, CompletionTask&& task)
: m_moduleInformation(WTFMove(info))
, m_source(m_moduleInformation->source.data())
, m_sourceLength(m_moduleInformation->source.size())
{
- m_completionTasks.append(std::make_pair(&vm, WTFMove(task)));
+ m_completionTasks.append(std::make_pair(vm, WTFMove(task)));
}
-Plan::Plan(VM& vm, const uint8_t* source, size_t sourceLength, CompletionTask&& task)
+Plan::Plan(VM* vm, const uint8_t* source, size_t sourceLength, CompletionTask&& task)
: m_moduleInformation(makeRef(*new ModuleInformation(Vector<uint8_t>())))
, m_source(source)
, m_sourceLength(sourceLength)
{
- m_completionTasks.append(std::make_pair(&vm, WTFMove(task)));
+ m_completionTasks.append(std::make_pair(vm, WTFMove(task)));
}
void Plan::runCompletionTasks(const AbstractLocker&)
@@ -71,7 +71,7 @@
ASSERT(isComplete() && !hasWork());
for (auto& task : m_completionTasks)
- task.second->run(*task.first, *this);
+ task.second->run(task.first, *this);
m_completionTasks.clear();
m_completed.notifyAll();
}
@@ -82,7 +82,7 @@
if (!isComplete())
m_completionTasks.append(std::make_pair(&vm, WTFMove(task)));
else
- task->run(vm, *this);
+ task->run(&vm, *this);
}
void Plan::waitForCompletion()
@@ -97,6 +97,12 @@
{
LockHolder locker(m_lock);
+ if (!ASSERT_DISABLED) {
+ // We allow the first completion task to not have a vm.
+ for (unsigned i = 1; i < m_completionTasks.size(); ++i)
+ ASSERT(m_completionTasks[i].first);
+ }
+
bool removedAnyTasks = false;
m_completionTasks.removeAllMatching([&] (const std::pair<VM*, CompletionTask>& pair) {
bool shouldRemove = pair.first == &vm;
@@ -112,8 +118,8 @@
return true;
}
- if (m_completionTasks.size() == 1) {
- ASSERT(!m_completionTasks[0].first);
+ // FIXME: Make 0 index not so magical: https://bugs.webkit.org/show_bug.cgi?id=171395
+ if (m_completionTasks.isEmpty() || (m_completionTasks.size() == 1 && !m_completionTasks[0].first)) {
fail(locker, ASCIILiteral("WebAssembly Plan was cancelled. If you see this error message please file a bug at bugs.webkit.org!"));
return true;
}
Modified: trunk/Source/_javascript_Core/wasm/WasmPlan.h (215895 => 215896)
--- trunk/Source/_javascript_Core/wasm/WasmPlan.h 2017-04-27 21:52:32 UTC (rev 215895)
+++ trunk/Source/_javascript_Core/wasm/WasmPlan.h 2017-04-27 22:37:14 UTC (rev 215896)
@@ -46,13 +46,13 @@
class Plan : public ThreadSafeRefCounted<Plan> {
public:
- typedef void CallbackType(VM&, Plan&);
+ typedef void CallbackType(VM*, Plan&);
using CompletionTask = RefPtr<SharedTask<CallbackType>>;
- static CompletionTask dontFinalize() { return createSharedTask<CallbackType>([](VM&, Plan&) { }); }
- Plan(VM&, Ref<ModuleInformation>, CompletionTask&&);
+ static CompletionTask dontFinalize() { return createSharedTask<CallbackType>([](VM*, Plan&) { }); }
+ Plan(VM*, Ref<ModuleInformation>, CompletionTask&&);
// Note: This constructor should only be used if you are not actually building a module e.g. validation/function tests
- JS_EXPORT_PRIVATE Plan(VM&, const uint8_t*, size_t, CompletionTask&&);
+ JS_EXPORT_PRIVATE Plan(VM*, const uint8_t*, size_t, CompletionTask&&);
virtual JS_EXPORT_PRIVATE ~Plan();
// If you guarantee the ordering here, you can rely on FIFO of the
Modified: trunk/Source/_javascript_Core/wasm/js/WebAssemblyInstanceConstructor.cpp (215895 => 215896)
--- trunk/Source/_javascript_Core/wasm/js/WebAssemblyInstanceConstructor.cpp 2017-04-27 21:52:32 UTC (rev 215895)
+++ trunk/Source/_javascript_Core/wasm/js/WebAssemblyInstanceConstructor.cpp 2017-04-27 22:37:14 UTC (rev 215896)
@@ -78,7 +78,7 @@
JSWebAssemblyInstance* instance = JSWebAssemblyInstance::create(vm, exec, module, importObject, instanceStructure);
RETURN_IF_EXCEPTION(scope, { });
- instance->finalizeCreation(vm, exec, module->module().compileSync(vm, instance->memoryMode()));
+ instance->finalizeCreation(vm, exec, module->module().compileSync(instance->memoryMode()));
RETURN_IF_EXCEPTION(scope, { });
return JSValue::encode(instance);
}
Modified: trunk/Source/_javascript_Core/wasm/js/WebAssemblyPrototype.cpp (215895 => 215896)
--- trunk/Source/_javascript_Core/wasm/js/WebAssemblyPrototype.cpp 2017-04-27 21:52:32 UTC (rev 215895)
+++ trunk/Source/_javascript_Core/wasm/js/WebAssemblyPrototype.cpp 2017-04-27 22:37:14 UTC (rev 215896)
@@ -212,7 +212,7 @@
size_t byteSize;
uint8_t* base = getWasmBufferFromValue(exec, exec->argument(0), byteOffset, byteSize);
RETURN_IF_EXCEPTION(scope, encodedJSValue());
- BBQPlan plan(vm, base + byteOffset, byteSize, BBQPlan::Validation, Plan::dontFinalize());
+ BBQPlan plan(&vm, base + byteOffset, byteSize, BBQPlan::Validation, Plan::dontFinalize());
// FIXME: We might want to throw an OOM exception here if we detect that something will OOM.
// https://bugs.webkit.org/show_bug.cgi?id=166015
return JSValue::encode(jsBoolean(plan.parseAndValidateModule()));