Changeset 167297 in webkit


Ignore:
Timestamp:
Apr 14, 2014 11:13:17 PM (10 years ago)
Author:
commit-queue@webkit.org
Message:

Unreviewed, rolling out r167272.
https://bugs.webkit.org/show_bug.cgi?id=131666

Broke multiple tests (Requested by ap on #webkit).

Reverted changeset:

"Function.bind itself is too slow"
https://bugs.webkit.org/show_bug.cgi?id=131636
http://trac.webkit.org/changeset/167272

Location:
trunk
Files:
3 deleted
5 edited

Legend:

Unmodified
Added
Removed
  • trunk/LayoutTests/ChangeLog

    r167295 r167297  
     12014-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
    1142014-04-14  Jon Honeycutt  <jhoneycutt@apple.com>
    215
  • trunk/LayoutTests/js/regress/script-tests/function-bind.js

    r167272 r167297  
    77var g2 = foo.bind({}, 1, 2);
    88var g3 = foo.bind({}, 1, 2, 3);
     9var start = new Date;
    910
    1011var result = 0;
     
    2324    result |= 0;
    2425}
     26print((new Date - start))
    2527if (result != 1596499010)
    2628    throw "Bad result: " + result;
  • trunk/Source/JavaScriptCore/ChangeLog

    r167293 r167297  
     12014-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
    1142014-04-14  Geoffrey Garen  <ggaren@apple.com>
    215
  • trunk/Source/JavaScriptCore/builtins/Function.prototype.js

    r167272 r167297  
    4141        throw new @TypeError("Cannot bind non-function object.");
    4242    var bindingFunction;
     43    var oversizedCall = undefined;
    4344    if (arguments.length <= 1) {
    44         bindingFunction = function bindingFunction() {
    45             var thisValue = bindingFunction.@boundThisValue;
    46             var boundFunction = bindingFunction.@boundFunction;
     45        bindingFunction = function () {
    4746            if (@IsConstructor)
    4847                return new boundFunction(...arguments);
     
    5352        switch (length - 1 /* skip thisValue */) {
    5453        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 () {
    5956                var argumentLength = arguments.length;
    6057                if (!argumentLength) {
     
    7976                }
    8077                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) {
    8380                        if (isConstruct)
    8481                            return new boundFunction(...completeArguments);
     
    8683                    }
    8784                }
    88                 return bindingFunction.@boundOversizedCallThunk(@IsConstructor, boundFunction, thisValue, completeArguments);
     85                return oversizedCall(@IsConstructor, boundFunction, thisValue, completeArguments);
    8986            }
    90             bindingFunction.@boundParameter = arguments[1];
    9187            break;
    9288        }
    9389        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 () {
    9993                if (!arguments.length) {
    10094                    if (@IsConstructor)
     
    118112                }
    119113                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) {
    122116                        if (isConstruct)
    123117                            return new boundFunction(...completeArguments);
     
    125119                    }
    126120                }
    127                 return bindingFunction.@boundOversizedCallThunk(@IsConstructor, boundFunction, thisValue, completeArguments);
     121                return oversizedCall(@IsConstructor, boundFunction, thisValue, completeArguments);
    128122            }
    129             bindingFunction.@boundParameter1 = arguments[1];
    130             bindingFunction.@boundParameter2 = arguments[2];
    131123            break;
    132124        }
    133125        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 () {
    140130                if (!arguments.length) {
    141131                    if (@IsConstructor)
     
    159149                }
    160150                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) {
    163153                        if (isConstruct)
    164154                            return new boundFunction(...completeArguments);
     
    166156                    }
    167157                }
    168                 return bindingFunction.@boundOversizedCallThunk(@IsConstructor, boundFunction, thisValue, completeArguments);
     158                return oversizedCall(@IsConstructor, boundFunction, thisValue, completeArguments);
    169159            }
    170             bindingFunction.@boundParameter1 = arguments[1];
    171             bindingFunction.@boundParameter2 = arguments[2];
    172             bindingFunction.@boundParameter3 = arguments[3];
    173160            break;
    174161        }
     
    178165                boundParameters[i - 1] = arguments[i];
    179166           
    180             bindingFunction = function bindingFunction() {
    181                 var thisValue = bindingFunction.@boundThisValue;
    182                 var boundFunction = bindingFunction.@boundFunction;
    183                 var boundParameters = bindingFunction.@boundParameters;
     167            bindingFunction = function () {
    184168                if (!arguments.length) {
    185169                    if (@IsConstructor)
    186                         return new boundFunction(...@boundParameters);
     170                        return new boundFunction(...boundParameters);
    187171                    return boundFunction.@apply(thisValue, boundParameters);
    188172                }
    189173               
    190174                var completeArguments = [];
    191                 var boundLength = boundParameters.length;
     175                var localBoundParameters = boundParameters;
     176                var boundLength = localBoundParameters.length;
    192177                for (var i = 0; i < boundLength; i++)
    193                     completeArguments[i] = boundParameters[i];
     178                    completeArguments[i] = localBoundParameters[i];
    194179                for (var i = 0; i < arguments.length; i++)
    195180                    completeArguments[i + boundLength] = arguments[i];
     
    199184                    return boundFunction.@apply(thisValue, completeArguments);
    200185            }
    201             bindingFunction.@boundParameters = boundParameters;
    202186        }
    203187    }
    204     bindingFunction.@boundThisValue = thisValue;
    205188    bindingFunction.@boundFunctionName = this.name;
    206189    bindingFunction.@boundFunction = boundFunction.@boundFunction || boundFunction;
  • trunk/Source/JavaScriptCore/runtime/CommonIdentifiers.h

    r167272 r167297  
    224224    macro(boundFunctionName) \
    225225    macro(boundFunctionParameters) \
    226     macro(boundThisValue) \
    227     macro(boundParameter) \
    228     macro(boundParameter1) \
    229     macro(boundParameter2) \
    230     macro(boundParameter3) \
    231     macro(boundParameters) \
    232     macro(boundOversizedCallThunk) \
    233226    macro(boundFunction) \
    234227    macro(boundFunctionLength) \
Note: See TracChangeset for help on using the changeset viewer.