diff options
69 files changed, 19 insertions, 3531 deletions
| diff --git a/.gitmodules b/.gitmodules index 0030d7cd9..8012e5461 100644 --- a/.gitmodules +++ b/.gitmodules @@ -62,10 +62,3 @@ ignore = dirty  depth = 1  shallow = true  fetchRecurseSubmodules = false -[submodule "src/deps/oniguruma"] -path = src/deps/oniguruma -url = https://github.com/kkos/oniguruma -ignore = dirty -depth = 1 -shallow = true -fetchRecurseSubmodules = false diff --git a/Dockerfile b/Dockerfile index a42aefb74..f5f16056b 100644 --- a/Dockerfile +++ b/Dockerfile @@ -195,29 +195,7 @@ WORKDIR $BUN_DIR  RUN --mount=type=cache,target=/ccache cd $BUN_DIR && \      make libarchive && rm -rf src/deps/libarchive Makefile -FROM bun-base as oniguruma -ARG DEBIAN_FRONTEND -ARG GITHUB_WORKSPACE -ARG ZIG_PATH -# Directory extracts to "bun-webkit" -ARG WEBKIT_DIR -ARG BUN_RELEASE_DIR -ARG BUN_DEPS_OUT_DIR -ARG BUN_DIR -ARG CPU_TARGET -ENV CPU_TARGET=${CPU_TARGET} - -RUN install_packages autoconf automake libtool pkg-config  - -COPY Makefile ${BUN_DIR}/Makefile -COPY src/deps/oniguruma ${BUN_DIR}/src/deps/oniguruma - -ENV CCACHE_DIR=/ccache - -WORKDIR $BUN_DIR - -RUN --mount=type=cache,target=/ccache cd ${BUN_DIR} && make oniguruma && rm -rf src/deps/oniguruma Makefile  FROM bun-base as tinycc @@ -458,7 +436,6 @@ COPY --from=zlib ${BUN_DEPS_OUT_DIR}/*.a ${BUN_DEPS_OUT_DIR}/  COPY --from=lolhtml ${BUN_DEPS_OUT_DIR}/*.a ${BUN_DEPS_OUT_DIR}/  COPY --from=mimalloc ${BUN_DEPS_OUT_DIR}/*.o ${BUN_DEPS_OUT_DIR}/  COPY --from=libarchive ${BUN_DEPS_OUT_DIR}/*.a ${BUN_DEPS_OUT_DIR}/ -COPY --from=oniguruma ${BUN_DEPS_OUT_DIR}/*.a ${BUN_DEPS_OUT_DIR}/  COPY --from=picohttp ${BUN_DEPS_OUT_DIR}/*.o ${BUN_DEPS_OUT_DIR}/  COPY --from=uws ${BUN_DEPS_OUT_DIR}/*.a ${BUN_DEPS_OUT_DIR}/  COPY --from=uws ${BUN_DEPS_OUT_DIR}/*.o ${BUN_DEPS_OUT_DIR}/ @@ -522,7 +499,6 @@ COPY --from=libarchive ${BUN_DEPS_OUT_DIR}/*.a ${BUN_DEPS_OUT_DIR}/  COPY --from=boringssl ${BUN_DEPS_OUT_DIR}/*.a ${BUN_DEPS_OUT_DIR}/  COPY --from=lolhtml ${BUN_DEPS_OUT_DIR}/*.a ${BUN_DEPS_OUT_DIR}/  COPY --from=mimalloc ${BUN_DEPS_OUT_DIR}/*.o ${BUN_DEPS_OUT_DIR}/ -COPY --from=oniguruma ${BUN_DEPS_OUT_DIR}/*.a ${BUN_DEPS_OUT_DIR}/  COPY --from=picohttp ${BUN_DEPS_OUT_DIR}/*.o ${BUN_DEPS_OUT_DIR}/  COPY --from=sqlite ${BUN_DEPS_OUT_DIR}/*.o  ${BUN_DEPS_OUT_DIR}/  COPY --from=tinycc ${BUN_DEPS_OUT_DIR}/*.a ${BUN_DEPS_OUT_DIR}/ @@ -418,8 +418,7 @@ MINIMUM_ARCHIVE_FILES = -L$(BUN_DEPS_OUT_DIR) \  	$(_MIMALLOC_LINK) \  	-lssl \  	-lcrypto \ -	-llolhtml \ -	-lonig +	-llolhtml  ARCHIVE_FILES_WITHOUT_LIBCRYPTO = $(MINIMUM_ARCHIVE_FILES) \  		-larchive \ @@ -531,7 +530,7 @@ builtins: ## to generate builtins  generate-builtins: builtins  .PHONY: vendor-without-check -vendor-without-check: npm-install node-fallbacks runtime_js fallback_decoder bun_error mimalloc picohttp zlib boringssl libarchive lolhtml usockets uws tinycc oniguruma +vendor-without-check: npm-install node-fallbacks runtime_js fallback_decoder bun_error mimalloc picohttp zlib boringssl libarchive lolhtml usockets uws tinycc  BUN_TYPES_REPO_PATH ?= $(realpath packages/bun-types) @@ -583,13 +582,6 @@ boringssl-debug: boringssl-build-debug boringssl-copy  compile-ffi-test:  	clang $(OPTIMIZATION_LEVEL) -shared -undefined dynamic_lookup -o /tmp/bun-ffi-test.dylib -fPIC ./test/bun.js/ffi-test.c -.PHONY: oniguruma -oniguruma: -	cd $(BUN_DEPS_DIR)/oniguruma && \ -	autoreconf -vfi && \ -	CFLAGS="$(CFLAGS)" $(CCACHE_CC_FLAG) ./configure && \ -	make -j${CPUS} && \ -	cp ./src/.libs/libonig.a $(BUN_DEPS_OUT_DIR)/libonig.a  sqlite: @@ -880,7 +872,7 @@ clone-submodules:  	git -c submodule."src/bun.js/WebKit".update=none submodule update --init --recursive --depth=1 --progress  .PHONY: devcontainer -devcontainer: $(OBJ_DIR) $(DEBUG_OBJ_DIR) clone-submodules mimalloc zlib libarchive boringssl picohttp identifier-cache node-fallbacks npm-install api analytics bun_error fallback_decoder bindings uws lolhtml usockets tinycc runtime_js_dev sqlite oniguruma webcrypto-debug webcrypto +devcontainer: $(OBJ_DIR) $(DEBUG_OBJ_DIR) clone-submodules mimalloc zlib libarchive boringssl picohttp identifier-cache node-fallbacks npm-install api analytics bun_error fallback_decoder bindings uws lolhtml usockets tinycc runtime_js_dev sqlite webcrypto-debug webcrypto  .PHONY: devcontainer-build  devcontainer-build: diff --git a/src/bun.js/bindings/OnigurumaRegExp.cpp b/src/bun.js/bindings/OnigurumaRegExp.cpp deleted file mode 100644 index 446a576e8..000000000 --- a/src/bun.js/bindings/OnigurumaRegExp.cpp +++ /dev/null @@ -1,903 +0,0 @@ -#include "OnigurumaRegExp.h" - -#include "ZigGlobalObject.h" -#define ONIG_ESCAPE_UCHAR_COLLISION -#include "oniguruma/src/oniguruma.h" - -using namespace JSC; -using namespace WebCore; - -#include "WebCoreJSClientData.h" - -extern "C" EncodedJSValue jsFunctionGetOnigurumaRegExpConstructor(JSGlobalObject* lexicalGlobalObject, EncodedJSValue thisValue, PropertyName attributeName) -{ -    auto& vm = lexicalGlobalObject->vm(); -    Zig::GlobalObject* globalObject = reinterpret_cast<Zig::GlobalObject*>(lexicalGlobalObject); -    return JSValue::encode(globalObject->OnigurumaRegExpConstructor()); -} - -namespace Zig { - -static WTF::String to16Bit(ASCIILiteral str) -{ -    UChar* buffer = nullptr; -    auto out = WTF::StringImpl::createUninitialized(str.length(), buffer); -    WTF::StringImpl::copyCharacters(buffer, str.characters8(), str.length()); -    return WTF::String(WTFMove(out)); -} - -static WTF::String to16Bit(JSC::JSString* str, JSC::JSGlobalObject* globalObject) -{ -    if (!str->is8Bit() || str->length() == 0) { -        return str->value(globalObject); -    } - -    auto value = str->value(globalObject); -    auto outStr = WTF::String(value.characters8(), value.length()); -    outStr.convertTo16Bit(); -    return outStr; -} - -static WTF::String to16Bit(WTF::String str) -{ -    if (str.is8Bit()) { -        auto out = str.isolatedCopy(); -        out.convertTo16Bit(); -        return out; -    } - -    return str; -} - -static WTF::String to16Bit(JSValue jsValue, JSC::JSGlobalObject* globalObject, ASCIILiteral defaultValue) -{ -    if (!jsValue || jsValue.isUndefinedOrNull()) { -        return to16Bit(defaultValue); -    } - -    auto* jsString = jsValue.toString(globalObject); -    if (jsString->length() == 0) { -        return to16Bit(defaultValue); -    } - -    return to16Bit(jsString, globalObject); -} - -static WTF::String convertToOnigurumaSyntax(const WTF::String& string) -{ -    WTF::StringBuilder sb; -    uint32_t length = string.length(); -    const UChar* characters = string.characters16(); -    bool inCharacterClass = false; -    bool inCharacterProperty = false; - -    for (int i = 0; i < length; i++) { - -        // extend multibyte hex characters -        while (characters[i] == '\\') { -            if (i + 1 < length && characters[i + 1] == 'x') { -                if (i + 2 < length && isxdigit(characters[i + 2])) { -                    if (i + 3 < length && isxdigit(characters[i + 3])) { -                        sb.append(string.substring(i, 4)); -                        sb.append("\\x00"_s); -                        i += 4; -                    } else { -                        // skip '\' -                        sb.append(string.substring(i + 1, 2)); -                        i += 3; -                    } -                } else { -                    break; -                } -            } else { -                break; -            } -        } - -        if (i >= length) { -            break; -        } - -        // convert character properties -        if (UNLIKELY(characters[i] == '{' && i - 2 >= 0 && (characters[i - 1] == 'p' || characters[i - 1] == 'P') && characters[i - 2] == '\\')) { -            sb.append(characters[i]); -            i += 1; -            if (i == length) { -                break; -            } - -            // handle negative -            if (characters[i] == '^') { -                sb.append(characters[i]); -                i += 1; -                if (i == length) { -                    break; -                } -            } - -            // could be \p{propName=propValue} or \p{propValue}. -            bool foundEquals = false; -            WTF::StringBuilder propName; -            while (characters[i] != '}') { -                if (characters[i] == '=') { -                    foundEquals = true; -                    i += 1; -                    if (i == length) { -                        break; -                    } -                    continue; -                } - -                if (foundEquals) { -                    sb.append(characters[i]); -                } else { -                    propName.append(characters[i]); -                } - -                i += 1; -                if (i == length) { -                    break; -                } -            } - -            if (!foundEquals) { -                sb.append(propName.toString()); -            } -        } - -        if (i >= length) { -            break; -        } - -        // escape brackets in character classes -        if (inCharacterClass) { -            // we know ']' will be escaped so there isn't a need to scan for the closing bracket -            if (characters[i] == '[' || characters[i] == ']') { -                if (characters[i - 1] != '\\') { -                    // character class intersections not supported, assume end of character class -                    if (characters[i] == ']') { -                        inCharacterClass = false; -                    } else { -                        sb.append('\\'); -                    } -                } -            } -        } else { -            if (characters[i] == '[') { -                if (i - 1 >= 0) { -                    if (characters[i - 1] != '\\') { -                        inCharacterClass = true; -                    } -                } else { -                    inCharacterClass = true; -                } -            } -        } - -        sb.append(characters[i]); -    } - -    return to16Bit(sb.toString()); -} - -static inline bool is16BitLineTerminator(UChar c) -{ -    return c == '\r' || c == '\n' || (c & ~1) == 0x2028; -} - -static inline WTF::String escapedPattern(const WTF::String& pattern, const UChar* characters, size_t length) -{ -    bool previousCharacterWasBackslash = false; -    bool inBrackets = false; -    bool shouldEscape = false; - -    // 15.10.6.4 specifies that RegExp.prototype.toString must return '/' + source + '/', -    // and also states that the result must be a valid RegularExpressionLiteral. '//' is -    // not a valid RegularExpressionLiteral (since it is a single line comment), and hence -    // source cannot ever validly be "". If the source is empty, return a different Pattern -    // that would match the same thing. -    if (!length) -        return "(?:)"_s; - -    // early return for strings that don't contain a forwards slash and LineTerminator -    for (unsigned i = 0; i < length; ++i) { -        UChar ch = characters[i]; -        if (!previousCharacterWasBackslash) { -            if (inBrackets) { -                if (ch == ']') -                    inBrackets = false; -            } else { -                if (ch == '/') { -                    shouldEscape = true; -                    break; -                } -                if (ch == '[') -                    inBrackets = true; -            } -        } - -        if (is16BitLineTerminator(ch)) { -            shouldEscape = true; -            break; -        } - -        if (previousCharacterWasBackslash) -            previousCharacterWasBackslash = false; -        else -            previousCharacterWasBackslash = ch == '\\'; -    } - -    if (!shouldEscape) -        return pattern; - -    previousCharacterWasBackslash = false; -    inBrackets = false; -    StringBuilder result; -    for (unsigned i = 0; i < length; ++i) { -        UChar ch = characters[i]; -        if (!previousCharacterWasBackslash) { -            if (inBrackets) { -                if (ch == ']') -                    inBrackets = false; -            } else { -                if (ch == '/') -                    result.append('\\'); -                else if (ch == '[') -                    inBrackets = true; -            } -        } - -        // escape LineTerminator -        if (is16BitLineTerminator(ch)) { -            if (!previousCharacterWasBackslash) { -                result.append('\\'); -            } - -            if (ch == '\n') { -                result.append('n'); -            } else if (ch == '\r') { -                result.append('r'); -            } else if (ch == 0x2028) { -                result.append("u2028"); -            } else { -                result.append("u2029"); -            } -        } else -            result.append(ch); - -        if (previousCharacterWasBackslash) -            previousCharacterWasBackslash = false; -        else -            previousCharacterWasBackslash = ch == '\\'; -    } - -    return result.toString(); -} - -WTF::String sortRegExpFlags(WTF::String flagsString) -{ -    WTF::Vector<UChar> flags = { 'd', 'g', 'i', 'm', 's', 'u', 'y' }; -    WTF::StringBuilder result; - -    for (auto flag : flags) { -        if (flagsString.contains(flag)) { -            result.append(flag); -        } -    } - -    return result.toString(); -} - -bool validateRegExpFlags(WTF::StringView flags) -{ -    std::map<char16_t, bool> flagsAllowed = { { 'g', false }, { 'i', false }, { 'm', false }, { 's', false }, { 'u', false }, { 'y', false }, { 'd', false } }; -    for (auto flag : flags.codeUnits()) { -        auto flagItr = flagsAllowed.find(flag); -        if (flagItr == flagsAllowed.end() || flagItr->second) { -            return false; -        } -        flagItr->second = true; -    } - -    return true; -} - -std::once_flag onigurumaEncodingInitFlag; - -static regex_t* createOnigurumaRegExp(JSGlobalObject* globalObject, const WTF::String& patternString, const WTF::String& flagsString, int& errorCode, OnigErrorInfo& errorInfo) -{ -    auto& vm = globalObject->vm(); -    auto throwScope = DECLARE_THROW_SCOPE(vm); - -    OnigEncoding encodings[] = { -        ONIG_ENCODING_UTF16_LE, -    }; -    std::call_once(onigurumaEncodingInitFlag, [&encodings]() { -        onig_initialize(encodings, 1); -    }); - -    OnigOptionType options = 0; -    if (flagsString.contains('i')) { -        options |= ONIG_OPTION_IGNORECASE; -    } -    if (flagsString.contains('m')) { -        options |= ONIG_OPTION_MULTILINE; -    } else { -        options |= ONIG_OPTION_SINGLELINE; -    } -    if (flagsString.contains('s')) { -        options |= ONIG_OPTION_MULTILINE; -    } - -    OnigSyntaxType* syntax = ONIG_SYNTAX_ONIGURUMA; -    OnigEncodingType* encoding = encodings[0]; -    regex_t* onigRegExp = NULL; - -    errorCode = onig_new( -        &onigRegExp, -        reinterpret_cast<const OnigUChar*>(patternString.characters16()), -        reinterpret_cast<const OnigUChar*>(patternString.characters16() + patternString.length()), -        options, -        encoding, -        syntax, -        &errorInfo); - -    return onigRegExp; -} - -class OnigurumaRegExpPrototype final : public JSC::JSNonFinalObject { -public: -    using Base = JSC::JSNonFinalObject; - -    static OnigurumaRegExpPrototype* create(JSC::VM& vm, JSGlobalObject* globalObject, JSC::Structure* structure) -    { -        OnigurumaRegExpPrototype* ptr = new (NotNull, JSC::allocateCell<OnigurumaRegExpPrototype>(vm)) OnigurumaRegExpPrototype(vm, globalObject, structure); -        ptr->finishCreation(vm, globalObject); -        return ptr; -    } - -    DECLARE_INFO; -    template<typename CellType, JSC::SubspaceAccess> -    static JSC::GCClient::IsoSubspace* subspaceFor(JSC::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()); -    } - -private: -    OnigurumaRegExpPrototype(JSC::VM& vm, JSC::JSGlobalObject* globalObject, JSC::Structure* structure) -        : Base(vm, structure) -    { -    } - -    void finishCreation(JSC::VM&, JSC::JSGlobalObject*); -}; - -const ClassInfo OnigurumaRegExpConstructor::s_info = { "Function"_s, &Base::s_info, nullptr, nullptr, CREATE_METHOD_TABLE(OnigurumaRegExpConstructor) }; -const ClassInfo OnigurumaRegExpPrototype::s_info = { "Object"_s, &Base::s_info, nullptr, nullptr, CREATE_METHOD_TABLE(OnigurumaRegExpPrototype) }; -const ClassInfo OnigurumaRegEx::s_info = { "RegExp"_s, &Base::s_info, nullptr, nullptr, CREATE_METHOD_TABLE(OnigurumaRegEx) }; - -JSC_DEFINE_CUSTOM_GETTER(onigurumaRegExpProtoGetterGlobal, (JSGlobalObject * globalObject, EncodedJSValue encodedThis, PropertyName)) -{ -    auto* thisValue = jsDynamicCast<OnigurumaRegEx*>(JSValue::decode(encodedThis)); -    if (UNLIKELY(!thisValue)) { -        return JSValue::encode(jsUndefined()); -    } -    return JSValue::encode(jsBoolean(thisValue->flagsString().contains('g'))); -} - -JSC_DEFINE_CUSTOM_GETTER(onigurumaRegExpProtoGetterDotAll, (JSGlobalObject * globalObject, EncodedJSValue encodedThis, PropertyName)) -{ -    auto* thisValue = jsDynamicCast<OnigurumaRegEx*>(JSValue::decode(encodedThis)); -    if (UNLIKELY(!thisValue)) { -        return JSValue::encode(jsUndefined()); -    } -    return JSValue::encode(jsBoolean(thisValue->flagsString().contains('s'))); -} - -JSC_DEFINE_CUSTOM_GETTER(onigurumaRegExpProtoGetterHasIndices, (JSGlobalObject * globalObject, EncodedJSValue encodedThis, PropertyName)) -{ -    auto* thisValue = jsDynamicCast<OnigurumaRegEx*>(JSValue::decode(encodedThis)); -    if (UNLIKELY(!thisValue)) { -        return JSValue::encode(jsUndefined()); -    } -    return JSValue::encode(jsBoolean(thisValue->flagsString().contains('d'))); -} - -JSC_DEFINE_CUSTOM_GETTER(onigurumaRegExpProtoGetterIgnoreCase, (JSGlobalObject * globalObject, EncodedJSValue encodedThis, PropertyName)) -{ -    auto* thisValue = jsDynamicCast<OnigurumaRegEx*>(JSValue::decode(encodedThis)); -    if (UNLIKELY(!thisValue)) { -        return JSValue::encode(jsUndefined()); -    } -    return JSValue::encode(jsBoolean(thisValue->flagsString().contains('i'))); -} - -JSC_DEFINE_CUSTOM_GETTER(onigurumaRegExpProtoGetterMultiline, (JSGlobalObject * globalObject, EncodedJSValue encodedThis, PropertyName)) -{ -    auto* thisValue = jsDynamicCast<OnigurumaRegEx*>(JSValue::decode(encodedThis)); -    if (UNLIKELY(!thisValue)) { -        return JSValue::encode(jsUndefined()); -    } -    return JSValue::encode(jsBoolean(thisValue->flagsString().contains('m'))); -} - -JSC_DEFINE_CUSTOM_GETTER(onigurumaRegExpProtoGetterSticky, (JSGlobalObject * globalObject, EncodedJSValue encodedThis, PropertyName)) -{ -    auto* thisValue = jsDynamicCast<OnigurumaRegEx*>(JSValue::decode(encodedThis)); -    if (UNLIKELY(!thisValue)) { -        return JSValue::encode(jsUndefined()); -    } - -    return JSValue::encode(jsBoolean(thisValue->flagsString().contains('y'))); -} - -JSC_DEFINE_CUSTOM_GETTER(onigurumaRegExpProtoGetterUnicode, (JSGlobalObject * globalObject, EncodedJSValue encodedThis, PropertyName)) -{ -    auto* thisValue = jsDynamicCast<OnigurumaRegEx*>(JSValue::decode(encodedThis)); -    if (UNLIKELY(!thisValue)) { -        return JSValue::encode(jsUndefined()); -    } -    return JSValue::encode(jsBoolean(thisValue->flagsString().contains('u'))); -} - -JSC_DEFINE_CUSTOM_GETTER(onigurumaRegExpProtoGetterSource, (JSGlobalObject * globalObject, EncodedJSValue encodedThis, PropertyName)) -{ -    auto* thisValue = jsDynamicCast<OnigurumaRegEx*>(JSValue::decode(encodedThis)); -    if (!thisValue) -        return JSValue::encode(jsUndefined()); - -    return JSValue::encode(jsString(globalObject->vm(), escapedPattern(thisValue->patternString(), thisValue->patternString().characters16(), thisValue->patternString().length()))); -} - -JSC_DEFINE_CUSTOM_GETTER(onigurumaRegExpProtoGetterFlags, (JSGlobalObject * globalObject, EncodedJSValue encodedThis, PropertyName)) -{ -    auto* thisValue = jsDynamicCast<OnigurumaRegEx*>(JSValue::decode(encodedThis)); -    if (!thisValue) -        return JSValue::encode(jsUndefined()); - -    return JSValue::encode(jsString(globalObject->vm(), thisValue->flagsString())); -} - -JSC_DEFINE_CUSTOM_GETTER(onigurumaRegExpProtoGetterLastIndex, (JSGlobalObject * globalObject, EncodedJSValue encodedThis, PropertyName)) -{ -    auto* thisValue = jsDynamicCast<OnigurumaRegEx*>(JSValue::decode(encodedThis)); -    if (UNLIKELY(!thisValue)) { -        return JSValue::encode(jsUndefined()); -    } -    return JSValue::encode(jsNumber(thisValue->m_lastIndex)); -} - -JSC_DEFINE_CUSTOM_SETTER(onigurumaRegExpProtoSetterLastIndex, (JSGlobalObject * globalObject, EncodedJSValue encodedThis, EncodedJSValue encodedValue, PropertyName)) -{ -    auto* thisValue = jsDynamicCast<OnigurumaRegEx*>(JSValue::decode(encodedThis)); -    if (UNLIKELY(!thisValue)) { -        return JSValue::encode(jsUndefined()); -    } -    auto throwScope = DECLARE_THROW_SCOPE(globalObject->vm()); -    JSValue value = JSValue::decode(encodedValue); -    if (!value.isAnyInt()) { -        throwException(globalObject, throwScope, createTypeError(globalObject, "lastIndex must be an integer"_s)); -        return false; -    } -    int32_t lastIndex = value.toInt32(globalObject); -    thisValue->m_lastIndex = lastIndex; -    return true; -} - -// compile is deprecated -JSC_DEFINE_HOST_FUNCTION(onigurumaRegExpProtoFuncCompile, (JSGlobalObject * globalObject, JSC::CallFrame* callFrame)) -{ -    VM& vm = globalObject->vm(); -    auto scope = DECLARE_CATCH_SCOPE(vm); -    auto throwScope = DECLARE_THROW_SCOPE(vm); - -    JSValue thisValue = callFrame->thisValue(); -    auto* thisRegExp = jsDynamicCast<OnigurumaRegEx*>(callFrame->thisValue()); -    if (UNLIKELY(!thisRegExp)) -        return JSValue::encode(jsUndefined()); - -    if (thisRegExp->globalObject() != globalObject) { -        throwScope.throwException(globalObject, createTypeError(globalObject, makeString("RegExp.prototype.compile function's Realm must be the same to |this| RegExp object"_s))); -        return JSValue::encode({}); -    } - -    JSValue arg0 = callFrame->argument(0); -    JSValue arg1 = callFrame->argument(1); - -    WTF::String patternStringExtended; -    if (auto* regExpObject = jsDynamicCast<OnigurumaRegEx*>(arg0)) { -        if (!arg1.isUndefined()) { -            throwScope.throwException(globalObject, createTypeError(globalObject, makeString("Cannot supply flags when constructing one RegExp from another."_s))); -            return JSValue::encode({}); -        } -        thisRegExp->setPatternString(regExpObject->patternString()); -        patternStringExtended = convertToOnigurumaSyntax(thisRegExp->patternString()); -        thisRegExp->setFlagsString(regExpObject->flagsString()); -    } else { -        WTF::String newPatternString = to16Bit(arg0, globalObject, "(?:)"_s); -        RETURN_IF_EXCEPTION(scope, {}); - -        patternStringExtended = convertToOnigurumaSyntax(newPatternString); - -        WTF::String newFlagsString = to16Bit(arg1, globalObject, ""_s); -        RETURN_IF_EXCEPTION(scope, {}); - -        if (!validateRegExpFlags(newFlagsString)) { -            throwScope.throwException(globalObject, createSyntaxError(globalObject, makeString("Invalid flags supplied to RegExp constructor."_s))); -            return JSValue::encode({}); -        } - -        newFlagsString = sortRegExpFlags(newFlagsString); - -        thisRegExp->setPatternString(newPatternString); -        thisRegExp->setFlagsString(newFlagsString); -    } - -    // for pattern syntax checking -    int errorCode = 0; -    OnigErrorInfo errorInfo = { 0 }; -    regex_t* onigurumaRegExp = createOnigurumaRegExp(globalObject, convertToOnigurumaSyntax(thisRegExp->patternString()), thisRegExp->flagsString(), errorCode, errorInfo); -    if (errorCode != ONIG_NORMAL) { -        OnigUChar errorBuff[ONIG_MAX_ERROR_MESSAGE_LEN] = { 0 }; -        int length = onig_error_code_to_str(errorBuff, errorCode, &errorInfo); -        WTF::StringBuilder errorMessage; -        errorMessage.append("Invalid regular expression: "_s); -        if (length < 0) { -            errorMessage.append("An unknown error occurred."_s); -        } else { -            errorMessage.appendCharacters(errorBuff, length); -        } -        if (onigurumaRegExp != nullptr) { -            onig_free(onigurumaRegExp); -        } -        throwScope.throwException(globalObject, createSyntaxError(globalObject, errorMessage.toString())); -        return JSValue::encode({}); -    } -    onig_free(onigurumaRegExp); - -    thisRegExp->m_lastIndex = 0; - -    return JSValue::encode(thisRegExp); -} - -JSC_DEFINE_HOST_FUNCTION(onigurumaRegExpProtoFuncTest, (JSGlobalObject * globalObject, JSC::CallFrame* callFrame)) -{ -    auto& vm = globalObject->vm(); -    auto scope = DECLARE_THROW_SCOPE(vm); -    auto throwScope = DECLARE_THROW_SCOPE(vm); - -    auto* thisValue = jsDynamicCast<OnigurumaRegEx*>(callFrame->thisValue()); -    if (!thisValue) -        return JSValue::encode(jsUndefined()); - -    JSValue arg = callFrame->argument(0); -    if (!arg.isString()) { -        scope.throwException(globalObject, createTypeError(globalObject, "Argument 0 of RegExp.prototype.test must be a string"_s)); -        return JSValue::encode(jsBoolean(false)); -    } - -    WTF::String string = to16Bit(arg, globalObject, ""_s); -    RETURN_IF_EXCEPTION(scope, JSValue::encode({})); - -    int errorCode = 0; -    OnigErrorInfo errorInfo = { 0 }; -    regex_t* onigurumaRegExp = createOnigurumaRegExp(globalObject, convertToOnigurumaSyntax(thisValue->patternString()), thisValue->flagsString(), errorCode, errorInfo); -    if (errorCode != ONIG_NORMAL) { -        OnigUChar errorBuff[ONIG_MAX_ERROR_MESSAGE_LEN] = { 0 }; -        int length = onig_error_code_to_str(errorBuff, errorCode, &errorInfo); -        WTF::StringBuilder errorMessage; -        errorMessage.append("Invalid regular expression: "_s); -        if (length < 0) { -            errorMessage.append("An unknown error occurred."_s); -        } else { -            errorMessage.appendCharacters(errorBuff, length); -        } -        if (onigurumaRegExp != nullptr) { -            onig_free(onigurumaRegExp); -        } -        throwScope.throwException(globalObject, createSyntaxError(globalObject, errorMessage.toString())); -        return JSValue::encode({}); -    } - -    OnigRegion* region = onig_region_new(); - -    const OnigUChar* end = reinterpret_cast<const OnigUChar*>(string.characters16() + string.length()); -    const OnigUChar* start = reinterpret_cast<const OnigUChar*>(string.characters16() + thisValue->m_lastIndex); -    const OnigUChar* range = end; - -    if (thisValue->m_lastIndex >= string.length()) { -        onig_region_free(region, 1); -        onig_free(onigurumaRegExp); -        thisValue->m_lastIndex = 0; -        return JSValue::encode(jsBoolean(false)); -    } - -    int result = onig_search( -        onigurumaRegExp, -        reinterpret_cast<const OnigUChar*>(string.characters16()), -        end, -        start, -        range, -        region, -        ONIG_OPTION_DEFAULT); - -    if (result < 0) { -        thisValue->m_lastIndex = 0; -        onig_region_free(region, 1); -        onig_free(onigurumaRegExp); -        return JSValue::encode(jsBoolean(false)); -    } - -    if (thisValue->flagsString().contains('y') && region->beg[0] != thisValue->m_lastIndex) { -        onig_region_free(region, 1); -        onig_free(onigurumaRegExp); -        return JSValue::encode(jsBoolean(false)); -    } - -    if (thisValue->flagsString().contains('g')) { -        thisValue->m_lastIndex = region->end[0] / 2; -    } else { -        thisValue->m_lastIndex = 0; -    } - -    onig_region_free(region, 1); -    onig_free(onigurumaRegExp); - -    return JSValue::encode(jsBoolean(true)); -} - -JSC_DEFINE_HOST_FUNCTION(onigurumaRegExpProtoFuncExec, (JSGlobalObject * globalObject, JSC::CallFrame* callFrame)) -{ -    auto& vm = globalObject->vm(); -    auto scope = DECLARE_THROW_SCOPE(vm); -    auto throwScope = DECLARE_THROW_SCOPE(vm); - -    auto* thisValue = jsDynamicCast<OnigurumaRegEx*>(callFrame->thisValue()); -    if (!thisValue) -        return JSValue::encode(jsUndefined()); - -    JSValue arg = callFrame->argument(0); -    if (!arg || arg.isUndefinedOrNull()) { -        thisValue->m_lastIndex = 0; -        return JSValue::encode(jsNull()); -    } - -    WTF::String string = to16Bit(arg, globalObject, ""_s); -    RETURN_IF_EXCEPTION(scope, JSValue::encode({})); - -    int errorCode = 0; -    OnigErrorInfo errorInfo = { 0 }; -    regex_t* onigurumaRegExp = createOnigurumaRegExp(globalObject, convertToOnigurumaSyntax(thisValue->patternString()), thisValue->flagsString(), errorCode, errorInfo); -    if (errorCode != ONIG_NORMAL) { -        OnigUChar errorBuff[ONIG_MAX_ERROR_MESSAGE_LEN] = { 0 }; -        int length = onig_error_code_to_str(errorBuff, errorCode, &errorInfo); -        WTF::StringBuilder errorMessage; -        errorMessage.append("Invalid regular expression: "_s); -        if (length < 0) { -            errorMessage.append("An unknown error occurred."_s); -        } else { -            errorMessage.appendCharacters(errorBuff, length); -        } -        if (onigurumaRegExp != nullptr) { -            onig_free(onigurumaRegExp); -        } -        throwScope.throwException(globalObject, createSyntaxError(globalObject, errorMessage.toString())); -        return JSValue::encode({}); -    } - -    OnigRegion* region = onig_region_new(); - -    const OnigUChar* end = reinterpret_cast<const OnigUChar*>(string.characters16() + string.length()); -    const OnigUChar* start = reinterpret_cast<const OnigUChar*>(string.characters16() + thisValue->m_lastIndex); -    const OnigUChar* range = end; - -    int result = onig_search( -        onigurumaRegExp, -        reinterpret_cast<const OnigUChar*>(string.characters16()), -        end, -        start, -        range, -        region, -        ONIG_OPTION_DEFAULT); - -    if (result < 0) { -        onig_region_free(region, 1); -        onig_free(onigurumaRegExp); -        thisValue->m_lastIndex = 0; -        return JSValue::encode(jsNull()); -    } - -    JSArray* array = constructEmptyArray(globalObject, nullptr, 0); -    RETURN_IF_EXCEPTION(scope, JSValue::encode({})); -    JSArray* indicesArray = constructEmptyArray(globalObject, nullptr, 0); -    RETURN_IF_EXCEPTION(scope, JSValue::encode({})); - -    array->putDirect(vm, vm.propertyNames->index, jsNumber(region->beg[0] / 2)); -    array->putDirect(vm, vm.propertyNames->input, jsString(vm, string)); -    array->putDirect(vm, vm.propertyNames->groups, jsUndefined()); - -    for (int i = 0; i < region->num_regs; i++) { -        size_t outStringLen = (region->end[i] / 2) - (region->beg[i] / 2); -        UChar* ptr; -        WTF::String outString; -        if (outStringLen > 0) { -            outString = WTF::String::createUninitialized(static_cast<unsigned int>(outStringLen), ptr); -            if (UNLIKELY(!ptr)) { -                throwOutOfMemoryError(globalObject, scope); -                onig_region_free(region, 1); -                onig_free(onigurumaRegExp); -                return JSValue::encode(jsNull()); -            } - -            memcpy(ptr, (region->beg[i] / 2) + string.characters16(), outStringLen * sizeof(UChar)); -        } - -        array->putDirectIndex(globalObject, i, jsString(vm, outString)); - -        JSArray* indices = constructEmptyArray(globalObject, nullptr, 0); -        RETURN_IF_EXCEPTION(scope, JSValue::encode({})); -        indices->putDirectIndex(globalObject, 0, jsNumber(region->beg[i] / 2)); -        indices->putDirectIndex(globalObject, 1, jsNumber(region->end[i] / 2)); -        indicesArray->putDirectIndex(globalObject, i, indices); -    } - -    if (thisValue->flagsString().contains('d')) { -        array->putDirect(vm, vm.propertyNames->indices, indicesArray); -    } - -    if (thisValue->flagsString().contains('g')) { -        thisValue->m_lastIndex = region->end[0] / 2; -    } else { -        thisValue->m_lastIndex = 0; -    } - -    onig_region_free(region, 1); -    onig_free(onigurumaRegExp); - -    return JSValue::encode(array); -} - -JSC_DEFINE_HOST_FUNCTION(onigurumaRegExpProtoFuncToString, (JSGlobalObject * globalObject, JSC::CallFrame* callFrame)) -{ -    auto* thisValue = jsDynamicCast<OnigurumaRegEx*>(callFrame->thisValue()); -    if (!thisValue) -        return JSValue::encode(jsUndefined()); - -    WTF::String patternString = escapedPattern(thisValue->patternString(), thisValue->patternString().characters16(), thisValue->patternString().length()); -    WTF::String flagsString = thisValue->flagsString(); - -    WTF::StringBuilder source; -    source.append("/"_s); -    source.append(patternString); -    source.append("/"_s); -    source.append(flagsString); - -    return JSValue::encode(jsString(globalObject->vm(), source.toString())); -} - -void OnigurumaRegExpPrototype::finishCreation(VM& vm, JSGlobalObject* globalObject) -{ -    Base::finishCreation(vm); -    ASSERT(inherits(info())); -    this->putDirectNativeFunction(vm, globalObject, PropertyName(vm.propertyNames->compile), 2, onigurumaRegExpProtoFuncCompile, ImplementationVisibility::Public, NoIntrinsic, static_cast<unsigned>(0)); -    this->putDirectNativeFunction(vm, globalObject, PropertyName(vm.propertyNames->exec), 1, onigurumaRegExpProtoFuncExec, ImplementationVisibility::Public, NoIntrinsic, static_cast<unsigned>(0)); -    this->putDirectNativeFunction(vm, globalObject, PropertyName(vm.propertyNames->toString), 0, onigurumaRegExpProtoFuncToString, ImplementationVisibility::Public, NoIntrinsic, static_cast<unsigned>(0)); -    this->putDirectCustomAccessor(vm, vm.propertyNames->global, JSC::CustomGetterSetter::create(vm, onigurumaRegExpProtoGetterGlobal, nullptr), 0 | PropertyAttribute::CustomAccessor | PropertyAttribute::ReadOnly); -    this->putDirectCustomAccessor(vm, vm.propertyNames->dotAll, JSC::CustomGetterSetter::create(vm, onigurumaRegExpProtoGetterDotAll, nullptr), 0 | PropertyAttribute::CustomAccessor | PropertyAttribute::ReadOnly); -    this->putDirectCustomAccessor(vm, vm.propertyNames->hasIndices, JSC::CustomGetterSetter::create(vm, onigurumaRegExpProtoGetterHasIndices, nullptr), 0 | PropertyAttribute::CustomAccessor | PropertyAttribute::ReadOnly); -    this->putDirectCustomAccessor(vm, vm.propertyNames->ignoreCase, JSC::CustomGetterSetter::create(vm, onigurumaRegExpProtoGetterIgnoreCase, nullptr), 0 | PropertyAttribute::CustomAccessor | PropertyAttribute::ReadOnly); -    this->putDirectCustomAccessor(vm, vm.propertyNames->multiline, JSC::CustomGetterSetter::create(vm, onigurumaRegExpProtoGetterMultiline, nullptr), 0 | PropertyAttribute::CustomAccessor | PropertyAttribute::ReadOnly); -    this->putDirectCustomAccessor(vm, vm.propertyNames->sticky, JSC::CustomGetterSetter::create(vm, onigurumaRegExpProtoGetterSticky, nullptr), 0 | PropertyAttribute::CustomAccessor | PropertyAttribute::ReadOnly); -    this->putDirectCustomAccessor(vm, vm.propertyNames->unicode, JSC::CustomGetterSetter::create(vm, onigurumaRegExpProtoGetterUnicode, nullptr), 0 | PropertyAttribute::CustomAccessor | PropertyAttribute::ReadOnly); -    this->putDirectCustomAccessor(vm, vm.propertyNames->source, JSC::CustomGetterSetter::create(vm, onigurumaRegExpProtoGetterSource, nullptr), 0 | PropertyAttribute::CustomAccessor | PropertyAttribute::ReadOnly); -    this->putDirectCustomAccessor(vm, vm.propertyNames->flags, JSC::CustomGetterSetter::create(vm, onigurumaRegExpProtoGetterFlags, nullptr), 0 | PropertyAttribute::CustomAccessor | PropertyAttribute::ReadOnly); -    this->putDirectCustomAccessor(vm, vm.propertyNames->lastIndex, JSC::CustomGetterSetter::create(vm, onigurumaRegExpProtoGetterLastIndex, onigurumaRegExpProtoSetterLastIndex), 0 | PropertyAttribute::CustomAccessor); - -    this->putDirectNativeFunction(vm, globalObject, PropertyName(vm.propertyNames->test), 1, onigurumaRegExpProtoFuncTest, ImplementationVisibility::Public, NoIntrinsic, static_cast<unsigned>(0)); - -    this->putDirectBuiltinFunction(vm, globalObject, vm.propertyNames->matchSymbol, onigurumaRegExpPrototypeMatchCodeGenerator(vm), static_cast<unsigned>(0)); -    this->putDirectBuiltinFunction(vm, globalObject, vm.propertyNames->matchAllSymbol, onigurumaRegExpPrototypeMatchAllCodeGenerator(vm), static_cast<unsigned>(0)); -    this->putDirectBuiltinFunction(vm, globalObject, vm.propertyNames->replaceSymbol, onigurumaRegExpPrototypeReplaceCodeGenerator(vm), static_cast<unsigned>(0)); -    this->putDirectBuiltinFunction(vm, globalObject, vm.propertyNames->searchSymbol, onigurumaRegExpPrototypeSearchCodeGenerator(vm), static_cast<unsigned>(0)); -    this->putDirectBuiltinFunction(vm, globalObject, vm.propertyNames->splitSymbol, onigurumaRegExpPrototypeSplitCodeGenerator(vm), static_cast<unsigned>(0)); -} - -JSC::Structure* OnigurumaRegExpConstructor::createClassStructure(JSC::JSGlobalObject* globalObject, JSC::JSValue prototype) -{ -    JSC::VM& vm = globalObject->vm(); -    return OnigurumaRegEx::createStructure( -        vm, -        globalObject, -        prototype); -} -JSC::JSObject* OnigurumaRegExpConstructor::createPrototype(JSC::JSGlobalObject* globalObject) -{ -    return OnigurumaRegExpPrototype::create(globalObject->vm(), globalObject, OnigurumaRegExpPrototype::createStructure(globalObject->vm(), globalObject, globalObject->objectPrototype())); -} - -void OnigurumaRegExpConstructor::finishCreation(VM& vm, JSValue prototype) -{ - -    Base::finishCreation(vm, 0, "RegExp"_s, PropertyAdditionMode::WithoutStructureTransition); -    putDirectWithoutTransition(vm, vm.propertyNames->prototype, prototype, PropertyAttribute::DontEnum | PropertyAttribute::DontDelete | PropertyAttribute::ReadOnly); -    ASSERT(inherits(info())); -} - -OnigurumaRegExpConstructor* OnigurumaRegExpConstructor::create(JSC::VM& vm, JSC::JSGlobalObject* globalObject, JSC::Structure* structure, JSValue prototype) -{ -    OnigurumaRegExpConstructor* ptr = new (NotNull, JSC::allocateCell<OnigurumaRegExpConstructor>(vm)) OnigurumaRegExpConstructor(vm, structure, construct); -    ptr->finishCreation(vm, prototype); -    return ptr; -} - -static JSC::EncodedJSValue constructOrCall(Zig::GlobalObject* globalObject, JSValue arg0, JSValue arg1) -{ -    auto& vm = globalObject->vm(); -    auto scope = DECLARE_CATCH_SCOPE(vm); -    auto throwScope = DECLARE_THROW_SCOPE(vm); - -    WTF::String patternString = to16Bit(arg0, globalObject, "(?:)"_s); -    RETURN_IF_EXCEPTION(scope, {}); - -    WTF::String flagsString = to16Bit(arg1, globalObject, ""_s); -    RETURN_IF_EXCEPTION(scope, {}); - -    if (!validateRegExpFlags(flagsString)) { -        throwScope.throwException(globalObject, createSyntaxError(globalObject, makeString("Invalid flags supplied to RegExp constructor."_s))); -        return JSValue::encode({}); -    } - -    flagsString = sortRegExpFlags(flagsString); - -    // create for pattern compilation errors, but need to create another for each exec/test -    int errorCode = 0; -    OnigErrorInfo errorInfo = { 0 }; -    regex_t* onigurumaRegExp = createOnigurumaRegExp(globalObject, convertToOnigurumaSyntax(patternString), flagsString, errorCode, errorInfo); -    if (errorCode != ONIG_NORMAL) { -        OnigUChar errorBuff[ONIG_MAX_ERROR_MESSAGE_LEN] = { 0 }; -        int length = onig_error_code_to_str(errorBuff, errorCode, &errorInfo); -        WTF::StringBuilder errorMessage; -        errorMessage.append("Invalid regular expression: "_s); -        if (length < 0) { -            errorMessage.append("An unknown error occurred."_s); -        } else { -            errorMessage.appendCharacters(errorBuff, length); -        } -        throwScope.throwException(globalObject, createSyntaxError(globalObject, errorMessage.toString())); -        return JSValue::encode({}); -    } -    onig_free(onigurumaRegExp); - -    OnigurumaRegEx* result = OnigurumaRegEx::create(globalObject, WTFMove(patternString), WTFMove(flagsString)); - -    return JSValue::encode(result); -} - -JSC::EncodedJSValue JSC_HOST_CALL_ATTRIBUTES OnigurumaRegExpConstructor::construct(JSC::JSGlobalObject* lexicalGlobalObject, JSC::CallFrame* callFrame) -{ -    Zig::GlobalObject* globalObject = reinterpret_cast<Zig::GlobalObject*>(lexicalGlobalObject); -    JSC::VM& vm = globalObject->vm(); -    JSObject* newTarget = asObject(callFrame->newTarget()); -    auto* constructor = globalObject->OnigurumaRegExpConstructor(); -    Structure* structure = globalObject->OnigurumaRegExpStructure(); -    if (constructor != newTarget) { -        auto scope = DECLARE_THROW_SCOPE(vm); - -        auto* functionGlobalObject = reinterpret_cast<Zig::GlobalObject*>( -            // ShadowRealm functions belong to a different global object. -            getFunctionRealm(globalObject, newTarget)); -        RETURN_IF_EXCEPTION(scope, {}); -        structure = InternalFunction::createSubclassStructure( -            globalObject, -            newTarget, -            functionGlobalObject->OnigurumaRegExpStructure()); -    } - -    return constructOrCall(globalObject, callFrame->argument(0), callFrame->argument(1)); -} - -} diff --git a/src/bun.js/bindings/OnigurumaRegExp.h b/src/bun.js/bindings/OnigurumaRegExp.h deleted file mode 100644 index 8ddb65a0c..000000000 --- a/src/bun.js/bindings/OnigurumaRegExp.h +++ /dev/null @@ -1,106 +0,0 @@ -#pragma once - -#include "root.h" -#include "BunBuiltinNames.h" -#include "BunClientData.h" -#include "ZigGlobalObject.h" - -extern "C" JSC::EncodedJSValue jsFunctionGetOnigurumaRegExpConstructor(JSC::JSGlobalObject* lexicalGlobalObject, JSC::EncodedJSValue thisValue, JSC::PropertyName attributeName); - -namespace Zig { - -using namespace JSC; -using namespace WebCore; - -class OnigurumaRegEx final : public JSC::JSDestructibleObject { -public: -    using Base = JSC::JSDestructibleObject; - -    static OnigurumaRegEx* create(JSC::VM& vm, JSGlobalObject* globalObject, JSC::Structure* structure) -    { -        OnigurumaRegEx* ptr = new (NotNull, JSC::allocateCell<OnigurumaRegEx>(vm)) OnigurumaRegEx(vm, globalObject, structure); -        ptr->finishCreation(vm); -        return ptr; -    } - -    static OnigurumaRegEx* create(JSC::JSGlobalObject* globalObject, WTF::String&& pattern, WTF::String&& flags) -    { -        auto* structure = reinterpret_cast<Zig::GlobalObject*>(globalObject)->OnigurumaRegExpStructure(); -        auto* object = create(globalObject->vm(), globalObject, structure); -        object->m_flagsString = WTFMove(flags); -        object->m_patternString = WTFMove(pattern); - -        return object; -    } - -    DECLARE_EXPORT_INFO; -    template<typename, JSC::SubspaceAccess mode> static JSC::GCClient::IsoSubspace* subspaceFor(JSC::VM& vm) -    { -        if constexpr (mode == JSC::SubspaceAccess::Concurrently) -            return nullptr; - -        return WebCore::subspaceForImpl<OnigurumaRegEx, UseCustomHeapCellType::No>( -            vm, -            [](auto& spaces) { return spaces.m_clientSubspaceForOnigurumaRegExp.get(); }, -            [](auto& spaces, auto&& space) { spaces.m_clientSubspaceForOnigurumaRegExp = WTFMove(space); }, -            [](auto& spaces) { return spaces.m_subspaceForOnigurumaRegExp.get(); }, -            [](auto& spaces, auto&& space) { spaces.m_subspaceForOnigurumaRegExp = WTFMove(space); }); -    } - -    static JSC::Structure* createStructure(JSC::VM& vm, JSC::JSGlobalObject* globalObject, JSC::JSValue prototype) -    { -        return JSC::Structure::create(vm, globalObject, prototype, JSC::TypeInfo(RegExpObjectType, StructureFlags), info()); -    } - -    // static void analyzeHeap(JSCell*, JSC::HeapAnalyzer&); - -    const WTF::String& flagsString() const { return m_flagsString; } -    void setFlagsString(const WTF::String& flagsString) { m_flagsString = flagsString; } -    const WTF::String& patternString() const { return m_patternString; } -    void setPatternString(const WTF::String& patternString) { m_patternString = patternString; } - -    int32_t m_lastIndex = 0; - -private: -    OnigurumaRegEx(JSC::VM& vm, JSC::JSGlobalObject* globalObject, JSC::Structure* structure) -        : Base(vm, structure) -    { -    } - -    void finishCreation(JSC::VM&) -    { -        Base::finishCreation(vm()); -    } - -    WTF::String m_patternString = {}; -    WTF::String m_flagsString = {}; -}; - -class OnigurumaRegExpConstructor final : public JSC::InternalFunction { -public: -    using Base = JSC::InternalFunction; -    static OnigurumaRegExpConstructor* create(JSC::VM& vm, JSC::JSGlobalObject* globalObject, JSC::Structure* structure, JSValue prototype); - -    // Must be defined for each specialization class. -    static JSC::EncodedJSValue JSC_HOST_CALL_ATTRIBUTES construct(JSC::JSGlobalObject*, JSC::CallFrame*); -    DECLARE_EXPORT_INFO; - -    static JSC::Structure* createClassStructure(JSC::JSGlobalObject*, JSC::JSValue prototype); -    static JSC::JSObject* createPrototype(JSC::JSGlobalObject*); - -    static JSC::Structure* createStructure(JSC::VM& vm, JSC::JSGlobalObject* globalObject, JSC::JSValue prototype) -    { -        return JSC::Structure::create(vm, globalObject, prototype, JSC::TypeInfo(JSC::InternalFunctionType, StructureFlags), info()); -    } - -private: -    OnigurumaRegExpConstructor(JSC::VM& vm, JSC::Structure* structure, JSC::NativeFunction nativeFunction) -        : Base(vm, structure, nativeFunction, nativeFunction) - -    { -    } - -    void finishCreation(JSC::VM&, JSValue prototype); -}; - -}
\ No newline at end of file diff --git a/src/bun.js/bindings/ZigGlobalObject.cpp b/src/bun.js/bindings/ZigGlobalObject.cpp index 1e70fdd99..e8ee74943 100644 --- a/src/bun.js/bindings/ZigGlobalObject.cpp +++ b/src/bun.js/bindings/ZigGlobalObject.cpp @@ -167,8 +167,6 @@ using JSBuffer = WebCore::JSBuffer;  #include "webcrypto/JSCryptoKey.h"  #include "webcrypto/JSSubtleCrypto.h" -#include "OnigurumaRegExp.h" -  constexpr size_t DEFAULT_ERROR_STACK_TRACE_LIMIT = 10;  #ifdef __APPLE__ @@ -2579,17 +2577,6 @@ void GlobalObject::finishCreation(VM& vm)              init.setConstructor(constructor);          }); -    m_OnigurumaRegExpClassStructure.initLater( -        [](LazyClassStructure::Initializer& init) { -            auto* prototype = OnigurumaRegExpConstructor::createPrototype(init.global); -            auto* structure = OnigurumaRegExpConstructor::createClassStructure(init.global, prototype); -            auto* constructor = OnigurumaRegExpConstructor::create( -                init.vm, init.global, OnigurumaRegExpConstructor::createStructure(init.vm, init.global, init.global->functionPrototype()), prototype); -            init.setPrototype(prototype); -            init.setStructure(structure); -            init.setConstructor(constructor); -        }); -      m_callSiteStructure.initLater(          [](LazyClassStructure::Initializer& init) {              auto* prototype = CallSitePrototype::create(init.vm, CallSitePrototype::createStructure(init.vm, init.global, init.global->objectPrototype()), init.global); @@ -3224,11 +3211,6 @@ void GlobalObject::installAPIGlobals(JSClassRef* globals, int count, JSC::VM& vm          }          { -            JSC::Identifier identifier = JSC::Identifier::fromString(vm, "OnigurumaRegExp"_s); -            object->putDirectCustomAccessor(vm, identifier, JSC::CustomGetterSetter::create(vm, jsFunctionGetOnigurumaRegExpConstructor, nullptr), JSC::PropertyAttribute::CustomAccessor | 0); -        } - -        {              JSC::Identifier identifier = JSC::Identifier::fromString(vm, "stringHashCode"_s);              object->putDirectNativeFunction(vm, this, identifier, 1, functionHashCode, ImplementationVisibility::Public, NoIntrinsic,                  JSC::PropertyAttribute::Function | JSC::PropertyAttribute::DontDelete | 0); @@ -3362,7 +3344,6 @@ void GlobalObject::visitChildrenImpl(JSCell* cell, Visitor& visitor)      thisObject->m_JSReadableStateClassStructure.visit(visitor);      thisObject->m_JSStringDecoderClassStructure.visit(visitor);      thisObject->m_NapiClassStructure.visit(visitor); -    thisObject->m_OnigurumaRegExpClassStructure.visit(visitor);      thisObject->m_pendingVirtualModuleResultStructure.visit(visitor);      thisObject->m_performMicrotaskFunction.visit(visitor); diff --git a/src/bun.js/bindings/ZigGlobalObject.h b/src/bun.js/bindings/ZigGlobalObject.h index 90d67d34f..7335c9d97 100644 --- a/src/bun.js/bindings/ZigGlobalObject.h +++ b/src/bun.js/bindings/ZigGlobalObject.h @@ -224,10 +224,6 @@ public:      JSC::JSObject* JSReadableState() { return m_JSReadableStateClassStructure.constructorInitializedOnMainThread(this); }      JSC::JSValue JSReadableStatePrototype() { return m_JSReadableStateClassStructure.prototypeInitializedOnMainThread(this); } -    JSC::Structure* OnigurumaRegExpStructure() { return m_OnigurumaRegExpClassStructure.getInitializedOnMainThread(this); } -    JSC::JSValue OnigurumaRegExpPrototype() { return m_OnigurumaRegExpClassStructure.prototypeInitializedOnMainThread(this); } -    JSC::JSObject* OnigurumaRegExpConstructor() { return m_OnigurumaRegExpClassStructure.constructorInitializedOnMainThread(this); } -      JSC::JSMap* readableStreamNativeMap() { return m_lazyReadableStreamPrototypeMap.getInitializedOnMainThread(this); }      JSC::JSMap* requireMap() { return m_requireMap.getInitializedOnMainThread(this); }      JSC::Structure* encodeIntoObjectStructure() { return m_encodeIntoObjectStructure.getInitializedOnMainThread(this); } @@ -465,7 +461,6 @@ private:      LazyClassStructure m_JSReadableStateClassStructure;      LazyClassStructure m_JSStringDecoderClassStructure;      LazyClassStructure m_NapiClassStructure; -    LazyClassStructure m_OnigurumaRegExpClassStructure;      LazyClassStructure m_callSiteStructure;      /** diff --git a/src/bun.js/bindings/bindings.cpp b/src/bun.js/bindings/bindings.cpp index b5a78af0a..f37af006b 100644 --- a/src/bun.js/bindings/bindings.cpp +++ b/src/bun.js/bindings/bindings.cpp @@ -82,7 +82,6 @@  #include "JavaScriptCore/PropertyNameArray.h"  #include "JavaScriptCore/HashMapImpl.h"  #include "JavaScriptCore/HashMapImplInlines.h" -#include "OnigurumaRegExp.h"  template<typename UWSResponse>  static void copyToUWS(WebCore::FetchHeaders* headers, UWSResponse* res) @@ -382,22 +381,7 @@ bool Bun__deepEquals(JSC__JSGlobalObject* globalObject, JSValue v1, JSValue v2,              return false;          } -        if (OnigurumaRegEx* left = jsDynamicCast<OnigurumaRegEx*>(v1)) { -            OnigurumaRegEx* right = jsDynamicCast<OnigurumaRegEx*>(v2); -            if (UNLIKELY(!right)) { -                return false; -            } - -            if (!equal(left->patternString(), right->patternString())) { -                return false; -            } - -            if (!equal(left->flagsString(), right->flagsString())) { -                return false; -            } - -            return true; -        } else if (JSC::RegExpObject* left = jsDynamicCast<JSC::RegExpObject*>(v1)) { +        if (JSC::RegExpObject* left = jsDynamicCast<JSC::RegExpObject*>(v1)) {              JSC::RegExpObject* right = jsDynamicCast<JSC::RegExpObject*>(v2);              if (UNLIKELY(!right)) { diff --git a/src/bun.js/bindings/headers-cpp.h b/src/bun.js/bindings/headers-cpp.h index b1cbc2cf6..b8bf7c300 100644 --- a/src/bun.js/bindings/headers-cpp.h +++ b/src/bun.js/bindings/headers-cpp.h @@ -1,4 +1,4 @@ -//-- AUTOGENERATED FILE -- 1671153921 +//-- AUTOGENERATED FILE -- 1671319165  // clang-format off  #pragma once diff --git a/src/bun.js/bindings/headers.h b/src/bun.js/bindings/headers.h index 29bc2b21a..f29395eff 100644 --- a/src/bun.js/bindings/headers.h +++ b/src/bun.js/bindings/headers.h @@ -1,5 +1,5 @@  // clang-format off -//-- AUTOGENERATED FILE -- 1671153921 +//-- AUTOGENERATED FILE -- 1671319165  #pragma once  #include <stddef.h> diff --git a/src/bun.js/bindings/webcore/DOMClientIsoSubspaces.h b/src/bun.js/bindings/webcore/DOMClientIsoSubspaces.h index e7504c024..5c7acd18a 100644 --- a/src/bun.js/bindings/webcore/DOMClientIsoSubspaces.h +++ b/src/bun.js/bindings/webcore/DOMClientIsoSubspaces.h @@ -29,7 +29,6 @@ public:      std::unique_ptr<GCClient::IsoSubspace> m_clientSubspaceForStringDecoder;      std::unique_ptr<GCClient::IsoSubspace> m_clientSubspaceForReadableState;      std::unique_ptr<GCClient::IsoSubspace> m_clientSubspaceForPendingVirtualModuleResult; -    std::unique_ptr<GCClient::IsoSubspace> m_clientSubspaceForOnigurumaRegExp;      std::unique_ptr<GCClient::IsoSubspace> m_clientSubspaceForCallSite;      std::unique_ptr<GCClient::IsoSubspace> m_clientSubspaceForNapiExternal;  #include "ZigGeneratedClasses+DOMClientIsoSubspaces.h" diff --git a/src/bun.js/bindings/webcore/DOMIsoSubspaces.h b/src/bun.js/bindings/webcore/DOMIsoSubspaces.h index cba631c61..d15866b7b 100644 --- a/src/bun.js/bindings/webcore/DOMIsoSubspaces.h +++ b/src/bun.js/bindings/webcore/DOMIsoSubspaces.h @@ -29,7 +29,6 @@ public:      std::unique_ptr<IsoSubspace> m_subspaceForStringDecoder;      std::unique_ptr<IsoSubspace> m_subspaceForReadableState;      std::unique_ptr<IsoSubspace> m_subspaceForPendingVirtualModuleResult; -    std::unique_ptr<IsoSubspace> m_subspaceForOnigurumaRegExp;      std::unique_ptr<IsoSubspace> m_subspaceForCallSite;      std::unique_ptr<IsoSubspace> m_subspaceForNapiExternal;  #include "ZigGeneratedClasses+DOMIsoSubspaces.h" diff --git a/src/bun.js/builtins/WebCoreJSBuiltinInternals.cpp b/src/bun.js/builtins/WebCoreJSBuiltinInternals.cpp index 93e13369a..446b8fd81 100644 --- a/src/bun.js/builtins/WebCoreJSBuiltinInternals.cpp +++ b/src/bun.js/builtins/WebCoreJSBuiltinInternals.cpp @@ -8,7 +8,6 @@ namespace Zig { class GlobalObject; }   * Copyright (c) 2015 Igalia.   * Copyright (c) 2015, 2016 Canon Inc. All rights reserved.   * Copyright (c) 2015, 2016, 2017 Canon Inc. - * Copyright (c) 2016, 2018 -2018 Apple Inc. All rights reserved.   * Copyright (c) 2016, 2020 Apple Inc. All rights reserved.   * Copyright (c) 2022 Codeblog Corp. All rights reserved.   *  diff --git a/src/bun.js/builtins/WebCoreJSBuiltins.cpp b/src/bun.js/builtins/WebCoreJSBuiltins.cpp index 1e8fa06d6..f5b25a463 100644 --- a/src/bun.js/builtins/WebCoreJSBuiltins.cpp +++ b/src/bun.js/builtins/WebCoreJSBuiltins.cpp @@ -4,7 +4,6 @@   * Copyright (c) 2015 Igalia.   * Copyright (c) 2015, 2016 Canon Inc. All rights reserved.   * Copyright (c) 2015, 2016, 2017 Canon Inc. - * Copyright (c) 2016, 2018 -2018 Apple Inc. All rights reserved.   * Copyright (c) 2016, 2020 Apple Inc. All rights reserved.   * Copyright (c) 2022 Codeblog Corp. All rights reserved.   *  @@ -40,7 +39,6 @@  #include "ImportMetaObjectBuiltins.cpp"  #include "JSBufferConstructorBuiltins.cpp"  #include "JSBufferPrototypeBuiltins.cpp" -#include "OnigurumaRegExpPrototypeBuiltins.cpp"  #include "ProcessObjectInternalsBuiltins.cpp"  #include "ReadableByteStreamControllerBuiltins.cpp"  #include "ReadableByteStreamInternalsBuiltins.cpp" diff --git a/src/bun.js/builtins/cpp/ByteLengthQueuingStrategyBuiltins.cpp b/src/bun.js/builtins/cpp/ByteLengthQueuingStrategyBuiltins.cpp index fac21b4ec..3bec31ac7 100644 --- a/src/bun.js/builtins/cpp/ByteLengthQueuingStrategyBuiltins.cpp +++ b/src/bun.js/builtins/cpp/ByteLengthQueuingStrategyBuiltins.cpp @@ -4,7 +4,6 @@   * Copyright (c) 2015 Igalia.   * Copyright (c) 2015, 2016 Canon Inc. All rights reserved.   * Copyright (c) 2015, 2016, 2017 Canon Inc. - * Copyright (c) 2016, 2018 -2018 Apple Inc. All rights reserved.   * Copyright (c) 2016, 2020 Apple Inc. All rights reserved.   * Copyright (c) 2022 Codeblog Corp. All rights reserved.   *  diff --git a/src/bun.js/builtins/cpp/ByteLengthQueuingStrategyBuiltins.h b/src/bun.js/builtins/cpp/ByteLengthQueuingStrategyBuiltins.h index b86a05c27..fc56f2911 100644 --- a/src/bun.js/builtins/cpp/ByteLengthQueuingStrategyBuiltins.h +++ b/src/bun.js/builtins/cpp/ByteLengthQueuingStrategyBuiltins.h @@ -4,7 +4,6 @@   * Copyright (c) 2015 Igalia.   * Copyright (c) 2015, 2016 Canon Inc. All rights reserved.   * Copyright (c) 2015, 2016, 2017 Canon Inc. - * Copyright (c) 2016, 2018 -2018 Apple Inc. All rights reserved.   * Copyright (c) 2016, 2020 Apple Inc. All rights reserved.   * Copyright (c) 2022 Codeblog Corp. All rights reserved.   *  diff --git a/src/bun.js/builtins/cpp/ConsoleObjectBuiltins.cpp b/src/bun.js/builtins/cpp/ConsoleObjectBuiltins.cpp index 39080d690..7d4fc6e2e 100644 --- a/src/bun.js/builtins/cpp/ConsoleObjectBuiltins.cpp +++ b/src/bun.js/builtins/cpp/ConsoleObjectBuiltins.cpp @@ -4,7 +4,6 @@   * Copyright (c) 2015 Igalia.   * Copyright (c) 2015, 2016 Canon Inc. All rights reserved.   * Copyright (c) 2015, 2016, 2017 Canon Inc. - * Copyright (c) 2016, 2018 -2018 Apple Inc. All rights reserved.   * Copyright (c) 2016, 2020 Apple Inc. All rights reserved.   * Copyright (c) 2022 Codeblog Corp. All rights reserved.   *  diff --git a/src/bun.js/builtins/cpp/ConsoleObjectBuiltins.h b/src/bun.js/builtins/cpp/ConsoleObjectBuiltins.h index 9e2a43707..975394c5f 100644 --- a/src/bun.js/builtins/cpp/ConsoleObjectBuiltins.h +++ b/src/bun.js/builtins/cpp/ConsoleObjectBuiltins.h @@ -4,7 +4,6 @@   * Copyright (c) 2015 Igalia.   * Copyright (c) 2015, 2016 Canon Inc. All rights reserved.   * Copyright (c) 2015, 2016, 2017 Canon Inc. - * Copyright (c) 2016, 2018 -2018 Apple Inc. All rights reserved.   * Copyright (c) 2016, 2020 Apple Inc. All rights reserved.   * Copyright (c) 2022 Codeblog Corp. All rights reserved.   *  diff --git a/src/bun.js/builtins/cpp/CountQueuingStrategyBuiltins.cpp b/src/bun.js/builtins/cpp/CountQueuingStrategyBuiltins.cpp index 82aaefddb..ed428601a 100644 --- a/src/bun.js/builtins/cpp/CountQueuingStrategyBuiltins.cpp +++ b/src/bun.js/builtins/cpp/CountQueuingStrategyBuiltins.cpp @@ -4,7 +4,6 @@   * Copyright (c) 2015 Igalia.   * Copyright (c) 2015, 2016 Canon Inc. All rights reserved.   * Copyright (c) 2015, 2016, 2017 Canon Inc. - * Copyright (c) 2016, 2018 -2018 Apple Inc. All rights reserved.   * Copyright (c) 2016, 2020 Apple Inc. All rights reserved.   * Copyright (c) 2022 Codeblog Corp. All rights reserved.   *  diff --git a/src/bun.js/builtins/cpp/CountQueuingStrategyBuiltins.h b/src/bun.js/builtins/cpp/CountQueuingStrategyBuiltins.h index a05d5c9b8..06811f00a 100644 --- a/src/bun.js/builtins/cpp/CountQueuingStrategyBuiltins.h +++ b/src/bun.js/builtins/cpp/CountQueuingStrategyBuiltins.h @@ -4,7 +4,6 @@   * Copyright (c) 2015 Igalia.   * Copyright (c) 2015, 2016 Canon Inc. All rights reserved.   * Copyright (c) 2015, 2016, 2017 Canon Inc. - * Copyright (c) 2016, 2018 -2018 Apple Inc. All rights reserved.   * Copyright (c) 2016, 2020 Apple Inc. All rights reserved.   * Copyright (c) 2022 Codeblog Corp. All rights reserved.   *  diff --git a/src/bun.js/builtins/cpp/ImportMetaObjectBuiltins.cpp b/src/bun.js/builtins/cpp/ImportMetaObjectBuiltins.cpp index 75a52c699..360168176 100644 --- a/src/bun.js/builtins/cpp/ImportMetaObjectBuiltins.cpp +++ b/src/bun.js/builtins/cpp/ImportMetaObjectBuiltins.cpp @@ -4,7 +4,6 @@   * Copyright (c) 2015 Igalia.   * Copyright (c) 2015, 2016 Canon Inc. All rights reserved.   * Copyright (c) 2015, 2016, 2017 Canon Inc. - * Copyright (c) 2016, 2018 -2018 Apple Inc. All rights reserved.   * Copyright (c) 2016, 2020 Apple Inc. All rights reserved.   * Copyright (c) 2022 Codeblog Corp. All rights reserved.   *  diff --git a/src/bun.js/builtins/cpp/ImportMetaObjectBuiltins.h b/src/bun.js/builtins/cpp/ImportMetaObjectBuiltins.h index f3182273c..5cc424ec8 100644 --- a/src/bun.js/builtins/cpp/ImportMetaObjectBuiltins.h +++ b/src/bun.js/builtins/cpp/ImportMetaObjectBuiltins.h @@ -4,7 +4,6 @@   * Copyright (c) 2015 Igalia.   * Copyright (c) 2015, 2016 Canon Inc. All rights reserved.   * Copyright (c) 2015, 2016, 2017 Canon Inc. - * Copyright (c) 2016, 2018 -2018 Apple Inc. All rights reserved.   * Copyright (c) 2016, 2020 Apple Inc. All rights reserved.   * Copyright (c) 2022 Codeblog Corp. All rights reserved.   *  diff --git a/src/bun.js/builtins/cpp/JSBufferConstructorBuiltins.cpp b/src/bun.js/builtins/cpp/JSBufferConstructorBuiltins.cpp index 1ec885ee0..ed14b6699 100644 --- a/src/bun.js/builtins/cpp/JSBufferConstructorBuiltins.cpp +++ b/src/bun.js/builtins/cpp/JSBufferConstructorBuiltins.cpp @@ -4,7 +4,6 @@   * Copyright (c) 2015 Igalia.   * Copyright (c) 2015, 2016 Canon Inc. All rights reserved.   * Copyright (c) 2015, 2016, 2017 Canon Inc. - * Copyright (c) 2016, 2018 -2018 Apple Inc. All rights reserved.   * Copyright (c) 2016, 2020 Apple Inc. All rights reserved.   * Copyright (c) 2022 Codeblog Corp. All rights reserved.   *  diff --git a/src/bun.js/builtins/cpp/JSBufferConstructorBuiltins.h b/src/bun.js/builtins/cpp/JSBufferConstructorBuiltins.h index 67670d715..f9181b402 100644 --- a/src/bun.js/builtins/cpp/JSBufferConstructorBuiltins.h +++ b/src/bun.js/builtins/cpp/JSBufferConstructorBuiltins.h @@ -4,7 +4,6 @@   * Copyright (c) 2015 Igalia.   * Copyright (c) 2015, 2016 Canon Inc. All rights reserved.   * Copyright (c) 2015, 2016, 2017 Canon Inc. - * Copyright (c) 2016, 2018 -2018 Apple Inc. All rights reserved.   * Copyright (c) 2016, 2020 Apple Inc. All rights reserved.   * Copyright (c) 2022 Codeblog Corp. All rights reserved.   *  diff --git a/src/bun.js/builtins/cpp/JSBufferPrototypeBuiltins.cpp b/src/bun.js/builtins/cpp/JSBufferPrototypeBuiltins.cpp index 367041f65..cd8b072d4 100644 --- a/src/bun.js/builtins/cpp/JSBufferPrototypeBuiltins.cpp +++ b/src/bun.js/builtins/cpp/JSBufferPrototypeBuiltins.cpp @@ -4,7 +4,6 @@   * Copyright (c) 2015 Igalia.   * Copyright (c) 2015, 2016 Canon Inc. All rights reserved.   * Copyright (c) 2015, 2016, 2017 Canon Inc. - * Copyright (c) 2016, 2018 -2018 Apple Inc. All rights reserved.   * Copyright (c) 2016, 2020 Apple Inc. All rights reserved.   * Copyright (c) 2022 Codeblog Corp. All rights reserved.   *  diff --git a/src/bun.js/builtins/cpp/JSBufferPrototypeBuiltins.h b/src/bun.js/builtins/cpp/JSBufferPrototypeBuiltins.h index 04fa9df0b..75de0fce2 100644 --- a/src/bun.js/builtins/cpp/JSBufferPrototypeBuiltins.h +++ b/src/bun.js/builtins/cpp/JSBufferPrototypeBuiltins.h @@ -4,7 +4,6 @@   * Copyright (c) 2015 Igalia.   * Copyright (c) 2015, 2016 Canon Inc. All rights reserved.   * Copyright (c) 2015, 2016, 2017 Canon Inc. - * Copyright (c) 2016, 2018 -2018 Apple Inc. All rights reserved.   * Copyright (c) 2016, 2020 Apple Inc. All rights reserved.   * Copyright (c) 2022 Codeblog Corp. All rights reserved.   *  diff --git a/src/bun.js/builtins/cpp/OnigurumaRegExpPrototypeBuiltins.cpp b/src/bun.js/builtins/cpp/OnigurumaRegExpPrototypeBuiltins.cpp deleted file mode 100644 index cf55745b1..000000000 --- a/src/bun.js/builtins/cpp/OnigurumaRegExpPrototypeBuiltins.cpp +++ /dev/null @@ -1,672 +0,0 @@ -/* - * Copyright (c) 2015 Igalia - * Copyright (c) 2015 Igalia S.L. - * Copyright (c) 2015 Igalia. - * Copyright (c) 2015, 2016 Canon Inc. All rights reserved. - * Copyright (c) 2015, 2016, 2017 Canon Inc. - * Copyright (c) 2016, 2018 -2018 Apple Inc. All rights reserved. - * Copyright (c) 2016, 2020 Apple Inc. All rights reserved. - * Copyright (c) 2022 Codeblog Corp. 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. - *  - */ - -// DO NOT EDIT THIS FILE. It is automatically generated from JavaScript files for -// builtins by the script: Source/JavaScriptCore/Scripts/generate-js-builtins.py - -#include "config.h" -#include "OnigurumaRegExpPrototypeBuiltins.h" - -#include "WebCoreJSClientData.h" -#include <JavaScriptCore/HeapInlines.h> -#include <JavaScriptCore/IdentifierInlines.h> -#include <JavaScriptCore/ImplementationVisibility.h> -#include <JavaScriptCore/Intrinsic.h> -#include <JavaScriptCore/JSCJSValueInlines.h> -#include <JavaScriptCore/JSCellInlines.h> -#include <JavaScriptCore/StructureInlines.h> -#include <JavaScriptCore/VM.h> - -namespace WebCore { - -const JSC::ConstructAbility s_onigurumaRegExpPrototypeAdvanceStringIndexCodeConstructAbility = JSC::ConstructAbility::CannotConstruct; -const JSC::ConstructorKind s_onigurumaRegExpPrototypeAdvanceStringIndexCodeConstructorKind = JSC::ConstructorKind::None; -const JSC::ImplementationVisibility s_onigurumaRegExpPrototypeAdvanceStringIndexCodeImplementationVisibility = JSC::ImplementationVisibility::Private; -const int s_onigurumaRegExpPrototypeAdvanceStringIndexCodeLength = 427; -static const JSC::Intrinsic s_onigurumaRegExpPrototypeAdvanceStringIndexCodeIntrinsic = JSC::NoIntrinsic; -const char* const s_onigurumaRegExpPrototypeAdvanceStringIndexCode = -    "(function (string, index, unicode)\n" \ -    "{\n" \ -    "    //\n" \ -    "    \"use strict\";\n" \ -    "\n" \ -    "    if (!unicode)\n" \ -    "        return index + 1;\n" \ -    "\n" \ -    "    if (index + 1 >= string.length)\n" \ -    "        return index + 1;\n" \ -    "\n" \ -    "    var first = string.@charCodeAt(index);\n" \ -    "    if (first < 0xD800 || first > 0xDBFF)\n" \ -    "        return index + 1;\n" \ -    "\n" \ -    "    var second = string.@charCodeAt(index + 1);\n" \ -    "    if (second < 0xDC00 || second > 0xDFFF)\n" \ -    "        return index + 1;\n" \ -    "\n" \ -    "    return index + 2;\n" \ -    "})\n" \ -; - -const JSC::ConstructAbility s_onigurumaRegExpPrototypeMatchSlowCodeConstructAbility = JSC::ConstructAbility::CannotConstruct; -const JSC::ConstructorKind s_onigurumaRegExpPrototypeMatchSlowCodeConstructorKind = JSC::ConstructorKind::None; -const JSC::ImplementationVisibility s_onigurumaRegExpPrototypeMatchSlowCodeImplementationVisibility = JSC::ImplementationVisibility::Private; -const int s_onigurumaRegExpPrototypeMatchSlowCodeLength = 796; -static const JSC::Intrinsic s_onigurumaRegExpPrototypeMatchSlowCodeIntrinsic = JSC::NoIntrinsic; -const char* const s_onigurumaRegExpPrototypeMatchSlowCode = -    "(function (regexp, str)\n" \ -    "{\n" \ -    "    \"use strict\";\n" \ -    "\n" \ -    "    if (!regexp.global)\n" \ -    "        return regexp.exec(str);\n" \ -    "    \n" \ -    "    var unicode = regexp.unicode;\n" \ -    "    regexp.lastIndex = 0;\n" \ -    "    var resultList = [];\n" \ -    "\n" \ -    "    //\n" \ -    "    //\n" \ -    "    //\n" \ -    "    var maximumReasonableMatchSize = 100000000;\n" \ -    "\n" \ -    "    while (true) {\n" \ -    "        var result = regexp.exec(str);\n" \ -    "        \n" \ -    "        if (result === null) {\n" \ -    "            if (resultList.length === 0)\n" \ -    "                return null;\n" \ -    "            return resultList;\n" \ -    "        }\n" \ -    "\n" \ -    "        if (resultList.length > maximumReasonableMatchSize)\n" \ -    "            @throwOutOfMemoryError();\n" \ -    "\n" \ -    "        var resultString = @toString(result[0]);\n" \ -    "\n" \ -    "        if (!resultString.length)\n" \ -    "            regexp.lastIndex = @advanceStringIndex(str, regexp.lastIndex, unicode);\n" \ -    "\n" \ -    "        @arrayPush(resultList, resultString);\n" \ -    "    }\n" \ -    "})\n" \ -; - -const JSC::ConstructAbility s_onigurumaRegExpPrototypeMatchCodeConstructAbility = JSC::ConstructAbility::CannotConstruct; -const JSC::ConstructorKind s_onigurumaRegExpPrototypeMatchCodeConstructorKind = JSC::ConstructorKind::None; -const JSC::ImplementationVisibility s_onigurumaRegExpPrototypeMatchCodeImplementationVisibility = JSC::ImplementationVisibility::Public; -const int s_onigurumaRegExpPrototypeMatchCodeLength = 225; -static const JSC::Intrinsic s_onigurumaRegExpPrototypeMatchCodeIntrinsic = JSC::NoIntrinsic; -const char* const s_onigurumaRegExpPrototypeMatchCode = -    "(function (strArg)\n" \ -    "{\n" \ -    "    \"use strict\";\n" \ -    "\n" \ -    "    if (!@isObject(this))\n" \ -    "        @throwTypeError(\"RegExp.prototype.@@match requires that |this| be an Object\");\n" \ -    "\n" \ -    "    var str = @toString(strArg);\n" \ -    "\n" \ -    "    return @matchSlow(this, str);\n" \ -    "})\n" \ -; - -const JSC::ConstructAbility s_onigurumaRegExpPrototypeMatchAllCodeConstructAbility = JSC::ConstructAbility::CannotConstruct; -const JSC::ConstructorKind s_onigurumaRegExpPrototypeMatchAllCodeConstructorKind = JSC::ConstructorKind::None; -const JSC::ImplementationVisibility s_onigurumaRegExpPrototypeMatchAllCodeImplementationVisibility = JSC::ImplementationVisibility::Public; -const int s_onigurumaRegExpPrototypeMatchAllCodeLength = 2928; -static const JSC::Intrinsic s_onigurumaRegExpPrototypeMatchAllCodeIntrinsic = JSC::NoIntrinsic; -const char* const s_onigurumaRegExpPrototypeMatchAllCode = -    "(function (strArg)\n" \ -    "{\n" \ -    "    \"use strict\";\n" \ -    "\n" \ -    "    var regExp = this;\n" \ -    "    if (!@isObject(regExp)) {\n" \ -    "        @throwTypeError(\"RegExp.prototype.@@matchAll requires |this| to be an Object\");\n" \ -    "    }\n" \ -    "\n" \ -    "    var string = @toString(strArg);\n" \ -    "\n" \ -    "    var Matcher = @speciesConstructor(regExp, @Bun.OnigurumaRegExp);\n" \ -    "\n" \ -    "    var flags = @toString(regExp.flags);\n" \ -    "    var matcher = new Matcher(regExp.source, flags);\n" \ -    "    matcher.lastIndex = @toLength(regExp.lastIndex);\n" \ -    "\n" \ -    "    var global = @stringIncludesInternal.@call(flags, \"g\");\n" \ -    "    var fullUnicode = @stringIncludesInternal.@call(flags, \"u\");\n" \ -    "\n" \ -    "    var iterator = globalThis.Symbol.iterator;\n" \ -    "\n" \ -    "    var RegExpStringIterator = class RegExpStringIterator {\n" \ -    "        constructor(regExp, string, global, fullUnicode)\n" \ -    "        {\n" \ -    "    \n" \ -    "            @putByIdDirectPrivate(this, \"regExpStringIteratorRegExp\", regExp);\n" \ -    "            @putByIdDirectPrivate(this, \"regExpStringIteratorString\", string);\n" \ -    "            @putByIdDirectPrivate(this, \"regExpStringIteratorGlobal\", global);\n" \ -    "            @putByIdDirectPrivate(this, \"regExpStringIteratorUnicode\", fullUnicode);\n" \ -    "            @putByIdDirectPrivate(this, \"regExpStringIteratorDone\", false);\n" \ -    "        }\n" \ -    "\n" \ -    "        next() {\n" \ -    "            \"use strict\";\n" \ -    "            if (!@isObject(this)) {\n" \ -    "                @throwTypeError(\"%RegExpStringIteratorPrototype%.next requires |this| to be an Object\");\n" \ -    "            }\n" \ -    "        \n" \ -    "            var done = @getByIdDirectPrivate(this, \"regExpStringIteratorDone\");\n" \ -    "            if (done === @undefined) {\n" \ -    "                @throwTypeError(\"%RegExpStringIteratorPrototype%.next requires |this| to be an RegExp String Iterator instance\");\n" \ -    "            }\n" \ -    "        \n" \ -    "            if (done) {\n" \ -    "                return { value: @undefined, done: true };\n" \ -    "            }\n" \ -    "        \n" \ -    "            var regExp = @getByIdDirectPrivate(this, \"regExpStringIteratorRegExp\");\n" \ -    "            var string = @getByIdDirectPrivate(this, \"regExpStringIteratorString\");\n" \ -    "            var global = @getByIdDirectPrivate(this, \"regExpStringIteratorGlobal\");\n" \ -    "            var fullUnicode = @getByIdDirectPrivate(this, \"regExpStringIteratorUnicode\");\n" \ -    "            var match = regExp.exec(string);\n" \ -    "            if (match === null) {\n" \ -    "                @putByIdDirectPrivate(this, \"regExpStringIteratorDone\", true);\n" \ -    "                return { value: @undefined, done: true };\n" \ -    "            }\n" \ -    "        \n" \ -    "            if (global) {\n" \ -    "                var matchStr = @toString(match[0]);\n" \ -    "                if (matchStr === \"\") {\n" \ -    "                    var thisIndex = @toLength(regExp.lastIndex);\n" \ -    "                    regExp.lastIndex = @advanceStringIndex(string, thisIndex, fullUnicode);\n" \ -    "                }\n" \ -    "            } else\n" \ -    "                @putByIdDirectPrivate(this, \"regExpStringIteratorDone\", true);\n" \ -    "        \n" \ -    "            return { value: match, done: false };\n" \ -    "        }\n" \ -    "\n" \ -    "        [iterator]() {\n" \ -    "            return this;\n" \ -    "        }\n" \ -    "\n" \ -    "    };\n" \ -    "\n" \ -    "    return new RegExpStringIterator(matcher, string, global, fullUnicode);\n" \ -    "})\n" \ -; - -const JSC::ConstructAbility s_onigurumaRegExpPrototypeGetSubstitutionCodeConstructAbility = JSC::ConstructAbility::CannotConstruct; -const JSC::ConstructorKind s_onigurumaRegExpPrototypeGetSubstitutionCodeConstructorKind = JSC::ConstructorKind::None; -const JSC::ImplementationVisibility s_onigurumaRegExpPrototypeGetSubstitutionCodeImplementationVisibility = JSC::ImplementationVisibility::Private; -const int s_onigurumaRegExpPrototypeGetSubstitutionCodeLength = 3603; -static const JSC::Intrinsic s_onigurumaRegExpPrototypeGetSubstitutionCodeIntrinsic = JSC::NoIntrinsic; -const char* const s_onigurumaRegExpPrototypeGetSubstitutionCode = -    "(function (matched, str, position, captures, namedCaptures, replacement)\n" \ -    "{\n" \ -    "    \"use strict\";\n" \ -    "\n" \ -    "    var matchLength = matched.length;\n" \ -    "    var stringLength = str.length;\n" \ -    "    var tailPos = position + matchLength;\n" \ -    "    var m = captures.length;\n" \ -    "    var replacementLength = replacement.length;\n" \ -    "    var result = \"\";\n" \ -    "    var lastStart = 0;\n" \ -    "\n" \ -    "    for (var start = 0; start = @stringIndexOfInternal.@call(replacement, \"$\", lastStart), start !== -1; lastStart = start) {\n" \ -    "        if (start - lastStart > 0)\n" \ -    "            result = result + @stringSubstring.@call(replacement, lastStart, start);\n" \ -    "        start++;\n" \ -    "        if (start >= replacementLength)\n" \ -    "            result = result + \"$\";\n" \ -    "        else {\n" \ -    "            var ch = replacement[start];\n" \ -    "            switch (ch)\n" \ -    "            {\n" \ -    "            case \"$\":\n" \ -    "                result = result + \"$\";\n" \ -    "                start++;\n" \ -    "                break;\n" \ -    "            case \"&\":\n" \ -    "                result = result + matched;\n" \ -    "                start++;\n" \ -    "                break;\n" \ -    "            case \"`\":\n" \ -    "                if (position > 0)\n" \ -    "                    result = result + @stringSubstring.@call(str, 0, position);\n" \ -    "                start++;\n" \ -    "                break;\n" \ -    "            case \"'\":\n" \ -    "                if (tailPos < stringLength)\n" \ -    "                    result = result + @stringSubstring.@call(str, tailPos);\n" \ -    "                start++;\n" \ -    "                break;\n" \ -    "            case \"<\":\n" \ -    "                if (namedCaptures !== @undefined) {\n" \ -    "                    var groupNameStartIndex = start + 1;\n" \ -    "                    var groupNameEndIndex = @stringIndexOfInternal.@call(replacement, \">\", groupNameStartIndex);\n" \ -    "                    if (groupNameEndIndex !== -1) {\n" \ -    "                        var groupName = @stringSubstring.@call(replacement, groupNameStartIndex, groupNameEndIndex);\n" \ -    "                        var capture = namedCaptures[groupName];\n" \ -    "                        if (capture !== @undefined)\n" \ -    "                            result = result + @toString(capture);\n" \ -    "\n" \ -    "                        start = groupNameEndIndex + 1;\n" \ -    "                        break;\n" \ -    "                    }\n" \ -    "                }\n" \ -    "\n" \ -    "                result = result + \"$<\";\n" \ -    "                start++;\n" \ -    "                break;\n" \ -    "            default:\n" \ -    "                var chCode = ch.@charCodeAt(0);\n" \ -    "                if (chCode >= 0x30 && chCode <= 0x39) {\n" \ -    "                    var originalStart = start - 1;\n" \ -    "                    start++;\n" \ -    "\n" \ -    "                    var n = chCode - 0x30;\n" \ -    "                    if (n > m) {\n" \ -    "                        result = result + @stringSubstring.@call(replacement, originalStart, start);\n" \ -    "                        break;\n" \ -    "                    }\n" \ -    "\n" \ -    "                    if (start < replacementLength) {\n" \ -    "                        var nextChCode = replacement.@charCodeAt(start);\n" \ -    "                        if (nextChCode >= 0x30 && nextChCode <= 0x39) {\n" \ -    "                            var nn = 10 * n + nextChCode - 0x30;\n" \ -    "                            if (nn <= m) {\n" \ -    "                                n = nn;\n" \ -    "                                start++;\n" \ -    "                            }\n" \ -    "                        }\n" \ -    "                    }\n" \ -    "\n" \ -    "                    if (n == 0) {\n" \ -    "                        result = result + @stringSubstring.@call(replacement, originalStart, start);\n" \ -    "                        break;\n" \ -    "                    }\n" \ -    "\n" \ -    "                    var capture = captures[n - 1];\n" \ -    "                    if (capture !== @undefined)\n" \ -    "                        result = result + capture;\n" \ -    "                } else\n" \ -    "                    result = result + \"$\";\n" \ -    "                break;\n" \ -    "            }\n" \ -    "        }\n" \ -    "    }\n" \ -    "\n" \ -    "    return result + @stringSubstring.@call(replacement, lastStart);\n" \ -    "})\n" \ -; - -const JSC::ConstructAbility s_onigurumaRegExpPrototypeReplaceCodeConstructAbility = JSC::ConstructAbility::CannotConstruct; -const JSC::ConstructorKind s_onigurumaRegExpPrototypeReplaceCodeConstructorKind = JSC::ConstructorKind::None; -const JSC::ImplementationVisibility s_onigurumaRegExpPrototypeReplaceCodeImplementationVisibility = JSC::ImplementationVisibility::Public; -const int s_onigurumaRegExpPrototypeReplaceCodeLength = 3208; -static const JSC::Intrinsic s_onigurumaRegExpPrototypeReplaceCodeIntrinsic = JSC::NoIntrinsic; -const char* const s_onigurumaRegExpPrototypeReplaceCode = -    "(function (strArg, replace)\n" \ -    "{\n" \ -    "    \"use strict\";\n" \ -    "\n" \ -    "    if (!@isObject(this))\n" \ -    "        @throwTypeError(\"RegExp.prototype.@@replace requires that |this| be an Object\");\n" \ -    "\n" \ -    "    var regexp = this;\n" \ -    "\n" \ -    "    var str = @toString(strArg);\n" \ -    "    var stringLength = str.length;\n" \ -    "    var functionalReplace = @isCallable(replace);\n" \ -    "\n" \ -    "    if (!functionalReplace)\n" \ -    "        replace = @toString(replace);\n" \ -    "\n" \ -    "    var global = regexp.global;\n" \ -    "    var unicode = false;\n" \ -    "\n" \ -    "    if (global) {\n" \ -    "        unicode = regexp.unicode;\n" \ -    "        regexp.lastIndex = 0;\n" \ -    "    }\n" \ -    "\n" \ -    "    var resultList = [];\n" \ -    "    var result;\n" \ -    "    var done = false;\n" \ -    "    while (!done) {\n" \ -    "        result = regexp.exec(str);\n" \ -    "\n" \ -    "        if (result === null)\n" \ -    "            done = true;\n" \ -    "        else {\n" \ -    "            @arrayPush(resultList, result);\n" \ -    "            if (!global)\n" \ -    "                done = true;\n" \ -    "            else {\n" \ -    "                var matchStr = @toString(result[0]);\n" \ -    "\n" \ -    "                if (!matchStr.length) {\n" \ -    "                    var thisIndex = @toLength(regexp.lastIndex);\n" \ -    "                    regexp.lastIndex = @advanceStringIndex(str, thisIndex, unicode);\n" \ -    "                }\n" \ -    "            }\n" \ -    "        }\n" \ -    "    }\n" \ -    "\n" \ -    "    var accumulatedResult = \"\";\n" \ -    "    var nextSourcePosition = 0;\n" \ -    "\n" \ -    "    for (var i = 0, resultListLength = resultList.length; i < resultListLength; ++i) {\n" \ -    "        var result = resultList[i];\n" \ -    "        var nCaptures = result.length - 1;\n" \ -    "        if (nCaptures < 0)\n" \ -    "            nCaptures = 0;\n" \ -    "        var matched = @toString(result[0]);\n" \ -    "        var matchLength = matched.length;\n" \ -    "        var position = @toIntegerOrInfinity(result.index);\n" \ -    "        position = (position > stringLength) ? stringLength : position;\n" \ -    "        position = (position < 0) ? 0 : position;\n" \ -    "\n" \ -    "        var captures = [];\n" \ -    "        for (var n = 1; n <= nCaptures; n++) {\n" \ -    "            var capN = result[n];\n" \ -    "            if (capN !== @undefined)\n" \ -    "                capN = @toString(capN);\n" \ -    "            @arrayPush(captures, capN);\n" \ -    "        }\n" \ -    "\n" \ -    "        var replacement;\n" \ -    "        var namedCaptures = result.groups;\n" \ -    "\n" \ -    "        if (functionalReplace) {\n" \ -    "            var replacerArgs = [ matched ];\n" \ -    "            for (var j = 0; j < captures.length; j++)\n" \ -    "                @arrayPush(replacerArgs, captures[j]);\n" \ -    "\n" \ -    "            @arrayPush(replacerArgs, position);\n" \ -    "            @arrayPush(replacerArgs, str);\n" \ -    "\n" \ -    "            if (namedCaptures !== @undefined)\n" \ -    "                @arrayPush(replacerArgs, namedCaptures);\n" \ -    "\n" \ -    "            var replValue = replace.@apply(@undefined, replacerArgs);\n" \ -    "            replacement = @toString(replValue);\n" \ -    "        } else {\n" \ -    "            if (namedCaptures !== @undefined)\n" \ -    "                namedCaptures = @toObject(namedCaptures, \"RegExp.prototype[Symbol.replace] requires 'groups' property of a match not be null\");\n" \ -    "\n" \ -    "            replacement = @getSubstitution(matched, str, position, captures, namedCaptures, replace);\n" \ -    "        }\n" \ -    "\n" \ -    "        if (position >= nextSourcePosition) {\n" \ -    "            accumulatedResult = accumulatedResult + @stringSubstring.@call(str, nextSourcePosition, position) + replacement;\n" \ -    "            nextSourcePosition = position + matchLength;\n" \ -    "        }\n" \ -    "    }\n" \ -    "\n" \ -    "    if (nextSourcePosition >= stringLength)\n" \ -    "        return  accumulatedResult;\n" \ -    "\n" \ -    "    return accumulatedResult + @stringSubstring.@call(str, nextSourcePosition);\n" \ -    "})\n" \ -; - -const JSC::ConstructAbility s_onigurumaRegExpPrototypeSearchCodeConstructAbility = JSC::ConstructAbility::CannotConstruct; -const JSC::ConstructorKind s_onigurumaRegExpPrototypeSearchCodeConstructorKind = JSC::ConstructorKind::None; -const JSC::ImplementationVisibility s_onigurumaRegExpPrototypeSearchCodeImplementationVisibility = JSC::ImplementationVisibility::Public; -const int s_onigurumaRegExpPrototypeSearchCodeLength = 631; -static const JSC::Intrinsic s_onigurumaRegExpPrototypeSearchCodeIntrinsic = JSC::NoIntrinsic; -const char* const s_onigurumaRegExpPrototypeSearchCode = -    "(function (strArg)\n" \ -    "{\n" \ -    "    \"use strict\";\n" \ -    "\n" \ -    "    var regexp = this;\n" \ -    "\n" \ -    "    //\n" \ -    "    //\n" \ -    "    if (!@isObject(this))\n" \ -    "        @throwTypeError(\"RegExp.prototype.@@search requires that |this| be an Object\");\n" \ -    "\n" \ -    "    //\n" \ -    "    var str = @toString(strArg)\n" \ -    "\n" \ -    "    //\n" \ -    "    var previousLastIndex = regexp.lastIndex;\n" \ -    "\n" \ -    "    //\n" \ -    "    //\n" \ -    "    if (!@sameValue(previousLastIndex, 0))\n" \ -    "        regexp.lastIndex = 0;\n" \ -    "\n" \ -    "    //\n" \ -    "    var result = regexp.exec(str);\n" \ -    "\n" \ -    "    //\n" \ -    "    //\n" \ -    "    //\n" \ -    "    if (!@sameValue(regexp.lastIndex, previousLastIndex))\n" \ -    "        regexp.lastIndex = previousLastIndex;\n" \ -    "\n" \ -    "    //\n" \ -    "    if (result === null)\n" \ -    "        return -1;\n" \ -    "\n" \ -    "    //\n" \ -    "    return result.index;\n" \ -    "})\n" \ -; - -const JSC::ConstructAbility s_onigurumaRegExpPrototypeSplitCodeConstructAbility = JSC::ConstructAbility::CannotConstruct; -const JSC::ConstructorKind s_onigurumaRegExpPrototypeSplitCodeConstructorKind = JSC::ConstructorKind::None; -const JSC::ImplementationVisibility s_onigurumaRegExpPrototypeSplitCodeImplementationVisibility = JSC::ImplementationVisibility::Public; -const int s_onigurumaRegExpPrototypeSplitCodeLength = 2926; -static const JSC::Intrinsic s_onigurumaRegExpPrototypeSplitCodeIntrinsic = JSC::NoIntrinsic; -const char* const s_onigurumaRegExpPrototypeSplitCode = -    "(function (string, limit)\n" \ -    "{\n" \ -    "    \"use strict\";\n" \ -    "\n" \ -    "    //\n" \ -    "    //\n" \ -    "    if (!@isObject(this))\n" \ -    "        @throwTypeError(\"RegExp.prototype.@@split requires that |this| be an Object\");\n" \ -    "    var regexp = this;\n" \ -    "\n" \ -    "    //\n" \ -    "    var str = @toString(string);\n" \ -    "\n" \ -    "    //\n" \ -    "    var speciesConstructor = @speciesConstructor(regexp, @RegExp);\n" \ -    "\n" \ -    "    //\n" \ -    "    var flags = @toString(regexp.flags);\n" \ -    "\n" \ -    "    //\n" \ -    "    //\n" \ -    "    var unicodeMatching = @stringIncludesInternal.@call(flags, \"u\");\n" \ -    "    //\n" \ -    "    //\n" \ -    "    var newFlags = @stringIncludesInternal.@call(flags, \"y\") ? flags : flags + \"y\";\n" \ -    "\n" \ -    "    //\n" \ -    "    var splitter = new speciesConstructor(regexp.source, newFlags);\n" \ -    "\n" \ -    "    //\n" \ -    "    //\n" \ -    "\n" \ -    "    //\n" \ -    "    //\n" \ -    "    var result = [];\n" \ -    "\n" \ -    "    //\n" \ -    "    limit = (limit === @undefined) ? 0xffffffff : limit >>> 0;\n" \ -    "\n" \ -    "    //\n" \ -    "    if (!limit)\n" \ -    "        return result;\n" \ -    "\n" \ -    "    //\n" \ -    "    var size = str.length;\n" \ -    "\n" \ -    "    //\n" \ -    "    if (!size) {\n" \ -    "        //\n" \ -    "        var z = splitter.exec(str);\n" \ -    "        //\n" \ -    "        if (z !== null)\n" \ -    "            return result;\n" \ -    "        //\n" \ -    "        @putByValDirect(result, 0, str);\n" \ -    "        //\n" \ -    "        return result;\n" \ -    "    }\n" \ -    "\n" \ -    "    //\n" \ -    "    var position = 0;\n" \ -    "    //\n" \ -    "    var matchPosition = 0;\n" \ -    "\n" \ -    "    //\n" \ -    "    while (matchPosition < size) {\n" \ -    "        //\n" \ -    "        splitter.lastIndex = matchPosition;\n" \ -    "        //\n" \ -    "        var matches = splitter.exec(str);\n" \ -    "        //\n" \ -    "        if (matches === null)\n" \ -    "            matchPosition = @advanceStringIndex(str, matchPosition, unicodeMatching);\n" \ -    "        //\n" \ -    "        else {\n" \ -    "            //\n" \ -    "            var endPosition = @toLength(splitter.lastIndex);\n" \ -    "            //\n" \ -    "            endPosition = (endPosition <= size) ? endPosition : size;\n" \ -    "            //\n" \ -    "            if (endPosition === position)\n" \ -    "                matchPosition = @advanceStringIndex(str, matchPosition, unicodeMatching);\n" \ -    "            //\n" \ -    "            else {\n" \ -    "                //\n" \ -    "                var subStr = @stringSubstring.@call(str, position, matchPosition);\n" \ -    "                //\n" \ -    "                //\n" \ -    "                @arrayPush(result, subStr);\n" \ -    "                //\n" \ -    "                if (result.length == limit)\n" \ -    "                    return result;\n" \ -    "\n" \ -    "                //\n" \ -    "                position = endPosition;\n" \ -    "                //\n" \ -    "                //\n" \ -    "                var numberOfCaptures = matches.length > 1 ? matches.length - 1 : 0;\n" \ -    "\n" \ -    "                //\n" \ -    "                var i = 1;\n" \ -    "                //\n" \ -    "                while (i <= numberOfCaptures) {\n" \ -    "                    //\n" \ -    "                    var nextCapture = matches[i];\n" \ -    "                    //\n" \ -    "                    //\n" \ -    "                    @arrayPush(result, nextCapture);\n" \ -    "                    //\n" \ -    "                    if (result.length == limit)\n" \ -    "                        return result;\n" \ -    "                    //\n" \ -    "                    i++;\n" \ -    "                }\n" \ -    "                //\n" \ -    "                matchPosition = position;\n" \ -    "            }\n" \ -    "        }\n" \ -    "    }\n" \ -    "    //\n" \ -    "    var remainingStr = @stringSubstring.@call(str, position, size);\n" \ -    "    //\n" \ -    "    @arrayPush(result, remainingStr);\n" \ -    "    //\n" \ -    "    return result;\n" \ -    "})\n" \ -; - -const JSC::ConstructAbility s_onigurumaRegExpPrototypeTestCodeConstructAbility = JSC::ConstructAbility::CannotConstruct; -const JSC::ConstructorKind s_onigurumaRegExpPrototypeTestCodeConstructorKind = JSC::ConstructorKind::None; -const JSC::ImplementationVisibility s_onigurumaRegExpPrototypeTestCodeImplementationVisibility = JSC::ImplementationVisibility::Public; -const int s_onigurumaRegExpPrototypeTestCodeLength = 452; -static const JSC::Intrinsic s_onigurumaRegExpPrototypeTestCodeIntrinsic = JSC::NoIntrinsic; -const char* const s_onigurumaRegExpPrototypeTestCode = -    "(function (strArg)\n" \ -    "{\n" \ -    "    \"use strict\";\n" \ -    "\n" \ -    "    var regexp = this;\n" \ -    "\n" \ -    "    if (regexp.test == @Bun.OnigurumaRegExp.prototype.test) {\n" \ -    "        return regexp.test(strArg);\n" \ -    "    }\n" \ -    "\n" \ -    "    //\n" \ -    "    //\n" \ -    "    if (!@isObject(regexp))\n" \ -    "        @throwTypeError(\"RegExp.prototype.test requires that |this| be an Object\");\n" \ -    "\n" \ -    "    //\n" \ -    "    var str = @toString(strArg);\n" \ -    "\n" \ -    "    //\n" \ -    "    var match = regexp.exec(str);\n" \ -    "\n" \ -    "    //\n" \ -    "    if (match !== null)\n" \ -    "        return true;\n" \ -    "    return false;\n" \ -    "})\n" \ -; - - -#define DEFINE_BUILTIN_GENERATOR(codeName, functionName, overriddenName, argumentCount) \ -JSC::FunctionExecutable* codeName##Generator(JSC::VM& vm) \ -{\ -    JSVMClientData* clientData = static_cast<JSVMClientData*>(vm.clientData); \ -    return clientData->builtinFunctions().onigurumaRegExpPrototypeBuiltins().codeName##Executable()->link(vm, nullptr, clientData->builtinFunctions().onigurumaRegExpPrototypeBuiltins().codeName##Source(), std::nullopt, s_##codeName##Intrinsic); \ -} -WEBCORE_FOREACH_ONIGURUMAREGEXPPROTOTYPE_BUILTIN_CODE(DEFINE_BUILTIN_GENERATOR) -#undef DEFINE_BUILTIN_GENERATOR - - -} // namespace WebCore diff --git a/src/bun.js/builtins/cpp/OnigurumaRegExpPrototypeBuiltins.h b/src/bun.js/builtins/cpp/OnigurumaRegExpPrototypeBuiltins.h deleted file mode 100644 index d8d17d14d..000000000 --- a/src/bun.js/builtins/cpp/OnigurumaRegExpPrototypeBuiltins.h +++ /dev/null @@ -1,201 +0,0 @@ -/* - * Copyright (c) 2015 Igalia - * Copyright (c) 2015 Igalia S.L. - * Copyright (c) 2015 Igalia. - * Copyright (c) 2015, 2016 Canon Inc. All rights reserved. - * Copyright (c) 2015, 2016, 2017 Canon Inc. - * Copyright (c) 2016, 2018 -2018 Apple Inc. All rights reserved. - * Copyright (c) 2016, 2020 Apple Inc. All rights reserved. - * Copyright (c) 2022 Codeblog Corp. 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. - *  - */ - -// DO NOT EDIT THIS FILE. It is automatically generated from JavaScript files for -// builtins by the script: Source/JavaScriptCore/Scripts/generate-js-builtins.py - -#pragma once - -#include <JavaScriptCore/BuiltinUtils.h> -#include <JavaScriptCore/Identifier.h> -#include <JavaScriptCore/JSFunction.h> -#include <JavaScriptCore/UnlinkedFunctionExecutable.h> - -namespace JSC { -class FunctionExecutable; -} - -namespace WebCore { - -/* OnigurumaRegExpPrototype */ -extern const char* const s_onigurumaRegExpPrototypeAdvanceStringIndexCode; -extern const int s_onigurumaRegExpPrototypeAdvanceStringIndexCodeLength; -extern const JSC::ConstructAbility s_onigurumaRegExpPrototypeAdvanceStringIndexCodeConstructAbility; -extern const JSC::ConstructorKind s_onigurumaRegExpPrototypeAdvanceStringIndexCodeConstructorKind; -extern const JSC::ImplementationVisibility s_onigurumaRegExpPrototypeAdvanceStringIndexCodeImplementationVisibility; -extern const char* const s_onigurumaRegExpPrototypeMatchSlowCode; -extern const int s_onigurumaRegExpPrototypeMatchSlowCodeLength; -extern const JSC::ConstructAbility s_onigurumaRegExpPrototypeMatchSlowCodeConstructAbility; -extern const JSC::ConstructorKind s_onigurumaRegExpPrototypeMatchSlowCodeConstructorKind; -extern const JSC::ImplementationVisibility s_onigurumaRegExpPrototypeMatchSlowCodeImplementationVisibility; -extern const char* const s_onigurumaRegExpPrototypeMatchCode; -extern const int s_onigurumaRegExpPrototypeMatchCodeLength; -extern const JSC::ConstructAbility s_onigurumaRegExpPrototypeMatchCodeConstructAbility; -extern const JSC::ConstructorKind s_onigurumaRegExpPrototypeMatchCodeConstructorKind; -extern const JSC::ImplementationVisibility s_onigurumaRegExpPrototypeMatchCodeImplementationVisibility; -extern const char* const s_onigurumaRegExpPrototypeMatchAllCode; -extern const int s_onigurumaRegExpPrototypeMatchAllCodeLength; -extern const JSC::ConstructAbility s_onigurumaRegExpPrototypeMatchAllCodeConstructAbility; -extern const JSC::ConstructorKind s_onigurumaRegExpPrototypeMatchAllCodeConstructorKind; -extern const JSC::ImplementationVisibility s_onigurumaRegExpPrototypeMatchAllCodeImplementationVisibility; -extern const char* const s_onigurumaRegExpPrototypeGetSubstitutionCode; -extern const int s_onigurumaRegExpPrototypeGetSubstitutionCodeLength; -extern const JSC::ConstructAbility s_onigurumaRegExpPrototypeGetSubstitutionCodeConstructAbility; -extern const JSC::ConstructorKind s_onigurumaRegExpPrototypeGetSubstitutionCodeConstructorKind; -extern const JSC::ImplementationVisibility s_onigurumaRegExpPrototypeGetSubstitutionCodeImplementationVisibility; -extern const char* const s_onigurumaRegExpPrototypeReplaceCode; -extern const int s_onigurumaRegExpPrototypeReplaceCodeLength; -extern const JSC::ConstructAbility s_onigurumaRegExpPrototypeReplaceCodeConstructAbility; -extern const JSC::ConstructorKind s_onigurumaRegExpPrototypeReplaceCodeConstructorKind; -extern const JSC::ImplementationVisibility s_onigurumaRegExpPrototypeReplaceCodeImplementationVisibility; -extern const char* const s_onigurumaRegExpPrototypeSearchCode; -extern const int s_onigurumaRegExpPrototypeSearchCodeLength; -extern const JSC::ConstructAbility s_onigurumaRegExpPrototypeSearchCodeConstructAbility; -extern const JSC::ConstructorKind s_onigurumaRegExpPrototypeSearchCodeConstructorKind; -extern const JSC::ImplementationVisibility s_onigurumaRegExpPrototypeSearchCodeImplementationVisibility; -extern const char* const s_onigurumaRegExpPrototypeSplitCode; -extern const int s_onigurumaRegExpPrototypeSplitCodeLength; -extern const JSC::ConstructAbility s_onigurumaRegExpPrototypeSplitCodeConstructAbility; -extern const JSC::ConstructorKind s_onigurumaRegExpPrototypeSplitCodeConstructorKind; -extern const JSC::ImplementationVisibility s_onigurumaRegExpPrototypeSplitCodeImplementationVisibility; -extern const char* const s_onigurumaRegExpPrototypeTestCode; -extern const int s_onigurumaRegExpPrototypeTestCodeLength; -extern const JSC::ConstructAbility s_onigurumaRegExpPrototypeTestCodeConstructAbility; -extern const JSC::ConstructorKind s_onigurumaRegExpPrototypeTestCodeConstructorKind; -extern const JSC::ImplementationVisibility s_onigurumaRegExpPrototypeTestCodeImplementationVisibility; - -#define WEBCORE_FOREACH_ONIGURUMAREGEXPPROTOTYPE_BUILTIN_DATA(macro) \ -    macro(advanceStringIndex, onigurumaRegExpPrototypeAdvanceStringIndex, 3) \ -    macro(matchSlow, onigurumaRegExpPrototypeMatchSlow, 2) \ -    macro(match, onigurumaRegExpPrototypeMatch, 1) \ -    macro(matchAll, onigurumaRegExpPrototypeMatchAll, 1) \ -    macro(getSubstitution, onigurumaRegExpPrototypeGetSubstitution, 6) \ -    macro(replace, onigurumaRegExpPrototypeReplace, 2) \ -    macro(search, onigurumaRegExpPrototypeSearch, 1) \ -    macro(split, onigurumaRegExpPrototypeSplit, 2) \ -    macro(test, onigurumaRegExpPrototypeTest, 1) \ - -#define WEBCORE_BUILTIN_ONIGURUMAREGEXPPROTOTYPE_ADVANCESTRINGINDEX 1 -#define WEBCORE_BUILTIN_ONIGURUMAREGEXPPROTOTYPE_MATCHSLOW 1 -#define WEBCORE_BUILTIN_ONIGURUMAREGEXPPROTOTYPE_MATCH 1 -#define WEBCORE_BUILTIN_ONIGURUMAREGEXPPROTOTYPE_MATCHALL 1 -#define WEBCORE_BUILTIN_ONIGURUMAREGEXPPROTOTYPE_GETSUBSTITUTION 1 -#define WEBCORE_BUILTIN_ONIGURUMAREGEXPPROTOTYPE_REPLACE 1 -#define WEBCORE_BUILTIN_ONIGURUMAREGEXPPROTOTYPE_SEARCH 1 -#define WEBCORE_BUILTIN_ONIGURUMAREGEXPPROTOTYPE_SPLIT 1 -#define WEBCORE_BUILTIN_ONIGURUMAREGEXPPROTOTYPE_TEST 1 - -#define WEBCORE_FOREACH_ONIGURUMAREGEXPPROTOTYPE_BUILTIN_CODE(macro) \ -    macro(onigurumaRegExpPrototypeAdvanceStringIndexCode, advanceStringIndex, ASCIILiteral(), s_onigurumaRegExpPrototypeAdvanceStringIndexCodeLength) \ -    macro(onigurumaRegExpPrototypeMatchSlowCode, matchSlow, ASCIILiteral(), s_onigurumaRegExpPrototypeMatchSlowCodeLength) \ -    macro(onigurumaRegExpPrototypeMatchCode, match, "[Symbol.match]"_s, s_onigurumaRegExpPrototypeMatchCodeLength) \ -    macro(onigurumaRegExpPrototypeMatchAllCode, matchAll, "[Symbol.matchAll]"_s, s_onigurumaRegExpPrototypeMatchAllCodeLength) \ -    macro(onigurumaRegExpPrototypeGetSubstitutionCode, getSubstitution, ASCIILiteral(), s_onigurumaRegExpPrototypeGetSubstitutionCodeLength) \ -    macro(onigurumaRegExpPrototypeReplaceCode, replace, "[Symbol.replace]"_s, s_onigurumaRegExpPrototypeReplaceCodeLength) \ -    macro(onigurumaRegExpPrototypeSearchCode, search, "[Symbol.search]"_s, s_onigurumaRegExpPrototypeSearchCodeLength) \ -    macro(onigurumaRegExpPrototypeSplitCode, split, "[Symbol.split]"_s, s_onigurumaRegExpPrototypeSplitCodeLength) \ -    macro(onigurumaRegExpPrototypeTestCode, test, ASCIILiteral(), s_onigurumaRegExpPrototypeTestCodeLength) \ - -#define WEBCORE_FOREACH_ONIGURUMAREGEXPPROTOTYPE_BUILTIN_FUNCTION_NAME(macro) \ -    macro(advanceStringIndex) \ -    macro(getSubstitution) \ -    macro(match) \ -    macro(matchAll) \ -    macro(matchSlow) \ -    macro(replace) \ -    macro(search) \ -    macro(split) \ -    macro(test) \ - -#define DECLARE_BUILTIN_GENERATOR(codeName, functionName, overriddenName, argumentCount) \ -    JSC::FunctionExecutable* codeName##Generator(JSC::VM&); - -WEBCORE_FOREACH_ONIGURUMAREGEXPPROTOTYPE_BUILTIN_CODE(DECLARE_BUILTIN_GENERATOR) -#undef DECLARE_BUILTIN_GENERATOR - -class OnigurumaRegExpPrototypeBuiltinsWrapper : private JSC::WeakHandleOwner { -public: -    explicit OnigurumaRegExpPrototypeBuiltinsWrapper(JSC::VM& vm) -        : m_vm(vm) -        WEBCORE_FOREACH_ONIGURUMAREGEXPPROTOTYPE_BUILTIN_FUNCTION_NAME(INITIALIZE_BUILTIN_NAMES) -#define INITIALIZE_BUILTIN_SOURCE_MEMBERS(name, functionName, overriddenName, length) , m_##name##Source(JSC::makeSource(StringImpl::createWithoutCopying(s_##name, length), { })) -        WEBCORE_FOREACH_ONIGURUMAREGEXPPROTOTYPE_BUILTIN_CODE(INITIALIZE_BUILTIN_SOURCE_MEMBERS) -#undef INITIALIZE_BUILTIN_SOURCE_MEMBERS -    { -    } - -#define EXPOSE_BUILTIN_EXECUTABLES(name, functionName, overriddenName, length) \ -    JSC::UnlinkedFunctionExecutable* name##Executable(); \ -    const JSC::SourceCode& name##Source() const { return m_##name##Source; } -    WEBCORE_FOREACH_ONIGURUMAREGEXPPROTOTYPE_BUILTIN_CODE(EXPOSE_BUILTIN_EXECUTABLES) -#undef EXPOSE_BUILTIN_EXECUTABLES - -    WEBCORE_FOREACH_ONIGURUMAREGEXPPROTOTYPE_BUILTIN_FUNCTION_NAME(DECLARE_BUILTIN_IDENTIFIER_ACCESSOR) - -    void exportNames(); - -private: -    JSC::VM& m_vm; - -    WEBCORE_FOREACH_ONIGURUMAREGEXPPROTOTYPE_BUILTIN_FUNCTION_NAME(DECLARE_BUILTIN_NAMES) - -#define DECLARE_BUILTIN_SOURCE_MEMBERS(name, functionName, overriddenName, length) \ -    JSC::SourceCode m_##name##Source;\ -    JSC::Weak<JSC::UnlinkedFunctionExecutable> m_##name##Executable; -    WEBCORE_FOREACH_ONIGURUMAREGEXPPROTOTYPE_BUILTIN_CODE(DECLARE_BUILTIN_SOURCE_MEMBERS) -#undef DECLARE_BUILTIN_SOURCE_MEMBERS - -}; - -#define DEFINE_BUILTIN_EXECUTABLES(name, functionName, overriddenName, length) \ -inline JSC::UnlinkedFunctionExecutable* OnigurumaRegExpPrototypeBuiltinsWrapper::name##Executable() \ -{\ -    if (!m_##name##Executable) {\ -        JSC::Identifier executableName = functionName##PublicName();\ -        if (overriddenName)\ -            executableName = JSC::Identifier::fromString(m_vm, overriddenName);\ -        m_##name##Executable = JSC::Weak<JSC::UnlinkedFunctionExecutable>(JSC::createBuiltinExecutable(m_vm, m_##name##Source, executableName, s_##name##ImplementationVisibility, s_##name##ConstructorKind, s_##name##ConstructAbility), this, &m_##name##Executable);\ -    }\ -    return m_##name##Executable.get();\ -} -WEBCORE_FOREACH_ONIGURUMAREGEXPPROTOTYPE_BUILTIN_CODE(DEFINE_BUILTIN_EXECUTABLES) -#undef DEFINE_BUILTIN_EXECUTABLES - -inline void OnigurumaRegExpPrototypeBuiltinsWrapper::exportNames() -{ -#define EXPORT_FUNCTION_NAME(name) m_vm.propertyNames->appendExternalName(name##PublicName(), name##PrivateName()); -    WEBCORE_FOREACH_ONIGURUMAREGEXPPROTOTYPE_BUILTIN_FUNCTION_NAME(EXPORT_FUNCTION_NAME) -#undef EXPORT_FUNCTION_NAME -} - -} // namespace WebCore diff --git a/src/bun.js/builtins/cpp/ProcessObjectInternalsBuiltins.cpp b/src/bun.js/builtins/cpp/ProcessObjectInternalsBuiltins.cpp index 5c452c7f8..28cd73663 100644 --- a/src/bun.js/builtins/cpp/ProcessObjectInternalsBuiltins.cpp +++ b/src/bun.js/builtins/cpp/ProcessObjectInternalsBuiltins.cpp @@ -4,7 +4,6 @@   * Copyright (c) 2015 Igalia.   * Copyright (c) 2015, 2016 Canon Inc. All rights reserved.   * Copyright (c) 2015, 2016, 2017 Canon Inc. - * Copyright (c) 2016, 2018 -2018 Apple Inc. All rights reserved.   * Copyright (c) 2016, 2020 Apple Inc. All rights reserved.   * Copyright (c) 2022 Codeblog Corp. All rights reserved.   *  diff --git a/src/bun.js/builtins/cpp/ProcessObjectInternalsBuiltins.h b/src/bun.js/builtins/cpp/ProcessObjectInternalsBuiltins.h index 078eb6234..c3af84061 100644 --- a/src/bun.js/builtins/cpp/ProcessObjectInternalsBuiltins.h +++ b/src/bun.js/builtins/cpp/ProcessObjectInternalsBuiltins.h @@ -4,7 +4,6 @@   * Copyright (c) 2015 Igalia.   * Copyright (c) 2015, 2016 Canon Inc. All rights reserved.   * Copyright (c) 2015, 2016, 2017 Canon Inc. - * Copyright (c) 2016, 2018 -2018 Apple Inc. All rights reserved.   * Copyright (c) 2016, 2020 Apple Inc. All rights reserved.   * Copyright (c) 2022 Codeblog Corp. All rights reserved.   *  diff --git a/src/bun.js/builtins/cpp/ReadableByteStreamControllerBuiltins.cpp b/src/bun.js/builtins/cpp/ReadableByteStreamControllerBuiltins.cpp index e5f3b348e..3b38a593b 100644 --- a/src/bun.js/builtins/cpp/ReadableByteStreamControllerBuiltins.cpp +++ b/src/bun.js/builtins/cpp/ReadableByteStreamControllerBuiltins.cpp @@ -4,7 +4,6 @@   * Copyright (c) 2015 Igalia.   * Copyright (c) 2015, 2016 Canon Inc. All rights reserved.   * Copyright (c) 2015, 2016, 2017 Canon Inc. - * Copyright (c) 2016, 2018 -2018 Apple Inc. All rights reserved.   * Copyright (c) 2016, 2020 Apple Inc. All rights reserved.   * Copyright (c) 2022 Codeblog Corp. All rights reserved.   *  diff --git a/src/bun.js/builtins/cpp/ReadableByteStreamControllerBuiltins.h b/src/bun.js/builtins/cpp/ReadableByteStreamControllerBuiltins.h index b3ed9b51a..2e19b9d21 100644 --- a/src/bun.js/builtins/cpp/ReadableByteStreamControllerBuiltins.h +++ b/src/bun.js/builtins/cpp/ReadableByteStreamControllerBuiltins.h @@ -4,7 +4,6 @@   * Copyright (c) 2015 Igalia.   * Copyright (c) 2015, 2016 Canon Inc. All rights reserved.   * Copyright (c) 2015, 2016, 2017 Canon Inc. - * Copyright (c) 2016, 2018 -2018 Apple Inc. All rights reserved.   * Copyright (c) 2016, 2020 Apple Inc. All rights reserved.   * Copyright (c) 2022 Codeblog Corp. All rights reserved.   *  diff --git a/src/bun.js/builtins/cpp/ReadableByteStreamInternalsBuiltins.cpp b/src/bun.js/builtins/cpp/ReadableByteStreamInternalsBuiltins.cpp index 087291d8e..f1732e48e 100644 --- a/src/bun.js/builtins/cpp/ReadableByteStreamInternalsBuiltins.cpp +++ b/src/bun.js/builtins/cpp/ReadableByteStreamInternalsBuiltins.cpp @@ -4,7 +4,6 @@   * Copyright (c) 2015 Igalia.   * Copyright (c) 2015, 2016 Canon Inc. All rights reserved.   * Copyright (c) 2015, 2016, 2017 Canon Inc. - * Copyright (c) 2016, 2018 -2018 Apple Inc. All rights reserved.   * Copyright (c) 2016, 2020 Apple Inc. All rights reserved.   * Copyright (c) 2022 Codeblog Corp. All rights reserved.   *  diff --git a/src/bun.js/builtins/cpp/ReadableByteStreamInternalsBuiltins.h b/src/bun.js/builtins/cpp/ReadableByteStreamInternalsBuiltins.h index 87afb3da2..06ee280bf 100644 --- a/src/bun.js/builtins/cpp/ReadableByteStreamInternalsBuiltins.h +++ b/src/bun.js/builtins/cpp/ReadableByteStreamInternalsBuiltins.h @@ -4,7 +4,6 @@   * Copyright (c) 2015 Igalia.   * Copyright (c) 2015, 2016 Canon Inc. All rights reserved.   * Copyright (c) 2015, 2016, 2017 Canon Inc. - * Copyright (c) 2016, 2018 -2018 Apple Inc. All rights reserved.   * Copyright (c) 2016, 2020 Apple Inc. All rights reserved.   * Copyright (c) 2022 Codeblog Corp. All rights reserved.   *  diff --git a/src/bun.js/builtins/cpp/ReadableStreamBYOBReaderBuiltins.cpp b/src/bun.js/builtins/cpp/ReadableStreamBYOBReaderBuiltins.cpp index 246d7b241..46dcf7f4e 100644 --- a/src/bun.js/builtins/cpp/ReadableStreamBYOBReaderBuiltins.cpp +++ b/src/bun.js/builtins/cpp/ReadableStreamBYOBReaderBuiltins.cpp @@ -4,7 +4,6 @@   * Copyright (c) 2015 Igalia.   * Copyright (c) 2015, 2016 Canon Inc. All rights reserved.   * Copyright (c) 2015, 2016, 2017 Canon Inc. - * Copyright (c) 2016, 2018 -2018 Apple Inc. All rights reserved.   * Copyright (c) 2016, 2020 Apple Inc. All rights reserved.   * Copyright (c) 2022 Codeblog Corp. All rights reserved.   *  diff --git a/src/bun.js/builtins/cpp/ReadableStreamBYOBReaderBuiltins.h b/src/bun.js/builtins/cpp/ReadableStreamBYOBReaderBuiltins.h index 94969b6e1..c1d1a4c7f 100644 --- a/src/bun.js/builtins/cpp/ReadableStreamBYOBReaderBuiltins.h +++ b/src/bun.js/builtins/cpp/ReadableStreamBYOBReaderBuiltins.h @@ -4,7 +4,6 @@   * Copyright (c) 2015 Igalia.   * Copyright (c) 2015, 2016 Canon Inc. All rights reserved.   * Copyright (c) 2015, 2016, 2017 Canon Inc. - * Copyright (c) 2016, 2018 -2018 Apple Inc. All rights reserved.   * Copyright (c) 2016, 2020 Apple Inc. All rights reserved.   * Copyright (c) 2022 Codeblog Corp. All rights reserved.   *  diff --git a/src/bun.js/builtins/cpp/ReadableStreamBYOBRequestBuiltins.cpp b/src/bun.js/builtins/cpp/ReadableStreamBYOBRequestBuiltins.cpp index 52b56f01a..5e0cf16d4 100644 --- a/src/bun.js/builtins/cpp/ReadableStreamBYOBRequestBuiltins.cpp +++ b/src/bun.js/builtins/cpp/ReadableStreamBYOBRequestBuiltins.cpp @@ -4,7 +4,6 @@   * Copyright (c) 2015 Igalia.   * Copyright (c) 2015, 2016 Canon Inc. All rights reserved.   * Copyright (c) 2015, 2016, 2017 Canon Inc. - * Copyright (c) 2016, 2018 -2018 Apple Inc. All rights reserved.   * Copyright (c) 2016, 2020 Apple Inc. All rights reserved.   * Copyright (c) 2022 Codeblog Corp. All rights reserved.   *  diff --git a/src/bun.js/builtins/cpp/ReadableStreamBYOBRequestBuiltins.h b/src/bun.js/builtins/cpp/ReadableStreamBYOBRequestBuiltins.h index 91d764366..a5549ad98 100644 --- a/src/bun.js/builtins/cpp/ReadableStreamBYOBRequestBuiltins.h +++ b/src/bun.js/builtins/cpp/ReadableStreamBYOBRequestBuiltins.h @@ -4,7 +4,6 @@   * Copyright (c) 2015 Igalia.   * Copyright (c) 2015, 2016 Canon Inc. All rights reserved.   * Copyright (c) 2015, 2016, 2017 Canon Inc. - * Copyright (c) 2016, 2018 -2018 Apple Inc. All rights reserved.   * Copyright (c) 2016, 2020 Apple Inc. All rights reserved.   * Copyright (c) 2022 Codeblog Corp. All rights reserved.   *  diff --git a/src/bun.js/builtins/cpp/ReadableStreamBuiltins.cpp b/src/bun.js/builtins/cpp/ReadableStreamBuiltins.cpp index 2d50f9cb3..223d8f564 100644 --- a/src/bun.js/builtins/cpp/ReadableStreamBuiltins.cpp +++ b/src/bun.js/builtins/cpp/ReadableStreamBuiltins.cpp @@ -4,7 +4,6 @@   * Copyright (c) 2015 Igalia.   * Copyright (c) 2015, 2016 Canon Inc. All rights reserved.   * Copyright (c) 2015, 2016, 2017 Canon Inc. - * Copyright (c) 2016, 2018 -2018 Apple Inc. All rights reserved.   * Copyright (c) 2016, 2020 Apple Inc. All rights reserved.   * Copyright (c) 2022 Codeblog Corp. All rights reserved.   *  diff --git a/src/bun.js/builtins/cpp/ReadableStreamBuiltins.h b/src/bun.js/builtins/cpp/ReadableStreamBuiltins.h index a51da4f44..b85038a43 100644 --- a/src/bun.js/builtins/cpp/ReadableStreamBuiltins.h +++ b/src/bun.js/builtins/cpp/ReadableStreamBuiltins.h @@ -4,7 +4,6 @@   * Copyright (c) 2015 Igalia.   * Copyright (c) 2015, 2016 Canon Inc. All rights reserved.   * Copyright (c) 2015, 2016, 2017 Canon Inc. - * Copyright (c) 2016, 2018 -2018 Apple Inc. All rights reserved.   * Copyright (c) 2016, 2020 Apple Inc. All rights reserved.   * Copyright (c) 2022 Codeblog Corp. All rights reserved.   *  diff --git a/src/bun.js/builtins/cpp/ReadableStreamDefaultControllerBuiltins.cpp b/src/bun.js/builtins/cpp/ReadableStreamDefaultControllerBuiltins.cpp index 2e9b3f231..185d6cdee 100644 --- a/src/bun.js/builtins/cpp/ReadableStreamDefaultControllerBuiltins.cpp +++ b/src/bun.js/builtins/cpp/ReadableStreamDefaultControllerBuiltins.cpp @@ -4,7 +4,6 @@   * Copyright (c) 2015 Igalia.   * Copyright (c) 2015, 2016 Canon Inc. All rights reserved.   * Copyright (c) 2015, 2016, 2017 Canon Inc. - * Copyright (c) 2016, 2018 -2018 Apple Inc. All rights reserved.   * Copyright (c) 2016, 2020 Apple Inc. All rights reserved.   * Copyright (c) 2022 Codeblog Corp. All rights reserved.   *  diff --git a/src/bun.js/builtins/cpp/ReadableStreamDefaultControllerBuiltins.h b/src/bun.js/builtins/cpp/ReadableStreamDefaultControllerBuiltins.h index 3dda64a21..5ae59810a 100644 --- a/src/bun.js/builtins/cpp/ReadableStreamDefaultControllerBuiltins.h +++ b/src/bun.js/builtins/cpp/ReadableStreamDefaultControllerBuiltins.h @@ -4,7 +4,6 @@   * Copyright (c) 2015 Igalia.   * Copyright (c) 2015, 2016 Canon Inc. All rights reserved.   * Copyright (c) 2015, 2016, 2017 Canon Inc. - * Copyright (c) 2016, 2018 -2018 Apple Inc. All rights reserved.   * Copyright (c) 2016, 2020 Apple Inc. All rights reserved.   * Copyright (c) 2022 Codeblog Corp. All rights reserved.   *  diff --git a/src/bun.js/builtins/cpp/ReadableStreamDefaultReaderBuiltins.cpp b/src/bun.js/builtins/cpp/ReadableStreamDefaultReaderBuiltins.cpp index 9504549e0..24b91037b 100644 --- a/src/bun.js/builtins/cpp/ReadableStreamDefaultReaderBuiltins.cpp +++ b/src/bun.js/builtins/cpp/ReadableStreamDefaultReaderBuiltins.cpp @@ -4,7 +4,6 @@   * Copyright (c) 2015 Igalia.   * Copyright (c) 2015, 2016 Canon Inc. All rights reserved.   * Copyright (c) 2015, 2016, 2017 Canon Inc. - * Copyright (c) 2016, 2018 -2018 Apple Inc. All rights reserved.   * Copyright (c) 2016, 2020 Apple Inc. All rights reserved.   * Copyright (c) 2022 Codeblog Corp. All rights reserved.   *  diff --git a/src/bun.js/builtins/cpp/ReadableStreamDefaultReaderBuiltins.h b/src/bun.js/builtins/cpp/ReadableStreamDefaultReaderBuiltins.h index b3b9aed91..b883be6b8 100644 --- a/src/bun.js/builtins/cpp/ReadableStreamDefaultReaderBuiltins.h +++ b/src/bun.js/builtins/cpp/ReadableStreamDefaultReaderBuiltins.h @@ -4,7 +4,6 @@   * Copyright (c) 2015 Igalia.   * Copyright (c) 2015, 2016 Canon Inc. All rights reserved.   * Copyright (c) 2015, 2016, 2017 Canon Inc. - * Copyright (c) 2016, 2018 -2018 Apple Inc. All rights reserved.   * Copyright (c) 2016, 2020 Apple Inc. All rights reserved.   * Copyright (c) 2022 Codeblog Corp. All rights reserved.   *  diff --git a/src/bun.js/builtins/cpp/ReadableStreamInternalsBuiltins.cpp b/src/bun.js/builtins/cpp/ReadableStreamInternalsBuiltins.cpp index 854d46faa..1b15e84e1 100644 --- a/src/bun.js/builtins/cpp/ReadableStreamInternalsBuiltins.cpp +++ b/src/bun.js/builtins/cpp/ReadableStreamInternalsBuiltins.cpp @@ -4,7 +4,6 @@   * Copyright (c) 2015 Igalia.   * Copyright (c) 2015, 2016 Canon Inc. All rights reserved.   * Copyright (c) 2015, 2016, 2017 Canon Inc. - * Copyright (c) 2016, 2018 -2018 Apple Inc. All rights reserved.   * Copyright (c) 2016, 2020 Apple Inc. All rights reserved.   * Copyright (c) 2022 Codeblog Corp. All rights reserved.   *  diff --git a/src/bun.js/builtins/cpp/ReadableStreamInternalsBuiltins.h b/src/bun.js/builtins/cpp/ReadableStreamInternalsBuiltins.h index 39b8e8b0d..a617260be 100644 --- a/src/bun.js/builtins/cpp/ReadableStreamInternalsBuiltins.h +++ b/src/bun.js/builtins/cpp/ReadableStreamInternalsBuiltins.h @@ -4,7 +4,6 @@   * Copyright (c) 2015 Igalia.   * Copyright (c) 2015, 2016 Canon Inc. All rights reserved.   * Copyright (c) 2015, 2016, 2017 Canon Inc. - * Copyright (c) 2016, 2018 -2018 Apple Inc. All rights reserved.   * Copyright (c) 2016, 2020 Apple Inc. All rights reserved.   * Copyright (c) 2022 Codeblog Corp. All rights reserved.   *  diff --git a/src/bun.js/builtins/cpp/StreamInternalsBuiltins.cpp b/src/bun.js/builtins/cpp/StreamInternalsBuiltins.cpp index c231091b6..7a1f7f098 100644 --- a/src/bun.js/builtins/cpp/StreamInternalsBuiltins.cpp +++ b/src/bun.js/builtins/cpp/StreamInternalsBuiltins.cpp @@ -4,7 +4,6 @@   * Copyright (c) 2015 Igalia.   * Copyright (c) 2015, 2016 Canon Inc. All rights reserved.   * Copyright (c) 2015, 2016, 2017 Canon Inc. - * Copyright (c) 2016, 2018 -2018 Apple Inc. All rights reserved.   * Copyright (c) 2016, 2020 Apple Inc. All rights reserved.   * Copyright (c) 2022 Codeblog Corp. All rights reserved.   *  diff --git a/src/bun.js/builtins/cpp/StreamInternalsBuiltins.h b/src/bun.js/builtins/cpp/StreamInternalsBuiltins.h index 6e3315a08..089992d77 100644 --- a/src/bun.js/builtins/cpp/StreamInternalsBuiltins.h +++ b/src/bun.js/builtins/cpp/StreamInternalsBuiltins.h @@ -4,7 +4,6 @@   * Copyright (c) 2015 Igalia.   * Copyright (c) 2015, 2016 Canon Inc. All rights reserved.   * Copyright (c) 2015, 2016, 2017 Canon Inc. - * Copyright (c) 2016, 2018 -2018 Apple Inc. All rights reserved.   * Copyright (c) 2016, 2020 Apple Inc. All rights reserved.   * Copyright (c) 2022 Codeblog Corp. All rights reserved.   *  diff --git a/src/bun.js/builtins/cpp/TransformStreamBuiltins.cpp b/src/bun.js/builtins/cpp/TransformStreamBuiltins.cpp index bb276fc34..82319d8b9 100644 --- a/src/bun.js/builtins/cpp/TransformStreamBuiltins.cpp +++ b/src/bun.js/builtins/cpp/TransformStreamBuiltins.cpp @@ -4,7 +4,6 @@   * Copyright (c) 2015 Igalia.   * Copyright (c) 2015, 2016 Canon Inc. All rights reserved.   * Copyright (c) 2015, 2016, 2017 Canon Inc. - * Copyright (c) 2016, 2018 -2018 Apple Inc. All rights reserved.   * Copyright (c) 2016, 2020 Apple Inc. All rights reserved.   * Copyright (c) 2022 Codeblog Corp. All rights reserved.   *  diff --git a/src/bun.js/builtins/cpp/TransformStreamBuiltins.h b/src/bun.js/builtins/cpp/TransformStreamBuiltins.h index f299a0659..8547fd350 100644 --- a/src/bun.js/builtins/cpp/TransformStreamBuiltins.h +++ b/src/bun.js/builtins/cpp/TransformStreamBuiltins.h @@ -4,7 +4,6 @@   * Copyright (c) 2015 Igalia.   * Copyright (c) 2015, 2016 Canon Inc. All rights reserved.   * Copyright (c) 2015, 2016, 2017 Canon Inc. - * Copyright (c) 2016, 2018 -2018 Apple Inc. All rights reserved.   * Copyright (c) 2016, 2020 Apple Inc. All rights reserved.   * Copyright (c) 2022 Codeblog Corp. All rights reserved.   *  diff --git a/src/bun.js/builtins/cpp/TransformStreamDefaultControllerBuiltins.cpp b/src/bun.js/builtins/cpp/TransformStreamDefaultControllerBuiltins.cpp index 7a30763d3..aae09e51d 100644 --- a/src/bun.js/builtins/cpp/TransformStreamDefaultControllerBuiltins.cpp +++ b/src/bun.js/builtins/cpp/TransformStreamDefaultControllerBuiltins.cpp @@ -4,7 +4,6 @@   * Copyright (c) 2015 Igalia.   * Copyright (c) 2015, 2016 Canon Inc. All rights reserved.   * Copyright (c) 2015, 2016, 2017 Canon Inc. - * Copyright (c) 2016, 2018 -2018 Apple Inc. All rights reserved.   * Copyright (c) 2016, 2020 Apple Inc. All rights reserved.   * Copyright (c) 2022 Codeblog Corp. All rights reserved.   *  diff --git a/src/bun.js/builtins/cpp/TransformStreamDefaultControllerBuiltins.h b/src/bun.js/builtins/cpp/TransformStreamDefaultControllerBuiltins.h index e837fc8c7..a38e0111e 100644 --- a/src/bun.js/builtins/cpp/TransformStreamDefaultControllerBuiltins.h +++ b/src/bun.js/builtins/cpp/TransformStreamDefaultControllerBuiltins.h @@ -4,7 +4,6 @@   * Copyright (c) 2015 Igalia.   * Copyright (c) 2015, 2016 Canon Inc. All rights reserved.   * Copyright (c) 2015, 2016, 2017 Canon Inc. - * Copyright (c) 2016, 2018 -2018 Apple Inc. All rights reserved.   * Copyright (c) 2016, 2020 Apple Inc. All rights reserved.   * Copyright (c) 2022 Codeblog Corp. All rights reserved.   *  diff --git a/src/bun.js/builtins/cpp/TransformStreamInternalsBuiltins.cpp b/src/bun.js/builtins/cpp/TransformStreamInternalsBuiltins.cpp index 0f09ce57e..2a0c48fa3 100644 --- a/src/bun.js/builtins/cpp/TransformStreamInternalsBuiltins.cpp +++ b/src/bun.js/builtins/cpp/TransformStreamInternalsBuiltins.cpp @@ -4,7 +4,6 @@   * Copyright (c) 2015 Igalia.   * Copyright (c) 2015, 2016 Canon Inc. All rights reserved.   * Copyright (c) 2015, 2016, 2017 Canon Inc. - * Copyright (c) 2016, 2018 -2018 Apple Inc. All rights reserved.   * Copyright (c) 2016, 2020 Apple Inc. All rights reserved.   * Copyright (c) 2022 Codeblog Corp. All rights reserved.   *  diff --git a/src/bun.js/builtins/cpp/TransformStreamInternalsBuiltins.h b/src/bun.js/builtins/cpp/TransformStreamInternalsBuiltins.h index 90768e1b6..4850ac1fb 100644 --- a/src/bun.js/builtins/cpp/TransformStreamInternalsBuiltins.h +++ b/src/bun.js/builtins/cpp/TransformStreamInternalsBuiltins.h @@ -4,7 +4,6 @@   * Copyright (c) 2015 Igalia.   * Copyright (c) 2015, 2016 Canon Inc. All rights reserved.   * Copyright (c) 2015, 2016, 2017 Canon Inc. - * Copyright (c) 2016, 2018 -2018 Apple Inc. All rights reserved.   * Copyright (c) 2016, 2020 Apple Inc. All rights reserved.   * Copyright (c) 2022 Codeblog Corp. All rights reserved.   *  diff --git a/src/bun.js/builtins/cpp/WebCoreJSBuiltinInternals.h b/src/bun.js/builtins/cpp/WebCoreJSBuiltinInternals.h index e843b7136..fe709cb07 100644 --- a/src/bun.js/builtins/cpp/WebCoreJSBuiltinInternals.h +++ b/src/bun.js/builtins/cpp/WebCoreJSBuiltinInternals.h @@ -8,7 +8,6 @@ namespace Zig { class GlobalObject; }   * Copyright (c) 2015 Igalia.   * Copyright (c) 2015, 2016 Canon Inc. All rights reserved.   * Copyright (c) 2015, 2016, 2017 Canon Inc. - * Copyright (c) 2016, 2018 -2018 Apple Inc. All rights reserved.   * Copyright (c) 2016, 2020 Apple Inc. All rights reserved.   * Copyright (c) 2022 Codeblog Corp. All rights reserved.   *  diff --git a/src/bun.js/builtins/cpp/WebCoreJSBuiltins.h b/src/bun.js/builtins/cpp/WebCoreJSBuiltins.h index 0d6d0372c..598e0948e 100644 --- a/src/bun.js/builtins/cpp/WebCoreJSBuiltins.h +++ b/src/bun.js/builtins/cpp/WebCoreJSBuiltins.h @@ -4,7 +4,6 @@   * Copyright (c) 2015 Igalia.   * Copyright (c) 2015, 2016 Canon Inc. All rights reserved.   * Copyright (c) 2015, 2016, 2017 Canon Inc. - * Copyright (c) 2016, 2018 -2018 Apple Inc. All rights reserved.   * Copyright (c) 2016, 2020 Apple Inc. All rights reserved.   * Copyright (c) 2022 Codeblog Corp. All rights reserved.   *  @@ -42,7 +41,6 @@  #include "ImportMetaObjectBuiltins.h"  #include "JSBufferConstructorBuiltins.h"  #include "JSBufferPrototypeBuiltins.h" -#include "OnigurumaRegExpPrototypeBuiltins.h"  #include "ProcessObjectInternalsBuiltins.h"  #include "ReadableByteStreamControllerBuiltins.h"  #include "ReadableByteStreamInternalsBuiltins.h" @@ -73,7 +71,6 @@ public:          , m_importMetaObjectBuiltins(m_vm)          , m_jsBufferConstructorBuiltins(m_vm)          , m_jsBufferPrototypeBuiltins(m_vm) -        , m_onigurumaRegExpPrototypeBuiltins(m_vm)          , m_processObjectInternalsBuiltins(m_vm)          , m_readableByteStreamControllerBuiltins(m_vm)          , m_readableByteStreamInternalsBuiltins(m_vm) @@ -104,7 +101,6 @@ public:      ImportMetaObjectBuiltinsWrapper& importMetaObjectBuiltins() { return m_importMetaObjectBuiltins; }      JSBufferConstructorBuiltinsWrapper& jsBufferConstructorBuiltins() { return m_jsBufferConstructorBuiltins; }      JSBufferPrototypeBuiltinsWrapper& jsBufferPrototypeBuiltins() { return m_jsBufferPrototypeBuiltins; } -    OnigurumaRegExpPrototypeBuiltinsWrapper& onigurumaRegExpPrototypeBuiltins() { return m_onigurumaRegExpPrototypeBuiltins; }      ProcessObjectInternalsBuiltinsWrapper& processObjectInternalsBuiltins() { return m_processObjectInternalsBuiltins; }      ReadableByteStreamControllerBuiltinsWrapper& readableByteStreamControllerBuiltins() { return m_readableByteStreamControllerBuiltins; }      ReadableByteStreamInternalsBuiltinsWrapper& readableByteStreamInternalsBuiltins() { return m_readableByteStreamInternalsBuiltins; } @@ -130,7 +126,6 @@ private:      ImportMetaObjectBuiltinsWrapper m_importMetaObjectBuiltins;      JSBufferConstructorBuiltinsWrapper m_jsBufferConstructorBuiltins;      JSBufferPrototypeBuiltinsWrapper m_jsBufferPrototypeBuiltins; -    OnigurumaRegExpPrototypeBuiltinsWrapper m_onigurumaRegExpPrototypeBuiltins;      ProcessObjectInternalsBuiltinsWrapper m_processObjectInternalsBuiltins;      ReadableByteStreamControllerBuiltinsWrapper m_readableByteStreamControllerBuiltins;      ReadableByteStreamInternalsBuiltinsWrapper m_readableByteStreamInternalsBuiltins; diff --git a/src/bun.js/builtins/cpp/WritableStreamDefaultControllerBuiltins.cpp b/src/bun.js/builtins/cpp/WritableStreamDefaultControllerBuiltins.cpp index c4d996494..fed47de16 100644 --- a/src/bun.js/builtins/cpp/WritableStreamDefaultControllerBuiltins.cpp +++ b/src/bun.js/builtins/cpp/WritableStreamDefaultControllerBuiltins.cpp @@ -4,7 +4,6 @@   * Copyright (c) 2015 Igalia.   * Copyright (c) 2015, 2016 Canon Inc. All rights reserved.   * Copyright (c) 2015, 2016, 2017 Canon Inc. - * Copyright (c) 2016, 2018 -2018 Apple Inc. All rights reserved.   * Copyright (c) 2016, 2020 Apple Inc. All rights reserved.   * Copyright (c) 2022 Codeblog Corp. All rights reserved.   *  diff --git a/src/bun.js/builtins/cpp/WritableStreamDefaultControllerBuiltins.h b/src/bun.js/builtins/cpp/WritableStreamDefaultControllerBuiltins.h index e8b90012b..41e5a62ab 100644 --- a/src/bun.js/builtins/cpp/WritableStreamDefaultControllerBuiltins.h +++ b/src/bun.js/builtins/cpp/WritableStreamDefaultControllerBuiltins.h @@ -4,7 +4,6 @@   * Copyright (c) 2015 Igalia.   * Copyright (c) 2015, 2016 Canon Inc. All rights reserved.   * Copyright (c) 2015, 2016, 2017 Canon Inc. - * Copyright (c) 2016, 2018 -2018 Apple Inc. All rights reserved.   * Copyright (c) 2016, 2020 Apple Inc. All rights reserved.   * Copyright (c) 2022 Codeblog Corp. All rights reserved.   *  diff --git a/src/bun.js/builtins/cpp/WritableStreamDefaultWriterBuiltins.cpp b/src/bun.js/builtins/cpp/WritableStreamDefaultWriterBuiltins.cpp index 4876aa54a..4a2088728 100644 --- a/src/bun.js/builtins/cpp/WritableStreamDefaultWriterBuiltins.cpp +++ b/src/bun.js/builtins/cpp/WritableStreamDefaultWriterBuiltins.cpp @@ -4,7 +4,6 @@   * Copyright (c) 2015 Igalia.   * Copyright (c) 2015, 2016 Canon Inc. All rights reserved.   * Copyright (c) 2015, 2016, 2017 Canon Inc. - * Copyright (c) 2016, 2018 -2018 Apple Inc. All rights reserved.   * Copyright (c) 2016, 2020 Apple Inc. All rights reserved.   * Copyright (c) 2022 Codeblog Corp. All rights reserved.   *  diff --git a/src/bun.js/builtins/cpp/WritableStreamDefaultWriterBuiltins.h b/src/bun.js/builtins/cpp/WritableStreamDefaultWriterBuiltins.h index cadcb9840..70d154bcd 100644 --- a/src/bun.js/builtins/cpp/WritableStreamDefaultWriterBuiltins.h +++ b/src/bun.js/builtins/cpp/WritableStreamDefaultWriterBuiltins.h @@ -4,7 +4,6 @@   * Copyright (c) 2015 Igalia.   * Copyright (c) 2015, 2016 Canon Inc. All rights reserved.   * Copyright (c) 2015, 2016, 2017 Canon Inc. - * Copyright (c) 2016, 2018 -2018 Apple Inc. All rights reserved.   * Copyright (c) 2016, 2020 Apple Inc. All rights reserved.   * Copyright (c) 2022 Codeblog Corp. All rights reserved.   *  diff --git a/src/bun.js/builtins/cpp/WritableStreamInternalsBuiltins.cpp b/src/bun.js/builtins/cpp/WritableStreamInternalsBuiltins.cpp index e75d0e5dc..73df2027d 100644 --- a/src/bun.js/builtins/cpp/WritableStreamInternalsBuiltins.cpp +++ b/src/bun.js/builtins/cpp/WritableStreamInternalsBuiltins.cpp @@ -4,7 +4,6 @@   * Copyright (c) 2015 Igalia.   * Copyright (c) 2015, 2016 Canon Inc. All rights reserved.   * Copyright (c) 2015, 2016, 2017 Canon Inc. - * Copyright (c) 2016, 2018 -2018 Apple Inc. All rights reserved.   * Copyright (c) 2016, 2020 Apple Inc. All rights reserved.   * Copyright (c) 2022 Codeblog Corp. All rights reserved.   *  diff --git a/src/bun.js/builtins/cpp/WritableStreamInternalsBuiltins.h b/src/bun.js/builtins/cpp/WritableStreamInternalsBuiltins.h index a869ed60f..f38a4ac60 100644 --- a/src/bun.js/builtins/cpp/WritableStreamInternalsBuiltins.h +++ b/src/bun.js/builtins/cpp/WritableStreamInternalsBuiltins.h @@ -4,7 +4,6 @@   * Copyright (c) 2015 Igalia.   * Copyright (c) 2015, 2016 Canon Inc. All rights reserved.   * Copyright (c) 2015, 2016, 2017 Canon Inc. - * Copyright (c) 2016, 2018 -2018 Apple Inc. All rights reserved.   * Copyright (c) 2016, 2020 Apple Inc. All rights reserved.   * Copyright (c) 2022 Codeblog Corp. All rights reserved.   *  diff --git a/src/bun.js/builtins/js/OnigurumaRegExpPrototype.js b/src/bun.js/builtins/js/OnigurumaRegExpPrototype.js deleted file mode 100644 index e894069f3..000000000 --- a/src/bun.js/builtins/js/OnigurumaRegExpPrototype.js +++ /dev/null @@ -1,583 +0,0 @@ -/* - * Copyright (C) 2016-2018 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. ``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 - * 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.  - */ - - -@linkTimeConstant -function advanceStringIndex(string, index, unicode) -{ -    // This function implements AdvanceStringIndex described in ES6 21.2.5.2.3. -    "use strict"; - -    if (!unicode) -        return index + 1; - -    if (index + 1 >= string.length) -        return index + 1; - -    var first = string.@charCodeAt(index); -    if (first < 0xD800 || first > 0xDBFF) -        return index + 1; - -    var second = string.@charCodeAt(index + 1); -    if (second < 0xDC00 || second > 0xDFFF) -        return index + 1; - -    return index + 2; -} - - -@linkTimeConstant -function matchSlow(regexp, str) -{ -    "use strict"; - -    if (!regexp.global) -        return regexp.exec(str); -     -    var unicode = regexp.unicode; -    regexp.lastIndex = 0; -    var resultList = []; - -    // FIXME: It would be great to implement a solution similar to what we do in -    // RegExpObject::matchGlobal(). It's not clear if this is possible, since this loop has -    // effects. https://bugs.webkit.org/show_bug.cgi?id=158145 -    var maximumReasonableMatchSize = 100000000; - -    while (true) { -        var result = regexp.exec(str); -         -        if (result === null) { -            if (resultList.length === 0) -                return null; -            return resultList; -        } - -        if (resultList.length > maximumReasonableMatchSize) -            @throwOutOfMemoryError(); - -        var resultString = @toString(result[0]); - -        if (!resultString.length) -            regexp.lastIndex = @advanceStringIndex(str, regexp.lastIndex, unicode); - -        @arrayPush(resultList, resultString); -    } -} - -@overriddenName="[Symbol.match]" -function match(strArg) -{ -    "use strict"; - -    if (!@isObject(this)) -        @throwTypeError("RegExp.prototype.@@match requires that |this| be an Object"); - -    var str = @toString(strArg); - -    return @matchSlow(this, str); -} - -@overriddenName="[Symbol.matchAll]" -function matchAll(strArg) -{ -    "use strict"; - -    var regExp = this; -    if (!@isObject(regExp)) { -        @throwTypeError("RegExp.prototype.@@matchAll requires |this| to be an Object"); -    } - -    var string = @toString(strArg); - -    var Matcher = @speciesConstructor(regExp, @Bun.OnigurumaRegExp); - -    var flags = @toString(regExp.flags); -    var matcher = new Matcher(regExp.source, flags); -    matcher.lastIndex = @toLength(regExp.lastIndex); - -    var global = @stringIncludesInternal.@call(flags, "g"); -    var fullUnicode = @stringIncludesInternal.@call(flags, "u"); - -    var iterator = globalThis.Symbol.iterator; - -    var RegExpStringIterator = class RegExpStringIterator { -        constructor(regExp, string, global, fullUnicode) -        { -     -            @putByIdDirectPrivate(this, "regExpStringIteratorRegExp", regExp); -            @putByIdDirectPrivate(this, "regExpStringIteratorString", string); -            @putByIdDirectPrivate(this, "regExpStringIteratorGlobal", global); -            @putByIdDirectPrivate(this, "regExpStringIteratorUnicode", fullUnicode); -            @putByIdDirectPrivate(this, "regExpStringIteratorDone", false); -        } - -        next() { -            "use strict"; -            if (!@isObject(this)) { -                @throwTypeError("%RegExpStringIteratorPrototype%.next requires |this| to be an Object"); -            } -         -            var done = @getByIdDirectPrivate(this, "regExpStringIteratorDone"); -            if (done === @undefined) { -                @throwTypeError("%RegExpStringIteratorPrototype%.next requires |this| to be an RegExp String Iterator instance"); -            } -         -            if (done) { -                return { value: @undefined, done: true }; -            } -         -            var regExp = @getByIdDirectPrivate(this, "regExpStringIteratorRegExp"); -            var string = @getByIdDirectPrivate(this, "regExpStringIteratorString"); -            var global = @getByIdDirectPrivate(this, "regExpStringIteratorGlobal"); -            var fullUnicode = @getByIdDirectPrivate(this, "regExpStringIteratorUnicode"); -            var match = regExp.exec(string); -            if (match === null) { -                @putByIdDirectPrivate(this, "regExpStringIteratorDone", true); -                return { value: @undefined, done: true }; -            } -         -            if (global) { -                var matchStr = @toString(match[0]); -                if (matchStr === "") { -                    var thisIndex = @toLength(regExp.lastIndex); -                    regExp.lastIndex = @advanceStringIndex(string, thisIndex, fullUnicode); -                } -            } else -                @putByIdDirectPrivate(this, "regExpStringIteratorDone", true); -         -            return { value: match, done: false }; -        } - -        [iterator]() { -            return this; -        } - -    }; - -    return new RegExpStringIterator(matcher, string, global, fullUnicode); -} - -@linkTimeConstant -function getSubstitution(matched, str, position, captures, namedCaptures, replacement) -{ -    "use strict"; - -    var matchLength = matched.length; -    var stringLength = str.length; -    var tailPos = position + matchLength; -    var m = captures.length; -    var replacementLength = replacement.length; -    var result = ""; -    var lastStart = 0; - -    for (var start = 0; start = @stringIndexOfInternal.@call(replacement, "$", lastStart), start !== -1; lastStart = start) { -        if (start - lastStart > 0) -            result = result + @stringSubstring.@call(replacement, lastStart, start); -        start++; -        if (start >= replacementLength) -            result = result + "$"; -        else { -            var ch = replacement[start]; -            switch (ch) -            { -            case "$": -                result = result + "$"; -                start++; -                break; -            case "&": -                result = result + matched; -                start++; -                break; -            case "`": -                if (position > 0) -                    result = result + @stringSubstring.@call(str, 0, position); -                start++; -                break; -            case "'": -                if (tailPos < stringLength) -                    result = result + @stringSubstring.@call(str, tailPos); -                start++; -                break; -            case "<": -                if (namedCaptures !== @undefined) { -                    var groupNameStartIndex = start + 1; -                    var groupNameEndIndex = @stringIndexOfInternal.@call(replacement, ">", groupNameStartIndex); -                    if (groupNameEndIndex !== -1) { -                        var groupName = @stringSubstring.@call(replacement, groupNameStartIndex, groupNameEndIndex); -                        var capture = namedCaptures[groupName]; -                        if (capture !== @undefined) -                            result = result + @toString(capture); - -                        start = groupNameEndIndex + 1; -                        break; -                    } -                } - -                result = result + "$<"; -                start++; -                break; -            default: -                var chCode = ch.@charCodeAt(0); -                if (chCode >= 0x30 && chCode <= 0x39) { -                    var originalStart = start - 1; -                    start++; - -                    var n = chCode - 0x30; -                    if (n > m) { -                        result = result + @stringSubstring.@call(replacement, originalStart, start); -                        break; -                    } - -                    if (start < replacementLength) { -                        var nextChCode = replacement.@charCodeAt(start); -                        if (nextChCode >= 0x30 && nextChCode <= 0x39) { -                            var nn = 10 * n + nextChCode - 0x30; -                            if (nn <= m) { -                                n = nn; -                                start++; -                            } -                        } -                    } - -                    if (n == 0) { -                        result = result + @stringSubstring.@call(replacement, originalStart, start); -                        break; -                    } - -                    var capture = captures[n - 1]; -                    if (capture !== @undefined) -                        result = result + capture; -                } else -                    result = result + "$"; -                break; -            } -        } -    } - -    return result + @stringSubstring.@call(replacement, lastStart); -} - -@overriddenName="[Symbol.replace]" -function replace(strArg, replace) -{ -    "use strict"; - -    if (!@isObject(this)) -        @throwTypeError("RegExp.prototype.@@replace requires that |this| be an Object"); - -    var regexp = this; - -    var str = @toString(strArg); -    var stringLength = str.length; -    var functionalReplace = @isCallable(replace); - -    if (!functionalReplace) -        replace = @toString(replace); - -    var global = regexp.global; -    var unicode = false; - -    if (global) { -        unicode = regexp.unicode; -        regexp.lastIndex = 0; -    } - -    var resultList = []; -    var result; -    var done = false; -    while (!done) { -        result = regexp.exec(str); - -        if (result === null) -            done = true; -        else { -            @arrayPush(resultList, result); -            if (!global) -                done = true; -            else { -                var matchStr = @toString(result[0]); - -                if (!matchStr.length) { -                    var thisIndex = @toLength(regexp.lastIndex); -                    regexp.lastIndex = @advanceStringIndex(str, thisIndex, unicode); -                } -            } -        } -    } - -    var accumulatedResult = ""; -    var nextSourcePosition = 0; - -    for (var i = 0, resultListLength = resultList.length; i < resultListLength; ++i) { -        var result = resultList[i]; -        var nCaptures = result.length - 1; -        if (nCaptures < 0) -            nCaptures = 0; -        var matched = @toString(result[0]); -        var matchLength = matched.length; -        var position = @toIntegerOrInfinity(result.index); -        position = (position > stringLength) ? stringLength : position; -        position = (position < 0) ? 0 : position; - -        var captures = []; -        for (var n = 1; n <= nCaptures; n++) { -            var capN = result[n]; -            if (capN !== @undefined) -                capN = @toString(capN); -            @arrayPush(captures, capN); -        } - -        var replacement; -        var namedCaptures = result.groups; - -        if (functionalReplace) { -            var replacerArgs = [ matched ]; -            for (var j = 0; j < captures.length; j++) -                @arrayPush(replacerArgs, captures[j]); - -            @arrayPush(replacerArgs, position); -            @arrayPush(replacerArgs, str); - -            if (namedCaptures !== @undefined) -                @arrayPush(replacerArgs, namedCaptures); - -            var replValue = replace.@apply(@undefined, replacerArgs); -            replacement = @toString(replValue); -        } else { -            if (namedCaptures !== @undefined) -                namedCaptures = @toObject(namedCaptures, "RegExp.prototype[Symbol.replace] requires 'groups' property of a match not be null"); - -            replacement = @getSubstitution(matched, str, position, captures, namedCaptures, replace); -        } - -        if (position >= nextSourcePosition) { -            accumulatedResult = accumulatedResult + @stringSubstring.@call(str, nextSourcePosition, position) + replacement; -            nextSourcePosition = position + matchLength; -        } -    } - -    if (nextSourcePosition >= stringLength) -        return  accumulatedResult; - -    return accumulatedResult + @stringSubstring.@call(str, nextSourcePosition); -} - -// 21.2.5.9 RegExp.prototype[@@search] (string) -@overriddenName="[Symbol.search]" -function search(strArg) -{ -    "use strict"; - -    var regexp = this; - -    // 1. Let rx be the this value. -    // 2. If Type(rx) is not Object, throw a TypeError exception. -    if (!@isObject(this)) -        @throwTypeError("RegExp.prototype.@@search requires that |this| be an Object"); - -    // 3. Let S be ? ToString(string). -    var str = @toString(strArg) - -    // 4. Let previousLastIndex be ? Get(rx, "lastIndex"). -    var previousLastIndex = regexp.lastIndex; - -    // 5. If SameValue(previousLastIndex, 0) is false, then -    // 5.a. Perform ? Set(rx, "lastIndex", 0, true). -    if (!@sameValue(previousLastIndex, 0)) -        regexp.lastIndex = 0; - -    // 6. Let result be ? RegExpExec(rx, S). -    var result = regexp.exec(str); - -    // 7. Let currentLastIndex be ? Get(rx, "lastIndex"). -    // 8. If SameValue(currentLastIndex, previousLastIndex) is false, then -    // 8.a. Perform ? Set(rx, "lastIndex", previousLastIndex, true). -    if (!@sameValue(regexp.lastIndex, previousLastIndex)) -        regexp.lastIndex = previousLastIndex; - -    // 9. If result is null, return -1. -    if (result === null) -        return -1; - -    // 10. Return ? Get(result, "index"). -    return result.index; -} - -// ES 21.2.5.11 RegExp.prototype[@@split](string, limit) -@overriddenName="[Symbol.split]" -function split(string, limit) -{ -    "use strict"; - -    // 1. Let rx be the this value. -    // 2. If Type(rx) is not Object, throw a TypeError exception. -    if (!@isObject(this)) -        @throwTypeError("RegExp.prototype.@@split requires that |this| be an Object"); -    var regexp = this; - -    // 3. Let S be ? ToString(string). -    var str = @toString(string); - -    // 4. Let C be ? SpeciesConstructor(rx, %RegExp%). -    var speciesConstructor = @speciesConstructor(regexp, @RegExp); - -    // 5. Let flags be ? ToString(? Get(rx, "flags")). -    var flags = @toString(regexp.flags); - -    // 6. If flags contains "u", var unicodeMatching be true. -    // 7. Else, let unicodeMatching be false. -    var unicodeMatching = @stringIncludesInternal.@call(flags, "u"); -    // 8. If flags contains "y", var newFlags be flags. -    // 9. Else, let newFlags be the string that is the concatenation of flags and "y". -    var newFlags = @stringIncludesInternal.@call(flags, "y") ? flags : flags + "y"; - -    // 10. Let splitter be ? Construct(C, « rx, newFlags »). -    var splitter = new speciesConstructor(regexp.source, newFlags); - -    // We need to check again for RegExp subclasses that will fail the speciesConstructor test -    // but can still use the fast path after we invoke the constructor above. - -    // 11. Let A be ArrayCreate(0). -    // 12. Let lengthA be 0. -    var result = []; - -    // 13. If limit is undefined, let lim be 2^32-1; else var lim be ? ToUint32(limit). -    limit = (limit === @undefined) ? 0xffffffff : limit >>> 0; - -    // 16. If lim = 0, return A. -    if (!limit) -        return result; - -    // 14. [Defered from above] Let size be the number of elements in S. -    var size = str.length; - -    // 17. If size = 0, then -    if (!size) { -        // a. Let z be ? RegExpExec(splitter, S). -        var z = splitter.exec(str); -        // b. If z is not null, return A. -        if (z !== null) -            return result; -        // c. Perform ! CreateDataProperty(A, "0", S). -        @putByValDirect(result, 0, str); -        // d. Return A. -        return result; -    } - -    // 15. [Defered from above] Let p be 0. -    var position = 0; -    // 18. Let q be p. -    var matchPosition = 0; - -    // 19. Repeat, while q < size -    while (matchPosition < size) { -        // a. Perform ? Set(splitter, "lastIndex", q, true). -        splitter.lastIndex = matchPosition; -        // b. Let z be ? RegExpExec(splitter, S). -        var matches = splitter.exec(str); -        // c. If z is null, let q be AdvanceStringIndex(S, q, unicodeMatching). -        if (matches === null) -            matchPosition = @advanceStringIndex(str, matchPosition, unicodeMatching); -        // d. Else z is not null, -        else { -            // i. Let e be ? ToLength(? Get(splitter, "lastIndex")). -            var endPosition = @toLength(splitter.lastIndex); -            // ii. Let e be min(e, size). -            endPosition = (endPosition <= size) ? endPosition : size; -            // iii. If e = p, let q be AdvanceStringIndex(S, q, unicodeMatching). -            if (endPosition === position) -                matchPosition = @advanceStringIndex(str, matchPosition, unicodeMatching); -            // iv. Else e != p, -            else { -                // 1. Let T be a String value equal to the substring of S consisting of the elements at indices p (inclusive) through q (exclusive). -                var subStr = @stringSubstring.@call(str, position, matchPosition); -                // 2. Perform ! CreateDataProperty(A, ! ToString(lengthA), T). -                // 3. Let lengthA be lengthA + 1. -                @arrayPush(result, subStr); -                // 4. If lengthA = lim, return A. -                if (result.length == limit) -                    return result; - -                // 5. Let p be e. -                position = endPosition; -                // 6. Let numberOfCaptures be ? ToLength(? Get(z, "length")). -                // 7. Let numberOfCaptures be max(numberOfCaptures-1, 0). -                var numberOfCaptures = matches.length > 1 ? matches.length - 1 : 0; - -                // 8. Let i be 1. -                var i = 1; -                // 9. Repeat, while i <= numberOfCaptures, -                while (i <= numberOfCaptures) { -                    // a. Let nextCapture be ? Get(z, ! ToString(i)). -                    var nextCapture = matches[i]; -                    // b. Perform ! CreateDataProperty(A, ! ToString(lengthA), nextCapture). -                    // d. Let lengthA be lengthA + 1. -                    @arrayPush(result, nextCapture); -                    // e. If lengthA = lim, return A. -                    if (result.length == limit) -                        return result; -                    // c. Let i be i + 1. -                    i++; -                } -                // 10. Let q be p. -                matchPosition = position; -            } -        } -    } -    // 20. Let T be a String value equal to the substring of S consisting of the elements at indices p (inclusive) through size (exclusive). -    var remainingStr = @stringSubstring.@call(str, position, size); -    // 21. Perform ! CreateDataProperty(A, ! ToString(lengthA), T). -    @arrayPush(result, remainingStr); -    // 22. Return A. -    return result; -} - -// ES 21.2.5.13 RegExp.prototype.test(string) -function test(strArg) -{ -    "use strict"; - -    var regexp = this; - -    if (regexp.test == @Bun.OnigurumaRegExp.prototype.test) { -        return regexp.test(strArg); -    } - -    // 1. Let R be the this value. -    // 2. If Type(R) is not Object, throw a TypeError exception. -    if (!@isObject(regexp)) -        @throwTypeError("RegExp.prototype.test requires that |this| be an Object"); - -    // 3. Let string be ? ToString(S). -    var str = @toString(strArg); - -    // 4. Let match be ? RegExpExec(R, string). -    var match = regexp.exec(str); - -    // 5. If match is not null, return true; else return false. -    if (match !== null) -        return true; -    return false; -} diff --git a/src/deps/oniguruma b/src/deps/oniguruma deleted file mode 160000 -Subproject 0be69456f20278740a0db8418ba45c1a08e15a2 diff --git a/src/js_ast.zig b/src/js_ast.zig index ffdce6783..75539f235 100644 --- a/src/js_ast.zig +++ b/src/js_ast.zig @@ -1846,33 +1846,6 @@ pub const E = struct {          pub var empty = RegExp{ .value = "" }; -        pub fn usesLookBehindAssertion(this: *const RegExp) bool { -            var pat = this.pattern(); -            while (pat.len > 0) { -                const start = strings.indexOfChar(pat, '?') orelse return false; -                if (start == 0) { -                    pat = pat[1..]; -                    continue; -                } -                const l_paren = pat[start - 1]; -                if (start > 1 and pat[start - 2] == '\\') { -                    pat = pat[start..]; -                    continue; -                } -                if (l_paren != '(' or pat.len < start + 1) { -                    pat = pat[start..]; -                    continue; -                } -                const op = pat[start + 1]; -                if (op == '<') { -                    return true; -                } -                pat = pat[start + 1 ..]; -            } - -            return false; -        } -          pub fn pattern(this: RegExp) string {              // rewind until we reach the /foo/gim diff --git a/src/js_printer.zig b/src/js_printer.zig index 062221ac6..1a817cc37 100644 --- a/src/js_printer.zig +++ b/src/js_printer.zig @@ -2581,32 +2581,7 @@ pub fn NewPrinter(                  p.print(" ");              } -            if (comptime is_bun_platform) { -                if (e.value.len > 2 and e.usesLookBehindAssertion()) { -                    p.print("(new globalThis.Bun.OnigurumaRegExp("); -                    const pattern = e.pattern(); -                    const flags = e.flags(); -                    std.debug.assert(pattern.len > 0); -                    var buf = bun.default_allocator.alloc(u16, strings.elementLengthUTF8IntoUTF16([]const u8, pattern)) catch unreachable; -                    defer bun.default_allocator.free(buf); -                    const buf_len = std.unicode.utf8ToUtf16Le(buf, pattern) catch unreachable; -                    std.debug.assert(buf_len == buf.len); -                    const q = p.bestQuoteCharForString(buf, true); -                    p.print(q); -                    p.printQuotedUTF16(buf, q); -                    p.print(q); -                    if (flags.len > 0) { -                        p.print(","); -                        p.printSpace(); -                        p.printQuotedUTF8(flags, true); -                    } -                    p.print("))"); -                } else { -                    p.print(e.value); -                } -            } else { -                p.print(e.value); -            } +            p.print(e.value);              // Need a space before the next identifier to avoid it turning into flags              p.prev_reg_exp_end = p.writer.written; diff --git a/test/bun.js/body-stream.test.ts b/test/bun.js/body-stream.test.ts index bc6dc10f8..0a44246b0 100644 --- a/test/bun.js/body-stream.test.ts +++ b/test/bun.js/body-stream.test.ts @@ -5,7 +5,7 @@ import { readFileSync } from "fs";  // afterEach(() => Bun.gc(true)); -var port = 4020; +var port = 4021;  {    const BodyMixin = [ @@ -175,12 +175,13 @@ var port = 4020;    }  } +var existingServer;  async function runInServer(    opts: ServeOptions,    cb: (url: string) => void | Promise<void>,  ) {    var server; -  server = Bun.serve({ +  const handler = {      ...opts,      port: port++,      fetch(req) { @@ -197,17 +198,20 @@ async function runInServer(        console.log(err.stack);        throw err;      }, -  }); +  }; + +  if (!existingServer) { +    existingServer = server = Bun.serve(handler); +  } else { +    server = existingServer; +    server.reload(handler); +  } +    try {      await cb(`http://${server.hostname}:${server.port}`);    } catch (e) {      throw e;    } finally { -    server && server.stop(); -    server = undefined; -    if (port > 4200) { -      port = 4120; -    }    }  } diff --git a/test/bun.js/oniguruma-regexp.test.ts b/test/bun.js/oniguruma-regexp.test.ts deleted file mode 100644 index f95609270..000000000 --- a/test/bun.js/oniguruma-regexp.test.ts +++ /dev/null @@ -1,860 +0,0 @@ -// @ts-ignore -import { OnigurumaRegExp } from "bun"; -import { expect, it, test } from "bun:test"; -import { gc as gcTrace, withoutAggressiveGC } from "./gc"; - -it("character property scripts", () => { -  // oniguruma does not support \p{Script=<script value>} -  // they are converted to \p{<script value>} internally -  const sentence = "A ticket to 大阪 costs ¥2000 👌."; - -  const g0 = OnigurumaRegExp("\\p{Emoji_Presentation}", "gu"); -  const s0 = sentence.match(g0); -  const g1 = RegExp("\\p{Emoji_Presentation}", "gu"); -  const s1 = sentence.match(g1); -  for (const [i, s] of s0.entries()) { -    expect(s === s1[i]).toBe(true); -  } - -  const g2 = OnigurumaRegExp("\\P{Script_Extensions=Latin}+", "gu"); -  const s2 = sentence.match(g2); -  const g3 = RegExp("\\P{Script_Extensions=Latin}+", "gu"); -  const s3 = sentence.match(g3); -  for (const [i, s] of s2.entries()) { -    expect(s === s3[i]).toBe(true); -  } - -  const g4 = OnigurumaRegExp("\\p{Sc}|\\p{P}", "gu"); -  const s4 = sentence.match(g4); -  const g5 = RegExp("\\p{Sc}|\\p{P}", "gu"); -  const s5 = sentence.match(g5); -  for (const [i, s] of s4.entries()) { -    expect(s === s5[i]).toBe(true); -  } - -  expect("٢".match(new RegExp("\\p{Script=Thaana}", "u"))).toBe(null); -  expect("٢".match(new RegExp("\\p{Script_Extensions=Thaana}", "u"))![0]).toBe( -    "٢", -  ); - -  expect("٢".match(new OnigurumaRegExp("\\p{Thaana}", "u"))).toBe(null); -  expect( -    "٢".match(new OnigurumaRegExp("\\p{Script_Extensions=Thaana}", "u")), -  ).toBe(null); - -  let r1 = new OnigurumaRegExp( -    "<\\/(?<fullName>(?<name>[-_\\p{Letter}\\p{Number}\\p{script=Deva}\\p{sc=Thai}]{1,32})(?: (?<subcommandOrGroup>[-_\\p{Letter}\\p{Number}\\p{sc=Deva}\\p{sc=Thai}]{1,32}))?(?: (?<subcommand>[-_\\p{Letter}\\p{Number}\\p{sc=Deva}\\p{sc=Thai}]{1,32}))?):(?<id>\\d{17,20})>", -    "", -  ); -  expect(r1 !== null).toBe(true); -}); - -it("repeated match and exec calls", () => { -  withoutAggressiveGC(() => { -    for (let i = 0; i < 20000; i++) { -      let r1 = new OnigurumaRegExp("//.+?/[^?]+", "sg"); -      let r2 = new RegExp("//.+?/[^?]+", "sg"); -      let s1 = "https://dylan-conway.com/profile"; -      expect(s1.match(r1)![0] === s1.match(r2)![0]).toBe(true); -      expect(r1.exec(s1)![0] === r2.exec(s1)![0]).toBe(true); -    } -  }); -}); - -it("repeated match and exec calls no global flag", () => { -  withoutAggressiveGC(() => { -    for (let i = 0; i < 20000; i++) { -      let r1 = new OnigurumaRegExp("//.+?/[^?]+", "s"); -      let r2 = new RegExp("//.+?/[^?]+", "s"); -      let s1 = "https://dylan-conway.com/profile"; -      expect(r1.exec(s1)![0] === r2.exec(s1)![0]).toBe(true); -      expect(s1.match(r1)![0] === s1.match(r2)![0]).toBe(true); -    } -  }); -}); - -const rb1 = new OnigurumaRegExp("//.+?/[^?]+", "s"); -const rb2 = new RegExp("//.+?/[^?]+", "s"); -it("repeated match calls with global regex without global flag", () => { -  withoutAggressiveGC(() => { -    for (let i = 0; i < 20000; i++) { -      let s1 = "https://dylan-conway.com/profile"; -      expect(rb1.exec(s1)![0] === rb2.exec(s1)![0]).toBe(true); -      expect(s1.match(rb1)![0] === s1.match(rb2)![0]).toBe(true); -    } -  }); -}); - -it("escaped characters in character classes", () => { -  expect( -    new RegExp("[a-z]").exec("a")![0] === -      new OnigurumaRegExp("[a-z]").exec("a")![0], -  ).toBe(true); - -  Bun.gc(true); - -  expect( -    new RegExp("[a-z]").exec("b")![0] === -      new OnigurumaRegExp("[a-z]").exec("b")![0], -  ).toBe(true); - -  Bun.gc(true); - -  expect(new RegExp("[a-zA-Z0-9_]+").exec("B9")![0]).toBe( -    new OnigurumaRegExp("[a-zA-Z0-9_]+").exec("B9")![0], -  ); -  Bun.gc(true); -  expect(new RegExp("[a-z]").exec("-")).toBe(null); -  Bun.gc(true); -  expect(new OnigurumaRegExp("[a-z]").exec("-")).toBe(null); -  Bun.gc(true); -  expect(new RegExp("[a\\-z]").exec("-")![0]).toBe("-"); -  Bun.gc(true); -  expect(new OnigurumaRegExp("[a\\-z]").exec("-")![0]).toBe("-"); -  Bun.gc(true); -  expect(new RegExp("[a\\-z]").exec("a")![0]).toBe("a"); -  Bun.gc(true); -  expect(new OnigurumaRegExp("[a\\-z]").exec("a")![0]).toBe("a"); -  Bun.gc(true); -  expect(new RegExp("[a\\-z]").exec("z")![0]).toBe("z"); -  Bun.gc(true); -  expect(new OnigurumaRegExp("[a\\-z]").exec("z")![0]).toBe("z"); -  Bun.gc(true); -  expect(new RegExp("[a\\-z]").exec("b")).toBe(null); -  Bun.gc(true); -  expect(new OnigurumaRegExp("[a\\-z]").exec("b")).toBe(null); -  Bun.gc(true); - -  expect(new RegExp("[^b-c]").exec("a")![0]).toBe( -    new OnigurumaRegExp("[^b-c]").exec("a")![0], -  ); -  Bun.gc(true); - -  expect(new RegExp("[\\^b-c]").exec("a")).toBe(null); -  expect(new OnigurumaRegExp("[\\^b-c]").exec("a")).toBe(null); -  Bun.gc(true); - -  expect(new RegExp("[\\^b-c]").exec("^c")![0]).toBe("^"); -  expect(new OnigurumaRegExp("[\\^b-c]").exec("^c")![0]).toBe("^"); -  Bun.gc(true); - -  expect(new RegExp("[a^b-c]").exec("a^")![0]).toBe("a"); -  expect(new OnigurumaRegExp("[a^b-c]").exec("a^")![0]).toBe("a"); -  Bun.gc(true); - -  expect(new RegExp("[\\\\]").exec("\\")![0]).toBe("\\"); -  expect(new OnigurumaRegExp("[\\\\]").exec("\\")![0]).toBe("\\"); -  Bun.gc(true); - -  let p = "//.+?[^?]+"; -  let s = "https://dylan-conway.com/profile"; -  const b1 = new RegExp(p, "gs"); -  const b2 = new OnigurumaRegExp(p, "gs"); -  Bun.gc(true); -  expect(s.match(b1)![0] === s.match(b2)![0]).toBe(true); -  Bun.gc(true); - -  const b3 = new RegExp("[\\^]"); -  const b4 = new OnigurumaRegExp("[\\^]"); -  Bun.gc(true); -  expect( -    "https://dylan-co^nway.com/profile".match(b3)![0] === -      "https://dylan-co^nway.com/profile".match(b4)![0], -  ).toBe(true); -  Bun.gc(true); - -  // prettier-ignore -  p = "\/\/.+?\/[^?]+"; -  s = "https://dylan-conway.com/profile"; -  Bun.gc(true); -  expect(s.match(new OnigurumaRegExp(p, "gs"))![0]).toBe( -    new RegExp(p, "gs").exec(s)![0], -  ); -  Bun.gc(true); - -  // middle no escape -  p = "[.i^e]+"; -  s = "https://dylan-co^nway.com/profile"; -  expect(new OnigurumaRegExp(p).exec(s)![0]).toBe(new RegExp(p).exec(s)![0]); - -  // middle with escape -  p = "[.i\\^e]+"; -  s = "https://dylan-co^nway.com/profile"; -  expect(new OnigurumaRegExp(p).exec(s)![0]).toBe(new RegExp(p).exec(s)![0]); - -  // end with escape -  p = "[.ie\\^]+"; -  s = "https://dylan-co^nway.com/profile"; -  expect(new OnigurumaRegExp(p).exec(s)![0]).toBe(new RegExp(p).exec(s)![0]); - -  // end no escape -  p = "[.ie^]+"; -  s = "https://dylan-co^nway.com/profile"; -  expect(new OnigurumaRegExp(p).exec(s)![0]).toBe(new RegExp(p).exec(s)![0]); - -  // start no escape -  p = "[^.ie]+"; -  s = "https://dylan-co^nway.com/profile"; -  expect(new OnigurumaRegExp(p).exec(s)![0]).toBe(new RegExp(p).exec(s)![0]); - -  // start with escape -  p = "[\\^.ie]+"; -  s = "https://dylan-co^nway.com/profile"; -  expect(new OnigurumaRegExp(p).exec(s)![0]).toBe(new RegExp(p).exec(s)![0]); - -  // middle with escape -  p = "[.i\\-e]+"; -  s = "https://dylan-conway.com/profile"; -  expect(new OnigurumaRegExp(p).exec(s)![0]).toBe(new RegExp(p).exec(s)![0]); - -  // end with escape -  p = "[.ie\\-]+"; -  s = "https://dylan-conway.com/profile"; -  expect(new OnigurumaRegExp(p).exec(s)![0]).toBe(new RegExp(p).exec(s)![0]); - -  // end no escape -  p = "[.ie-]+"; -  s = "https://dylan-conway.com/profile"; -  expect(new OnigurumaRegExp(p).exec(s)![0]).toBe(new RegExp(p).exec(s)![0]); - -  // start no escape -  p = "[-.ie]+"; -  s = "https://dylan-conway.com/profile"; -  expect(new OnigurumaRegExp(p).exec(s)![0]).toBe(new RegExp(p).exec(s)![0]); - -  // start with escape -  p = "[\\-.ie]+"; -  s = "https://dylan-conway.com/profile"; -  expect(new OnigurumaRegExp(p).exec(s)![0]).toBe(new RegExp(p).exec(s)![0]); - -  let r1 = new RegExp("^([[(]-?[\\d]+)?,?(-?[\\d]+[\\])])?$").exec("(1,1]")!; -  Bun.gc(true); -  let r2 = new OnigurumaRegExp("^([[(]-?[\\d]+)?,?(-?[\\d]+[\\])])?$").exec( -    "(1,1]", -  ); -  Bun.gc(true); -  expect(r1[0]).toBe(r2[0]); -  Bun.gc(true); - -  let r3 = new RegExp("[\\d],[\\d]").exec("1,2")!; -  let r4 = new OnigurumaRegExp("[\\d],[\\d]").exec("1,2"); -  expect(r3[0]).toBe(r4[0]); - -  let r5 = new RegExp("^[(],[)]?$").exec("(,")!; -  let r6 = new OnigurumaRegExp("^[(],[)]?$").exec("(,"); -  expect(r5[0]).toBe(r6[0]); - -  let r9 = new RegExp("[([],[)\\]]").exec("[,]")!; -  let r10 = new OnigurumaRegExp("[([],[)\\]]").exec("[,]"); -  expect(r9[0]).toBe(r10[0]); - -  let r13 = new RegExp("\\[").exec("[")!; -  let r14 = new OnigurumaRegExp("\\[").exec("["); -  expect(r13[0]).toBe(r14[0]); - -  let r15 = new RegExp("\\]").exec("]")!; -  let r16 = new OnigurumaRegExp("\\]").exec("]"); -  expect(r15[0]).toBe(r16[0]); - -  let r17 = new RegExp("]").exec("]")!; -  let r18 = new OnigurumaRegExp("]").exec("]"); -  expect(r17[0]).toBe(r18[0]); - -  let r21 = new RegExp("[\\]]").exec("]")!; -  let r22 = new OnigurumaRegExp("[\\]]").exec("]"); -  expect(r21[0]).toBe(r22[0]); - -  let r23 = new RegExp("[\\[]").exec("[")!; -  let r24 = new OnigurumaRegExp("[\\[]").exec("["); -  expect(r23[0]).toBe(r24[0]); - -  let r25 = new RegExp("[[][[]").exec("[[")!; -  let r26 = new OnigurumaRegExp("[[][[]").exec("[["); -  expect(r25[0]).toBe(r26[0]); - -  let r27 = new RegExp("[[\\]][[\\]]").exec("[]")!; -  let r28 = new OnigurumaRegExp("[[\\]][[\\]]").exec("[]"); -  expect(r27[0]).toBe(r28[0]); - -  let r29 = new RegExp("[[\\]][[\\]]").exec("][")!; -  let r30 = new OnigurumaRegExp("[[\\]][[\\]]").exec("]["); -  expect(r29[0]).toBe(r30[0]); - -  let r31 = new RegExp("[[\\]][[\\]]").exec("]]")!; -  let r32 = new OnigurumaRegExp("[[\\]][[\\]]").exec("]]"); -  expect(r31[0]).toBe(r32[0]); - -  let r33 = new RegExp("[\\]][\\]]").exec("]]")!; -  let r34 = new OnigurumaRegExp("[\\]][\\]]").exec("]]"); -  expect(r33[0]).toBe(r34[0]); - -  let r35 = new RegExp("[a-z&&[^aeiou]").exec("a")!; -  let r36 = new OnigurumaRegExp("[a-z&&[^aeiou]").exec("a"); -  expect(r35[0]).toBe(r36[0]); - -  let r37 = new RegExp("[a-z&&[^aeiou]]").exec("a]")!; -  let r38 = new OnigurumaRegExp("[a-z&&[^aeiou]]").exec("a]"); -  expect(r37[0]).toBe(r38[0]); -}); - -it("OnigurumaRegExp.prototype.exec()", () => { -  let a1 = new OnigurumaRegExp("\x3e", "gd"); -  let a1_1 = a1.exec("table fo\x3eotball, fo\x3eosball"); -  a1_1 = a1.exec("table fo\x3eotball, fo\x3eosball"); - -  let a2 = new RegExp("\x3e", "gd"); -  let a2_1 = a2.exec("table fo\x3eotball, fo\x3eosball"); -  a2_1 = a2.exec("table fo\x3eotball, fo\x3eosball")!; - -  expect(a1_1[0]).toBe(a2_1[0]); -  expect(a1_1[1]).toBe(a2_1[1]); -  expect(a1_1.index).toBe(a2_1.index); -  expect(a1_1.input).toBe(a2_1.input); -  expect(a1.lastIndex).toBe(a2.lastIndex); -  expect(a1_1.groups).toBe(a2_1.groups); -  // @ts-ignore remove when `indices` is added to lib/dom -  expect(a1_1.indices[0][0]).toBe(a2_1.indices[0][0]); -  // @ts-ignore -  expect(a1_1.indices[0][1]).toBe(a2_1.indices[0][1]); -}); - -test("OnigurumaRegExp.prototype.exec() 2", () => { -  let a1 = new OnigurumaRegExp("\x3e\\x5e", "gd"); -  let a1_1 = a1.exec("table fo\x3e\x5eotball, fo\x3e\x5eosball"); -  a1_1 = a1.exec("table fo\x3e\x5eotball, fo\x3e\x5eosball"); - -  let a2 = new RegExp("\x3e\\x5e", "gd"); -  let a2_1 = a2.exec("table fo\x3e\x5eotball, fo\x3e\x5eosball")!; -  a2_1 = a2.exec("table fo\x3e\x5eotball, fo\x3e\x5eosball")!; - -  expect(a1_1[0]).toBe(a2_1[0]); -  expect(a1_1[1]).toBe(a2_1[1]); -  expect(a1_1.index).toBe(a2_1.index); -  expect(a1_1.input).toBe(a2_1.input); -  expect(a1.lastIndex).toBe(a2.lastIndex); -  expect(a1_1.groups).toBe(a2_1.groups); -  // @ts-ignore -  expect(a1_1.indices[0][0]).toBe(a2_1.indices[0][0]); -  // @ts-ignore -  expect(a1_1.indices[0][1]).toBe(a2_1.indices[0][1]); -}); - -test("OnigurumaRegExp.prototype.exec() 3", () => { -  let a22 = new OnigurumaRegExp("\\x9\\x5e", "gd"); -  let a22_1 = a22.exec("table fox9^otball, fox9^osball"); -  expect(a22_1[0]).toBe("x9^"); - -  let a1 = new OnigurumaRegExp("x3\\x5e", "gd"); -  let a1_1 = a1.exec("table fo\\x3\x5eotball, fo\\x3\x5eosball"); - -  let a2 = new RegExp("\\x3\\x5e", "gd"); -  let a2_1 = a2.exec("table fo\\x3\x5eotball, fo\\x3\x5eosball")!; - -  expect(a1_1[0]).toBe(a2_1[0]); -  expect(a1_1[1]).toBe(a2_1[1]); -  expect(a1_1.index).toBe(a2_1.index); -  expect(a1_1.input).toBe(a2_1.input); -  expect(a1.lastIndex).toBe(a2.lastIndex); -  expect(a1_1.groups).toBe(a2_1.groups); -  // @ts-ignore -  expect(a1_1.indices[0][0]).toBe(a2_1.indices[0][0]); -  // @ts-ignore -  expect(a1_1.indices[0][1]).toBe(a2_1.indices[0][1]); -}); - -test("OnigurumaRegExp.prototype.exec() 4", () => { -  let a2 = new RegExp("\\x3\\x5e", "gd"); -  let a2_1 = a2.exec("table fox3^otball, fox3^osball"); -  a2_1 = a2.exec("table fox3^otball, fox3^osball"); - -  for (const RegExpConstructor of [OnigurumaRegExp, RegExp]) { -    let a2 = new RegExpConstructor("\\x3\\x5e", "gd"); -    let a2_1 = a2.exec("table fox3^otball, fox3^osball"); -    expect(a2_1[0]).toBe("x3^"); - -    expect(new RegExpConstructor("\\x3").source).toBe("\\x3"); -    expect(new RegExpConstructor("\\x").source).toBe("\\x"); -    expect(new RegExpConstructor("\\a").source).toBe("\\a"); -    expect(new RegExpConstructor("j\\x3\\x2").source).toBe("j\\x3\\x2"); -    expect(new RegExpConstructor("\\x3\\x5\\j").source).toBe("\\x3\\x5\\j"); -    expect(new RegExpConstructor("\\x3\\x7\\xa").source).toBe("\\x3\\x7\\xa"); -    expect(new RegExpConstructor("\\j323\\x7\\xa").source).toBe( -      "\\j323\\x7\\xa", -    ); -    expect(new RegExpConstructor("\\x56").test("V")).toBe(true); -  } -}); - -test("OnigurumaRegExp.prototype.test()", () => { -  expect(new RegExp("\\\\(?![*+?^${}(|)[\\]])", "g").test("\\")).toBe(true); -  expect(new OnigurumaRegExp("\\\\(?![*+?^${}(|)[\\]])", "g").test("\\")).toBe( -    true, -  ); - -  expect(new RegExp("\\x56").test("V")).toBe(true); -  expect(new OnigurumaRegExp("\\x56").test("V")).toBe(true); - -  expect( -    new RegExp("//").compile("\\\\(?![*+?^${}(|)[\\]])", "g").test("\\"), -  ).toBe(true); -  let r = new OnigurumaRegExp("//"); -  expect(r.compile("\\\\(?![*+?^${}(|)[\\]])", "g").test("\\")).toBe(true); -  expect( -    new OnigurumaRegExp("").compile("\\\\(?![*+?^${}(|)[\\]])", "g").test("\\"), -  ).toBe(true); -}); - -test("OnigurumaRegExp flag order", () => { -  expect(new OnigurumaRegExp("a", "gd").toString()).toBe("/a/dg"); -  expect(new OnigurumaRegExp("a", "ydmg").toString()).toBe("/a/dgmy"); -}); - -test("OnigurumaRegExp.prototype.source", () => { -  let a1 = new OnigurumaRegExp("(foo)", "gd"); -  let a2 = new RegExp("(foo)", "dg"); -  expect(a1.source).toBe(a2.source); - -  expect(new OnigurumaRegExp("/").source).toBe("\\/"); -  expect(new RegExp("/").source).toBe("\\/"); - -  // @ts-ignore TS doesn't allow empty constructor -  expect(new OnigurumaRegExp().source).toBe(new RegExp().source); -  expect(new OnigurumaRegExp("").source).toBe(new RegExp("").source); -  expect(new OnigurumaRegExp("a").source).toBe(new RegExp("a").source); -  expect(new OnigurumaRegExp("a", "g").source).toBe( -    new RegExp("a", "g").source, -  ); -  expect(new OnigurumaRegExp("/").source).toBe(new RegExp("/").source); -  expect(new OnigurumaRegExp("\n").source).toBe(new RegExp("\n").source); -  expect(new OnigurumaRegExp("\r").source).toBe(new RegExp("\r").source); -}); - -test("OnigurumaRegExp.prototype.toString()", () => { -  // @ts-ignore -  expect(new OnigurumaRegExp().toString()).toBe(new RegExp().toString()); -  expect(new OnigurumaRegExp("").toString()).toBe(new RegExp("").toString()); -  expect(new OnigurumaRegExp("a").toString()).toBe(new RegExp("a").toString()); -  expect(new OnigurumaRegExp("a", "g").toString()).toBe( -    new RegExp("a", "g").toString(), -  ); -  expect(new OnigurumaRegExp("/").toString()).toBe(new RegExp("/").toString()); -  expect(new OnigurumaRegExp("\n").toString()).toBe( -    new RegExp("\n").toString(), -  ); -  expect(new OnigurumaRegExp("\r").toString()).toBe( -    new RegExp("\r").toString(), -  ); -  expect( -    new OnigurumaRegExp( -      "jf/.a.,voejpjoajglz;/qwjopeiv\\//\\/jpoqaj/Zdkj", -    ).toString(), -  ).toBe( -    new RegExp("jf/.a.,voejpjoajglz;/qwjopeiv\\//\\/jpoqaj/Zdkj").toString(), -  ); -}); - -test("OnigurumaRegExp flags", () => { -  // multiline option -  for (const RegExpConstructor of [OnigurumaRegExp, RegExp]) { -    expect(new RegExpConstructor("boat").test("sailor\nboat")).toBe(true); -    expect(new RegExpConstructor("^boat").test("sailor\nboat")).toBe(false); -    expect(new RegExpConstructor("^boat", "m").test("sailor\nboat")).toBe(true); -  } - -  // sticky option -  for (const RegExpConstructor of [RegExp]) { -    let str2 = "sailor"; -    let h3 = new RegExpConstructor("or"); -    let h4 = new RegExpConstructor("or", "y"); -    expect(h3.test(str2)).toBe(true); -    expect(h4.test(str2)).toBe(false); -    let g1 = new RegExpConstructor("sail"); -    let g2 = new RegExpConstructor("sail", "y"); -    expect(g1.test(str2)).toBe(true); -    expect(g2.test(str2)).toBe(true); -  } - -  expect(/a/s.toString()).toBe("/a/s"); -  expect(/a/g.toString()).toBe("/a/g"); -  expect(/a/y.toString()).toBe("/a/y"); -  expect(/a/m.toString()).toBe("/a/m"); -  expect(/a/gs.toString()).toBe("/a/gs"); -  expect(/a/sy.toString()).toBe("/a/sy"); -  expect(/a/gm.toString()).toBe("/a/gm"); -  expect(/a/gsy.toString()).toBe("/a/gsy"); -  expect(/a/gms.toString()).toBe("/a/gms"); -  expect(/a/gmy.toString()).toBe("/a/gmy"); -  // expect(/a/d.toString()).toBe("/a/d"); -  // expect(/a/dgimsuy.toString()).toBe("/a/dgimsuy"); - -  // case insensitive option -  for (const RegExpConstructor of [OnigurumaRegExp, RegExp]) { -    expect(new RegExpConstructor("Is ThIs SqL?").test("IS THIS SQL?")).toBe( -      false, -    ); -    expect( -      new RegExpConstructor("Is ThIs SqL?", "i").test("IS THIS SQL?"), -    ).toBe(true); -  } - -  // dotall option -  for (const RegExpConstructor of [OnigurumaRegExp, RegExp]) { -    expect(new RegExpConstructor("a.b").test("a\nb")).toBe(false); -    expect(new RegExpConstructor("a.b", "s").test("a\nb")).toBe(true); -  } - -  // indices option -  for (const RegExpConstructor of [OnigurumaRegExp, RegExp]) { -    expect(new RegExpConstructor("a", "g").exec("a").indices).toBe(undefined); -    expect(new RegExpConstructor("a", "gd").exec("a").index).toBe(0); -    expect(new RegExpConstructor("a", "dg").exec("a").index).toBe(0); -  } -}); - -test("OnigurumaRegExp.lastIndex", () => { -  for (const RegExpConstructor of [RegExp, OnigurumaRegExp]) { -    let a = new RegExpConstructor("foo", "g"); -    expect(a.lastIndex).toBe(0); -    a.lastIndex = 1; -    expect(a.lastIndex).toBe(1); -    a.lastIndex = 0; -    expect(a.lastIndex).toBe(0); -    a.lastIndex = 1; -    expect(a.lastIndex).toBe(1); -    a.test("kfjekf"); -    expect(a.lastIndex).toBe(0); -    a.test("o"); -    expect(a.lastIndex).toBe(0); -  } - -  let p1 = new OnigurumaRegExp("a"); -  expect(p1.lastIndex).toBe(0); -  p1.lastIndex = 2; -  expect(p1.lastIndex).toBe(2); -  let p2 = new OnigurumaRegExp("b"); -  expect(p2.lastIndex).toBe(0); -  p2.lastIndex = 2348; -  expect(p2.lastIndex).toBe(2348); -  expect(p1.lastIndex).toBe(2); - -  for (const RegExpConstructor of [RegExp, OnigurumaRegExp]) { -    let a = new RegExpConstructor("foo", "g"); -    a.lastIndex = 33; -    expect(a.lastIndex).toBe(33); -    a.compile("bar"); -    expect(a.lastIndex).toBe(0); -    a.lastIndex = 44; -    expect(a.lastIndex).toBe(44); -  } - -  for (const RegExpConstructor of [OnigurumaRegExp]) { -    let a = new RegExpConstructor("foo", "g"); -    expect(a.lastIndex).toBe(0); -    a.test("kfjekfoofjekf"); -    expect(a.lastIndex).toBe(8); -    a.test("kejfkjs"); -    expect(a.lastIndex).toBe(0); -    a.exec("kfjekfoofjekf"); -    expect(a.lastIndex).toBe(8); -    a.exec("kejfkjs"); -    expect(a.lastIndex).toBe(0); -  } -}); - -test("OnigurumaRegExp errors", () => { -  let r = new OnigurumaRegExp("a", "igsym"); -  let b = new OnigurumaRegExp("l", "m"); -  try { -    r.compile(b, "g"); -  } catch (e: any) { -    expect(e.message).toBe( -      "Cannot supply flags when constructing one RegExp from another.", -    ); -  } -  try { -    r.compile("ll", "a"); -  } catch (e: any) { -    expect(e.message).toBe("Invalid flags supplied to RegExp constructor."); -  } -  try { -    new OnigurumaRegExp("c", "a"); -  } catch (e: any) { -    expect(e.message).toBe("Invalid flags supplied to RegExp constructor."); -  } -  const invalidRegExpError = "Invalid regular expression: "; -  try { -    new OnigurumaRegExp("?", "g"); -  } catch (e: any) { -    expect(e.message.substring(0, invalidRegExpError.length)).toBe( -      invalidRegExpError, -    ); -  } -  try { -    new OnigurumaRegExp("?"); -  } catch (e: any) { -    expect(e.message.substring(0, invalidRegExpError.length)).toBe( -      invalidRegExpError, -    ); -  } -  try { -    r.compile("?", "g"); -  } catch (e: any) { -    expect(e.message.substring(0, invalidRegExpError.length)).toBe( -      invalidRegExpError, -    ); -  } -  try { -    r.compile("?"); -  } catch (e: any) { -    expect(e.message.substring(0, invalidRegExpError.length)).toBe( -      invalidRegExpError, -    ); -  } - -  try { -    new OnigurumaRegExp("\\"); -  } catch (e: any) { -    expect(e.message.substring(0, invalidRegExpError.length)).toBe( -      invalidRegExpError, -    ); -  } -}); - -test("OnigurumaRegExp random", () => { -  expect(new OnigurumaRegExp("love").test("I love JavaScript")).toBe(true); -  expect(new RegExp("love").test("I love JavaScript")).toBe(true); - -  expect(new OnigurumaRegExp("a").test("sailor")).toBe(true); -  expect(new OnigurumaRegExp("or").test("sailor")).toBe(true); -  expect(new RegExp("a").test("sailor")).toBe(true); -  expect(new RegExp("or").test("sailor")).toBe(true); - -  expect(new OnigurumaRegExp("a").test("a")).toBe(true); -  expect(new OnigurumaRegExp("a").test("b")).toBe(false); -  expect(new OnigurumaRegExp("a", "i").test("a")).toBe(true); -  expect(new OnigurumaRegExp("a", "i").test("A")).toBe(true); -  expect(new OnigurumaRegExp("a", "g").test("A")).toBe(false); -  expect(new OnigurumaRegExp("A", "i").test("a")).toBe(true); -  expect(new OnigurumaRegExp("A", "g").test("a")).toBe(false); -  expect(new OnigurumaRegExp("afasdfebadf", "i").test("b")).toBe(false); - -  let r = new OnigurumaRegExp("a", "g"); -  expect(r.source).toBe("a"); -  expect(r.flags).toBe("g"); -  expect(r.toString()).toBe("/a/g"); - -  r.compile("b", "i"); -  expect(r.source).toBe("b"); -  expect(r.flags).toBe("i"); -  expect(r.toString()).toBe("/b/i"); - -  let b = new OnigurumaRegExp("l", "m"); -  expect(r.compile(b) instanceof OnigurumaRegExp).toBe(true); -  expect(r.source).toBe("l"); -  expect(r.flags).toBe("m"); -  expect(r.toString()).toBe("/l/m"); - -  expect(new OnigurumaRegExp("a", "d").hasIndices).toBe(true); -  expect(new OnigurumaRegExp("a", "i").hasIndices).toBe(false); -  expect(new OnigurumaRegExp("a", "s").dotAll).toBe(true); -  expect(new OnigurumaRegExp("a", "i").dotAll).toBe(false); -  expect(new OnigurumaRegExp("a", "i").ignoreCase).toBe(true); -  expect(new OnigurumaRegExp("a", "s").ignoreCase).toBe(false); -  expect(new OnigurumaRegExp("a", "g").global).toBe(true); -  expect(new OnigurumaRegExp("a", "s").global).toBe(false); -  expect(new OnigurumaRegExp("a", "m").multiline).toBe(true); -  expect(new OnigurumaRegExp("a", "s").multiline).toBe(false); -  expect(new OnigurumaRegExp("a", "y").sticky).toBe(true); -  expect(new OnigurumaRegExp("a", "i").sticky).toBe(false); -  expect(new OnigurumaRegExp("a", "u").unicode).toBe(true); -  expect(new OnigurumaRegExp("a", "d").unicode).toBe(false); -  // @ts-ignore -  expect(new RegExp("a", "d").hasIndices).toBe(true); -  // @ts-ignore -  expect(new RegExp("a", "i").hasIndices).toBe(false); -  expect(new RegExp("a", "s").dotAll).toBe(true); -  expect(new RegExp("a", "i").dotAll).toBe(false); -  expect(new RegExp("a", "i").ignoreCase).toBe(true); -  expect(new RegExp("a", "s").ignoreCase).toBe(false); -  expect(new RegExp("a", "g").global).toBe(true); -  expect(new RegExp("a", "s").global).toBe(false); -  expect(new RegExp("a", "m").multiline).toBe(true); -  expect(new RegExp("a", "s").multiline).toBe(false); -  expect(new RegExp("a", "y").sticky).toBe(true); -  expect(new RegExp("a", "i").sticky).toBe(false); -  expect(new RegExp("a", "u").unicode).toBe(true); -  expect(new RegExp("a", "d").unicode).toBe(false); -}); - -it("String.prototype.replace", () => { -  for (let RegExpConstructor of [OnigurumaRegExp, RegExp]) { -    const r = new RegExpConstructor("a", "g"); -    expect("a".replace(r, "b")).toBe("b"); -    expect("a".replace(r, () => "b")).toBe("b"); -    expect( -      "a".replace(r, (match, offset, string) => { -        expect(match).toBe("a"); -        expect(offset).toBe(0); -        expect(string).toBe("a"); -        return "b"; -      }), -    ).toBe("b"); -  } - -  expect("aaaaaa".replace(new OnigurumaRegExp("a", "g"), "b")).toBe("bbbbbb"); -  expect("aaaaaa".replace(new OnigurumaRegExp("a"), "b")).toBe("baaaaa"); -  // case sensitive -  expect("aaaaaa".replace(new OnigurumaRegExp("A", "i"), "b")).toBe("baaaaa"); -  expect("aaaaaa".replace(new OnigurumaRegExp("A"), "b")).toBe("aaaaaa"); - -  expect("aaaaaa".replace(new RegExp("a", "g"), "b")).toBe("bbbbbb"); -  expect("aaaaaa".replace(new RegExp("a"), "b")).toBe("baaaaa"); -}); - -it("Strings.prototype.match", () => { -  let str = "The rain in SPAIN stays mainly in the plain"; -  for (let RegExpConstructor of [OnigurumaRegExp, RegExp]) { -    let r1 = new RegExpConstructor("ain", "g"); -    let m1 = str.match(r1)!; -    expect(m1[0]).toBe("ain"); -    expect(m1[1]).toBe("ain"); -    expect(m1[2]).toBe("ain"); - -    r1.compile("ain", "ig"); -    m1 = str.match(r1)!; -    expect(m1[0]).toBe("ain"); -    expect(m1[1]).toBe("AIN"); -    expect(m1[2]).toBe("ain"); -    expect(m1[3]).toBe("ain"); -  } -}); - -it("String.prototype.matchAll", () => { -  let str = "test1test2"; -  for (let RegExpConstructor of [RegExp, OnigurumaRegExp]) { -    const regexp = new RegExpConstructor("t(e)(st(d?))", "g"); -    const array = [...str.matchAll(regexp)]; -    expect(array[0][0]).toBe("test"); -    expect(array[0][1]).toBe("e"); -    expect(array[0][2]).toBe("st"); -    expect(array[0][3]).toBe(""); -    expect(array[1][0]).toBe("test"); -    expect(array[1][1]).toBe("e"); -    expect(array[1][2]).toBe("st"); -    expect(array[1][3]).toBe(""); -  } -}); - -it("String.prototype.search", () => { -  let str = "The rain in SPAIN stays mainly in the plain"; -  for (let RegExpConstructor of [OnigurumaRegExp, RegExp]) { -    let r1 = new RegExpConstructor("ain", "g"); -    expect(str.search(r1)).toBe(5); -    r1.compile("ain", "ig"); -    expect(str.search(r1)).toBe(5); -  } -}); - -it("String.prototype.split", () => { -  let str = "Hello World. How are you doing?"; -  for (let RegExpConstructor of [RegExp, OnigurumaRegExp]) { -    let r1 = new RegExpConstructor("\\s", "g"); -    let m1 = str.split(r1); -    expect(m1[0]).toBe("Hello"); -    expect(m1[1]).toBe("World."); -    expect(m1[2]).toBe("How"); -    expect(m1[3]).toBe("are"); -    expect(m1[4]).toBe("you"); -    expect(m1[5]).toBe("doing?"); -  } -}); - -it("escapes characters, unicode, and hex", () => { -  for (const RegExpConstructor of [OnigurumaRegExp, RegExp]) { -    expect(new RegExpConstructor("[\\x00-\\x1F]").toString()).toBe( -      "/[\\x00-\\x1F]/", -    ); -    expect(new RegExpConstructor("[\\u0000-\\u001F]").toString()).toBe( -      "/[\\u0000-\\u001F]/", -    ); -    var s = /\\x{7HHHHHHH}(?=\\u{1233})/; -    let a = new RegExpConstructor("\u{0001F46E}"); -    expect(a.exec("👮")![0]).toBe("👮"); -  } - -  let y = new OnigurumaRegExp("[👮\\x7F](?<=👮)"); -  expect(y.exec("👮\\x{7F}")![0]).toBe("👮"); - -  let by = new OnigurumaRegExp("[👮\\cx7f](?<=👮)"); -  expect(y.exec("👮\\x{7F}")![0]).toBe("👮"); - -  let bz = new OnigurumaRegExp("[👮\\x7](?<=👮)"); - -  let d = new OnigurumaRegExp("[\u{0001F46E}\x7F](?<=\u{0001F46E})"); -  expect(d.exec("👮\x7F")![0]).toBe("👮"); - -  let y_2 = /[[👮\x7F](?<=👮)]/; -  expect(y_2.exec("👮]")![0]).toBe("👮]"); - -  let a1 = new OnigurumaRegExp("(f\xf3oo)", "gd"); -  let a1_1 = a1.exec("table f\xf3ootball, f\xf3oosball"); -  a1_1 = a1.exec("table f\xf3ootball, f\xf3oosball"); - -  let a2 = new RegExp("(f\xf3oo)", "dg"); -  let a2_1 = a2.exec("table f\xf3ootball, f\xf3oosball")!; -  a2_1 = a2.exec("table f\xf3ootball, f\xf3oosball")!; - -  expect(a1_1[0]).toBe(a2_1[0]); -  expect(a1_1[1]).toBe(a2_1[1]); -  expect(a1_1.index).toBe(a2_1.index); -  expect(a1_1.input).toBe(a2_1.input); -  expect(a1.lastIndex).toBe(a2.lastIndex); -  expect(a1_1.groups).toBe(a2_1.groups); -  // @ts-ignore -  expect(a1_1.indices[0][0]).toBe(a2_1.indices[0][0]); -  // @ts-ignore -  expect(a1_1.indices[0][1]).toBe(a2_1.indices[0][1]); -  // @ts-ignore -  expect(a1_1.indices[1][0]).toBe(a2_1.indices[1][0]); -  // @ts-ignore -  expect(a1_1.indices[1][1]).toBe(a2_1.indices[1][1]); -}); - -it("lookbehinds", () => { -  expect(/\d+(?=%)/.source).toBe("\\d+(?=%)"); -  expect(/\d+(?!%)/.source).toBe("\\d+(?!%)"); -  expect(/(?<=\$)\d+/.source).toBe("(?<=\\$)\\d+"); -  expect(/(?<!\$)\d+/.source).toBe("(?<!\\$)\\d+"); -  expect(/h(?=(\w)+)/.source).toBe("h(?=(\\w)+)"); -  expect(/(?<=(\w)+)r/.source).toBe("(?<=(\\w)+)r"); -  expect(/(?<=(o)d\1)r/.source).toBe("(?<=(o)d\\1)r"); -  expect(/(?<=\1d(o))r/.source).toBe("(?<=\\1d(o))r"); - -  let small = /(?:)/; -  expect(small instanceof OnigurumaRegExp).toBe(false); - -  expect( -    /[\x00-\x1F\x27\x5C\x7F-\x9F]|[\uD800-\uDBFF]\(?<=[\uDC00-\uDFFF]\)|(?!.*[\uD800-\uDBFF][\uDC00-\uDFFF]).*[\uDC00-\uDFFF]/ instanceof -      RegExp, -  ).toBe(true); -  expect( -    /[\x00-\x1F\x27\x5C\x7F-\x9F]|[\uD800-\uDBFF](?<=[\uDC00-\uDFFF])|(?!.*[\uD800-\uDBFF][\uDC00-\uDFFF]).*[\uDC00-\uDFFF]/ instanceof -      OnigurumaRegExp, -  ).toBe(true); - -  expect(/(?<=\1d(o))/ instanceof OnigurumaRegExp).toBe(true); -  expect(/\(?<=\1d(o)\)/ instanceof OnigurumaRegExp).toBe(false); -  expect( -    /(?!.*[\uD800-\uDBFF][\uDC00-\uDFFF]).*[\uDC00-\uDFFF]/ instanceof RegExp, -  ).toBe(true); -  expect( -    /\(?!.*[\uD800-\uDBFF][\uDC00-\uDFFF]\).*[\uDC00-\uDFFF]/ instanceof RegExp, -  ).toBe(true); - -  let e = new OnigurumaRegExp("(?<=)"); -  expect(e.source).toBe("(?<=)"); -  expect(new OnigurumaRegExp("(?<=)").source).toBe("(?<=)"); - -  expect(/\(?<=\)/.source).toBe("\\(?<=\\)"); -  expect(/(?<=)/.source).toBe("(?<=)"); -}); diff --git a/test/bun.js/test-test.test.ts b/test/bun.js/test-test.test.ts index 9a16dc654..504af3808 100644 --- a/test/bun.js/test-test.test.ts +++ b/test/bun.js/test-test.test.ts @@ -1,5 +1,4 @@  import { expect, test } from "bun:test"; -import { OnigurumaRegExp } from "bun";  test("toStrictEqual() vs toEqual()", () => {    expect([1, , 3]).toEqual([1, , 3]); @@ -133,10 +132,6 @@ function f2() {    return "hey!";  }  test("deepEquals regex", () => { -  expect(new OnigurumaRegExp("s", "g")).toEqual(new OnigurumaRegExp("s", "g")); -  expect(new OnigurumaRegExp("s", "g")).not.toEqual( -    new OnigurumaRegExp("s", "i"), -  );    expect(/a/imu).toEqual(/a/imu);    expect(/a/imu).not.toEqual(/ab/imu); | 
