aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorGravatar Jarred Sumner <jarred@jarredsumner.com> 2022-05-08 01:12:13 -0700
committerGravatar Jarred Sumner <jarred@jarredsumner.com> 2022-05-08 01:12:13 -0700
commit97cceb47b9fb14fbf8cb45a28038934b6416e8ef (patch)
tree250c430effeff27b5d37070f7c647bd1bfd7477b
parent94637711b9f558576ffebe2f5dd834dc05a95f7b (diff)
downloadbun-97cceb47b9fb14fbf8cb45a28038934b6416e8ef.tar.gz
bun-97cceb47b9fb14fbf8cb45a28038934b6416e8ef.tar.zst
bun-97cceb47b9fb14fbf8cb45a28038934b6416e8ef.zip
Upgrade WebKit
-rw-r--r--docs/upgrading-webkit.md57
-rw-r--r--src/javascript/jsc/bindings/BunGCOutputConstraint.cpp2
-rw-r--r--src/javascript/jsc/bindings/BunStream.cpp22
-rw-r--r--src/javascript/jsc/bindings/DOMException.cpp3
-rw-r--r--src/javascript/jsc/bindings/IDLTypes.h30
-rw-r--r--src/javascript/jsc/bindings/JSBuffer.cpp50
-rw-r--r--src/javascript/jsc/bindings/JSBufferConstructorBuiltins.h4
-rw-r--r--src/javascript/jsc/bindings/JSBufferEncodingType.cpp40
-rw-r--r--src/javascript/jsc/bindings/JSBufferPrototypeBuiltins.h116
-rw-r--r--src/javascript/jsc/bindings/JSDOMExceptionHandling.cpp10
-rw-r--r--src/javascript/jsc/bindings/JSDOMGlobalObject.h4
-rw-r--r--src/javascript/jsc/bindings/JSFFIFunction.cpp2
-rw-r--r--src/javascript/jsc/bindings/Path.cpp24
-rw-r--r--src/javascript/jsc/bindings/Process.cpp100
-rw-r--r--src/javascript/jsc/bindings/URLDecomposition.cpp2
-rw-r--r--src/javascript/jsc/bindings/bindings.cpp70
-rw-r--r--src/javascript/jsc/bindings/headers-cpp.h2
-rw-r--r--src/javascript/jsc/bindings/headers.h2
-rw-r--r--src/javascript/jsc/bindings/helpers.h8
-rw-r--r--src/javascript/jsc/bindings/napi.cpp533
-rw-r--r--src/javascript/jsc/bindings/napi.h183
-rw-r--r--src/javascript/jsc/bindings/napi_external.cpp50
-rw-r--r--src/javascript/jsc/bindings/napi_external.h64
-rw-r--r--src/javascript/jsc/bindings/webcore/CommonAtomStrings.cpp52
-rw-r--r--src/javascript/jsc/bindings/webcore/CommonAtomStrings.h72
-rw-r--r--src/javascript/jsc/bindings/webcore/CustomEvent.h3
-rw-r--r--src/javascript/jsc/bindings/webcore/DOMClientIsoSubspaces.h1
-rw-r--r--src/javascript/jsc/bindings/webcore/DOMIsoSubspaces.h1
-rw-r--r--src/javascript/jsc/bindings/webcore/EventNames.cpp2
-rw-r--r--src/javascript/jsc/bindings/webcore/HTTPParsers.cpp144
-rw-r--r--src/javascript/jsc/bindings/webcore/HTTPParsers.h14
-rw-r--r--src/javascript/jsc/bindings/webcore/JSAbortAlgorithm.cpp7
-rw-r--r--src/javascript/jsc/bindings/webcore/JSAbortController.cpp6
-rw-r--r--src/javascript/jsc/bindings/webcore/JSAbortSignal.cpp6
-rw-r--r--src/javascript/jsc/bindings/webcore/JSAddEventListenerOptions.cpp27
-rw-r--r--src/javascript/jsc/bindings/webcore/JSCallbackData.cpp6
-rw-r--r--src/javascript/jsc/bindings/webcore/JSCustomEvent.cpp20
-rw-r--r--src/javascript/jsc/bindings/webcore/JSDOMCastThisValue.h2
-rw-r--r--src/javascript/jsc/bindings/webcore/JSDOMConstructor.h4
-rw-r--r--src/javascript/jsc/bindings/webcore/JSDOMConstructorNotCallable.h2
-rw-r--r--src/javascript/jsc/bindings/webcore/JSDOMConstructorNotConstructable.h2
-rw-r--r--src/javascript/jsc/bindings/webcore/JSDOMConvertBase.h6
-rw-r--r--src/javascript/jsc/bindings/webcore/JSDOMConvertBufferSource.h2
-rw-r--r--src/javascript/jsc/bindings/webcore/JSDOMConvertCallbacks.h7
-rw-r--r--src/javascript/jsc/bindings/webcore/JSDOMConvertDate.cpp2
-rw-r--r--src/javascript/jsc/bindings/webcore/JSDOMConvertNumbers.h8
-rw-r--r--src/javascript/jsc/bindings/webcore/JSDOMConvertPromise.h2
-rw-r--r--src/javascript/jsc/bindings/webcore/JSDOMConvertRecord.h4
-rw-r--r--src/javascript/jsc/bindings/webcore/JSDOMConvertScheduledAction.h3
-rw-r--r--src/javascript/jsc/bindings/webcore/JSDOMConvertStrings.cpp52
-rw-r--r--src/javascript/jsc/bindings/webcore/JSDOMConvertStrings.h90
-rw-r--r--src/javascript/jsc/bindings/webcore/JSDOMConvertXPathNSResolver.h2
-rw-r--r--src/javascript/jsc/bindings/webcore/JSDOMException.cpp6
-rw-r--r--src/javascript/jsc/bindings/webcore/JSDOMIterator.cpp6
-rw-r--r--src/javascript/jsc/bindings/webcore/JSDOMIterator.h12
-rw-r--r--src/javascript/jsc/bindings/webcore/JSDOMURL.cpp12
-rw-r--r--src/javascript/jsc/bindings/webcore/JSErrorCallback.cpp7
-rw-r--r--src/javascript/jsc/bindings/webcore/JSErrorEvent.cpp24
-rw-r--r--src/javascript/jsc/bindings/webcore/JSErrorHandler.cpp4
-rw-r--r--src/javascript/jsc/bindings/webcore/JSEvent.cpp10
-rw-r--r--src/javascript/jsc/bindings/webcore/JSEventCustom.h4
-rw-r--r--src/javascript/jsc/bindings/webcore/JSEventInit.cpp21
-rw-r--r--src/javascript/jsc/bindings/webcore/JSEventListener.cpp8
-rw-r--r--src/javascript/jsc/bindings/webcore/JSEventListenerOptions.cpp9
-rw-r--r--src/javascript/jsc/bindings/webcore/JSEventModifierInit.cpp22
-rw-r--r--src/javascript/jsc/bindings/webcore/JSEventTarget.cpp4
-rw-r--r--src/javascript/jsc/bindings/webcore/JSEventTargetCustom.cpp10
-rw-r--r--src/javascript/jsc/bindings/webcore/JSFetchHeaders.cpp6
-rw-r--r--src/javascript/jsc/bindings/webcore/JSURLSearchParams.cpp6
-rw-r--r--src/javascript/jsc/bindings/webcore/ParsedContentType.cpp17
-rw-r--r--src/javascript/jsc/bindings/webcore/ParsedContentType.h4
71 files changed, 1625 insertions, 494 deletions
diff --git a/docs/upgrading-webkit.md b/docs/upgrading-webkit.md
new file mode 100644
index 000000000..39b5c3efc
--- /dev/null
+++ b/docs/upgrading-webkit.md
@@ -0,0 +1,57 @@
+# Upgrading WebKit
+
+Bun uses [a fork](https://github.com/Jarred-Sumner/WebKit) of WebKit with a small number of changes.
+
+It's important to periodically update WebKit for many reasons:
+
+- Security
+- Performance
+- Compatibility
+- …and many more.
+
+To upgrade, first find the commit in **bun's WebKit fork** (not bun!) between when we last upgraded and now.
+
+```bash
+cd src/javascript/jsc/WebKit # In the WebKit directory! not bun
+git checkout $COMMIT
+```
+
+This is the main command to run:
+
+```bash
+git pull https://github.com/WebKit/WebKit.git main --no-rebase --allow-unrelated-histories -X theirs
+```
+
+Then, you will likely see some silly merge conflicts. Fix them and then run:
+
+```bash
+# You might have to run this multiple times.
+rm -rf WebKitBuild
+
+# Go to Bun's directory! Not WebKit.
+cd ../../../../
+make jsc-build-mac-compile
+```
+
+Make sure that JSC's CLI is able to load successfully. This verifies that the build is working.
+
+You know this worked when it printed help options. If it complains about symbols, crashes, or anything else that looks wrong, something is wrong.
+
+```bash
+src/javascript/jsc/WebKit/WebKitBuild/Release/bin/jsc --help
+```
+
+Then, clear out our bindings and regenerate the C++<>Zig headers:
+
+```bash
+make clean-bindings jsc-bindings-headers generate-builtins
+```
+
+Now update Bun's bindings wherever there are compiler errors:
+
+```bash
+# It will take awhile if you don't pass -j here
+make jsc-bindings-mac -j10
+```
+
+This is the hard part. It might involve digging through WebKit's commit history to figure out what changed and why. Fortunately, WebKit contributors write great commit messages.
diff --git a/src/javascript/jsc/bindings/BunGCOutputConstraint.cpp b/src/javascript/jsc/bindings/BunGCOutputConstraint.cpp
index 169aecad2..ec487edc9 100644
--- a/src/javascript/jsc/bindings/BunGCOutputConstraint.cpp
+++ b/src/javascript/jsc/bindings/BunGCOutputConstraint.cpp
@@ -170,7 +170,7 @@ void DOMGCOutputConstraint::executeImplImpl(Visitor& visitor)
auto func = [](Visitor& visitor, HeapCell* heapCell, HeapCell::Kind) {
SetRootMarkReasonScope rootScope(visitor, RootMarkReason::DOMGCOutput);
JSCell* cell = static_cast<JSCell*>(heapCell);
- cell->methodTable(visitor.vm())->visitOutputConstraints(cell, visitor);
+ cell->methodTable()->visitOutputConstraints(cell, visitor);
};
RefPtr<SharedTask<void(Visitor&)>> task = subspace.template forEachMarkedCellInParallel<Visitor>(func);
diff --git a/src/javascript/jsc/bindings/BunStream.cpp b/src/javascript/jsc/bindings/BunStream.cpp
index ee9dd3f50..2dbb53562 100644
--- a/src/javascript/jsc/bindings/BunStream.cpp
+++ b/src/javascript/jsc/bindings/BunStream.cpp
@@ -61,7 +61,7 @@ static WritableEvent getWritableEvent(const WTF::String& eventName)
// clang-format off
#define DEFINE_CALLBACK_FUNCTION_BODY(TypeName, ZigFunction) JSC::VM& vm = globalObject->vm(); \
- auto* thisObject = JSC::jsDynamicCast<TypeName*>(vm, callFrame->thisValue()); \
+ auto* thisObject = JSC::jsDynamicCast<TypeName*>( callFrame->thisValue()); \
auto scope = DECLARE_THROW_SCOPE(vm); \
if (!thisObject) \
return throwVMTypeError(globalObject, scope); \
@@ -127,7 +127,7 @@ static JSC_DEFINE_HOST_FUNCTION(Readable__on,
JSC::VM& vm = globalObject->vm();
auto scope = DECLARE_THROW_SCOPE(vm);
- auto thisObject = JSC::jsDynamicCast<WebCore::Readable*>(vm, callFrame->thisValue());
+ auto thisObject = JSC::jsDynamicCast<WebCore::Readable*>(callFrame->thisValue());
if (UNLIKELY(!thisObject)) {
scope.release();
JSC::throwVMTypeError(globalObject, scope);
@@ -149,7 +149,7 @@ static JSC_DEFINE_HOST_FUNCTION(Readable__on,
auto listener = callFrame->argument(1);
JSC::JSObject* object = listener.getObject();
- if (UNLIKELY(!object) || !listener.isCallable(vm)) {
+ if (UNLIKELY(!object) || !listener.isCallable()) {
scope.release();
return JSC::JSValue::encode(JSC::jsUndefined());
}
@@ -163,7 +163,7 @@ static JSC_DEFINE_HOST_FUNCTION(Readable__on,
extern "C" Bun__Readable* JSC__JSValue__getReadableStreamState(JSC__JSValue value, JSC__VM* vm)
{
- auto* thisObject = JSC::jsDynamicCast<WebCore::Readable*>(*vm, JSC::JSValue::decode(value));
+ auto* thisObject = JSC::jsDynamicCast<WebCore::Readable*>(JSC::JSValue::decode(value));
if (UNLIKELY(!thisObject)) {
return nullptr;
}
@@ -171,7 +171,7 @@ extern "C" Bun__Readable* JSC__JSValue__getReadableStreamState(JSC__JSValue valu
}
extern "C" Bun__Writable* JSC__JSValue__getWritableStreamState(JSC__JSValue value, JSC__VM* vm)
{
- auto* thisObject = JSC::jsDynamicCast<WebCore::Writable*>(*vm, JSC::JSValue::decode(value));
+ auto* thisObject = JSC::jsDynamicCast<WebCore::Writable*>(JSC::JSValue::decode(value));
if (UNLIKELY(!thisObject)) {
return nullptr;
}
@@ -194,7 +194,7 @@ static JSC_DEFINE_HOST_FUNCTION(Readable__once,
JSC::VM& vm = globalObject->vm();
auto scope = DECLARE_THROW_SCOPE(vm);
- auto thisObject = JSC::jsDynamicCast<WebCore::Readable*>(vm, callFrame->thisValue());
+ auto thisObject = JSC::jsDynamicCast<WebCore::Readable*>(callFrame->thisValue());
if (UNLIKELY(!thisObject)) {
scope.release();
JSC::throwVMTypeError(globalObject, scope);
@@ -216,7 +216,7 @@ static JSC_DEFINE_HOST_FUNCTION(Readable__once,
auto listener = callFrame->argument(1);
JSC::JSObject* object = listener.getObject();
- if (UNLIKELY(!object) || !listener.isCallable(vm)) {
+ if (UNLIKELY(!object) || !listener.isCallable()) {
scope.release();
return JSC::JSValue::encode(JSC::jsUndefined());
}
@@ -238,7 +238,7 @@ static JSC_DEFINE_HOST_FUNCTION(Writable__on,
JSC::VM& vm = globalObject->vm();
auto scope = DECLARE_THROW_SCOPE(vm);
- auto thisObject = JSC::jsDynamicCast<WebCore::Writable*>(vm, callFrame->thisValue());
+ auto thisObject = JSC::jsDynamicCast<WebCore::Writable*>(callFrame->thisValue());
if (UNLIKELY(!thisObject)) {
scope.release();
JSC::throwVMTypeError(globalObject, scope);
@@ -260,7 +260,7 @@ static JSC_DEFINE_HOST_FUNCTION(Writable__on,
auto listener = callFrame->argument(1);
JSC::JSObject* object = listener.getObject();
- if (UNLIKELY(!object) || !listener.isCallable(vm)) {
+ if (UNLIKELY(!object) || !listener.isCallable()) {
scope.release();
return JSC::JSValue::encode(JSC::jsUndefined());
}
@@ -282,7 +282,7 @@ static JSC_DEFINE_HOST_FUNCTION(Writable__once,
JSC::VM& vm = globalObject->vm();
auto scope = DECLARE_THROW_SCOPE(vm);
- auto thisObject = JSC::jsDynamicCast<WebCore::Writable*>(vm, callFrame->thisValue());
+ auto thisObject = JSC::jsDynamicCast<WebCore::Writable*>(callFrame->thisValue());
if (UNLIKELY(!thisObject)) {
scope.release();
JSC::throwVMTypeError(globalObject, scope);
@@ -304,7 +304,7 @@ static JSC_DEFINE_HOST_FUNCTION(Writable__once,
auto listener = callFrame->argument(1);
JSC::JSObject* object = listener.getObject();
- if (UNLIKELY(!object) || !listener.isCallable(vm)) {
+ if (UNLIKELY(!object) || !listener.isCallable()) {
scope.release();
return JSC::JSValue::encode(JSC::jsUndefined());
}
diff --git a/src/javascript/jsc/bindings/DOMException.cpp b/src/javascript/jsc/bindings/DOMException.cpp
index 232fb83fe..b3912124c 100644
--- a/src/javascript/jsc/bindings/DOMException.cpp
+++ b/src/javascript/jsc/bindings/DOMException.cpp
@@ -26,6 +26,7 @@
* THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
*/
+#include "root.h"
#include "DOMException.h"
#include "Exception.h"
@@ -76,7 +77,7 @@ auto DOMException::description(ExceptionCode ec) -> const Description&
if (ec < WTF_ARRAY_LENGTH(descriptions))
return descriptions[ec];
- static const Description emptyDescription { ASCIILiteral::null(), ASCIILiteral::null(), 0 };
+ static const Description emptyDescription { {}, {}, 0 };
return emptyDescription;
}
diff --git a/src/javascript/jsc/bindings/IDLTypes.h b/src/javascript/jsc/bindings/IDLTypes.h
index cadeea27e..96906331b 100644
--- a/src/javascript/jsc/bindings/IDLTypes.h
+++ b/src/javascript/jsc/bindings/IDLTypes.h
@@ -25,14 +25,15 @@
#pragma once
-#include "JavaScriptCore/HandleTypes.h"
-#include "JavaScriptCore/Strong.h"
#include "StringAdaptors.h"
-#include "wtf/Brigand.h"
-#include "wtf/StdLibExtras.h"
-#include "wtf/URL.h"
-#include "wtf/WallTime.h"
+#include <JavaScriptCore/HandleTypes.h>
+#include <JavaScriptCore/Strong.h>
#include <variant>
+#include <wtf/Brigand.h>
+#include <wtf/Markable.h>
+#include <wtf/StdLibExtras.h>
+#include <wtf/URL.h>
+#include <wtf/WallTime.h>
#if ENABLE(WEBGL)
#include "WebGLAny.h"
@@ -75,6 +76,14 @@ struct IDLType {
static NullableType nullValue() { return std::nullopt; }
static bool isNullValue(const NullableType& value) { return !value; }
static ImplementationType extractValueFromNullable(const NullableType& value) { return value.value(); }
+
+ template<typename Traits> using NullableTypeWithLessPadding = Markable<ImplementationType, Traits>;
+ template<typename Traits>
+ static NullableTypeWithLessPadding<Traits> nullValue() { return std::nullopt; }
+ template<typename Traits>
+ static bool isNullType(const NullableTypeWithLessPadding<Traits>& value) { return !value; }
+ template<typename Traits>
+ static ImplementationType extractValueFromNullable(const NullableTypeWithLessPadding<Traits>& value) { return value.value(); }
};
// IDLUnsupportedType is a special type that serves as a base class for currently unsupported types.
@@ -149,7 +158,8 @@ template<typename StringType> struct IDLString : IDLType<StringType> {
using NullableType = StringType;
static StringType nullValue() { return StringType(); }
- static bool isNullValue(const StringType& value) { return value.isNull(); }
+ static bool isNullValue(const String& value) { return value.isNull(); }
+ static bool isNullValue(const AtomString& value) { return value.isNull(); }
static bool isNullValue(const UncachedString& value) { return value.string.isNull(); }
static bool isNullValue(const OwnedString& value) { return value.string.isNull(); }
static bool isNullValue(const URL& value) { return value.isNull(); }
@@ -166,6 +176,10 @@ template<typename T> struct IDLLegacyNullToEmptyStringAdaptor : IDLString<String
using InnerType = T;
};
+template<typename T> struct IDLLegacyNullToEmptyAtomStringAdaptor : IDLString<AtomString> {
+ using InnerType = T;
+};
+
template<typename T> struct IDLAtomStringAdaptor : IDLString<AtomString> {
using InnerType = T;
};
@@ -400,4 +414,4 @@ template<typename T>
struct IsIDLArrayBufferViewAllowShared : public std::integral_constant<bool, std::is_base_of<IDLAllowSharedAdaptor<IDLArrayBufferView>, T>::value> {
};
-} // namespace WebCore
+} // namespace WebCore \ No newline at end of file
diff --git a/src/javascript/jsc/bindings/JSBuffer.cpp b/src/javascript/jsc/bindings/JSBuffer.cpp
index 347dec29a..e67e39f19 100644
--- a/src/javascript/jsc/bindings/JSBuffer.cpp
+++ b/src/javascript/jsc/bindings/JSBuffer.cpp
@@ -73,7 +73,7 @@ bool JSBuffer__isBuffer(JSC::JSGlobalObject* lexicalGlobalObject, JSC::EncodedJS
JSC::VM& vm = lexicalGlobalObject->vm();
auto clientData = WebCore::clientData(vm);
- auto* jsBuffer = JSC::jsDynamicCast<JSC::JSUint8Array*>(vm, JSC::JSValue::decode(value));
+ auto* jsBuffer = JSC::jsDynamicCast<JSC::JSUint8Array*>(JSC::JSValue::decode(value));
if (!jsBuffer)
return false;
@@ -114,7 +114,7 @@ public:
auto thisValue = callFrame.thisValue().toThis(&lexicalGlobalObject, JSC::ECMAMode::strict());
if (thisValue.isUndefinedOrNull()) {
- throwTypeError(&lexicalGlobalObject, throwScope, "Cannot convert undefined or null to object");
+ throwTypeError(&lexicalGlobalObject, throwScope, "Cannot convert undefined or null to object"_s);
return JSC::JSValue::encode(JSC::jsUndefined());
}
@@ -157,7 +157,7 @@ static inline JSC::JSUint8Array* JSBuffer__bufferFromLengthAsArray(JSC::JSGlobal
auto throwScope = DECLARE_THROW_SCOPE(lexicalGlobalObject->vm());
if (UNLIKELY(length < 0)) {
- throwRangeError(lexicalGlobalObject, throwScope, "Invalid array length");
+ throwRangeError(lexicalGlobalObject, throwScope, "Invalid array length"_s);
return nullptr;
}
@@ -250,7 +250,7 @@ static inline JSC::EncodedJSValue constructBufferFromStringAndEncoding(JSC::JSGl
if (callFrame->argumentCount() > 1) {
std::optional<BufferEncodingType> encoded = parseEnumeration<BufferEncodingType>(*lexicalGlobalObject, callFrame->argument(1));
if (!encoded) {
- throwTypeError(lexicalGlobalObject, scope, "Invalid encoding");
+ throwTypeError(lexicalGlobalObject, scope, "Invalid encoding"_s);
return JSC::JSValue::encode(jsUndefined());
}
@@ -336,7 +336,7 @@ static inline JSC::EncodedJSValue jsBufferConstructorFunction_allocBody(JSC::JSG
auto throwScope = DECLARE_THROW_SCOPE(vm);
auto length = callFrame->uncheckedArgument(0).toInt32(lexicalGlobalObject);
if (length < 0) {
- throwRangeError(lexicalGlobalObject, throwScope, "Invalid array length");
+ throwRangeError(lexicalGlobalObject, throwScope, "Invalid array length"_s);
return JSValue::encode(jsUndefined());
}
@@ -373,7 +373,7 @@ static inline JSC::EncodedJSValue jsBufferConstructorFunction_compareBody(JSC::J
}
auto buffer = callFrame->uncheckedArgument(0);
- JSC::JSUint8Array* view = JSC::jsDynamicCast<JSC::JSUint8Array*>(vm, buffer);
+ JSC::JSUint8Array* view = JSC::jsDynamicCast<JSC::JSUint8Array*>(buffer);
if (UNLIKELY(!view)) {
throwVMTypeError(lexicalGlobalObject, throwScope, "Expected Buffer"_s);
return JSValue::encode(jsUndefined());
@@ -460,7 +460,7 @@ static inline JSC::EncodedJSValue jsBufferConstructorFunction_concatBody(JSC::JS
}
auto arrayValue = callFrame->uncheckedArgument(0);
- auto array = JSC::jsDynamicCast<JSC::JSArray*>(vm, arrayValue);
+ auto array = JSC::jsDynamicCast<JSC::JSArray*>(arrayValue);
if (!array) {
throwTypeError(lexicalGlobalObject, throwScope, "Argument must be an array"_s);
return JSValue::encode(jsUndefined());
@@ -477,7 +477,7 @@ static inline JSC::EncodedJSValue jsBufferConstructorFunction_concatBody(JSC::JS
auto element = array->getIndex(lexicalGlobalObject, i);
RETURN_IF_EXCEPTION(throwScope, {});
- auto* typedArray = JSC::jsDynamicCast<JSC::JSUint8Array*>(vm, element);
+ auto* typedArray = JSC::jsDynamicCast<JSC::JSUint8Array*>(element);
if (!typedArray) {
throwTypeError(lexicalGlobalObject, throwScope, "Buffer.concat expects Uint8Array"_s);
return JSValue::encode(jsUndefined());
@@ -535,12 +535,12 @@ static inline JSC::EncodedJSValue jsBufferConstructorFunction_toBufferBody(JSC::
}
auto buffer = callFrame->uncheckedArgument(0);
- if (!buffer.isCell() || !JSC::isTypedView(buffer.asCell()->classInfo(vm)->typedArrayStorageType)) {
+ if (!buffer.isCell() || !JSC::isTypedView(buffer.asCell()->classInfo()->typedArrayStorageType)) {
throwVMTypeError(lexicalGlobalObject, throwScope, "Expected Uint8Array"_s);
return JSValue::encode(jsUndefined());
}
- JSC::JSUint8Array* view = JSC::jsDynamicCast<JSC::JSUint8Array*>(vm, buffer);
+ JSC::JSUint8Array* view = JSC::jsDynamicCast<JSC::JSUint8Array*>(buffer);
if (!view) {
throwVMTypeError(lexicalGlobalObject, throwScope, "Expected Uint8Array"_s);
@@ -591,7 +591,7 @@ static inline JSC::EncodedJSValue jsBufferPrototypeFunction_compareBody(JSC::JSG
return JSValue::encode(jsUndefined());
}
- JSC::JSUint8Array* view = JSC::jsDynamicCast<JSC::JSUint8Array*>(vm, callFrame->uncheckedArgument(0));
+ JSC::JSUint8Array* view = JSC::jsDynamicCast<JSC::JSUint8Array*>(callFrame->uncheckedArgument(0));
if (UNLIKELY(!view)) {
throwVMTypeError(lexicalGlobalObject, throwScope, "Expected Uint8Array"_s);
@@ -681,12 +681,12 @@ static inline JSC::EncodedJSValue jsBufferPrototypeFunction_copyBody(JSC::JSGlob
auto buffer = callFrame->uncheckedArgument(0);
- if (!buffer.isCell() || !JSC::isTypedView(buffer.asCell()->classInfo(vm)->typedArrayStorageType)) {
+ if (!buffer.isCell() || !JSC::isTypedView(buffer.asCell()->classInfo()->typedArrayStorageType)) {
throwVMTypeError(lexicalGlobalObject, throwScope, "Expected Uint8Array"_s);
return JSValue::encode(jsUndefined());
}
- JSC::JSUint8Array* view = JSC::jsDynamicCast<JSC::JSUint8Array*>(vm, buffer);
+ JSC::JSUint8Array* view = JSC::jsDynamicCast<JSC::JSUint8Array*>(buffer);
if (UNLIKELY(!view || view->isDetached())) {
throwVMTypeError(lexicalGlobalObject, throwScope, "Uint8Array is detached"_s);
return JSValue::encode(jsUndefined());
@@ -769,7 +769,7 @@ static inline JSC::EncodedJSValue jsBufferPrototypeFunction_equalsBody(JSC::JSGl
}
auto buffer = callFrame->uncheckedArgument(0);
- JSC::JSUint8Array* view = JSC::jsDynamicCast<JSC::JSUint8Array*>(vm, buffer);
+ JSC::JSUint8Array* view = JSC::jsDynamicCast<JSC::JSUint8Array*>(buffer);
if (UNLIKELY(!view)) {
throwVMTypeError(lexicalGlobalObject, throwScope, "Expected Buffer"_s);
return JSValue::encode(jsUndefined());
@@ -866,7 +866,7 @@ static inline JSC::EncodedJSValue jsBufferPrototypeFunction_fillBody(JSC::JSGlob
std::optional<BufferEncodingType> encoded = parseEnumeration<BufferEncodingType>(*lexicalGlobalObject, encoding_);
if (!encoded) {
- throwTypeError(lexicalGlobalObject, throwScope, "Invalid encoding");
+ throwTypeError(lexicalGlobalObject, throwScope, "Invalid encoding"_s);
return JSC::JSValue::encode(jsUndefined());
}
@@ -950,7 +950,7 @@ static inline JSC::EncodedJSValue jsBufferPrototypeFunction_toStringBody(JSC::JS
JSC::JSValue arg1 = callFrame->uncheckedArgument(0);
std::optional<BufferEncodingType> encoded = parseEnumeration<BufferEncodingType>(*lexicalGlobalObject, arg1);
if (!encoded) {
- throwTypeError(lexicalGlobalObject, scope, "Invalid encoding");
+ throwTypeError(lexicalGlobalObject, scope, "Invalid encoding"_s);
return JSC::JSValue::encode(jsUndefined());
}
@@ -963,7 +963,7 @@ static inline JSC::EncodedJSValue jsBufferPrototypeFunction_toStringBody(JSC::JS
JSC::JSValue arg2 = callFrame->uncheckedArgument(1);
int32_t ioffset = arg2.toInt32(lexicalGlobalObject);
if (ioffset < 0) {
- throwTypeError(lexicalGlobalObject, scope, "Offset must be a positive integer");
+ throwTypeError(lexicalGlobalObject, scope, "Offset must be a positive integer"_s);
return JSC::JSValue::encode(jsUndefined());
}
offset = static_cast<uint32_t>(ioffset);
@@ -1020,7 +1020,7 @@ static inline JSC::EncodedJSValue jsBufferPrototypeFunction_toStringBody(JSC::JS
break;
}
default: {
- throwTypeError(lexicalGlobalObject, scope, "Unsupported encoding? This shouldn't happen");
+ throwTypeError(lexicalGlobalObject, scope, "Unsupported encoding? This shouldn't happen"_s);
break;
}
}
@@ -1043,14 +1043,14 @@ static inline JSC::EncodedJSValue jsBufferPrototypeFunction_writeBody(JSC::JSGlo
auto scope = DECLARE_THROW_SCOPE(vm);
if (UNLIKELY(callFrame->argumentCount() == 0)) {
- throwTypeError(lexicalGlobalObject, scope, "Not enough arguments");
+ throwTypeError(lexicalGlobalObject, scope, "Not enough arguments"_s);
return JSC::JSValue::encode(jsUndefined());
}
EnsureStillAliveScope arg0 = callFrame->argument(0);
auto* str = arg0.value().toStringOrNull(lexicalGlobalObject);
if (!str) {
- throwTypeError(lexicalGlobalObject, scope, "write() expects a string");
+ throwTypeError(lexicalGlobalObject, scope, "write() expects a string"_s);
return JSC::JSValue::encode(jsUndefined());
}
@@ -1063,14 +1063,14 @@ static inline JSC::EncodedJSValue jsBufferPrototypeFunction_writeBody(JSC::JSGlo
if (arg1.value().isAnyInt()) {
int32_t ioffset = arg1.value().toInt32(lexicalGlobalObject);
if (ioffset < 0) {
- throwTypeError(lexicalGlobalObject, scope, "Offset must be a positive integer");
+ throwTypeError(lexicalGlobalObject, scope, "Offset must be a positive integer"_s);
return JSC::JSValue::encode(jsUndefined());
}
offset = static_cast<uint32_t>(ioffset);
} else if (arg1.value().isString()) {
std::optional<BufferEncodingType> encoded = parseEnumeration<BufferEncodingType>(*lexicalGlobalObject, arg1.value());
if (!encoded) {
- throwTypeError(lexicalGlobalObject, scope, "Invalid encoding");
+ throwTypeError(lexicalGlobalObject, scope, "Invalid encoding"_s);
return JSC::JSValue::encode(jsUndefined());
}
@@ -1091,7 +1091,7 @@ static inline JSC::EncodedJSValue jsBufferPrototypeFunction_writeBody(JSC::JSGlo
if (callFrame->argumentCount() > 2) {
std::optional<BufferEncodingType> encoded = parseEnumeration<BufferEncodingType>(*lexicalGlobalObject, callFrame->argument(3));
if (!encoded) {
- throwTypeError(lexicalGlobalObject, scope, "Invalid encoding");
+ throwTypeError(lexicalGlobalObject, scope, "Invalid encoding"_s);
return JSC::JSValue::encode(jsUndefined());
}
@@ -1464,7 +1464,7 @@ JSBuffer::JSBuffer(Structure* structure, JSDOMGlobalObject& globalObject, Ref<Bu
void JSBuffer::finishCreation(VM& vm)
{
Base::finishCreation(vm);
- ASSERT(inherits(vm, info()));
+ ASSERT(inherits(info()));
// static_assert(!std::is_base_of<ActiveDOMObject, DOMURL>::value, "Interface is not marked as [ActiveDOMObject] even though implementation class subclasses ActiveDOMObject.");
}
@@ -1540,7 +1540,7 @@ JSC::JSValue toJS(JSC::JSGlobalObject* lexicalGlobalObject, JSDOMGlobalObject* g
Buffer* JSBuffer::toWrapped(JSC::VM& vm, JSC::JSValue value)
{
- if (auto* wrapper = jsDynamicCast<JSBuffer*>(vm, value))
+ if (auto* wrapper = jsDynamicCast<JSBuffer*>(value))
return &wrapper->wrapped();
return nullptr;
}
diff --git a/src/javascript/jsc/bindings/JSBufferConstructorBuiltins.h b/src/javascript/jsc/bindings/JSBufferConstructorBuiltins.h
index f071164d5..6b9ee6fa2 100644
--- a/src/javascript/jsc/bindings/JSBufferConstructorBuiltins.h
+++ b/src/javascript/jsc/bindings/JSBufferConstructorBuiltins.h
@@ -54,7 +54,7 @@ extern const JSC::ConstructorKind s_jsBufferConstructorFromCodeConstructorKind;
#define WEBCORE_BUILTIN_JSBUFFERCONSTRUCTOR_FROM 1
#define WEBCORE_FOREACH_JSBUFFERCONSTRUCTOR_BUILTIN_CODE(macro) \
- macro(jsBufferConstructorFromCode, from, static_cast<const char*>(nullptr), s_jsBufferConstructorFromCodeLength) \
+ macro(jsBufferConstructorFromCode, from, ASCIILiteral(), s_jsBufferConstructorFromCodeLength) \
#define WEBCORE_FOREACH_JSBUFFERCONSTRUCTOR_BUILTIN_FUNCTION_NAME(macro) \
macro(from) \
@@ -70,7 +70,7 @@ public:
explicit JSBufferConstructorBuiltinsWrapper(JSC::VM& vm)
: m_vm(vm)
WEBCORE_FOREACH_JSBUFFERCONSTRUCTOR_BUILTIN_FUNCTION_NAME(INITIALIZE_BUILTIN_NAMES)
-#define INITIALIZE_BUILTIN_SOURCE_MEMBERS(name, functionName, overriddenName, length) , m_##name##Source(JSC::makeSource(StringImpl::createFromLiteral(s_##name, length), { }))
+#define INITIALIZE_BUILTIN_SOURCE_MEMBERS(name, functionName, overriddenName, length) , m_##name##Source(JSC::makeSource(StringImpl::createWithoutCopying(s_##name, length), { }))
WEBCORE_FOREACH_JSBUFFERCONSTRUCTOR_BUILTIN_CODE(INITIALIZE_BUILTIN_SOURCE_MEMBERS)
#undef INITIALIZE_BUILTIN_SOURCE_MEMBERS
{
diff --git a/src/javascript/jsc/bindings/JSBufferEncodingType.cpp b/src/javascript/jsc/bindings/JSBufferEncodingType.cpp
index 5d972a419..d88429d48 100644
--- a/src/javascript/jsc/bindings/JSBufferEncodingType.cpp
+++ b/src/javascript/jsc/bindings/JSBufferEncodingType.cpp
@@ -72,7 +72,7 @@ template<> std::optional<BufferEncodingType> parseEnumeration<BufferEncodingType
const size_t skip = encoding[3] == '-' ? 4 : 3;
if (encoding[skip] == '8' && encoding[skip + 1] == '\0')
return BufferEncodingType::utf8;
- if (WTF::equalIgnoringASCIICase(encoding.substringSharingImpl(skip, 5), "16le"))
+ if (WTF::equalIgnoringASCIICase(encoding.substringSharingImpl(skip, 5), "16le"_s))
return BufferEncodingType::ucs2;
// ucs2
} else if (encoding[1] == 'c' && encoding[2] == 's') {
@@ -80,17 +80,17 @@ template<> std::optional<BufferEncodingType> parseEnumeration<BufferEncodingType
if (encoding[skip] == '2' && encoding[skip + 1] == '\0')
return BufferEncodingType::ucs2;
}
- if (WTF::equalIgnoringASCIICase(encoding, "utf8"))
+ if (WTF::equalIgnoringASCIICase(encoding, "utf8"_s))
return BufferEncodingType::utf8;
- if (WTF::equalIgnoringASCIICase(encoding, "utf-8"))
+ if (WTF::equalIgnoringASCIICase(encoding, "utf-8"_s))
return BufferEncodingType::utf8;
- if (WTF::equalIgnoringASCIICase(encoding, "ucs2"))
+ if (WTF::equalIgnoringASCIICase(encoding, "ucs2"_s))
return BufferEncodingType::ucs2;
- if (WTF::equalIgnoringASCIICase(encoding, "ucs-2"))
+ if (WTF::equalIgnoringASCIICase(encoding, "ucs-2"_s))
return BufferEncodingType::ucs2;
- if (WTF::equalIgnoringASCIICase(encoding, "utf16le"))
+ if (WTF::equalIgnoringASCIICase(encoding, "utf16le"_s))
return BufferEncodingType::ucs2;
- if (WTF::equalIgnoringASCIICase(encoding, "utf-16le"))
+ if (WTF::equalIgnoringASCIICase(encoding, "utf-16le"_s))
return BufferEncodingType::ucs2;
break;
@@ -98,10 +98,10 @@ template<> std::optional<BufferEncodingType> parseEnumeration<BufferEncodingType
case 'L':
// latin1
if (encoding[1] == 'a') {
- if (WTF::equalIgnoringASCIICase(encoding.substringSharingImpl(2, 4), "tin1"))
+ if (WTF::equalIgnoringASCIICase(encoding.substringSharingImpl(2, 4), "tin1"_s))
return BufferEncodingType::latin1;
}
- if (WTF::equalIgnoringASCIICase(encoding, "latin1"))
+ if (WTF::equalIgnoringASCIICase(encoding, "latin1"_s))
return BufferEncodingType::latin1;
break;
@@ -109,26 +109,26 @@ template<> std::optional<BufferEncodingType> parseEnumeration<BufferEncodingType
case 'B':
// binary is a deprecated alias of latin1
if (encoding[1] == 'i') {
- if (WTF::equalIgnoringASCIICase(encoding.substringSharingImpl(2, 5), "nary"))
+ if (WTF::equalIgnoringASCIICase(encoding.substringSharingImpl(2, 5), "nary"_s))
return BufferEncodingType::latin1;
// buffer
} else if (encoding[1] == 'u') {
- if (WTF::equalIgnoringASCIICase(encoding.substringSharingImpl(2, 5), "ffer"))
+ if (WTF::equalIgnoringASCIICase(encoding.substringSharingImpl(2, 5), "ffer"_s))
return BufferEncodingType::buffer;
// base64
} else if (encoding[1] == 'a') {
- if (WTF::equalIgnoringASCIICase(encoding.substringSharingImpl(2, 5), "se64"))
+ if (WTF::equalIgnoringASCIICase(encoding.substringSharingImpl(2, 5), "se64"_s))
return BufferEncodingType::base64;
- if (WTF::equalIgnoringASCIICase(encoding.substringSharingImpl(2, 8), "se64url"))
+ if (WTF::equalIgnoringASCIICase(encoding.substringSharingImpl(2, 8), "se64url"_s))
return BufferEncodingType::base64url;
}
- if (WTF::equalIgnoringASCIICase(encoding, "binary"))
+ if (WTF::equalIgnoringASCIICase(encoding, "binary"_s))
return BufferEncodingType::latin1; // BINARY is a deprecated alias of LATIN1.
- if (WTF::equalIgnoringASCIICase(encoding, "buffer"))
+ if (WTF::equalIgnoringASCIICase(encoding, "buffer"_s))
return BufferEncodingType::buffer;
- if (WTF::equalIgnoringASCIICase(encoding, "base64"))
+ if (WTF::equalIgnoringASCIICase(encoding, "base64"_s))
return BufferEncodingType::base64;
- if (WTF::equalIgnoringASCIICase(encoding, "base64url"))
+ if (WTF::equalIgnoringASCIICase(encoding, "base64url"_s))
return BufferEncodingType::base64url;
break;
@@ -136,10 +136,10 @@ template<> std::optional<BufferEncodingType> parseEnumeration<BufferEncodingType
case 'A':
// ascii
if (encoding[1] == 's') {
- if (WTF::equalIgnoringASCIICase(encoding.substringSharingImpl(2, 3), "cii"))
+ if (WTF::equalIgnoringASCIICase(encoding.substringSharingImpl(2, 3), "cii"_s))
return BufferEncodingType::ascii;
}
- if (WTF::equalIgnoringASCIICase(encoding, "ascii"))
+ if (WTF::equalIgnoringASCIICase(encoding, "ascii"_s))
return BufferEncodingType::ascii;
break;
@@ -149,7 +149,7 @@ template<> std::optional<BufferEncodingType> parseEnumeration<BufferEncodingType
if (encoding[1] == 'e')
if (encoding[2] == 'x' && encoding[3] == '\0')
return BufferEncodingType::hex;
- if (WTF::equalIgnoringASCIICase(encoding, "hex"))
+ if (WTF::equalIgnoringASCIICase(encoding, "hex"_s))
return BufferEncodingType::hex;
break;
}
diff --git a/src/javascript/jsc/bindings/JSBufferPrototypeBuiltins.h b/src/javascript/jsc/bindings/JSBufferPrototypeBuiltins.h
index beff50d66..08fb50197 100644
--- a/src/javascript/jsc/bindings/JSBufferPrototypeBuiltins.h
+++ b/src/javascript/jsc/bindings/JSBufferPrototypeBuiltins.h
@@ -390,63 +390,63 @@ extern const JSC::ConstructorKind s_jsBufferPrototypeInitializeBunBufferCodeCons
#define WEBCORE_BUILTIN_JSBUFFERPROTOTYPE_INITIALIZEBUNBUFFER 1
#define WEBCORE_FOREACH_JSBUFFERPROTOTYPE_BUILTIN_CODE(macro) \
- macro(jsBufferPrototypeSetBigUint64Code, setBigUint64, static_cast<const char*>(nullptr), s_jsBufferPrototypeSetBigUint64CodeLength) \
- macro(jsBufferPrototypeReadInt8Code, readInt8, static_cast<const char*>(nullptr), s_jsBufferPrototypeReadInt8CodeLength) \
- macro(jsBufferPrototypeReadUInt8Code, readUInt8, static_cast<const char*>(nullptr), s_jsBufferPrototypeReadUInt8CodeLength) \
- macro(jsBufferPrototypeReadInt16LECode, readInt16LE, static_cast<const char*>(nullptr), s_jsBufferPrototypeReadInt16LECodeLength) \
- macro(jsBufferPrototypeReadInt16BECode, readInt16BE, static_cast<const char*>(nullptr), s_jsBufferPrototypeReadInt16BECodeLength) \
- macro(jsBufferPrototypeReadUInt16LECode, readUInt16LE, static_cast<const char*>(nullptr), s_jsBufferPrototypeReadUInt16LECodeLength) \
- macro(jsBufferPrototypeReadUInt16BECode, readUInt16BE, static_cast<const char*>(nullptr), s_jsBufferPrototypeReadUInt16BECodeLength) \
- macro(jsBufferPrototypeReadInt32LECode, readInt32LE, static_cast<const char*>(nullptr), s_jsBufferPrototypeReadInt32LECodeLength) \
- macro(jsBufferPrototypeReadInt32BECode, readInt32BE, static_cast<const char*>(nullptr), s_jsBufferPrototypeReadInt32BECodeLength) \
- macro(jsBufferPrototypeReadUInt32LECode, readUInt32LE, static_cast<const char*>(nullptr), s_jsBufferPrototypeReadUInt32LECodeLength) \
- macro(jsBufferPrototypeReadUInt32BECode, readUInt32BE, static_cast<const char*>(nullptr), s_jsBufferPrototypeReadUInt32BECodeLength) \
- macro(jsBufferPrototypeReadFloatLECode, readFloatLE, static_cast<const char*>(nullptr), s_jsBufferPrototypeReadFloatLECodeLength) \
- macro(jsBufferPrototypeReadFloatBECode, readFloatBE, static_cast<const char*>(nullptr), s_jsBufferPrototypeReadFloatBECodeLength) \
- macro(jsBufferPrototypeReadDoubleLECode, readDoubleLE, static_cast<const char*>(nullptr), s_jsBufferPrototypeReadDoubleLECodeLength) \
- macro(jsBufferPrototypeReadDoubleBECode, readDoubleBE, static_cast<const char*>(nullptr), s_jsBufferPrototypeReadDoubleBECodeLength) \
- macro(jsBufferPrototypeReadBigInt64LECode, readBigInt64LE, static_cast<const char*>(nullptr), s_jsBufferPrototypeReadBigInt64LECodeLength) \
- macro(jsBufferPrototypeReadBigInt64BECode, readBigInt64BE, static_cast<const char*>(nullptr), s_jsBufferPrototypeReadBigInt64BECodeLength) \
- macro(jsBufferPrototypeReadBigUInt64LECode, readBigUInt64LE, static_cast<const char*>(nullptr), s_jsBufferPrototypeReadBigUInt64LECodeLength) \
- macro(jsBufferPrototypeReadBigUInt64BECode, readBigUInt64BE, static_cast<const char*>(nullptr), s_jsBufferPrototypeReadBigUInt64BECodeLength) \
- macro(jsBufferPrototypeWriteInt8Code, writeInt8, static_cast<const char*>(nullptr), s_jsBufferPrototypeWriteInt8CodeLength) \
- macro(jsBufferPrototypeWriteUInt8Code, writeUInt8, static_cast<const char*>(nullptr), s_jsBufferPrototypeWriteUInt8CodeLength) \
- macro(jsBufferPrototypeWriteInt16LECode, writeInt16LE, static_cast<const char*>(nullptr), s_jsBufferPrototypeWriteInt16LECodeLength) \
- macro(jsBufferPrototypeWriteInt16BECode, writeInt16BE, static_cast<const char*>(nullptr), s_jsBufferPrototypeWriteInt16BECodeLength) \
- macro(jsBufferPrototypeWriteUInt16LECode, writeUInt16LE, static_cast<const char*>(nullptr), s_jsBufferPrototypeWriteUInt16LECodeLength) \
- macro(jsBufferPrototypeWriteUInt16BECode, writeUInt16BE, static_cast<const char*>(nullptr), s_jsBufferPrototypeWriteUInt16BECodeLength) \
- macro(jsBufferPrototypeWriteInt32LECode, writeInt32LE, static_cast<const char*>(nullptr), s_jsBufferPrototypeWriteInt32LECodeLength) \
- macro(jsBufferPrototypeWriteInt32BECode, writeInt32BE, static_cast<const char*>(nullptr), s_jsBufferPrototypeWriteInt32BECodeLength) \
- macro(jsBufferPrototypeWriteUInt32LECode, writeUInt32LE, static_cast<const char*>(nullptr), s_jsBufferPrototypeWriteUInt32LECodeLength) \
- macro(jsBufferPrototypeWriteUInt32BECode, writeUInt32BE, static_cast<const char*>(nullptr), s_jsBufferPrototypeWriteUInt32BECodeLength) \
- macro(jsBufferPrototypeWriteFloatLECode, writeFloatLE, static_cast<const char*>(nullptr), s_jsBufferPrototypeWriteFloatLECodeLength) \
- macro(jsBufferPrototypeWriteFloatBECode, writeFloatBE, static_cast<const char*>(nullptr), s_jsBufferPrototypeWriteFloatBECodeLength) \
- macro(jsBufferPrototypeWriteDoubleLECode, writeDoubleLE, static_cast<const char*>(nullptr), s_jsBufferPrototypeWriteDoubleLECodeLength) \
- macro(jsBufferPrototypeWriteDoubleBECode, writeDoubleBE, static_cast<const char*>(nullptr), s_jsBufferPrototypeWriteDoubleBECodeLength) \
- macro(jsBufferPrototypeWriteBigInt64LECode, writeBigInt64LE, static_cast<const char*>(nullptr), s_jsBufferPrototypeWriteBigInt64LECodeLength) \
- macro(jsBufferPrototypeWriteBigInt64BECode, writeBigInt64BE, static_cast<const char*>(nullptr), s_jsBufferPrototypeWriteBigInt64BECodeLength) \
- macro(jsBufferPrototypeWriteBigUInt64LECode, writeBigUInt64LE, static_cast<const char*>(nullptr), s_jsBufferPrototypeWriteBigUInt64LECodeLength) \
- macro(jsBufferPrototypeWriteBigUInt64BECode, writeBigUInt64BE, static_cast<const char*>(nullptr), s_jsBufferPrototypeWriteBigUInt64BECodeLength) \
- macro(jsBufferPrototypeSliceCode, slice, static_cast<const char*>(nullptr), s_jsBufferPrototypeSliceCodeLength) \
- macro(jsBufferPrototypeUtf8WriteCode, utf8Write, static_cast<const char*>(nullptr), s_jsBufferPrototypeUtf8WriteCodeLength) \
- macro(jsBufferPrototypeUcs2WriteCode, ucs2Write, static_cast<const char*>(nullptr), s_jsBufferPrototypeUcs2WriteCodeLength) \
- macro(jsBufferPrototypeUtf16leWriteCode, utf16leWrite, static_cast<const char*>(nullptr), s_jsBufferPrototypeUtf16leWriteCodeLength) \
- macro(jsBufferPrototypeLatin1WriteCode, latin1Write, static_cast<const char*>(nullptr), s_jsBufferPrototypeLatin1WriteCodeLength) \
- macro(jsBufferPrototypeAsciiWriteCode, asciiWrite, static_cast<const char*>(nullptr), s_jsBufferPrototypeAsciiWriteCodeLength) \
- macro(jsBufferPrototypeBase64WriteCode, base64Write, static_cast<const char*>(nullptr), s_jsBufferPrototypeBase64WriteCodeLength) \
- macro(jsBufferPrototypeBase64urlWriteCode, base64urlWrite, static_cast<const char*>(nullptr), s_jsBufferPrototypeBase64urlWriteCodeLength) \
- macro(jsBufferPrototypeHexWriteCode, hexWrite, static_cast<const char*>(nullptr), s_jsBufferPrototypeHexWriteCodeLength) \
- macro(jsBufferPrototypeUtf8SliceCode, utf8Slice, static_cast<const char*>(nullptr), s_jsBufferPrototypeUtf8SliceCodeLength) \
- macro(jsBufferPrototypeUcs2SliceCode, ucs2Slice, static_cast<const char*>(nullptr), s_jsBufferPrototypeUcs2SliceCodeLength) \
- macro(jsBufferPrototypeUtf16leSliceCode, utf16leSlice, static_cast<const char*>(nullptr), s_jsBufferPrototypeUtf16leSliceCodeLength) \
- macro(jsBufferPrototypeLatin1SliceCode, latin1Slice, static_cast<const char*>(nullptr), s_jsBufferPrototypeLatin1SliceCodeLength) \
- macro(jsBufferPrototypeAsciiSliceCode, asciiSlice, static_cast<const char*>(nullptr), s_jsBufferPrototypeAsciiSliceCodeLength) \
- macro(jsBufferPrototypeBase64SliceCode, base64Slice, static_cast<const char*>(nullptr), s_jsBufferPrototypeBase64SliceCodeLength) \
- macro(jsBufferPrototypeBase64urlSliceCode, base64urlSlice, static_cast<const char*>(nullptr), s_jsBufferPrototypeBase64urlSliceCodeLength) \
- macro(jsBufferPrototypeHexSliceCode, hexSlice, static_cast<const char*>(nullptr), s_jsBufferPrototypeHexSliceCodeLength) \
- macro(jsBufferPrototypeToJSONCode, toJSON, static_cast<const char*>(nullptr), s_jsBufferPrototypeToJSONCodeLength) \
- macro(jsBufferPrototypeSubarrayCode, subarray, static_cast<const char*>(nullptr), s_jsBufferPrototypeSubarrayCodeLength) \
- macro(jsBufferPrototypeInitializeBunBufferCode, initializeBunBuffer, static_cast<const char*>(nullptr), s_jsBufferPrototypeInitializeBunBufferCodeLength) \
+ macro(jsBufferPrototypeSetBigUint64Code, setBigUint64, ASCIILiteral(), s_jsBufferPrototypeSetBigUint64CodeLength) \
+ macro(jsBufferPrototypeReadInt8Code, readInt8, ASCIILiteral(), s_jsBufferPrototypeReadInt8CodeLength) \
+ macro(jsBufferPrototypeReadUInt8Code, readUInt8, ASCIILiteral(), s_jsBufferPrototypeReadUInt8CodeLength) \
+ macro(jsBufferPrototypeReadInt16LECode, readInt16LE, ASCIILiteral(), s_jsBufferPrototypeReadInt16LECodeLength) \
+ macro(jsBufferPrototypeReadInt16BECode, readInt16BE, ASCIILiteral(), s_jsBufferPrototypeReadInt16BECodeLength) \
+ macro(jsBufferPrototypeReadUInt16LECode, readUInt16LE, ASCIILiteral(), s_jsBufferPrototypeReadUInt16LECodeLength) \
+ macro(jsBufferPrototypeReadUInt16BECode, readUInt16BE, ASCIILiteral(), s_jsBufferPrototypeReadUInt16BECodeLength) \
+ macro(jsBufferPrototypeReadInt32LECode, readInt32LE, ASCIILiteral(), s_jsBufferPrototypeReadInt32LECodeLength) \
+ macro(jsBufferPrototypeReadInt32BECode, readInt32BE, ASCIILiteral(), s_jsBufferPrototypeReadInt32BECodeLength) \
+ macro(jsBufferPrototypeReadUInt32LECode, readUInt32LE, ASCIILiteral(), s_jsBufferPrototypeReadUInt32LECodeLength) \
+ macro(jsBufferPrototypeReadUInt32BECode, readUInt32BE, ASCIILiteral(), s_jsBufferPrototypeReadUInt32BECodeLength) \
+ macro(jsBufferPrototypeReadFloatLECode, readFloatLE, ASCIILiteral(), s_jsBufferPrototypeReadFloatLECodeLength) \
+ macro(jsBufferPrototypeReadFloatBECode, readFloatBE, ASCIILiteral(), s_jsBufferPrototypeReadFloatBECodeLength) \
+ macro(jsBufferPrototypeReadDoubleLECode, readDoubleLE, ASCIILiteral(), s_jsBufferPrototypeReadDoubleLECodeLength) \
+ macro(jsBufferPrototypeReadDoubleBECode, readDoubleBE, ASCIILiteral(), s_jsBufferPrototypeReadDoubleBECodeLength) \
+ macro(jsBufferPrototypeReadBigInt64LECode, readBigInt64LE, ASCIILiteral(), s_jsBufferPrototypeReadBigInt64LECodeLength) \
+ macro(jsBufferPrototypeReadBigInt64BECode, readBigInt64BE, ASCIILiteral(), s_jsBufferPrototypeReadBigInt64BECodeLength) \
+ macro(jsBufferPrototypeReadBigUInt64LECode, readBigUInt64LE, ASCIILiteral(), s_jsBufferPrototypeReadBigUInt64LECodeLength) \
+ macro(jsBufferPrototypeReadBigUInt64BECode, readBigUInt64BE, ASCIILiteral(), s_jsBufferPrototypeReadBigUInt64BECodeLength) \
+ macro(jsBufferPrototypeWriteInt8Code, writeInt8, ASCIILiteral(), s_jsBufferPrototypeWriteInt8CodeLength) \
+ macro(jsBufferPrototypeWriteUInt8Code, writeUInt8, ASCIILiteral(), s_jsBufferPrototypeWriteUInt8CodeLength) \
+ macro(jsBufferPrototypeWriteInt16LECode, writeInt16LE, ASCIILiteral(), s_jsBufferPrototypeWriteInt16LECodeLength) \
+ macro(jsBufferPrototypeWriteInt16BECode, writeInt16BE, ASCIILiteral(), s_jsBufferPrototypeWriteInt16BECodeLength) \
+ macro(jsBufferPrototypeWriteUInt16LECode, writeUInt16LE, ASCIILiteral(), s_jsBufferPrototypeWriteUInt16LECodeLength) \
+ macro(jsBufferPrototypeWriteUInt16BECode, writeUInt16BE, ASCIILiteral(), s_jsBufferPrototypeWriteUInt16BECodeLength) \
+ macro(jsBufferPrototypeWriteInt32LECode, writeInt32LE, ASCIILiteral(), s_jsBufferPrototypeWriteInt32LECodeLength) \
+ macro(jsBufferPrototypeWriteInt32BECode, writeInt32BE, ASCIILiteral(), s_jsBufferPrototypeWriteInt32BECodeLength) \
+ macro(jsBufferPrototypeWriteUInt32LECode, writeUInt32LE, ASCIILiteral(), s_jsBufferPrototypeWriteUInt32LECodeLength) \
+ macro(jsBufferPrototypeWriteUInt32BECode, writeUInt32BE, ASCIILiteral(), s_jsBufferPrototypeWriteUInt32BECodeLength) \
+ macro(jsBufferPrototypeWriteFloatLECode, writeFloatLE, ASCIILiteral(), s_jsBufferPrototypeWriteFloatLECodeLength) \
+ macro(jsBufferPrototypeWriteFloatBECode, writeFloatBE, ASCIILiteral(), s_jsBufferPrototypeWriteFloatBECodeLength) \
+ macro(jsBufferPrototypeWriteDoubleLECode, writeDoubleLE, ASCIILiteral(), s_jsBufferPrototypeWriteDoubleLECodeLength) \
+ macro(jsBufferPrototypeWriteDoubleBECode, writeDoubleBE, ASCIILiteral(), s_jsBufferPrototypeWriteDoubleBECodeLength) \
+ macro(jsBufferPrototypeWriteBigInt64LECode, writeBigInt64LE, ASCIILiteral(), s_jsBufferPrototypeWriteBigInt64LECodeLength) \
+ macro(jsBufferPrototypeWriteBigInt64BECode, writeBigInt64BE, ASCIILiteral(), s_jsBufferPrototypeWriteBigInt64BECodeLength) \
+ macro(jsBufferPrototypeWriteBigUInt64LECode, writeBigUInt64LE, ASCIILiteral(), s_jsBufferPrototypeWriteBigUInt64LECodeLength) \
+ macro(jsBufferPrototypeWriteBigUInt64BECode, writeBigUInt64BE, ASCIILiteral(), s_jsBufferPrototypeWriteBigUInt64BECodeLength) \
+ macro(jsBufferPrototypeSliceCode, slice, ASCIILiteral(), s_jsBufferPrototypeSliceCodeLength) \
+ macro(jsBufferPrototypeUtf8WriteCode, utf8Write, ASCIILiteral(), s_jsBufferPrototypeUtf8WriteCodeLength) \
+ macro(jsBufferPrototypeUcs2WriteCode, ucs2Write, ASCIILiteral(), s_jsBufferPrototypeUcs2WriteCodeLength) \
+ macro(jsBufferPrototypeUtf16leWriteCode, utf16leWrite, ASCIILiteral(), s_jsBufferPrototypeUtf16leWriteCodeLength) \
+ macro(jsBufferPrototypeLatin1WriteCode, latin1Write, ASCIILiteral(), s_jsBufferPrototypeLatin1WriteCodeLength) \
+ macro(jsBufferPrototypeAsciiWriteCode, asciiWrite, ASCIILiteral(), s_jsBufferPrototypeAsciiWriteCodeLength) \
+ macro(jsBufferPrototypeBase64WriteCode, base64Write, ASCIILiteral(), s_jsBufferPrototypeBase64WriteCodeLength) \
+ macro(jsBufferPrototypeBase64urlWriteCode, base64urlWrite, ASCIILiteral(), s_jsBufferPrototypeBase64urlWriteCodeLength) \
+ macro(jsBufferPrototypeHexWriteCode, hexWrite, ASCIILiteral(), s_jsBufferPrototypeHexWriteCodeLength) \
+ macro(jsBufferPrototypeUtf8SliceCode, utf8Slice, ASCIILiteral(), s_jsBufferPrototypeUtf8SliceCodeLength) \
+ macro(jsBufferPrototypeUcs2SliceCode, ucs2Slice, ASCIILiteral(), s_jsBufferPrototypeUcs2SliceCodeLength) \
+ macro(jsBufferPrototypeUtf16leSliceCode, utf16leSlice, ASCIILiteral(), s_jsBufferPrototypeUtf16leSliceCodeLength) \
+ macro(jsBufferPrototypeLatin1SliceCode, latin1Slice, ASCIILiteral(), s_jsBufferPrototypeLatin1SliceCodeLength) \
+ macro(jsBufferPrototypeAsciiSliceCode, asciiSlice, ASCIILiteral(), s_jsBufferPrototypeAsciiSliceCodeLength) \
+ macro(jsBufferPrototypeBase64SliceCode, base64Slice, ASCIILiteral(), s_jsBufferPrototypeBase64SliceCodeLength) \
+ macro(jsBufferPrototypeBase64urlSliceCode, base64urlSlice, ASCIILiteral(), s_jsBufferPrototypeBase64urlSliceCodeLength) \
+ macro(jsBufferPrototypeHexSliceCode, hexSlice, ASCIILiteral(), s_jsBufferPrototypeHexSliceCodeLength) \
+ macro(jsBufferPrototypeToJSONCode, toJSON, ASCIILiteral(), s_jsBufferPrototypeToJSONCodeLength) \
+ macro(jsBufferPrototypeSubarrayCode, subarray, ASCIILiteral(), s_jsBufferPrototypeSubarrayCodeLength) \
+ macro(jsBufferPrototypeInitializeBunBufferCode, initializeBunBuffer, ASCIILiteral(), s_jsBufferPrototypeInitializeBunBufferCodeLength) \
#define WEBCORE_FOREACH_JSBUFFERPROTOTYPE_BUILTIN_FUNCTION_NAME(macro) \
macro(asciiSlice) \
@@ -518,7 +518,7 @@ public:
explicit JSBufferPrototypeBuiltinsWrapper(JSC::VM& vm)
: m_vm(vm)
WEBCORE_FOREACH_JSBUFFERPROTOTYPE_BUILTIN_FUNCTION_NAME(INITIALIZE_BUILTIN_NAMES)
-#define INITIALIZE_BUILTIN_SOURCE_MEMBERS(name, functionName, overriddenName, length) , m_##name##Source(JSC::makeSource(StringImpl::createFromLiteral(s_##name, length), { }))
+#define INITIALIZE_BUILTIN_SOURCE_MEMBERS(name, functionName, overriddenName, length) , m_##name##Source(JSC::makeSource(StringImpl::createWithoutCopying(s_##name, length), { }))
WEBCORE_FOREACH_JSBUFFERPROTOTYPE_BUILTIN_CODE(INITIALIZE_BUILTIN_SOURCE_MEMBERS)
#undef INITIALIZE_BUILTIN_SOURCE_MEMBERS
{
diff --git a/src/javascript/jsc/bindings/JSDOMExceptionHandling.cpp b/src/javascript/jsc/bindings/JSDOMExceptionHandling.cpp
index 494bf9e3a..473196641 100644
--- a/src/javascript/jsc/bindings/JSDOMExceptionHandling.cpp
+++ b/src/javascript/jsc/bindings/JSDOMExceptionHandling.cpp
@@ -56,7 +56,7 @@ void reportException(JSGlobalObject* lexicalGlobalObject, JSC::Exception* except
vm.clearLastException();
auto* globalObject = jsCast<JSDOMGlobalObject*>(lexicalGlobalObject);
- // if (auto* window = jsDynamicCast<JSDOMWindow*>(vm, globalObject)) {
+ // if (auto* window = jsDynamicCast<JSDOMWindow*>( globalObject)) {
// if (!window->wrapped().isCurrentlyDisplayedInFrame())
// return;
// }
@@ -85,7 +85,7 @@ void reportException(JSGlobalObject* lexicalGlobalObject, JSValue exceptionValue
{
VM& vm = lexicalGlobalObject->vm();
RELEASE_ASSERT(vm.currentThreadIsHoldingAPILock());
- auto* exception = jsDynamicCast<JSC::Exception*>(vm, exceptionValue);
+ auto* exception = jsDynamicCast<JSC::Exception*>(exceptionValue);
if (!exception) {
exception = vm.lastException();
if (!exception)
@@ -100,9 +100,9 @@ String retrieveErrorMessageWithoutName(JSGlobalObject& lexicalGlobalObject, VM&
// FIXME: <http://webkit.org/b/115087> Web Inspector: WebCore::reportException should not evaluate JavaScript handling exceptions
// If this is a custom exception object, call toString on it to try and get a nice string representation for the exception.
String errorMessage;
- if (auto* error = jsDynamicCast<ErrorInstance*>(vm, exception))
+ if (auto* error = jsDynamicCast<ErrorInstance*>(exception))
errorMessage = error->sanitizedMessageString(&lexicalGlobalObject);
- else if (auto* error = jsDynamicCast<JSDOMException*>(vm, exception))
+ else if (auto* error = jsDynamicCast<JSDOMException*>(exception))
errorMessage = error->wrapped().message();
else
errorMessage = exception.toWTFString(&lexicalGlobalObject);
@@ -119,7 +119,7 @@ String retrieveErrorMessage(JSGlobalObject& lexicalGlobalObject, VM& vm, JSValue
// FIXME: <http://webkit.org/b/115087> Web Inspector: WebCore::reportException should not evaluate JavaScript handling exceptions
// If this is a custom exception object, call toString on it to try and get a nice string representation for the exception.
String errorMessage;
- if (auto* error = jsDynamicCast<ErrorInstance*>(vm, exception))
+ if (auto* error = jsDynamicCast<ErrorInstance*>(exception))
errorMessage = error->sanitizedToString(&lexicalGlobalObject);
else
errorMessage = exception.toWTFString(&lexicalGlobalObject);
diff --git a/src/javascript/jsc/bindings/JSDOMGlobalObject.h b/src/javascript/jsc/bindings/JSDOMGlobalObject.h
index fe5344aeb..b22700d7d 100644
--- a/src/javascript/jsc/bindings/JSDOMGlobalObject.h
+++ b/src/javascript/jsc/bindings/JSDOMGlobalObject.h
@@ -23,8 +23,8 @@ JSClass* toJSDOMGlobalObject(JSC::VM& vm, JSC::JSValue value)
if (auto* object = value.getObject()) {
if (object->type() == JSC::PureForwardingProxyType)
- return JSC::jsDynamicCast<JSClass*>(vm, JSC::jsCast<JSC::JSProxy*>(object)->target());
- if (object->inherits<JSClass>(vm))
+ return JSC::jsDynamicCast<JSClass*>(JSC::jsCast<JSC::JSProxy*>(object)->target());
+ if (object->inherits<JSClass>())
return JSC::jsCast<JSClass*>(object);
}
diff --git a/src/javascript/jsc/bindings/JSFFIFunction.cpp b/src/javascript/jsc/bindings/JSFFIFunction.cpp
index 1f146350e..5c4ad3ed6 100644
--- a/src/javascript/jsc/bindings/JSFFIFunction.cpp
+++ b/src/javascript/jsc/bindings/JSFFIFunction.cpp
@@ -64,7 +64,7 @@ DEFINE_VISIT_CHILDREN(JSFFIFunction);
void JSFFIFunction::finishCreation(VM& vm, NativeExecutable* executable, unsigned length, const String& name)
{
Base::finishCreation(vm, executable, length, name);
- ASSERT(inherits(vm, info()));
+ ASSERT(inherits(info()));
}
JSFFIFunction* JSFFIFunction::create(VM& vm, Zig::GlobalObject* globalObject, unsigned length, const String& name, FFIFunction FFIFunction, Intrinsic intrinsic, NativeFunction nativeConstructor)
diff --git a/src/javascript/jsc/bindings/Path.cpp b/src/javascript/jsc/bindings/Path.cpp
index ed155141c..6e3e27b0e 100644
--- a/src/javascript/jsc/bindings/Path.cpp
+++ b/src/javascript/jsc/bindings/Path.cpp
@@ -27,7 +27,7 @@ namespace JSCastingHelpers = JSC::JSCastingHelpers;
// clang-format off
#define DEFINE_CALLBACK_FUNCTION_BODY(ZigFunction) JSC::VM& vm = globalObject->vm(); \
- auto* thisObject = JSC::jsDynamicCast<JSC::JSFinalObject*>(vm, callFrame->thisValue()); \
+ auto* thisObject = JSC::jsDynamicCast<JSC::JSFinalObject*>( callFrame->thisValue()); \
auto scope = DECLARE_THROW_SCOPE(vm); \
if (!thisObject) \
return throwVMTypeError(globalObject, scope); \
@@ -137,48 +137,48 @@ static JSC::JSObject* createPath(JSGlobalObject* globalThis, bool isWindows)
path->putDirect(vm, clientData->builtinNames().basenamePublicName(),
JSC::JSFunction::create(vm, JSC::jsCast<JSC::JSGlobalObject*>(globalThis), 0,
- WTF::String("basename"), Path_functionBasename),
+ "basename"_s, Path_functionBasename),
0);
path->putDirect(vm, clientData->builtinNames().dirnamePublicName(),
JSC::JSFunction::create(vm, JSC::jsCast<JSC::JSGlobalObject*>(globalThis), 0,
- WTF::String("dirname"), Path_functionDirname),
+ "dirname"_s, Path_functionDirname),
0);
path->putDirect(vm, clientData->builtinNames().extnamePublicName(),
JSC::JSFunction::create(vm, JSC::jsCast<JSC::JSGlobalObject*>(globalThis), 0,
- WTF::String("extname"), Path_functionExtname),
+ "extname"_s, Path_functionExtname),
0);
path->putDirect(vm, clientData->builtinNames().formatPublicName(),
JSC::JSFunction::create(vm, JSC::jsCast<JSC::JSGlobalObject*>(globalThis), 0,
- WTF::String("format"), Path_functionFormat),
+ "format"_s, Path_functionFormat),
0);
path->putDirect(vm, clientData->builtinNames().isAbsolutePublicName(),
JSC::JSFunction::create(vm, JSC::jsCast<JSC::JSGlobalObject*>(globalThis), 0,
- WTF::String("isAbsolute"), Path_functionIsAbsolute),
+ "isAbsolute"_s, Path_functionIsAbsolute),
0);
path->putDirect(vm, clientData->builtinNames().joinPublicName(),
JSC::JSFunction::create(vm, JSC::jsCast<JSC::JSGlobalObject*>(globalThis), 0,
- WTF::String("join"), Path_functionJoin),
+ "join"_s, Path_functionJoin),
0);
path->putDirect(vm, clientData->builtinNames().normalizePublicName(),
JSC::JSFunction::create(vm, JSC::jsCast<JSC::JSGlobalObject*>(globalThis), 0,
- WTF::String("normalize"), Path_functionNormalize),
+ "normalize"_s, Path_functionNormalize),
0);
path->putDirect(vm, clientData->builtinNames().parsePublicName(),
JSC::JSFunction::create(vm, JSC::jsCast<JSC::JSGlobalObject*>(globalThis), 0,
- WTF::String("parse"), Path_functionParse),
+ "parse"_s, Path_functionParse),
0);
path->putDirect(vm, clientData->builtinNames().relativePublicName(),
JSC::JSFunction::create(vm, JSC::jsCast<JSC::JSGlobalObject*>(globalThis), 0,
- WTF::String("relative"), Path_functionRelative),
+ "relative"_s, Path_functionRelative),
0);
path->putDirect(vm, clientData->builtinNames().resolvePublicName(),
JSC::JSFunction::create(vm, JSC::jsCast<JSC::JSGlobalObject*>(globalThis), 0,
- WTF::String("resolve"), Path_functionResolve),
+ "resolve"_s, Path_functionResolve),
0);
path->putDirect(vm, clientData->builtinNames().toNamespacedPathPublicName(),
JSC::JSFunction::create(vm, JSC::jsCast<JSC::JSGlobalObject*>(globalThis), 0,
- WTF::String("toNamespacedPath"),
+ "toNamespacedPath"_s,
Path_functionToNamespacedPath),
0);
diff --git a/src/javascript/jsc/bindings/Process.cpp b/src/javascript/jsc/bindings/Process.cpp
index a450c8a46..e732b0d54 100644
--- a/src/javascript/jsc/bindings/Process.cpp
+++ b/src/javascript/jsc/bindings/Process.cpp
@@ -46,7 +46,7 @@ static JSC_DEFINE_HOST_FUNCTION(Process_functionNextTick,
JSC::JSValue job = callFrame->uncheckedArgument(0);
- if (!job.isObject() || !job.getObject()->isCallable(vm)) {
+ if (!job.isObject() || !job.getObject()->isCallable()) {
auto scope = DECLARE_THROW_SCOPE(globalObject->vm());
JSC::throwTypeError(globalObject, scope, "nextTick expects a function"_s);
return JSC::JSValue::encode(JSC::JSValue {});
@@ -94,7 +94,7 @@ static JSC_DEFINE_HOST_FUNCTION(Process_functionNextTick,
// vm, globalObject, 0, String(),
// [job, &argsList](JSC::JSGlobalObject *globalObject, JSC::CallFrame *callFrame) {
// JSC::VM &vm = globalObject->vm();
- // auto callData = getCallData(vm, job);
+ // auto callData = getCallData(job);
// return JSC::JSValue::encode(JSC::call(globalObject, job, callData, job, argsList));
// });
@@ -215,66 +215,66 @@ void Process::finishCreation(JSC::VM& vm)
this->putDirect(vm, clientData->builtinNames().nextTickPublicName(),
JSC::JSFunction::create(vm, JSC::jsCast<JSC::JSGlobalObject*>(globalObject()), 1,
- WTF::String("nextTick"), Process_functionNextTick),
+ MAKE_STATIC_STRING_IMPL("nextTick"), Process_functionNextTick),
0);
this->putDirect(vm, JSC::Identifier::fromString(vm, "dlopen"_s),
JSC::JSFunction::create(vm, JSC::jsCast<JSC::JSGlobalObject*>(globalObject()), 1,
- WTF::String("dlopen"_s), Process_functionDlopen),
+ MAKE_STATIC_STRING_IMPL("dlopen"), Process_functionDlopen),
0);
this->putDirect(vm, clientData->builtinNames().cwdPublicName(),
JSC::JSFunction::create(vm, JSC::jsCast<JSC::JSGlobalObject*>(globalObject()), 0,
- WTF::String("cwd"), Process_functionCwd),
+ MAKE_STATIC_STRING_IMPL("cwd"), Process_functionCwd),
0);
this->putDirect(vm, clientData->builtinNames().chdirPublicName(),
JSC::JSFunction::create(vm, JSC::jsCast<JSC::JSGlobalObject*>(globalObject()), 0,
- WTF::String("chdir"), Process_functionChdir),
+ MAKE_STATIC_STRING_IMPL("chdir"), Process_functionChdir),
0);
this->putDirect(vm, JSC::Identifier::fromString(vm, "exit"_s),
JSC::JSFunction::create(vm, JSC::jsCast<JSC::JSGlobalObject*>(globalObject()), 0,
- WTF::String("exit"), Process_functionExit),
+ MAKE_STATIC_STRING_IMPL("exit"), Process_functionExit),
0);
putDirectCustomAccessor(
vm, clientData->builtinNames().versionsPublicName(),
JSC::CustomGetterSetter::create(vm, Process_getVersionsLazy, Process_setVersionsLazy), 0);
// this should be transpiled out, but just incase
- this->putDirect(this->vm(), JSC::Identifier::fromString(this->vm(), "browser"),
+ this->putDirect(this->vm(), JSC::Identifier::fromString(this->vm(), "browser"_s),
JSC::JSValue(false));
- this->putDirect(this->vm(), JSC::Identifier::fromString(this->vm(), "exitCode"),
+ this->putDirect(this->vm(), JSC::Identifier::fromString(this->vm(), "exitCode"_s),
JSC::JSValue(JSC::jsNumber(0)));
this->putDirect(this->vm(), clientData->builtinNames().versionPublicName(),
- JSC::jsString(this->vm(), WTF::String(Bun__version)));
+ JSC::jsString(this->vm(), Bun__version));
// this gives some way of identifying at runtime whether the SSR is happening in node or not.
// this should probably be renamed to what the name of the bundler is, instead of "notNodeJS"
// but it must be something that won't evaluate to truthy in Node.js
- this->putDirect(this->vm(), JSC::Identifier::fromString(this->vm(), "isBun"), JSC::JSValue(true));
+ this->putDirect(this->vm(), JSC::Identifier::fromString(this->vm(), "isBun"_s), JSC::JSValue(true));
#if defined(__APPLE__)
- this->putDirect(this->vm(), JSC::Identifier::fromString(this->vm(), "platform"),
- JSC::jsString(this->vm(), WTF::String("darwin")));
+ this->putDirect(this->vm(), JSC::Identifier::fromString(this->vm(), "platform"_s),
+ JSC::jsString(this->vm(), makeAtomString("darwin")));
#else
- this->putDirect(this->vm(), JSC::Identifier::fromString(this->vm(), "platform"),
- JSC::jsString(this->vm(), WTF::String("linux")));
+ this->putDirect(this->vm(), JSC::Identifier::fromString(this->vm(), "platform"_s),
+ JSC::jsString(this->vm(), makeAtomString("linux")));
#endif
#if defined(__x86_64__)
- this->putDirect(this->vm(), JSC::Identifier::fromString(this->vm(), "arch"),
- JSC::jsString(this->vm(), WTF::String("x64")));
+ this->putDirect(this->vm(), JSC::Identifier::fromString(this->vm(), "arch"_s),
+ JSC::jsString(this->vm(), makeAtomString("x64")));
#elif defined(__i386__)
- this->putDirect(this->vm(), JSC::Identifier::fromString(this->vm(), "arch"),
- JSC::jsString(this->vm(), WTF::String("x86")));
+ this->putDirect(this->vm(), JSC::Identifier::fromString(this->vm(), "arch"_s),
+ JSC::jsString(this->vm(), makeAtomString("x86")));
#elif defined(__arm__)
- this->putDirect(this->vm(), JSC::Identifier::fromString(this->vm(), "arch"),
- JSC::jsString(this->vm(), WTF::String("arm")));
+ this->putDirect(this->vm(), JSC::Identifier::fromString(this->vm(), "arch"_s),
+ JSC::jsString(this->vm(), makeAtomString("arm")));
#elif defined(__aarch64__)
- this->putDirect(this->vm(), JSC::Identifier::fromString(this->vm(), "arch"),
- JSC::jsString(this->vm(), WTF::String("arm64")));
+ this->putDirect(this->vm(), JSC::Identifier::fromString(this->vm(), "arch"_s),
+ JSC::jsString(this->vm(), makeAtomString("arm64")));
#endif
}
@@ -294,8 +294,8 @@ JSC_DEFINE_CUSTOM_SETTER(Process_setTitle,
{
JSC::VM& vm = globalObject->vm();
- JSC::JSObject* thisObject = JSC::jsDynamicCast<JSC::JSObject*>(vm, JSValue::decode(thisValue));
- JSC::JSString* jsString = JSC::jsDynamicCast<JSC::JSString*>(vm, JSValue::decode(value));
+ JSC::JSObject* thisObject = JSC::jsDynamicCast<JSC::JSObject*>(JSValue::decode(thisValue));
+ JSC::JSString* jsString = JSC::jsDynamicCast<JSC::JSString*>(JSValue::decode(value));
if (!thisObject || !jsString) {
return false;
}
@@ -310,7 +310,7 @@ JSC_DEFINE_CUSTOM_GETTER(Process_getArgv, (JSC::JSGlobalObject * globalObject, J
{
JSC::VM& vm = globalObject->vm();
- Zig::Process* thisObject = JSC::jsDynamicCast<Zig::Process*>(vm, JSValue::decode(thisValue));
+ Zig::Process* thisObject = JSC::jsDynamicCast<Zig::Process*>(JSValue::decode(thisValue));
if (!thisObject) {
return JSValue::encode(JSC::jsUndefined());
}
@@ -334,7 +334,7 @@ JSC_DEFINE_CUSTOM_SETTER(Process_setArgv,
{
JSC::VM& vm = globalObject->vm();
- JSC::JSObject* thisObject = JSC::jsDynamicCast<JSC::JSObject*>(vm, JSValue::decode(thisValue));
+ JSC::JSObject* thisObject = JSC::jsDynamicCast<JSC::JSObject*>(JSValue::decode(thisValue));
if (!thisObject) {
return false;
}
@@ -362,7 +362,7 @@ JSC_DEFINE_CUSTOM_GETTER(Process_getVersionsLazy,
JSC::VM& vm = globalObject->vm();
auto clientData = WebCore::clientData(vm);
- Zig::Process* thisObject = JSC::jsDynamicCast<Zig::Process*>(vm, JSValue::decode(thisValue));
+ Zig::Process* thisObject = JSC::jsDynamicCast<Zig::Process*>(JSValue::decode(thisValue));
if (!thisObject) {
return JSValue::encode(JSC::jsUndefined());
}
@@ -374,28 +374,28 @@ JSC_DEFINE_CUSTOM_GETTER(Process_getVersionsLazy,
JSC::JSObject* object = JSC::constructEmptyObject(globalObject, globalObject->objectPrototype(), 9);
- object->putDirect(vm, JSC::Identifier::fromString(vm, "node"),
- JSC::JSValue(JSC::jsString(vm, WTF::String("16.14.0"))));
+ object->putDirect(vm, JSC::Identifier::fromString(vm, "node"_s),
+ JSC::JSValue(JSC::jsString(vm, makeAtomString("16.14.0"))));
object->putDirect(
- vm, JSC::Identifier::fromString(vm, "bun"),
- JSC::JSValue(JSC::jsString(vm, WTF::String(Bun__version + 1 /* prefix with v */))));
- object->putDirect(vm, JSC::Identifier::fromString(vm, "webkit"),
- JSC::JSValue(JSC::jsString(vm, WTF::String(Bun__versions_webkit))));
- object->putDirect(vm, JSC::Identifier::fromString(vm, "mimalloc"),
- JSC::JSValue(JSC::jsString(vm, WTF::String(Bun__versions_mimalloc))));
- object->putDirect(vm, JSC::Identifier::fromString(vm, "libarchive"),
- JSC::JSValue(JSC::jsString(vm, WTF::String(Bun__versions_libarchive))));
- object->putDirect(vm, JSC::Identifier::fromString(vm, "picohttpparser"),
- JSC::JSValue(JSC::jsString(vm, WTF::String(Bun__versions_picohttpparser))));
- object->putDirect(vm, JSC::Identifier::fromString(vm, "boringssl"),
- JSC::JSValue(JSC::jsString(vm, WTF::String(Bun__versions_boringssl))));
- object->putDirect(vm, JSC::Identifier::fromString(vm, "zlib"),
- JSC::JSValue(JSC::jsString(vm, WTF::String(Bun__versions_zlib))));
- object->putDirect(vm, JSC::Identifier::fromString(vm, "zig"),
- JSC::JSValue(JSC::jsString(vm, WTF::String(Bun__versions_zig))));
-
- object->putDirect(vm, JSC::Identifier::fromString(vm, "modules"),
- JSC::JSValue(JSC::jsString(vm, WTF::String("67"))));
+ vm, JSC::Identifier::fromString(vm, "bun"_s),
+ JSC::JSValue(JSC::jsString(vm, makeAtomString(Bun__version + 1 /* prefix with v */))));
+ object->putDirect(vm, JSC::Identifier::fromString(vm, "webkit"_s),
+ JSC::JSValue(JSC::jsString(vm, makeAtomString(Bun__versions_webkit))));
+ object->putDirect(vm, JSC::Identifier::fromString(vm, "mimalloc"_s),
+ JSC::JSValue(JSC::jsString(vm, makeAtomString(Bun__versions_mimalloc))));
+ object->putDirect(vm, JSC::Identifier::fromString(vm, "libarchive"_s),
+ JSC::JSValue(JSC::jsString(vm, makeAtomString(Bun__versions_libarchive))));
+ object->putDirect(vm, JSC::Identifier::fromString(vm, "picohttpparser"_s),
+ JSC::JSValue(JSC::jsString(vm, makeAtomString(Bun__versions_picohttpparser))));
+ object->putDirect(vm, JSC::Identifier::fromString(vm, "boringssl"_s),
+ JSC::JSValue(JSC::jsString(vm, makeAtomString(Bun__versions_boringssl))));
+ object->putDirect(vm, JSC::Identifier::fromString(vm, "zlib"_s),
+ JSC::JSValue(JSC::jsString(vm, makeAtomString(Bun__versions_zlib))));
+ object->putDirect(vm, JSC::Identifier::fromString(vm, "zig"_s),
+ JSC::JSValue(JSC::jsString(vm, makeAtomString(Bun__versions_zig))));
+
+ object->putDirect(vm, JSC::Identifier::fromString(vm, "modules"_s),
+ JSC::JSValue(JSC::jsString(vm, makeAtomString("67"))));
thisObject->putDirect(vm, clientData->builtinNames().versionsPrivateName(), object);
return JSC::JSValue::encode(object);
@@ -408,7 +408,7 @@ JSC_DEFINE_CUSTOM_SETTER(Process_setVersionsLazy,
JSC::VM& vm = globalObject->vm();
auto clientData = WebCore::clientData(vm);
- Zig::Process* thisObject = JSC::jsDynamicCast<Zig::Process*>(vm, JSValue::decode(thisValue));
+ Zig::Process* thisObject = JSC::jsDynamicCast<Zig::Process*>(JSValue::decode(thisValue));
if (!thisObject) {
return JSValue::encode(JSC::jsUndefined());
}
diff --git a/src/javascript/jsc/bindings/URLDecomposition.cpp b/src/javascript/jsc/bindings/URLDecomposition.cpp
index db2bb7f81..eb21e36c8 100644
--- a/src/javascript/jsc/bindings/URLDecomposition.cpp
+++ b/src/javascript/jsc/bindings/URLDecomposition.cpp
@@ -233,7 +233,7 @@ void URLDecomposition::setSearch(const String& value)
} else {
String newSearch = value;
// Make sure that '#' in the query does not leak to the hash.
- fullURL.setQuery(newSearch.replaceWithLiteral('#', "%23"));
+ fullURL.setQuery(makeStringByReplacingAll(value, '#', "%23"_s));
}
setFullURL(fullURL);
}
diff --git a/src/javascript/jsc/bindings/bindings.cpp b/src/javascript/jsc/bindings/bindings.cpp
index a5a51adbc..ef1d78e27 100644
--- a/src/javascript/jsc/bindings/bindings.cpp
+++ b/src/javascript/jsc/bindings/bindings.cpp
@@ -77,7 +77,7 @@ template<typename WebCoreType, typename OutType>
OutType* WebCoreCast(JSC__JSValue JSValue0, JSC::VM* vm)
{
// we must use jsDynamicCast here so that we check that the type is correct
- WebCoreType* jsdomURL = JSC::jsDynamicCast<WebCoreType*>(*vm, JSC::JSValue::decode(JSValue0));
+ WebCoreType* jsdomURL = JSC::jsDynamicCast<WebCoreType*>(JSC::JSValue::decode(JSValue0));
if (jsdomURL == nullptr) {
return nullptr;
}
@@ -410,7 +410,7 @@ void JSC__JSObject__putRecord(JSC__JSObject* object, JSC__JSGlobalObject* global
descriptor.setValue(array);
}
- object->methodTable(global->vm())->defineOwnProperty(object, global, ident, descriptor, true);
+ object->methodTable()->defineOwnProperty(object, global, ident, descriptor, true);
object->putDirect(global->vm(), ident, descriptor.value());
scope.release();
}
@@ -454,7 +454,7 @@ void JSC__JSValue__putRecord(JSC__JSValue objectValue, JSC__JSGlobalObject* glob
descriptor.setValue(array);
}
- object->methodTable(global->vm())->defineOwnProperty(object, global, ident, descriptor, true);
+ object->methodTable()->defineOwnProperty(object, global, ident, descriptor, true);
object->putDirect(global->vm(), ident, descriptor.value());
scope.release();
}
@@ -545,9 +545,9 @@ void JSC__JSValue___then(JSC__JSValue JSValue0, JSC__JSGlobalObject* globalObjec
return JSC::JSValue::encode(JSC::jsUndefined());
});
- if (JSC::JSPromise* promise = JSC::jsDynamicCast<JSC::JSPromise*>(globalObject->vm(), cell)) {
+ if (JSC::JSPromise* promise = JSC::jsDynamicCast<JSC::JSPromise*>(cell)) {
promise->performPromiseThen(globalObject, resolverFunction, rejecterFunction, JSC::jsUndefined());
- } else if (JSC::JSInternalPromise* promise = JSC::jsDynamicCast<JSC::JSInternalPromise*>(globalObject->vm(), cell)) {
+ } else if (JSC::JSInternalPromise* promise = JSC::jsDynamicCast<JSC::JSInternalPromise*>(cell)) {
promise->then(globalObject, resolverFunction, rejecterFunction);
}
}
@@ -559,7 +559,7 @@ JSC__JSValue JSC__JSValue__parseJSON(JSC__JSValue JSValue0, JSC__JSGlobalObject*
JSC::JSValue result = JSC::JSONParse(arg1, jsValue.toWTFString(arg1));
if (!result) {
- result = JSC::JSValue(JSC::createSyntaxError(arg1->globalObject(), "Failed to parse JSON"));
+ result = JSC::JSValue(JSC::createSyntaxError(arg1->globalObject(), "Failed to parse JSON"_s));
}
return JSC::JSValue::encode(result);
@@ -587,7 +587,7 @@ JSC__JSValue JSC__JSGlobalObject__putCachedObject(JSC__JSGlobalObject* globalObj
void JSC__JSGlobalObject__deleteModuleRegistryEntry(JSC__JSGlobalObject* global, ZigString* arg1)
{
JSC::JSMap* map = JSC::jsDynamicCast<JSC::JSMap*>(
- global->vm(), global->moduleLoader()->getDirect(global->vm(), JSC::Identifier::fromString(global->vm(), "registry")));
+ global->moduleLoader()->getDirect(global->vm(), JSC::Identifier::fromString(global->vm(), "registry"_s)));
if (!map)
return;
const JSC::Identifier identifier = Zig::toIdentifier(*arg1, global);
@@ -602,7 +602,7 @@ JSC__JSInternalPromise* JSC__VM__reloadModule(JSC__VM* vm, JSC__JSGlobalObject*
return nullptr;
// JSC::JSMap *map = JSC::jsDynamicCast<JSC::JSMap *>(
// arg1->vm(), arg1->moduleLoader()->getDirect(
- // arg1->vm(), JSC::Identifier::fromString(arg1->vm(), "registry")));
+ // arg1->vm(), JSC::Identifier::fromString(arg1->vm(), "registry"_s)));
// const JSC::Identifier identifier = Zig::toIdentifier(arg2, arg1);
// JSC::JSValue val = JSC::identifierToJSValue(arg1->vm(), identifier);
@@ -610,7 +610,7 @@ JSC__JSInternalPromise* JSC__VM__reloadModule(JSC__VM* vm, JSC__JSGlobalObject*
// if (!map->has(arg1, val)) return nullptr;
// if (JSC::JSObject *registryEntry =
- // JSC::jsDynamicCast<JSC::JSObject *>(arg1->vm(), map->get(arg1, val))) {
+ // JSC::jsDynamicCast<JSC::JSObject *>(arg1-> map->get(arg1, val))) {
// auto moduleIdent = JSC::Identifier::fromString(arg1->vm(), "module");
// if (JSC::JSModuleRecord *record = JSC::jsDynamicCast<JSC::JSModuleRecord *>(
// arg1->vm(), registryEntry->getDirect(arg1->vm(), moduleIdent))) {
@@ -657,7 +657,7 @@ JSC__JSValue JSObjectCallAsFunctionReturnValue(JSContextRef ctx, JSObjectRef obj
for (size_t i = 0; i < argumentCount; i++)
argList.append(toJS(globalObject, arguments[i]));
- auto callData = getCallData(vm, jsObject);
+ auto callData = getCallData(jsObject);
if (callData.type == JSC::CallData::Type::None)
return JSC::JSValue::encode(JSC::JSValue());
@@ -699,7 +699,7 @@ JSC__JSValue JSObjectCallAsFunctionReturnValueHoldingAPILock(JSContextRef ctx, J
for (size_t i = 0; i < argumentCount; i++)
argList.append(toJS(globalObject, arguments[i]));
- auto callData = getCallData(vm, jsObject);
+ auto callData = getCallData(jsObject);
if (callData.type == JSC::CallData::Type::None)
return JSC::JSValue::encode(JSC::JSValue());
@@ -964,7 +964,7 @@ bool JSC__JSValue__asArrayBuffer_(JSC__JSValue JSValue0, JSC__JSGlobalObject* ar
JSC::JSObject* object = value.getObject();
- if (JSC::JSArrayBufferView* typedArray = JSC::jsDynamicCast<JSC::JSArrayBufferView*>(vm, object)) {
+ if (JSC::JSArrayBufferView* typedArray = JSC::jsDynamicCast<JSC::JSArrayBufferView*>(object)) {
if (JSC::ArrayBuffer* buffer = typedArray->possiblySharedBuffer()) {
buffer->pinAndLock();
arg2->ptr = reinterpret_cast<char*>(buffer->data());
@@ -1724,7 +1724,7 @@ JSC__JSValue JSC__JSValue__getPrototype(JSC__JSValue JSValue0, JSC__JSGlobalObje
}
bool JSC__JSValue__isException(JSC__JSValue JSValue0, JSC__VM* arg1)
{
- return JSC::jsDynamicCast<JSC::Exception*>(*arg1, JSC::JSValue::decode(JSValue0)) != nullptr;
+ return JSC::jsDynamicCast<JSC::Exception*>(JSC::JSValue::decode(JSValue0)) != nullptr;
}
bool JSC__JSValue__isAnyInt(JSC__JSValue JSValue0)
{
@@ -1752,7 +1752,7 @@ void JSC__JSValue__put(JSC__JSValue JSValue0, JSC__JSGlobalObject* arg1, const Z
bool JSC__JSValue__isClass(JSC__JSValue JSValue0, JSC__JSGlobalObject* arg1)
{
JSC::JSValue value = JSC::JSValue::decode(JSValue0);
- return value.isConstructor(arg1->vm());
+ return value.isConstructor();
}
bool JSC__JSValue__isCell(JSC__JSValue JSValue0) { return JSC::JSValue::decode(JSValue0).isCell(); }
bool JSC__JSValue__isCustomGetterSetter(JSC__JSValue JSValue0)
@@ -1770,7 +1770,7 @@ bool JSC__JSValue__isAggregateError(JSC__JSValue JSValue0, JSC__JSGlobalObject*
JSC::JSObject* obj = JSC::JSValue::decode(JSValue0).getObject();
if (obj != nullptr) {
- if (JSC::ErrorInstance* err = JSC::jsDynamicCast<JSC::ErrorInstance*>(global->vm(), obj)) {
+ if (JSC::ErrorInstance* err = JSC::jsDynamicCast<JSC::ErrorInstance*>(obj)) {
return err->errorType() == JSC::ErrorType::AggregateError;
}
}
@@ -1795,7 +1795,7 @@ void JSC__JSValue__forEach(JSC__JSValue JSValue0, JSC__JSGlobalObject* arg1, voi
bool JSC__JSValue__isCallable(JSC__JSValue JSValue0, JSC__VM* arg1)
{
- return JSC::JSValue::decode(JSValue0).isCallable(reinterpret_cast<JSC::VM&>(arg1));
+ return JSC::JSValue::decode(JSValue0).isCallable();
}
bool JSC__JSValue__isGetterSetter(JSC__JSValue JSValue0)
{
@@ -1950,9 +1950,9 @@ JSC__JSValue JSC__JSValue__createObject2(JSC__JSGlobalObject* globalObject, cons
descriptor2.setWritable(1);
descriptor2.setValue(JSC::JSValue::decode(JSValue4));
- object->methodTable(globalObject->vm())
+ object->methodTable()
->defineOwnProperty(object, globalObject, key2, descriptor2, true);
- object->methodTable(globalObject->vm())
+ object->methodTable()
->defineOwnProperty(object, globalObject, key1, descriptor1, true);
return JSC::JSValue::encode(object);
@@ -2006,7 +2006,7 @@ bool JSC__JSValue__symbolKeyFor(JSC__JSValue symbolValue_, JSC__JSGlobalObject*
if (!uid.symbolRegistry())
return false;
- *arg2 = Zig::toZigString(JSC::jsString(vm, &uid), arg1);
+ *arg2 = Zig::toZigString(JSC::jsString(vm, String { uid }), arg1);
return true;
}
@@ -2098,8 +2098,10 @@ static void populateStackFrameMetadata(const JSC::StackFrame* stackFrame, ZigSta
return;
JSC::JSObject* callee = JSC::jsCast<JSC::JSObject*>(calleeCell);
+ auto& vm = m_codeBlock->vm();
+
// Does the code block have a user-defined name property?
- JSC::JSValue name = callee->getDirect(m_codeBlock->vm(), m_codeBlock->vm().propertyNames->name);
+ JSC::JSValue name = callee->getDirect(vm, vm.propertyNames->name);
if (name && name.isString()) {
auto str = name.toWTFString(m_codeBlock->globalObject());
frame->function_name = Zig::toZigString(str);
@@ -2109,9 +2111,9 @@ static void populateStackFrameMetadata(const JSC::StackFrame* stackFrame, ZigSta
/* For functions (either JSFunction or InternalFunction), fallback to their "native" name
* property. Based on JSC::getCalculatedDisplayName, "inlining" the
* JSFunction::calculatedDisplayName\InternalFunction::calculatedDisplayName calls */
- if (JSC::JSFunction* function = JSC::jsDynamicCast<JSC::JSFunction*>(m_codeBlock->vm(), callee)) {
+ if (JSC::JSFunction* function = JSC::jsDynamicCast<JSC::JSFunction*>(callee)) {
- WTF::String actualName = function->name(m_codeBlock->vm());
+ WTF::String actualName = function->name(vm);
if (!actualName.isEmpty() || function->isHostOrBuiltinFunction()) {
frame->function_name = Zig::toZigString(actualName);
return;
@@ -2121,7 +2123,7 @@ static void populateStackFrameMetadata(const JSC::StackFrame* stackFrame, ZigSta
frame->function_name = Zig::toZigString(inferred_name.string());
}
- if (JSC::InternalFunction* function = JSC::jsDynamicCast<JSC::InternalFunction*>(m_codeBlock->vm(), callee)) {
+ if (JSC::InternalFunction* function = JSC::jsDynamicCast<JSC::InternalFunction*>(callee)) {
// Based on JSC::InternalFunction::calculatedDisplayName, skipping the "displayName" property
frame->function_name = Zig::toZigString(function->name());
}
@@ -2285,7 +2287,7 @@ static void fromErrorInstance(ZigException* except, JSC::JSGlobalObject* global,
JSC::ErrorInstance* err, const Vector<JSC::StackFrame>* stackTrace,
JSC::JSValue val)
{
- JSC::JSObject* obj = JSC::jsDynamicCast<JSC::JSObject*>(global->vm(), val);
+ JSC::JSObject* obj = JSC::jsDynamicCast<JSC::JSObject*>(val);
bool getFromSourceURL = false;
if (stackTrace != nullptr && stackTrace->size() > 0) {
@@ -2356,7 +2358,7 @@ void exceptionFromString(ZigException* except, JSC::JSValue value, JSC::JSGlobal
{
// Fallback case for when it's a user-defined ErrorLike-object that doesn't inherit from
// ErrorInstance
- if (JSC::JSObject* obj = JSC::jsDynamicCast<JSC::JSObject*>(global->vm(), value)) {
+ if (JSC::JSObject* obj = JSC::jsDynamicCast<JSC::JSObject*>(value)) {
if (obj->hasProperty(global, global->vm().propertyNames->name)) {
auto name_str = obj->getIfPropertyExists(global, global->vm().propertyNames->name).toWTFString(global);
except->name = Zig::toZigString(name_str);
@@ -2426,7 +2428,7 @@ void JSC__JSValue__getClassName(JSC__JSValue JSValue0, JSC__JSGlobalObject* arg1
return;
}
- const char* ptr = cell->className(arg1->vm());
+ const char* ptr = cell->className();
auto view = WTF::StringView(ptr);
// Fallback to .name if className is empty
@@ -2465,7 +2467,7 @@ void JSC__JSValue__getNameProperty(JSC__JSValue JSValue0, JSC__JSGlobalObject* a
}
}
- if (JSC::JSFunction* function = JSC::jsDynamicCast<JSC::JSFunction*>(vm, obj)) {
+ if (JSC::JSFunction* function = JSC::jsDynamicCast<JSC::JSFunction*>(obj)) {
WTF::String actualName = function->name(vm);
if (!actualName.isEmpty() || function->isHostOrBuiltinFunction()) {
@@ -2479,7 +2481,7 @@ void JSC__JSValue__getNameProperty(JSC__JSValue JSValue0, JSC__JSGlobalObject* a
return;
}
- if (JSC::InternalFunction* function = JSC::jsDynamicCast<JSC::InternalFunction*>(vm, obj)) {
+ if (JSC::InternalFunction* function = JSC::jsDynamicCast<JSC::InternalFunction*>(obj)) {
auto view = WTF::StringView(function->name());
*arg2 = Zig::toZigString(view);
return;
@@ -2493,14 +2495,14 @@ void JSC__JSValue__toZigException(JSC__JSValue JSValue0, JSC__JSGlobalObject* ar
{
JSC::JSValue value = JSC::JSValue::decode(JSValue0);
- if (JSC::Exception* jscException = JSC::jsDynamicCast<JSC::Exception*>(arg1->vm(), value)) {
- if (JSC::ErrorInstance* error = JSC::jsDynamicCast<JSC::ErrorInstance*>(arg1->vm(), jscException->value())) {
+ if (JSC::Exception* jscException = JSC::jsDynamicCast<JSC::Exception*>(value)) {
+ if (JSC::ErrorInstance* error = JSC::jsDynamicCast<JSC::ErrorInstance*>(jscException->value())) {
fromErrorInstance(exception, arg1, error, &jscException->stack(), value);
return;
}
}
- if (JSC::ErrorInstance* error = JSC::jsDynamicCast<JSC::ErrorInstance*>(arg1->vm(), value)) {
+ if (JSC::ErrorInstance* error = JSC::jsDynamicCast<JSC::ErrorInstance*>(value)) {
fromErrorInstance(exception, arg1, error, nullptr, value);
return;
}
@@ -2561,7 +2563,7 @@ void JSC__VM__setExecutionTimeLimit(JSC__VM* vm, double limit)
bool JSC__JSValue__isTerminationException(JSC__JSValue JSValue0, JSC__VM* arg1)
{
- JSC::Exception* exception = JSC::jsDynamicCast<JSC::Exception*>(*arg1, JSC::JSValue::decode(JSValue0));
+ JSC::Exception* exception = JSC::jsDynamicCast<JSC::Exception*>(JSC::JSValue::decode(JSValue0));
return exception != NULL && arg1->isTerminationException(exception);
}
@@ -2591,8 +2593,8 @@ void JSC__VM__deleteAllCode(JSC__VM* arg1, JSC__JSGlobalObject* globalObject)
JSC::JSLockHolder locker(globalObject->vm());
arg1->drainMicrotasks();
- if (JSC::JSObject* obj = JSC::jsDynamicCast<JSC::JSObject*>(globalObject->vm(), globalObject->moduleLoader())) {
- auto id = JSC::Identifier::fromString(globalObject->vm(), "registry");
+ if (JSC::JSObject* obj = JSC::jsDynamicCast<JSC::JSObject*>(globalObject->moduleLoader())) {
+ auto id = JSC::Identifier::fromString(globalObject->vm(), "registry"_s);
JSC::JSMap* map = JSC::JSMap::create(globalObject, globalObject->vm(), globalObject->mapStructure());
obj->putDirect(globalObject->vm(), id, map);
}
diff --git a/src/javascript/jsc/bindings/headers-cpp.h b/src/javascript/jsc/bindings/headers-cpp.h
index 1384e090a..6b4c06ebe 100644
--- a/src/javascript/jsc/bindings/headers-cpp.h
+++ b/src/javascript/jsc/bindings/headers-cpp.h
@@ -1,4 +1,4 @@
-//-- AUTOGENERATED FILE -- 1651766047
+//-- AUTOGENERATED FILE -- 1651982852
// clang-format off
#pragma once
diff --git a/src/javascript/jsc/bindings/headers.h b/src/javascript/jsc/bindings/headers.h
index 0aab07b9e..07a86385f 100644
--- a/src/javascript/jsc/bindings/headers.h
+++ b/src/javascript/jsc/bindings/headers.h
@@ -1,5 +1,5 @@
// clang-format: off
-//-- AUTOGENERATED FILE -- 1651766047
+//-- AUTOGENERATED FILE -- 1651982852
#pragma once
#include <stddef.h>
diff --git a/src/javascript/jsc/bindings/helpers.h b/src/javascript/jsc/bindings/helpers.h
index e4ceb5696..7b72b3566 100644
--- a/src/javascript/jsc/bindings/helpers.h
+++ b/src/javascript/jsc/bindings/helpers.h
@@ -200,14 +200,6 @@ static const unsigned char* taggedUTF16Ptr(const UChar* ptr)
return reinterpret_cast<const unsigned char*>(reinterpret_cast<uintptr_t>(ptr) | (static_cast<uint64_t>(1) << 63));
}
-static ZigString toZigString(WTF::String str)
-{
- return str.isEmpty()
- ? ZigStringEmpty
- : ZigString { str.is8Bit() ? str.characters8() : taggedUTF16Ptr(str.characters16()),
- str.length() };
-}
-
static ZigString toZigString(WTF::String* str)
{
return str->isEmpty()
diff --git a/src/javascript/jsc/bindings/napi.cpp b/src/javascript/jsc/bindings/napi.cpp
index 027609ec7..c8a8bb383 100644
--- a/src/javascript/jsc/bindings/napi.cpp
+++ b/src/javascript/jsc/bindings/napi.cpp
@@ -40,15 +40,184 @@
#include "JavaScriptCore/ArrayBuffer.h"
#include "JavaScriptCore/JSArrayBuffer.h"
#include "JSFFIFunction.h"
+#include "JavaScriptCore/JavaScript.h"
+#include "JavaScriptCore/JSWeakValue.h"
+#include "napi.h"
+#include "JavaScriptCore/GetterSetter.h"
#include <iostream>
using namespace JSC;
+using namespace Zig;
+
+class NapiRefWeakHandleOwner final : public JSC::WeakHandleOwner {
+public:
+ void finalize(JSC::Handle<JSC::Unknown>, void* context) final
+ {
+ auto* weakValue = reinterpret_cast<NapiRef*>(context);
+ weakValue->clear();
+ }
+};
+
+static NapiRefWeakHandleOwner& weakValueHandleOwner()
+{
+ static NeverDestroyed<NapiRefWeakHandleOwner> jscWeakValueHandleOwner;
+ return jscWeakValueHandleOwner;
+}
+
+void NapiFinalizer::call(JSC::JSGlobalObject* globalObject, void* data)
+{
+ if (finalize_cb) {
+ finalize_cb(reinterpret_cast<napi_env>(globalObject), finalize_hint, data);
+ }
+}
+
+void NapiRef::ref()
+{
+ ++refCount;
+ if (refCount == 1 && weakValueRef.isSet()) {
+ auto& vm = globalObject.get()->vm();
+ if (weakValueRef.isString()) {
+ strongRef.set(vm, JSC::JSValue(weakValueRef.string()));
+ } else if (weakValueRef.isObject()) {
+ strongRef.set(vm, JSC::JSValue(weakValueRef.object()));
+ } else {
+ strongRef.set(vm, weakValueRef.primitive());
+ }
+
+ weakValueRef.clear();
+ }
+}
+
+void NapiRef::unref()
+{
+ bool clear = refCount == 1;
+ refCount = refCount > 0 ? refCount - 1 : 0;
+ if (clear) {
+ JSC::JSValue val = strongRef.get();
+ if (val.isString()) {
+ weakValueRef.setString(val.toString(globalObject.get()), weakValueHandleOwner(), this);
+ } else if (val.isObject()) {
+ weakValueRef.setObject(val.getObject(), weakValueHandleOwner(), this);
+ } else {
+ weakValueRef.setPrimitive(val);
+ }
+ strongRef.clear();
+ }
+}
+
+void NapiRef::clear()
+{
+ this->finalizer.call(this->globalObject.get(), nullptr);
+ this->globalObject.clear();
+ this->weakValueRef.clear();
+ this->strongRef.clear();
+}
// namespace Napi {
// class Reference
// }
+#define StackAllocatedCallFramePointerTag 62
+typedef struct StackAllocatedCallFrame {
+ void* dataPtr;
+ JSC::EncodedJSValue thisValue;
+ // this is "bar" in:
+ // set foo(bar)
+ JSC::EncodedJSValue argument1;
+} StackAllocatedCallFrame;
+
+extern "C" Zig::GlobalObject*
+Bun__getDefaultGlobal();
+
+static uint32_t getPropertyAttributes(napi_property_attributes attributes)
+{
+ uint32_t result = 0;
+ if (!(attributes & napi_key_configurable)) {
+ result |= JSC::PropertyAttribute::DontDelete;
+ }
+
+ if (!(attributes & napi_key_enumerable)) {
+ result |= JSC::PropertyAttribute::DontEnum;
+ }
+
+ if (!(attributes & napi_key_writable)) {
+ result |= JSC::PropertyAttribute::ReadOnly;
+ }
+
+ return result;
+}
+
+static uint32_t getPropertyAttributes(napi_property_descriptor prop)
+{
+ uint32_t result = getPropertyAttributes(prop.attributes);
+
+ if (!(prop.getter && !prop.setter)) {
+ result |= JSC::PropertyAttribute::ReadOnly;
+ }
+
+ if (prop.method) {
+ result |= JSC::PropertyAttribute::Function;
+ }
+
+ return result;
+}
+
+const ClassInfo NapiClass::s_info = { "Function"_s, &NapiClass::Base::s_info, nullptr, nullptr, CREATE_METHOD_TABLE(NapiClass) };
+
+static void defineNapiProperty(Zig::GlobalObject* globalObject, JSC::JSObject* to, napi_property_descriptor property)
+{
+ JSC::VM& vm = globalObject->vm();
+ void* dataPtr = property.data;
+ auto is_static = !!(property.attributes & napi_static);
+ WTF::String nameStr;
+ if (property.utf8name != nullptr) {
+ nameStr = WTF::String::fromUTF8(property.utf8name);
+ } else if (property.name) {
+ nameStr = toJS(property.name).toWTFString(globalObject);
+ }
+
+ auto propertyName = JSC::PropertyName(JSC::Identifier::fromString(vm, nameStr));
+
+ if (property.method) {
+ auto function = Zig::JSFFIFunction::create(vm, globalObject, 1, nameStr, reinterpret_cast<Zig::FFIFunction>(property.method));
+ function->dataPtr = dataPtr;
+ JSC::JSValue value = JSC::JSValue(function);
+
+ to->putDirect(vm, Identifier::fromString(vm, nameStr), value, getPropertyAttributes(property));
+ return;
+ }
+
+ if (property.getter != nullptr || property.setter != nullptr) {
+ JSC::JSValue getter = {};
+ JSC::JSValue setter = {};
+
+ if (property.getter) {
+ auto callGetter = property.getter;
+ auto function = Zig::JSFFIFunction::create(vm, globalObject, 0, nameStr, reinterpret_cast<Zig::FFIFunction>(property.getter));
+ function->dataPtr = dataPtr;
+ getter = JSC::JSValue(function);
+ }
+
+ if (property.setter) {
+ auto callGetter = property.setter;
+ auto function = Zig::JSFFIFunction::create(vm, globalObject, 1, nameStr, reinterpret_cast<Zig::FFIFunction>(property.setter));
+ function->dataPtr = dataPtr;
+ getter = JSC::JSValue(function);
+ }
-extern "C" Zig::GlobalObject* Bun__getDefaultGlobal();
+ auto getterSetter = JSC::GetterSetter::create(vm, globalObject, getter, setter);
+ to->putDirect(vm, propertyName, getterSetter, getPropertyAttributes(property) | JSC::PropertyAttribute::Accessor);
+
+ } else {
+ // TODO: is dataPtr allowed when given a value?
+ JSC::JSValue value = JSC::jsUndefined();
+
+ if (property.value) {
+ value = toJS(property.value);
+ }
+
+ to->putDirect(vm, propertyName, value, getPropertyAttributes(property));
+ }
+}
extern "C" void napi_module_register(napi_module* mod)
{
@@ -91,6 +260,55 @@ extern "C" void napi_module_register(napi_module* mod)
promise->result(vm);
}
+extern "C" napi_status napi_wrap(napi_env env,
+ napi_value js_object,
+ void* native_object,
+ napi_finalize finalize_cb,
+ void* finalize_hint,
+ napi_ref* result)
+{
+ auto* globalObject = toJS(env);
+ auto* object = toJS(js_object).getObject();
+ auto clientData = WebCore::clientData(vm);
+
+ if (native_object) {
+ uintptr_t ref_ptr = reinterpret_cast<uintptr_t>(native_object);
+ double ref_double = bitwise_cast<double>(ref_ptr);
+ val->putDirect(vm, clientData->builtinNames().passwordPrivateName(), JSC::jsNumber(ref_double), JSC::PropertyAttribute::DontEnum | 0);
+ }
+
+ if (result) {
+ auto* ref = new NapiRef(globalObject, object);
+ auto clientData = WebCore::clientData(vm);
+ if (finalize_cb) {
+ ref->finalizer = { finalize_cb, finalize_hint };
+ }
+ *result = reinterpret_cast<napi_ref>(ref);
+ }
+}
+
+extern "C" napi_status napi_unwrap(napi_env env, napi_value js_object,
+ void** result)
+{
+ auto* globalObject = toJS(env);
+ auto* object = toJS(js_object).getObject();
+ auto clientData = WebCore::clientData(vm);
+
+ if (native_object) {
+ uintptr_t ref_ptr = reinterpret_cast<uintptr_t>(native_object);
+ double ref_double = bitwise_cast<double>(ref_ptr);
+ val->putDirect(vm, clientData->builtinNames().passwordPrivateName(), JSC::jsNumber(ref_double), JSC::PropertyAttribute::DontEnum | 0);
+ }
+
+ if (result) {
+ auto* ref = new NapiRef(globalObject, object);
+ if (finalize_cb) {
+ ref->finalizer = { finalize_cb, finalize_hint };
+ }
+ *result = reinterpret_cast<napi_ref>(ref);
+ }
+}
+
extern "C" napi_status napi_create_function(napi_env env, const char* utf8name,
size_t length, napi_callback cb,
void* data, napi_value* result)
@@ -117,16 +335,19 @@ extern "C" napi_status napi_get_cb_info(
{
Zig::GlobalObject* globalObject = reinterpret_cast<Zig::GlobalObject*>(env);
JSC::VM& vm = globalObject->vm();
- JSC::CallFrame* callFrame = reinterpret_cast<JSC::CallFrame*>(cbinfo);
-
auto inputArgsCount = argc == nullptr ? 0 : *argc;
+ JSC::CallFrame* callFrame = reinterpret_cast<JSC::CallFrame*>(cbinfo);
+ // napi expects arguments to be copied into the argv array.
if (inputArgsCount > 0) {
auto outputArgsCount = callFrame->argumentCount();
auto argsToCopy = inputArgsCount < outputArgsCount ? inputArgsCount : outputArgsCount;
*argc = argsToCopy;
memcpy(argv, callFrame->addressOfArgumentsStart(), argsToCopy * sizeof(JSC::JSValue));
+
+ // If the user didn't provide expected number of args, we need to fill the rest with undefined.
+ // TODO: can we use memset() here?
auto argv_ptr = argv[outputArgsCount];
for (size_t i = outputArgsCount; i < inputArgsCount; i++) {
argv[i] = reinterpret_cast<napi_value>(JSC::JSValue::encode(JSC::jsUndefined()));
@@ -139,8 +360,32 @@ extern "C" napi_status napi_get_cb_info(
}
if (data != nullptr) {
- Zig::JSFFIFunction* ffiFunction = JSC::jsDynamicCast<Zig::JSFFIFunction*>(vm, JSC::JSValue(callFrame->jsCallee()));
- *data = reinterpret_cast<void*>(ffiFunction->dataPtr);
+ JSC::JSValue callee = JSC::JSValue(callFrame->jsCallee());
+ if (Zig::JSFFIFunction* ffiFunction = JSC::jsDynamicCast<Zig::JSFFIFunction*>(callee)) {
+ *data = reinterpret_cast<void*>(ffiFunction->dataPtr);
+ } else {
+ *data = nullptr;
+ }
+ }
+
+ return napi_ok;
+}
+
+extern "C" napi_status
+napi_define_properties(napi_env env, napi_value object, size_t property_count,
+ const napi_property_descriptor* properties)
+{
+ Zig::GlobalObject* globalObject = reinterpret_cast<Zig::GlobalObject*>(env);
+ JSC::VM& vm = globalObject->vm();
+
+ JSC::JSValue objectValue = JSC::JSValue(reinterpret_cast<JSC::EncodedJSValue>(object));
+ JSC::JSObject* objectObject = objectValue.getObject();
+ if (!objectObject) {
+ return napi_object_expected;
+ }
+
+ for (size_t i = 0; i < property_count; i++) {
+ defineNapiProperty(globalObject, objectObject, properties[i]);
}
return napi_ok;
@@ -167,8 +412,73 @@ extern "C" napi_status napi_create_reference(napi_env env, napi_value value,
{
Zig::GlobalObject* globalObject = reinterpret_cast<Zig::GlobalObject*>(env);
- JSC::Strong<JSC::Unknown> data = { globalObject->vm(), JSC::JSValue::decode(reinterpret_cast<JSC::EncodedJSValue>(value)) };
- *reinterpret_cast<JSC::Strong<JSC::Unknown>*>(result) = data;
+ auto* ref = new NapiRef(toJS(env), initial_refcount);
+ JSC::JSValue val = toJS(value);
+ auto clientData = WebCore::clientData(vm);
+
+ if (initial_refcount > 0) {
+ ref->strongRef.set(globalObject->vm(), val);
+ } else {
+ if (val.isString()) {
+ ref->weakValueRef.setString(val.toString(globalObject), weakValueHandleOwner(), ref);
+ } else if (val.isObject()) {
+ ref->weakValueRef.setObject(val.getObject(), weakValueHandleOwner(), ref);
+ } else {
+ ref->weakValueRef.setPrimitive(val);
+ }
+ }
+
+ uintptr_t ref_ptr = reinterpret_cast<uintptr_t>(ref);
+ double ref_double = bitwise_cast<double>(ref_ptr);
+ val->putDirect(vm, clientData->builtinNames().passwordPrivateName(), JSC::jsNumber(ref_double), JSC::PropertyAttribute::DontEnum | 0);
+
+ *result = toNapi(ref);
+
+ return napi_ok;
+}
+
+extern "C" napi_status napi_reference_unref(napi_env env, napi_ref ref,
+ uint32_t* result)
+{
+ NapiRef* napiRef = toJS(ref);
+ napiRef->unref();
+ *result = napiRef->refCount;
+ return napi_ok;
+}
+
+// Attempts to get a referenced value. If the reference is weak,
+// the value might no longer be available, in that case the call
+// is still successful but the result is NULL.
+extern "C" napi_status napi_get_reference_value(napi_env env, napi_ref ref,
+ napi_value* result)
+{
+ NapiRef* napiRef = toJS(ref);
+ *result = toNapi(napiRef->value());
+ return napi_ok;
+}
+
+extern "C" napi_status napi_reference_ref(napi_env env, napi_ref ref,
+ uint32_t* result)
+{
+ NapiRef* napiRef = toJS(ref);
+ napiRef->ref();
+ *result = napiRef->refCount;
+ return napi_ok;
+}
+
+extern "C" napi_status napi_reference_delete(napi_env env, napi_ref ref,
+ uint32_t* result)
+{
+ NapiRef* napiRef = toJS(ref);
+ napiRef->ref();
+ *result = napiRef->refCount();
+ return napi_ok;
+}
+
+extern "C" napi_status napi_delete_reference(napi_env env, napi_ref ref)
+{
+ NapiRef* napiRef = toJS(ref);
+ ~napiRef();
return napi_ok;
}
@@ -185,7 +495,7 @@ extern "C" napi_status napi_is_detached_arraybuffer(napi_env env,
return napi_arraybuffer_expected;
}
- JSC::JSArrayBuffer* jsArrayBuffer = JSC::jsDynamicCast<JSC::JSArrayBuffer*>(vm, value);
+ JSC::JSArrayBuffer* jsArrayBuffer = JSC::jsDynamicCast<JSC::JSArrayBuffer*>(value);
if (!jsArrayBuffer) {
return napi_arraybuffer_expected;
}
@@ -208,7 +518,7 @@ extern "C" napi_status napi_detach_arraybuffer(napi_env env,
return napi_arraybuffer_expected;
}
- JSC::JSArrayBuffer* jsArrayBuffer = JSC::jsDynamicCast<JSC::JSArrayBuffer*>(vm, value);
+ JSC::JSArrayBuffer* jsArrayBuffer = JSC::jsDynamicCast<JSC::JSArrayBuffer*>(value);
if (!jsArrayBuffer) {
return napi_arraybuffer_expected;
}
@@ -248,6 +558,25 @@ extern "C" napi_status napi_throw_type_error(napi_env env, const char* code,
JSC::throwException(globalObject, throwScope, error);
return napi_ok;
}
+
+extern "C" napi_status napi_create_type_error(napi_env env, napi_value code,
+ napi_value msg,
+ napi_value* result)
+{
+ Zig::GlobalObject* globalObject = reinterpret_cast<Zig::GlobalObject*>(env);
+ JSC::VM& vm = globalObject->vm();
+
+ JSC::JSValue codeValue = JSC::JSValue::decode(reinterpret_cast<JSC::EncodedJSValue>(code));
+ JSC::JSValue messageValue = JSC::JSValue::decode(reinterpret_cast<JSC::EncodedJSValue>(msg));
+
+ auto error = JSC::createTypeError(globalObject, messageValue.toWTFString(globalObject));
+ if (codeValue) {
+ error->putDirect(vm, Identifier::fromString(vm, "code"_s), codeValue, 0);
+ }
+
+ *result = reinterpret_cast<napi_value>(JSC::JSValue::encode(error));
+ return napi_ok;
+}
extern "C" napi_status napi_throw_range_error(napi_env env, const char* code,
const char* msg)
{
@@ -290,7 +619,8 @@ extern "C" napi_status napi_object_seal(napi_env env, napi_value object_value)
JSC::EncodedJSValue encodedValue = reinterpret_cast<JSC::EncodedJSValue>(object_value);
JSC::JSValue value = JSC::JSValue::decode(encodedValue);
- if (!value.isObject()) {
+
+ if (UNLIKELY(!value.isObject())) {
return napi_object_expected;
}
@@ -334,6 +664,20 @@ extern "C" napi_status napi_get_new_target(napi_env env,
{
Zig::GlobalObject* globalObject = reinterpret_cast<Zig::GlobalObject*>(env);
JSC::VM& vm = globalObject->vm();
+ // handle:
+ // - if they call this function when it was originally a getter/setter call
+ // - if they call this function without a result
+ if (UNLIKELY(result == nullptr || cbinfo == nullptr)) {
+ return napi_invalid_arg;
+ }
+
+ if (reinterpret_cast<size_t>(cbinfo) & (static_cast<size_t>(1) << StackAllocatedCallFramePointerTag)) {
+ // This is a stack allocated call frame, so we can't get the new target.
+ // We'll just return undefined.
+ // TODO: verify this is what napi does too
+ *result = reinterpret_cast<napi_value>(JSC::JSValue::encode(JSC::jsUndefined()));
+ return napi_ok;
+ }
CallFrame* callFrame = reinterpret_cast<JSC::CallFrame*>(cbinfo);
JSC::JSValue newTarget = callFrame->newTarget();
@@ -351,11 +695,174 @@ extern "C" napi_status napi_create_dataview(napi_env env, size_t length,
auto throwScope = DECLARE_THROW_SCOPE(vm);
JSC::EncodedJSValue encodedArraybuffer = reinterpret_cast<JSC::EncodedJSValue>(arraybuffer);
- auto arraybufferValue = JSC::jsDynamicCast<JSC::JSArrayBuffer*>(vm, JSC::JSValue::decode(encodedArraybuffer));
+ auto arraybufferValue = JSC::jsDynamicCast<JSC::JSArrayBuffer*>(JSC::JSValue::decode(encodedArraybuffer));
if (!arraybufferValue) {
- return napi_invalid_arg;
+ return napi_arraybuffer_expected;
}
auto dataView = JSC::DataView::create(arraybufferValue->impl(), byte_offset, length);
- *result = reinterpret_cast<napi_value>(dataView->wrap(globalObject, globalObject));
+
+ if (result != nullptr) {
+ *result = reinterpret_cast<napi_value>(dataView->wrap(globalObject, globalObject));
+ }
+
+ return napi_ok;
+}
+
+namespace Zig {
+
+template<typename Visitor>
+void NapiClass::visitChildrenImpl(JSCell* cell, Visitor& visitor)
+{
+ NapiClass* thisObject = jsCast<NapiClass*>(cell);
+ ASSERT_GC_OBJECT_INHERITS(thisObject, info());
+ Base::visitChildren(thisObject, visitor);
+}
+
+DEFINE_VISIT_CHILDREN(NapiClass);
+
+NapiClass* NapiClass::create(VM& vm, Zig::GlobalObject* globalObject, const char* utf8name,
+ size_t length,
+ napi_callback constructor,
+ void* data,
+ size_t property_count,
+ const napi_property_descriptor* properties)
+{
+ WTF::String name = WTF::String::fromUTF8(utf8name, length);
+ NativeExecutable* executable = vm.getHostFunction(reinterpret_cast<FFIFunction>(constructor), JSC::NoIntrinsic, callHostFunctionAsConstructor, nullptr, name);
+
+ Structure* structure = globalObject->NapiClassStructure();
+ NapiClass* napiClass = new (NotNull, allocateCell<NapiClass>(vm)) NapiClass(vm, executable, globalObject, structure);
+ napiClass->finishCreation(vm, executable, length, name, constructor, data, property_count, properties);
+ return napiClass;
+}
+
+CallData NapiClass::getConstructData(JSCell* cell)
+{
+ auto construct = JSC::jsCast<NapiClass*>(cell)->constructor();
+ if (!construct) {
+ return NapiClass::Base::getConstructData(cell);
+ }
+
+ CallData constructData;
+ constructData.type = CallData::Type::Native;
+ constructData.native.function = construct;
+ return constructData;
+}
+
+void NapiClass::finishCreation(VM& vm, NativeExecutable* executable, unsigned length, const String& name, napi_callback constructor,
+ void* data,
+ size_t property_count,
+ const napi_property_descriptor* properties)
+{
+ Base::finishCreation(vm, executable, length, name);
+ ASSERT(inherits(info()));
+ this->m_constructor = reinterpret_cast<FFIFunction>(constructor);
+ auto globalObject = reinterpret_cast<Zig::GlobalObject*>(this->globalObject());
+
+ // toStringTag + "prototype"
+ // size_t staticPropertyCount = 2;
+ // prototype always has "constructor",
+ size_t prototypePropertyCount = 2;
+
+ this->putDirect(vm, vm.propertyNames->name, jsString(vm, name), JSC::PropertyAttribute::DontEnum | 0);
+
+ auto clientData = WebCore::clientData(vm);
+
+ for (size_t i = 0; i < property_count; i++) {
+ const napi_property_descriptor& property = properties[i];
+ // staticPropertyCount += property.attributes & napi_static ? 1 : 0;
+ prototypePropertyCount += property.attributes & napi_static ? 0 : 1;
+ }
+
+ JSC::JSObject* prototype = JSC::constructEmptyObject(globalObject, globalObject->objectPrototype(), prototypePropertyCount);
+
+ for (size_t i = 0; i < property_count; i++) {
+ const napi_property_descriptor& property = properties[i];
+
+ if (property.attributes & napi_static) {
+ defineNapiProperty(globalObject, this, property);
+ } else {
+ defineNapiProperty(globalObject, prototype, property);
+ }
+ }
+
+ this->putDirect(vm, vm.propertyNames->prototype, prototype, JSC::PropertyAttribute::DontEnum | 0);
+ prototype->putDirect(vm, vm.propertyNames->constructor, this, JSC::PropertyAttribute::DontEnum | 0);
+ prototype->putDirect(vm, clientData->builtinNames().passwordPrivateName(), JSC::jsNumber(0), JSC::PropertyAttribute::DontEnum | 0);
+}
+}
+
+extern "C" napi_status napi_get_all_property_names(
+ napi_env env, napi_value objectNapi, napi_key_collection_mode key_mode,
+ napi_key_filter key_filter, napi_key_conversion key_conversion,
+ napi_value* result)
+{
+ DontEnumPropertiesMode jsc_key_mode = key_mode == napi_key_include_prototypes ? DontEnumPropertiesMode::Include : DontEnumPropertiesMode::Exclude;
+ PropertyNameMode jsc_property_mode = PropertyNameMode::StringsAndSymbols;
+ if (key_filter == napi_key_skip_symbols) {
+ jsc_property_mode = PropertyNameMode::Strings;
+ } else if (key_filter == napi_key_skip_strings) {
+ jsc_property_mode = PropertyNameMode::Symbols;
+ }
+
+ auto globalObject = reinterpret_cast<Zig::GlobalObject*>(env);
+ JSC::VM& vm = globalObject->vm();
+
+ auto objectValue = JSC::JSValue::decode(reinterpret_cast<EncodedJSValue>(objectNapi));
+ auto* object = objectValue.getObject();
+ if (!object) {
+ return napi_object_expected;
+ }
+
+ JSC::JSArray* exportKeys = ownPropertyKeys(globalObject, object, jsc_property_mode, jsc_key_mode, std::nullopt);
+ // TODO: filter
+ *result = toNapi(JSC::JSValue::encode(exportKeys));
+ return napi_ok;
+}
+
+extern "C" napi_status napi_define_class(napi_env env,
+ const char* utf8name,
+ size_t length,
+ napi_callback constructor,
+ void* data,
+ size_t property_count,
+ const napi_property_descriptor* properties,
+ napi_value* result)
+{
+ Zig::GlobalObject* globalObject = reinterpret_cast<Zig::GlobalObject*>(env);
+ JSC::VM& vm = globalObject->vm();
+
+ NapiClass* napiClass = NapiClass::create(vm, globalObject, utf8name, length, constructor, data, property_count, properties);
+ JSC::JSValue value = JSC::JSValue(napiClass);
+ if (data != nullptr) {
+ napiClass->dataPtr = data;
+ }
+
+ *result = reinterpret_cast<napi_value>(JSC::JSValue::encode(value));
+ return napi_ok;
+}
+
+extern "C" napi_status napi_coerce_to_string(napi_env env, napi_value value,
+ napi_value* result)
+{
+ if (UNLIKELY(result == nullptr)) {
+ return napi_invalid_arg;
+ }
+
+ Zig::GlobalObject* globalObject = reinterpret_cast<Zig::GlobalObject*>(env);
+ JSC::VM& vm = globalObject->vm();
+
+ auto scope = DECLARE_CATCH_SCOPE(vm);
+ JSC::JSValue jsValue = JSC::JSValue::decode(reinterpret_cast<JSC::EncodedJSValue>(value));
+
+ // .toString() can throw
+ JSC::JSValue resultValue = JSC::JSValue(jsValue.toString(globalObject));
+ *result = reinterpret_cast<napi_value>(JSC::JSValue::encode(resultValue));
+
+ if (UNLIKELY(scope.exception())) {
+ *result = reinterpret_cast<napi_value>(JSC::JSValue::encode(JSC::jsUndefined()));
+ return napi_generic_failure;
+ }
+ scope.clearException();
return napi_ok;
} \ No newline at end of file
diff --git a/src/javascript/jsc/bindings/napi.h b/src/javascript/jsc/bindings/napi.h
new file mode 100644
index 000000000..e547b22fa
--- /dev/null
+++ b/src/javascript/jsc/bindings/napi.h
@@ -0,0 +1,183 @@
+#pragma once
+
+namespace Zig {
+class GlobalObject;
+}
+
+#include "root.h"
+#include "JavaScriptCore/JSFunction.h"
+#include "JavaScriptCore/VM.h"
+
+#include "headers-handwritten.h"
+#include "BunClientData.h"
+#include "WebCoreJSBuiltinInternals.h"
+#include "JavaScriptCore/CallFrame.h"
+#include "js_native_api_types.h"
+#include "JavaScriptCore/JSWeakValue.h"
+#include "JSFFIFunction.h"
+
+namespace JSC {
+class JSGlobalObject;
+}
+
+namespace Zig {
+
+using namespace JSC;
+
+static inline JSValue toJS(napi_value val)
+{
+ return JSC::JSValue::decode(reinterpret_cast<JSC::EncodedJSValue>(val));
+}
+
+static inline Zig::GlobalObject* toJS(napi_env val)
+{
+ return reinterpret_cast<Zig::GlobalObject*>(val);
+}
+
+static inline napi_value toNapi(JSC::EncodedJSValue val)
+{
+ return reinterpret_cast<napi_value>(val);
+}
+
+static inline napi_value toNapi(JSC::JSValue val)
+{
+ return toNapi(JSC::JSValue::encode(val));
+}
+
+static inline napi_env toNapi(JSC::JSGlobalObject* val)
+{
+ return reinterpret_cast<napi_env>(val);
+}
+
+class NapiFinalizer {
+public:
+ void* finalize_hint = nullptr;
+ napi_finalize finalize_cb;
+
+ void call(JSC::JSGlobalObject* globalObject, void* data);
+};
+
+class NapiRef : public RefCounted<NapiRef>, public CanMakeWeakPtr<NapiRef> {
+ WTF_MAKE_FAST_ALLOCATED;
+
+public:
+ void ref();
+ void unref();
+ void clear();
+
+ NapiRef(JSC::JSGlobalObject* global, uint32_t count)
+ {
+ globalObject = JSC::Weak<JSC::JSGlobalObject>(global);
+ strongRef = {};
+ weakValueRef.clear();
+ refCount = count;
+ }
+
+ JSC::JSValue value() const
+ {
+ if (refCount == 0) {
+ if (!weakValueRef.isSet()) {
+ return JSC::JSValue {};
+ }
+
+ if (weakValue.isString()) {
+ return JSC::JSValue(weakValue.string());
+ }
+
+ if (weakValue.isObject()) {
+ return JSC::JSValue(weakValue.object());
+ }
+
+ return weakValue.primitive();
+ }
+
+ return strongRef.get();
+ }
+
+ ~NapiRef()
+ {
+ if (this->refCount > 0) {
+ this->refCount = 1;
+ this->unref();
+ }
+ }
+
+ JSC::Weak<JSC::JSGlobalObject> globalObject;
+ JSC::JSWeakValue weakValueRef;
+ JSC::Strong<JSC::Unknown> strongRef;
+ NapiFinalizer finalizer;
+ uint32_t refCount = 0;
+};
+
+static inline napi_ref toNapi(NapiRef* val)
+{
+ return reinterpret_cast<napi_ref>(val);
+}
+
+class NapiClass final : public JSC::JSFunction {
+public:
+ using Base = JSFunction;
+
+ static constexpr unsigned StructureFlags = Base::StructureFlags;
+ static constexpr bool needsDestruction = false;
+ static void destroy(JSCell* cell)
+ {
+ static_cast<NapiClass*>(cell)->NapiClass::~NapiClass();
+ }
+
+ template<typename, SubspaceAccess mode> static JSC::GCClient::IsoSubspace* subspaceFor(JSC::VM& vm)
+ {
+ if constexpr (mode == JSC::SubspaceAccess::Concurrently)
+ return nullptr;
+ return WebCore::subspaceForImpl<NapiClass, WebCore::UseCustomHeapCellType::No>(
+ vm,
+ [](auto& spaces) { return spaces.m_clientSubspaceForNapiClass.get(); },
+ [](auto& spaces, auto&& space) { spaces.m_clientSubspaceForNapiClass = WTFMove(space); },
+ [](auto& spaces) { return spaces.m_subspaceForNapiClass.get(); },
+ [](auto& spaces, auto&& space) { spaces.m_subspaceForNapiClass = WTFMove(space); });
+ }
+
+ DECLARE_EXPORT_INFO;
+
+ JS_EXPORT_PRIVATE static NapiClass* create(VM&, Zig::GlobalObject*, const char* utf8name,
+ size_t length,
+ napi_callback constructor,
+ void* data,
+ size_t property_count,
+ const napi_property_descriptor* properties);
+
+ static Structure* createStructure(VM& vm, JSGlobalObject* globalObject, JSValue prototype)
+ {
+ ASSERT(globalObject);
+ return Structure::create(vm, globalObject, prototype, TypeInfo(JSFunctionType, StructureFlags), info());
+ }
+
+ static CallData getConstructData(JSCell* cell);
+
+ FFIFunction constructor()
+ {
+ return m_constructor;
+ }
+
+ void* dataPtr = nullptr;
+ FFIFunction m_constructor = nullptr;
+
+private:
+ NapiClass(VM& vm, NativeExecutable* executable, JSC::JSGlobalObject* global, Structure* structure)
+ : Base(vm, executable, global, structure)
+ {
+ }
+ void finishCreation(VM&, NativeExecutable*, unsigned length, const String& name, napi_callback constructor,
+ void* data,
+ size_t property_count,
+ const napi_property_descriptor* properties);
+
+ DECLARE_VISIT_CHILDREN;
+};
+
+static inline NapiRef* toJS(napi_ref val)
+{
+ return reinterpret_cast<NapiRef*>(val);
+}
+
+} \ No newline at end of file
diff --git a/src/javascript/jsc/bindings/napi_external.cpp b/src/javascript/jsc/bindings/napi_external.cpp
new file mode 100644
index 000000000..15e46aa97
--- /dev/null
+++ b/src/javascript/jsc/bindings/napi_external.cpp
@@ -0,0 +1,50 @@
+
+
+// #pragma once
+
+// #include "root.h"
+
+// #include "BunBuiltinNames.h"
+// #include "BunClientData.h"
+
+// namespace Zig {
+
+// using namespace JSC;
+
+// class NapiExternal : public JSC::JSNonFinalObject {
+// using Base = JSC::JSNonFinalObject;
+
+// public:
+// NapiExternal(JSC::VM& vm, JSC::Structure* structure)
+// : Base(vm, structure)
+// {
+// }
+
+// DECLARE_INFO;
+
+// static constexpr unsigned StructureFlags = Base::StructureFlags;
+
+// template<typename CellType, SubspaceAccess> static GCClient::IsoSubspace* subspaceFor(VM& vm)
+// {
+// return &vm.plainObjectSpace();
+// }
+
+// static JSC::Structure* createStructure(JSC::VM& vm, JSC::JSGlobalObject* globalObject,
+// JSC::JSValue prototype)
+// {
+// return JSC::Structure::create(vm, globalObject, prototype,
+// JSC::TypeInfo(JSC::ObjectType, StructureFlags), info());
+// }
+
+// static NapiExternal* create(JSC::VM& vm, JSC::Structure* structure)
+// {
+// NapiExternal* accessor = new (NotNull, JSC::allocateCell<NapiExternal>(vm)) NapiExternal(vm, structure);
+// accessor->finishCreation(vm);
+// return accessor;
+// }
+
+// void finishCreation(JSC::VM& vm);
+// void* m_value;
+// };
+
+// } // namespace Zig \ No newline at end of file
diff --git a/src/javascript/jsc/bindings/napi_external.h b/src/javascript/jsc/bindings/napi_external.h
new file mode 100644
index 000000000..edac914f8
--- /dev/null
+++ b/src/javascript/jsc/bindings/napi_external.h
@@ -0,0 +1,64 @@
+
+
+#pragma once
+
+#include "root.h"
+
+#include "BunBuiltinNames.h"
+#include "BunClientData.h"
+
+namespace Zig {
+
+using namespace JSC;
+
+class NapiExternal : public JSC::JSNonFinalObject {
+ using Base = JSC::JSNonFinalObject;
+
+public:
+ NapiExternal(JSC::VM& vm, JSC::Structure* structure)
+ : Base(vm, structure)
+ {
+ }
+
+ DECLARE_INFO;
+
+ ~NapiExternal()
+ {
+ if (m_value) {
+ delete m_value;
+ }
+
+ static constexpr unsigned StructureFlags = Base::StructureFlags;
+
+ template<typename, SubspaceAccess mode> static JSC::GCClient::IsoSubspace* subspaceFor(JSC::VM & vm)
+ {
+ if constexpr (mode == JSC::SubspaceAccess::Concurrently)
+ return nullptr;
+ return WebCore::subspaceForImpl<JSNapiExternal, WebCore::UseCustomHeapCellType::No>(
+ vm,
+ [](auto& spaces) { return spaces.m_clientSubspaceForNapiExternal.get(); },
+ [](auto& spaces, auto&& space) { spaces.m_clientSubspaceForNapiExternal = WTFMove(space); },
+ [](auto& spaces) { return spaces.m_subspaceForNapiExternal.get(); },
+ [](auto& spaces, auto&& space) { spaces.m_subspaceForNapiExternal = WTFMove(space); });
+ }
+
+ static JSC::Structure* createStructure(JSC::VM & vm, JSC::JSGlobalObject * globalObject,
+ JSC::JSValue prototype)
+ {
+ return JSC::Structure::create(vm, globalObject, prototype,
+ JSC::TypeInfo(JSC::ObjectType, StructureFlags), info());
+ }
+
+ static NapiExternal* create(JSC::VM & vm, JSC::Structure * structure)
+ {
+ NapiExternal* accessor = new (NotNull, JSC::allocateCell<NapiExternal>(vm)) NapiExternal(vm, structure);
+ accessor->finishCreation(vm);
+ return accessor;
+ }
+
+ void finishCreation(JSC::VM & vm);
+ void* m_value;
+ void* finalizer_context;
+ };
+
+} // namespace Zig \ No newline at end of file
diff --git a/src/javascript/jsc/bindings/webcore/CommonAtomStrings.cpp b/src/javascript/jsc/bindings/webcore/CommonAtomStrings.cpp
new file mode 100644
index 000000000..57cdc3d24
--- /dev/null
+++ b/src/javascript/jsc/bindings/webcore/CommonAtomStrings.cpp
@@ -0,0 +1,52 @@
+/*
+ * Copyright (C) 2022 Apple Inc. All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ * 1. Redistributions of source code must retain the above copyright
+ * notice, this list of conditions and the following disclaimer.
+ * 2. Redistributions in binary form must reproduce the above copyright
+ * notice, this list of conditions and the following disclaimer in the
+ * documentation and/or other materials provided with the distribution.
+ *
+ * THIS SOFTWARE IS PROVIDED BY APPLE INC. AND ITS CONTRIBUTORS ``AS IS''
+ * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO,
+ * THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
+ * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL APPLE INC. OR ITS CONTRIBUTORS
+ * BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
+ * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
+ * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
+ * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
+ * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
+ * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF
+ * THE POSSIBILITY OF SUCH DAMAGE.
+ */
+
+#include "config.h"
+#include "CommonAtomStrings.h"
+
+namespace WebCore {
+
+#define DEFINE_COMMON_ATOM(atomName, atomValue) \
+ MainThreadLazyNeverDestroyed<const AtomString> atomName ## AtomData;
+#define INITIALIZE_COMMON_ATOM(atomName, atomValue) \
+ atomName ## AtomData.constructWithoutAccessCheck(atomValue ## _s);
+
+WEBCORE_COMMON_ATOM_STRINGS_FOR_EACH_KEYWORD(DEFINE_COMMON_ATOM)
+
+void initializeCommonAtomStrings()
+{
+ // Initialization is not thread safe, so this function must be called from the main thread first.
+ ASSERT(isUIThread());
+
+ static std::once_flag initializeKey;
+ std::call_once(initializeKey, [] {
+ WEBCORE_COMMON_ATOM_STRINGS_FOR_EACH_KEYWORD(INITIALIZE_COMMON_ATOM)
+ });
+}
+
+#undef DEFINE_COMMON_ATOM
+#undef INITIALIZE_COMMON_ATOM
+
+} // namespace WebCore
diff --git a/src/javascript/jsc/bindings/webcore/CommonAtomStrings.h b/src/javascript/jsc/bindings/webcore/CommonAtomStrings.h
new file mode 100644
index 000000000..0385f8222
--- /dev/null
+++ b/src/javascript/jsc/bindings/webcore/CommonAtomStrings.h
@@ -0,0 +1,72 @@
+/*
+ * Copyright (C) 2022 Apple Inc. All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ * 1. Redistributions of source code must retain the above copyright
+ * notice, this list of conditions and the following disclaimer.
+ * 2. Redistributions in binary form must reproduce the above copyright
+ * notice, this list of conditions and the following disclaimer in the
+ * documentation and/or other materials provided with the distribution.
+ *
+ * THIS SOFTWARE IS PROVIDED BY APPLE INC. AND ITS CONTRIBUTORS ``AS IS''
+ * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO,
+ * THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
+ * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL APPLE INC. OR ITS CONTRIBUTORS
+ * BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
+ * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
+ * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
+ * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
+ * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
+ * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF
+ * THE POSSIBILITY OF SUCH DAMAGE.
+ */
+
+#pragma once
+
+#include <wtf/NeverDestroyed.h>
+#include <wtf/text/AtomString.h>
+
+namespace WebCore {
+
+#define WEBCORE_COMMON_ATOM_STRINGS_FOR_EACH_KEYWORD(macro) \
+ macro(alternative, "alternative") \
+ macro(auto, "auto") \
+ macro(captions, "captions") \
+ macro(commentary, "commentary") \
+ macro(cssContentType, "text/css") \
+ macro(eager, "eager") \
+ macro(email, "email") \
+ macro(false, "false") \
+ macro(lazy, "lazy") \
+ macro(main, "main") \
+ macro(none, "none") \
+ macro(off, "off") \
+ macro(on, "on") \
+ macro(plaintextOnly, "plaintext-only") \
+ macro(reset, "reset") \
+ macro(search, "search") \
+ macro(star, "*") \
+ macro(submit, "submit") \
+ macro(subtitles, "subtitles") \
+ macro(tel, "tel") \
+ macro(text, "text") \
+ macro(textPlainContentType, "text/plain") \
+ macro(true, "true") \
+ macro(url, "url") \
+ macro(xml, "xml") \
+ macro(xmlns, "xmlns")
+
+
+#define DECLARE_COMMON_ATOM(atomName, atomValue) \
+ extern MainThreadLazyNeverDestroyed<const AtomString> atomName ## AtomData; \
+ inline const AtomString& atomName ## Atom() { return atomName ## AtomData.get(); }
+
+WEBCORE_COMMON_ATOM_STRINGS_FOR_EACH_KEYWORD(DECLARE_COMMON_ATOM)
+
+#undef DECLARE_COMMON_ATOM
+
+WEBCORE_EXPORT void initializeCommonAtomStrings();
+
+} // namespace WebCore
diff --git a/src/javascript/jsc/bindings/webcore/CustomEvent.h b/src/javascript/jsc/bindings/webcore/CustomEvent.h
index 355e2b1cd..53df6d985 100644
--- a/src/javascript/jsc/bindings/webcore/CustomEvent.h
+++ b/src/javascript/jsc/bindings/webcore/CustomEvent.h
@@ -27,7 +27,6 @@
#pragma once
#include "root.h"
-
#include "Event.h"
#include "JSValueInWrappedObject.h"
// #include "SerializedScriptValue.h"
@@ -63,4 +62,4 @@ private:
JSValueInWrappedObject m_cachedDetail;
};
-} // namespace WebCore
+} // namespace WebCore \ No newline at end of file
diff --git a/src/javascript/jsc/bindings/webcore/DOMClientIsoSubspaces.h b/src/javascript/jsc/bindings/webcore/DOMClientIsoSubspaces.h
index 3272f8c8a..3dbb03d00 100644
--- a/src/javascript/jsc/bindings/webcore/DOMClientIsoSubspaces.h
+++ b/src/javascript/jsc/bindings/webcore/DOMClientIsoSubspaces.h
@@ -18,6 +18,7 @@ public:
/* --- bun --- */
std::unique_ptr<GCClient::IsoSubspace> m_clientSubspaceForBuffer;
std::unique_ptr<GCClient::IsoSubspace> m_clientSubspaceForFFIFunction;
+ std::unique_ptr<GCClient::IsoSubspace> m_clientSubspaceForNapiClass;
/* --- bun --- */
std::unique_ptr<GCClient::IsoSubspace> m_clientSubspaceForGlobalObject;
diff --git a/src/javascript/jsc/bindings/webcore/DOMIsoSubspaces.h b/src/javascript/jsc/bindings/webcore/DOMIsoSubspaces.h
index 67c3ead85..d7391f49b 100644
--- a/src/javascript/jsc/bindings/webcore/DOMIsoSubspaces.h
+++ b/src/javascript/jsc/bindings/webcore/DOMIsoSubspaces.h
@@ -18,6 +18,7 @@ public:
/*-- BUN --*/
std::unique_ptr<IsoSubspace> m_subspaceForBuffer;
std::unique_ptr<IsoSubspace> m_subspaceForFFIFunction;
+ std::unique_ptr<IsoSubspace> m_subspaceForNapiClass;
/*-- BUN --*/
// std::unique_ptr<IsoSubspace> m_subspaceForTouch;
diff --git a/src/javascript/jsc/bindings/webcore/EventNames.cpp b/src/javascript/jsc/bindings/webcore/EventNames.cpp
index a15b086e2..42c4eb1cf 100644
--- a/src/javascript/jsc/bindings/webcore/EventNames.cpp
+++ b/src/javascript/jsc/bindings/webcore/EventNames.cpp
@@ -24,7 +24,7 @@
namespace WebCore {
#define INITIALIZE_EVENT_NAME(name) \
- name##Event(#name, AtomString::ConstructFromLiteral),
+ name##Event(makeAtomString(#name)),
EventNames::EventNames()
: DOM_EVENT_NAMES_FOR_EACH(INITIALIZE_EVENT_NAME) dummy(0)
diff --git a/src/javascript/jsc/bindings/webcore/HTTPParsers.cpp b/src/javascript/jsc/bindings/webcore/HTTPParsers.cpp
index d435cebf4..d49e7d820 100644
--- a/src/javascript/jsc/bindings/webcore/HTTPParsers.cpp
+++ b/src/javascript/jsc/bindings/webcore/HTTPParsers.cpp
@@ -10,13 +10,13 @@
* are met:
*
* 1. Redistributions of source code must retain the above copyright
- * notice, this list of conditions and the following disclaimer.
+ * notice, this list of conditions and the following disclaimer.
* 2. Redistributions in binary form must reproduce the above copyright
* notice, this list of conditions and the following disclaimer in the
- * documentation and/or other materials provided with the distribution.
+ * documentation and/or other materials provided with the distribution.
* 3. Neither the name of Apple Inc. ("Apple") nor the names of
* its contributors may be used to endorse or promote products derived
- * from this software without specific prior written permission.
+ * from this software without specific prior written permission.
*
* THIS SOFTWARE IS PROVIDED BY APPLE AND ITS CONTRIBUTORS "AS IS" AND ANY
* EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
@@ -33,9 +33,11 @@
#include "config.h"
#include "HTTPParsers.h"
+#include "CommonAtomStrings.h"
#include "HTTPHeaderField.h"
#include "HTTPHeaderNames.h"
#include "ParsedContentType.h"
+#include <wtf/CheckedArithmetic.h>
#include <wtf/DateMath.h>
#include <wtf/NeverDestroyed.h>
#include <wtf/text/StringBuilder.h>
@@ -86,7 +88,7 @@ static inline bool skipToken(const String& str, unsigned& pos, const char* token
}
// True if the expected equals sign is seen and there is more to follow.
-static inline bool skipEquals(const String& str, unsigned &pos)
+static inline bool skipEquals(const String& str, unsigned& pos)
{
return skipWhiteSpace(str, pos) && str[pos++] == '=' && skipWhiteSpace(str, pos);
}
@@ -150,7 +152,7 @@ bool isValidAcceptHeaderValue(const String& value)
if (RFC7230::isDelimiter(c))
return false;
}
-
+
return true;
}
@@ -159,8 +161,7 @@ static bool containsCORSUnsafeRequestHeaderBytes(const String& value)
for (unsigned i = 0; i < value.length(); ++i) {
UChar c = value[i];
// https://fetch.spec.whatwg.org/#cors-unsafe-request-header-byte
- if ((c < 0x20 && c != '\t') || (c == '"' || c == '(' || c == ')' || c == ':' || c == '<' || c == '>' || c == '?'
- || c == '@' || c == '[' || c == '\\' || c == ']' || c == 0x7B || c == '{' || c == '}' || c == 0x7F))
+ if ((c < 0x20 && c != '\t') || (c == '"' || c == '(' || c == ')' || c == ':' || c == '<' || c == '>' || c == '?' || c == '@' || c == '[' || c == '\\' || c == ']' || c == 0x7B || c == '{' || c == '}' || c == 0x7F))
return true;
}
@@ -168,6 +169,7 @@ static bool containsCORSUnsafeRequestHeaderBytes(const String& value)
}
// See RFC 7231, Section 5.3.5 and 3.1.3.2.
+// https://fetch.spec.whatwg.org/#cors-safelisted-request-header
bool isValidLanguageHeaderValue(const String& value)
{
for (unsigned i = 0; i < value.length(); ++i) {
@@ -176,11 +178,6 @@ bool isValidLanguageHeaderValue(const String& value)
continue;
return false;
}
-
- // FIXME: Validate further by splitting into language tags and optional quality
- // values (q=) and then check each language tag.
- // Language tags https://tools.ietf.org/html/rfc7231#section-3.1.3.1
- // Language tag syntax https://tools.ietf.org/html/bcp47#section-2.1
return true;
}
@@ -314,10 +311,9 @@ static const size_t maxInputSampleSize = 128;
template<typename CharType>
static String trimInputSample(CharType* p, size_t length)
{
- String s = String(p, std::min<size_t>(length, maxInputSampleSize));
- if (length > maxInputSampleSize)
- s.append(horizontalEllipsis);
- return s;
+ if (length <= maxInputSampleSize)
+ return String(p, length);
+ return makeString(StringView(p, length).left(maxInputSampleSize), horizontalEllipsis);
}
std::optional<WallTime> parseHTTPDate(const String& value)
@@ -335,7 +331,7 @@ std::optional<WallTime> parseHTTPDate(const String& value)
// that arises from quoted-string, nor does this function properly unquote
// attribute values. Further this function appears to process parameter names
// in a case-sensitive manner. (There are likely other bugs as well.)
-String filenameFromHTTPContentDisposition(StringView value)
+StringView filenameFromHTTPContentDisposition(StringView value)
{
for (auto keyValuePair : value.split(';')) {
size_t valueStartPos = keyValuePair.find('=');
@@ -346,14 +342,14 @@ String filenameFromHTTPContentDisposition(StringView value)
if (key.isEmpty() || key != "filename")
continue;
-
+
auto value = keyValuePair.substring(valueStartPos + 1).stripWhiteSpace();
// Remove quotes if there are any
if (value.length() > 1 && value[0] == '\"')
value = value.substring(1, value.length() - 2);
- return value.toString();
+ return value;
}
return String();
@@ -397,7 +393,7 @@ String extractMIMETypeFromMediaType(const String& mediaType)
return mediaType.substring(typeStart, typeEnd - typeStart);
}
-String extractCharsetFromMediaType(const String& mediaType)
+StringView extractCharsetFromMediaType(StringView mediaType)
{
unsigned charsetPos = 0, charsetLen = 0;
size_t pos = 0;
@@ -411,7 +407,7 @@ String extractCharsetFromMediaType(const String& mediaType)
}
// is what we found a beginning of a word?
- if (mediaType[pos-1] > ' ' && mediaType[pos-1] != ';') {
+ if (mediaType[pos - 1] > ' ' && mediaType[pos - 1] != ';') {
pos += 7;
continue;
}
@@ -419,18 +415,21 @@ String extractCharsetFromMediaType(const String& mediaType)
pos += 7;
// skip whitespace
- while (pos != length && mediaType[pos] <= ' ')
+ while (pos < length && mediaType[pos] <= ' ')
++pos;
+ if (pos >= length)
+ break;
+
if (mediaType[pos++] != '=') // this "charset" substring wasn't a parameter name, but there may be others
continue;
- while (pos != length && (mediaType[pos] <= ' ' || mediaType[pos] == '"' || mediaType[pos] == '\''))
+ while (pos < length && (mediaType[pos] <= ' ' || mediaType[pos] == '"' || mediaType[pos] == '\''))
++pos;
// we don't handle spaces within quoted parameter values, because charset names cannot have any
unsigned endpos = pos;
- while (pos != length && mediaType[endpos] > ' ' && mediaType[endpos] != '"' && mediaType[endpos] != '\'' && mediaType[endpos] != ';')
+ while (endpos < length && mediaType[endpos] > ' ' && mediaType[endpos] != '"' && mediaType[endpos] != '\'' && mediaType[endpos] != ';')
++endpos;
charsetPos = pos;
@@ -532,7 +531,7 @@ XSSProtectionDisposition parseXSSProtectionHeader(const String& header, String&
ContentTypeOptionsDisposition parseContentTypeOptionsHeader(StringView header)
{
StringView leftToken = header.left(header.find(','));
- if (equalLettersIgnoringASCIICase(stripLeadingAndTrailingHTTPSpaces(leftToken), "nosniff"))
+ if (equalLettersIgnoringASCIICase(stripLeadingAndTrailingHTTPSpaces(leftToken), "nosniff"_s))
return ContentTypeOptionsDisposition::Nosniff;
return ContentTypeOptionsDisposition::None;
}
@@ -562,11 +561,11 @@ XFrameOptionsDisposition parseXFrameOptionsHeader(StringView header)
for (auto currentHeader : header.split(',')) {
currentHeader = currentHeader.stripWhiteSpace();
XFrameOptionsDisposition currentValue = XFrameOptionsDisposition::None;
- if (equalLettersIgnoringASCIICase(currentHeader, "deny"))
+ if (equalLettersIgnoringASCIICase(currentHeader, "deny"_s))
currentValue = XFrameOptionsDisposition::Deny;
- else if (equalLettersIgnoringASCIICase(currentHeader, "sameorigin"))
+ else if (equalLettersIgnoringASCIICase(currentHeader, "sameorigin"_s))
currentValue = XFrameOptionsDisposition::SameOrigin;
- else if (equalLettersIgnoringASCIICase(currentHeader, "allowall"))
+ else if (equalLettersIgnoringASCIICase(currentHeader, "allowall"_s))
currentValue = XFrameOptionsDisposition::AllowAll;
else
currentValue = XFrameOptionsDisposition::Invalid;
@@ -597,7 +596,7 @@ std::optional<std::pair<StringView, HashMap<String, String>>> parseStructuredFie
break;
++index;
}
- StringView bareItem = header.substring(0, index);
+ StringView bareItem = header.left(index);
// Parse parameters (https://datatracker.ietf.org/doc/html/rfc8941#section-4.2.3.2).
HashMap<String, String> parameters;
@@ -619,8 +618,8 @@ std::optional<std::pair<StringView, HashMap<String, String>>> parseStructuredFie
break;
++index;
}
- String key = header.substring(keyStart, index - keyStart).toString();
- String value = "true";
+ StringView key = header.substring(keyStart, index - keyStart);
+ String value = trueAtom();
if (index < header.length() && header[index] == '=') {
++index; // Consume '='.
if (isASCIIAlpha(header[index]) || header[index] == '*') {
@@ -660,14 +659,14 @@ std::optional<std::pair<StringView, HashMap<String, String>>> parseStructuredFie
} else
return std::nullopt;
}
- parameters.set(WTFMove(key), WTFMove(value));
+ parameters.set(key.toString(), WTFMove(value));
}
if (index != header.length())
return std::nullopt;
return std::make_pair(bareItem, parameters);
}
-bool parseRange(const String& range, long long& rangeOffset, long long& rangeEnd, long long& rangeSuffixLength)
+bool parseRange(StringView range, long long& rangeOffset, long long& rangeEnd, long long& rangeSuffixLength)
{
// The format of "Range" header is defined in RFC 2616 Section 14.35.1.
// http://www.w3.org/Protocols/rfc2616/rfc2616-sec14.html#sec14.35.1
@@ -677,10 +676,10 @@ bool parseRange(const String& range, long long& rangeOffset, long long& rangeEnd
// The "bytes" unit identifier should be present.
static const unsigned bytesLength = 6;
- if (!startsWithLettersIgnoringASCIICase(range, "bytes="))
+ if (!startsWithLettersIgnoringASCIICase(range, "bytes="_s))
return false;
- // FIXME: The rest of this should use StringView.
- String byteRange = range.substring(bytesLength);
+
+ StringView byteRange = range.substring(bytesLength);
// The '-' character needs to be present.
int index = byteRange.find('-');
@@ -691,7 +690,7 @@ bool parseRange(const String& range, long long& rangeOffset, long long& rangeEnd
// Example:
// -500
if (!index) {
- if (auto value = parseInteger<long long>(StringView { byteRange }.substring(index + 1)))
+ if (auto value = parseInteger<long long>(byteRange.substring(index + 1)))
rangeSuffixLength = *value;
return true;
}
@@ -700,11 +699,11 @@ bool parseRange(const String& range, long long& rangeOffset, long long& rangeEnd
// Examples:
// 0-499
// 500-
- auto firstBytePos = parseInteger<long long>(StringView { byteRange }.left(index));
+ auto firstBytePos = parseInteger<long long>(byteRange.left(index));
if (!firstBytePos)
return false;
- auto lastBytePosStr = stripLeadingAndTrailingHTTPSpaces(StringView { byteRange }.substring(index + 1));
+ auto lastBytePosStr = stripLeadingAndTrailingHTTPSpaces(byteRange.substring(index + 1));
long long lastBytePos = -1;
if (!lastBytePosStr.isEmpty()) {
auto value = parseInteger<long long>(lastBytePosStr);
@@ -785,7 +784,7 @@ size_t parseHTTPHeader(const uint8_t* start, size_t length, String& failureReaso
default:
if (!isValidHeaderNameCharacter(*p)) {
if (name.size() < 1)
- failureReason = "Unexpected start character in header name";
+ failureReason = "Unexpected start character in header name"_s;
else
failureReason = makeString("Unexpected character in header name at ", trimInputSample(name.data(), name.size()));
return 0;
@@ -806,7 +805,8 @@ size_t parseHTTPHeader(const uint8_t* start, size_t length, String& failureReaso
nameSize = name.size();
nameStr = StringView(namePtr, nameSize);
- for (; p < end && *p == 0x20; p++) { }
+ for (; p < end && *p == 0x20; p++) {
+ }
for (; p < end; p++) {
switch (*p) {
@@ -877,7 +877,7 @@ bool isForbiddenHeaderName(const String& name)
break;
}
}
- return startsWithLettersIgnoringASCIICase(name, "sec-") || startsWithLettersIgnoringASCIICase(name, "proxy-");
+ return startsWithLettersIgnoringASCIICase(name, "sec-"_s) || startsWithLettersIgnoringASCIICase(name, "proxy-"_s);
}
// Implements <https://fetch.spec.whatwg.org/#no-cors-safelisted-request-header-name>.
@@ -901,19 +901,19 @@ bool isNoCORSSafelistedRequestHeaderName(const String& name)
// Implements <https://fetch.spec.whatwg.org/#privileged-no-cors-request-header-name>.
bool isPriviledgedNoCORSRequestHeaderName(const String& name)
{
- return equalLettersIgnoringASCIICase(name, "range");
+ return equalLettersIgnoringASCIICase(name, "range"_s);
}
// Implements <https://fetch.spec.whatwg.org/#forbidden-response-header-name>.
bool isForbiddenResponseHeaderName(const String& name)
{
- return equalLettersIgnoringASCIICase(name, "set-cookie") || equalLettersIgnoringASCIICase(name, "set-cookie2");
+ return equalLettersIgnoringASCIICase(name, "set-cookie"_s) || equalLettersIgnoringASCIICase(name, "set-cookie2"_s);
}
// Implements <https://fetch.spec.whatwg.org/#forbidden-method>.
bool isForbiddenMethod(const String& name)
{
- return equalLettersIgnoringASCIICase(name, "connect") || equalLettersIgnoringASCIICase(name, "trace") || equalLettersIgnoringASCIICase(name, "track");
+ return equalLettersIgnoringASCIICase(name, "connect"_s) || equalLettersIgnoringASCIICase(name, "trace"_s) || equalLettersIgnoringASCIICase(name, "track"_s);
}
bool isSimpleHeader(const String& name, const String& value)
@@ -942,7 +942,7 @@ bool isCrossOriginSafeHeader(HTTPHeaderName name, const HTTPHeaderSet& accessCon
default:
break;
}
- return accessControlExposeHeaderSet.contains(httpHeaderNameString(name).toStringWithoutCopying());
+ return accessControlExposeHeaderSet.contains<ASCIICaseInsensitiveStringViewHashTranslator>(httpHeaderNameString(name));
}
bool isCrossOriginSafeHeader(const String& name, const HTTPHeaderSet& accessControlExposeHeaderSet)
@@ -954,9 +954,47 @@ bool isCrossOriginSafeHeader(const String& name, const HTTPHeaderSet& accessCont
return accessControlExposeHeaderSet.contains(name);
}
+static bool isSimpleRangeHeaderValue(const String& value)
+{
+ if (!value.startsWith("bytes="_s))
+ return false;
+
+ unsigned start = 0;
+ unsigned end = 0;
+ bool hasHyphen = false;
+
+ for (size_t cptr = 6; cptr < value.length(); ++cptr) {
+ auto character = value[cptr];
+ if (character >= '0' && character <= '9') {
+ if (productOverflows<unsigned>(hasHyphen ? end : start, 10))
+ return false;
+ auto newDecimal = (hasHyphen ? end : start) * 10;
+ auto sum = Checked<unsigned, RecordOverflow>(newDecimal) + Checked<unsigned, RecordOverflow>(character - '0');
+ if (sum.hasOverflowed())
+ return false;
+
+ if (hasHyphen)
+ end = sum.value();
+ else
+ start = sum.value();
+ continue;
+ }
+ if (character == '-' && !hasHyphen) {
+ hasHyphen = true;
+ continue;
+ }
+ return false;
+ }
+
+ return hasHyphen && (!end || start < end);
+}
+
// Implements https://fetch.spec.whatwg.org/#cors-safelisted-request-header
bool isCrossOriginSafeRequestHeader(HTTPHeaderName name, const String& value)
{
+ if (value.length() > 128)
+ return false;
+
switch (name) {
case HTTPHeaderName::Accept:
if (!isValidAcceptHeaderValue(value))
@@ -975,15 +1013,19 @@ bool isCrossOriginSafeRequestHeader(HTTPHeaderName name, const String& value)
if (!parsedContentType)
return false;
String mimeType = parsedContentType->mimeType();
- if (!(equalLettersIgnoringASCIICase(mimeType, "application/x-www-form-urlencoded") || equalLettersIgnoringASCIICase(mimeType, "multipart/form-data") || equalLettersIgnoringASCIICase(mimeType, "text/plain")))
+ if (!(equalLettersIgnoringASCIICase(mimeType, "application/x-www-form-urlencoded"_s) || equalLettersIgnoringASCIICase(mimeType, "multipart/form-data"_s) || equalLettersIgnoringASCIICase(mimeType, "text/plain"_s)))
return false;
break;
}
+ case HTTPHeaderName::Range:
+ if (!isSimpleRangeHeaderValue(value))
+ return false;
+ break;
default:
// FIXME: Should we also make safe other headers (DPR, Downlink, Save-Data...)? That would require validating their values.
return false;
}
- return value.length() <= 128;
+ return true;
}
// Implements <https://fetch.spec.whatwg.org/#concept-method-normalize>.
@@ -991,7 +1033,7 @@ String normalizeHTTPMethod(const String& method)
{
const ASCIILiteral methods[] = { "DELETE"_s, "GET"_s, "HEAD"_s, "OPTIONS"_s, "POST"_s, "PUT"_s };
for (auto value : methods) {
- if (equalIgnoringASCIICase(method, value.characters())) {
+ if (equalIgnoringASCIICase(method, value)) {
// Don't bother allocating a new string if it's already all uppercase.
if (method == value)
break;
@@ -1006,7 +1048,7 @@ bool isSafeMethod(const String& method)
{
const ASCIILiteral safeMethods[] = { "GET"_s, "HEAD"_s, "OPTIONS"_s, "TRACE"_s };
for (auto value : safeMethods) {
- if (equalIgnoringASCIICase(method, value.characters()))
+ if (equalIgnoringASCIICase(method, value))
return true;
}
return false;
@@ -1031,4 +1073,4 @@ CrossOriginResourcePolicy parseCrossOriginResourcePolicyHeader(StringView header
return CrossOriginResourcePolicy::Invalid;
}
-}
+} \ No newline at end of file
diff --git a/src/javascript/jsc/bindings/webcore/HTTPParsers.h b/src/javascript/jsc/bindings/webcore/HTTPParsers.h
index 920a5a5b6..917ab2eae 100644
--- a/src/javascript/jsc/bindings/webcore/HTTPParsers.h
+++ b/src/javascript/jsc/bindings/webcore/HTTPParsers.h
@@ -8,13 +8,13 @@
* are met:
*
* 1. Redistributions of source code must retain the above copyright
- * notice, this list of conditions and the following disclaimer.
+ * notice, this list of conditions and the following disclaimer.
* 2. Redistributions in binary form must reproduce the above copyright
* notice, this list of conditions and the following disclaimer in the
- * documentation and/or other materials provided with the distribution.
+ * documentation and/or other materials provided with the distribution.
* 3. Neither the name of Apple Inc. ("Apple") nor the names of
* its contributors may be used to endorse or promote products derived
- * from this software without specific prior written permission.
+ * from this software without specific prior written permission.
*
* THIS SOFTWARE IS PROVIDED BY APPLE AND ITS CONTRIBUTORS "AS IS" AND ANY
* EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
@@ -79,9 +79,9 @@ WEBCORE_EXPORT bool isValidUserAgentHeaderValue(const String&);
bool isValidHTTPToken(const String&);
bool isValidHTTPToken(StringView);
std::optional<WallTime> parseHTTPDate(const String&);
-String filenameFromHTTPContentDisposition(StringView);
+StringView filenameFromHTTPContentDisposition(StringView);
WEBCORE_EXPORT String extractMIMETypeFromMediaType(const String&);
-String extractCharsetFromMediaType(const String&);
+StringView extractCharsetFromMediaType(const String&);
XSSProtectionDisposition parseXSSProtectionHeader(const String& header, String& failureReason, unsigned& failurePosition, String& reportURL);
AtomString extractReasonPhraseFromHTTPStatusLine(const String&);
WEBCORE_EXPORT XFrameOptionsDisposition parseXFrameOptionsHeader(StringView);
@@ -164,13 +164,13 @@ std::optional<HashSet<String, HashType>> parseAccessControlAllowList(const Strin
while ((end = string.find(',', start)) != notFound) {
if (start != end) {
if (!addToAccessControlAllowList(string, start, end - 1, set))
- return { };
+ return {};
}
start = end + 1;
}
if (start != string.length()) {
if (!addToAccessControlAllowList(string, start, string.length() - 1, set))
- return { };
+ return {};
}
return set;
}
diff --git a/src/javascript/jsc/bindings/webcore/JSAbortAlgorithm.cpp b/src/javascript/jsc/bindings/webcore/JSAbortAlgorithm.cpp
index 0d7765ddf..920b05ee5 100644
--- a/src/javascript/jsc/bindings/webcore/JSAbortAlgorithm.cpp
+++ b/src/javascript/jsc/bindings/webcore/JSAbortAlgorithm.cpp
@@ -25,12 +25,11 @@
#include "JSDOMExceptionHandling.h"
#include "ScriptExecutionContext.h"
-
namespace WebCore {
using namespace JSC;
JSAbortAlgorithm::JSAbortAlgorithm(VM& vm, JSObject* callback)
- : AbortAlgorithm(jsCast<JSDOMGlobalObject*>(callback->globalObject(vm))->scriptExecutionContext())
+ : AbortAlgorithm(jsCast<JSDOMGlobalObject*>(callback->globalObject())->scriptExecutionContext())
, m_data(new JSCallbackDataStrong(vm, callback, this))
{
}
@@ -70,9 +69,9 @@ CallbackResult<typename IDLUndefined::ImplementationType> JSAbortAlgorithm::hand
if (returnedException) {
reportException(&lexicalGlobalObject, returnedException);
return CallbackResultType::ExceptionThrown;
- }
+ }
- return { };
+ return {};
}
JSC::JSValue toJS(AbortAlgorithm& impl)
diff --git a/src/javascript/jsc/bindings/webcore/JSAbortController.cpp b/src/javascript/jsc/bindings/webcore/JSAbortController.cpp
index afd63ff5d..4411d07bd 100644
--- a/src/javascript/jsc/bindings/webcore/JSAbortController.cpp
+++ b/src/javascript/jsc/bindings/webcore/JSAbortController.cpp
@@ -163,7 +163,7 @@ JSAbortController::JSAbortController(Structure* structure, JSDOMGlobalObject& gl
void JSAbortController::finishCreation(VM& vm)
{
Base::finishCreation(vm);
- ASSERT(inherits(vm, info()));
+ ASSERT(inherits(info()));
// static_assert(!std::is_base_of<ActiveDOMObject, AbortController>::value, "Interface is not marked as [ActiveDOMObject] even though implementation class subclasses ActiveDOMObject.");
}
@@ -193,7 +193,7 @@ JSC_DEFINE_CUSTOM_GETTER(jsAbortControllerConstructor, (JSGlobalObject * lexical
{
VM& vm = JSC::getVM(lexicalGlobalObject);
auto throwScope = DECLARE_THROW_SCOPE(vm);
- auto* prototype = jsDynamicCast<JSAbortControllerPrototype*>(vm, JSValue::decode(thisValue));
+ auto* prototype = jsDynamicCast<JSAbortControllerPrototype*>(JSValue::decode(thisValue));
if (UNLIKELY(!prototype))
return throwVMTypeError(lexicalGlobalObject, throwScope);
return JSValue::encode(JSAbortController::getConstructor(JSC::getVM(lexicalGlobalObject), prototype->globalObject()));
@@ -287,7 +287,7 @@ JSC::JSValue toJS(JSC::JSGlobalObject* lexicalGlobalObject, JSDOMGlobalObject* g
AbortController* JSAbortController::toWrapped(JSC::VM& vm, JSC::JSValue value)
{
- if (auto* wrapper = jsDynamicCast<JSAbortController*>(vm, value))
+ if (auto* wrapper = jsDynamicCast<JSAbortController*>(value))
return &wrapper->wrapped();
return nullptr;
}
diff --git a/src/javascript/jsc/bindings/webcore/JSAbortSignal.cpp b/src/javascript/jsc/bindings/webcore/JSAbortSignal.cpp
index 5738bcc25..ba7b3c69f 100644
--- a/src/javascript/jsc/bindings/webcore/JSAbortSignal.cpp
+++ b/src/javascript/jsc/bindings/webcore/JSAbortSignal.cpp
@@ -167,7 +167,7 @@ JSAbortSignal::JSAbortSignal(Structure* structure, JSDOMGlobalObject& globalObje
void JSAbortSignal::finishCreation(VM& vm)
{
Base::finishCreation(vm);
- ASSERT(inherits(vm, info()));
+ ASSERT(inherits(info()));
}
JSObject* JSAbortSignal::createPrototype(VM& vm, JSDOMGlobalObject& globalObject)
@@ -189,7 +189,7 @@ JSC_DEFINE_CUSTOM_GETTER(jsAbortSignalConstructor, (JSGlobalObject * lexicalGlob
{
VM& vm = JSC::getVM(lexicalGlobalObject);
auto throwScope = DECLARE_THROW_SCOPE(vm);
- auto* prototype = jsDynamicCast<JSAbortSignalPrototype*>(vm, JSValue::decode(thisValue));
+ auto* prototype = jsDynamicCast<JSAbortSignalPrototype*>(JSValue::decode(thisValue));
if (UNLIKELY(!prototype))
return throwVMTypeError(lexicalGlobalObject, throwScope);
return JSValue::encode(JSAbortSignal::getConstructor(JSC::getVM(lexicalGlobalObject), prototype->globalObject()));
@@ -416,7 +416,7 @@ JSC::JSValue toJS(JSC::JSGlobalObject* lexicalGlobalObject, JSDOMGlobalObject* g
AbortSignal* JSAbortSignal::toWrapped(JSC::VM& vm, JSC::JSValue value)
{
- if (auto* wrapper = jsDynamicCast<JSAbortSignal*>(vm, value))
+ if (auto* wrapper = jsDynamicCast<JSAbortSignal*>(value))
return &wrapper->wrapped();
return nullptr;
}
diff --git a/src/javascript/jsc/bindings/webcore/JSAddEventListenerOptions.cpp b/src/javascript/jsc/bindings/webcore/JSAddEventListenerOptions.cpp
index 9eaa310a7..6ef60b2a3 100644
--- a/src/javascript/jsc/bindings/webcore/JSAddEventListenerOptions.cpp
+++ b/src/javascript/jsc/bindings/webcore/JSAddEventListenerOptions.cpp
@@ -26,7 +26,6 @@
#include "JSDOMConvertInterface.h"
#include <JavaScriptCore/JSCInlines.h>
-
namespace WebCore {
using namespace JSC;
@@ -38,54 +37,54 @@ template<> AddEventListenerOptions convertDictionary<AddEventListenerOptions>(JS
auto* object = isNullOrUndefined ? nullptr : value.getObject();
if (UNLIKELY(!isNullOrUndefined && !object)) {
throwTypeError(&lexicalGlobalObject, throwScope);
- return { };
+ return {};
}
AddEventListenerOptions result;
JSValue captureValue;
if (isNullOrUndefined)
captureValue = jsUndefined();
else {
- captureValue = object->get(&lexicalGlobalObject, Identifier::fromString(vm, "capture"));
- RETURN_IF_EXCEPTION(throwScope, { });
+ captureValue = object->get(&lexicalGlobalObject, Identifier::fromString(vm, "capture"_s));
+ RETURN_IF_EXCEPTION(throwScope, {});
}
if (!captureValue.isUndefined()) {
result.capture = convert<IDLBoolean>(lexicalGlobalObject, captureValue);
- RETURN_IF_EXCEPTION(throwScope, { });
+ RETURN_IF_EXCEPTION(throwScope, {});
} else
result.capture = false;
JSValue onceValue;
if (isNullOrUndefined)
onceValue = jsUndefined();
else {
- onceValue = object->get(&lexicalGlobalObject, Identifier::fromString(vm, "once"));
- RETURN_IF_EXCEPTION(throwScope, { });
+ onceValue = object->get(&lexicalGlobalObject, Identifier::fromString(vm, "once"_s));
+ RETURN_IF_EXCEPTION(throwScope, {});
}
if (!onceValue.isUndefined()) {
result.once = convert<IDLBoolean>(lexicalGlobalObject, onceValue);
- RETURN_IF_EXCEPTION(throwScope, { });
+ RETURN_IF_EXCEPTION(throwScope, {});
} else
result.once = false;
JSValue passiveValue;
if (isNullOrUndefined)
passiveValue = jsUndefined();
else {
- passiveValue = object->get(&lexicalGlobalObject, Identifier::fromString(vm, "passive"));
- RETURN_IF_EXCEPTION(throwScope, { });
+ passiveValue = object->get(&lexicalGlobalObject, Identifier::fromString(vm, "passive"_s));
+ RETURN_IF_EXCEPTION(throwScope, {});
}
if (!passiveValue.isUndefined()) {
result.passive = convert<IDLBoolean>(lexicalGlobalObject, passiveValue);
- RETURN_IF_EXCEPTION(throwScope, { });
+ RETURN_IF_EXCEPTION(throwScope, {});
}
JSValue signalValue;
if (isNullOrUndefined)
signalValue = jsUndefined();
else {
- signalValue = object->get(&lexicalGlobalObject, Identifier::fromString(vm, "signal"));
- RETURN_IF_EXCEPTION(throwScope, { });
+ signalValue = object->get(&lexicalGlobalObject, Identifier::fromString(vm, "signal"_s));
+ RETURN_IF_EXCEPTION(throwScope, {});
}
if (!signalValue.isUndefined()) {
result.signal = convert<IDLInterface<AbortSignal>>(lexicalGlobalObject, signalValue);
- RETURN_IF_EXCEPTION(throwScope, { });
+ RETURN_IF_EXCEPTION(throwScope, {});
}
return result;
}
diff --git a/src/javascript/jsc/bindings/webcore/JSCallbackData.cpp b/src/javascript/jsc/bindings/webcore/JSCallbackData.cpp
index e0cf4a9e9..671f168f7 100644
--- a/src/javascript/jsc/bindings/webcore/JSCallbackData.cpp
+++ b/src/javascript/jsc/bindings/webcore/JSCallbackData.cpp
@@ -47,7 +47,7 @@ JSValue JSCallbackData::invokeCallback(VM& vm, JSObject* callback, JSValue thisV
// https://webidl.spec.whatwg.org/#ref-for-prepare-to-run-script makes callback's [[Realm]] a running JavaScript execution context,
// which is used for creating TypeError objects: https://tc39.es/ecma262/#sec-ecmascript-function-objects-call-thisargument-argumentslist (step 4).
- JSGlobalObject* lexicalGlobalObject = callback->globalObject(vm);
+ JSGlobalObject* lexicalGlobalObject = callback->globalObject();
auto scope = DECLARE_CATCH_SCOPE(vm);
JSValue function;
@@ -55,7 +55,7 @@ JSValue JSCallbackData::invokeCallback(VM& vm, JSObject* callback, JSValue thisV
if (method != CallbackType::Object) {
function = callback;
- callData = getCallData(vm, callback);
+ callData = getCallData(callback);
}
if (callData.type == CallData::Type::None) {
if (method == CallbackType::Function) {
@@ -71,7 +71,7 @@ JSValue JSCallbackData::invokeCallback(VM& vm, JSObject* callback, JSValue thisV
return JSValue();
}
- callData = getCallData(vm, function);
+ callData = getCallData(function);
if (callData.type == CallData::Type::None) {
returnedException = JSC::Exception::create(vm, createTypeError(lexicalGlobalObject, makeString("'", String(functionName.uid()), "' property of callback interface should be callable")));
return JSValue();
diff --git a/src/javascript/jsc/bindings/webcore/JSCustomEvent.cpp b/src/javascript/jsc/bindings/webcore/JSCustomEvent.cpp
index 35f51ba4b..843211d8d 100644
--- a/src/javascript/jsc/bindings/webcore/JSCustomEvent.cpp
+++ b/src/javascript/jsc/bindings/webcore/JSCustomEvent.cpp
@@ -66,7 +66,7 @@ template<> CustomEvent::Init convertDictionary<CustomEvent::Init>(JSGlobalObject
if (isNullOrUndefined)
bubblesValue = jsUndefined();
else {
- bubblesValue = object->get(&lexicalGlobalObject, Identifier::fromString(vm, "bubbles"));
+ bubblesValue = object->get(&lexicalGlobalObject, Identifier::fromString(vm, "bubbles"_s));
RETURN_IF_EXCEPTION(throwScope, {});
}
if (!bubblesValue.isUndefined()) {
@@ -78,7 +78,7 @@ template<> CustomEvent::Init convertDictionary<CustomEvent::Init>(JSGlobalObject
if (isNullOrUndefined)
cancelableValue = jsUndefined();
else {
- cancelableValue = object->get(&lexicalGlobalObject, Identifier::fromString(vm, "cancelable"));
+ cancelableValue = object->get(&lexicalGlobalObject, Identifier::fromString(vm, "cancelable"_s));
RETURN_IF_EXCEPTION(throwScope, {});
}
if (!cancelableValue.isUndefined()) {
@@ -90,7 +90,7 @@ template<> CustomEvent::Init convertDictionary<CustomEvent::Init>(JSGlobalObject
if (isNullOrUndefined)
composedValue = jsUndefined();
else {
- composedValue = object->get(&lexicalGlobalObject, Identifier::fromString(vm, "composed"));
+ composedValue = object->get(&lexicalGlobalObject, Identifier::fromString(vm, "composed"_s));
RETURN_IF_EXCEPTION(throwScope, {});
}
if (!composedValue.isUndefined()) {
@@ -102,7 +102,7 @@ template<> CustomEvent::Init convertDictionary<CustomEvent::Init>(JSGlobalObject
if (isNullOrUndefined)
detailValue = jsUndefined();
else {
- detailValue = object->get(&lexicalGlobalObject, Identifier::fromString(vm, "detail"));
+ detailValue = object->get(&lexicalGlobalObject, Identifier::fromString(vm, "detail"_s));
RETURN_IF_EXCEPTION(throwScope, {});
}
if (!detailValue.isUndefined()) {
@@ -165,12 +165,12 @@ template<> EncodedJSValue JSC_HOST_CALL_ATTRIBUTES JSCustomEventDOMConstructor::
if (UNLIKELY(callFrame->argumentCount() < 1))
return throwVMError(lexicalGlobalObject, throwScope, createNotEnoughArgumentsError(lexicalGlobalObject));
EnsureStillAliveScope argument0 = callFrame->uncheckedArgument(0);
- auto type = convert<IDLDOMString>(*lexicalGlobalObject, argument0.value());
+ auto type = convert<IDLAtomStringAdaptor<IDLDOMString>>(*lexicalGlobalObject, argument0.value());
RETURN_IF_EXCEPTION(throwScope, encodedJSValue());
EnsureStillAliveScope argument1 = callFrame->argument(1);
auto eventInitDict = convert<IDLDictionary<CustomEvent::Init>>(*lexicalGlobalObject, argument1.value());
RETURN_IF_EXCEPTION(throwScope, encodedJSValue());
- auto object = CustomEvent::create(WTFMove(type), WTFMove(eventInitDict));
+ auto object = CustomEvent::create(type, WTFMove(eventInitDict));
if constexpr (IsExceptionOr<decltype(object)>)
RETURN_IF_EXCEPTION(throwScope, {});
static_assert(TypeOrExceptionOrUnderlyingType<decltype(object)>::isRef);
@@ -226,7 +226,7 @@ JSCustomEvent::JSCustomEvent(Structure* structure, JSDOMGlobalObject& globalObje
void JSCustomEvent::finishCreation(VM& vm)
{
Base::finishCreation(vm);
- ASSERT(inherits(vm, info()));
+ ASSERT(inherits(info()));
// static_assert(!std::is_base_of<ActiveDOMObject, CustomEvent>::value, "Interface is not marked as [ActiveDOMObject] even though implementation class subclasses ActiveDOMObject.");
}
@@ -250,7 +250,7 @@ JSC_DEFINE_CUSTOM_GETTER(jsCustomEventConstructor, (JSGlobalObject * lexicalGlob
{
VM& vm = JSC::getVM(lexicalGlobalObject);
auto throwScope = DECLARE_THROW_SCOPE(vm);
- auto* prototype = jsDynamicCast<JSCustomEventPrototype*>(vm, JSValue::decode(thisValue));
+ auto* prototype = jsDynamicCast<JSCustomEventPrototype*>(JSValue::decode(thisValue));
if (UNLIKELY(!prototype))
return throwVMTypeError(lexicalGlobalObject, throwScope);
return JSValue::encode(JSCustomEvent::getConstructor(JSC::getVM(lexicalGlobalObject), prototype->globalObject()));
@@ -277,7 +277,7 @@ static inline JSC::EncodedJSValue jsCustomEventPrototypeFunction_initCustomEvent
if (UNLIKELY(callFrame->argumentCount() < 1))
return throwVMError(lexicalGlobalObject, throwScope, createNotEnoughArgumentsError(lexicalGlobalObject));
EnsureStillAliveScope argument0 = callFrame->uncheckedArgument(0);
- auto type = convert<IDLDOMString>(*lexicalGlobalObject, argument0.value());
+ auto type = convert<IDLAtomStringAdaptor<IDLDOMString>>(*lexicalGlobalObject, argument0.value());
RETURN_IF_EXCEPTION(throwScope, encodedJSValue());
EnsureStillAliveScope argument1 = callFrame->argument(1);
auto bubbles = convert<IDLBoolean>(*lexicalGlobalObject, argument1.value());
@@ -288,7 +288,7 @@ static inline JSC::EncodedJSValue jsCustomEventPrototypeFunction_initCustomEvent
EnsureStillAliveScope argument3 = callFrame->argument(3);
auto detail = argument3.value().isUndefined() ? jsNull() : convert<IDLAny>(*lexicalGlobalObject, argument3.value());
RETURN_IF_EXCEPTION(throwScope, encodedJSValue());
- RELEASE_AND_RETURN(throwScope, JSValue::encode(toJS<IDLUndefined>(*lexicalGlobalObject, throwScope, [&]() -> decltype(auto) { return impl.initCustomEvent(WTFMove(type), WTFMove(bubbles), WTFMove(cancelable), WTFMove(detail)); })));
+ RELEASE_AND_RETURN(throwScope, JSValue::encode(toJS<IDLUndefined>(*lexicalGlobalObject, throwScope, [&]() -> decltype(auto) { return impl.initCustomEvent(type, WTFMove(bubbles), WTFMove(cancelable), WTFMove(detail)); })));
}
JSC_DEFINE_HOST_FUNCTION(jsCustomEventPrototypeFunction_initCustomEvent, (JSGlobalObject * lexicalGlobalObject, CallFrame* callFrame))
diff --git a/src/javascript/jsc/bindings/webcore/JSDOMCastThisValue.h b/src/javascript/jsc/bindings/webcore/JSDOMCastThisValue.h
index ada862b72..d7028c4b5 100644
--- a/src/javascript/jsc/bindings/webcore/JSDOMCastThisValue.h
+++ b/src/javascript/jsc/bindings/webcore/JSDOMCastThisValue.h
@@ -48,7 +48,7 @@ JSClass* castThisValue(JSC::JSGlobalObject& lexicalGlobalObject, JSC::JSValue th
if constexpr (std::is_base_of_v<JSDOMGlobalObject, JSClass>)
return toJSDOMGlobalObject<JSClass>(vm, thisValue.isUndefinedOrNull() ? JSC::JSValue(&lexicalGlobalObject) : thisValue);
else
- return JSC::jsDynamicCast<JSClass*>(vm, thisValue);
+ return JSC::jsDynamicCast<JSClass*>(thisValue);
}
}
diff --git a/src/javascript/jsc/bindings/webcore/JSDOMConstructor.h b/src/javascript/jsc/bindings/webcore/JSDOMConstructor.h
index af969de89..680d71a4e 100644
--- a/src/javascript/jsc/bindings/webcore/JSDOMConstructor.h
+++ b/src/javascript/jsc/bindings/webcore/JSDOMConstructor.h
@@ -47,7 +47,7 @@ private:
void finishCreation(JSC::VM&, JSDOMGlobalObject&);
// Usually defined for each specialization class.
- void initializeProperties(JSC::VM&, JSDOMGlobalObject&) { }
+ void initializeProperties(JSC::VM&, JSDOMGlobalObject&) {}
};
template<typename JSClass> inline JSDOMConstructor<JSClass>* JSDOMConstructor<JSClass>::create(JSC::VM& vm, JSC::Structure* structure, JSDOMGlobalObject& globalObject)
@@ -65,7 +65,7 @@ template<typename JSClass> inline JSC::Structure* JSDOMConstructor<JSClass>::cre
template<typename JSClass> inline void JSDOMConstructor<JSClass>::finishCreation(JSC::VM& vm, JSDOMGlobalObject& globalObject)
{
Base::finishCreation(vm);
- ASSERT(inherits(vm, info()));
+ ASSERT(inherits(info()));
initializeProperties(vm, globalObject);
}
diff --git a/src/javascript/jsc/bindings/webcore/JSDOMConstructorNotCallable.h b/src/javascript/jsc/bindings/webcore/JSDOMConstructorNotCallable.h
index da94a3f48..779bf8876 100644
--- a/src/javascript/jsc/bindings/webcore/JSDOMConstructorNotCallable.h
+++ b/src/javascript/jsc/bindings/webcore/JSDOMConstructorNotCallable.h
@@ -78,7 +78,7 @@ template<typename JSClass> inline JSC::Structure* JSDOMConstructorNotCallable<JS
template<typename JSClass> inline void JSDOMConstructorNotCallable<JSClass>::finishCreation(JSC::VM& vm, JSDOMGlobalObject& globalObject)
{
Base::finishCreation(vm);
- ASSERT(inherits(vm, info()));
+ ASSERT(inherits(info()));
initializeProperties(vm, globalObject);
}
diff --git a/src/javascript/jsc/bindings/webcore/JSDOMConstructorNotConstructable.h b/src/javascript/jsc/bindings/webcore/JSDOMConstructorNotConstructable.h
index 55d4e7792..ac173d0fe 100644
--- a/src/javascript/jsc/bindings/webcore/JSDOMConstructorNotConstructable.h
+++ b/src/javascript/jsc/bindings/webcore/JSDOMConstructorNotConstructable.h
@@ -62,7 +62,7 @@ template<typename JSClass> inline JSC::Structure* JSDOMConstructorNotConstructab
template<typename JSClass> inline void JSDOMConstructorNotConstructable<JSClass>::finishCreation(JSC::VM& vm, JSDOMGlobalObject& globalObject)
{
Base::finishCreation(vm);
- ASSERT(inherits(vm, info()));
+ ASSERT(inherits(info()));
initializeProperties(vm, globalObject);
}
diff --git a/src/javascript/jsc/bindings/webcore/JSDOMConvertBase.h b/src/javascript/jsc/bindings/webcore/JSDOMConvertBase.h
index 928e79b99..8cab2e7d8 100644
--- a/src/javascript/jsc/bindings/webcore/JSDOMConvertBase.h
+++ b/src/javascript/jsc/bindings/webcore/JSDOMConvertBase.h
@@ -26,9 +26,9 @@
#pragma once
#include "root.h"
#include "ZigGlobalObject.h"
-
+#include "JSDOMGlobalObject.h"
#include "JSDOMExceptionHandling.h"
-#include "JavaScriptCore/Error.h"
+#include <JavaScriptCore/Error.h>
namespace WebCore {
@@ -265,4 +265,4 @@ template<typename T> struct DefaultConverter {
// Conversion from JSValue -> Implementation for variadic arguments
template<typename IDLType> struct VariadicConverter;
-} // namespace WebCore
+} // namespace WebCore \ No newline at end of file
diff --git a/src/javascript/jsc/bindings/webcore/JSDOMConvertBufferSource.h b/src/javascript/jsc/bindings/webcore/JSDOMConvertBufferSource.h
index 7cc629ab8..bab958a4f 100644
--- a/src/javascript/jsc/bindings/webcore/JSDOMConvertBufferSource.h
+++ b/src/javascript/jsc/bindings/webcore/JSDOMConvertBufferSource.h
@@ -110,7 +110,7 @@ inline JSC::JSValue toJS(JSC::JSGlobalObject* lexicalGlobalObject, JSC::JSGlobal
inline RefPtr<JSC::ArrayBufferView> toPossiblySharedArrayBufferView(JSC::VM& vm, JSC::JSValue value)
{
- auto* wrapper = JSC::jsDynamicCast<JSC::JSArrayBufferView*>(vm, value);
+ auto* wrapper = JSC::jsDynamicCast<JSC::JSArrayBufferView*>(value);
if (!wrapper)
return nullptr;
return wrapper->possiblySharedImpl();
diff --git a/src/javascript/jsc/bindings/webcore/JSDOMConvertCallbacks.h b/src/javascript/jsc/bindings/webcore/JSDOMConvertCallbacks.h
index c8ce13c14..c98ad316b 100644
--- a/src/javascript/jsc/bindings/webcore/JSDOMConvertCallbacks.h
+++ b/src/javascript/jsc/bindings/webcore/JSDOMConvertCallbacks.h
@@ -41,7 +41,7 @@ template<typename T> struct Converter<IDLCallbackFunction<T>> : DefaultConverter
JSC::VM& vm = JSC::getVM(&lexicalGlobalObject);
auto scope = DECLARE_THROW_SCOPE(vm);
- if (!value.isCallable(vm)) {
+ if (!value.isCallable()) {
exceptionThrower(lexicalGlobalObject, scope);
return nullptr;
}
@@ -54,7 +54,7 @@ template<typename T> struct JSConverter<IDLCallbackFunction<T>> {
static constexpr bool needsState = false;
static constexpr bool needsGlobalObject = false;
- template <typename U>
+ template<typename U>
static JSC::JSValue convert(const U& value)
{
return toJS(Detail::getPtrOrRef(value));
@@ -67,7 +67,6 @@ template<typename T> struct JSConverter<IDLCallbackFunction<T>> {
}
};
-
template<typename T> struct Converter<IDLCallbackInterface<T>> : DefaultConverter<IDLCallbackInterface<T>> {
template<typename ExceptionThrower = DefaultExceptionThrower>
static RefPtr<T> convert(JSC::JSGlobalObject& lexicalGlobalObject, JSC::JSValue value, ExceptionThrower&& exceptionThrower = ExceptionThrower())
@@ -88,7 +87,7 @@ template<typename T> struct JSConverter<IDLCallbackInterface<T>> {
static constexpr bool needsState = false;
static constexpr bool needsGlobalObject = false;
- template <typename U>
+ template<typename U>
static JSC::JSValue convert(const U& value)
{
return toJS(Detail::getPtrOrRef(value));
diff --git a/src/javascript/jsc/bindings/webcore/JSDOMConvertDate.cpp b/src/javascript/jsc/bindings/webcore/JSDOMConvertDate.cpp
index 739be11ef..c624bd25b 100644
--- a/src/javascript/jsc/bindings/webcore/JSDOMConvertDate.cpp
+++ b/src/javascript/jsc/bindings/webcore/JSDOMConvertDate.cpp
@@ -40,7 +40,7 @@ WallTime valueToDate(JSC::JSGlobalObject& lexicalGlobalObject, JSValue value)
double milliseconds = std::numeric_limits<double>::quiet_NaN();
auto& vm = lexicalGlobalObject.vm();
- if (value.inherits<DateInstance>(vm))
+ if (value.inherits<DateInstance>())
milliseconds = jsCast<DateInstance*>(value)->internalNumber();
else if (value.isNumber())
milliseconds = value.asNumber();
diff --git a/src/javascript/jsc/bindings/webcore/JSDOMConvertNumbers.h b/src/javascript/jsc/bindings/webcore/JSDOMConvertNumbers.h
index 399a85ebb..29413d8d9 100644
--- a/src/javascript/jsc/bindings/webcore/JSDOMConvertNumbers.h
+++ b/src/javascript/jsc/bindings/webcore/JSDOMConvertNumbers.h
@@ -28,8 +28,8 @@
#include "IDLTypes.h"
#include "JSDOMConvertBase.h"
#include "JSDOMExceptionHandling.h"
-#include "JavaScriptCore/JSCJSValueInlines.h"
-#include "JavaScriptCore/PureNaN.h"
+#include <JavaScriptCore/JSCJSValueInlines.h>
+#include <JavaScriptCore/PureNaN.h>
namespace WebCore {
@@ -251,6 +251,7 @@ template<typename T> struct JSConverter<IDLClampAdaptor<T>> {
}
};
+
template<typename T> struct Converter<IDLEnforceRangeAdaptor<T>> : DefaultConverter<IDLEnforceRangeAdaptor<T>> {
using ReturnType = typename IDLEnforceRangeAdaptor<T>::ImplementationType;
@@ -272,6 +273,7 @@ template<typename T> struct JSConverter<IDLEnforceRangeAdaptor<T>> {
}
};
+
// MARK: -
// MARK: Floating point types
@@ -291,7 +293,7 @@ template<> struct Converter<IDLFloat> : DefaultConverter<IDLFloat> {
double number = value.toNumber(&lexicalGlobalObject);
RETURN_IF_EXCEPTION(scope, 0.0);
if (UNLIKELY(number < std::numeric_limits<float>::lowest() || number > std::numeric_limits<float>::max()))
- throwTypeError(&lexicalGlobalObject, scope, "The provided value is outside the range of a float");
+ throwTypeError(&lexicalGlobalObject, scope, "The provided value is outside the range of a float"_s);
if (UNLIKELY(!std::isfinite(number)))
throwNonFiniteTypeError(lexicalGlobalObject, scope);
return static_cast<float>(number);
diff --git a/src/javascript/jsc/bindings/webcore/JSDOMConvertPromise.h b/src/javascript/jsc/bindings/webcore/JSDOMConvertPromise.h
index a0051c383..29324f11b 100644
--- a/src/javascript/jsc/bindings/webcore/JSDOMConvertPromise.h
+++ b/src/javascript/jsc/bindings/webcore/JSDOMConvertPromise.h
@@ -41,7 +41,7 @@ template<typename T> struct Converter<IDLPromise<T>> : DefaultConverter<IDLPromi
{
JSC::VM& vm = JSC::getVM(&lexicalGlobalObject);
auto scope = DECLARE_THROW_SCOPE(vm);
- auto* globalObject = JSC::jsDynamicCast<JSDOMGlobalObject*>(vm, &lexicalGlobalObject);
+ auto* globalObject = JSC::jsDynamicCast<JSDOMGlobalObject*>(&lexicalGlobalObject);
if (!globalObject)
return nullptr;
diff --git a/src/javascript/jsc/bindings/webcore/JSDOMConvertRecord.h b/src/javascript/jsc/bindings/webcore/JSDOMConvertRecord.h
index 736fe7303..0f4c84eff 100644
--- a/src/javascript/jsc/bindings/webcore/JSDOMConvertRecord.h
+++ b/src/javascript/jsc/bindings/webcore/JSDOMConvertRecord.h
@@ -100,14 +100,14 @@ private:
// 4. Let keys be ? O.[[OwnPropertyKeys]]().
JSC::PropertyNameArray keys(vm, JSC::PropertyNameMode::StringsAndSymbols, JSC::PrivateSymbolMode::Exclude);
- object->methodTable(vm)->getOwnPropertyNames(object, &lexicalGlobalObject, keys, JSC::DontEnumPropertiesMode::Include);
+ object->methodTable()->getOwnPropertyNames(object, &lexicalGlobalObject, keys, JSC::DontEnumPropertiesMode::Include);
RETURN_IF_EXCEPTION(scope, {});
// 5. Repeat, for each element key of keys in List order:
for (auto& key : keys) {
// 1. Let desc be ? O.[[GetOwnProperty]](key).
JSC::PropertySlot slot(object, JSC::PropertySlot::InternalMethodType::GetOwnProperty);
- bool hasProperty = object->methodTable(vm)->getOwnPropertySlot(object, &lexicalGlobalObject, key, slot);
+ bool hasProperty = object->methodTable()->getOwnPropertySlot(object, &lexicalGlobalObject, key, slot);
RETURN_IF_EXCEPTION(scope, {});
// 2. If desc is not undefined and desc.[[Enumerable]] is true:
diff --git a/src/javascript/jsc/bindings/webcore/JSDOMConvertScheduledAction.h b/src/javascript/jsc/bindings/webcore/JSDOMConvertScheduledAction.h
index 85a7fd6ab..72fb8450d 100644
--- a/src/javascript/jsc/bindings/webcore/JSDOMConvertScheduledAction.h
+++ b/src/javascript/jsc/bindings/webcore/JSDOMConvertScheduledAction.h
@@ -38,7 +38,7 @@ template<> struct Converter<IDLScheduledAction> : DefaultConverter<IDLScheduledA
JSC::VM& vm = JSC::getVM(&lexicalGlobalObject);
auto scope = DECLARE_THROW_SCOPE(vm);
- if (!value.isCallable(vm)) {
+ if (!value.isCallable()) {
auto code = Converter<IDLDOMString>::convert(lexicalGlobalObject, value);
RETURN_IF_EXCEPTION(scope, nullptr);
return ScheduledAction::create(globalObject.world(), WTFMove(code));
@@ -51,4 +51,3 @@ template<> struct Converter<IDLScheduledAction> : DefaultConverter<IDLScheduledA
};
}
-
diff --git a/src/javascript/jsc/bindings/webcore/JSDOMConvertStrings.cpp b/src/javascript/jsc/bindings/webcore/JSDOMConvertStrings.cpp
index 6c0a208d8..00f385e07 100644
--- a/src/javascript/jsc/bindings/webcore/JSDOMConvertStrings.cpp
+++ b/src/javascript/jsc/bindings/webcore/JSDOMConvertStrings.cpp
@@ -23,10 +23,10 @@
#include "JSDOMConvertStrings.h"
#include "JSDOMExceptionHandling.h"
-#include "JavaScriptCore/HeapInlines.h"
-#include "JavaScriptCore/JSCJSValueInlines.h"
-#include "wtf/text/StringBuilder.h"
-#include "wtf/unicode/CharacterNames.h"
+#include <JavaScriptCore/HeapInlines.h>
+#include <JavaScriptCore/JSCJSValueInlines.h>
+#include <wtf/text/StringBuilder.h>
+#include <wtf/unicode/CharacterNames.h>
namespace WebCore {
using namespace JSC;
@@ -42,14 +42,13 @@ String identifierToString(JSGlobalObject& lexicalGlobalObject, const Identifier&
return identifier.string();
}
-static inline String stringToByteString(JSGlobalObject& lexicalGlobalObject, JSC::ThrowScope& scope, String&& string)
+static inline bool throwIfInvalidByteString(JSGlobalObject& lexicalGlobalObject, JSC::ThrowScope& scope, const String& string)
{
- if (!string.isAllLatin1()) {
+ if (UNLIKELY(!string.isAllLatin1())) {
throwTypeError(&lexicalGlobalObject, scope);
- return {};
+ return true;
}
-
- return WTFMove(string);
+ return false;
}
String identifierToByteString(JSGlobalObject& lexicalGlobalObject, const Identifier& identifier)
@@ -59,7 +58,9 @@ String identifierToByteString(JSGlobalObject& lexicalGlobalObject, const Identif
auto string = identifierToString(lexicalGlobalObject, identifier);
RETURN_IF_EXCEPTION(scope, {});
- return stringToByteString(lexicalGlobalObject, scope, WTFMove(string));
+ if (UNLIKELY(throwIfInvalidByteString(lexicalGlobalObject, scope, string)))
+ return {};
+ return string;
}
String valueToByteString(JSGlobalObject& lexicalGlobalObject, JSValue value)
@@ -70,7 +71,23 @@ String valueToByteString(JSGlobalObject& lexicalGlobalObject, JSValue value)
auto string = value.toWTFString(&lexicalGlobalObject);
RETURN_IF_EXCEPTION(scope, {});
- return stringToByteString(lexicalGlobalObject, scope, WTFMove(string));
+ if (UNLIKELY(throwIfInvalidByteString(lexicalGlobalObject, scope, string)))
+ return {};
+ return string;
+}
+
+AtomString valueToByteAtomString(JSC::JSGlobalObject& lexicalGlobalObject, JSC::JSValue value)
+{
+ VM& vm = lexicalGlobalObject.vm();
+ auto scope = DECLARE_THROW_SCOPE(vm);
+
+ auto string = value.toString(&lexicalGlobalObject)->toAtomString(&lexicalGlobalObject);
+ RETURN_IF_EXCEPTION(scope, {});
+
+ if (UNLIKELY(throwIfInvalidByteString(lexicalGlobalObject, scope, string.string())))
+ return nullAtom();
+
+ return string;
}
String identifierToUSVString(JSGlobalObject& lexicalGlobalObject, const Identifier& identifier)
@@ -89,4 +106,15 @@ String valueToUSVString(JSGlobalObject& lexicalGlobalObject, JSValue value)
return replaceUnpairedSurrogatesWithReplacementCharacter(WTFMove(string));
}
-} // namespace WebCore
+AtomString valueToUSVAtomString(JSGlobalObject& lexicalGlobalObject, JSValue value)
+{
+ VM& vm = lexicalGlobalObject.vm();
+ auto scope = DECLARE_THROW_SCOPE(vm);
+
+ auto string = value.toString(&lexicalGlobalObject)->toAtomString(&lexicalGlobalObject);
+ RETURN_IF_EXCEPTION(scope, {});
+
+ return replaceUnpairedSurrogatesWithReplacementCharacter(WTFMove(string));
+}
+
+} // namespace WebCore \ No newline at end of file
diff --git a/src/javascript/jsc/bindings/webcore/JSDOMConvertStrings.h b/src/javascript/jsc/bindings/webcore/JSDOMConvertStrings.h
index 29fa7259a..450caf7e9 100644
--- a/src/javascript/jsc/bindings/webcore/JSDOMConvertStrings.h
+++ b/src/javascript/jsc/bindings/webcore/JSDOMConvertStrings.h
@@ -34,10 +34,12 @@ namespace WebCore {
WEBCORE_EXPORT String identifierToString(JSC::JSGlobalObject&, const JSC::Identifier&);
WEBCORE_EXPORT String identifierToByteString(JSC::JSGlobalObject&, const JSC::Identifier&);
WEBCORE_EXPORT String valueToByteString(JSC::JSGlobalObject&, JSC::JSValue);
+WEBCORE_EXPORT AtomString valueToByteAtomString(JSC::JSGlobalObject&, JSC::JSValue);
WEBCORE_EXPORT String identifierToUSVString(JSC::JSGlobalObject&, const JSC::Identifier&);
WEBCORE_EXPORT String valueToUSVString(JSC::JSGlobalObject&, JSC::JSValue);
+WEBCORE_EXPORT AtomString valueToUSVAtomString(JSC::JSGlobalObject&, JSC::JSValue);
-inline String propertyNameToString(JSC::PropertyName propertyName)
+inline AtomString propertyNameToString(JSC::PropertyName propertyName)
{
ASSERT(!propertyName.isSymbol());
return propertyName.uid() ? propertyName.uid() : propertyName.publicName();
@@ -158,7 +160,7 @@ template<typename T> struct Converter<IDLLegacyNullToEmptyStringAdaptor<T>> : De
}
};
-template<typename T> struct JSConverter<IDLLegacyNullToEmptyStringAdaptor<T>> {
+template<typename T> struct JSConverter<IDLLegacyNullToEmptyStringAdaptor<T>> {
static constexpr bool needsState = true;
static constexpr bool needsGlobalObject = false;
@@ -168,6 +170,25 @@ template<typename T> struct JSConverter<IDLLegacyNullToEmptyStringAdaptor<T>> {
}
};
+template<typename T> struct Converter<IDLLegacyNullToEmptyAtomStringAdaptor<T>> : DefaultConverter<IDLLegacyNullToEmptyAtomStringAdaptor<T>> {
+ static AtomString convert(JSC::JSGlobalObject& lexicalGlobalObject, JSC::JSValue value)
+ {
+ if (value.isNull())
+ return emptyAtom();
+ return Converter<IDLAtomStringAdaptor<T>>::convert(lexicalGlobalObject, value);
+ }
+};
+
+template<typename T> struct JSConverter<IDLLegacyNullToEmptyAtomStringAdaptor<T>> {
+ static constexpr bool needsState = true;
+ static constexpr bool needsGlobalObject = false;
+
+ static JSC::JSValue convert(JSC::JSGlobalObject& lexicalGlobalObject, const AtomString& value)
+ {
+ return JSConverter<T>::convert(lexicalGlobalObject, value);
+ }
+};
+
template<typename T> struct Converter<IDLAtomStringAdaptor<T>> : DefaultConverter<IDLAtomStringAdaptor<T>> {
static AtomString convert(JSC::JSGlobalObject& lexicalGlobalObject, JSC::JSValue value)
{
@@ -177,28 +198,80 @@ template<typename T> struct Converter<IDLAtomStringAdaptor<T>> : DefaultConverte
}
};
-template<typename T> struct JSConverter<IDLAtomStringAdaptor<T>> {
+template<> struct Converter<IDLAtomStringAdaptor<IDLUSVString>> : DefaultConverter<IDLAtomStringAdaptor<IDLUSVString>> {
+ static AtomString convert(JSC::JSGlobalObject& lexicalGlobalObject, JSC::JSValue value)
+ {
+ return valueToUSVAtomString(lexicalGlobalObject, value);
+ }
+};
+
+template<> struct Converter<IDLAtomStringAdaptor<IDLByteString>> : DefaultConverter<IDLAtomStringAdaptor<IDLByteString>> {
+ static AtomString convert(JSC::JSGlobalObject& lexicalGlobalObject, JSC::JSValue value)
+ {
+ return valueToByteAtomString(lexicalGlobalObject, value);
+ }
+};
+
+template<typename T> struct JSConverter<IDLAtomStringAdaptor<T>> {
static constexpr bool needsState = true;
static constexpr bool needsGlobalObject = false;
static JSC::JSValue convert(JSC::JSGlobalObject& lexicalGlobalObject, const AtomString& value)
{
- static_assert(std::is_same<T, IDLDOMString>::value, "This adaptor is only supported for IDLDOMString at the moment.");
+ return JSConverter<T>::convert(lexicalGlobalObject, value);
+ }
+ static JSC::JSValue convert(JSC::JSGlobalObject& lexicalGlobalObject, const String& value)
+ {
return JSConverter<T>::convert(lexicalGlobalObject, value);
}
+
+ static JSC::JSValue convert(JSC::JSGlobalObject& lexicalGlobalObject, const URL& value)
+ {
+ return JSConverter<T>::convert(lexicalGlobalObject, value.string());
+ }
+};
+
+template<> struct JSConverter<IDLAtomStringAdaptor<IDLUSVString>> {
+ static constexpr bool needsState = true;
+ static constexpr bool needsGlobalObject = false;
+
+ static JSC::JSValue convert(JSC::JSGlobalObject& lexicalGlobalObject, const AtomString& value)
+ {
+ return JSConverter<IDLUSVString>::convert(lexicalGlobalObject, value.string());
+ }
+
+ static JSC::JSValue convert(JSC::JSGlobalObject& lexicalGlobalObject, const String& value)
+ {
+ return JSConverter<IDLUSVString>::convert(lexicalGlobalObject, value);
+ }
+
+ static JSC::JSValue convert(JSC::JSGlobalObject& lexicalGlobalObject, const URL& value)
+ {
+ return JSConverter<IDLUSVString>::convert(lexicalGlobalObject, value.string());
+ }
+};
+
+template<> struct JSConverter<IDLAtomStringAdaptor<IDLByteString>> {
+ static constexpr bool needsState = true;
+ static constexpr bool needsGlobalObject = false;
+
+ static JSC::JSValue convert(JSC::JSGlobalObject& lexicalGlobalObject, const AtomString& value)
+ {
+ return JSConverter<IDLByteString>::convert(lexicalGlobalObject, value.string());
+ }
};
template<typename T> struct Converter<IDLRequiresExistingAtomStringAdaptor<T>> : DefaultConverter<IDLRequiresExistingAtomStringAdaptor<T>> {
static AtomString convert(JSC::JSGlobalObject& lexicalGlobalObject, JSC::JSValue value)
{
static_assert(std::is_same<T, IDLDOMString>::value, "This adaptor is only supported for IDLDOMString at the moment.");
-
- return AtomString(value.toString(&lexicalGlobalObject)->toExistingAtomString(&lexicalGlobalObject));
+
+ return value.toString(&lexicalGlobalObject)->toExistingAtomString(&lexicalGlobalObject);
}
};
-template<typename T> struct JSConverter<IDLRequiresExistingAtomStringAdaptor<T>> {
+template<typename T> struct JSConverter<IDLRequiresExistingAtomStringAdaptor<T>> {
static constexpr bool needsState = true;
static constexpr bool needsGlobalObject = false;
@@ -210,5 +283,4 @@ template<typename T> struct JSConverter<IDLRequiresExistingAtomStringAdaptor<T>
}
};
-
-} // namespace WebCore
+} // namespace WebCore \ No newline at end of file
diff --git a/src/javascript/jsc/bindings/webcore/JSDOMConvertXPathNSResolver.h b/src/javascript/jsc/bindings/webcore/JSDOMConvertXPathNSResolver.h
index eed7d1980..6c48a072a 100644
--- a/src/javascript/jsc/bindings/webcore/JSDOMConvertXPathNSResolver.h
+++ b/src/javascript/jsc/bindings/webcore/JSDOMConvertXPathNSResolver.h
@@ -45,7 +45,7 @@ template<> struct Converter<IDLInterface<XPathNSResolver>> : DefaultConverter<ID
}
auto object = asObject(value);
- if (object->inherits<JSXPathNSResolver>(vm))
+ if (object->inherits<JSXPathNSResolver>())
return &JSC::jsCast<JSXPathNSResolver*>(object)->wrapped();
return JSCustomXPathNSResolver::create(vm, object);
diff --git a/src/javascript/jsc/bindings/webcore/JSDOMException.cpp b/src/javascript/jsc/bindings/webcore/JSDOMException.cpp
index bf8bcd9f9..9847b3d51 100644
--- a/src/javascript/jsc/bindings/webcore/JSDOMException.cpp
+++ b/src/javascript/jsc/bindings/webcore/JSDOMException.cpp
@@ -216,7 +216,7 @@ JSDOMException::JSDOMException(Structure* structure, JSDOMGlobalObject& globalOb
void JSDOMException::finishCreation(VM& vm)
{
Base::finishCreation(vm);
- ASSERT(inherits(vm, info()));
+ ASSERT(inherits(info()));
// static_assert(!std::is_base_of<ActiveDOMObject, DOMException>::value, "Interface is not marked as [ActiveDOMObject] even though implementation class subclasses ActiveDOMObject.");
}
@@ -246,7 +246,7 @@ JSC_DEFINE_CUSTOM_GETTER(jsDOMExceptionConstructor, (JSGlobalObject * lexicalGlo
{
VM& vm = JSC::getVM(lexicalGlobalObject);
auto throwScope = DECLARE_THROW_SCOPE(vm);
- auto* prototype = jsDynamicCast<JSDOMExceptionPrototype*>(vm, JSValue::decode(thisValue));
+ auto* prototype = jsDynamicCast<JSDOMExceptionPrototype*>(JSValue::decode(thisValue));
if (UNLIKELY(!prototype))
return throwVMTypeError(lexicalGlobalObject, throwScope);
return JSValue::encode(JSDOMException::getConstructor(JSC::getVM(lexicalGlobalObject), prototype->globalObject()));
@@ -367,7 +367,7 @@ JSC::JSValue toJS(JSC::JSGlobalObject* lexicalGlobalObject, JSDOMGlobalObject* g
DOMException* JSDOMException::toWrapped(JSC::VM& vm, JSC::JSValue value)
{
- if (auto* wrapper = jsDynamicCast<JSDOMException*>(vm, value))
+ if (auto* wrapper = jsDynamicCast<JSDOMException*>(value))
return &wrapper->wrapped();
return nullptr;
}
diff --git a/src/javascript/jsc/bindings/webcore/JSDOMIterator.cpp b/src/javascript/jsc/bindings/webcore/JSDOMIterator.cpp
index 205e1c80a..0bc957e17 100644
--- a/src/javascript/jsc/bindings/webcore/JSDOMIterator.cpp
+++ b/src/javascript/jsc/bindings/webcore/JSDOMIterator.cpp
@@ -26,8 +26,8 @@
#include "config.h"
#include "JSDOMIterator.h"
-#include "JavaScriptCore/ArrayPrototype.h"
-#include "JavaScriptCore/BuiltinNames.h"
+#include <JavaScriptCore/ArrayPrototype.h>
+#include <JavaScriptCore/BuiltinNames.h>
namespace WebCore {
@@ -52,4 +52,4 @@ void addValueIterableMethods(JSC::JSGlobalObject& globalObject, JSC::JSObject& p
copyProperty(vm.propertyNames->builtinNames().valuesPrivateName(), vm.propertyNames->builtinNames().valuesPublicName());
}
-}
+} \ No newline at end of file
diff --git a/src/javascript/jsc/bindings/webcore/JSDOMIterator.h b/src/javascript/jsc/bindings/webcore/JSDOMIterator.h
index 04b4c001b..b9740d4f9 100644
--- a/src/javascript/jsc/bindings/webcore/JSDOMIterator.h
+++ b/src/javascript/jsc/bindings/webcore/JSDOMIterator.h
@@ -27,8 +27,8 @@
#pragma once
#include "JSDOMConvert.h"
-#include "JavaScriptCore/IteratorPrototype.h"
-#include "JavaScriptCore/PropertySlot.h"
+#include <JavaScriptCore/IteratorPrototype.h>
+#include <JavaScriptCore/PropertySlot.h>
#include <type_traits>
namespace WebCore {
@@ -210,7 +210,7 @@ template<typename JSIterator> JSC::JSValue iteratorForEach(JSC::JSGlobalObject&
JSC::JSValue callback = callFrame.argument(0);
JSC::JSValue thisValue = callFrame.argument(1);
- auto callData = JSC::getCallData(JSC::getVM(&lexicalGlobalObject), callback);
+ auto callData = JSC::getCallData(callback);
if (callData.type == JSC::CallData::Type::None)
return throwTypeError(&lexicalGlobalObject, scope, "Cannot call callback"_s);
@@ -255,7 +255,7 @@ JSC::EncodedJSValue JSC_HOST_CALL_ATTRIBUTES JSDOMIteratorPrototype<JSWrapper, I
JSC::VM& vm = globalObject->vm();
auto scope = DECLARE_THROW_SCOPE(vm);
- auto iterator = JSC::jsDynamicCast<JSDOMIteratorBase<JSWrapper, IteratorTraits>*>(vm, callFrame->thisValue());
+ auto iterator = JSC::jsDynamicCast<JSDOMIteratorBase<JSWrapper, IteratorTraits>*>(callFrame->thisValue());
if (!iterator)
return JSC::JSValue::encode(throwTypeError(globalObject, scope, "Cannot call next() on a non-Iterator object"_s));
@@ -266,10 +266,10 @@ template<typename JSWrapper, typename IteratorTraits>
void JSDOMIteratorPrototype<JSWrapper, IteratorTraits>::finishCreation(JSC::VM& vm, JSC::JSGlobalObject* globalObject)
{
Base::finishCreation(vm);
- ASSERT(inherits(vm, info()));
+ ASSERT(inherits(info()));
JSC_NATIVE_INTRINSIC_FUNCTION_WITHOUT_TRANSITION(vm.propertyNames->next, next, 0, 0, JSC::NoIntrinsic);
JSC_TO_STRING_TAG_WITHOUT_TRANSITION();
}
-}
+} \ No newline at end of file
diff --git a/src/javascript/jsc/bindings/webcore/JSDOMURL.cpp b/src/javascript/jsc/bindings/webcore/JSDOMURL.cpp
index 898622279..fcf6d5b72 100644
--- a/src/javascript/jsc/bindings/webcore/JSDOMURL.cpp
+++ b/src/javascript/jsc/bindings/webcore/JSDOMURL.cpp
@@ -194,7 +194,7 @@ template<> EncodedJSValue JSC_HOST_CALL_ATTRIBUTES JSDOMURLDOMConstructor::const
JSValue distinguishingArg = callFrame->uncheckedArgument(1);
if (distinguishingArg.isUndefined())
RELEASE_AND_RETURN(throwScope, (constructJSDOMURL1(lexicalGlobalObject, callFrame)));
- if (distinguishingArg.isObject() && asObject(distinguishingArg)->inherits<JSDOMURL>(vm))
+ if (distinguishingArg.isObject() && asObject(distinguishingArg)->inherits<JSDOMURL>())
RELEASE_AND_RETURN(throwScope, (constructJSDOMURL2(lexicalGlobalObject, callFrame)));
RELEASE_AND_RETURN(throwScope, (constructJSDOMURL1(lexicalGlobalObject, callFrame)));
}
@@ -259,7 +259,7 @@ JSDOMURL::JSDOMURL(Structure* structure, JSDOMGlobalObject& globalObject, Ref<DO
void JSDOMURL::finishCreation(VM& vm)
{
Base::finishCreation(vm);
- ASSERT(inherits(vm, info()));
+ ASSERT(inherits(info()));
// static_assert(!std::is_base_of<ActiveDOMObject, DOMURL>::value, "Interface is not marked as [ActiveDOMObject] even though implementation class subclasses ActiveDOMObject.");
}
@@ -289,7 +289,7 @@ JSC_DEFINE_CUSTOM_GETTER(jsDOMURLConstructor, (JSGlobalObject * lexicalGlobalObj
{
VM& vm = JSC::getVM(lexicalGlobalObject);
auto throwScope = DECLARE_THROW_SCOPE(vm);
- auto* prototype = jsDynamicCast<JSDOMURLPrototype*>(vm, JSValue::decode(thisValue));
+ auto* prototype = jsDynamicCast<JSDOMURLPrototype*>(JSValue::decode(thisValue));
if (UNLIKELY(!prototype))
return throwVMTypeError(lexicalGlobalObject, throwScope);
return JSValue::encode(JSDOMURL::getConstructor(JSC::getVM(lexicalGlobalObject), prototype->globalObject()));
@@ -717,10 +717,10 @@ static inline JSC::EncodedJSValue jsDOMURLConstructorFunction_createObjectURLOve
// size_t argsCount = std::min<size_t>(1, callFrame->argumentCount());
// if (argsCount == 1) {
// JSValue distinguishingArg = callFrame->uncheckedArgument(0);
- // if (distinguishingArg.isObject() && asObject(distinguishingArg)->inherits<JSBlob>(vm))
+ // if (distinguishingArg.isObject() && asObject(distinguishingArg)->inherits<JSBlob>())
// RELEASE_AND_RETURN(throwScope, (jsDOMURLConstructorFunction_createObjectURL1Body(lexicalGlobalObject, callFrame)));
// #if ENABLE(MEDIA_SOURCE)
- // if (distinguishingArg.isObject() && asObject(distinguishingArg)->inherits<JSMediaSource>(vm))
+ // if (distinguishingArg.isObject() && asObject(distinguishingArg)->inherits<JSMediaSource>())
// RELEASE_AND_RETURN(throwScope, (jsDOMURLConstructorFunction_createObjectURL2Body(lexicalGlobalObject, callFrame)));
// #endif
// }
@@ -838,7 +838,7 @@ JSC::JSValue toJS(JSC::JSGlobalObject* lexicalGlobalObject, JSDOMGlobalObject* g
DOMURL* JSDOMURL::toWrapped(JSC::VM& vm, JSC::JSValue value)
{
- if (auto* wrapper = jsDynamicCast<JSDOMURL*>(vm, value))
+ if (auto* wrapper = jsDynamicCast<JSDOMURL*>(value))
return &wrapper->wrapped();
return nullptr;
}
diff --git a/src/javascript/jsc/bindings/webcore/JSErrorCallback.cpp b/src/javascript/jsc/bindings/webcore/JSErrorCallback.cpp
index a227058a3..987d4d74a 100644
--- a/src/javascript/jsc/bindings/webcore/JSErrorCallback.cpp
+++ b/src/javascript/jsc/bindings/webcore/JSErrorCallback.cpp
@@ -28,12 +28,11 @@
#include "JSDOMGlobalObject.h"
#include "ScriptExecutionContext.h"
-
namespace WebCore {
using namespace JSC;
JSErrorCallback::JSErrorCallback(VM& vm, JSObject* callback)
- : ErrorCallback(jsCast<JSDOMGlobalObject*>(callback->globalObject(vm))->scriptExecutionContext())
+ : ErrorCallback(jsCast<JSDOMGlobalObject*>(callback->globalObject())->scriptExecutionContext())
, m_data(new JSCallbackDataStrong(vm, callback, this))
{
}
@@ -74,9 +73,9 @@ CallbackResult<typename IDLUndefined::ImplementationType> JSErrorCallback::handl
if (returnedException) {
reportException(&lexicalGlobalObject, returnedException);
return CallbackResultType::ExceptionThrown;
- }
+ }
- return { };
+ return {};
}
JSC::JSValue toJS(ErrorCallback& impl)
diff --git a/src/javascript/jsc/bindings/webcore/JSErrorEvent.cpp b/src/javascript/jsc/bindings/webcore/JSErrorEvent.cpp
index 4f6db111f..be909421c 100644
--- a/src/javascript/jsc/bindings/webcore/JSErrorEvent.cpp
+++ b/src/javascript/jsc/bindings/webcore/JSErrorEvent.cpp
@@ -66,7 +66,7 @@ template<> ErrorEvent::Init convertDictionary<ErrorEvent::Init>(JSGlobalObject&
if (isNullOrUndefined)
bubblesValue = jsUndefined();
else {
- bubblesValue = object->get(&lexicalGlobalObject, Identifier::fromString(vm, "bubbles"));
+ bubblesValue = object->get(&lexicalGlobalObject, Identifier::fromString(vm, "bubbles"_s));
RETURN_IF_EXCEPTION(throwScope, {});
}
if (!bubblesValue.isUndefined()) {
@@ -78,7 +78,7 @@ template<> ErrorEvent::Init convertDictionary<ErrorEvent::Init>(JSGlobalObject&
if (isNullOrUndefined)
cancelableValue = jsUndefined();
else {
- cancelableValue = object->get(&lexicalGlobalObject, Identifier::fromString(vm, "cancelable"));
+ cancelableValue = object->get(&lexicalGlobalObject, Identifier::fromString(vm, "cancelable"_s));
RETURN_IF_EXCEPTION(throwScope, {});
}
if (!cancelableValue.isUndefined()) {
@@ -90,7 +90,7 @@ template<> ErrorEvent::Init convertDictionary<ErrorEvent::Init>(JSGlobalObject&
if (isNullOrUndefined)
composedValue = jsUndefined();
else {
- composedValue = object->get(&lexicalGlobalObject, Identifier::fromString(vm, "composed"));
+ composedValue = object->get(&lexicalGlobalObject, Identifier::fromString(vm, "composed"_s));
RETURN_IF_EXCEPTION(throwScope, {});
}
if (!composedValue.isUndefined()) {
@@ -102,7 +102,7 @@ template<> ErrorEvent::Init convertDictionary<ErrorEvent::Init>(JSGlobalObject&
if (isNullOrUndefined)
colnoValue = jsUndefined();
else {
- colnoValue = object->get(&lexicalGlobalObject, Identifier::fromString(vm, "colno"));
+ colnoValue = object->get(&lexicalGlobalObject, Identifier::fromString(vm, "colno"_s));
RETURN_IF_EXCEPTION(throwScope, {});
}
if (!colnoValue.isUndefined()) {
@@ -114,7 +114,7 @@ template<> ErrorEvent::Init convertDictionary<ErrorEvent::Init>(JSGlobalObject&
if (isNullOrUndefined)
errorValue = jsUndefined();
else {
- errorValue = object->get(&lexicalGlobalObject, Identifier::fromString(vm, "error"));
+ errorValue = object->get(&lexicalGlobalObject, Identifier::fromString(vm, "error"_s));
RETURN_IF_EXCEPTION(throwScope, {});
}
if (!errorValue.isUndefined()) {
@@ -126,7 +126,7 @@ template<> ErrorEvent::Init convertDictionary<ErrorEvent::Init>(JSGlobalObject&
if (isNullOrUndefined)
filenameValue = jsUndefined();
else {
- filenameValue = object->get(&lexicalGlobalObject, Identifier::fromString(vm, "filename"));
+ filenameValue = object->get(&lexicalGlobalObject, Identifier::fromString(vm, "filename"_s));
RETURN_IF_EXCEPTION(throwScope, {});
}
if (!filenameValue.isUndefined()) {
@@ -138,7 +138,7 @@ template<> ErrorEvent::Init convertDictionary<ErrorEvent::Init>(JSGlobalObject&
if (isNullOrUndefined)
linenoValue = jsUndefined();
else {
- linenoValue = object->get(&lexicalGlobalObject, Identifier::fromString(vm, "lineno"));
+ linenoValue = object->get(&lexicalGlobalObject, Identifier::fromString(vm, "lineno"_s));
RETURN_IF_EXCEPTION(throwScope, {});
}
if (!linenoValue.isUndefined()) {
@@ -150,7 +150,7 @@ template<> ErrorEvent::Init convertDictionary<ErrorEvent::Init>(JSGlobalObject&
if (isNullOrUndefined)
messageValue = jsUndefined();
else {
- messageValue = object->get(&lexicalGlobalObject, Identifier::fromString(vm, "message"));
+ messageValue = object->get(&lexicalGlobalObject, Identifier::fromString(vm, "message"_s));
RETURN_IF_EXCEPTION(throwScope, {});
}
if (!messageValue.isUndefined()) {
@@ -213,12 +213,12 @@ template<> EncodedJSValue JSC_HOST_CALL_ATTRIBUTES JSErrorEventDOMConstructor::c
if (UNLIKELY(callFrame->argumentCount() < 1))
return throwVMError(lexicalGlobalObject, throwScope, createNotEnoughArgumentsError(lexicalGlobalObject));
EnsureStillAliveScope argument0 = callFrame->uncheckedArgument(0);
- auto type = convert<IDLDOMString>(*lexicalGlobalObject, argument0.value());
+ auto type = convert<IDLAtomStringAdaptor<IDLDOMString>>(*lexicalGlobalObject, argument0.value());
RETURN_IF_EXCEPTION(throwScope, encodedJSValue());
EnsureStillAliveScope argument1 = callFrame->argument(1);
auto eventInitDict = convert<IDLDictionary<ErrorEvent::Init>>(*lexicalGlobalObject, argument1.value());
RETURN_IF_EXCEPTION(throwScope, encodedJSValue());
- auto object = ErrorEvent::create(WTFMove(type), WTFMove(eventInitDict));
+ auto object = ErrorEvent::create(type, WTFMove(eventInitDict));
if constexpr (IsExceptionOr<decltype(object)>)
RETURN_IF_EXCEPTION(throwScope, {});
static_assert(TypeOrExceptionOrUnderlyingType<decltype(object)>::isRef);
@@ -277,7 +277,7 @@ JSErrorEvent::JSErrorEvent(Structure* structure, JSDOMGlobalObject& globalObject
void JSErrorEvent::finishCreation(VM& vm)
{
Base::finishCreation(vm);
- ASSERT(inherits(vm, info()));
+ ASSERT(inherits(info()));
// static_assert(!std::is_base_of<ActiveDOMObject, ErrorEvent>::value, "Interface is not marked as [ActiveDOMObject] even though implementation class subclasses ActiveDOMObject.");
}
@@ -301,7 +301,7 @@ JSC_DEFINE_CUSTOM_GETTER(jsErrorEventConstructor, (JSGlobalObject * lexicalGloba
{
VM& vm = JSC::getVM(lexicalGlobalObject);
auto throwScope = DECLARE_THROW_SCOPE(vm);
- auto* prototype = jsDynamicCast<JSErrorEventPrototype*>(vm, JSValue::decode(thisValue));
+ auto* prototype = jsDynamicCast<JSErrorEventPrototype*>(JSValue::decode(thisValue));
if (UNLIKELY(!prototype))
return throwVMTypeError(lexicalGlobalObject, throwScope);
return JSValue::encode(JSErrorEvent::getConstructor(JSC::getVM(lexicalGlobalObject), prototype->globalObject()));
diff --git a/src/javascript/jsc/bindings/webcore/JSErrorHandler.cpp b/src/javascript/jsc/bindings/webcore/JSErrorHandler.cpp
index 228f247ce..ee5df32b5 100644
--- a/src/javascript/jsc/bindings/webcore/JSErrorHandler.cpp
+++ b/src/javascript/jsc/bindings/webcore/JSErrorHandler.cpp
@@ -76,12 +76,12 @@ void JSErrorHandler::handleEvent(ScriptExecutionContext& scriptExecutionContext,
if (!globalObject)
return;
- auto callData = getCallData(vm, jsFunction);
+ auto callData = getCallData(jsFunction);
if (callData.type != CallData::Type::None) {
Ref<JSErrorHandler> protectedThis(*this);
RefPtr<Event> savedEvent;
- // auto* jsFunctionWindow = jsDynamicCast<JSDOMWindow*>(vm, jsFunction->globalObject());
+ // auto* jsFunctionWindow = jsDynamicCast<JSDOMWindow*>( jsFunction->globalObject());
// if (jsFunctionWindow) {
// savedEvent = jsFunctionWindow->currentEvent();
diff --git a/src/javascript/jsc/bindings/webcore/JSEvent.cpp b/src/javascript/jsc/bindings/webcore/JSEvent.cpp
index 28eb8c389..058298923 100644
--- a/src/javascript/jsc/bindings/webcore/JSEvent.cpp
+++ b/src/javascript/jsc/bindings/webcore/JSEvent.cpp
@@ -155,7 +155,7 @@ template<> EncodedJSValue JSC_HOST_CALL_ATTRIBUTES JSEventDOMConstructor::constr
if (UNLIKELY(callFrame->argumentCount() < 1))
return throwVMError(lexicalGlobalObject, throwScope, createNotEnoughArgumentsError(lexicalGlobalObject));
EnsureStillAliveScope argument0 = callFrame->uncheckedArgument(0);
- auto type = convert<IDLDOMString>(*lexicalGlobalObject, argument0.value());
+ auto type = convert<IDLAtomStringAdaptor<IDLDOMString>>(*lexicalGlobalObject, argument0.value());
RETURN_IF_EXCEPTION(throwScope, encodedJSValue());
EnsureStillAliveScope argument1 = callFrame->argument(1);
auto eventInitDict = convert<IDLDictionary<EventInit>>(*lexicalGlobalObject, argument1.value());
@@ -246,7 +246,7 @@ JSEvent::JSEvent(Structure* structure, JSDOMGlobalObject& globalObject, Ref<Even
void JSEvent::finishCreation(VM& vm)
{
Base::finishCreation(vm);
- ASSERT(inherits(vm, info()));
+ ASSERT(inherits(info()));
// static_assert(!std::is_base_of<ActiveDOMObject, Event>::value, "Interface is not marked as [ActiveDOMObject] even though implementation class subclasses ActiveDOMObject.");
}
@@ -276,7 +276,7 @@ JSC_DEFINE_CUSTOM_GETTER(jsEventConstructor, (JSGlobalObject * lexicalGlobalObje
{
VM& vm = JSC::getVM(lexicalGlobalObject);
auto throwScope = DECLARE_THROW_SCOPE(vm);
- auto* prototype = jsDynamicCast<JSEventPrototype*>(vm, JSValue::decode(thisValue));
+ auto* prototype = jsDynamicCast<JSEventPrototype*>(JSValue::decode(thisValue));
if (UNLIKELY(!prototype))
return throwVMTypeError(lexicalGlobalObject, throwScope);
return JSValue::encode(JSEvent::getConstructor(JSC::getVM(lexicalGlobalObject), prototype->globalObject()));
@@ -560,7 +560,7 @@ static inline JSC::EncodedJSValue jsEventPrototypeFunction_initEventBody(JSC::JS
if (UNLIKELY(callFrame->argumentCount() < 1))
return throwVMError(lexicalGlobalObject, throwScope, createNotEnoughArgumentsError(lexicalGlobalObject));
EnsureStillAliveScope argument0 = callFrame->uncheckedArgument(0);
- auto type = convert<IDLDOMString>(*lexicalGlobalObject, argument0.value());
+ auto type = convert<IDLAtomStringAdaptor<IDLDOMString>>(*lexicalGlobalObject, argument0.value());
RETURN_IF_EXCEPTION(throwScope, encodedJSValue());
EnsureStillAliveScope argument1 = callFrame->argument(1);
auto bubbles = convert<IDLBoolean>(*lexicalGlobalObject, argument1.value());
@@ -612,7 +612,7 @@ void JSEventOwner::finalize(JSC::Handle<JSC::Unknown> handle, void* context)
Event* JSEvent::toWrapped(JSC::VM& vm, JSC::JSValue value)
{
- if (auto* wrapper = jsDynamicCast<JSEvent*>(vm, value))
+ if (auto* wrapper = jsDynamicCast<JSEvent*>(value))
return &wrapper->wrapped();
return nullptr;
}
diff --git a/src/javascript/jsc/bindings/webcore/JSEventCustom.h b/src/javascript/jsc/bindings/webcore/JSEventCustom.h
index 8271b933d..c910848f6 100644
--- a/src/javascript/jsc/bindings/webcore/JSEventCustom.h
+++ b/src/javascript/jsc/bindings/webcore/JSEventCustom.h
@@ -36,9 +36,9 @@ template<>
struct InheritsTraits<WebCore::JSEvent> {
static constexpr std::optional<JSTypeRange> typeRange { { static_cast<JSType>(WebCore::JSEventType), static_cast<JSType>(WebCore::JSEventType) } };
template<typename From>
- static inline bool inherits(VM& vm, From* from)
+ static inline bool inherits(From* from)
{
- return inheritsJSTypeImpl<WebCore::JSEvent>(vm, from, *typeRange);
+ return inheritsJSTypeImpl<WebCore::JSEvent>(from, *typeRange);
}
};
diff --git a/src/javascript/jsc/bindings/webcore/JSEventInit.cpp b/src/javascript/jsc/bindings/webcore/JSEventInit.cpp
index f7ef28f92..5ec28613e 100644
--- a/src/javascript/jsc/bindings/webcore/JSEventInit.cpp
+++ b/src/javascript/jsc/bindings/webcore/JSEventInit.cpp
@@ -24,7 +24,6 @@
#include "JSDOMConvertBoolean.h"
#include <JavaScriptCore/JSCInlines.h>
-
namespace WebCore {
using namespace JSC;
@@ -36,43 +35,43 @@ template<> EventInit convertDictionary<EventInit>(JSGlobalObject& lexicalGlobalO
auto* object = isNullOrUndefined ? nullptr : value.getObject();
if (UNLIKELY(!isNullOrUndefined && !object)) {
throwTypeError(&lexicalGlobalObject, throwScope);
- return { };
+ return {};
}
EventInit result;
JSValue bubblesValue;
if (isNullOrUndefined)
bubblesValue = jsUndefined();
else {
- bubblesValue = object->get(&lexicalGlobalObject, Identifier::fromString(vm, "bubbles"));
- RETURN_IF_EXCEPTION(throwScope, { });
+ bubblesValue = object->get(&lexicalGlobalObject, Identifier::fromString(vm, "bubbles"_s));
+ RETURN_IF_EXCEPTION(throwScope, {});
}
if (!bubblesValue.isUndefined()) {
result.bubbles = convert<IDLBoolean>(lexicalGlobalObject, bubblesValue);
- RETURN_IF_EXCEPTION(throwScope, { });
+ RETURN_IF_EXCEPTION(throwScope, {});
} else
result.bubbles = false;
JSValue cancelableValue;
if (isNullOrUndefined)
cancelableValue = jsUndefined();
else {
- cancelableValue = object->get(&lexicalGlobalObject, Identifier::fromString(vm, "cancelable"));
- RETURN_IF_EXCEPTION(throwScope, { });
+ cancelableValue = object->get(&lexicalGlobalObject, Identifier::fromString(vm, "cancelable"_s));
+ RETURN_IF_EXCEPTION(throwScope, {});
}
if (!cancelableValue.isUndefined()) {
result.cancelable = convert<IDLBoolean>(lexicalGlobalObject, cancelableValue);
- RETURN_IF_EXCEPTION(throwScope, { });
+ RETURN_IF_EXCEPTION(throwScope, {});
} else
result.cancelable = false;
JSValue composedValue;
if (isNullOrUndefined)
composedValue = jsUndefined();
else {
- composedValue = object->get(&lexicalGlobalObject, Identifier::fromString(vm, "composed"));
- RETURN_IF_EXCEPTION(throwScope, { });
+ composedValue = object->get(&lexicalGlobalObject, Identifier::fromString(vm, "composed"_s));
+ RETURN_IF_EXCEPTION(throwScope, {});
}
if (!composedValue.isUndefined()) {
result.composed = convert<IDLBoolean>(lexicalGlobalObject, composedValue);
- RETURN_IF_EXCEPTION(throwScope, { });
+ RETURN_IF_EXCEPTION(throwScope, {});
} else
result.composed = false;
return result;
diff --git a/src/javascript/jsc/bindings/webcore/JSEventListener.cpp b/src/javascript/jsc/bindings/webcore/JSEventListener.cpp
index 244ee934f..3d6be9cd0 100644
--- a/src/javascript/jsc/bindings/webcore/JSEventListener.cpp
+++ b/src/javascript/jsc/bindings/webcore/JSEventListener.cpp
@@ -179,14 +179,14 @@ void JSEventListener::handleEvent(ScriptExecutionContext& scriptExecutionContext
JSValue handleEventFunction = jsFunction;
- auto callData = getCallData(vm, handleEventFunction);
+ auto callData = getCallData(handleEventFunction);
// If jsFunction is not actually a function and this is an EventListener, see if it implements callback interface.
if (callData.type == CallData::Type::None) {
if (m_isAttribute)
return;
- handleEventFunction = jsFunction->get(lexicalGlobalObject, Identifier::fromString(vm, "handleEvent"));
+ handleEventFunction = jsFunction->get(lexicalGlobalObject, Identifier::fromString(vm, "handleEvent"_s));
if (UNLIKELY(scope.exception())) {
auto* exception = scope.exception();
scope.clearException();
@@ -194,7 +194,7 @@ void JSEventListener::handleEvent(ScriptExecutionContext& scriptExecutionContext
reportException(lexicalGlobalObject, exception);
return;
}
- callData = getCallData(vm, handleEventFunction);
+ callData = getCallData(handleEventFunction);
if (callData.type == CallData::Type::None) {
event.target()->uncaughtExceptionInEventHandler();
reportException(lexicalGlobalObject, createTypeError(lexicalGlobalObject, "'handleEvent' property of event listener should be callable"_s));
@@ -277,7 +277,7 @@ String JSEventListener::functionName() const
auto& vm = isolatedWorld().vm();
JSC::JSLockHolder lock(vm);
- auto* handlerFunction = JSC::jsDynamicCast<JSC::JSFunction*>(vm, m_jsFunction.get());
+ auto* handlerFunction = JSC::jsDynamicCast<JSC::JSFunction*>(m_jsFunction.get());
if (!handlerFunction)
return {};
diff --git a/src/javascript/jsc/bindings/webcore/JSEventListenerOptions.cpp b/src/javascript/jsc/bindings/webcore/JSEventListenerOptions.cpp
index 72c01abd0..a1e6fb69f 100644
--- a/src/javascript/jsc/bindings/webcore/JSEventListenerOptions.cpp
+++ b/src/javascript/jsc/bindings/webcore/JSEventListenerOptions.cpp
@@ -24,7 +24,6 @@
#include "JSDOMConvertBoolean.h"
#include <JavaScriptCore/JSCInlines.h>
-
namespace WebCore {
using namespace JSC;
@@ -36,19 +35,19 @@ template<> EventListenerOptions convertDictionary<EventListenerOptions>(JSGlobal
auto* object = isNullOrUndefined ? nullptr : value.getObject();
if (UNLIKELY(!isNullOrUndefined && !object)) {
throwTypeError(&lexicalGlobalObject, throwScope);
- return { };
+ return {};
}
EventListenerOptions result;
JSValue captureValue;
if (isNullOrUndefined)
captureValue = jsUndefined();
else {
- captureValue = object->get(&lexicalGlobalObject, Identifier::fromString(vm, "capture"));
- RETURN_IF_EXCEPTION(throwScope, { });
+ captureValue = object->get(&lexicalGlobalObject, Identifier::fromString(vm, "capture"_s));
+ RETURN_IF_EXCEPTION(throwScope, {});
}
if (!captureValue.isUndefined()) {
result.capture = convert<IDLBoolean>(lexicalGlobalObject, captureValue);
- RETURN_IF_EXCEPTION(throwScope, { });
+ RETURN_IF_EXCEPTION(throwScope, {});
} else
result.capture = false;
return result;
diff --git a/src/javascript/jsc/bindings/webcore/JSEventModifierInit.cpp b/src/javascript/jsc/bindings/webcore/JSEventModifierInit.cpp
index 53fd87c95..0e9d2c804 100644
--- a/src/javascript/jsc/bindings/webcore/JSEventModifierInit.cpp
+++ b/src/javascript/jsc/bindings/webcore/JSEventModifierInit.cpp
@@ -46,7 +46,7 @@ template<> EventModifierInit convertDictionary<EventModifierInit>(JSGlobalObject
if (isNullOrUndefined)
bubblesValue = jsUndefined();
else {
- bubblesValue = object->get(&lexicalGlobalObject, Identifier::fromString(vm, "bubbles"));
+ bubblesValue = object->get(&lexicalGlobalObject, Identifier::fromString(vm, "bubbles"_s));
RETURN_IF_EXCEPTION(throwScope, {});
}
if (!bubblesValue.isUndefined()) {
@@ -58,7 +58,7 @@ template<> EventModifierInit convertDictionary<EventModifierInit>(JSGlobalObject
if (isNullOrUndefined)
cancelableValue = jsUndefined();
else {
- cancelableValue = object->get(&lexicalGlobalObject, Identifier::fromString(vm, "cancelable"));
+ cancelableValue = object->get(&lexicalGlobalObject, Identifier::fromString(vm, "cancelable"_s));
RETURN_IF_EXCEPTION(throwScope, {});
}
if (!cancelableValue.isUndefined()) {
@@ -70,7 +70,7 @@ template<> EventModifierInit convertDictionary<EventModifierInit>(JSGlobalObject
if (isNullOrUndefined)
composedValue = jsUndefined();
else {
- composedValue = object->get(&lexicalGlobalObject, Identifier::fromString(vm, "composed"));
+ composedValue = object->get(&lexicalGlobalObject, Identifier::fromString(vm, "composed"_s));
RETURN_IF_EXCEPTION(throwScope, {});
}
if (!composedValue.isUndefined()) {
@@ -82,7 +82,7 @@ template<> EventModifierInit convertDictionary<EventModifierInit>(JSGlobalObject
if (isNullOrUndefined)
detailValue = jsUndefined();
else {
- detailValue = object->get(&lexicalGlobalObject, Identifier::fromString(vm, "detail"));
+ detailValue = object->get(&lexicalGlobalObject, Identifier::fromString(vm, "detail"_s));
RETURN_IF_EXCEPTION(throwScope, {});
}
if (!detailValue.isUndefined()) {
@@ -94,7 +94,7 @@ template<> EventModifierInit convertDictionary<EventModifierInit>(JSGlobalObject
if (isNullOrUndefined)
viewValue = jsUndefined();
else {
- viewValue = object->get(&lexicalGlobalObject, Identifier::fromString(vm, "view"));
+ viewValue = object->get(&lexicalGlobalObject, Identifier::fromString(vm, "view"_s));
RETURN_IF_EXCEPTION(throwScope, {});
}
// if (!viewValue.isUndefined()) {
@@ -106,7 +106,7 @@ template<> EventModifierInit convertDictionary<EventModifierInit>(JSGlobalObject
if (isNullOrUndefined)
altKeyValue = jsUndefined();
else {
- altKeyValue = object->get(&lexicalGlobalObject, Identifier::fromString(vm, "altKey"));
+ altKeyValue = object->get(&lexicalGlobalObject, Identifier::fromString(vm, "altKey"_s));
RETURN_IF_EXCEPTION(throwScope, {});
}
if (!altKeyValue.isUndefined()) {
@@ -118,7 +118,7 @@ template<> EventModifierInit convertDictionary<EventModifierInit>(JSGlobalObject
if (isNullOrUndefined)
ctrlKeyValue = jsUndefined();
else {
- ctrlKeyValue = object->get(&lexicalGlobalObject, Identifier::fromString(vm, "ctrlKey"));
+ ctrlKeyValue = object->get(&lexicalGlobalObject, Identifier::fromString(vm, "ctrlKey"_s));
RETURN_IF_EXCEPTION(throwScope, {});
}
if (!ctrlKeyValue.isUndefined()) {
@@ -130,7 +130,7 @@ template<> EventModifierInit convertDictionary<EventModifierInit>(JSGlobalObject
if (isNullOrUndefined)
metaKeyValue = jsUndefined();
else {
- metaKeyValue = object->get(&lexicalGlobalObject, Identifier::fromString(vm, "metaKey"));
+ metaKeyValue = object->get(&lexicalGlobalObject, Identifier::fromString(vm, "metaKey"_s));
RETURN_IF_EXCEPTION(throwScope, {});
}
if (!metaKeyValue.isUndefined()) {
@@ -142,7 +142,7 @@ template<> EventModifierInit convertDictionary<EventModifierInit>(JSGlobalObject
if (isNullOrUndefined)
modifierAltGraphValue = jsUndefined();
else {
- modifierAltGraphValue = object->get(&lexicalGlobalObject, Identifier::fromString(vm, "modifierAltGraph"));
+ modifierAltGraphValue = object->get(&lexicalGlobalObject, Identifier::fromString(vm, "modifierAltGraph"_s));
RETURN_IF_EXCEPTION(throwScope, {});
}
if (!modifierAltGraphValue.isUndefined()) {
@@ -154,7 +154,7 @@ template<> EventModifierInit convertDictionary<EventModifierInit>(JSGlobalObject
if (isNullOrUndefined)
modifierCapsLockValue = jsUndefined();
else {
- modifierCapsLockValue = object->get(&lexicalGlobalObject, Identifier::fromString(vm, "modifierCapsLock"));
+ modifierCapsLockValue = object->get(&lexicalGlobalObject, Identifier::fromString(vm, "modifierCapsLock"_s));
RETURN_IF_EXCEPTION(throwScope, {});
}
if (!modifierCapsLockValue.isUndefined()) {
@@ -166,7 +166,7 @@ template<> EventModifierInit convertDictionary<EventModifierInit>(JSGlobalObject
if (isNullOrUndefined)
shiftKeyValue = jsUndefined();
else {
- shiftKeyValue = object->get(&lexicalGlobalObject, Identifier::fromString(vm, "shiftKey"));
+ shiftKeyValue = object->get(&lexicalGlobalObject, Identifier::fromString(vm, "shiftKey"_s));
RETURN_IF_EXCEPTION(throwScope, {});
}
if (!shiftKeyValue.isUndefined()) {
diff --git a/src/javascript/jsc/bindings/webcore/JSEventTarget.cpp b/src/javascript/jsc/bindings/webcore/JSEventTarget.cpp
index 705e020c3..fb5a35a48 100644
--- a/src/javascript/jsc/bindings/webcore/JSEventTarget.cpp
+++ b/src/javascript/jsc/bindings/webcore/JSEventTarget.cpp
@@ -173,7 +173,7 @@ JSEventTarget::JSEventTarget(Structure* structure, JSDOMGlobalObject& globalObje
void JSEventTarget::finishCreation(VM& vm)
{
Base::finishCreation(vm);
- ASSERT(inherits(vm, info()));
+ ASSERT(inherits(info()));
// static_assert(!std::is_base_of<ActiveDOMObject, EventTarget>::value, "Interface is not marked as [ActiveDOMObject] even though implementation class subclasses ActiveDOMObject.");
}
@@ -203,7 +203,7 @@ JSC_DEFINE_CUSTOM_GETTER(jsEventTargetConstructor, (JSGlobalObject * lexicalGlob
{
VM& vm = JSC::getVM(lexicalGlobalObject);
auto throwScope = DECLARE_THROW_SCOPE(vm);
- auto* prototype = jsDynamicCast<JSEventTargetPrototype*>(vm, JSValue::decode(thisValue));
+ auto* prototype = jsDynamicCast<JSEventTargetPrototype*>(JSValue::decode(thisValue));
if (UNLIKELY(!prototype))
return throwVMTypeError(lexicalGlobalObject, throwScope);
return JSValue::encode(JSEventTarget::getConstructor(JSC::getVM(lexicalGlobalObject), prototype->globalObject()));
diff --git a/src/javascript/jsc/bindings/webcore/JSEventTargetCustom.cpp b/src/javascript/jsc/bindings/webcore/JSEventTargetCustom.cpp
index cc63b0c0c..3b24d0a8a 100644
--- a/src/javascript/jsc/bindings/webcore/JSEventTargetCustom.cpp
+++ b/src/javascript/jsc/bindings/webcore/JSEventTargetCustom.cpp
@@ -51,20 +51,20 @@ JSValue toJSNewlyCreated(JSGlobalObject*, JSDOMGlobalObject* globalObject, Ref<E
EventTarget* JSEventTarget::toWrapped(VM& vm, JSValue value)
{
- // if (value.inherits<JSWindowProxy>(vm))
+ // if (value.inherits<JSWindowProxy>())
// return &jsCast<JSWindowProxy*>(asObject(value))->wrapped();
- // if (value.inherits<JSDOMWindow>(vm))
+ // if (value.inherits<JSDOMWindow>())
// return &jsCast<JSDOMWindow*>(asObject(value))->wrapped();
- // if (value.inherits<JSWorkerGlobalScope>(vm))
+ // if (value.inherits<JSWorkerGlobalScope>())
// return &jsCast<JSWorkerGlobalScope*>(asObject(value))->wrapped();
- if (value.inherits<JSEventTarget>(vm))
+ if (value.inherits<JSEventTarget>())
return &jsCast<JSEventTarget*>(asObject(value))->wrapped();
return nullptr;
}
std::unique_ptr<JSEventTargetWrapper> jsEventTargetCast(VM& vm, JSValue thisValue)
{
- if (auto* target = jsDynamicCast<JSEventTarget*>(vm, thisValue))
+ if (auto* target = jsDynamicCast<JSEventTarget*>(thisValue))
return makeUnique<JSEventTargetWrapper>(target->wrapped(), *target);
// if (auto* window = toJSDOMGlobalObject<JSDOMWindow>(vm, thisValue))
// return makeUnique<JSEventTargetWrapper>(window->wrapped(), *window);
diff --git a/src/javascript/jsc/bindings/webcore/JSFetchHeaders.cpp b/src/javascript/jsc/bindings/webcore/JSFetchHeaders.cpp
index 91d79388b..9ac6cd9f8 100644
--- a/src/javascript/jsc/bindings/webcore/JSFetchHeaders.cpp
+++ b/src/javascript/jsc/bindings/webcore/JSFetchHeaders.cpp
@@ -183,7 +183,7 @@ JSFetchHeaders::JSFetchHeaders(Structure* structure, JSDOMGlobalObject& globalOb
void JSFetchHeaders::finishCreation(VM& vm)
{
Base::finishCreation(vm);
- ASSERT(inherits(vm, info()));
+ ASSERT(inherits(info()));
// static_assert(!std::is_base_of<ActiveDOMObject, FetchHeaders>::value, "Interface is not marked as [ActiveDOMObject] even though implementation class subclasses ActiveDOMObject.");
}
@@ -213,7 +213,7 @@ JSC_DEFINE_CUSTOM_GETTER(jsFetchHeadersConstructor, (JSGlobalObject * lexicalGlo
{
VM& vm = JSC::getVM(lexicalGlobalObject);
auto throwScope = DECLARE_THROW_SCOPE(vm);
- auto* prototype = jsDynamicCast<JSFetchHeadersPrototype*>(vm, JSValue::decode(thisValue));
+ auto* prototype = jsDynamicCast<JSFetchHeadersPrototype*>(JSValue::decode(thisValue));
if (UNLIKELY(!prototype))
return throwVMTypeError(lexicalGlobalObject, throwScope);
return JSValue::encode(JSFetchHeaders::getConstructor(JSC::getVM(lexicalGlobalObject), prototype->globalObject()));
@@ -494,7 +494,7 @@ JSC::JSValue toJS(JSC::JSGlobalObject* lexicalGlobalObject, JSDOMGlobalObject* g
FetchHeaders* JSFetchHeaders::toWrapped(JSC::VM& vm, JSC::JSValue value)
{
- if (auto* wrapper = jsDynamicCast<JSFetchHeaders*>(vm, value))
+ if (auto* wrapper = jsDynamicCast<JSFetchHeaders*>(value))
return &wrapper->wrapped();
return nullptr;
}
diff --git a/src/javascript/jsc/bindings/webcore/JSURLSearchParams.cpp b/src/javascript/jsc/bindings/webcore/JSURLSearchParams.cpp
index 29aea6d1b..038731371 100644
--- a/src/javascript/jsc/bindings/webcore/JSURLSearchParams.cpp
+++ b/src/javascript/jsc/bindings/webcore/JSURLSearchParams.cpp
@@ -190,7 +190,7 @@ JSURLSearchParams::JSURLSearchParams(Structure* structure, JSDOMGlobalObject& gl
void JSURLSearchParams::finishCreation(VM& vm)
{
Base::finishCreation(vm);
- ASSERT(inherits(vm, info()));
+ ASSERT(inherits(info()));
// static_assert(!std::is_base_of<ActiveDOMObject, URLSearchParams>::value, "Interface is not marked as [ActiveDOMObject] even though implementation class subclasses ActiveDOMObject.");
}
@@ -220,7 +220,7 @@ JSC_DEFINE_CUSTOM_GETTER(jsURLSearchParamsConstructor, (JSGlobalObject * lexical
{
VM& vm = JSC::getVM(lexicalGlobalObject);
auto throwScope = DECLARE_THROW_SCOPE(vm);
- auto* prototype = jsDynamicCast<JSURLSearchParamsPrototype*>(vm, JSValue::decode(thisValue));
+ auto* prototype = jsDynamicCast<JSURLSearchParamsPrototype*>(JSValue::decode(thisValue));
if (UNLIKELY(!prototype))
return throwVMTypeError(lexicalGlobalObject, throwScope);
return JSValue::encode(JSURLSearchParams::getConstructor(JSC::getVM(lexicalGlobalObject), prototype->globalObject()));
@@ -551,7 +551,7 @@ JSC::JSValue toJS(JSC::JSGlobalObject* lexicalGlobalObject, JSDOMGlobalObject* g
URLSearchParams* JSURLSearchParams::toWrapped(JSC::VM& vm, JSC::JSValue value)
{
- if (auto* wrapper = jsDynamicCast<JSURLSearchParams*>(vm, value))
+ if (auto* wrapper = jsDynamicCast<JSURLSearchParams*>(value))
return &wrapper->wrapped();
return nullptr;
}
diff --git a/src/javascript/jsc/bindings/webcore/ParsedContentType.cpp b/src/javascript/jsc/bindings/webcore/ParsedContentType.cpp
index 9ef2a1720..04b30cf9b 100644
--- a/src/javascript/jsc/bindings/webcore/ParsedContentType.cpp
+++ b/src/javascript/jsc/bindings/webcore/ParsedContentType.cpp
@@ -1,4 +1,4 @@
- /*
+/*
* Copyright (C) 2011 Google Inc. All rights reserved.
* Copyright (C) 2012 Intel Corporation. All rights reserved.
*
@@ -114,7 +114,6 @@ static String collectHTTPQuotedString(StringView input, unsigned& startIndex)
ASSERT(quoteOrBackslash == '"');
break;
}
-
}
return builder.toString();
}
@@ -232,7 +231,7 @@ bool ParsedContentType::parseContentType(Mode mode)
unsigned index = 0;
unsigned contentTypeLength = m_contentType.length();
skipSpaces(m_contentType, index);
- if (index >= contentTypeLength) {
+ if (index >= contentTypeLength) {
LOG_ERROR("Invalid Content-Type string '%s'", m_contentType.ascii().data());
return false;
}
@@ -347,7 +346,7 @@ ParsedContentType::ParsedContentType(const String& contentType)
String ParsedContentType::charset() const
{
- return parameterValueForName("charset");
+ return parameterValueForName("charset"_s);
}
void ParsedContentType::setCharset(String&& charset)
@@ -365,11 +364,11 @@ size_t ParsedContentType::parameterCount() const
return m_parameterValues.size();
}
-void ParsedContentType::setContentType(StringView contentRange, Mode mode)
+void ParsedContentType::setContentType(String&& contentRange, Mode mode)
{
- m_mimeType = contentRange.toString();
+ m_mimeType = WTFMove(contentRange);
if (mode == Mode::MimeSniff)
- m_mimeType = stripLeadingAndTrailingHTTPSpaces(m_mimeType).convertToASCIILowercase();
+ m_mimeType = stripLeadingAndTrailingHTTPSpaces(StringView(m_mimeType)).convertToASCIILowercase();
else
m_mimeType = m_mimeType.stripWhiteSpace();
}
@@ -408,7 +407,7 @@ String ParsedContentType::serialize() const
builder.append('"');
for (unsigned index = 0; index < value.length(); ++index) {
auto ch = value[index];
- if (ch == '\\' || ch =='"')
+ if (ch == '\\' || ch == '"')
builder.append('\\');
builder.append(ch);
}
@@ -419,4 +418,4 @@ String ParsedContentType::serialize() const
return builder.toString();
}
-}
+} \ No newline at end of file
diff --git a/src/javascript/jsc/bindings/webcore/ParsedContentType.h b/src/javascript/jsc/bindings/webcore/ParsedContentType.h
index d22b97252..03837e6d9 100644
--- a/src/javascript/jsc/bindings/webcore/ParsedContentType.h
+++ b/src/javascript/jsc/bindings/webcore/ParsedContentType.h
@@ -63,7 +63,7 @@ private:
ParsedContentType(const ParsedContentType&) = delete;
ParsedContentType& operator=(ParsedContentType const&) = delete;
bool parseContentType(Mode);
- void setContentType(StringView, Mode);
+ void setContentType(String&&, Mode);
void setContentTypeParameter(const String&, const String&, Mode);
typedef HashMap<String, String> KeyValuePairs;
@@ -73,4 +73,4 @@ private:
String m_mimeType;
};
-}
+} \ No newline at end of file