aboutsummaryrefslogtreecommitdiff
path: root/src/bun.js/bindings/bindings.cpp
diff options
context:
space:
mode:
Diffstat (limited to '')
-rw-r--r--src/bun.js/bindings/bindings.cpp120
1 files changed, 108 insertions, 12 deletions
diff --git a/src/bun.js/bindings/bindings.cpp b/src/bun.js/bindings/bindings.cpp
index 955971ec0..dd26a88ba 100644
--- a/src/bun.js/bindings/bindings.cpp
+++ b/src/bun.js/bindings/bindings.cpp
@@ -1382,7 +1382,6 @@ void JSC__JSString__toZigString(JSC__JSString* arg0, JSC__JSGlobalObject* arg1,
*arg2 = Zig::toZigString(arg0->value(arg1));
}
-
bool JSC__JSString__eql(const JSC__JSString* arg0, JSC__JSGlobalObject* obj, JSC__JSString* arg2)
{
return arg0->equal(obj, arg2);
@@ -1394,8 +1393,6 @@ JSC__JSObject* JSC__JSString__toObject(JSC__JSString* arg0, JSC__JSGlobalObject*
return arg0->toObject(arg1);
}
-
-
#pragma mark - JSC::JSModuleLoader
// JSC__JSValue
@@ -1414,7 +1411,6 @@ void Microtask__run_default(void* microtask, void* global)
reinterpret_cast<Zig::JSMicrotaskCallbackDefaultGlobal*>(microtask)->call(reinterpret_cast<Zig::GlobalObject*>(global));
}
-
JSC__JSValue JSC__JSModuleLoader__evaluate(JSC__JSGlobalObject* globalObject, const unsigned char* arg1,
size_t arg2, const unsigned char* originUrlPtr, size_t originURLLen, const unsigned char* referrerUrlPtr, size_t referrerUrlLen,
JSC__JSValue JSValue5, JSC__JSValue* arg6)
@@ -2037,8 +2033,6 @@ bool JSC__JSInternalPromise__isHandled(const JSC__JSInternalPromise* arg0, JSC__
return arg0->isHandled(reinterpret_cast<JSC::VM&>(arg1));
}
-
-
#pragma mark - JSC::JSGlobalObject
JSC__JSValue JSC__JSGlobalObject__generateHeapSnapshot(JSC__JSGlobalObject* globalObject)
@@ -2550,7 +2544,6 @@ JSC__JSObject* JSC__JSValue__toObject(JSC__JSValue JSValue0, JSC__JSGlobalObject
return value.toObject(arg1);
}
-
JSC__JSString* JSC__JSValue__toString(JSC__JSValue JSValue0, JSC__JSGlobalObject* arg1)
{
JSC::JSValue value = JSC::JSValue::decode(JSValue0);
@@ -2562,7 +2555,6 @@ JSC__JSString* JSC__JSValue__toStringOrNull(JSC__JSValue JSValue0, JSC__JSGlobal
return value.toStringOrNull(arg1);
}
-
static void populateStackFrameMetadata(JSC::VM& vm, const JSC::StackFrame* stackFrame, ZigStackFrame* frame)
{
frame->source_url = Zig::toZigString(stackFrame->sourceURL(vm));
@@ -3058,7 +3050,6 @@ void JSC__Exception__getStackTrace(JSC__Exception* arg0, ZigStackTrace* trace)
populateStackTrace(arg0->vm(), arg0->stack(), trace);
}
-
#pragma mark - JSC::VM
JSC__JSValue JSC__VM__runGC(JSC__VM* vm, bool sync)
@@ -3193,9 +3184,6 @@ bJSC__CatchScope JSC__CatchScope__declare(JSC__VM* arg0, unsigned char* arg1, un
}
JSC__Exception* JSC__CatchScope__exception(JSC__CatchScope* arg0) { return arg0->exception(); }
-
-
-
JSC__JSValue JSC__JSPromise__rejectedPromiseValue(JSC__JSGlobalObject* arg0,
JSC__JSValue JSValue1)
{
@@ -3445,3 +3433,111 @@ restart:
return;
}
}
+
+extern "C" void Bun__WTFStringImpl__deref(WTF::StringImpl* impl)
+{
+ impl->deref();
+}
+extern "C" void Bun__WTFStringImpl__ref(WTF::StringImpl* impl)
+{
+ impl->ref();
+}
+
+extern "C" bool BunString__fromJS(JSC::JSGlobalObject* globalObject, JSC::EncodedJSValue encodedValue, BunString* bunString)
+{
+ JSC::JSValue value = JSC::JSValue::decode(encodedValue);
+ *bunString = Bun::fromJS(globalObject, value);
+ return bunString->tag != BunStringTag::Dead;
+}
+
+namespace Bun {
+JSC::JSValue toJS(JSC::JSGlobalObject* globalObject, BunString bunString)
+{
+ if (bunString.tag == BunStringTag::Empty || bunString.tag == BunStringTag::Dead) {
+ return JSValue(JSC::jsEmptyString(globalObject->vm()));
+ }
+ if (bunString.tag == BunStringTag::WTFStringImpl) {
+ return JSValue(jsString(globalObject->vm(), String(bunString.impl.wtf)));
+ }
+
+ if (bunString.tag == BunStringTag::StaticZigString) {
+ return JSValue(jsOwnedString(globalObject->vm(), Zig::toStringStatic(bunString.impl.zig)));
+ }
+
+ return JSValue(Zig::toJSStringGC(bunString.impl.zig, globalObject));
+}
+
+WTF::String toWTFString(BunString& bunString)
+{
+ if (bunString.tag == BunStringTag::ZigString) {
+ if (Zig::isTaggedUTF8Ptr(bunString.impl.zig.ptr)) {
+ return Zig::toStringCopy(bunString.impl.zig);
+ } else {
+ return Zig::toString(bunString.impl.zig);
+ }
+
+ } else if (bunString.tag == BunStringTag::StaticZigString) {
+ return Zig::toStringStatic(bunString.impl.zig);
+ }
+
+ if (bunString.tag == BunStringTag::WTFStringImpl) {
+ return WTF::String(bunString.impl.wtf);
+ }
+
+ return WTF::String();
+}
+
+BunString fromJS(JSC::JSGlobalObject* globalObject, JSValue value)
+{
+ JSC::JSString* str = value.toStringOrNull(globalObject);
+ if (UNLIKELY(!str)) {
+ return { BunStringTag::Dead };
+ }
+
+ if (str->length() == 0) {
+ return { BunStringTag::Empty };
+ }
+
+ auto wtfString = str->value(globalObject);
+
+ return { BunStringTag::WTFStringImpl, { .wtf = wtfString.impl() } };
+}
+
+BunString fromString(WTF::String& wtfString)
+{
+ if (wtfString.length() == 0)
+ return { BunStringTag::Empty };
+
+ return { BunStringTag::WTFStringImpl, { .wtf = wtfString.impl() } };
+}
+
+BunString fromString(WTF::StringImpl* wtfString)
+{
+ if (wtfString->length() == 0)
+ return { BunStringTag::Empty };
+
+ return { BunStringTag::WTFStringImpl, { .wtf = wtfString } };
+}
+
+}
+
+extern "C" JSC::EncodedJSValue BunString__toJS(JSC::JSGlobalObject* globalObject, BunString* bunString)
+{
+ return JSValue::encode(Bun::toJS(globalObject, *bunString));
+}
+
+extern "C" void BunString__toWTFString(BunString* bunString)
+{
+ if (bunString->tag == BunStringTag::ZigString) {
+ if (Zig::isTaggedUTF8Ptr(bunString->impl.zig.ptr)) {
+ bunString->impl.wtf = Zig::toStringCopy(bunString->impl.zig).impl();
+ } else {
+ bunString->impl.wtf = Zig::toString(bunString->impl.zig).impl();
+ }
+
+ bunString->tag = BunStringTag::WTFStringImpl;
+ } else if (bunString->tag == BunStringTag::StaticZigString) {
+ bunString->impl.wtf = Zig::toStringStatic(bunString->impl.zig).impl();
+ bunString->tag = BunStringTag::WTFStringImpl;
+ }
+}