tor-browser

The Tor Browser
git clone https://git.dasho.dev/tor-browser.git
Log | Files | Refs | README | LICENSE

static-field-declaration.js (3592B)


      1 // This file was procedurally generated from the following sources:
      2 // - src/class-elements/static-field-declaration.case
      3 // - src/class-elements/default/cls-decl.template
      4 /*---
      5 description: Static fields are defined using DefineField (field definitions in a class declaration)
      6 esid: prod-FieldDefinition
      7 features: [class-static-fields-public, class]
      8 flags: [generated]
      9 includes: [propertyHelper.js]
     10 info: |
     11    Updated Productions
     12 
     13    ClassElement :
     14      ...
     15      static FieldDefinition ;
     16 
     17    FieldDefinition :
     18      ClassElementName Initializer_opt
     19 
     20    ClassElementName :
     21      PropertyName
     22 
     23    PropertyName :
     24      LiteralPropertyName
     25      ComputedPropertyName
     26 
     27    LiteralPropertyName :
     28      IdentifierName
     29      StringLiteral
     30      NumericLiteral
     31 
     32    ClassDefinitionEvaluation:
     33      ...
     34 
     35      27. Let staticFields be a new empty List.
     36      28. For each ClassElement e in order from elements,
     37        a. If IsStatic of e is false, then
     38        ...
     39        b. Else,
     40          i. Let field be the result of performing PropertyDefinitionEvaluation for mClassElementEvaluation for e with arguments F and false.
     41        c. If field is an abrupt completion, then
     42          ...
     43        d. If field is not empty,
     44          i. If IsStatic of e is false, append field to instanceFields.
     45          ii. Otherwise, append field to staticFields.
     46 
     47      34. For each item fieldRecord in order from staticFields,
     48        a. Perform ? DefineField(F, field).
     49      ...
     50 
     51    DefineField(receiver, fieldRecord)
     52      1. Assert: Type(receiver) is Object.
     53      2. Assert: fieldRecord is a Record as created by ClassFieldDefinitionEvaluation.
     54      3. Let name be fieldRecord.[[Name]].
     55      4. Let initializer be fieldRecord.[[Initializer]].
     56      5. If initializer is not empty, then
     57        a. Let initValue be ? Call(initializer, receiver).
     58      6. Else, let initValue be undefined.
     59      7. If fieldRecord.[[IsAnonymousFunctionDefinition]] is true, then
     60        a. Let hasNameProperty be ? HasOwnProperty(initValue, "name").
     61        b. If hasNameProperty is false, perform SetFunctionName(initValue, fieldName).
     62      8. If fieldName is a Private Name,
     63        a. Perform ? PrivateFieldAdd(fieldName, receiver, initValue).
     64      9. Else,
     65        a. Assert: IsPropertyKey(fieldName) is true.
     66        b. Perform ? CreateDataPropertyOrThrow(receiver, fieldName, initValue).
     67      10. Return.
     68 
     69 ---*/
     70 var computed = 'h';
     71 
     72 
     73 class C {
     74  static f = 'test262';
     75  static 'g';
     76  static 0 = 'bar';
     77  static [computed];
     78 }
     79 
     80 let c = new C();
     81 
     82 assert.sameValue(c.f, undefined);
     83 assert.sameValue(c.g, undefined);
     84 assert.sameValue(c.h, undefined);
     85 assert.sameValue(c[0], undefined);
     86 
     87 assert(
     88  !Object.prototype.hasOwnProperty.call(c, 'f'),
     89  "f does not appear as an own property on the C instance"
     90 );
     91 assert(
     92  !Object.prototype.hasOwnProperty.call(c, 'g'),
     93  "g does not appear as an own property on the C instance"
     94 );
     95 assert(
     96  !Object.prototype.hasOwnProperty.call(c, 'h'),
     97  "h does not appear as an own property on the C instance"
     98 );
     99 assert(
    100  !Object.prototype.hasOwnProperty.call(c, 0),
    101  "0 does not appear as an own property on the C instance"
    102 );
    103 
    104 verifyProperty(C, 'f', {
    105  value: 'test262',
    106  enumerable: true,
    107  writable: true,
    108  configurable: true
    109 });
    110 
    111 verifyProperty(C, 'g', {
    112  value: undefined,
    113  enumerable: true,
    114  writable: true,
    115  configurable: true
    116 });
    117 
    118 verifyProperty(C, 0, {
    119  value: 'bar',
    120  enumerable: true,
    121  writable: true,
    122  configurable: true
    123 });
    124 
    125 verifyProperty(C, 'h', {
    126  value: undefined,
    127  enumerable: true,
    128  writable: true,
    129  configurable: true
    130 });
    131 
    132 reportCompare(0, 0);