aboutsummaryrefslogtreecommitdiff
path: root/src/bun.js/bindings
diff options
context:
space:
mode:
authorGravatar Jarred Sumner <jarred@jarredsumner.com> 2022-12-17 15:41:47 -0800
committerGravatar GitHub <noreply@github.com> 2022-12-17 15:41:47 -0800
commitfeea8824f1da05a43f602e8f9f94ff1862c848d0 (patch)
tree0b07b0f02539d99efa500895f6d2a0a69e8514c6 /src/bun.js/bindings
parent028e48ed972fa0a05388feab4c6874baab0331c2 (diff)
downloadbun-feea8824f1da05a43f602e8f9f94ff1862c848d0.tar.gz
bun-feea8824f1da05a43f602e8f9f94ff1862c848d0.tar.zst
bun-feea8824f1da05a43f602e8f9f94ff1862c848d0.zip
Delete Oniguruma (#1625)
* Update .gitmodules * Delete oniguruma * Delete Oniguruma * Make this test less flaky * :scissors: Co-authored-by: Jarred Sumner <709451+Jarred-Sumner@users.noreply.github.com>
Diffstat (limited to 'src/bun.js/bindings')
-rw-r--r--src/bun.js/bindings/OnigurumaRegExp.cpp903
-rw-r--r--src/bun.js/bindings/OnigurumaRegExp.h106
-rw-r--r--src/bun.js/bindings/ZigGlobalObject.cpp19
-rw-r--r--src/bun.js/bindings/ZigGlobalObject.h5
-rw-r--r--src/bun.js/bindings/bindings.cpp18
-rw-r--r--src/bun.js/bindings/headers-cpp.h2
-rw-r--r--src/bun.js/bindings/headers.h2
-rw-r--r--src/bun.js/bindings/webcore/DOMClientIsoSubspaces.h1
-rw-r--r--src/bun.js/bindings/webcore/DOMIsoSubspaces.h1
9 files changed, 3 insertions, 1054 deletions
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"