diff --git a/lib/events.js b/lib/events.js index d615fc2132223f..0977f23445556c 100644 --- a/lib/events.js +++ b/lib/events.js @@ -22,6 +22,7 @@ 'use strict'; var domain; +var spliceOne; function EventEmitter() { EventEmitter.init.call(this); @@ -389,8 +390,11 @@ EventEmitter.prototype.removeListener = if (position === 0) list.shift(); - else + else { + if (spliceOne === undefined) + spliceOne = require('internal/util').spliceOne; spliceOne(list, position); + } if (list.length === 1) events[type] = list[0]; @@ -502,13 +506,6 @@ EventEmitter.prototype.eventNames = function eventNames() { return this._eventsCount > 0 ? Reflect.ownKeys(this._events) : []; }; -// About 1.5x faster than the two-arg version of Array#splice(). -function spliceOne(list, index) { - for (var i = index, k = i + 1, n = list.length; k < n; i += 1, k += 1) - list[i] = list[k]; - list.pop(); -} - function arrayClone(arr, n) { var copy = new Array(n); for (var i = 0; i < n; ++i) diff --git a/lib/internal/util.js b/lib/internal/util.js index 1a4e8d62477f2a..a87bc68e7693e1 100644 --- a/lib/internal/util.js +++ b/lib/internal/util.js @@ -266,6 +266,13 @@ function join(output, separator) { return str; } +// About 1.5x faster than the two-arg version of Array#splice(). +function spliceOne(list, index) { + for (var i = index, k = i + 1, n = list.length; k < n; i += 1, k += 1) + list[i] = list[k]; + list.pop(); +} + module.exports = { assertCrypto, cachedResult, @@ -276,10 +283,11 @@ module.exports = { filterDuplicateStrings, getConstructorOf, isError, + join, normalizeEncoding, objectToString, promisify, - join, + spliceOne, // Symbol used to customize promisify conversion customPromisifyArgs: kCustomPromisifyArgsSymbol, diff --git a/lib/url.js b/lib/url.js index 052fb3cd469ed9..2cc4488a3edfd9 100644 --- a/lib/url.js +++ b/lib/url.js @@ -25,6 +25,7 @@ const { toASCII } = process.binding('config').hasIntl ? process.binding('icu') : require('punycode'); const { hexTable } = require('internal/querystring'); +const { spliceOne } = require('internal/util'); // WHATWG URL implementation provided by internal/url const { @@ -948,13 +949,6 @@ Url.prototype.parseHost = function parseHost() { if (host) this.hostname = host; }; -// About 1.5x faster than the two-arg version of Array#splice(). -function spliceOne(list, index) { - for (var i = index, k = i + 1, n = list.length; k < n; i += 1, k += 1) - list[i] = list[k]; - list.pop(); -} - // These characters do not need escaping: // ! - . _ ~ // ' ( ) * :