Diff
Modified: trunk/Source/_javascript_Core/ChangeLog (243050 => 243051)
--- trunk/Source/_javascript_Core/ChangeLog 2019-03-17 03:50:46 UTC (rev 243050)
+++ trunk/Source/_javascript_Core/ChangeLog 2019-03-17 07:45:55 UTC (rev 243051)
@@ -1,3 +1,63 @@
+2019-03-17 Yusuke Suzuki <[email protected]>
+
+ REGRESSION: !vm.isInitializingObject() void* JSC::tryAllocateCellHelper<JSC::Structure> JSC::Structure::create
+ https://bugs.webkit.org/show_bug.cgi?id=195858
+
+ Reviewed by Mark Lam.
+
+ r243011 changed WebAssembly related structures lazily-allocated. It means that this lazy allocation must not be done in the middle of
+ the other object allocations. This patch changes the signature of wasm related objects' ::create functions to taking Structure*.
+ This prevents us from materializing lazily-allocated structures while allocating wasm related objects, and this style is used in the
+ other places to fix the same problem. This bug is caught by existing debug tests for wasm.
+
+ * runtime/JSGlobalObject.h:
+ * wasm/js/JSWebAssemblyCompileError.cpp:
+ (JSC::createJSWebAssemblyCompileError):
+ * wasm/js/JSWebAssemblyInstance.cpp:
+ (JSC::JSWebAssemblyInstance::finalizeCreation):
+ (JSC::JSWebAssemblyInstance::create):
+ * wasm/js/JSWebAssemblyLinkError.cpp:
+ (JSC::createJSWebAssemblyLinkError):
+ * wasm/js/JSWebAssemblyModule.cpp:
+ (JSC::JSWebAssemblyModule::createStub):
+ (JSC::JSWebAssemblyModule::finishCreation):
+ * wasm/js/WasmToJS.cpp:
+ (JSC::Wasm::wasmToJSException):
+ * wasm/js/WebAssemblyCompileErrorConstructor.cpp:
+ (JSC::constructJSWebAssemblyCompileError):
+ (JSC::callJSWebAssemblyCompileError):
+ * wasm/js/WebAssemblyFunction.cpp:
+ (JSC::WebAssemblyFunction::create):
+ * wasm/js/WebAssemblyFunction.h:
+ * wasm/js/WebAssemblyInstanceConstructor.cpp:
+ (JSC::constructJSWebAssemblyInstance):
+ * wasm/js/WebAssemblyLinkErrorConstructor.cpp:
+ (JSC::constructJSWebAssemblyLinkError):
+ (JSC::callJSWebAssemblyLinkError):
+ * wasm/js/WebAssemblyMemoryConstructor.cpp:
+ (JSC::constructJSWebAssemblyMemory):
+ * wasm/js/WebAssemblyModuleConstructor.cpp:
+ (JSC::WebAssemblyModuleConstructor::createModule):
+ * wasm/js/WebAssemblyModuleRecord.cpp:
+ (JSC::WebAssemblyModuleRecord::link):
+ (JSC::WebAssemblyModuleRecord::evaluate):
+ * wasm/js/WebAssemblyPrototype.cpp:
+ (JSC::webAssemblyModuleValidateAsyncInternal):
+ (JSC::instantiate):
+ (JSC::compileAndInstantiate):
+ (JSC::webAssemblyModuleInstantinateAsyncInternal):
+ * wasm/js/WebAssemblyRuntimeErrorConstructor.cpp:
+ (JSC::constructJSWebAssemblyRuntimeError):
+ (JSC::callJSWebAssemblyRuntimeError):
+ * wasm/js/WebAssemblyTableConstructor.cpp:
+ (JSC::constructJSWebAssemblyTable):
+ * wasm/js/WebAssemblyToJSCallee.cpp:
+ (JSC::WebAssemblyToJSCallee::create):
+ * wasm/js/WebAssemblyToJSCallee.h:
+ * wasm/js/WebAssemblyWrapperFunction.cpp:
+ (JSC::WebAssemblyWrapperFunction::create):
+ * wasm/js/WebAssemblyWrapperFunction.h:
+
2019-03-16 Darin Adler <[email protected]>
Improve normalization code, including moving from unorm.h to unorm2.h
Modified: trunk/Source/_javascript_Core/runtime/JSGlobalObject.h (243050 => 243051)
--- trunk/Source/_javascript_Core/runtime/JSGlobalObject.h 2019-03-17 03:50:46 UTC (rev 243050)
+++ trunk/Source/_javascript_Core/runtime/JSGlobalObject.h 2019-03-17 07:45:55 UTC (rev 243051)
@@ -157,13 +157,13 @@
#if ENABLE(WEBASSEMBLY)
#define FOR_EACH_WEBASSEMBLY_CONSTRUCTOR_TYPE(macro) \
- macro(WebAssemblyCompileError, webAssemblyCompileError, WebAssemblyCompileError, JSWebAssemblyCompileError, CompileError, error) \
- macro(WebAssemblyInstance, webAssemblyInstance, WebAssemblyInstance, JSWebAssemblyInstance, Instance, object) \
- macro(WebAssemblyLinkError, webAssemblyLinkError, WebAssemblyLinkError, JSWebAssemblyLinkError, LinkError, error) \
- macro(WebAssemblyMemory, webAssemblyMemory, WebAssemblyMemory, JSWebAssemblyMemory, Memory, object) \
- macro(WebAssemblyModule, webAssemblyModule, WebAssemblyModule, JSWebAssemblyModule, Module, object) \
- macro(WebAssemblyRuntimeError, webAssemblyRuntimeError, WebAssemblyRuntimeError, JSWebAssemblyRuntimeError, RuntimeError, error) \
- macro(WebAssemblyTable, webAssemblyTable, WebAssemblyTable, JSWebAssemblyTable, Table, object)
+ macro(WebAssemblyCompileError, webAssemblyCompileError, webAssemblyCompileError, JSWebAssemblyCompileError, CompileError, error) \
+ macro(WebAssemblyInstance, webAssemblyInstance, webAssemblyInstance, JSWebAssemblyInstance, Instance, object) \
+ macro(WebAssemblyLinkError, webAssemblyLinkError, webAssemblyLinkError, JSWebAssemblyLinkError, LinkError, error) \
+ macro(WebAssemblyMemory, webAssemblyMemory, webAssemblyMemory, JSWebAssemblyMemory, Memory, object) \
+ macro(WebAssemblyModule, webAssemblyModule, webAssemblyModule, JSWebAssemblyModule, Module, object) \
+ macro(WebAssemblyRuntimeError, webAssemblyRuntimeError, webAssemblyRuntimeError, JSWebAssemblyRuntimeError, RuntimeError, error) \
+ macro(WebAssemblyTable, webAssemblyTable, webAssemblyTable, JSWebAssemblyTable, Table, object)
#else
#define FOR_EACH_WEBASSEMBLY_CONSTRUCTOR_TYPE(macro)
#endif // ENABLE(WEBASSEMBLY)
Modified: trunk/Source/_javascript_Core/wasm/js/JSWebAssemblyCompileError.cpp (243050 => 243051)
--- trunk/Source/_javascript_Core/wasm/js/JSWebAssemblyCompileError.cpp 2019-03-17 03:50:46 UTC (rev 243050)
+++ trunk/Source/_javascript_Core/wasm/js/JSWebAssemblyCompileError.cpp 2019-03-17 07:45:55 UTC (rev 243051)
@@ -53,7 +53,7 @@
{
ASSERT(!message.isEmpty());
JSGlobalObject* globalObject = exec->lexicalGlobalObject();
- return JSWebAssemblyCompileError::create(exec, vm, globalObject->WebAssemblyCompileErrorStructure(), message);
+ return JSWebAssemblyCompileError::create(exec, vm, globalObject->webAssemblyCompileErrorStructure(), message);
}
} // namespace JSC
Modified: trunk/Source/_javascript_Core/wasm/js/JSWebAssemblyInstance.cpp (243050 => 243051)
--- trunk/Source/_javascript_Core/wasm/js/JSWebAssemblyInstance.cpp 2019-03-17 03:50:46 UTC (rev 243050)
+++ trunk/Source/_javascript_Core/wasm/js/JSWebAssemblyInstance.cpp 2019-03-17 07:45:55 UTC (rev 243051)
@@ -98,7 +98,7 @@
auto scope = DECLARE_THROW_SCOPE(vm);
if (!wasmCodeBlock->runnable()) {
- throwException(exec, scope, JSWebAssemblyLinkError::create(exec, vm, globalObject(vm)->WebAssemblyLinkErrorStructure(), wasmCodeBlock->errorMessage()));
+ throwException(exec, scope, JSWebAssemblyLinkError::create(exec, vm, globalObject(vm)->webAssemblyLinkErrorStructure(), wasmCodeBlock->errorMessage()));
return;
}
@@ -114,7 +114,7 @@
} else {
jsCodeBlock = JSWebAssemblyCodeBlock::create(vm, WTFMove(wasmCodeBlock), module()->module().moduleInformation());
if (UNLIKELY(!jsCodeBlock->runnable())) {
- throwException(exec, scope, JSWebAssemblyLinkError::create(exec, vm, globalObject(vm)->WebAssemblyLinkErrorStructure(), jsCodeBlock->errorMessage()));
+ throwException(exec, scope, JSWebAssemblyLinkError::create(exec, vm, globalObject(vm)->webAssemblyLinkErrorStructure(), jsCodeBlock->errorMessage()));
return;
}
m_codeBlock.set(vm, this, jsCodeBlock);
@@ -278,7 +278,7 @@
// We create a memory when it's a memory definition.
RELEASE_ASSERT(!moduleInformation.memory.isImport());
- auto* jsMemory = JSWebAssemblyMemory::create(exec, vm, globalObject->WebAssemblyMemoryStructure());
+ auto* jsMemory = JSWebAssemblyMemory::create(exec, vm, globalObject->webAssemblyMemoryStructure());
RETURN_IF_EXCEPTION(throwScope, nullptr);
RefPtr<Wasm::Memory> memory = Wasm::Memory::tryCreate(moduleInformation.memory.initial(), moduleInformation.memory.maximum(),
@@ -296,7 +296,7 @@
if (!jsInstance->memory()) {
// Make sure we have a dummy memory, so that wasm -> wasm thunks avoid checking for a nullptr Memory when trying to set pinned registers.
- auto* jsMemory = JSWebAssemblyMemory::create(exec, vm, globalObject->WebAssemblyMemoryStructure());
+ auto* jsMemory = JSWebAssemblyMemory::create(exec, vm, globalObject->webAssemblyMemoryStructure());
jsMemory->adopt(Wasm::Memory::create());
jsInstance->setMemory(vm, jsMemory);
RETURN_IF_EXCEPTION(throwScope, nullptr);
Modified: trunk/Source/_javascript_Core/wasm/js/JSWebAssemblyLinkError.cpp (243050 => 243051)
--- trunk/Source/_javascript_Core/wasm/js/JSWebAssemblyLinkError.cpp 2019-03-17 03:50:46 UTC (rev 243050)
+++ trunk/Source/_javascript_Core/wasm/js/JSWebAssemblyLinkError.cpp 2019-03-17 07:45:55 UTC (rev 243051)
@@ -53,7 +53,7 @@
{
ASSERT(!message.isEmpty());
JSGlobalObject* globalObject = exec->lexicalGlobalObject();
- return JSWebAssemblyLinkError::create(exec, vm, globalObject->WebAssemblyLinkErrorStructure(), message);
+ return JSWebAssemblyLinkError::create(exec, vm, globalObject->webAssemblyLinkErrorStructure(), message);
}
} // namespace JSC
Modified: trunk/Source/_javascript_Core/wasm/js/JSWebAssemblyModule.cpp (243050 => 243051)
--- trunk/Source/_javascript_Core/wasm/js/JSWebAssemblyModule.cpp 2019-03-17 03:50:46 UTC (rev 243050)
+++ trunk/Source/_javascript_Core/wasm/js/JSWebAssemblyModule.cpp 2019-03-17 07:45:55 UTC (rev 243051)
@@ -48,7 +48,7 @@
{
auto scope = DECLARE_THROW_SCOPE(vm);
if (!result.has_value()) {
- auto* error = JSWebAssemblyCompileError::create(exec, vm, structure->globalObject()->WebAssemblyCompileErrorStructure(), result.error());
+ auto* error = JSWebAssemblyCompileError::create(exec, vm, structure->globalObject()->webAssemblyCompileErrorStructure(), result.error());
RETURN_IF_EXCEPTION(scope, nullptr);
throwException(exec, scope, error);
return nullptr;
@@ -86,7 +86,7 @@
}
m_exportSymbolTable.set(vm, this, exportSymbolTable);
- m_callee.set(vm, this, WebAssemblyToJSCallee::create(vm, this));
+ m_callee.set(vm, this, WebAssemblyToJSCallee::create(vm, globalObject(vm)->webAssemblyToJSCalleeStructure(), this));
}
void JSWebAssemblyModule::destroy(JSCell* cell)
Modified: trunk/Source/_javascript_Core/wasm/js/WasmToJS.cpp (243050 => 243051)
--- trunk/Source/_javascript_Core/wasm/js/WasmToJS.cpp 2019-03-17 03:50:46 UTC (rev 243050)
+++ trunk/Source/_javascript_Core/wasm/js/WasmToJS.cpp 2019-03-17 07:45:55 UTC (rev 243051)
@@ -660,7 +660,7 @@
if (type == ExceptionType::StackOverflow)
error = createStackOverflowError(exec, globalObject);
else
- error = JSWebAssemblyRuntimeError::create(exec, vm, globalObject->WebAssemblyRuntimeErrorStructure(), Wasm::errorMessageForExceptionType(type));
+ error = JSWebAssemblyRuntimeError::create(exec, vm, globalObject->webAssemblyRuntimeErrorStructure(), Wasm::errorMessageForExceptionType(type));
throwException(exec, throwScope, error);
}
Modified: trunk/Source/_javascript_Core/wasm/js/WebAssemblyCompileErrorConstructor.cpp (243050 => 243051)
--- trunk/Source/_javascript_Core/wasm/js/WebAssemblyCompileErrorConstructor.cpp 2019-03-17 03:50:46 UTC (rev 243050)
+++ trunk/Source/_javascript_Core/wasm/js/WebAssemblyCompileErrorConstructor.cpp 2019-03-17 07:45:55 UTC (rev 243051)
@@ -49,7 +49,7 @@
auto& vm = exec->vm();
auto scope = DECLARE_THROW_SCOPE(vm);
JSValue message = exec->argument(0);
- auto* structure = InternalFunction::createSubclassStructure(exec, exec->newTarget(), jsCast<InternalFunction*>(exec->jsCallee())->globalObject(vm)->WebAssemblyCompileErrorStructure());
+ auto* structure = InternalFunction::createSubclassStructure(exec, exec->newTarget(), jsCast<InternalFunction*>(exec->jsCallee())->globalObject(vm)->webAssemblyCompileErrorStructure());
RETURN_IF_EXCEPTION(scope, encodedJSValue());
RELEASE_AND_RETURN(scope, JSValue::encode(JSWebAssemblyCompileError::create(exec, vm, structure, message)));
}
@@ -57,7 +57,7 @@
static EncodedJSValue JSC_HOST_CALL callJSWebAssemblyCompileError(ExecState* exec)
{
JSValue message = exec->argument(0);
- Structure* errorStructure = jsCast<InternalFunction*>(exec->jsCallee())->globalObject(exec->vm())->WebAssemblyCompileErrorStructure();
+ Structure* errorStructure = jsCast<InternalFunction*>(exec->jsCallee())->globalObject(exec->vm())->webAssemblyCompileErrorStructure();
return JSValue::encode(ErrorInstance::create(exec, errorStructure, message, nullptr, TypeNothing, false));
}
Modified: trunk/Source/_javascript_Core/wasm/js/WebAssemblyFunction.cpp (243050 => 243051)
--- trunk/Source/_javascript_Core/wasm/js/WebAssemblyFunction.cpp 2019-03-17 03:50:46 UTC (rev 243050)
+++ trunk/Source/_javascript_Core/wasm/js/WebAssemblyFunction.cpp 2019-03-17 07:45:55 UTC (rev 243051)
@@ -148,10 +148,9 @@
return rawResult;
}
-WebAssemblyFunction* WebAssemblyFunction::create(VM& vm, JSGlobalObject* globalObject, unsigned length, const String& name, JSWebAssemblyInstance* instance, Wasm::Callee& jsEntrypoint, Wasm::WasmToWasmImportableFunction::LoadLocation wasmToWasmEntrypointLoadLocation, Wasm::SignatureIndex signatureIndex)
+WebAssemblyFunction* WebAssemblyFunction::create(VM& vm, JSGlobalObject* globalObject, Structure* structure, unsigned length, const String& name, JSWebAssemblyInstance* instance, Wasm::Callee& jsEntrypoint, Wasm::WasmToWasmImportableFunction::LoadLocation wasmToWasmEntrypointLoadLocation, Wasm::SignatureIndex signatureIndex)
{
NativeExecutable* executable = vm.getHostFunction(callWebAssemblyFunction, NoIntrinsic, callHostFunctionAsConstructor, nullptr, name);
- Structure* structure = globalObject->webAssemblyFunctionStructure();
WebAssemblyFunction* function = new (NotNull, allocateCell<WebAssemblyFunction>(vm.heap)) WebAssemblyFunction(vm, globalObject, structure, jsEntrypoint, wasmToWasmEntrypointLoadLocation, signatureIndex);
function->finishCreation(vm, executable, length, name, instance);
ASSERT_WITH_MESSAGE(!function->isLargeAllocation(), "WebAssemblyFunction should be allocated not in large allocation since it is JSCallee.");
Modified: trunk/Source/_javascript_Core/wasm/js/WebAssemblyFunction.h (243050 => 243051)
--- trunk/Source/_javascript_Core/wasm/js/WebAssemblyFunction.h 2019-03-17 03:50:46 UTC (rev 243050)
+++ trunk/Source/_javascript_Core/wasm/js/WebAssemblyFunction.h 2019-03-17 07:45:55 UTC (rev 243051)
@@ -57,7 +57,7 @@
DECLARE_EXPORT_INFO;
- JS_EXPORT_PRIVATE static WebAssemblyFunction* create(VM&, JSGlobalObject*, unsigned, const String&, JSWebAssemblyInstance*, Wasm::Callee& jsEntrypoint, WasmToWasmImportableFunction::LoadLocation, Wasm::SignatureIndex);
+ JS_EXPORT_PRIVATE static WebAssemblyFunction* create(VM&, JSGlobalObject*, Structure*, unsigned, const String&, JSWebAssemblyInstance*, Wasm::Callee& jsEntrypoint, WasmToWasmImportableFunction::LoadLocation, Wasm::SignatureIndex);
static Structure* createStructure(VM&, JSGlobalObject*, JSValue);
Wasm::SignatureIndex signatureIndex() const { return m_importableFunction.signatureIndex; }
Modified: trunk/Source/_javascript_Core/wasm/js/WebAssemblyInstanceConstructor.cpp (243050 => 243051)
--- trunk/Source/_javascript_Core/wasm/js/WebAssemblyInstanceConstructor.cpp 2019-03-17 03:50:46 UTC (rev 243050)
+++ trunk/Source/_javascript_Core/wasm/js/WebAssemblyInstanceConstructor.cpp 2019-03-17 07:45:55 UTC (rev 243051)
@@ -74,7 +74,7 @@
if (!importArgument.isUndefined() && !importObject)
return JSValue::encode(throwException(exec, scope, createTypeError(exec, "second argument to WebAssembly.Instance must be undefined or an Object"_s, defaultSourceAppender, runtimeTypeForValue(vm, importArgument))));
- Structure* instanceStructure = InternalFunction::createSubclassStructure(exec, exec->newTarget(), exec->lexicalGlobalObject()->WebAssemblyInstanceStructure());
+ Structure* instanceStructure = InternalFunction::createSubclassStructure(exec, exec->newTarget(), exec->lexicalGlobalObject()->webAssemblyInstanceStructure());
RETURN_IF_EXCEPTION(scope, { });
JSWebAssemblyInstance* instance = JSWebAssemblyInstance::create(vm, exec, JSWebAssemblyInstance::createPrivateModuleKey(), module, importObject, instanceStructure, Ref<Wasm::Module>(module->module()), Wasm::CreationMode::FromJS);
Modified: trunk/Source/_javascript_Core/wasm/js/WebAssemblyLinkErrorConstructor.cpp (243050 => 243051)
--- trunk/Source/_javascript_Core/wasm/js/WebAssemblyLinkErrorConstructor.cpp 2019-03-17 03:50:46 UTC (rev 243050)
+++ trunk/Source/_javascript_Core/wasm/js/WebAssemblyLinkErrorConstructor.cpp 2019-03-17 07:45:55 UTC (rev 243051)
@@ -49,7 +49,7 @@
auto& vm = exec->vm();
auto scope = DECLARE_THROW_SCOPE(vm);
JSValue message = exec->argument(0);
- auto* structure = InternalFunction::createSubclassStructure(exec, exec->newTarget(), jsCast<InternalFunction*>(exec->jsCallee())->globalObject(vm)->WebAssemblyLinkErrorStructure());
+ auto* structure = InternalFunction::createSubclassStructure(exec, exec->newTarget(), jsCast<InternalFunction*>(exec->jsCallee())->globalObject(vm)->webAssemblyLinkErrorStructure());
RETURN_IF_EXCEPTION(scope, encodedJSValue());
return JSValue::encode(JSWebAssemblyLinkError::create(exec, vm, structure, message));
}
@@ -57,7 +57,7 @@
static EncodedJSValue JSC_HOST_CALL callJSWebAssemblyLinkError(ExecState* exec)
{
JSValue message = exec->argument(0);
- Structure* errorStructure = jsCast<InternalFunction*>(exec->jsCallee())->globalObject(exec->vm())->WebAssemblyLinkErrorStructure();
+ Structure* errorStructure = jsCast<InternalFunction*>(exec->jsCallee())->globalObject(exec->vm())->webAssemblyLinkErrorStructure();
return JSValue::encode(ErrorInstance::create(exec, errorStructure, message, nullptr, TypeNothing, false));
}
Modified: trunk/Source/_javascript_Core/wasm/js/WebAssemblyMemoryConstructor.cpp (243050 => 243051)
--- trunk/Source/_javascript_Core/wasm/js/WebAssemblyMemoryConstructor.cpp 2019-03-17 03:50:46 UTC (rev 243050)
+++ trunk/Source/_javascript_Core/wasm/js/WebAssemblyMemoryConstructor.cpp 2019-03-17 07:45:55 UTC (rev 243051)
@@ -98,7 +98,7 @@
}
}
- auto* jsMemory = JSWebAssemblyMemory::create(exec, vm, exec->lexicalGlobalObject()->WebAssemblyMemoryStructure());
+ auto* jsMemory = JSWebAssemblyMemory::create(exec, vm, exec->lexicalGlobalObject()->webAssemblyMemoryStructure());
RETURN_IF_EXCEPTION(throwScope, encodedJSValue());
RefPtr<Wasm::Memory> memory = Wasm::Memory::tryCreate(initialPageCount, maximumPageCount,
Modified: trunk/Source/_javascript_Core/wasm/js/WebAssemblyModuleConstructor.cpp (243050 => 243051)
--- trunk/Source/_javascript_Core/wasm/js/WebAssemblyModuleConstructor.cpp 2019-03-17 03:50:46 UTC (rev 243050)
+++ trunk/Source/_javascript_Core/wasm/js/WebAssemblyModuleConstructor.cpp 2019-03-17 07:45:55 UTC (rev 243051)
@@ -181,7 +181,7 @@
VM& vm = exec->vm();
auto scope = DECLARE_THROW_SCOPE(vm);
- auto* structure = InternalFunction::createSubclassStructure(exec, exec->newTarget(), exec->lexicalGlobalObject()->WebAssemblyModuleStructure());
+ auto* structure = InternalFunction::createSubclassStructure(exec, exec->newTarget(), exec->lexicalGlobalObject()->webAssemblyModuleStructure());
RETURN_IF_EXCEPTION(scope, nullptr);
RELEASE_AND_RETURN(scope, JSWebAssemblyModule::createStub(vm, exec, structure, Wasm::Module::validateSync(&vm.wasmContext, WTFMove(buffer))));
Modified: trunk/Source/_javascript_Core/wasm/js/WebAssemblyModuleRecord.cpp (243050 => 243051)
--- trunk/Source/_javascript_Core/wasm/js/WebAssemblyModuleRecord.cpp 2019-03-17 03:50:46 UTC (rev 243050)
+++ trunk/Source/_javascript_Core/wasm/js/WebAssemblyModuleRecord.cpp 2019-03-17 07:45:55 UTC (rev 243051)
@@ -301,7 +301,7 @@
RefPtr<Wasm::Table> wasmTable = Wasm::Table::tryCreate(moduleInformation.tableInformation.initial(), moduleInformation.tableInformation.maximum());
if (!wasmTable)
return exception(createJSWebAssemblyLinkError(exec, vm, "couldn't create Table"));
- JSWebAssemblyTable* table = JSWebAssemblyTable::create(exec, vm, globalObject->WebAssemblyTableStructure(), wasmTable.releaseNonNull());
+ JSWebAssemblyTable* table = JSWebAssemblyTable::create(exec, vm, globalObject->webAssemblyTableStructure(), wasmTable.releaseNonNull());
// We should always be able to allocate a JSWebAssemblyTable we've defined.
// If it's defined to be too large, we should have thrown a validation error.
scope.assertNoException();
@@ -343,7 +343,7 @@
exportedValue = functionImport;
else {
Wasm::SignatureIndex signatureIndex = module->signatureIndexFromFunctionIndexSpace(functionIndex);
- exportedValue = WebAssemblyWrapperFunction::create(vm, globalObject, functionImport, functionIndex, m_instance.get(), signatureIndex);
+ exportedValue = WebAssemblyWrapperFunction::create(vm, globalObject, globalObject->webAssemblyWrapperFunctionStructure(), functionImport, functionIndex, m_instance.get(), signatureIndex);
}
} else {
// iii. Otherwise:
@@ -354,7 +354,7 @@
Wasm::WasmToWasmImportableFunction::LoadLocation entrypointLoadLocation = codeBlock->entrypointLoadLocationFromFunctionIndexSpace(exp.kindIndex);
Wasm::SignatureIndex signatureIndex = module->signatureIndexFromFunctionIndexSpace(exp.kindIndex);
const Wasm::Signature& signature = Wasm::SignatureInformation::get(signatureIndex);
- WebAssemblyFunction* function = WebAssemblyFunction::create(vm, globalObject, signature.argumentCount(), String::fromUTF8(exp.field), m_instance.get(), embedderEntrypointCallee, entrypointLoadLocation, signatureIndex);
+ WebAssemblyFunction* function = WebAssemblyFunction::create(vm, globalObject, globalObject->webAssemblyFunctionStructure(), signature.argumentCount(), String::fromUTF8(exp.field), m_instance.get(), embedderEntrypointCallee, entrypointLoadLocation, signatureIndex);
exportedValue = function;
}
break;
@@ -424,7 +424,7 @@
} else {
Wasm::Callee& embedderEntrypointCallee = codeBlock->embedderEntrypointCalleeFromFunctionIndexSpace(startFunctionIndexSpace);
Wasm::WasmToWasmImportableFunction::LoadLocation entrypointLoadLocation = codeBlock->entrypointLoadLocationFromFunctionIndexSpace(startFunctionIndexSpace);
- WebAssemblyFunction* function = WebAssemblyFunction::create(vm, globalObject, signature.argumentCount(), "start", m_instance.get(), embedderEntrypointCallee, entrypointLoadLocation, signatureIndex);
+ WebAssemblyFunction* function = WebAssemblyFunction::create(vm, globalObject, globalObject->webAssemblyFunctionStructure(), signature.argumentCount(), "start", m_instance.get(), embedderEntrypointCallee, entrypointLoadLocation, signatureIndex);
m_startFunction.set(vm, this, function);
}
}
@@ -533,7 +533,7 @@
}
table->setFunction(vm, tableIndex,
- WebAssemblyWrapperFunction::create(vm, globalObject, functionImport, functionIndex, m_instance.get(), signatureIndex));
+ WebAssemblyWrapperFunction::create(vm, globalObject, globalObject->webAssemblyWrapperFunctionStructure(), functionImport, functionIndex, m_instance.get(), signatureIndex));
++tableIndex;
continue;
}
@@ -546,7 +546,7 @@
// Does (new Instance(...)).exports.foo === table.get(0)?
// https://bugs.webkit.org/show_bug.cgi?id=165825
WebAssemblyFunction* function = WebAssemblyFunction::create(
- vm, globalObject, signature.argumentCount(), String(), m_instance.get(), embedderEntrypointCallee, entrypointLoadLocation, signatureIndex);
+ vm, globalObject, globalObject->webAssemblyFunctionStructure(), signature.argumentCount(), String(), m_instance.get(), embedderEntrypointCallee, entrypointLoadLocation, signatureIndex);
table->setFunction(vm, tableIndex, function);
++tableIndex;
Modified: trunk/Source/_javascript_Core/wasm/js/WebAssemblyPrototype.cpp (243050 => 243051)
--- trunk/Source/_javascript_Core/wasm/js/WebAssemblyPrototype.cpp 2019-03-17 03:50:46 UTC (rev 243050)
+++ trunk/Source/_javascript_Core/wasm/js/WebAssemblyPrototype.cpp 2019-03-17 07:45:55 UTC (rev 243051)
@@ -97,7 +97,7 @@
vm.promiseDeferredTimer->scheduleWorkSoon(promise, [promise, globalObject, result = WTFMove(result), &vm] () mutable {
auto scope = DECLARE_CATCH_SCOPE(vm);
ExecState* exec = globalObject->globalExec();
- JSValue module = JSWebAssemblyModule::createStub(vm, exec, globalObject->WebAssemblyModuleStructure(), WTFMove(result));
+ JSValue module = JSWebAssemblyModule::createStub(vm, exec, globalObject->webAssemblyModuleStructure(), WTFMove(result));
if (UNLIKELY(scope.exception())) {
reject(exec, scope, promise);
return;
@@ -166,7 +166,7 @@
{
auto scope = DECLARE_CATCH_SCOPE(vm);
// In order to avoid potentially recompiling a module. We first gather all the import/memory information prior to compiling code.
- JSWebAssemblyInstance* instance = JSWebAssemblyInstance::create(vm, exec, moduleKey, module, importObject, exec->lexicalGlobalObject()->WebAssemblyInstanceStructure(), Ref<Wasm::Module>(module->module()), creationMode);
+ JSWebAssemblyInstance* instance = JSWebAssemblyInstance::create(vm, exec, moduleKey, module, importObject, exec->lexicalGlobalObject()->webAssemblyInstanceStructure(), Ref<Wasm::Module>(module->module()), creationMode);
RETURN_IF_EXCEPTION(scope, reject(exec, scope, promise));
Vector<Strong<JSCell>> dependencies;
@@ -203,7 +203,7 @@
vm.promiseDeferredTimer->scheduleWorkSoon(promise, [promise, importObject, moduleKeyCell, globalObject, result = WTFMove(result), resolveKind, creationMode, &vm] () mutable {
auto scope = DECLARE_CATCH_SCOPE(vm);
ExecState* exec = globalObject->globalExec();
- JSWebAssemblyModule* module = JSWebAssemblyModule::createStub(vm, exec, globalObject->WebAssemblyModuleStructure(), WTFMove(result));
+ JSWebAssemblyModule* module = JSWebAssemblyModule::createStub(vm, exec, globalObject->webAssemblyModuleStructure(), WTFMove(result));
if (UNLIKELY(scope.exception()))
return reject(exec, scope, promise);
@@ -237,7 +237,7 @@
vm.promiseDeferredTimer->scheduleWorkSoon(promise, [promise, importObject, globalObject, result = WTFMove(result), &vm] () mutable {
auto scope = DECLARE_CATCH_SCOPE(vm);
ExecState* exec = globalObject->globalExec();
- JSWebAssemblyModule* module = JSWebAssemblyModule::createStub(vm, exec, globalObject->WebAssemblyModuleStructure(), WTFMove(result));
+ JSWebAssemblyModule* module = JSWebAssemblyModule::createStub(vm, exec, globalObject->webAssemblyModuleStructure(), WTFMove(result));
if (UNLIKELY(scope.exception()))
return reject(exec, scope, promise);
Modified: trunk/Source/_javascript_Core/wasm/js/WebAssemblyRuntimeErrorConstructor.cpp (243050 => 243051)
--- trunk/Source/_javascript_Core/wasm/js/WebAssemblyRuntimeErrorConstructor.cpp 2019-03-17 03:50:46 UTC (rev 243050)
+++ trunk/Source/_javascript_Core/wasm/js/WebAssemblyRuntimeErrorConstructor.cpp 2019-03-17 07:45:55 UTC (rev 243051)
@@ -49,7 +49,7 @@
auto& vm = exec->vm();
auto scope = DECLARE_THROW_SCOPE(vm);
JSValue message = exec->argument(0);
- auto* structure = InternalFunction::createSubclassStructure(exec, exec->newTarget(), jsCast<InternalFunction*>(exec->jsCallee())->globalObject(vm)->WebAssemblyRuntimeErrorStructure());
+ auto* structure = InternalFunction::createSubclassStructure(exec, exec->newTarget(), jsCast<InternalFunction*>(exec->jsCallee())->globalObject(vm)->webAssemblyRuntimeErrorStructure());
RETURN_IF_EXCEPTION(scope, encodedJSValue());
return JSValue::encode(JSWebAssemblyRuntimeError::create(exec, vm, structure, message));
}
@@ -57,7 +57,7 @@
static EncodedJSValue JSC_HOST_CALL callJSWebAssemblyRuntimeError(ExecState* exec)
{
JSValue message = exec->argument(0);
- Structure* errorStructure = jsCast<InternalFunction*>(exec->jsCallee())->globalObject(exec->vm())->WebAssemblyRuntimeErrorStructure();
+ Structure* errorStructure = jsCast<InternalFunction*>(exec->jsCallee())->globalObject(exec->vm())->webAssemblyRuntimeErrorStructure();
return JSValue::encode(ErrorInstance::create(exec, errorStructure, message, nullptr, TypeNothing, false));
}
Modified: trunk/Source/_javascript_Core/wasm/js/WebAssemblyTableConstructor.cpp (243050 => 243051)
--- trunk/Source/_javascript_Core/wasm/js/WebAssemblyTableConstructor.cpp 2019-03-17 03:50:46 UTC (rev 243050)
+++ trunk/Source/_javascript_Core/wasm/js/WebAssemblyTableConstructor.cpp 2019-03-17 07:45:55 UTC (rev 243051)
@@ -96,7 +96,7 @@
createRangeError(exec, "couldn't create Table"_s)));
}
- RELEASE_AND_RETURN(throwScope, JSValue::encode(JSWebAssemblyTable::create(exec, vm, exec->lexicalGlobalObject()->WebAssemblyTableStructure(), wasmTable.releaseNonNull())));
+ RELEASE_AND_RETURN(throwScope, JSValue::encode(JSWebAssemblyTable::create(exec, vm, exec->lexicalGlobalObject()->webAssemblyTableStructure(), wasmTable.releaseNonNull())));
}
static EncodedJSValue JSC_HOST_CALL callJSWebAssemblyTable(ExecState* exec)
Modified: trunk/Source/_javascript_Core/wasm/js/WebAssemblyToJSCallee.cpp (243050 => 243051)
--- trunk/Source/_javascript_Core/wasm/js/WebAssemblyToJSCallee.cpp 2019-03-17 03:50:46 UTC (rev 243050)
+++ trunk/Source/_javascript_Core/wasm/js/WebAssemblyToJSCallee.cpp 2019-03-17 07:45:55 UTC (rev 243051)
@@ -35,9 +35,8 @@
const ClassInfo WebAssemblyToJSCallee::s_info = { "WebAssemblyToJSCallee", &Base::s_info, nullptr, nullptr, CREATE_METHOD_TABLE(WebAssemblyToJSCallee) };
-WebAssemblyToJSCallee* WebAssemblyToJSCallee::create(VM& vm, JSWebAssemblyModule* module)
+WebAssemblyToJSCallee* WebAssemblyToJSCallee::create(VM& vm, Structure* structure, JSWebAssemblyModule* module)
{
- Structure* structure = module->globalObject(vm)->webAssemblyToJSCalleeStructure();
WebAssemblyToJSCallee* callee = new (NotNull, allocateCell<WebAssemblyToJSCallee>(vm.heap)) WebAssemblyToJSCallee(vm, structure);
callee->finishCreation(vm, module);
return callee;
Modified: trunk/Source/_javascript_Core/wasm/js/WebAssemblyToJSCallee.h (243050 => 243051)
--- trunk/Source/_javascript_Core/wasm/js/WebAssemblyToJSCallee.h 2019-03-17 03:50:46 UTC (rev 243050)
+++ trunk/Source/_javascript_Core/wasm/js/WebAssemblyToJSCallee.h 2019-03-17 07:45:55 UTC (rev 243051)
@@ -38,7 +38,7 @@
using Base = JSNonFinalObject;
static const unsigned StructureFlags = Base::StructureFlags;
- static WebAssemblyToJSCallee* create(VM&, JSWebAssemblyModule*);
+ static WebAssemblyToJSCallee* create(VM&, Structure*, JSWebAssemblyModule*);
static Structure* createStructure(VM&, JSGlobalObject*, JSValue);
DECLARE_EXPORT_INFO;
Modified: trunk/Source/_javascript_Core/wasm/js/WebAssemblyWrapperFunction.cpp (243050 => 243051)
--- trunk/Source/_javascript_Core/wasm/js/WebAssemblyWrapperFunction.cpp 2019-03-17 03:50:46 UTC (rev 243050)
+++ trunk/Source/_javascript_Core/wasm/js/WebAssemblyWrapperFunction.cpp 2019-03-17 07:45:55 UTC (rev 243051)
@@ -55,12 +55,12 @@
, m_importableFunction(importableFunction)
{ }
-WebAssemblyWrapperFunction* WebAssemblyWrapperFunction::create(VM& vm, JSGlobalObject* globalObject, JSObject* function, unsigned importIndex, JSWebAssemblyInstance* instance, Wasm::SignatureIndex signatureIndex)
+WebAssemblyWrapperFunction* WebAssemblyWrapperFunction::create(VM& vm, JSGlobalObject* globalObject, Structure* structure, JSObject* function, unsigned importIndex, JSWebAssemblyInstance* instance, Wasm::SignatureIndex signatureIndex)
{
ASSERT_WITH_MESSAGE(!function->inherits<WebAssemblyWrapperFunction>(vm), "We should never double wrap a wrapper function.");
String name = "";
NativeExecutable* executable = vm.getHostFunction(callWebAssemblyWrapperFunction, NoIntrinsic, callHostFunctionAsConstructor, nullptr, name);
- WebAssemblyWrapperFunction* result = new (NotNull, allocateCell<WebAssemblyWrapperFunction>(vm.heap)) WebAssemblyWrapperFunction(vm, globalObject, globalObject->webAssemblyWrapperFunctionStructure(), Wasm::WasmToWasmImportableFunction { signatureIndex, &instance->instance().importFunctionInfo(importIndex)->wasmToEmbedderStub } );
+ WebAssemblyWrapperFunction* result = new (NotNull, allocateCell<WebAssemblyWrapperFunction>(vm.heap)) WebAssemblyWrapperFunction(vm, globalObject, structure, Wasm::WasmToWasmImportableFunction { signatureIndex, &instance->instance().importFunctionInfo(importIndex)->wasmToEmbedderStub } );
const Wasm::Signature& signature = Wasm::SignatureInformation::get(signatureIndex);
result->finishCreation(vm, executable, signature.argumentCount(), name, function, instance);
return result;
Modified: trunk/Source/_javascript_Core/wasm/js/WebAssemblyWrapperFunction.h (243050 => 243051)
--- trunk/Source/_javascript_Core/wasm/js/WebAssemblyWrapperFunction.h 2019-03-17 03:50:46 UTC (rev 243050)
+++ trunk/Source/_javascript_Core/wasm/js/WebAssemblyWrapperFunction.h 2019-03-17 07:45:55 UTC (rev 243051)
@@ -48,7 +48,7 @@
DECLARE_INFO;
- static WebAssemblyWrapperFunction* create(VM&, JSGlobalObject*, JSObject*, unsigned importIndex, JSWebAssemblyInstance*, Wasm::SignatureIndex);
+ static WebAssemblyWrapperFunction* create(VM&, JSGlobalObject*, Structure*, JSObject*, unsigned importIndex, JSWebAssemblyInstance*, Wasm::SignatureIndex);
static Structure* createStructure(VM&, JSGlobalObject*, JSValue);
Wasm::SignatureIndex signatureIndex() const { return m_importableFunction.signatureIndex; }
Modified: trunk/Source/WebCore/ChangeLog (243050 => 243051)
--- trunk/Source/WebCore/ChangeLog 2019-03-17 03:50:46 UTC (rev 243050)
+++ trunk/Source/WebCore/ChangeLog 2019-03-17 07:45:55 UTC (rev 243051)
@@ -1,3 +1,15 @@
+2019-03-17 Yusuke Suzuki <[email protected]>
+
+ REGRESSION: !vm.isInitializingObject() void* JSC::tryAllocateCellHelper<JSC::Structure> JSC::Structure::create
+ https://bugs.webkit.org/show_bug.cgi?id=195858
+
+ Reviewed by Mark Lam.
+
+ Changed the accessor names.
+
+ * bindings/js/SerializedScriptValue.cpp:
+ (WebCore::CloneDeserializer::readTerminal):
+
2019-03-16 Darin Adler <[email protected]>
Improve normalization code, including moving from unorm.h to unorm2.h
Modified: trunk/Source/WebCore/bindings/js/SerializedScriptValue.cpp (243050 => 243051)
--- trunk/Source/WebCore/bindings/js/SerializedScriptValue.cpp 2019-03-17 03:50:46 UTC (rev 243050)
+++ trunk/Source/WebCore/bindings/js/SerializedScriptValue.cpp 2019-03-17 07:45:55 UTC (rev 243051)
@@ -2923,7 +2923,7 @@
return JSValue();
}
auto scope = DECLARE_THROW_SCOPE(m_exec->vm());
- JSValue result = JSC::JSWebAssemblyModule::createStub(m_exec->vm(), m_exec, m_globalObject->WebAssemblyModuleStructure(), m_wasmModules->at(index));
+ JSValue result = JSC::JSWebAssemblyModule::createStub(m_exec->vm(), m_exec, m_globalObject->webAssemblyModuleStructure(), m_wasmModules->at(index));
// Since we are cloning a JSWebAssemblyModule, it's impossible for that
// module to not have been a valid module. Therefore, createStub should
// not trow.