| OLD | NEW | 
 | (Empty) | 
|    1 // Copyright 2015 the V8 project authors. All rights reserved. |  | 
|    2 // Use of this source code is governed by a BSD-style license that can be |  | 
|    3 // found in the LICENSE file. |  | 
|    4 // |  | 
|    5 // Flags: --harmony-function-name |  | 
|    6  |  | 
|    7 (function testVariableDeclarationsFunction() { |  | 
|    8   'use strict'; |  | 
|    9   var a = function(){}; |  | 
|   10   assertEquals('a', a.name); |  | 
|   11   let b = () => {}; |  | 
|   12   assertEquals('b', b.name); |  | 
|   13   const c = ((function(){})); |  | 
|   14   assertEquals('c', c.name); |  | 
|   15  |  | 
|   16   var x = function(){}, y = () => {}, z = function withName() {}; |  | 
|   17   assertEquals('x', x.name); |  | 
|   18   assertEquals('y', y.name); |  | 
|   19   assertEquals('withName', z.name); |  | 
|   20 })(); |  | 
|   21  |  | 
|   22 (function testVariableDeclarationsClass() { |  | 
|   23   'use strict'; |  | 
|   24   var a = class {}; |  | 
|   25   assertEquals('a', a.name); |  | 
|   26   let b = ((class {})); |  | 
|   27   assertEquals('b', b.name); |  | 
|   28   // Should not overwrite name property. |  | 
|   29   const c = class { static name() { } } |  | 
|   30   assertEquals('function', typeof c.name); |  | 
|   31  |  | 
|   32   var x = class {}, y = class NamedClass {}; |  | 
|   33   assertEquals('x', x.name); |  | 
|   34   assertEquals('NamedClass', y.name); |  | 
|   35 })(); |  | 
|   36  |  | 
|   37 (function testObjectProperties() { |  | 
|   38   'use strict'; |  | 
|   39   var obj = { |  | 
|   40     a: function() {}, |  | 
|   41     b: () => {}, |  | 
|   42     c() { }, |  | 
|   43     get d() { }, |  | 
|   44     set d(val) { }, |  | 
|   45     x: function withName() { }, |  | 
|   46     y: class { }, |  | 
|   47     z: class ClassName { }, |  | 
|   48     42: function() {}, |  | 
|   49     4.2: function() {}, |  | 
|   50     __proto__: function() {}, |  | 
|   51   }; |  | 
|   52  |  | 
|   53   assertEquals('a', obj.a.name); |  | 
|   54   assertEquals('b', obj.b.name); |  | 
|   55   assertEquals('c', obj.c.name); |  | 
|   56   var dDescriptor = Object.getOwnPropertyDescriptor(obj, 'd'); |  | 
|   57   assertEquals('get d', dDescriptor.get.name); |  | 
|   58   assertEquals('set d', dDescriptor.set.name); |  | 
|   59   assertEquals('withName', obj.x.name); |  | 
|   60   assertEquals('y', obj.y.name); |  | 
|   61   assertEquals('ClassName', obj.z.name); |  | 
|   62   assertEquals('42', obj[42].name); |  | 
|   63   assertEquals('4.2', obj[4.2].name); |  | 
|   64   assertEquals('', obj.__proto__.name); |  | 
|   65 })(); |  | 
|   66  |  | 
|   67 (function testClassProperties() { |  | 
|   68   'use strict'; |  | 
|   69   class C { |  | 
|   70     a() { } |  | 
|   71     static b() { } |  | 
|   72     get c() { } |  | 
|   73     set c(val) { } |  | 
|   74     42() { } |  | 
|   75     static 43() { } |  | 
|   76     get 44() { } |  | 
|   77     set 44(val) { } |  | 
|   78   }; |  | 
|   79  |  | 
|   80   assertEquals('a', C.prototype.a.name); |  | 
|   81   assertEquals('b', C.b.name); |  | 
|   82   var descriptor = Object.getOwnPropertyDescriptor(C.prototype, 'c'); |  | 
|   83   assertEquals('get c', descriptor.get.name); |  | 
|   84   assertEquals('set c', descriptor.set.name); |  | 
|   85   assertEquals('42', C.prototype[42].name); |  | 
|   86   assertEquals('43', C[43].name); |  | 
|   87   var descriptor = Object.getOwnPropertyDescriptor(C.prototype, '44'); |  | 
|   88   assertEquals('get 44', descriptor.get.name); |  | 
|   89   assertEquals('set 44', descriptor.set.name); |  | 
|   90 })(); |  | 
|   91  |  | 
|   92 (function testComputedProperties() { |  | 
|   93   'use strict'; |  | 
|   94   var a = 'a'; |  | 
|   95   var b = 'b'; |  | 
|   96   var sym1 = Symbol('1'); |  | 
|   97   var sym2 = Symbol('2'); |  | 
|   98   var sym3 = Symbol('3'); |  | 
|   99   var symNoDescription = Symbol(); |  | 
|  100   var obj = { |  | 
|  101     [a]: function() {}, |  | 
|  102     [sym1]: function() {}, |  | 
|  103     [sym2]: function withName() {}, |  | 
|  104     [symNoDescription]: function() {}, |  | 
|  105  |  | 
|  106     get [sym3]() {}, |  | 
|  107     set [b](val) {}, |  | 
|  108   }; |  | 
|  109  |  | 
|  110   assertEquals('a', obj[a].name); |  | 
|  111   assertEquals('[1]', obj[sym1].name); |  | 
|  112   assertEquals('withName', obj[sym2].name); |  | 
|  113   assertEquals('', obj[symNoDescription].name); |  | 
|  114  |  | 
|  115   assertEquals('get [3]', Object.getOwnPropertyDescriptor(obj, sym3).get.name); |  | 
|  116   assertEquals('set b', Object.getOwnPropertyDescriptor(obj, 'b').set.name); |  | 
|  117  |  | 
|  118   var objMethods = { |  | 
|  119     [a]() {}, |  | 
|  120     [sym1]() {}, |  | 
|  121     [symNoDescription]: function() {}, |  | 
|  122   }; |  | 
|  123  |  | 
|  124   assertEquals('a', objMethods[a].name); |  | 
|  125   assertEquals('[1]', objMethods[sym1].name); |  | 
|  126   assertEquals('', objMethods[symNoDescription].name); |  | 
|  127  |  | 
|  128   class C { |  | 
|  129     [a]() { } |  | 
|  130     [sym1]() { } |  | 
|  131     static [sym2]() { } |  | 
|  132     [symNoDescription]() { } |  | 
|  133  |  | 
|  134     get [sym3]() { } |  | 
|  135     static set [b](val) { } |  | 
|  136   } |  | 
|  137  |  | 
|  138   assertEquals('a', C.prototype[a].name); |  | 
|  139   assertEquals('[1]', C.prototype[sym1].name); |  | 
|  140   assertEquals('[2]', C[sym2].name); |  | 
|  141   assertEquals('', C.prototype[symNoDescription].name); |  | 
|  142  |  | 
|  143   assertEquals('get [3]', Object.getOwnPropertyDescriptor(C.prototype, sym3).get
     .name); |  | 
|  144   assertEquals('set b', Object.getOwnPropertyDescriptor(C, 'b').set.name); |  | 
|  145 })(); |  | 
|  146  |  | 
|  147  |  | 
|  148 (function testAssignment() { |  | 
|  149   var basicFn, arrowFn, generatorFn, classLit; |  | 
|  150  |  | 
|  151   basicFn = function() { return true; }; |  | 
|  152   assertEquals('basicFn', basicFn.name); |  | 
|  153   var basicFn2 = basicFn; |  | 
|  154   assertEquals('basicFn', basicFn2.name); |  | 
|  155   basicFn = function functionWithName() { }; |  | 
|  156   assertEquals("functionWithName", basicFn.name); |  | 
|  157  |  | 
|  158   arrowFn = x => x; |  | 
|  159   assertEquals('arrowFn', arrowFn.name); |  | 
|  160   var arrowFn2 = arrowFn; |  | 
|  161   assertEquals('arrowFn', arrowFn2.name); |  | 
|  162  |  | 
|  163   generatorFn = function*() { yield true; }; |  | 
|  164   assertEquals('generatorFn', generatorFn.name); |  | 
|  165   var generatorFn2 = generatorFn; |  | 
|  166   assertEquals('generatorFn', generatorFn2.name); |  | 
|  167   generatorFn = function* generatorWithName() { }; |  | 
|  168   assertEquals("generatorWithName", generatorFn.name); |  | 
|  169  |  | 
|  170   classLit = class { constructor() {} }; |  | 
|  171   assertEquals('classLit', classLit.name); |  | 
|  172   var classLit2 = classLit; |  | 
|  173   assertEquals('classLit', classLit2.name); |  | 
|  174   classLit = class classWithName { constructor() {} }; |  | 
|  175   assertEquals('classWithName', classLit.name); |  | 
|  176   classLit = class { constructor() {} static name() {} }; |  | 
|  177   assertEquals('function', typeof classLit.name); |  | 
|  178   classLit = class { constructor() {} static get name() { return true; } }; |  | 
|  179   assertTrue(classLit.name); |  | 
|  180   classLit = class { constructor() {} static ['name']() {} }; |  | 
|  181   assertEquals('function', typeof classLit.name); |  | 
|  182   classLit = class { constructor() {} static get ['name']() { return true; } }; |  | 
|  183   assertTrue(classLit.name); |  | 
|  184 })(); |  | 
|  185  |  | 
|  186 (function testObjectBindingPattern() { |  | 
|  187   var { |  | 
|  188     a = function() {}, |  | 
|  189     b = () => {}, |  | 
|  190     x = function withName() { }, |  | 
|  191     y = class { }, |  | 
|  192     z = class ClassName { }, |  | 
|  193     q = class { static name() { return 42 } }, |  | 
|  194     foo: bar = function() {}, |  | 
|  195     inParens = (() => {}), |  | 
|  196     inManyParens = ((((() => {})))), |  | 
|  197   } = {}; |  | 
|  198   assertEquals('a', a.name); |  | 
|  199   assertEquals('b', b.name); |  | 
|  200   assertEquals('withName', x.name); |  | 
|  201   assertEquals('y', y.name); |  | 
|  202   assertEquals('ClassName', z.name); |  | 
|  203   assertEquals('function', typeof q.name); |  | 
|  204   assertEquals('bar', bar.name); |  | 
|  205   assertEquals('inParens', inParens.name) |  | 
|  206   assertEquals('inManyParens', inManyParens.name) |  | 
|  207 })(); |  | 
|  208  |  | 
|  209 (function testArrayBindingPattern() { |  | 
|  210   var [ |  | 
|  211     a = function() {}, |  | 
|  212     b = () => {}, |  | 
|  213     x = function withName() { }, |  | 
|  214     y = class { }, |  | 
|  215     z = class ClassName { }, |  | 
|  216     q = class { static name() { return 42 } }, |  | 
|  217     inParens = (() => {}), |  | 
|  218     inManyParens = ((((() => {})))), |  | 
|  219   ] = []; |  | 
|  220   assertEquals('a', a.name); |  | 
|  221   assertEquals('b', b.name); |  | 
|  222   assertEquals('withName', x.name); |  | 
|  223   assertEquals('y', y.name); |  | 
|  224   assertEquals('ClassName', z.name); |  | 
|  225   assertEquals('function', typeof q.name); |  | 
|  226   assertEquals('inParens', inParens.name) |  | 
|  227   assertEquals('inManyParens', inManyParens.name) |  | 
|  228 })(); |  | 
|  229  |  | 
|  230 (function testObjectAssignmentPattern() { |  | 
|  231   var a, b, x, y, z, q; |  | 
|  232   ({ |  | 
|  233     a = function() {}, |  | 
|  234     b = () => {}, |  | 
|  235     x = function withName() { }, |  | 
|  236     y = class { }, |  | 
|  237     z = class ClassName { }, |  | 
|  238     q = class { static name() { return 42 } }, |  | 
|  239     foo: bar = function() {}, |  | 
|  240     inParens = (() => {}), |  | 
|  241     inManyParens = ((((() => {})))), |  | 
|  242   } = {}); |  | 
|  243   assertEquals('a', a.name); |  | 
|  244   assertEquals('b', b.name); |  | 
|  245   assertEquals('withName', x.name); |  | 
|  246   assertEquals('y', y.name); |  | 
|  247   assertEquals('ClassName', z.name); |  | 
|  248   assertEquals('function', typeof q.name); |  | 
|  249   assertEquals('bar', bar.name); |  | 
|  250   assertEquals('inParens', inParens.name) |  | 
|  251   assertEquals('inManyParens', inManyParens.name) |  | 
|  252 })(); |  | 
|  253  |  | 
|  254 (function testArrayAssignmentPattern() { |  | 
|  255   var a, b, x, y, z, q; |  | 
|  256   [ |  | 
|  257     a = function() {}, |  | 
|  258     b = () => {}, |  | 
|  259     x = function withName() { }, |  | 
|  260     y = class { }, |  | 
|  261     z = class ClassName { }, |  | 
|  262     q = class { static name() { return 42 } }, |  | 
|  263     inParens = (() => {}), |  | 
|  264     inManyParens = ((((() => {})))), |  | 
|  265   ] = []; |  | 
|  266   assertEquals('a', a.name); |  | 
|  267   assertEquals('b', b.name); |  | 
|  268   assertEquals('withName', x.name); |  | 
|  269   assertEquals('y', y.name); |  | 
|  270   assertEquals('ClassName', z.name); |  | 
|  271   assertEquals('function', typeof q.name); |  | 
|  272   assertEquals('inParens', inParens.name) |  | 
|  273   assertEquals('inManyParens', inManyParens.name) |  | 
|  274 })(); |  | 
|  275  |  | 
|  276 (function testParameterDestructuring() { |  | 
|  277   (function({ a = function() {}, |  | 
|  278               b = () => {}, |  | 
|  279               x = function withName() { }, |  | 
|  280               y = class { }, |  | 
|  281               z = class ClassName { }, |  | 
|  282               q = class { static name() { return 42 } }, |  | 
|  283               foo: bar = function() {}, |  | 
|  284               inParens = (() => {}), |  | 
|  285               inManyParens = ((((() => {})))) }) { |  | 
|  286     assertEquals('a', a.name); |  | 
|  287     assertEquals('b', b.name); |  | 
|  288     assertEquals('withName', x.name); |  | 
|  289     assertEquals('y', y.name); |  | 
|  290     assertEquals('ClassName', z.name); |  | 
|  291     assertEquals('function', typeof q.name); |  | 
|  292     assertEquals('bar', bar.name); |  | 
|  293     assertEquals('inParens', inParens.name) |  | 
|  294     assertEquals('inManyParens', inManyParens.name) |  | 
|  295   })({}); |  | 
|  296  |  | 
|  297   (function([ a = function() {}, |  | 
|  298               b = () => {}, |  | 
|  299               x = function withName() { }, |  | 
|  300               y = class { }, |  | 
|  301               z = class ClassName { }, |  | 
|  302               q = class { static name() { return 42 } }, |  | 
|  303               inParens = (() => {}), |  | 
|  304               inManyParens = ((((() => {})))) ]) { |  | 
|  305     assertEquals('a', a.name); |  | 
|  306     assertEquals('b', b.name); |  | 
|  307     assertEquals('withName', x.name); |  | 
|  308     assertEquals('y', y.name); |  | 
|  309     assertEquals('ClassName', z.name); |  | 
|  310     assertEquals('function', typeof q.name); |  | 
|  311     assertEquals('inParens', inParens.name) |  | 
|  312     assertEquals('inManyParens', inManyParens.name) |  | 
|  313   })([]); |  | 
|  314 })(); |  | 
|  315  |  | 
|  316 (function testDefaultParameters() { |  | 
|  317   (function(a = function() {}, |  | 
|  318             b = () => {}, |  | 
|  319             x = function withName() { }, |  | 
|  320             y = class { }, |  | 
|  321             z = class ClassName { }, |  | 
|  322             q = class { static name() { return 42 } }, |  | 
|  323             inParens = (() => {}), |  | 
|  324             inManyParens = ((((() => {}))))) { |  | 
|  325     assertEquals('a', a.name); |  | 
|  326     assertEquals('b', b.name); |  | 
|  327     assertEquals('withName', x.name); |  | 
|  328     assertEquals('y', y.name); |  | 
|  329     assertEquals('ClassName', z.name); |  | 
|  330     assertEquals('function', typeof q.name); |  | 
|  331     assertEquals('inParens', inParens.name) |  | 
|  332     assertEquals('inManyParens', inManyParens.name) |  | 
|  333   })(); |  | 
|  334 })(); |  | 
|  335  |  | 
|  336 (function testComputedNameNotShared() { |  | 
|  337   function makeClass(propName) { |  | 
|  338     return class { |  | 
|  339       static [propName]() {} |  | 
|  340     } |  | 
|  341   } |  | 
|  342  |  | 
|  343   var sym1 = Symbol('1'); |  | 
|  344   var sym2 = Symbol('2'); |  | 
|  345   var class1 = makeClass(sym1); |  | 
|  346   assertEquals('[1]', class1[sym1].name); |  | 
|  347   var class2 = makeClass(sym2); |  | 
|  348   assertEquals('[2]', class2[sym2].name); |  | 
|  349   assertEquals('[1]', class1[sym1].name); |  | 
|  350 })(); |  | 
|  351  |  | 
|  352  |  | 
|  353 (function testComputedNamesOnlyAppliedSyntactically() { |  | 
|  354   function factory() { return () => {}; } |  | 
|  355  |  | 
|  356   var obj = { ['foo']: factory() }; |  | 
|  357   assertEquals('', obj.foo.name); |  | 
|  358 })(); |  | 
|  359  |  | 
|  360  |  | 
|  361 (function testNameNotReflectedInToString() { |  | 
|  362   var f = function() {}; |  | 
|  363   var g = function*() {}; |  | 
|  364   var obj = { |  | 
|  365     ['h']: function() {}, |  | 
|  366     i: () => {} |  | 
|  367   }; |  | 
|  368   assertEquals('function () {}', f.toString()); |  | 
|  369   assertEquals('function* () {}', g.toString()); |  | 
|  370   assertEquals('function () {}', obj.h.toString()); |  | 
|  371   assertEquals('() => {}', obj.i.toString()); |  | 
|  372 })(); |  | 
| OLD | NEW |