From f37294521116dc7dd755b5422aa8ce7371e0e5dc Mon Sep 17 00:00:00 2001 From: Mattias Gaertner Date: Mon, 3 May 2021 18:52:49 +0000 Subject: [PATCH] pastojs: createCallback: store events in $events to create unique method pointers, issue #38845 git-svn-id: trunk@49331 - (cherry picked from commit f5d138eb087a46053efb39c6b3e417ef30cfe551) --- utils/pas2js/dist/rtl.js | 39 ++++++++++++++++++++++++--------------- 1 file changed, 24 insertions(+), 15 deletions(-) diff --git a/utils/pas2js/dist/rtl.js b/utils/pas2js/dist/rtl.js index 9209239f8c..87716c52a7 100644 --- a/utils/pas2js/dist/rtl.js +++ b/utils/pas2js/dist/rtl.js @@ -229,7 +229,10 @@ var rtl = { createCallback: function(scope, fn){ var cb; if (typeof(fn)==='string'){ - cb = function(){ + if (!scope.$events) scope.$events = {}; + cb = scope.$events[fn]; + if (cb) return cb; + scope.$events[fn] = cb = function(){ return scope[fn].apply(scope,arguments); }; } else { @@ -243,32 +246,38 @@ var rtl = { }, createSafeCallback: function(scope, fn){ - var cb = function(){ - try{ - if (typeof(fn)==='string'){ + var cb; + if (typeof(fn)==='string'){ + if (!scope.$events) scope.$events = {}; + cb = scope.$events[fn]; + if (cb) return cb; + scope.$events[fn] = cb = function(){ + try{ return scope[fn].apply(scope,arguments); - } else { + } catch (err) { + if (!rtl.handleUncaughtException(err)) throw err; + } + }; + } else { + cb = function(){ + try{ return fn.apply(scope,arguments); - }; - } catch (err) { - if (!rtl.handleUncaughtException(err)) throw err; - } + } catch (err) { + if (!rtl.handleUncaughtException(err)) throw err; + } + }; }; cb.scope = scope; cb.fn = fn; return cb; }, - cloneCallback: function(cb){ - return rtl.createCallback(cb.scope,cb.fn); - }, - eqCallback: function(a,b){ // can be a function or a function wrapper - if (a==b){ + if (a===b){ return true; } else { - return (a!=null) && (b!=null) && (a.fn) && (a.scope===b.scope) && (a.fn==b.fn); + return (a!=null) && (b!=null) && (a.fn) && (a.scope===b.scope) && (a.fn===b.fn); } },