diff --git a/xpath.js b/xpath.js index 0868428..4882a27 100644 --- a/xpath.js +++ b/xpath.js @@ -167,8 +167,19 @@ var xpath = (typeof exports === 'undefined') ? {} : exports; var prototypeConcat = Array.prototype.concat; + // .apply() fails above a certain number of arguments - https://github.com/goto100/xpath/pull/98 + var MAX_ARGUMENT_LENGTH = 32767; + function flatten(arr) { - return prototypeConcat.apply([], arr); + var result = []; + + for (var start = 0; start < arr.length; start += MAX_ARGUMENT_LENGTH) { + var chunk = arr.slice(start, start + MAX_ARGUMENT_LENGTH); + + result = prototypeConcat.apply(result, chunk); + } + + return result; } function assign(target, varArgs) { // .length of function is 2