diff --git a/microscript/ILibDuktape_Helpers.c b/microscript/ILibDuktape_Helpers.c index 511b8cf..0355814 100644 --- a/microscript/ILibDuktape_Helpers.c +++ b/microscript/ILibDuktape_Helpers.c @@ -574,9 +574,10 @@ duk_ret_t ILibDuktape_IndependentFinalizer_Dispatch(duk_context *ctx) return 0; } -void ILibDuktape_CreateFinalizer(duk_context *ctx, duk_c_function func) +void ILibDuktape_CreateFinalizerEx(duk_context *ctx, duk_c_function func, int singleton) { - ILibDuktape_EventEmitter_Create(ctx); + ILibDuktape_EventEmitter *e = ILibDuktape_EventEmitter_Create(ctx); + if (singleton != 0) { ILibDuktape_EventEmitter_RemoveAllListeners(e, "~"); } ILibDuktape_EventEmitter_PrependOnce(ctx, -1, "~", func); } duk_ret_t ILibDuktape_CreateProperty_InstanceMethod_Sink(duk_context *ctx) diff --git a/microscript/ILibDuktape_Helpers.h b/microscript/ILibDuktape_Helpers.h index 1fba350..f462c99 100644 --- a/microscript/ILibDuktape_Helpers.h +++ b/microscript/ILibDuktape_Helpers.h @@ -107,7 +107,8 @@ void ILibDuktape_CreateProperty_InstanceMethod(duk_context *ctx, char *methodNam void ILibDuktape_CreateProperty_InstanceMethodEx(duk_context *ctx, char *methodName, void *funcHeapPtr); void ILibDuktape_CreateReadonlyProperty(duk_context *ctx, char *propName); #define ILibDuktape_CreateReadonlyProperty_int(ctx, propName, propValue) duk_push_int(ctx, propValue);ILibDuktape_CreateReadonlyProperty(ctx, propName) -void ILibDuktape_CreateFinalizer(duk_context *ctx, duk_c_function func); +void ILibDuktape_CreateFinalizerEx(duk_context *ctx, duk_c_function func, int singleton); +#define ILibDuktape_CreateFinalizer(ctx, func) ILibDuktape_CreateFinalizerEx(ctx, func, 0) void *ILibDuktape_Memory_Alloc(duk_context *ctx, duk_size_t size); void *ILibDuktape_Memory_AllocEx(duk_context *ctx, duk_idx_t index, duk_size_t size);