Title: [215896] trunk/Source/_javascript_Core
Revision
215896
Author
[email protected]
Date
2017-04-27 15:37:14 -0700 (Thu, 27 Apr 2017)

Log Message

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):

Modified Paths

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()));
_______________________________________________
webkit-changes mailing list
[email protected]
https://lists.webkit.org/mailman/listinfo/webkit-changes

Reply via email to