aboutsummaryrefslogtreecommitdiff
path: root/src/bun.js/bindings/BunString.cpp
diff options
context:
space:
mode:
authorGravatar Jarred Sumner <jarred@jarredsumner.com> 2023-07-11 19:14:34 -0700
committerGravatar GitHub <noreply@github.com> 2023-07-11 19:14:34 -0700
commitcbb88672f217a90db1aa1eb29cd92d5d9035b22b (patch)
tree43a00501f3cde495967e116f0b660777051551f8 /src/bun.js/bindings/BunString.cpp
parent1f900cff453700b19bca2acadfe26da4468c1282 (diff)
parent34b0e7a2bbd8bf8097341cdb0075d0908283e834 (diff)
downloadbun-jarred/esm-conditions.tar.gz
bun-jarred/esm-conditions.tar.zst
bun-jarred/esm-conditions.zip
Merge branch 'main' into jarred/esm-conditionsjarred/esm-conditions
Diffstat (limited to 'src/bun.js/bindings/BunString.cpp')
-rw-r--r--src/bun.js/bindings/BunString.cpp76
1 files changed, 71 insertions, 5 deletions
diff --git a/src/bun.js/bindings/BunString.cpp b/src/bun.js/bindings/BunString.cpp
index f737342f4..21541d711 100644
--- a/src/bun.js/bindings/BunString.cpp
+++ b/src/bun.js/bindings/BunString.cpp
@@ -7,6 +7,11 @@
#include "GCDefferalContext.h"
using namespace JSC;
+extern "C" bool Bun__WTFStringImpl__hasPrefix(const WTF::StringImpl* impl, const char* bytes, size_t length)
+{
+ return impl->startsWith(bytes, length);
+}
+
extern "C" void Bun__WTFStringImpl__deref(WTF::StringImpl* impl)
{
impl->deref();
@@ -81,31 +86,69 @@ BunString toString(JSC::JSGlobalObject* globalObject, JSValue value)
return fromJS(globalObject, value);
}
+BunString toStringRef(JSC::JSGlobalObject* globalObject, JSValue value)
+{
+ auto str = value.toWTFString(globalObject);
+ if (str.isEmpty()) {
+ return { BunStringTag::Empty };
+ }
+
+ str.impl()->ref();
+
+ return { BunStringTag::WTFStringImpl, { .wtf = str.impl() } };
+}
+
BunString toString(WTF::String& wtfString)
{
- if (wtfString.length() == 0)
+ if (wtfString.isEmpty())
return { BunStringTag::Empty };
return { BunStringTag::WTFStringImpl, { .wtf = wtfString.impl() } };
}
BunString toString(const WTF::String& wtfString)
{
- if (wtfString.length() == 0)
+ if (wtfString.isEmpty())
return { BunStringTag::Empty };
return { BunStringTag::WTFStringImpl, { .wtf = wtfString.impl() } };
}
BunString toString(WTF::StringImpl* wtfString)
{
- if (wtfString->length() == 0)
+ if (wtfString->isEmpty())
return { BunStringTag::Empty };
return { BunStringTag::WTFStringImpl, { .wtf = wtfString } };
}
+BunString toStringRef(WTF::String& wtfString)
+{
+ if (wtfString.isEmpty())
+ return { BunStringTag::Empty };
+
+ wtfString.impl()->ref();
+ return { BunStringTag::WTFStringImpl, { .wtf = wtfString.impl() } };
+}
+BunString toStringRef(const WTF::String& wtfString)
+{
+ if (wtfString.isEmpty())
+ return { BunStringTag::Empty };
+
+ wtfString.impl()->ref();
+ return { BunStringTag::WTFStringImpl, { .wtf = wtfString.impl() } };
+}
+BunString toStringRef(WTF::StringImpl* wtfString)
+{
+ if (wtfString->isEmpty())
+ return { BunStringTag::Empty };
+
+ wtfString->ref();
+
+ return { BunStringTag::WTFStringImpl, { .wtf = wtfString } };
+}
+
BunString fromString(WTF::String& wtfString)
{
- if (wtfString.length() == 0)
+ if (wtfString.isEmpty())
return { BunStringTag::Empty };
return { BunStringTag::WTFStringImpl, { .wtf = wtfString.impl() } };
@@ -113,7 +156,7 @@ BunString fromString(WTF::String& wtfString)
BunString fromString(WTF::StringImpl* wtfString)
{
- if (wtfString->length() == 0)
+ if (wtfString->isEmpty())
return { BunStringTag::Empty };
return { BunStringTag::WTFStringImpl, { .wtf = wtfString } };
@@ -126,6 +169,29 @@ extern "C" JSC::EncodedJSValue BunString__toJS(JSC::JSGlobalObject* globalObject
return JSValue::encode(Bun::toJS(globalObject, *bunString));
}
+extern "C" BunString BunString__fromUTF16Unitialized(size_t length)
+{
+ unsigned utf16Length = length;
+ UChar* ptr;
+ auto impl = WTF::StringImpl::createUninitialized(utf16Length, ptr);
+ if (UNLIKELY(!ptr))
+ return { BunStringTag::Dead };
+
+ impl->ref();
+ return { BunStringTag::WTFStringImpl, { .wtf = &impl.leakRef() } };
+}
+
+extern "C" BunString BunString__fromLatin1Unitialized(size_t length)
+{
+ unsigned latin1Length = length;
+ LChar* ptr;
+ auto impl = WTF::StringImpl::createUninitialized(latin1Length, ptr);
+ if (UNLIKELY(!ptr))
+ return { BunStringTag::Dead };
+ impl->ref();
+ return { BunStringTag::WTFStringImpl, { .wtf = &impl.leakRef() } };
+}
+
extern "C" BunString BunString__fromUTF8(const char* bytes, size_t length)
{
if (simdutf::validate_utf8(bytes, length)) {