Changeset 167297 in webkit
- Timestamp:
- Apr 14, 2014 11:13:17 PM (10 years ago)
- Location:
- trunk
- Files:
-
- 3 deleted
- 5 edited
Legend:
- Unmodified
- Added
- Removed
-
trunk/LayoutTests/ChangeLog
r167295 r167297 1 2014-04-14 Commit Queue <commit-queue@webkit.org> 2 3 Unreviewed, rolling out r167272. 4 https://bugs.webkit.org/show_bug.cgi?id=131666 5 6 Broke multiple tests (Requested by ap on #webkit). 7 8 Reverted changeset: 9 10 "Function.bind itself is too slow" 11 https://bugs.webkit.org/show_bug.cgi?id=131636 12 http://trac.webkit.org/changeset/167272 13 1 14 2014-04-14 Jon Honeycutt <jhoneycutt@apple.com> 2 15 -
trunk/LayoutTests/js/regress/script-tests/function-bind.js
r167272 r167297 7 7 var g2 = foo.bind({}, 1, 2); 8 8 var g3 = foo.bind({}, 1, 2, 3); 9 var start = new Date; 9 10 10 11 var result = 0; … … 23 24 result |= 0; 24 25 } 26 print((new Date - start)) 25 27 if (result != 1596499010) 26 28 throw "Bad result: " + result; -
trunk/Source/JavaScriptCore/ChangeLog
r167293 r167297 1 2014-04-14 Commit Queue <commit-queue@webkit.org> 2 3 Unreviewed, rolling out r167272. 4 https://bugs.webkit.org/show_bug.cgi?id=131666 5 6 Broke multiple tests (Requested by ap on #webkit). 7 8 Reverted changeset: 9 10 "Function.bind itself is too slow" 11 https://bugs.webkit.org/show_bug.cgi?id=131636 12 http://trac.webkit.org/changeset/167272 13 1 14 2014-04-14 Geoffrey Garen <ggaren@apple.com> 2 15 -
trunk/Source/JavaScriptCore/builtins/Function.prototype.js
r167272 r167297 41 41 throw new @TypeError("Cannot bind non-function object."); 42 42 var bindingFunction; 43 var oversizedCall = undefined; 43 44 if (arguments.length <= 1) { 44 bindingFunction = function bindingFunction() { 45 var thisValue = bindingFunction.@boundThisValue; 46 var boundFunction = bindingFunction.@boundFunction; 45 bindingFunction = function () { 47 46 if (@IsConstructor) 48 47 return new boundFunction(...arguments); … … 53 52 switch (length - 1 /* skip thisValue */) { 54 53 case 1: { 55 bindingFunction = function bindingFunction() { 56 var thisValue = bindingFunction.@boundThisValue; 57 var boundFunction = bindingFunction.@boundFunction; 58 var boundParameter = bindingFunction.@boundParameter; 54 var boundParameter = arguments[1]; 55 bindingFunction = function () { 59 56 var argumentLength = arguments.length; 60 57 if (!argumentLength) { … … 79 76 } 80 77 var completeArguments = [boundParameter, ...arguments]; 81 if (! bindingFunction.@boundOversizedCallThunk) {82 bindingFunction.@boundOversizedCallThunk= function (isConstruct, boundFunction, thisValue, completeArguments) {78 if (!oversizedCall) { 79 oversizedCall = function (isConstruct, boundFunction, thisValue, completeArguments) { 83 80 if (isConstruct) 84 81 return new boundFunction(...completeArguments); … … 86 83 } 87 84 } 88 return bindingFunction.@boundOversizedCallThunk(@IsConstructor, boundFunction, thisValue, completeArguments);85 return oversizedCall(@IsConstructor, boundFunction, thisValue, completeArguments); 89 86 } 90 bindingFunction.@boundParameter = arguments[1];91 87 break; 92 88 } 93 89 case 2: { 94 bindingFunction = function bindingFunction() { 95 var thisValue = bindingFunction.@boundThisValue; 96 var boundFunction = bindingFunction.@boundFunction; 97 var boundParameter1 = bindingFunction.@boundParameter1; 98 var boundParameter2 = bindingFunction.@boundParameter2; 90 var boundParameter1 = arguments[1]; 91 var boundParameter2 = arguments[2]; 92 bindingFunction = function () { 99 93 if (!arguments.length) { 100 94 if (@IsConstructor) … … 118 112 } 119 113 var completeArguments = [boundParameter1, boundParameter2, ...arguments]; 120 if (! bindingFunction.@boundOversizedCallThunk) {121 bindingFunction.@boundOversizedCallThunk= function (isConstruct, boundFunction, thisValue, completeArguments) {114 if (!oversizedCall) { 115 oversizedCall = function (isConstruct, boundFunction, thisValue, completeArguments) { 122 116 if (isConstruct) 123 117 return new boundFunction(...completeArguments); … … 125 119 } 126 120 } 127 return bindingFunction.@boundOversizedCallThunk(@IsConstructor, boundFunction, thisValue, completeArguments);121 return oversizedCall(@IsConstructor, boundFunction, thisValue, completeArguments); 128 122 } 129 bindingFunction.@boundParameter1 = arguments[1];130 bindingFunction.@boundParameter2 = arguments[2];131 123 break; 132 124 } 133 125 case 3: { 134 bindingFunction = function bindingFunction() { 135 var thisValue = bindingFunction.@boundThisValue; 136 var boundFunction = bindingFunction.@boundFunction; 137 var boundParameter1 = bindingFunction.@boundParameter1; 138 var boundParameter2 = bindingFunction.@boundParameter2; 139 var boundParameter3 = bindingFunction.@boundParameter3; 126 var boundParameter1 = arguments[1]; 127 var boundParameter2 = arguments[2]; 128 var boundParameter3 = arguments[3]; 129 bindingFunction = function () { 140 130 if (!arguments.length) { 141 131 if (@IsConstructor) … … 159 149 } 160 150 var completeArguments = [boundParameter1, boundParameter2, boundParameter3, ...arguments]; 161 if (! bindingFunction.@boundOversizedCallThunk) {162 bindingFunction.@boundOversizedCallThunk= function (isConstruct, boundFunction, thisValue, completeArguments) {151 if (!oversizedCall) { 152 oversizedCall = function (isConstruct, boundFunction, thisValue, completeArguments) { 163 153 if (isConstruct) 164 154 return new boundFunction(...completeArguments); … … 166 156 } 167 157 } 168 return bindingFunction.@boundOversizedCallThunk(@IsConstructor, boundFunction, thisValue, completeArguments);158 return oversizedCall(@IsConstructor, boundFunction, thisValue, completeArguments); 169 159 } 170 bindingFunction.@boundParameter1 = arguments[1];171 bindingFunction.@boundParameter2 = arguments[2];172 bindingFunction.@boundParameter3 = arguments[3];173 160 break; 174 161 } … … 178 165 boundParameters[i - 1] = arguments[i]; 179 166 180 bindingFunction = function bindingFunction() { 181 var thisValue = bindingFunction.@boundThisValue; 182 var boundFunction = bindingFunction.@boundFunction; 183 var boundParameters = bindingFunction.@boundParameters; 167 bindingFunction = function () { 184 168 if (!arguments.length) { 185 169 if (@IsConstructor) 186 return new boundFunction(... @boundParameters);170 return new boundFunction(...boundParameters); 187 171 return boundFunction.@apply(thisValue, boundParameters); 188 172 } 189 173 190 174 var completeArguments = []; 191 var boundLength = boundParameters.length; 175 var localBoundParameters = boundParameters; 176 var boundLength = localBoundParameters.length; 192 177 for (var i = 0; i < boundLength; i++) 193 completeArguments[i] = boundParameters[i];178 completeArguments[i] = localBoundParameters[i]; 194 179 for (var i = 0; i < arguments.length; i++) 195 180 completeArguments[i + boundLength] = arguments[i]; … … 199 184 return boundFunction.@apply(thisValue, completeArguments); 200 185 } 201 bindingFunction.@boundParameters = boundParameters;202 186 } 203 187 } 204 bindingFunction.@boundThisValue = thisValue;205 188 bindingFunction.@boundFunctionName = this.name; 206 189 bindingFunction.@boundFunction = boundFunction.@boundFunction || boundFunction; -
trunk/Source/JavaScriptCore/runtime/CommonIdentifiers.h
r167272 r167297 224 224 macro(boundFunctionName) \ 225 225 macro(boundFunctionParameters) \ 226 macro(boundThisValue) \227 macro(boundParameter) \228 macro(boundParameter1) \229 macro(boundParameter2) \230 macro(boundParameter3) \231 macro(boundParameters) \232 macro(boundOversizedCallThunk) \233 226 macro(boundFunction) \ 234 227 macro(boundFunctionLength) \
Note: See TracChangeset
for help on using the changeset viewer.