From 691ae4b21732db92c125436b5860d2f1622b61d2 Mon Sep 17 00:00:00 2001 From: Jayson Harshbarger Date: Wed, 10 Jun 2015 21:19:57 +0900 Subject: [PATCH 1/2] Update Signal.js Fix for issue #67 --- src/Signal.js | 8 ++++++-- 1 file changed, 6 insertions(+), 2 deletions(-) diff --git a/src/Signal.js b/src/Signal.js index 23469c6..9d0c6ad 100644 --- a/src/Signal.js +++ b/src/Signal.js @@ -205,9 +205,13 @@ if (! this.active) { return; } + + var len = arguments.length, paramsArr = new Array(len); + for (var i=0; i < len; ++i) { + paramsArr[i] = arguments[i]; + } - var paramsArr = Array.prototype.slice.call(arguments), - n = this._bindings.length, + var n = this._bindings.length, bindings; if (this.memorize) { From 9749c33811066064461b71e42a6281699c53fcd5 Mon Sep 17 00:00:00 2001 From: Jayson Harshbarger Date: Wed, 10 Jun 2015 23:20:32 +0900 Subject: [PATCH 2/2] Added in-code note Added a description of the issue in code. --- src/Signal.js | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/src/Signal.js b/src/Signal.js index 9d0c6ad..338cc01 100644 --- a/src/Signal.js +++ b/src/Signal.js @@ -206,6 +206,11 @@ return; } + /** + * When copying the arguments variable using Array.prototype.slice.call V8 disables optimization for the calling method. + * We avoid this issue here by coping arguments to a pre-allocated array. + * see https://code.google.com/p/v8/issues/detail?id=3037 + */ var len = arguments.length, paramsArr = new Array(len); for (var i=0; i < len; ++i) { paramsArr[i] = arguments[i];