aboutsummaryrefslogtreecommitdiff
path: root/src/bun.js/scripts/generate-jssink.js
diff options
context:
space:
mode:
authorGravatar Jarred Sumner <709451+Jarred-Sumner@users.noreply.github.com> 2022-11-25 00:08:36 -0800
committerGravatar Jarred Sumner <709451+Jarred-Sumner@users.noreply.github.com> 2022-11-25 00:08:36 -0800
commitd1a4f4fd6981a06920adb632dde2562b76ddc4d0 (patch)
tree6a26cd3ebd8afdbad653a800d54967c4e84b55c2 /src/bun.js/scripts/generate-jssink.js
parent0b915fed034c38ae9a2e15caee94530910dc864b (diff)
downloadbun-d1a4f4fd6981a06920adb632dde2562b76ddc4d0.tar.gz
bun-d1a4f4fd6981a06920adb632dde2562b76ddc4d0.tar.zst
bun-d1a4f4fd6981a06920adb632dde2562b76ddc4d0.zip
Introduce `FileSink.ref()` and `FileSink.unref()`
Diffstat (limited to 'src/bun.js/scripts/generate-jssink.js')
-rw-r--r--src/bun.js/scripts/generate-jssink.js62
1 files changed, 58 insertions, 4 deletions
diff --git a/src/bun.js/scripts/generate-jssink.js b/src/bun.js/scripts/generate-jssink.js
index 174efcb06..b9b6b2c17 100644
--- a/src/bun.js/scripts/generate-jssink.js
+++ b/src/bun.js/scripts/generate-jssink.js
@@ -102,11 +102,15 @@ function header() {
void detach() {
m_sinkPtr = nullptr;
- }
+ }
+
+ static void analyzeHeap(JSCell*, JSC::HeapAnalyzer&);
- static void analyzeHeap(JSCell*, JSC::HeapAnalyzer&);
+ void ref();
+ void unref();
void* m_sinkPtr;
+ int m_refCount { 1 };
${className}(JSC::VM& vm, JSC::Structure* structure, void* sinkPtr)
: Base(vm, structure)
@@ -355,6 +359,51 @@ JSC_DEFINE_HOST_FUNCTION(functionStartDirectStream, (JSC::JSGlobalObject * lexic
const protopad = `${controller}__close`.length;
const padding = `${name}__doClose`.length;
templ += `
+
+ void ${className}::ref() {
+ if (!m_sinkPtr)
+ return;
+
+ m_refCount++;
+ if (m_refCount == 1) {
+ ${name}__updateRef(m_sinkPtr, true);
+ }
+ }
+
+ void ${className}::unref() {
+ if (!m_sinkPtr)
+ return;
+
+ m_refCount = std::max(0, m_refCount - 1);
+ if (!m_refCount)
+ {
+ ${name}__updateRef(m_sinkPtr, false);
+ }
+ }
+
+JSC_DEFINE_HOST_FUNCTION(${name}__ref, (JSC::JSGlobalObject * lexicalGlobalObject, JSC::CallFrame *callFrame))
+{
+ auto& vm = lexicalGlobalObject->vm();
+ auto* sink = jsDynamicCast<WebCore::${className}*>(callFrame->thisValue());
+ if (LIKELY(sink)) {
+ sink->ref();
+ }
+ return JSC::JSValue::encode(JSC::jsUndefined());
+
+}
+
+
+JSC_DEFINE_HOST_FUNCTION(${name}__unref, (JSC::JSGlobalObject * lexicalGlobalObject, JSC::CallFrame *callFrame))
+{
+ auto& vm = lexicalGlobalObject->vm();
+ auto* sink = jsDynamicCast<WebCore::${className}*>(callFrame->thisValue());
+ if (LIKELY(sink)) {
+ sink->unref();
+ }
+ return JSC::JSValue::encode(JSC::jsUndefined());
+
+}
+
JSC_DEFINE_CUSTOM_GETTER(function${name}__getter, (JSC::JSGlobalObject * lexicalGlobalObject, JSC::EncodedJSValue thisValue, JSC::PropertyName))
{
auto& vm = lexicalGlobalObject->vm();
@@ -472,6 +521,12 @@ JSC_DEFINE_HOST_FUNCTION(${name}__doClose, (JSC::JSGlobalObject * lexicalGlobalO
write ${`${name}__write`.padEnd(
padding + 8,
)} ReadOnly|DontDelete|Function 1
+ ref ${`${name}__ref`.padEnd(
+ padding + 8,
+ )} ReadOnly|DontDelete|Function 0
+ unref ${`${name}__unref`.padEnd(
+ padding + 8,
+ )} ReadOnly|DontDelete|Function 0
@end
*/
@@ -849,8 +904,7 @@ extern "C" JSC__JSValue ${name}__createObject(JSC__JSGlobalObject* arg0, void* s
{
auto& vm = arg0->vm();
Zig::GlobalObject* globalObject = reinterpret_cast<Zig::GlobalObject*>(arg0);
- JSC::JSValue prototype = globalObject->${name}Prototype();
- JSC::Structure* structure = WebCore::JS${name}::createStructure(vm, globalObject, prototype);
+ JSC::Structure* structure = globalObject->${name}Structure();
return JSC::JSValue::encode(WebCore::JS${name}::create(vm, globalObject, structure, sinkPtr));
}
18:44:05 -0700'>2023-09-20feat(encoding): support BOM detection (#5550)Gravatar WingLim 5-8/+71 2023-09-20feat(node:dns): implement `dns.lookupService` (#5613)Gravatar Ai Hoshino 6-9/+492 2023-09-20implement `Module.prototype._compile` (#5840)Gravatar dave caruso 4-2/+78 2023-09-20feat(runtime): implement `console._stdout` (#5842)Gravatar dave caruso 2-1/+59 2023-09-20Improve types for `test.each`, `describe.each` (#5838)Gravatar Colin McDonnell 2-10/+59 2023-09-20Fix rendering of bun.lockb in vscode extensionGravatar Ashcon Partovi 5-114/+4 2023-09-20Run bun fmtGravatar Ashcon Partovi 2-12/+9 2023-09-20Update quickstartGravatar Colin McDonnell 1-0/+19 2023-09-20Update prisma guideGravatar Colin McDonnell 1-0/+6 2023-09-20Update env docGravatar Colin McDonnell 1-1/+1 2023-09-20Clarify hot modeGravatar Colin McDonnell 1-10/+9 2023-09-20[bun install] Add `-E` as alias of `--exact` (#5104)Gravatar Jonah Snider 2-2/+57 2023-09-20feat: switch disableTelemetry to bunfig (#5690)Gravatar Lucas Coratger 3-1/+14 2023-09-20Treat `undefined` value as empty in expect.toThrow (#5788)Gravatar LongYinan 1-3/+3 2023-09-20Fix various bugs in vscode extension (#5772)Gravatar JeremyFunk 3-9/+85 2023-09-20add `emitDecoratorMetadata` (#5777)Gravatar Dylan Conway 19-110/+1884 2023-09-20fix(doc): correct `server.reload` (#5799)Gravatar Ai Hoshino 1-1/+1 2023-09-20Call `Error.prepareStackTrace` on `new Error().stack` (#5802)Gravatar Jarred Sumner 6-155/+277 2023-09-20Fixes #5800Gravatar Jarred Sumner 1-1/+1 2023-09-20Fix path used in bunx (#5785)Gravatar Jarred Sumner 2-26/+51 2023-09-20Fix RedirectURLTooLong errors (#5786)Gravatar ggobbe 1-1/+1 2023-09-19Show when a newer version is available in the install screen (#5780)Gravatar Jarred Sumner 3-14/+95 2023-09-19Fix broken linksGravatar Colin McDonnell 4-4/+4