diff --git a/microscript/ILibDuktape_Polyfills.c b/microscript/ILibDuktape_Polyfills.c index 6d8f8c0..fb66744 100644 --- a/microscript/ILibDuktape_Polyfills.c +++ b/microscript/ILibDuktape_Polyfills.c @@ -2009,6 +2009,20 @@ duk_ret_t ILibDuktape_Polyfills_Object_keys(duk_context *ctx) duk_pop(ctx); // [obj][keys] return(1); } +duk_ret_t ILibDuktape_Polyfills_function_getter(duk_context *ctx) +{ + duk_push_this(ctx); // [Function] + duk_push_true(ctx); + duk_put_prop_string(ctx, -2, ILibDuktape_EventEmitter_InfrastructureEvent); + return(1); +} +void ILibDuktape_Polyfills_function(duk_context *ctx) +{ + duk_get_prop_string(ctx, -1, "Function"); // [g][Function] + duk_get_prop_string(ctx, -1, "prototype"); // [g][Function][prototype] + ILibDuktape_CreateEventWithGetter(ctx, "internal", ILibDuktape_Polyfills_function_getter); + duk_pop_2(ctx); // [g] +} void ILibDuktape_Polyfills_object(duk_context *ctx) { // Polyfill Object._hashCode() @@ -2272,7 +2286,7 @@ void ILibDuktape_Polyfills_JS_Init(duk_context *ctx) duk_peval_string_noresult(ctx, "addCompressedModule('clipboard', Buffer.from('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', 'base64'));"); // Promise: This is very important, as it is used everywhere. Refer to /modules/promise.js to see a human readable version of promise.js - duk_peval_string_noresult(ctx, "addCompressedModule('promise', Buffer.from('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', 'base64'));"); + duk_peval_string_noresult(ctx, "addCompressedModule('promise', Buffer.from('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', 'base64'));"); // util-pathHelper, used to settings/config by the agent. Refer to /modules/util-pathHelper for details. duk_peval_string_noresult(ctx, "addCompressedModule('util-pathHelper', Buffer.from('eJy1VFFP2zAQfo+U/3DrA0lZSEu3J1A1dYVp0VA70bIKiRc3uaQeqe3ZDqFC++87N8kAMWli0vIQK77Pd9/33TmDQ9+bSrXTvNhYGA1HQ0iExRKmUiupmeVS+J7vXfAUhcEMKpGhBrtBmCiW0tJGIviG2hAaRvEQQgfotaFe/9T3drKCLduBkBYqg5SBG8h5iYD3KSoLXEAqt6rkTKQINbebfZU2R+x7120GubaMwIzgir7ypzBg1rEFejbWqpPBoK7rmO2ZxlIXg7LBmcFFMj2fLc6PiK07cSVKNAY0/qi4JpnrHTBFZFK2Joolq0FqYIVGilnpyNaaWy6KCIzMbc00+l7GjdV8XdlnPnXUSO9TADnFBPQmC0gWPfg4WSSLyPdWyfLz/GoJq8nl5WS2TM4XML+E6Xx2liyT+Yy+PsFkdg1fktlZBEguURW8V9qxJ4rcOYgZ2bVAfFY+lw0dozDlOU9JlCgqViAU8g61IC2gUG+5cV00RC7zvZJvud0PgXmpiIocDpx5eSVSh6H23OJXZjehotdxBG4ZRa7f09VZ3/cemtbwHMJmD96MQVRlCQcHjygHaZHuuWNUVd5SRRiD0jIlqXFaZ2E/NiTWht2eKpkllVsYjyGouXg3CuADBDc3AZxAMAjcGHZJm4Sxkir803ZlWg2vLdFkfJpyn4aYt6m/Sy5ezfhnN9TOub2psbFMW7OiAQiDOOi/tK2DHsdWXsga9ZQZJM9QZN0xvEc6CQ+/ObaSq7UbU1GEw6jdKlEUdCGP4H3/1LF5Lu5tc3L0yNYtWBr8SzP/xeHXN3H0H9rhFo220qJ12cX2bdrKrCqRvKXfp3Uqu0tx6qK+9wtCYKEt', 'base64'));"); @@ -3191,6 +3205,7 @@ void ILibDuktape_Polyfills_Init(duk_context *ctx) ILibDuktape_Polyfills_byte_ordering(ctx); ILibDuktape_Polyfills_timer(ctx); ILibDuktape_Polyfills_object(ctx); + ILibDuktape_Polyfills_function(ctx); ILibDuktape_CreateInstanceMethod(ctx, "addModuleObject", ILibDuktape_Polyfills_addModuleObject, 2); ILibDuktape_CreateInstanceMethod(ctx, "addModule", ILibDuktape_Polyfills_addModule, 2); diff --git a/microscript/ILibduktape_EventEmitter.c b/microscript/ILibduktape_EventEmitter.c index f5f0811..f4abb51 100644 --- a/microscript/ILibduktape_EventEmitter.c +++ b/microscript/ILibduktape_EventEmitter.c @@ -1342,6 +1342,13 @@ duk_ret_t ILibDuktape_EventEmitter_setFinalizerMetadata(duk_context *ctx) duk_put_prop_string(ctx, -2, ILibDuktape_EventEmitter_FinalizerDebugMessage); return(0); } +duk_ret_t ILibDuktape_RefCountPointer(duk_context *ctx) +{ + duk_push_this(ctx); + duk_int_t *t = _get_refcount_ptr(ctx, -1); + duk_push_pointer(ctx, t); + return(1); +} void ILibDuktape_EventEmitter_PUSH(duk_context *ctx, void *chain) { duk_push_object(ctx); // [emitter] @@ -1354,6 +1361,7 @@ void ILibDuktape_EventEmitter_PUSH(duk_context *ctx, void *chain) ILibDuktape_CreateInstanceMethod(ctx, "addHiddenReference", ILibDuktape_EventEmitter_addHidden, 2); ILibDuktape_CreateInstanceMethod(ctx, "deleteProperty", ILibDuktape_EventEmitter_deleteProperty, 2); ILibDuktape_CreateInstanceMethod(ctx, "setFinalizerMetadata", ILibDuktape_EventEmitter_setFinalizerMetadata, 1); + ILibDuktape_CreateInstanceMethod(ctx, "_refCountPointer", ILibDuktape_RefCountPointer, 0); } void ILibDuktape_EventEmitter_Init(duk_context *ctx) { diff --git a/modules/promise.js b/modules/promise.js index 10729fd..5f04629 100644 --- a/modules/promise.js +++ b/modules/promise.js @@ -59,9 +59,7 @@ function Promise(promiseFunc) } }); - - - this._internal.on('newListener', function (eventName, eventCallback) + this._internal.on('newListener', (function (eventName, eventCallback) { //console.log('newListener', eventName, 'errors/' + this.errors + ' completed/' + this.completed); var r = null; @@ -99,8 +97,9 @@ function Promise(promiseFunc) { eventCallback.apply(this, []); } - }); - this._internal.resolver = function _resolver() + }).internal); + + this._internal.resolver = (function _resolver() { if (_resolver._self.completed) { return; } _resolver._self.errors = false; @@ -143,8 +142,8 @@ function Promise(promiseFunc) _resolver._self.emit.apply(_resolver._self, args); _resolver._self.emit('settled'); } - }; - this._internal.rejector = function _rejector() + }).internal; + this._internal.rejector = (function _rejector() { if (_rejector._self.completed) { return; } _rejector._self.errors = true; @@ -168,24 +167,24 @@ function Promise(promiseFunc) _rejector._self.emit.apply(_rejector._self, args); _rejector._self.emit('settled'); - }; + }).internal; this._internal.rejector.internal = true; this.catch = function(func) { var rt = getRootPromise(this); - this._internal.once('rejected', event_switcher(this, func).func); + this._internal.once('rejected', event_switcher(this, func).func.internal); } this.finally = function (func) { - this._internal.once('settled', event_switcher(this, func).func); + this._internal.once('settled', event_switcher(this, func).func.internal); }; this.then = function (resolved, rejected) { - if (resolved) { this._internal.once('resolved', event_switcher(this, resolved).func); } + if (resolved) { this._internal.once('resolved', event_switcher(this, resolved).func.internal); } if (rejected) { - this._internal.once('rejected', event_switcher(this, rejected).func); + this._internal.once('rejected', event_switcher(this, rejected).func.internal); } var retVal = new Promise(function (r, j) { this._rej = j; }); @@ -220,6 +219,7 @@ function Promise(promiseFunc) this._internal.once('rejected', retVal._internal.rejector); } this.__childPromise = retVal; + return (retVal); }; @@ -243,7 +243,10 @@ function Promise(promiseFunc) { // Save reference of this object refTable[this._internal._hashCode()] = this._internal; - this._internal.once('settled', function () { delete refTable[this._hashCode()]; }); + this._internal.once('settled', (function () + { + delete refTable[this._hashCode()]; + }).internal); } Object.defineProperty(this, "completed", { get: function () @@ -251,6 +254,19 @@ function Promise(promiseFunc) return (this._internal.completed); } }); + + this._internal.once('settled', (function () + { + delete this.resolver._self; + delete this.rejector._self; + delete this.promise._up; + delete this.promise.__childPromise; + delete this.promise.promise; + + delete this._up; + delete this.__childPromise; + delete this.promise; + }).internal); } Promise.resolve = function resolve()