From e941de50e8af46ac723f38d45cea971af989ca11 Mon Sep 17 00:00:00 2001 From: John-David Dalton Date: Fri, 15 Mar 2013 06:34:13 -0700 Subject: [PATCH] Add fast path for `callback` back to `_.forEach` and ensure `createCallback` is called from `lodash`. Former-commit-id: 5d589344897878d529d59ebba987a163b9704b37 --- build.js | 6 +-- dist/lodash.js | 4 +- dist/lodash.min.js | 72 +++++++++++++++++------------------ dist/lodash.underscore.js | 2 +- dist/lodash.underscore.min.js | 2 +- 5 files changed, 43 insertions(+), 43 deletions(-) diff --git a/build.js b/build.js index 3016a17ae..c9ae8105a 100755 --- a/build.js +++ b/build.js @@ -1830,7 +1830,7 @@ ' length = collection ? collection.length : 0;', '', " if (typeof length == 'number') {", - ' callback = createCallback(callback, thisArg);', + " callback = callback && typeof thisArg == 'undefined' ? callback : lodash.createCallback(callback, thisArg);", ' while (++index < length) {', ' if (callback(collection[index], index, collection) === false) {', ' break;', @@ -1849,7 +1849,7 @@ ' var index = -1,', ' length = collection ? collection.length : 0;', '', - ' callback = createCallback(callback, thisArg);', + ' callback = lodash.createCallback(callback, thisArg);', " if (typeof length == 'number') {", ' var result = Array(length);', ' while (++index < length) {', @@ -2285,7 +2285,7 @@ ' }', ' if (callback != null) {', ' seen = [];', - ' callback = createCallback(callback, thisArg);', + ' callback = lodash.createCallback(callback, thisArg);', ' }', ' while (++index < length) {', ' var value = array[index],', diff --git a/dist/lodash.js b/dist/lodash.js index 9b796f0d4..ceec93cd8 100644 --- a/dist/lodash.js +++ b/dist/lodash.js @@ -2318,7 +2318,7 @@ length = collection ? collection.length : 0; if (typeof length == 'number') { - callback = createCallback(callback, thisArg); + callback = callback && typeof thisArg == 'undefined' ? callback : lodash.createCallback(callback, thisArg); while (++index < length) { if (callback(collection[index], index, collection) === false) { break; @@ -2453,7 +2453,7 @@ var index = -1, length = collection ? collection.length : 0; - callback = createCallback(callback, thisArg); + callback = lodash.createCallback(callback, thisArg); if (typeof length == 'number') { var result = Array(length); while (++index < length) { diff --git a/dist/lodash.min.js b/dist/lodash.min.js index bd9bb013c..fbf4a6aab 100644 --- a/dist/lodash.min.js +++ b/dist/lodash.min.js @@ -4,39 +4,39 @@ * Build: `lodash modern -o ./dist/lodash.js` * Underscore.js 1.4.4 underscorejs.org/LICENSE */ -;(function(n){function t(o){function f(n){if(!n||Xt.call(n)!=S)return a;var t=n.valueOf,e=typeof t=="function"&&(e=Ht(t))&&Ht(e);return e?n==e||Ht(n)==e:L(n)}function q(n){return n&&typeof n=="object"&&!pe(n)&&Jt.call(n,"__wrapped__")?n:new U(n)}function R(n,t,e){var r=n.length,u=r-t>=e;if(u){var a={};for(e=t-1;++et||typeof n=="undefined")return 1;if(ne?0:e);++re?re(0,u+e):e)||0,typeof u=="number"?o=-1<(rt(n)?n.indexOf(t,e):bt(n,t,e)):le(n,function(n){return++ru&&(u=o)}}else t=!t&&rt(n)?T:q.createCallback(t,e),lt(n,function(n,e,a){e=t(n,e,a),e>r&&(r=e,u=n)});return u -}function vt(n,t,e,r){if(!n)return e;var u=3>arguments.length;t=q.createCallback(t,r,4);var o=-1,i=n.length;if(typeof i=="number")for(u&&(e=n[++o]);++oarguments.length;if(typeof u!="number")var i=se(n),u=i.length;return t=q.createCallback(t,r,4),lt(n,function(r,f,c){f=i?i[--u]:--u,e=o?(o=a,n[f]):t(e,n[f],f,c)}),e}function ht(n,t,e){var r;t=q.createCallback(t,e),e=-1;var u=n?n.length:0; -if(typeof u=="number")for(;++ee?re(0,u+e):e||0)-1;else if(e)return r=_t(n,t),n[r]===t?r:-1;for(;++r>>1,e(n[r])bt(c,s))&&((e||l)&&c.push(s),f.push(r))}return f}function wt(n,t){for(var e=-1,r=n?n.length:0,u={};++e/g,evaluate:/<%([\s\S]+?)%>/g,interpolate:m,variable:"",imports:{_:q}},Et={a:"q,w,g",g:"var a=arguments,b=0,c=typeof g=='number'?2:a.length;while(++b":">",'"':""","'":"'"},ge=Y(ve),he=K(Et,{g:Et.g.replace(";",";if(c>3&&typeof a[c-2]=='function'){var d=o.createCallback(a[--c-1],a[c--],2);}else if(c>2&&typeof a[c-1]=='function'){d=a[--c];}"),e:"u[i]=d?d(u[i],m[i]):m[i]"}),ye=K(Et);return Bt&&i&&typeof Qt=="function"&&(xt=jt(Qt,o)),Qt=8==ae("08")?ae:function(n,t){return ae(rt(n)?n.replace(b,""):n,t||0) -},q.after=function(n,t){return 1>n?t():function(){return 1>--n?t.apply(this,arguments):void 0}},q.assign=he,q.at=function(n){for(var t=-1,e=Vt.apply(Dt,G(arguments,1)),r=e.length,u=At(r);++tbt(f,c)){o&&f.push(c);for(var p=e;--p;)if(!(r[p]||(r[p]=R(t[p],0,100)))(c))continue n;i.push(c)}}return i},q.invert=Y,q.invoke=function(n,t){var e=G(arguments,2),r=-1,u=typeof t=="function",a=n?n.length:0,o=At(typeof a=="number"?a:0);return lt(n,function(n){o[++r]=(u?t:n[t]).apply(n,e) -}),o},q.keys=se,q.map=pt,q.max=st,q.memoize=function(n,t){var e={};return function(){var r=(t?t.apply(this,arguments):arguments[0])+"";return Jt.call(e,r)?e[r]:e[r]=n.apply(this,arguments)}},q.merge=ut,q.min=function(n,t,e){var r=1/0,u=r;if(!t&&pe(n)){e=-1;for(var a=n.length;++ebt(a,e,1))&&(u[e]=n)}),u},q.once=function(n){var t,e;return function(){return t?e:(t=r,e=n.apply(this,arguments),n=u,e)}},q.pairs=function(n){for(var t=-1,e=se(n),r=e.length,u=At(r);++te?re(0,r+e):ue(e,r-1))+1);r--;)if(n[r]===t)return r;return-1},q.mixin=Nt,q.noConflict=function(){return o._=Kt,this -},q.parseInt=Qt,q.random=function(n,t){return n==u&&t==u&&(t=1),n=+n||0,t==u&&(t=n,n=0),n+Gt(oe()*((+t||0)-n+1))},q.reduce=vt,q.reduceRight=gt,q.result=function(n,t){var r=n?n[t]:e;return nt(r)?n[t]():r},q.runInContext=t,q.size=function(n){var t=n?n.length:0;return typeof t=="number"?t:se(n).length},q.some=ht,q.sortedIndex=_t,q.template=function(n,t,u){var a=q.templateSettings;n||(n=""),u=ye({},u,a);var o,i=ye({},u.imports,a.imports),a=se(i),i=at(i),f=0,c=u.interpolate||d,l="__p+='",c=Rt((u.escape||d).source+"|"+c.source+"|"+(c===m?h:d).source+"|"+(u.evaluate||d).source+"|$","g"); -n.replace(c,function(t,e,u,a,i,c){return u||(u=a),l+=n.slice(f,c).replace(k,P),e&&(l+="'+__e("+e+")+'"),i&&(o=r,l+="';"+i+";__p+='"),u&&(l+="'+((__t=("+u+"))==null?'':__t)+'"),f=c+t.length,t}),l+="';\n",c=u=u.variable,c||(u="obj",l="with("+u+"){"+l+"}"),l=(o?l.replace(p,""):l).replace(s,"$1").replace(v,"$1;"),l="function("+u+"){"+(c?"":u+"||("+u+"={});")+"var __t,__p='',__e=_.escape"+(o?",__j=Array.prototype.join;function print(){__p+=__j.call(arguments,'')}":";")+l+"return __p}";try{var g=$t(a,"return "+l).apply(e,i) -}catch(y){throw y.source=l,y}return t?g(t):(g.source=l,g)},q.unescape=function(n){return n==u?"":(n+"").replace(g,H)},q.uniqueId=function(n){var t=++c;return(n==u?"":n+"")+t},q.all=it,q.any=ht,q.detect=ct,q.foldl=vt,q.foldr=gt,q.include=ot,q.inject=vt,le(q,function(n,t){q.prototype[t]||(q.prototype[t]=function(){var t=[this.__wrapped__];return Lt.apply(t,arguments),n.apply(q,t)})}),q.first=yt,q.last=function(n,t,e){if(n){var r=0,a=n.length;if(typeof t!="number"&&t!=u){var o=a;for(t=q.createCallback(t,e);o--&&t(n[o],o,n);)r++ -}else if(r=t,r==u||e)return n[a-1];return G(n,re(0,a-r))}},q.take=yt,q.head=yt,le(q,function(n,t){q.prototype[t]||(q.prototype[t]=function(t,e){var r=n(this.__wrapped__,t,e);return t==u||e&&typeof t!="function"?r:new U(r)})}),q.VERSION="1.0.1",q.prototype.toString=function(){return this.__wrapped__+""},q.prototype.value=St,q.prototype.valueOf=St,lt(["join","pop","shift"],function(n){var t=Dt[n];q.prototype[n]=function(){return t.apply(this.__wrapped__,arguments)}}),lt(["push","reverse","sort","unshift"],function(n){var t=Dt[n]; -q.prototype[n]=function(){return t.apply(this.__wrapped__,arguments),this}}),lt(["concat","slice","splice"],function(n){var t=Dt[n];q.prototype[n]=function(){return new U(t.apply(this.__wrapped__,arguments))}}),q}var e,r=!0,u=null,a=!1,o=typeof exports=="object"&&exports,i=typeof module=="object"&&module&&module.exports==o&&module,f=typeof global=="object"&&global;f.global===f&&(n=f);var c=0,l={},p=/\b__p\+='';/g,s=/\b(__p\+=)''\+/g,v=/(__e\(.*?\)|\b__t\))\+'';/g,g=/&(?:amp|lt|gt|quot|#39);/g,h=/\$\{([^\\}]*(?:\\.[^\\}]*)*)\}/g,y=/\w*$/,m=/<%=([\s\S]+?)%>/g,b=/^0+(?=.$)/,d=/($^)/,_=/[&<>"']/g,k=/['\n\r\t\u2028\u2029\\]/g,w="Array Boolean Date Function Math Number Object RegExp String _ attachEvent clearTimeout isFinite isNaN parseInt setImmediate setTimeout".split(" "),j="[object Arguments]",C="[object Array]",x="[object Boolean]",O="[object Date]",N="[object Number]",S="[object Object]",A="[object RegExp]",E="[object String]",I={"[object Function]":a}; -I[j]=I[C]=I[x]=I[O]=I[N]=I[S]=I[A]=I[E]=r;var $={"boolean":a,"function":r,object:r,number:a,string:a,undefined:a},B={"\\":"\\","'":"'","\n":"n","\r":"r"," ":"t","\u2028":"u2028","\u2029":"u2029"},F=t();typeof define=="function"&&typeof define.amd=="object"&&define.amd?(n._=F,define(function(){return F})):o&&!o.nodeType?i?(i.exports=F)._=F:o._=F:n._=F})(this); \ No newline at end of file +;(function(n){function t(r){function a(n){return n&&typeof n=="object"&&!oe(n)&&Mt.call(n,"__wrapped__")?n:new z(n)}function $(n,t,e){var r=n.length,u=r-t>=e;if(u){var a={};for(e=t-1;++et||typeof n=="undefined")return 1;if(ne?0:e);++re?Yt(0,u+e):e)||0,typeof u=="number"?a=-1<(Z(n)?n.indexOf(t,e):gt(n,t,e)):ae(n,function(n){return++ru&&(u=i)}}else t=!t&&Z(n)?B:a.createCallback(t,e),ot(n,function(n,e,a){e=t(n,e,a),e>r&&(r=e,u=n)});return u}function ct(n,t,e,r){if(!n)return e;var u=3>arguments.length;t=a.createCallback(t,r,4);var o=-1,i=n.length;if(typeof i=="number")for(u&&(e=n[++o]);++oarguments.length; +if(typeof u!="number")var i=ie(n),u=i.length;return t=a.createCallback(t,r,4),ot(n,function(r,a,f){a=i?i[--u]:--u,e=o?(o=!1,n[a]):t(e,n[a],a,f)}),e}function pt(n,t,e){var r;t=a.createCallback(t,e),e=-1;var u=n?n.length:0;if(typeof u=="number")for(;++ee?Yt(0,u+e):e||0)-1;else if(e)return r=yt(n,t),n[r]===t?r:-1;for(;++r>>1,e(n[r])gt(f,p))&&((e||c)&&f.push(p),i.push(r))}return i +}function bt(n,t){for(var e=-1,r=n?n.length:0,u={};++e/g,evaluate:/<%([\s\S]+?)%>/g,interpolate:g,variable:"",imports:{_:a}},xt={a:"q,w,g",g:"var a=arguments,b=0,c=typeof g=='number'?2:a.length;while(++b":">",'"':""","'":"'"},ce=L(fe),le=R(xt,{g:xt.g.replace(";",";if(c>3&&typeof a[c-2]=='function'){var d=o.createCallback(a[--c-1],a[c--],2);}else if(c>2&&typeof a[c-1]=='function'){d=a[--c];}"),e:"u[i]=d?d(u[i],m[i]):m[i]"}),pe=R(xt),se=function(n){if(!n||Ht.call(n)!=x)return!1;var t=n.valueOf,e=typeof t=="function"&&(e=Pt(t))&&Pt(e); +return e?n==e||Pt(n)==e:V(n)};return St&&u&&typeof Vt=="function"&&(_t=dt(Vt,r)),Vt=8==ne("08")?ne:function(n,t){return ne(Z(n)?n.replace(h,""):n,t||0)},a.after=function(n,t){return 1>n?t():function(){return 1>--n?t.apply(this,arguments):void 0}},a.assign=le,a.at=function(n){for(var t=-1,e=zt.apply(Bt,P(arguments,1)),r=e.length,u=Ct(r);++tgt(f,c)){o&&f.push(c);for(var p=e;--p;)if(!(r[p]||(r[p]=$(t[p],0,100)))(c))continue n;i.push(c)}}return i},a.invert=L,a.invoke=function(n,t){var e=P(arguments,2),r=-1,u=typeof t=="function",a=n?n.length:0,o=Ct(typeof a=="number"?a:0);return ot(n,function(n){o[++r]=(u?t:n[t]).apply(n,e) +}),o},a.keys=ie,a.map=it,a.max=ft,a.memoize=function(n,t){var e={};return function(){var r=(t?t.apply(this,arguments):arguments[0])+"";return Mt.call(e,r)?e[r]:e[r]=n.apply(this,arguments)}},a.merge=nt,a.min=function(n,t,e){var r=1/0,u=r;if(!t&&oe(n)){e=-1;for(var o=n.length;++egt(o,e,1))&&(u[e]=n)}),u},a.once=function(n){var t,e;return function(){return t?e:(t=!0,e=n.apply(this,arguments),n=null,e)}},a.pairs=function(n){for(var t=-1,e=ie(n),r=e.length,u=Ct(r);++te?Yt(0,r+e):Zt(e,r-1))+1);r--;)if(n[r]===t)return r;return-1},a.mixin=wt,a.noConflict=function(){return r._=qt,this +},a.parseInt=Vt,a.random=function(n,t){return null==n&&null==t&&(t=1),n=+n||0,null==t&&(t=n,n=0),n+Kt(te()*((+t||0)-n+1))},a.reduce=ct,a.reduceRight=lt,a.result=function(n,t){var r=n?n[t]:e;return W(r)?n[t]():r},a.runInContext=t,a.size=function(n){var t=n?n.length:0;return typeof t=="number"?t:ie(n).length},a.some=pt,a.sortedIndex=yt,a.template=function(n,t,r){var u=a.templateSettings;n||(n=""),r=pe({},r,u);var o,i=pe({},r.imports,u.imports),u=ie(i),i=tt(i),p=0,v=r.interpolate||y,h="__p+='",v=It((r.escape||y).source+"|"+v.source+"|"+(v===g?s:y).source+"|"+(r.evaluate||y).source+"|$","g"); +n.replace(v,function(t,e,r,u,a,i){return r||(r=u),h+=n.slice(p,i).replace(b,T),e&&(h+="'+__e("+e+")+'"),a&&(o=!0,h+="';"+a+";__p+='"),r&&(h+="'+((__t=("+r+"))==null?'':__t)+'"),p=i+t.length,t}),h+="';\n",v=r=r.variable,v||(r="obj",h="with("+r+"){"+h+"}"),h=(o?h.replace(f,""):h).replace(c,"$1").replace(l,"$1;"),h="function("+r+"){"+(v?"":r+"||("+r+"={});")+"var __t,__p='',__e=_.escape"+(o?",__j=Array.prototype.join;function print(){__p+=__j.call(arguments,'')}":";")+h+"return __p}";try{var m=Nt(u,"return "+h).apply(e,i) +}catch(d){throw d.source=h,d}return t?m(t):(m.source=h,m)},a.unescape=function(n){return null==n?"":(n+"").replace(p,M)},a.uniqueId=function(n){var t=++o;return(null==n?"":n+"")+t},a.all=rt,a.any=pt,a.detect=at,a.foldl=ct,a.foldr=lt,a.include=et,a.inject=ct,ae(a,function(n,t){a.prototype[t]||(a.prototype[t]=function(){var t=[this.__wrapped__];return Ut.apply(t,arguments),n.apply(a,t)})}),a.first=st,a.last=function(n,t,e){if(n){var r=0,u=n.length;if(typeof t!="number"&&null!=t){var o=u;for(t=a.createCallback(t,e);o--&&t(n[o],o,n);)r++ +}else if(r=t,null==r||e)return n[u-1];return P(n,Yt(0,u-r))}},a.take=st,a.head=st,ae(a,function(n,t){a.prototype[t]||(a.prototype[t]=function(t,e){var r=n(this.__wrapped__,t,e);return null==t||e&&typeof t!="function"?r:new z(r)})}),a.VERSION="1.0.1",a.prototype.toString=function(){return this.__wrapped__+""},a.prototype.value=jt,a.prototype.valueOf=jt,ot(["join","pop","shift"],function(n){var t=Bt[n];a.prototype[n]=function(){return t.apply(this.__wrapped__,arguments)}}),ot(["push","reverse","sort","unshift"],function(n){var t=Bt[n]; +a.prototype[n]=function(){return t.apply(this.__wrapped__,arguments),this}}),ot(["concat","slice","splice"],function(n){var t=Bt[n];a.prototype[n]=function(){return new z(t.apply(this.__wrapped__,arguments))}}),a}var e,r=typeof exports=="object"&&exports,u=typeof module=="object"&&module&&module.exports==r&&module,a=typeof global=="object"&&global;a.global===a&&(n=a);var o=0,i={},f=/\b__p\+='';/g,c=/\b(__p\+=)''\+/g,l=/(__e\(.*?\)|\b__t\))\+'';/g,p=/&(?:amp|lt|gt|quot|#39);/g,s=/\$\{([^\\}]*(?:\\.[^\\}]*)*)\}/g,v=/\w*$/,g=/<%=([\s\S]+?)%>/g,h=/^0+(?=.$)/,y=/($^)/,m=/[&<>"']/g,b=/['\n\r\t\u2028\u2029\\]/g,d="Array Boolean Date Function Math Number Object RegExp String _ attachEvent clearTimeout isFinite isNaN parseInt setImmediate setTimeout".split(" "),_="[object Arguments]",k="[object Array]",w="[object Boolean]",j="[object Date]",C="[object Number]",x="[object Object]",O="[object RegExp]",N="[object String]",S={"[object Function]":!1}; +S[_]=S[k]=S[w]=S[j]=S[C]=S[x]=S[O]=S[N]=!0;var A={"boolean":!1,"function":!0,object:!0,number:!1,string:!1,undefined:!1},E={"\\":"\\","'":"'","\n":"n","\r":"r"," ":"t","\u2028":"u2028","\u2029":"u2029"},I=t();typeof define=="function"&&typeof define.amd=="object"&&define.amd?(n._=I,define(function(){return I})):r&&!r.nodeType?u?(u.exports=I)._=I:r._=I:n._=I})(this); \ No newline at end of file diff --git a/dist/lodash.underscore.js b/dist/lodash.underscore.js index 924e8fb4b..7196515b4 100644 --- a/dist/lodash.underscore.js +++ b/dist/lodash.underscore.js @@ -1733,7 +1733,7 @@ length = collection ? collection.length : 0; if (typeof length == 'number') { - callback = createCallback(callback, thisArg); + callback = callback && typeof thisArg == 'undefined' ? callback : createCallback(callback, thisArg); while (++index < length) { if (callback(collection[index], index, collection) === indicatorObject) { break; diff --git a/dist/lodash.underscore.min.js b/dist/lodash.underscore.min.js index e2dace723..daedc7d07 100644 --- a/dist/lodash.underscore.min.js +++ b/dist/lodash.underscore.min.js @@ -10,7 +10,7 @@ if(e)for(var u in e)n[u]=e[u]}return n}function h(n){if(!n)return n;for(var t=1, var i=typeof n,a=typeof t;if(n===n&&(!n||"function"!=i&&"object"!=i)&&(!t||"function"!=a&&"object"!=a))return K;if(n==J||t==J)return n===t;if(a=xt.call(n),i=xt.call(t),a!=i)return K;switch(a){case it:case at:return+n==+t;case ft:return n!=+n?t!=+t:0==n?1/n==1/t:n==+t;case lt:case pt:return n==t+""}if(i=a==ot,!i){if(n instanceof e||t instanceof e)return b(n.__wrapped__||n,t.__wrapped__||t,u,o);if(a!=ct)return K;var a=n.constructor,f=t.constructor;if(a!=f&&(!d(a)||!(a instanceof a&&d(f)&&f instanceof f)))return K }for(u||(u=[]),o||(o=[]),a=u.length;a--;)if(u[a]==n)return o[a]==t;var c=H,l=0;if(u.push(n),o.push(t),i){if(l=t.length,c=l==n.length)for(;l--&&(c=b(n[l],t[l],u,o)););return c}return r(t,function(t,r,e){return jt.call(e,r)?(l++,!(c=jt.call(n,r)&&b(n[r],t,u,o))&&Z):void 0}),c&&r(n,function(n,t,r){return jt.call(r,t)?!(c=-1<--l)&&Z:void 0}),c}function d(n){return typeof n=="function"}function j(n){return n?st[typeof n]:K}function w(n){return typeof n=="number"||xt.call(n)==ft}function A(n){return typeof n=="string"||xt.call(n)==pt }function x(n){for(var t=-1,r=$t(n),e=r.length,u=Array(e);++te&&(e=r,u=n) +});return u}function N(n,t,r){var e;return t=V(t,r),k(n,function(n,r,u){return t(n,r,u)?(e=n,Z):void 0}),e}function k(n,r,e){var u=-1,o=n?n.length:0;if(typeof o=="number")for(r=r&&typeof e=="undefined"?r:V(r,e);++ue&&(e=r,u=n) });else for(;++ou&&(u=r);return u}function R(n,r,e,u){if(!n)return e;var o=3>arguments.length;r=V(r,u,4);var i=-1,a=n.length;if(typeof a=="number")for(o&&(e=n[++i]);++iarguments.length;if(typeof u!="number")var i=$t(n),u=i.length;return t=V(t,e,4),k(n,function(e,a,f){a=i?i[--u]:--u,r=o?(o=K,n[a]):t(r,n[a],a,f)}),r}function D(n,r,e){var u;r=V(r,e),e=-1;var o=n?n.length:0; if(typeof o=="number")for(;++er?Bt(0,u+r):r||0)-1; else if(r)return e=C(n,t),n[e]===t?e:-1;for(;++e>>1,r(n[e])T(a,f))&&(r&&a.push(f),i.push(e))