diff options
author | 2022-08-21 00:49:54 -0700 | |
---|---|---|
committer | 2022-08-21 00:49:54 -0700 | |
commit | 97305b746146361a15def163b1b0138bd8b1b5fb (patch) | |
tree | 1a3405e066acb7c1d2d2e5371c9c1b286e7f6588 /src/bun.js/bindings/bindings.cpp | |
parent | 1fca65fdf60bcfd10f917dd371881c6e08752bba (diff) | |
download | bun-97305b746146361a15def163b1b0138bd8b1b5fb.tar.gz bun-97305b746146361a15def163b1b0138bd8b1b5fb.tar.zst bun-97305b746146361a15def163b1b0138bd8b1b5fb.zip |
Add a binding for creating atomic strings
Diffstat (limited to 'src/bun.js/bindings/bindings.cpp')
-rw-r--r-- | src/bun.js/bindings/bindings.cpp | 19 |
1 files changed, 19 insertions, 0 deletions
diff --git a/src/bun.js/bindings/bindings.cpp b/src/bun.js/bindings/bindings.cpp index 86ba683a8..ddef8c23a 100644 --- a/src/bun.js/bindings/bindings.cpp +++ b/src/bun.js/bindings/bindings.cpp @@ -1261,6 +1261,25 @@ JSC__JSValue ZigString__toValue(const ZigString* arg0, JSC__JSGlobalObject* arg1 return JSC::JSValue::encode(JSC::JSValue(JSC::jsOwnedString(arg1->vm(), Zig::toString(*arg0)))); } +JSC__JSValue ZigString__toAtomicValue(const ZigString* arg0, JSC__JSGlobalObject* arg1) +{ + if (arg0->len == 0) { + return JSC::JSValue::encode(JSC::jsEmptyString(arg1->vm())); + } + + if (isTaggedUTF16Ptr(arg0->ptr)) { + if (auto impl = WTF::AtomStringImpl::lookUp(reinterpret_cast<const UChar*>(untag(arg0->ptr)), arg0->len)) { + return JSC::JSValue::encode(JSC::jsString(arg1->vm(), WTF::String(WTFMove(impl)))); + } + } else { + if (auto impl = WTF::AtomStringImpl::lookUp(untag(arg0->ptr), arg0->len)) { + return JSC::JSValue::encode(JSC::jsString(arg1->vm(), WTF::String(WTFMove(impl)))); + } + } + + return JSC::JSValue::encode(JSC::JSValue(JSC::jsString(arg1->vm(), makeAtomString(Zig::toStringCopy(*arg0))))); +} + JSC__JSValue ZigString__to16BitValue(const ZigString* arg0, JSC__JSGlobalObject* arg1) { auto str = WTF::String::fromUTF8(arg0->ptr, arg0->len); |