github.com/evanw/esbuild@v0.21.4/scripts/decorator-tests.js (about)

     1  var __create = Object.create;
     2  var __defProp = Object.defineProperty;
     3  var __getOwnPropDesc = Object.getOwnPropertyDescriptor;
     4  var __knownSymbol = (name, symbol) => (symbol = Symbol[name]) ? symbol : Symbol.for("Symbol." + name);
     5  var __typeError = (msg) => {
     6    throw TypeError(msg);
     7  };
     8  var __defNormalProp = (obj, key, value) => key in obj ? __defProp(obj, key, { enumerable: true, configurable: true, writable: true, value }) : obj[key] = value;
     9  var __name = (target, value) => __defProp(target, "name", { value, configurable: true });
    10  var __decoratorStart = (base) => [, , , __create(base?.[__knownSymbol("metadata")] ?? null)];
    11  var __decoratorStrings = ["class", "method", "getter", "setter", "accessor", "field", "value", "get", "set"];
    12  var __expectFn = (fn) => fn !== void 0 && typeof fn !== "function" ? __typeError("Function expected") : fn;
    13  var __decoratorContext = (kind, name, done, metadata, fns) => ({ kind: __decoratorStrings[kind], name, metadata, addInitializer: (fn) => done._ ? __typeError("Already initialized") : fns.push(__expectFn(fn || null)) });
    14  var __runInitializers = (array, flags, self, value) => {
    15    for (var i = 0, fns = array[flags >> 1], n = fns && fns.length; i < n; i++) flags & 1 ? fns[i].call(self) : value = fns[i].call(self, value);
    16    return value;
    17  };
    18  var __decorateElement = (array, flags, name, decorators, target, extra) => {
    19    var fn, it, done, ctx, access, k = flags & 7, s = !!(flags & 8), p = !!(flags & 16);
    20    var j = k > 3 ? array.length + 1 : k ? s ? 1 : 2 : 0, key = __decoratorStrings[k + 5];
    21    var initializers = k > 3 && (array[j - 1] = []), extraInitializers = array[j] || (array[j] = []);
    22    var desc = k && (!p && !s && (target = target.prototype), k < 5 && (k > 3 || !p) && __getOwnPropDesc(k < 4 ? target : { get [name]() {
    23      return __privateGet(this, extra);
    24    }, set [name](x) {
    25      return __privateSet(this, extra, x);
    26    } }, name));
    27    k ? p && k < 4 && __name(extra, (k > 2 ? "set " : k > 1 ? "get " : "") + name) : __name(target, name);
    28    for (var i = decorators.length - 1; i >= 0; i--) {
    29      ctx = __decoratorContext(k, name, done = {}, array[3], extraInitializers);
    30      if (k) {
    31        ctx.static = s, ctx.private = p, access = ctx.access = { has: p ? (x) => __privateIn(target, x) : (x) => name in x };
    32        if (k ^ 3) access.get = p ? (x) => (k ^ 1 ? __privateGet : __privateMethod)(x, target, k ^ 4 ? extra : desc.get) : (x) => x[name];
    33        if (k > 2) access.set = p ? (x, y) => __privateSet(x, target, y, k ^ 4 ? extra : desc.set) : (x, y) => x[name] = y;
    34      }
    35      it = (0, decorators[i])(k ? k < 4 ? p ? extra : desc[key] : k > 4 ? void 0 : { get: desc.get, set: desc.set } : target, ctx), done._ = 1;
    36      if (k ^ 4 || it === void 0) __expectFn(it) && (k > 4 ? initializers.unshift(it) : k ? p ? extra = it : desc[key] = it : target = it);
    37      else if (typeof it !== "object" || it === null) __typeError("Object expected");
    38      else __expectFn(fn = it.get) && (desc.get = fn), __expectFn(fn = it.set) && (desc.set = fn), __expectFn(fn = it.init) && initializers.unshift(fn);
    39    }
    40    return k || (target[__knownSymbol("metadata")] = array[3]), desc && __defProp(target, name, desc), p ? k ^ 4 ? extra : desc : target;
    41  };
    42  var __publicField = (obj, key, value) => __defNormalProp(obj, typeof key !== "symbol" ? key + "" : key, value);
    43  var __accessCheck = (obj, member, msg) => member.has(obj) || __typeError("Cannot " + msg);
    44  var __privateIn = (member, obj) => Object(obj) !== obj ? __typeError('Cannot use the "in" operator on this value') : member.has(obj);
    45  var __privateGet = (obj, member, getter) => (__accessCheck(obj, member, "read from private field"), getter ? getter.call(obj) : member.get(obj));
    46  var __privateAdd = (obj, member, value) => member.has(obj) ? __typeError("Cannot add the same private member more than once") : member instanceof WeakSet ? member.add(obj) : member.set(obj, value);
    47  var __privateSet = (obj, member, value, setter) => (__accessCheck(obj, member, "write to private field"), setter ? setter.call(obj, value) : member.set(obj, value), value);
    48  var __privateMethod = (obj, member, method) => (__accessCheck(obj, member, "access private method"), method);
    49  if (!("metadata" in Symbol)) {
    50    Symbol.metadata = Symbol("Symbol.metadata");
    51  }
    52  const tests = {
    53    // Class decorators
    54    "Class decorators: Basic statement": () => {
    55      var _Foo_decorators, _init;
    56      let old;
    57      const dec = (name) => (cls, ctx) => {
    58        assertEq(() => typeof cls, "function");
    59        assertEq(() => cls.name, name);
    60        assertEq(() => ctx.kind, "class");
    61        assertEq(() => ctx.name, name);
    62        assertEq(() => "static" in ctx, false);
    63        assertEq(() => "private" in ctx, false);
    64        assertEq(() => "access" in ctx, false);
    65        old = cls;
    66      };
    67      _Foo_decorators = [dec("Foo")];
    68      class Foo2 {
    69      }
    70      _init = __decoratorStart(null);
    71      Foo2 = __decorateElement(_init, 0, "Foo", _Foo_decorators, Foo2);
    72      __runInitializers(_init, 1, Foo2);
    73      assertEq(() => Foo2, old);
    74    },
    75    "Class decorators: Basic expression: Anonymous": () => {
    76      var _class_decorators, _init, _a, _Baz_decorators, _init2, _b;
    77      let old;
    78      const dec = (name) => (cls, ctx) => {
    79        assertEq(() => typeof cls, "function");
    80        assertEq(() => cls.name, name);
    81        assertEq(() => ctx.kind, "class");
    82        assertEq(() => ctx.name, name);
    83        assertEq(() => "static" in ctx, false);
    84        assertEq(() => "private" in ctx, false);
    85        assertEq(() => "access" in ctx, false);
    86        old = cls;
    87      };
    88      const Foo2 = /* @__PURE__ */ ((x) => x)((_class_decorators = [dec("")], _a = class {
    89      }, _init = __decoratorStart(null), _a = __decorateElement(_init, 0, "", _class_decorators, _a), __runInitializers(_init, 1, _a), _a));
    90      assertEq(() => Foo2, old);
    91      const Bar = /* @__PURE__ */ ((x) => x)((_Baz_decorators = [dec("Baz")], _b = class {
    92      }, _init2 = __decoratorStart(null), _b = __decorateElement(_init2, 0, "Baz", _Baz_decorators, _b), __runInitializers(_init2, 1, _b), _b));
    93      assertEq(() => Bar, old);
    94    },
    95    "Class decorators: Basic expression: Property value": () => {
    96      var _Foo_decorators, _init, _a, _Baz_decorators, _init2, _b;
    97      let old;
    98      const dec = (name) => (cls, ctx) => {
    99        assertEq(() => typeof cls, "function");
   100        assertEq(() => cls.name, name);
   101        assertEq(() => ctx.kind, "class");
   102        assertEq(() => ctx.name, name);
   103        assertEq(() => "static" in ctx, false);
   104        assertEq(() => "private" in ctx, false);
   105        assertEq(() => "access" in ctx, false);
   106        old = cls;
   107      };
   108      const obj = {
   109        Foo: (_Foo_decorators = [dec("Foo")], _a = class {
   110        }, _init = __decoratorStart(null), _a = __decorateElement(_init, 0, "Foo", _Foo_decorators, _a), __runInitializers(_init, 1, _a), _a)
   111      };
   112      assertEq(() => obj.Foo, old);
   113      const obj2 = {
   114        Bar: (_Baz_decorators = [dec("Baz")], _b = class {
   115        }, _init2 = __decoratorStart(null), _b = __decorateElement(_init2, 0, "Baz", _Baz_decorators, _b), __runInitializers(_init2, 1, _b), _b)
   116      };
   117      assertEq(() => obj2.Bar, old);
   118    },
   119    "Class decorators: Basic expression: Variable initializer": () => {
   120      var _Foo_decorators, _init, _a, _Baz_decorators, _init2, _b;
   121      let old;
   122      const dec = (name) => (cls, ctx) => {
   123        assertEq(() => typeof cls, "function");
   124        assertEq(() => cls.name, name);
   125        assertEq(() => ctx.kind, "class");
   126        assertEq(() => ctx.name, name);
   127        assertEq(() => "static" in ctx, false);
   128        assertEq(() => "private" in ctx, false);
   129        assertEq(() => "access" in ctx, false);
   130        old = cls;
   131      };
   132      const Foo2 = (_Foo_decorators = [dec("Foo")], _a = class {
   133      }, _init = __decoratorStart(null), _a = __decorateElement(_init, 0, "Foo", _Foo_decorators, _a), __runInitializers(_init, 1, _a), _a);
   134      assertEq(() => Foo2, old);
   135      const Bar = (_Baz_decorators = [dec("Baz")], _b = class {
   136      }, _init2 = __decoratorStart(null), _b = __decorateElement(_init2, 0, "Baz", _Baz_decorators, _b), __runInitializers(_init2, 1, _b), _b);
   137      assertEq(() => Bar, old);
   138    },
   139    "Class decorators: Basic expression: Array binding": () => {
   140      var _Foo_decorators, _init, _a, _Baz_decorators, _init2, _b;
   141      let old;
   142      const dec = (name) => (cls, ctx) => {
   143        assertEq(() => typeof cls, "function");
   144        assertEq(() => cls.name, name);
   145        assertEq(() => ctx.kind, "class");
   146        assertEq(() => ctx.name, name);
   147        assertEq(() => "static" in ctx, false);
   148        assertEq(() => "private" in ctx, false);
   149        assertEq(() => "access" in ctx, false);
   150        old = cls;
   151      };
   152      const [Foo2 = (_Foo_decorators = [dec("Foo")], _a = class {
   153      }, _init = __decoratorStart(null), _a = __decorateElement(_init, 0, "Foo", _Foo_decorators, _a), __runInitializers(_init, 1, _a), _a)] = [];
   154      assertEq(() => Foo2, old);
   155      const [Bar = (_Baz_decorators = [dec("Baz")], _b = class {
   156      }, _init2 = __decoratorStart(null), _b = __decorateElement(_init2, 0, "Baz", _Baz_decorators, _b), __runInitializers(_init2, 1, _b), _b)] = [];
   157      assertEq(() => Bar, old);
   158    },
   159    "Class decorators: Basic expression: Object binding": () => {
   160      var _Foo_decorators, _init, _a, _Baz_decorators, _init2, _b;
   161      let old;
   162      const dec = (name) => (cls, ctx) => {
   163        assertEq(() => typeof cls, "function");
   164        assertEq(() => cls.name, name);
   165        assertEq(() => ctx.kind, "class");
   166        assertEq(() => ctx.name, name);
   167        assertEq(() => "static" in ctx, false);
   168        assertEq(() => "private" in ctx, false);
   169        assertEq(() => "access" in ctx, false);
   170        old = cls;
   171      };
   172      const { Foo: Foo2 = (_Foo_decorators = [dec("Foo")], _a = class {
   173      }, _init = __decoratorStart(null), _a = __decorateElement(_init, 0, "Foo", _Foo_decorators, _a), __runInitializers(_init, 1, _a), _a) } = {};
   174      assertEq(() => Foo2, old);
   175      const { Bar = (_Baz_decorators = [dec("Baz")], _b = class {
   176      }, _init2 = __decoratorStart(null), _b = __decorateElement(_init2, 0, "Baz", _Baz_decorators, _b), __runInitializers(_init2, 1, _b), _b) } = {};
   177      assertEq(() => Bar, old);
   178    },
   179    "Class decorators: Basic expression: Assignment initializer": () => {
   180      var _Foo_decorators, _init, _a, _Baz_decorators, _init2, _b;
   181      let old;
   182      const dec = (name) => (cls, ctx) => {
   183        assertEq(() => typeof cls, "function");
   184        assertEq(() => cls.name, name);
   185        assertEq(() => ctx.kind, "class");
   186        assertEq(() => ctx.name, name);
   187        assertEq(() => "static" in ctx, false);
   188        assertEq(() => "private" in ctx, false);
   189        assertEq(() => "access" in ctx, false);
   190        old = cls;
   191      };
   192      let Foo2;
   193      Foo2 = (_Foo_decorators = [dec("Foo")], _a = class {
   194      }, _init = __decoratorStart(null), _a = __decorateElement(_init, 0, "Foo", _Foo_decorators, _a), __runInitializers(_init, 1, _a), _a);
   195      assertEq(() => Foo2, old);
   196      let Bar;
   197      Bar = (_Baz_decorators = [dec("Baz")], _b = class {
   198      }, _init2 = __decoratorStart(null), _b = __decorateElement(_init2, 0, "Baz", _Baz_decorators, _b), __runInitializers(_init2, 1, _b), _b);
   199      assertEq(() => Bar, old);
   200    },
   201    "Class decorators: Basic expression: Assignment array binding": () => {
   202      var _Foo_decorators, _init, _a, _Baz_decorators, _init2, _b;
   203      let old;
   204      const dec = (name) => (cls, ctx) => {
   205        assertEq(() => typeof cls, "function");
   206        assertEq(() => cls.name, name);
   207        assertEq(() => ctx.kind, "class");
   208        assertEq(() => ctx.name, name);
   209        assertEq(() => "static" in ctx, false);
   210        assertEq(() => "private" in ctx, false);
   211        assertEq(() => "access" in ctx, false);
   212        old = cls;
   213      };
   214      let Foo2;
   215      [Foo2 = (_Foo_decorators = [dec("Foo")], _a = class {
   216      }, _init = __decoratorStart(null), _a = __decorateElement(_init, 0, "Foo", _Foo_decorators, _a), __runInitializers(_init, 1, _a), _a)] = [];
   217      assertEq(() => Foo2, old);
   218      let Bar;
   219      [Bar = (_Baz_decorators = [dec("Baz")], _b = class {
   220      }, _init2 = __decoratorStart(null), _b = __decorateElement(_init2, 0, "Baz", _Baz_decorators, _b), __runInitializers(_init2, 1, _b), _b)] = [];
   221      assertEq(() => Bar, old);
   222    },
   223    "Class decorators: Basic expression: Assignment object binding": () => {
   224      var _Foo_decorators, _init, _a, _Baz_decorators, _init2, _b;
   225      let old;
   226      const dec = (name) => (cls, ctx) => {
   227        assertEq(() => typeof cls, "function");
   228        assertEq(() => cls.name, name);
   229        assertEq(() => ctx.kind, "class");
   230        assertEq(() => ctx.name, name);
   231        assertEq(() => "static" in ctx, false);
   232        assertEq(() => "private" in ctx, false);
   233        assertEq(() => "access" in ctx, false);
   234        old = cls;
   235      };
   236      let Foo2;
   237      ({ Foo: Foo2 = (_Foo_decorators = [dec("Foo")], _a = class {
   238      }, _init = __decoratorStart(null), _a = __decorateElement(_init, 0, "Foo", _Foo_decorators, _a), __runInitializers(_init, 1, _a), _a) } = {});
   239      assertEq(() => Foo2, old);
   240      let Bar;
   241      ({ Bar = (_Baz_decorators = [dec("Baz")], _b = class {
   242      }, _init2 = __decoratorStart(null), _b = __decorateElement(_init2, 0, "Baz", _Baz_decorators, _b), __runInitializers(_init2, 1, _b), _b) } = {});
   243      assertEq(() => Bar, old);
   244    },
   245    "Class decorators: Basic expression: Instance field initializer": () => {
   246      var _Foo_decorators, _init, _a, _Baz_decorators, _init2, _b;
   247      let old;
   248      const dec = (name) => (cls, ctx) => {
   249        assertEq(() => typeof cls, "function");
   250        assertEq(() => cls.name, name);
   251        assertEq(() => ctx.kind, "class");
   252        assertEq(() => ctx.name, name);
   253        assertEq(() => "static" in ctx, false);
   254        assertEq(() => "private" in ctx, false);
   255        assertEq(() => "access" in ctx, false);
   256        old = cls;
   257      };
   258      class Class {
   259        Foo = (_Foo_decorators = [dec("Foo")], _a = class {
   260        }, _init = __decoratorStart(null), _a = __decorateElement(_init, 0, "Foo", _Foo_decorators, _a), __runInitializers(_init, 1, _a), _a);
   261      }
   262      const Foo2 = new Class().Foo;
   263      assertEq(() => Foo2, old);
   264      class Class2 {
   265        Bar = (_Baz_decorators = [dec("Baz")], _b = class {
   266        }, _init2 = __decoratorStart(null), _b = __decorateElement(_init2, 0, "Baz", _Baz_decorators, _b), __runInitializers(_init2, 1, _b), _b);
   267      }
   268      const Bar = new Class2().Bar;
   269      assertEq(() => Bar, old);
   270    },
   271    "Class decorators: Basic expression: Static field initializer": () => {
   272      var _Foo_decorators, _init, _a, _Baz_decorators, _init2, _b;
   273      let old;
   274      const dec = (name) => (cls, ctx) => {
   275        assertEq(() => typeof cls, "function");
   276        assertEq(() => cls.name, name);
   277        assertEq(() => ctx.kind, "class");
   278        assertEq(() => ctx.name, name);
   279        assertEq(() => "static" in ctx, false);
   280        assertEq(() => "private" in ctx, false);
   281        assertEq(() => "access" in ctx, false);
   282        old = cls;
   283      };
   284      class Class {
   285        static Foo = (_Foo_decorators = [dec("Foo")], _a = class {
   286        }, _init = __decoratorStart(null), _a = __decorateElement(_init, 0, "Foo", _Foo_decorators, _a), __runInitializers(_init, 1, _a), _a);
   287      }
   288      assertEq(() => Class.Foo, old);
   289      class Class2 {
   290        static Bar = (_Baz_decorators = [dec("Baz")], _b = class {
   291        }, _init2 = __decoratorStart(null), _b = __decorateElement(_init2, 0, "Baz", _Baz_decorators, _b), __runInitializers(_init2, 1, _b), _b);
   292      }
   293      assertEq(() => Class2.Bar, old);
   294    },
   295    "Class decorators: Basic expression: Instance auto-accessor initializer": () => {
   296      var _Foo_decorators, _init, _a, _Baz_decorators, _init2, _b;
   297      let old;
   298      const dec = (name) => (cls, ctx) => {
   299        assertEq(() => typeof cls, "function");
   300        assertEq(() => cls.name, name);
   301        assertEq(() => ctx.kind, "class");
   302        assertEq(() => ctx.name, name);
   303        assertEq(() => "static" in ctx, false);
   304        assertEq(() => "private" in ctx, false);
   305        assertEq(() => "access" in ctx, false);
   306        old = cls;
   307      };
   308      class Class {
   309        #Foo = (_Foo_decorators = [dec("Foo")], _a = class {
   310        }, _init = __decoratorStart(null), _a = __decorateElement(_init, 0, "Foo", _Foo_decorators, _a), __runInitializers(_init, 1, _a), _a);
   311        get Foo() {
   312          return this.#Foo;
   313        }
   314        set Foo(_) {
   315          this.#Foo = _;
   316        }
   317      }
   318      const Foo2 = new Class().Foo;
   319      assertEq(() => Foo2, old);
   320      class Class2 {
   321        #Bar = (_Baz_decorators = [dec("Baz")], _b = class {
   322        }, _init2 = __decoratorStart(null), _b = __decorateElement(_init2, 0, "Baz", _Baz_decorators, _b), __runInitializers(_init2, 1, _b), _b);
   323        get Bar() {
   324          return this.#Bar;
   325        }
   326        set Bar(_) {
   327          this.#Bar = _;
   328        }
   329      }
   330      const Bar = new Class2().Bar;
   331      assertEq(() => Bar, old);
   332    },
   333    "Class decorators: Basic expression: Static auto-accessor initializer": () => {
   334      var _Foo_decorators, _init, _a, _Baz_decorators, _init2, _b;
   335      let old;
   336      const dec = (name) => (cls, ctx) => {
   337        assertEq(() => typeof cls, "function");
   338        assertEq(() => cls.name, name);
   339        assertEq(() => ctx.kind, "class");
   340        assertEq(() => ctx.name, name);
   341        assertEq(() => "static" in ctx, false);
   342        assertEq(() => "private" in ctx, false);
   343        assertEq(() => "access" in ctx, false);
   344        old = cls;
   345      };
   346      class Class {
   347        static #Foo = (_Foo_decorators = [dec("Foo")], _a = class {
   348        }, _init = __decoratorStart(null), _a = __decorateElement(_init, 0, "Foo", _Foo_decorators, _a), __runInitializers(_init, 1, _a), _a);
   349        static get Foo() {
   350          return this.#Foo;
   351        }
   352        static set Foo(_) {
   353          this.#Foo = _;
   354        }
   355      }
   356      assertEq(() => Class.Foo, old);
   357      class Class2 {
   358        static #Bar = (_Baz_decorators = [dec("Baz")], _b = class {
   359        }, _init2 = __decoratorStart(null), _b = __decorateElement(_init2, 0, "Baz", _Baz_decorators, _b), __runInitializers(_init2, 1, _b), _b);
   360        static get Bar() {
   361          return this.#Bar;
   362        }
   363        static set Bar(_) {
   364          this.#Bar = _;
   365        }
   366      }
   367      assertEq(() => Class2.Bar, old);
   368    },
   369    "Class decorators: Order": () => {
   370      var _Foo_decorators, _init;
   371      const log = [];
   372      let Bar;
   373      let Baz;
   374      const dec1 = (cls, ctx) => {
   375        log.push(2);
   376        Bar = function() {
   377          log.push(4);
   378          return new cls();
   379        };
   380        return Bar;
   381      };
   382      const dec2 = (cls, ctx) => {
   383        log.push(1);
   384        Baz = function() {
   385          log.push(5);
   386          return new cls();
   387        };
   388        return Baz;
   389      };
   390      log.push(0);
   391      _Foo_decorators = [dec1, dec2];
   392      class Foo2 {
   393        constructor() {
   394          log.push(6);
   395        }
   396      }
   397      _init = __decoratorStart(null);
   398      Foo2 = __decorateElement(_init, 0, "Foo", _Foo_decorators, Foo2);
   399      __runInitializers(_init, 1, Foo2);
   400      log.push(3);
   401      new Foo2();
   402      log.push(7);
   403      assertEq(() => Foo2, Bar);
   404      assertEq(() => log + "", "0,1,2,3,4,5,6,7");
   405    },
   406    "Class decorators: Return null": () => {
   407      assertThrows(() => {
   408        var _Foo_decorators, _init;
   409        const dec = (cls, ctx) => {
   410          return null;
   411        };
   412        _Foo_decorators = [dec];
   413        class Foo2 {
   414        }
   415        _init = __decoratorStart(null);
   416        Foo2 = __decorateElement(_init, 0, "Foo", _Foo_decorators, Foo2);
   417        __runInitializers(_init, 1, Foo2);
   418      }, TypeError);
   419    },
   420    "Class decorators: Return object": () => {
   421      assertThrows(() => {
   422        var _Foo_decorators, _init;
   423        const dec = (cls, ctx) => {
   424          return {};
   425        };
   426        _Foo_decorators = [dec];
   427        class Foo2 {
   428        }
   429        _init = __decoratorStart(null);
   430        Foo2 = __decorateElement(_init, 0, "Foo", _Foo_decorators, Foo2);
   431        __runInitializers(_init, 1, Foo2);
   432      }, TypeError);
   433    },
   434    "Class decorators: Extra initializer": () => {
   435      var _Foo_decorators, _init;
   436      let oldAddInitializer;
   437      let got;
   438      const dec = (cls, ctx) => {
   439        ctx.addInitializer(function(...args) {
   440          got = { this: this, args };
   441        });
   442        if (oldAddInitializer) assertThrows(() => oldAddInitializer(() => {
   443        }), TypeError);
   444        assertThrows(() => ctx.addInitializer({}), TypeError);
   445        oldAddInitializer = ctx.addInitializer;
   446      };
   447      _Foo_decorators = [dec, dec];
   448      class Foo2 {
   449      }
   450      _init = __decoratorStart(null);
   451      Foo2 = __decorateElement(_init, 0, "Foo", _Foo_decorators, Foo2);
   452      __runInitializers(_init, 1, Foo2);
   453      assertEq(() => got.this, Foo2);
   454      assertEq(() => got.args.length, 0);
   455    },
   456    // Method decorators
   457    "Method decorators: Basic (instance method)": () => {
   458      var _baz_dec, _a, _bar_dec, _b, _foo_dec, _init;
   459      const old = {};
   460      const dec = (key, name) => (fn, ctx) => {
   461        assertEq(() => typeof fn, "function");
   462        assertEq(() => fn.name, name);
   463        assertEq(() => ctx.kind, "method");
   464        assertEq(() => ctx.name, key);
   465        assertEq(() => ctx.static, false);
   466        assertEq(() => ctx.private, false);
   467        assertEq(() => ctx.access.has({ [key]: false }), true);
   468        assertEq(() => ctx.access.has({ bar: true }), false);
   469        assertEq(() => ctx.access.get({ [key]: 123 }), 123);
   470        assertEq(() => "set" in ctx.access, false);
   471        old[key] = fn;
   472      };
   473      const bar = Symbol("bar");
   474      const baz = Symbol();
   475      class Foo2 {
   476        constructor() {
   477          __runInitializers(_init, 5, this);
   478        }
   479        foo() {
   480        }
   481        [(_foo_dec = [dec("foo", "foo")], _b = (_bar_dec = [dec(bar, "[bar]")], bar))]() {
   482        }
   483        [_a = (_baz_dec = [dec(baz, "")], baz)]() {
   484        }
   485      }
   486      _init = __decoratorStart(null);
   487      __decorateElement(_init, 1, "foo", _foo_dec, Foo2);
   488      __decorateElement(_init, 1, _b, _bar_dec, Foo2);
   489      __decorateElement(_init, 1, _a, _baz_dec, Foo2);
   490      assertEq(() => Foo2.prototype.foo, old["foo"]);
   491      assertEq(() => Foo2.prototype[bar], old[bar]);
   492      assertEq(() => Foo2.prototype[baz], old[baz]);
   493    },
   494    "Method decorators: Basic (static method)": () => {
   495      var _baz_dec, _a, _bar_dec, _b, _foo_dec, _init;
   496      const old = {};
   497      const dec = (key, name) => (fn, ctx) => {
   498        assertEq(() => typeof fn, "function");
   499        assertEq(() => fn.name, name);
   500        assertEq(() => ctx.kind, "method");
   501        assertEq(() => ctx.name, key);
   502        assertEq(() => ctx.static, true);
   503        assertEq(() => ctx.private, false);
   504        assertEq(() => ctx.access.has({ [key]: false }), true);
   505        assertEq(() => ctx.access.has({ bar: true }), false);
   506        assertEq(() => ctx.access.get({ [key]: 123 }), 123);
   507        assertEq(() => "set" in ctx.access, false);
   508        old[key] = fn;
   509      };
   510      const bar = Symbol("bar");
   511      const baz = Symbol();
   512      class Foo2 {
   513        static foo() {
   514        }
   515        static [(_foo_dec = [dec("foo", "foo")], _b = (_bar_dec = [dec(bar, "[bar]")], bar))]() {
   516        }
   517        static [_a = (_baz_dec = [dec(baz, "")], baz)]() {
   518        }
   519      }
   520      _init = __decoratorStart(null);
   521      __decorateElement(_init, 9, "foo", _foo_dec, Foo2);
   522      __decorateElement(_init, 9, _b, _bar_dec, Foo2);
   523      __decorateElement(_init, 9, _a, _baz_dec, Foo2);
   524      __runInitializers(_init, 3, Foo2);
   525      assertEq(() => Foo2.foo, old["foo"]);
   526      assertEq(() => Foo2[bar], old[bar]);
   527      assertEq(() => Foo2[baz], old[baz]);
   528    },
   529    "Method decorators: Basic (private instance method)": () => {
   530      var _foo_dec, _init, _Foo_instances, foo_fn;
   531      let old;
   532      let lateAsserts;
   533      const dec = (fn, ctx) => {
   534        assertEq(() => typeof fn, "function");
   535        assertEq(() => fn.name, "#foo");
   536        assertEq(() => ctx.kind, "method");
   537        assertEq(() => ctx.name, "#foo");
   538        assertEq(() => ctx.static, false);
   539        assertEq(() => ctx.private, true);
   540        lateAsserts = () => {
   541          assertEq(() => ctx.access.has(new Foo2()), true);
   542          assertEq(() => ctx.access.has({}), false);
   543          assertEq(() => ctx.access.get(new Foo2()), $foo);
   544          assertEq(() => "set" in ctx.access, false);
   545        };
   546        old = fn;
   547      };
   548      let $foo;
   549      _foo_dec = [dec];
   550      const _Foo = class _Foo {
   551        constructor() {
   552          __runInitializers(_init, 5, this);
   553          __privateAdd(this, _Foo_instances);
   554        }
   555      };
   556      _init = __decoratorStart(null);
   557      _Foo_instances = new WeakSet();
   558      foo_fn = function() {
   559      };
   560      foo_fn = __decorateElement(_init, 17, "#foo", _foo_dec, _Foo_instances, foo_fn);
   561      $foo = __privateMethod(new _Foo(), _Foo_instances, foo_fn);
   562      let Foo2 = _Foo;
   563      assertEq(() => $foo, old);
   564      lateAsserts();
   565    },
   566    "Method decorators: Basic (private static method)": () => {
   567      var _foo_dec, _init, _Foo_static, foo_fn;
   568      let old;
   569      let lateAsserts;
   570      const dec = (fn, ctx) => {
   571        assertEq(() => typeof fn, "function");
   572        assertEq(() => fn.name, "#foo");
   573        assertEq(() => ctx.kind, "method");
   574        assertEq(() => ctx.name, "#foo");
   575        assertEq(() => ctx.static, true);
   576        assertEq(() => ctx.private, true);
   577        lateAsserts = () => {
   578          assertEq(() => ctx.access.has(Foo2), true);
   579          assertEq(() => ctx.access.has({}), false);
   580          assertEq(() => ctx.access.get(Foo2), $foo);
   581          assertEq(() => "set" in ctx.access, false);
   582        };
   583        old = fn;
   584      };
   585      let $foo;
   586      _foo_dec = [dec];
   587      const _Foo = class _Foo {
   588      };
   589      _init = __decoratorStart(null);
   590      _Foo_static = new WeakSet();
   591      foo_fn = function() {
   592      };
   593      foo_fn = __decorateElement(_init, 25, "#foo", _foo_dec, _Foo_static, foo_fn);
   594      __privateAdd(_Foo, _Foo_static);
   595      __runInitializers(_init, 3, _Foo);
   596      $foo = __privateMethod(_Foo, _Foo_static, foo_fn);
   597      let Foo2 = _Foo;
   598      assertEq(() => $foo, old);
   599      lateAsserts();
   600    },
   601    "Method decorators: Shim (instance method)": () => {
   602      var _foo_dec, _init;
   603      let bar;
   604      const dec = (fn, ctx) => {
   605        bar = function() {
   606          return fn.call(this) + 1;
   607        };
   608        return bar;
   609      };
   610      _foo_dec = [dec];
   611      class Foo2 {
   612        constructor() {
   613          __runInitializers(_init, 5, this);
   614          __publicField(this, "bar", 123);
   615        }
   616        foo() {
   617          return this.bar;
   618        }
   619      }
   620      _init = __decoratorStart(null);
   621      __decorateElement(_init, 1, "foo", _foo_dec, Foo2);
   622      assertEq(() => Foo2.prototype.foo, bar);
   623      assertEq(() => new Foo2().foo(), 124);
   624    },
   625    "Method decorators: Shim (static method)": () => {
   626      var _foo_dec, _init;
   627      let bar;
   628      const dec = (fn, ctx) => {
   629        bar = function() {
   630          return fn.call(this) + 1;
   631        };
   632        return bar;
   633      };
   634      _foo_dec = [dec];
   635      class Foo2 {
   636        static foo() {
   637          return this.bar;
   638        }
   639      }
   640      _init = __decoratorStart(null);
   641      __decorateElement(_init, 9, "foo", _foo_dec, Foo2);
   642      __runInitializers(_init, 3, Foo2);
   643      __publicField(Foo2, "bar", 123);
   644      assertEq(() => Foo2.foo, bar);
   645      assertEq(() => Foo2.foo(), 124);
   646    },
   647    "Method decorators: Shim (private instance method)": () => {
   648      var _foo_dec, _init, _Foo_instances, foo_fn;
   649      let bar;
   650      const dec = (fn, ctx) => {
   651        bar = function() {
   652          return fn.call(this) + 1;
   653        };
   654        return bar;
   655      };
   656      let $foo;
   657      _foo_dec = [dec];
   658      const _Foo = class _Foo {
   659        constructor() {
   660          __runInitializers(_init, 5, this);
   661          __privateAdd(this, _Foo_instances);
   662          __publicField(this, "bar", 123);
   663        }
   664      };
   665      _init = __decoratorStart(null);
   666      _Foo_instances = new WeakSet();
   667      foo_fn = function() {
   668        return this.bar;
   669      };
   670      foo_fn = __decorateElement(_init, 17, "#foo", _foo_dec, _Foo_instances, foo_fn);
   671      $foo = __privateMethod(new _Foo(), _Foo_instances, foo_fn);
   672      let Foo2 = _Foo;
   673      assertEq(() => $foo, bar);
   674      assertEq(() => bar.call(new Foo2()), 124);
   675    },
   676    "Method decorators: Shim (private static method)": () => {
   677      var _foo_dec, _init, _Foo_static, foo_fn;
   678      let bar;
   679      const dec = (fn, ctx) => {
   680        bar = function() {
   681          return fn.call(this) + 1;
   682        };
   683        return bar;
   684      };
   685      let $foo;
   686      _foo_dec = [dec];
   687      const _Foo = class _Foo {
   688      };
   689      _init = __decoratorStart(null);
   690      _Foo_static = new WeakSet();
   691      foo_fn = function() {
   692        return this.bar;
   693      };
   694      foo_fn = __decorateElement(_init, 25, "#foo", _foo_dec, _Foo_static, foo_fn);
   695      __privateAdd(_Foo, _Foo_static);
   696      __runInitializers(_init, 3, _Foo);
   697      __publicField(_Foo, "bar", 123);
   698      $foo = __privateMethod(_Foo, _Foo_static, foo_fn);
   699      let Foo2 = _Foo;
   700      assertEq(() => $foo, bar);
   701      assertEq(() => bar.call(Foo2), 124);
   702    },
   703    "Method decorators: Order (instance method)": () => {
   704      var _foo_dec, _init;
   705      const log = [];
   706      let bar;
   707      let baz;
   708      const dec1 = (fn, ctx) => {
   709        log.push(2);
   710        bar = function() {
   711          log.push(4);
   712          return fn.call(this);
   713        };
   714        return bar;
   715      };
   716      const dec2 = (fn, ctx) => {
   717        log.push(1);
   718        baz = function() {
   719          log.push(5);
   720          return fn.call(this);
   721        };
   722        return baz;
   723      };
   724      log.push(0);
   725      _foo_dec = [dec1, dec2];
   726      class Foo2 {
   727        constructor() {
   728          __runInitializers(_init, 5, this);
   729        }
   730        foo() {
   731          return log.push(6);
   732        }
   733      }
   734      _init = __decoratorStart(null);
   735      __decorateElement(_init, 1, "foo", _foo_dec, Foo2);
   736      log.push(3);
   737      new Foo2().foo();
   738      log.push(7);
   739      assertEq(() => Foo2.prototype.foo, bar);
   740      assertEq(() => log + "", "0,1,2,3,4,5,6,7");
   741    },
   742    "Method decorators: Order (static method)": () => {
   743      var _foo_dec, _init;
   744      const log = [];
   745      let bar;
   746      let baz;
   747      const dec1 = (fn, ctx) => {
   748        log.push(2);
   749        bar = function() {
   750          log.push(4);
   751          return fn.call(this);
   752        };
   753        return bar;
   754      };
   755      const dec2 = (fn, ctx) => {
   756        log.push(1);
   757        baz = function() {
   758          log.push(5);
   759          return fn.call(this);
   760        };
   761        return baz;
   762      };
   763      log.push(0);
   764      _foo_dec = [dec1, dec2];
   765      class Foo2 {
   766        static foo() {
   767          return log.push(6);
   768        }
   769      }
   770      _init = __decoratorStart(null);
   771      __decorateElement(_init, 9, "foo", _foo_dec, Foo2);
   772      __runInitializers(_init, 3, Foo2);
   773      log.push(3);
   774      Foo2.foo();
   775      log.push(7);
   776      assertEq(() => Foo2.foo, bar);
   777      assertEq(() => log + "", "0,1,2,3,4,5,6,7");
   778    },
   779    "Method decorators: Order (private instance method)": () => {
   780      var _foo_dec, _init, _Foo_instances, foo_fn;
   781      const log = [];
   782      let bar;
   783      let baz;
   784      const dec1 = (fn, ctx) => {
   785        log.push(2);
   786        bar = function() {
   787          log.push(4);
   788          return fn.call(this);
   789        };
   790        return bar;
   791      };
   792      const dec2 = (fn, ctx) => {
   793        log.push(1);
   794        baz = function() {
   795          log.push(5);
   796          return fn.call(this);
   797        };
   798        return baz;
   799      };
   800      log.push(0);
   801      let $foo;
   802      _foo_dec = [dec1, dec2];
   803      const _Foo = class _Foo {
   804        constructor() {
   805          __runInitializers(_init, 5, this);
   806          __privateAdd(this, _Foo_instances);
   807        }
   808      };
   809      _init = __decoratorStart(null);
   810      _Foo_instances = new WeakSet();
   811      foo_fn = function() {
   812        return log.push(6);
   813      };
   814      foo_fn = __decorateElement(_init, 17, "#foo", _foo_dec, _Foo_instances, foo_fn);
   815      $foo = __privateMethod(new _Foo(), _Foo_instances, foo_fn);
   816      let Foo2 = _Foo;
   817      log.push(3);
   818      $foo.call(new Foo2());
   819      log.push(7);
   820      assertEq(() => $foo, bar);
   821      assertEq(() => log + "", "0,1,2,3,4,5,6,7");
   822    },
   823    "Method decorators: Order (private static method)": () => {
   824      var _foo_dec, _init, _Foo_static, foo_fn;
   825      const log = [];
   826      let bar;
   827      let baz;
   828      const dec1 = (fn, ctx) => {
   829        log.push(2);
   830        bar = function() {
   831          log.push(4);
   832          return fn.call(this);
   833        };
   834        return bar;
   835      };
   836      const dec2 = (fn, ctx) => {
   837        log.push(1);
   838        baz = function() {
   839          log.push(5);
   840          return fn.call(this);
   841        };
   842        return baz;
   843      };
   844      log.push(0);
   845      let $foo;
   846      _foo_dec = [dec1, dec2];
   847      const _Foo = class _Foo {
   848      };
   849      _init = __decoratorStart(null);
   850      _Foo_static = new WeakSet();
   851      foo_fn = function() {
   852        return log.push(6);
   853      };
   854      foo_fn = __decorateElement(_init, 25, "#foo", _foo_dec, _Foo_static, foo_fn);
   855      __privateAdd(_Foo, _Foo_static);
   856      __runInitializers(_init, 3, _Foo);
   857      $foo = __privateMethod(_Foo, _Foo_static, foo_fn);
   858      let Foo2 = _Foo;
   859      log.push(3);
   860      $foo.call(Foo2);
   861      log.push(7);
   862      assertEq(() => $foo, bar);
   863      assertEq(() => log + "", "0,1,2,3,4,5,6,7");
   864    },
   865    "Method decorators: Return null (instance method)": () => {
   866      assertThrows(() => {
   867        var _foo_dec, _init;
   868        const dec = (fn, ctx) => {
   869          return null;
   870        };
   871        _foo_dec = [dec];
   872        class Foo2 {
   873          constructor() {
   874            __runInitializers(_init, 5, this);
   875          }
   876          foo() {
   877          }
   878        }
   879        _init = __decoratorStart(null);
   880        __decorateElement(_init, 1, "foo", _foo_dec, Foo2);
   881      }, TypeError);
   882    },
   883    "Method decorators: Return null (static method)": () => {
   884      assertThrows(() => {
   885        var _foo_dec, _init;
   886        const dec = (fn, ctx) => {
   887          return null;
   888        };
   889        _foo_dec = [dec];
   890        class Foo2 {
   891          static foo() {
   892          }
   893        }
   894        _init = __decoratorStart(null);
   895        __decorateElement(_init, 9, "foo", _foo_dec, Foo2);
   896        __runInitializers(_init, 3, Foo2);
   897      }, TypeError);
   898    },
   899    "Method decorators: Return null (private instance method)": () => {
   900      assertThrows(() => {
   901        var _foo_dec, _init, _Foo_instances, foo_fn;
   902        const dec = (fn, ctx) => {
   903          return null;
   904        };
   905        _foo_dec = [dec];
   906        class Foo2 {
   907          constructor() {
   908            __runInitializers(_init, 5, this);
   909            __privateAdd(this, _Foo_instances);
   910          }
   911        }
   912        _init = __decoratorStart(null);
   913        _Foo_instances = new WeakSet();
   914        foo_fn = function() {
   915        };
   916        foo_fn = __decorateElement(_init, 17, "#foo", _foo_dec, _Foo_instances, foo_fn);
   917      }, TypeError);
   918    },
   919    "Method decorators: Return null (private static method)": () => {
   920      assertThrows(() => {
   921        var _foo_dec, _init, _Foo_static, foo_fn;
   922        const dec = (fn, ctx) => {
   923          return null;
   924        };
   925        _foo_dec = [dec];
   926        class Foo2 {
   927        }
   928        _init = __decoratorStart(null);
   929        _Foo_static = new WeakSet();
   930        foo_fn = function() {
   931        };
   932        foo_fn = __decorateElement(_init, 25, "#foo", _foo_dec, _Foo_static, foo_fn);
   933        __privateAdd(Foo2, _Foo_static);
   934        __runInitializers(_init, 3, Foo2);
   935      }, TypeError);
   936    },
   937    "Method decorators: Return object (instance method)": () => {
   938      assertThrows(() => {
   939        var _foo_dec, _init;
   940        const dec = (fn, ctx) => {
   941          return {};
   942        };
   943        _foo_dec = [dec];
   944        class Foo2 {
   945          constructor() {
   946            __runInitializers(_init, 5, this);
   947          }
   948          foo() {
   949          }
   950        }
   951        _init = __decoratorStart(null);
   952        __decorateElement(_init, 1, "foo", _foo_dec, Foo2);
   953      }, TypeError);
   954    },
   955    "Method decorators: Return object (static method)": () => {
   956      assertThrows(() => {
   957        var _foo_dec, _init;
   958        const dec = (fn, ctx) => {
   959          return {};
   960        };
   961        _foo_dec = [dec];
   962        class Foo2 {
   963          static foo() {
   964          }
   965        }
   966        _init = __decoratorStart(null);
   967        __decorateElement(_init, 9, "foo", _foo_dec, Foo2);
   968        __runInitializers(_init, 3, Foo2);
   969      }, TypeError);
   970    },
   971    "Method decorators: Return object (private instance method)": () => {
   972      assertThrows(() => {
   973        var _foo_dec, _init, _Foo_instances, foo_fn;
   974        const dec = (fn, ctx) => {
   975          return {};
   976        };
   977        _foo_dec = [dec];
   978        class Foo2 {
   979          constructor() {
   980            __runInitializers(_init, 5, this);
   981            __privateAdd(this, _Foo_instances);
   982          }
   983        }
   984        _init = __decoratorStart(null);
   985        _Foo_instances = new WeakSet();
   986        foo_fn = function() {
   987        };
   988        foo_fn = __decorateElement(_init, 17, "#foo", _foo_dec, _Foo_instances, foo_fn);
   989      }, TypeError);
   990    },
   991    "Method decorators: Return object (private static method)": () => {
   992      assertThrows(() => {
   993        var _foo_dec, _init, _Foo_static, foo_fn;
   994        const dec = (fn, ctx) => {
   995          return {};
   996        };
   997        _foo_dec = [dec];
   998        class Foo2 {
   999        }
  1000        _init = __decoratorStart(null);
  1001        _Foo_static = new WeakSet();
  1002        foo_fn = function() {
  1003        };
  1004        foo_fn = __decorateElement(_init, 25, "#foo", _foo_dec, _Foo_static, foo_fn);
  1005        __privateAdd(Foo2, _Foo_static);
  1006        __runInitializers(_init, 3, Foo2);
  1007      }, TypeError);
  1008    },
  1009    "Method decorators: Extra initializer (instance method)": () => {
  1010      var _foo_dec, _init;
  1011      let oldAddInitializer;
  1012      let got;
  1013      const dec = (fn, ctx) => {
  1014        ctx.addInitializer(function(...args) {
  1015          got = { this: this, args };
  1016        });
  1017        if (oldAddInitializer) assertThrows(() => oldAddInitializer(() => {
  1018        }), TypeError);
  1019        assertThrows(() => ctx.addInitializer({}), TypeError);
  1020        oldAddInitializer = ctx.addInitializer;
  1021      };
  1022      _foo_dec = [dec, dec];
  1023      class Foo2 {
  1024        constructor() {
  1025          __runInitializers(_init, 5, this);
  1026        }
  1027        foo() {
  1028        }
  1029      }
  1030      _init = __decoratorStart(null);
  1031      __decorateElement(_init, 1, "foo", _foo_dec, Foo2);
  1032      assertEq(() => got, void 0);
  1033      const instance = new Foo2();
  1034      assertEq(() => got.this, instance);
  1035      assertEq(() => got.args.length, 0);
  1036    },
  1037    "Method decorators: Extra initializer (static method)": () => {
  1038      var _foo_dec, _init;
  1039      let oldAddInitializer;
  1040      let got;
  1041      const dec = (fn, ctx) => {
  1042        ctx.addInitializer(function(...args) {
  1043          got = { this: this, args };
  1044        });
  1045        if (oldAddInitializer) assertThrows(() => oldAddInitializer(() => {
  1046        }), TypeError);
  1047        assertThrows(() => ctx.addInitializer({}), TypeError);
  1048        oldAddInitializer = ctx.addInitializer;
  1049      };
  1050      _foo_dec = [dec, dec];
  1051      class Foo2 {
  1052        static foo() {
  1053        }
  1054      }
  1055      _init = __decoratorStart(null);
  1056      __decorateElement(_init, 9, "foo", _foo_dec, Foo2);
  1057      __runInitializers(_init, 3, Foo2);
  1058      assertEq(() => got.this, Foo2);
  1059      assertEq(() => got.args.length, 0);
  1060    },
  1061    "Method decorators: Extra initializer (private instance method)": () => {
  1062      var _foo_dec, _init, _Foo_instances, foo_fn;
  1063      let oldAddInitializer;
  1064      let got;
  1065      const dec = (fn, ctx) => {
  1066        ctx.addInitializer(function(...args) {
  1067          got = { this: this, args };
  1068        });
  1069        if (oldAddInitializer) assertThrows(() => oldAddInitializer(() => {
  1070        }), TypeError);
  1071        assertThrows(() => ctx.addInitializer({}), TypeError);
  1072        oldAddInitializer = ctx.addInitializer;
  1073      };
  1074      _foo_dec = [dec, dec];
  1075      class Foo2 {
  1076        constructor() {
  1077          __runInitializers(_init, 5, this);
  1078          __privateAdd(this, _Foo_instances);
  1079        }
  1080      }
  1081      _init = __decoratorStart(null);
  1082      _Foo_instances = new WeakSet();
  1083      foo_fn = function() {
  1084      };
  1085      foo_fn = __decorateElement(_init, 17, "#foo", _foo_dec, _Foo_instances, foo_fn);
  1086      assertEq(() => got, void 0);
  1087      const instance = new Foo2();
  1088      assertEq(() => got.this, instance);
  1089      assertEq(() => got.args.length, 0);
  1090    },
  1091    "Method decorators: Extra initializer (private static method)": () => {
  1092      var _foo_dec, _init, _Foo_static, foo_fn;
  1093      let oldAddInitializer;
  1094      let got;
  1095      const dec = (fn, ctx) => {
  1096        ctx.addInitializer(function(...args) {
  1097          got = { this: this, args };
  1098        });
  1099        if (oldAddInitializer) assertThrows(() => oldAddInitializer(() => {
  1100        }), TypeError);
  1101        assertThrows(() => ctx.addInitializer({}), TypeError);
  1102        oldAddInitializer = ctx.addInitializer;
  1103      };
  1104      _foo_dec = [dec, dec];
  1105      class Foo2 {
  1106      }
  1107      _init = __decoratorStart(null);
  1108      _Foo_static = new WeakSet();
  1109      foo_fn = function() {
  1110      };
  1111      foo_fn = __decorateElement(_init, 25, "#foo", _foo_dec, _Foo_static, foo_fn);
  1112      __privateAdd(Foo2, _Foo_static);
  1113      __runInitializers(_init, 3, Foo2);
  1114      assertEq(() => got.this, Foo2);
  1115      assertEq(() => got.args.length, 0);
  1116    },
  1117    // Field decorators
  1118    "Field decorators: Basic (instance field)": () => {
  1119      var _baz_dec, _a, _bar_dec, _b, _foo_dec, _init;
  1120      const dec = (key) => (value, ctx) => {
  1121        assertEq(() => value, void 0);
  1122        assertEq(() => ctx.kind, "field");
  1123        assertEq(() => ctx.name, key);
  1124        assertEq(() => ctx.static, false);
  1125        assertEq(() => ctx.private, false);
  1126        assertEq(() => ctx.access.has({ [key]: false }), true);
  1127        assertEq(() => ctx.access.has({ bar: true }), false);
  1128        assertEq(() => ctx.access.get({ [key]: 123 }), 123);
  1129        assertEq(() => {
  1130          const obj = {};
  1131          ctx.access.set(obj, 321);
  1132          return obj[key];
  1133        }, 321);
  1134      };
  1135      const bar = Symbol("bar");
  1136      const baz = Symbol();
  1137      _foo_dec = [dec("foo")], _b = (_bar_dec = [dec(bar)], bar), _a = (_baz_dec = [dec(baz)], baz);
  1138      class Foo2 {
  1139        constructor() {
  1140          __publicField(this, "foo", __runInitializers(_init, 8, this, 123)), __runInitializers(_init, 11, this);
  1141          __publicField(this, _b, __runInitializers(_init, 12, this, 123)), __runInitializers(_init, 15, this);
  1142          __publicField(this, _a, __runInitializers(_init, 16, this, 123)), __runInitializers(_init, 19, this);
  1143        }
  1144      }
  1145      _init = __decoratorStart(null);
  1146      __decorateElement(_init, 5, "foo", _foo_dec, Foo2);
  1147      __decorateElement(_init, 5, _b, _bar_dec, Foo2);
  1148      __decorateElement(_init, 5, _a, _baz_dec, Foo2);
  1149      assertEq(() => new Foo2().foo, 123);
  1150      assertEq(() => new Foo2()[bar], 123);
  1151      assertEq(() => new Foo2()[baz], 123);
  1152    },
  1153    "Field decorators: Basic (static field)": () => {
  1154      var _baz_dec, _a, _bar_dec, _b, _foo_dec, _init;
  1155      const dec = (key) => (value, ctx) => {
  1156        assertEq(() => value, void 0);
  1157        assertEq(() => ctx.kind, "field");
  1158        assertEq(() => ctx.name, key);
  1159        assertEq(() => ctx.static, true);
  1160        assertEq(() => ctx.private, false);
  1161        assertEq(() => ctx.access.has({ [key]: false }), true);
  1162        assertEq(() => ctx.access.has({ bar: true }), false);
  1163        assertEq(() => ctx.access.get({ [key]: 123 }), 123);
  1164        assertEq(() => {
  1165          const obj = {};
  1166          ctx.access.set(obj, 321);
  1167          return obj[key];
  1168        }, 321);
  1169      };
  1170      const bar = Symbol("bar");
  1171      const baz = Symbol();
  1172      _foo_dec = [dec("foo")], _b = (_bar_dec = [dec(bar)], bar), _a = (_baz_dec = [dec(baz)], baz);
  1173      class Foo2 {
  1174      }
  1175      _init = __decoratorStart(null);
  1176      __decorateElement(_init, 13, "foo", _foo_dec, Foo2);
  1177      __decorateElement(_init, 13, _b, _bar_dec, Foo2);
  1178      __decorateElement(_init, 13, _a, _baz_dec, Foo2);
  1179      __publicField(Foo2, "foo", __runInitializers(_init, 8, Foo2, 123)), __runInitializers(_init, 11, Foo2);
  1180      __publicField(Foo2, _b, __runInitializers(_init, 12, Foo2, 123)), __runInitializers(_init, 15, Foo2);
  1181      __publicField(Foo2, _a, __runInitializers(_init, 16, Foo2, 123)), __runInitializers(_init, 19, Foo2);
  1182      assertEq(() => Foo2.foo, 123);
  1183      assertEq(() => Foo2[bar], 123);
  1184      assertEq(() => Foo2[baz], 123);
  1185    },
  1186    "Field decorators: Basic (private instance field)": () => {
  1187      var _foo_dec, _init, _foo;
  1188      let lateAsserts;
  1189      const dec = (value, ctx) => {
  1190        assertEq(() => value, void 0);
  1191        assertEq(() => ctx.kind, "field");
  1192        assertEq(() => ctx.name, "#foo");
  1193        assertEq(() => ctx.static, false);
  1194        assertEq(() => ctx.private, true);
  1195        lateAsserts = () => {
  1196          assertEq(() => ctx.access.has(new Foo2()), true);
  1197          assertEq(() => ctx.access.has({}), false);
  1198          assertEq(() => ctx.access.get(new Foo2()), 123);
  1199          assertEq(() => {
  1200            const obj = new Foo2();
  1201            ctx.access.set(obj, 321);
  1202            return get$foo(obj);
  1203          }, 321);
  1204        };
  1205      };
  1206      let get$foo;
  1207      _foo_dec = [dec];
  1208      class Foo2 {
  1209        constructor() {
  1210          __privateAdd(this, _foo, __runInitializers(_init, 8, this, 123)), __runInitializers(_init, 11, this);
  1211        }
  1212      }
  1213      _init = __decoratorStart(null);
  1214      _foo = new WeakMap();
  1215      __decorateElement(_init, 21, "#foo", _foo_dec, _foo);
  1216      get$foo = (x) => __privateGet(x, _foo);
  1217      assertEq(() => get$foo(new Foo2()), 123);
  1218      lateAsserts();
  1219    },
  1220    "Field decorators: Basic (private static field)": () => {
  1221      var _foo_dec, _init, _foo;
  1222      let lateAsserts;
  1223      const dec = (value, ctx) => {
  1224        assertEq(() => value, void 0);
  1225        assertEq(() => ctx.kind, "field");
  1226        assertEq(() => ctx.name, "#foo");
  1227        assertEq(() => ctx.static, true);
  1228        assertEq(() => ctx.private, true);
  1229        lateAsserts = () => {
  1230          assertEq(() => ctx.access.has(Foo2), true);
  1231          assertEq(() => ctx.access.has({}), false);
  1232          assertEq(() => ctx.access.get(Foo2), 123);
  1233          assertEq(() => {
  1234            ctx.access.set(Foo2, 321);
  1235            return get$foo(Foo2);
  1236          }, 321);
  1237        };
  1238      };
  1239      let get$foo;
  1240      _foo_dec = [dec];
  1241      class Foo2 {
  1242      }
  1243      _init = __decoratorStart(null);
  1244      _foo = new WeakMap();
  1245      __decorateElement(_init, 29, "#foo", _foo_dec, _foo);
  1246      __privateAdd(Foo2, _foo, __runInitializers(_init, 8, Foo2, 123)), __runInitializers(_init, 11, Foo2);
  1247      get$foo = (x) => __privateGet(x, _foo);
  1248      assertEq(() => get$foo(Foo2), 123);
  1249      lateAsserts();
  1250    },
  1251    "Field decorators: Shim (instance field)": () => {
  1252      var _bar_dec, _foo_dec, _init;
  1253      let log = [];
  1254      const dec = (value, ctx) => {
  1255        return function(x) {
  1256          assertEq(() => this instanceof Foo2, true);
  1257          return log.push("foo" in this, "bar" in this, x);
  1258        };
  1259      };
  1260      _foo_dec = [dec], _bar_dec = [dec];
  1261      class Foo2 {
  1262        constructor() {
  1263          __publicField(this, "foo", __runInitializers(_init, 8, this, 123)), __runInitializers(_init, 11, this);
  1264          __publicField(this, "bar", __runInitializers(_init, 12, this)), __runInitializers(_init, 15, this);
  1265        }
  1266      }
  1267      _init = __decoratorStart(null);
  1268      __decorateElement(_init, 5, "foo", _foo_dec, Foo2);
  1269      __decorateElement(_init, 5, "bar", _bar_dec, Foo2);
  1270      assertEq(() => log + "", "");
  1271      var obj = new Foo2();
  1272      assertEq(() => obj.foo, 3);
  1273      assertEq(() => obj.bar, 6);
  1274      assertEq(() => log + "", "false,false,123,true,false,");
  1275    },
  1276    "Field decorators: Shim (static field)": () => {
  1277      var _bar_dec, _foo_dec, _init;
  1278      let foo;
  1279      let log = [];
  1280      const dec = (value, ctx) => {
  1281        return function(x) {
  1282          assertEq(() => this, foo);
  1283          return log.push("foo" in this, "bar" in this, x);
  1284        };
  1285      };
  1286      assertEq(() => log + "", "");
  1287      _foo_dec = [dec], _bar_dec = [dec];
  1288      const _Foo = class _Foo {
  1289      };
  1290      _init = __decoratorStart(null);
  1291      __decorateElement(_init, 13, "foo", _foo_dec, _Foo);
  1292      __decorateElement(_init, 13, "bar", _bar_dec, _Foo);
  1293      foo = _Foo;
  1294      __publicField(_Foo, "foo", __runInitializers(_init, 8, _Foo, 123)), __runInitializers(_init, 11, _Foo);
  1295      __publicField(_Foo, "bar", __runInitializers(_init, 12, _Foo)), __runInitializers(_init, 15, _Foo);
  1296      let Foo2 = _Foo;
  1297      assertEq(() => Foo2.foo, 3);
  1298      assertEq(() => Foo2.bar, 6);
  1299      assertEq(() => log + "", "false,false,123,true,false,");
  1300    },
  1301    "Field decorators: Shim (private instance field)": () => {
  1302      var _bar_dec, _foo_dec, _init, _foo, _bar;
  1303      let log = [];
  1304      const dec = (value, ctx) => {
  1305        return function(x) {
  1306          assertEq(() => this instanceof Foo2, true);
  1307          return log.push(has$foo(this), has$bar(this), x);
  1308        };
  1309      };
  1310      let has$foo;
  1311      let has$bar;
  1312      let get$foo;
  1313      let get$bar;
  1314      _foo_dec = [dec], _bar_dec = [dec];
  1315      class Foo2 {
  1316        constructor() {
  1317          __privateAdd(this, _foo, __runInitializers(_init, 8, this, 123)), __runInitializers(_init, 11, this);
  1318          __privateAdd(this, _bar, __runInitializers(_init, 12, this)), __runInitializers(_init, 15, this);
  1319        }
  1320      }
  1321      _init = __decoratorStart(null);
  1322      _foo = new WeakMap();
  1323      _bar = new WeakMap();
  1324      __decorateElement(_init, 21, "#foo", _foo_dec, _foo);
  1325      __decorateElement(_init, 21, "#bar", _bar_dec, _bar);
  1326      has$foo = (x) => __privateIn(_foo, x);
  1327      has$bar = (x) => __privateIn(_bar, x);
  1328      get$foo = (x) => __privateGet(x, _foo);
  1329      get$bar = (x) => __privateGet(x, _bar);
  1330      assertEq(() => log + "", "");
  1331      var obj = new Foo2();
  1332      assertEq(() => get$foo(obj), 3);
  1333      assertEq(() => get$bar(obj), 6);
  1334      assertEq(() => log + "", "false,false,123,true,false,");
  1335    },
  1336    "Field decorators: Shim (private static field)": () => {
  1337      var _bar_dec, _foo_dec, _init, _foo, _bar;
  1338      let foo;
  1339      let log = [];
  1340      const dec = (value, ctx) => {
  1341        return function(x) {
  1342          assertEq(() => this, foo);
  1343          return log.push(has$foo(this), has$bar(this), x);
  1344        };
  1345      };
  1346      assertEq(() => log + "", "");
  1347      let has$foo;
  1348      let has$bar;
  1349      let get$foo;
  1350      let get$bar;
  1351      _foo_dec = [dec], _bar_dec = [dec];
  1352      const _Foo = class _Foo {
  1353      };
  1354      _init = __decoratorStart(null);
  1355      _foo = new WeakMap();
  1356      _bar = new WeakMap();
  1357      __decorateElement(_init, 29, "#foo", _foo_dec, _foo);
  1358      __decorateElement(_init, 29, "#bar", _bar_dec, _bar);
  1359      foo = _Foo;
  1360      has$foo = (x) => __privateIn(_foo, x);
  1361      has$bar = (x) => __privateIn(_bar, x);
  1362      get$foo = (x) => __privateGet(x, _foo);
  1363      get$bar = (x) => __privateGet(x, _bar);
  1364      __privateAdd(_Foo, _foo, __runInitializers(_init, 8, _Foo, 123)), __runInitializers(_init, 11, _Foo);
  1365      __privateAdd(_Foo, _bar, __runInitializers(_init, 12, _Foo)), __runInitializers(_init, 15, _Foo);
  1366      let Foo2 = _Foo;
  1367      assertEq(() => get$foo(Foo2), 3);
  1368      assertEq(() => get$bar(Foo2), 6);
  1369      assertEq(() => log + "", "false,false,123,true,false,");
  1370    },
  1371    "Field decorators: Order (instance field)": () => {
  1372      var _foo_dec, _init;
  1373      const log = [];
  1374      const dec1 = (value, ctx) => {
  1375        log.push(2);
  1376        return () => log.push(4);
  1377      };
  1378      const dec2 = (value, ctx) => {
  1379        log.push(1);
  1380        return () => log.push(5);
  1381      };
  1382      log.push(0);
  1383      _foo_dec = [dec1, dec2];
  1384      class Foo2 {
  1385        constructor() {
  1386          __publicField(this, "foo", __runInitializers(_init, 8, this, 123)), __runInitializers(_init, 11, this);
  1387        }
  1388      }
  1389      _init = __decoratorStart(null);
  1390      __decorateElement(_init, 5, "foo", _foo_dec, Foo2);
  1391      log.push(3);
  1392      var obj = new Foo2();
  1393      log.push(6);
  1394      assertEq(() => obj.foo, 6);
  1395      assertEq(() => log + "", "0,1,2,3,4,5,6");
  1396    },
  1397    "Field decorators: Order (static field)": () => {
  1398      var _foo_dec, _init;
  1399      const log = [];
  1400      const dec1 = (value, ctx) => {
  1401        log.push(2);
  1402        return () => log.push(3);
  1403      };
  1404      const dec2 = (value, ctx) => {
  1405        log.push(1);
  1406        return () => log.push(4);
  1407      };
  1408      log.push(0);
  1409      _foo_dec = [dec1, dec2];
  1410      class Foo2 {
  1411      }
  1412      _init = __decoratorStart(null);
  1413      __decorateElement(_init, 13, "foo", _foo_dec, Foo2);
  1414      __publicField(Foo2, "foo", __runInitializers(_init, 8, Foo2, 123)), __runInitializers(_init, 11, Foo2);
  1415      log.push(5);
  1416      assertEq(() => Foo2.foo, 5);
  1417      assertEq(() => log + "", "0,1,2,3,4,5");
  1418    },
  1419    "Field decorators: Order (private instance field)": () => {
  1420      var _foo_dec, _init, _foo;
  1421      const log = [];
  1422      const dec1 = (value, ctx) => {
  1423        log.push(2);
  1424        return () => log.push(4);
  1425      };
  1426      const dec2 = (value, ctx) => {
  1427        log.push(1);
  1428        return () => log.push(5);
  1429      };
  1430      log.push(0);
  1431      let get$foo;
  1432      _foo_dec = [dec1, dec2];
  1433      class Foo2 {
  1434        constructor() {
  1435          __privateAdd(this, _foo, __runInitializers(_init, 8, this, 123)), __runInitializers(_init, 11, this);
  1436        }
  1437      }
  1438      _init = __decoratorStart(null);
  1439      _foo = new WeakMap();
  1440      __decorateElement(_init, 21, "#foo", _foo_dec, _foo);
  1441      get$foo = (x) => __privateGet(x, _foo);
  1442      log.push(3);
  1443      var obj = new Foo2();
  1444      log.push(6);
  1445      assertEq(() => get$foo(obj), 6);
  1446      assertEq(() => log + "", "0,1,2,3,4,5,6");
  1447    },
  1448    "Field decorators: Order (private static field)": () => {
  1449      var _foo_dec, _init, _foo;
  1450      const log = [];
  1451      const dec1 = (value, ctx) => {
  1452        log.push(2);
  1453        return () => log.push(3);
  1454      };
  1455      const dec2 = (value, ctx) => {
  1456        log.push(1);
  1457        return () => log.push(4);
  1458      };
  1459      log.push(0);
  1460      let get$foo;
  1461      _foo_dec = [dec1, dec2];
  1462      class Foo2 {
  1463      }
  1464      _init = __decoratorStart(null);
  1465      _foo = new WeakMap();
  1466      __decorateElement(_init, 29, "#foo", _foo_dec, _foo);
  1467      __privateAdd(Foo2, _foo, __runInitializers(_init, 8, Foo2, 123)), __runInitializers(_init, 11, Foo2);
  1468      get$foo = (x) => __privateGet(x, _foo);
  1469      log.push(5);
  1470      assertEq(() => get$foo(Foo2), 5);
  1471      assertEq(() => log + "", "0,1,2,3,4,5");
  1472    },
  1473    "Field decorators: Return null (instance field)": () => {
  1474      assertThrows(() => {
  1475        var _foo_dec, _init;
  1476        const dec = (value, ctx) => {
  1477          return null;
  1478        };
  1479        _foo_dec = [dec];
  1480        class Foo2 {
  1481          constructor() {
  1482            __publicField(this, "foo", __runInitializers(_init, 8, this)), __runInitializers(_init, 11, this);
  1483          }
  1484        }
  1485        _init = __decoratorStart(null);
  1486        __decorateElement(_init, 5, "foo", _foo_dec, Foo2);
  1487      }, TypeError);
  1488    },
  1489    "Field decorators: Return null (static field)": () => {
  1490      assertThrows(() => {
  1491        var _foo_dec, _init;
  1492        const dec = (value, ctx) => {
  1493          return null;
  1494        };
  1495        _foo_dec = [dec];
  1496        class Foo2 {
  1497        }
  1498        _init = __decoratorStart(null);
  1499        __decorateElement(_init, 13, "foo", _foo_dec, Foo2);
  1500        __publicField(Foo2, "foo", __runInitializers(_init, 8, Foo2)), __runInitializers(_init, 11, Foo2);
  1501      }, TypeError);
  1502    },
  1503    "Field decorators: Return null (private instance field)": () => {
  1504      assertThrows(() => {
  1505        var _foo_dec, _init, _foo;
  1506        const dec = (value, ctx) => {
  1507          return null;
  1508        };
  1509        _foo_dec = [dec];
  1510        class Foo2 {
  1511          constructor() {
  1512            __privateAdd(this, _foo, __runInitializers(_init, 8, this)), __runInitializers(_init, 11, this);
  1513          }
  1514        }
  1515        _init = __decoratorStart(null);
  1516        _foo = new WeakMap();
  1517        __decorateElement(_init, 21, "#foo", _foo_dec, _foo);
  1518      }, TypeError);
  1519    },
  1520    "Field decorators: Return null (private static field)": () => {
  1521      assertThrows(() => {
  1522        var _foo_dec, _init, _foo;
  1523        const dec = (value, ctx) => {
  1524          return null;
  1525        };
  1526        _foo_dec = [dec];
  1527        class Foo2 {
  1528        }
  1529        _init = __decoratorStart(null);
  1530        _foo = new WeakMap();
  1531        __decorateElement(_init, 29, "#foo", _foo_dec, _foo);
  1532        __privateAdd(Foo2, _foo, __runInitializers(_init, 8, Foo2)), __runInitializers(_init, 11, Foo2);
  1533      }, TypeError);
  1534    },
  1535    "Field decorators: Return object (instance field)": () => {
  1536      assertThrows(() => {
  1537        var _foo_dec, _init;
  1538        const dec = (value, ctx) => {
  1539          return {};
  1540        };
  1541        _foo_dec = [dec];
  1542        class Foo2 {
  1543          constructor() {
  1544            __publicField(this, "foo", __runInitializers(_init, 8, this)), __runInitializers(_init, 11, this);
  1545          }
  1546        }
  1547        _init = __decoratorStart(null);
  1548        __decorateElement(_init, 5, "foo", _foo_dec, Foo2);
  1549      }, TypeError);
  1550    },
  1551    "Field decorators: Return object (static field)": () => {
  1552      assertThrows(() => {
  1553        var _foo_dec, _init;
  1554        const dec = (value, ctx) => {
  1555          return {};
  1556        };
  1557        _foo_dec = [dec];
  1558        class Foo2 {
  1559        }
  1560        _init = __decoratorStart(null);
  1561        __decorateElement(_init, 13, "foo", _foo_dec, Foo2);
  1562        __publicField(Foo2, "foo", __runInitializers(_init, 8, Foo2)), __runInitializers(_init, 11, Foo2);
  1563      }, TypeError);
  1564    },
  1565    "Field decorators: Return object (private instance field)": () => {
  1566      assertThrows(() => {
  1567        var _foo_dec, _init, _foo;
  1568        const dec = (value, ctx) => {
  1569          return {};
  1570        };
  1571        _foo_dec = [dec];
  1572        class Foo2 {
  1573          constructor() {
  1574            __privateAdd(this, _foo, __runInitializers(_init, 8, this)), __runInitializers(_init, 11, this);
  1575          }
  1576        }
  1577        _init = __decoratorStart(null);
  1578        _foo = new WeakMap();
  1579        __decorateElement(_init, 21, "#foo", _foo_dec, _foo);
  1580      }, TypeError);
  1581    },
  1582    "Field decorators: Return object (private static field)": () => {
  1583      assertThrows(() => {
  1584        var _foo_dec, _init, _foo;
  1585        const dec = (value, ctx) => {
  1586          return {};
  1587        };
  1588        _foo_dec = [dec];
  1589        class Foo2 {
  1590        }
  1591        _init = __decoratorStart(null);
  1592        _foo = new WeakMap();
  1593        __decorateElement(_init, 29, "#foo", _foo_dec, _foo);
  1594        __privateAdd(Foo2, _foo, __runInitializers(_init, 8, Foo2)), __runInitializers(_init, 11, Foo2);
  1595      }, TypeError);
  1596    },
  1597    "Field decorators: Extra initializer (instance field)": () => {
  1598      var _foo_dec, _init;
  1599      let oldAddInitializer;
  1600      let got;
  1601      const dec = (value, ctx) => {
  1602        ctx.addInitializer(function(...args) {
  1603          got = { this: this, args };
  1604        });
  1605        if (oldAddInitializer) assertThrows(() => oldAddInitializer(() => {
  1606        }), TypeError);
  1607        assertThrows(() => ctx.addInitializer({}), TypeError);
  1608        oldAddInitializer = ctx.addInitializer;
  1609      };
  1610      _foo_dec = [dec, dec];
  1611      class Foo2 {
  1612        constructor() {
  1613          __publicField(this, "foo", __runInitializers(_init, 8, this)), __runInitializers(_init, 11, this);
  1614        }
  1615      }
  1616      _init = __decoratorStart(null);
  1617      __decorateElement(_init, 5, "foo", _foo_dec, Foo2);
  1618      assertEq(() => got, void 0);
  1619      const instance = new Foo2();
  1620      assertEq(() => got.this, instance);
  1621      assertEq(() => got.args.length, 0);
  1622    },
  1623    "Field decorators: Extra initializer (static field)": () => {
  1624      var _foo_dec, _init;
  1625      let oldAddInitializer;
  1626      let got;
  1627      const dec = (value, ctx) => {
  1628        ctx.addInitializer(function(...args) {
  1629          got = { this: this, args };
  1630        });
  1631        if (oldAddInitializer) assertThrows(() => oldAddInitializer(() => {
  1632        }), TypeError);
  1633        assertThrows(() => ctx.addInitializer({}), TypeError);
  1634        oldAddInitializer = ctx.addInitializer;
  1635      };
  1636      _foo_dec = [dec, dec];
  1637      class Foo2 {
  1638      }
  1639      _init = __decoratorStart(null);
  1640      __decorateElement(_init, 13, "foo", _foo_dec, Foo2);
  1641      __publicField(Foo2, "foo", __runInitializers(_init, 8, Foo2)), __runInitializers(_init, 11, Foo2);
  1642      assertEq(() => got.this, Foo2);
  1643      assertEq(() => got.args.length, 0);
  1644    },
  1645    "Field decorators: Extra initializer (private instance field)": () => {
  1646      var _foo_dec, _init, _foo;
  1647      let oldAddInitializer;
  1648      let got;
  1649      const dec = (value, ctx) => {
  1650        ctx.addInitializer(function(...args) {
  1651          got = { this: this, args };
  1652        });
  1653        if (oldAddInitializer) assertThrows(() => oldAddInitializer(() => {
  1654        }), TypeError);
  1655        assertThrows(() => ctx.addInitializer({}), TypeError);
  1656        oldAddInitializer = ctx.addInitializer;
  1657      };
  1658      _foo_dec = [dec, dec];
  1659      class Foo2 {
  1660        constructor() {
  1661          __privateAdd(this, _foo, __runInitializers(_init, 8, this)), __runInitializers(_init, 11, this);
  1662        }
  1663      }
  1664      _init = __decoratorStart(null);
  1665      _foo = new WeakMap();
  1666      __decorateElement(_init, 21, "#foo", _foo_dec, _foo);
  1667      assertEq(() => got, void 0);
  1668      const instance = new Foo2();
  1669      assertEq(() => got.this, instance);
  1670      assertEq(() => got.args.length, 0);
  1671    },
  1672    "Field decorators: Extra initializer (private static field)": () => {
  1673      var _foo_dec, _init, _foo;
  1674      let oldAddInitializer;
  1675      let got;
  1676      const dec = (value, ctx) => {
  1677        ctx.addInitializer(function(...args) {
  1678          got = { this: this, args };
  1679        });
  1680        if (oldAddInitializer) assertThrows(() => oldAddInitializer(() => {
  1681        }), TypeError);
  1682        assertThrows(() => ctx.addInitializer({}), TypeError);
  1683        oldAddInitializer = ctx.addInitializer;
  1684      };
  1685      _foo_dec = [dec, dec];
  1686      class Foo2 {
  1687      }
  1688      _init = __decoratorStart(null);
  1689      _foo = new WeakMap();
  1690      __decorateElement(_init, 29, "#foo", _foo_dec, _foo);
  1691      __privateAdd(Foo2, _foo, __runInitializers(_init, 8, Foo2)), __runInitializers(_init, 11, Foo2);
  1692      assertEq(() => got.this, Foo2);
  1693      assertEq(() => got.args.length, 0);
  1694    },
  1695    // Getter decorators
  1696    "Getter decorators: Basic (instance getter)": () => {
  1697      var _baz_dec, _a, _bar_dec, _b, _foo_dec, _init;
  1698      const dec = (key, name) => (fn, ctx) => {
  1699        assertEq(() => typeof fn, "function");
  1700        assertEq(() => fn.name, name);
  1701        assertEq(() => ctx.kind, "getter");
  1702        assertEq(() => ctx.name, key);
  1703        assertEq(() => ctx.static, false);
  1704        assertEq(() => ctx.private, false);
  1705        assertEq(() => ctx.access.has({ [key]: false }), true);
  1706        assertEq(() => ctx.access.has({ bar: true }), false);
  1707        assertEq(() => ctx.access.get({ [key]: 123 }), 123);
  1708        assertEq(() => "set" in ctx.access, false);
  1709      };
  1710      const bar = Symbol("bar");
  1711      const baz = Symbol();
  1712      class Foo2 {
  1713        constructor() {
  1714          __runInitializers(_init, 5, this);
  1715          __publicField(this, "bar", 123);
  1716        }
  1717        get foo() {
  1718          return this.bar;
  1719        }
  1720        get [(_foo_dec = [dec("foo", "get foo")], _b = (_bar_dec = [dec(bar, "get [bar]")], bar))]() {
  1721          return this.bar;
  1722        }
  1723        get [_a = (_baz_dec = [dec(baz, "get ")], baz)]() {
  1724          return this.bar;
  1725        }
  1726      }
  1727      _init = __decoratorStart(null);
  1728      __decorateElement(_init, 2, "foo", _foo_dec, Foo2);
  1729      __decorateElement(_init, 2, _b, _bar_dec, Foo2);
  1730      __decorateElement(_init, 2, _a, _baz_dec, Foo2);
  1731      assertEq(() => new Foo2().foo, 123);
  1732      assertEq(() => new Foo2()[bar], 123);
  1733      assertEq(() => new Foo2()[baz], 123);
  1734    },
  1735    "Getter decorators: Basic (static getter)": () => {
  1736      var _baz_dec, _a, _bar_dec, _b, _foo_dec, _init;
  1737      const dec = (key, name) => (fn, ctx) => {
  1738        assertEq(() => typeof fn, "function");
  1739        assertEq(() => fn.name, name);
  1740        assertEq(() => ctx.kind, "getter");
  1741        assertEq(() => ctx.name, key);
  1742        assertEq(() => ctx.static, true);
  1743        assertEq(() => ctx.private, false);
  1744        assertEq(() => ctx.access.has({ [key]: false }), true);
  1745        assertEq(() => ctx.access.has({ bar: true }), false);
  1746        assertEq(() => ctx.access.get({ [key]: 123 }), 123);
  1747        assertEq(() => "set" in ctx.access, false);
  1748      };
  1749      const bar = Symbol("bar");
  1750      const baz = Symbol();
  1751      class Foo2 {
  1752        static get foo() {
  1753          return this.bar;
  1754        }
  1755        static get [(_foo_dec = [dec("foo", "get foo")], _b = (_bar_dec = [dec(bar, "get [bar]")], bar))]() {
  1756          return this.bar;
  1757        }
  1758        static get [_a = (_baz_dec = [dec(baz, "get ")], baz)]() {
  1759          return this.bar;
  1760        }
  1761      }
  1762      _init = __decoratorStart(null);
  1763      __decorateElement(_init, 10, "foo", _foo_dec, Foo2);
  1764      __decorateElement(_init, 10, _b, _bar_dec, Foo2);
  1765      __decorateElement(_init, 10, _a, _baz_dec, Foo2);
  1766      __runInitializers(_init, 3, Foo2);
  1767      __publicField(Foo2, "bar", 123);
  1768      assertEq(() => Foo2.foo, 123);
  1769      assertEq(() => Foo2[bar], 123);
  1770      assertEq(() => Foo2[baz], 123);
  1771    },
  1772    "Getter decorators: Basic (private instance getter)": () => {
  1773      var _foo_dec, _bar, _init, _Foo_instances, foo_get;
  1774      let lateAsserts;
  1775      const dec = (fn, ctx) => {
  1776        assertEq(() => typeof fn, "function");
  1777        assertEq(() => fn.name, "get #foo");
  1778        assertEq(() => ctx.kind, "getter");
  1779        assertEq(() => ctx.name, "#foo");
  1780        assertEq(() => ctx.static, false);
  1781        assertEq(() => ctx.private, true);
  1782        lateAsserts = () => {
  1783          assertEq(() => ctx.access.has(new Foo2()), true);
  1784          assertEq(() => ctx.access.has({}), false);
  1785          assertEq(() => ctx.access.get(new Foo2()), 123);
  1786          assertEq(() => "set" in ctx.access, false);
  1787        };
  1788      };
  1789      let get$foo;
  1790      _foo_dec = [dec];
  1791      class Foo2 {
  1792        constructor() {
  1793          __runInitializers(_init, 5, this);
  1794          __privateAdd(this, _Foo_instances);
  1795          __privateAdd(this, _bar, 123);
  1796        }
  1797      }
  1798      _init = __decoratorStart(null);
  1799      _bar = new WeakMap();
  1800      _Foo_instances = new WeakSet();
  1801      foo_get = function() {
  1802        return __privateGet(this, _bar);
  1803      };
  1804      foo_get = __decorateElement(_init, 18, "#foo", _foo_dec, _Foo_instances, foo_get);
  1805      get$foo = (x) => __privateGet(x, _Foo_instances, foo_get);
  1806      assertEq(() => get$foo(new Foo2()), 123);
  1807      lateAsserts();
  1808    },
  1809    "Getter decorators: Basic (private static getter)": () => {
  1810      var _foo_dec, _bar, _init, _Foo_static, foo_get;
  1811      let lateAsserts;
  1812      const dec = (fn, ctx) => {
  1813        assertEq(() => typeof fn, "function");
  1814        assertEq(() => fn.name, "get #foo");
  1815        assertEq(() => ctx.kind, "getter");
  1816        assertEq(() => ctx.name, "#foo");
  1817        assertEq(() => ctx.static, true);
  1818        assertEq(() => ctx.private, true);
  1819        lateAsserts = () => {
  1820          assertEq(() => ctx.access.has(Foo2), true);
  1821          assertEq(() => ctx.access.has({}), false);
  1822          assertEq(() => ctx.access.get(Foo2), 123);
  1823          assertEq(() => "set" in ctx.access, false);
  1824        };
  1825      };
  1826      let get$foo;
  1827      _foo_dec = [dec];
  1828      class Foo2 {
  1829      }
  1830      _init = __decoratorStart(null);
  1831      _bar = new WeakMap();
  1832      _Foo_static = new WeakSet();
  1833      foo_get = function() {
  1834        return __privateGet(this, _bar);
  1835      };
  1836      foo_get = __decorateElement(_init, 26, "#foo", _foo_dec, _Foo_static, foo_get);
  1837      __privateAdd(Foo2, _Foo_static);
  1838      __runInitializers(_init, 3, Foo2);
  1839      __privateAdd(Foo2, _bar, 123);
  1840      get$foo = (x) => __privateGet(x, _Foo_static, foo_get);
  1841      assertEq(() => get$foo(Foo2), 123);
  1842      lateAsserts();
  1843    },
  1844    "Getter decorators: Shim (instance getter)": () => {
  1845      var _foo_dec, _init;
  1846      let bar;
  1847      const dec = (fn, ctx) => {
  1848        bar = function() {
  1849          return fn.call(this) + 1;
  1850        };
  1851        return bar;
  1852      };
  1853      _foo_dec = [dec];
  1854      class Foo2 {
  1855        constructor() {
  1856          __runInitializers(_init, 5, this);
  1857          __publicField(this, "bar", 123);
  1858        }
  1859        get foo() {
  1860          return this.bar;
  1861        }
  1862      }
  1863      _init = __decoratorStart(null);
  1864      __decorateElement(_init, 2, "foo", _foo_dec, Foo2);
  1865      assertEq(() => Object.getOwnPropertyDescriptor(Foo2.prototype, "foo").get, bar);
  1866      assertEq(() => new Foo2().foo, 124);
  1867    },
  1868    "Getter decorators: Shim (static getter)": () => {
  1869      var _foo_dec, _init;
  1870      let bar;
  1871      const dec = (fn, ctx) => {
  1872        bar = function() {
  1873          return fn.call(this) + 1;
  1874        };
  1875        return bar;
  1876      };
  1877      _foo_dec = [dec];
  1878      class Foo2 {
  1879        static get foo() {
  1880          return this.bar;
  1881        }
  1882      }
  1883      _init = __decoratorStart(null);
  1884      __decorateElement(_init, 10, "foo", _foo_dec, Foo2);
  1885      __runInitializers(_init, 3, Foo2);
  1886      __publicField(Foo2, "bar", 123);
  1887      assertEq(() => Object.getOwnPropertyDescriptor(Foo2, "foo").get, bar);
  1888      assertEq(() => Foo2.foo, 124);
  1889    },
  1890    "Getter decorators: Shim (private instance getter)": () => {
  1891      var _foo_dec, _bar, _init, _Foo_instances, foo_get;
  1892      let bar;
  1893      const dec = (fn, ctx) => {
  1894        bar = function() {
  1895          return fn.call(this) + 1;
  1896        };
  1897        return bar;
  1898      };
  1899      let get$foo;
  1900      _foo_dec = [dec];
  1901      class Foo2 {
  1902        constructor() {
  1903          __runInitializers(_init, 5, this);
  1904          __privateAdd(this, _Foo_instances);
  1905          __privateAdd(this, _bar, 123);
  1906        }
  1907      }
  1908      _init = __decoratorStart(null);
  1909      _bar = new WeakMap();
  1910      _Foo_instances = new WeakSet();
  1911      foo_get = function() {
  1912        return __privateGet(this, _bar);
  1913      };
  1914      foo_get = __decorateElement(_init, 18, "#foo", _foo_dec, _Foo_instances, foo_get);
  1915      get$foo = (x) => __privateGet(x, _Foo_instances, foo_get);
  1916      assertEq(() => get$foo(new Foo2()), 124);
  1917    },
  1918    "Getter decorators: Shim (private static getter)": () => {
  1919      var _foo_dec, _bar, _init, _Foo_static, foo_get;
  1920      let bar;
  1921      const dec = (fn, ctx) => {
  1922        bar = function() {
  1923          return fn.call(this) + 1;
  1924        };
  1925        return bar;
  1926      };
  1927      let get$foo;
  1928      _foo_dec = [dec];
  1929      class Foo2 {
  1930      }
  1931      _init = __decoratorStart(null);
  1932      _bar = new WeakMap();
  1933      _Foo_static = new WeakSet();
  1934      foo_get = function() {
  1935        return __privateGet(this, _bar);
  1936      };
  1937      foo_get = __decorateElement(_init, 26, "#foo", _foo_dec, _Foo_static, foo_get);
  1938      __privateAdd(Foo2, _Foo_static);
  1939      __runInitializers(_init, 3, Foo2);
  1940      __privateAdd(Foo2, _bar, 123);
  1941      get$foo = (x) => __privateGet(x, _Foo_static, foo_get);
  1942      assertEq(() => get$foo(Foo2), 124);
  1943    },
  1944    "Getter decorators: Order (instance getter)": () => {
  1945      var _foo_dec, _init;
  1946      const log = [];
  1947      let bar;
  1948      let baz;
  1949      const dec1 = (fn, ctx) => {
  1950        log.push(2);
  1951        bar = function() {
  1952          log.push(4);
  1953          return fn.call(this);
  1954        };
  1955        return bar;
  1956      };
  1957      const dec2 = (fn, ctx) => {
  1958        log.push(1);
  1959        baz = function() {
  1960          log.push(5);
  1961          return fn.call(this);
  1962        };
  1963        return baz;
  1964      };
  1965      log.push(0);
  1966      _foo_dec = [dec1, dec2];
  1967      class Foo2 {
  1968        constructor() {
  1969          __runInitializers(_init, 5, this);
  1970        }
  1971        get foo() {
  1972          return log.push(6);
  1973        }
  1974      }
  1975      _init = __decoratorStart(null);
  1976      __decorateElement(_init, 2, "foo", _foo_dec, Foo2);
  1977      log.push(3);
  1978      new Foo2().foo;
  1979      log.push(7);
  1980      assertEq(() => Object.getOwnPropertyDescriptor(Foo2.prototype, "foo").get, bar);
  1981      assertEq(() => log + "", "0,1,2,3,4,5,6,7");
  1982    },
  1983    "Getter decorators: Order (static getter)": () => {
  1984      var _foo_dec, _init;
  1985      const log = [];
  1986      let bar;
  1987      let baz;
  1988      const dec1 = (fn, ctx) => {
  1989        log.push(2);
  1990        bar = function() {
  1991          log.push(4);
  1992          return fn.call(this);
  1993        };
  1994        return bar;
  1995      };
  1996      const dec2 = (fn, ctx) => {
  1997        log.push(1);
  1998        baz = function() {
  1999          log.push(5);
  2000          return fn.call(this);
  2001        };
  2002        return baz;
  2003      };
  2004      log.push(0);
  2005      _foo_dec = [dec1, dec2];
  2006      class Foo2 {
  2007        static get foo() {
  2008          return log.push(6);
  2009        }
  2010      }
  2011      _init = __decoratorStart(null);
  2012      __decorateElement(_init, 10, "foo", _foo_dec, Foo2);
  2013      __runInitializers(_init, 3, Foo2);
  2014      log.push(3);
  2015      Foo2.foo;
  2016      log.push(7);
  2017      assertEq(() => Object.getOwnPropertyDescriptor(Foo2, "foo").get, bar);
  2018      assertEq(() => log + "", "0,1,2,3,4,5,6,7");
  2019    },
  2020    "Getter decorators: Order (private instance getter)": () => {
  2021      var _foo_dec, _init, _Foo_instances, foo_get;
  2022      const log = [];
  2023      let bar;
  2024      let baz;
  2025      const dec1 = (fn, ctx) => {
  2026        log.push(2);
  2027        bar = function() {
  2028          log.push(4);
  2029          return fn.call(this);
  2030        };
  2031        return bar;
  2032      };
  2033      const dec2 = (fn, ctx) => {
  2034        log.push(1);
  2035        baz = function() {
  2036          log.push(5);
  2037          return fn.call(this);
  2038        };
  2039        return baz;
  2040      };
  2041      log.push(0);
  2042      let get$foo;
  2043      _foo_dec = [dec1, dec2];
  2044      class Foo2 {
  2045        constructor() {
  2046          __runInitializers(_init, 5, this);
  2047          __privateAdd(this, _Foo_instances);
  2048        }
  2049      }
  2050      _init = __decoratorStart(null);
  2051      _Foo_instances = new WeakSet();
  2052      foo_get = function() {
  2053        return log.push(6);
  2054      };
  2055      foo_get = __decorateElement(_init, 18, "#foo", _foo_dec, _Foo_instances, foo_get);
  2056      get$foo = (x) => __privateGet(x, _Foo_instances, foo_get);
  2057      log.push(3);
  2058      assertEq(() => get$foo(new Foo2()), 7);
  2059      log.push(7);
  2060      assertEq(() => log + "", "0,1,2,3,4,5,6,7");
  2061    },
  2062    "Getter decorators: Order (private static getter)": () => {
  2063      var _foo_dec, _init, _Foo_static, foo_get;
  2064      const log = [];
  2065      let bar;
  2066      let baz;
  2067      const dec1 = (fn, ctx) => {
  2068        log.push(2);
  2069        bar = function() {
  2070          log.push(4);
  2071          return fn.call(this);
  2072        };
  2073        return bar;
  2074      };
  2075      const dec2 = (fn, ctx) => {
  2076        log.push(1);
  2077        baz = function() {
  2078          log.push(5);
  2079          return fn.call(this);
  2080        };
  2081        return baz;
  2082      };
  2083      log.push(0);
  2084      let get$foo;
  2085      _foo_dec = [dec1, dec2];
  2086      class Foo2 {
  2087      }
  2088      _init = __decoratorStart(null);
  2089      _Foo_static = new WeakSet();
  2090      foo_get = function() {
  2091        return log.push(6);
  2092      };
  2093      foo_get = __decorateElement(_init, 26, "#foo", _foo_dec, _Foo_static, foo_get);
  2094      __privateAdd(Foo2, _Foo_static);
  2095      __runInitializers(_init, 3, Foo2);
  2096      get$foo = (x) => __privateGet(x, _Foo_static, foo_get);
  2097      log.push(3);
  2098      assertEq(() => get$foo(Foo2), 7);
  2099      log.push(7);
  2100      assertEq(() => log + "", "0,1,2,3,4,5,6,7");
  2101    },
  2102    "Getter decorators: Return null (instance getter)": () => {
  2103      assertThrows(() => {
  2104        var _foo_dec, _init;
  2105        const dec = (fn, ctx) => {
  2106          return null;
  2107        };
  2108        _foo_dec = [dec];
  2109        class Foo2 {
  2110          constructor() {
  2111            __runInitializers(_init, 5, this);
  2112          }
  2113          get foo() {
  2114            return;
  2115          }
  2116        }
  2117        _init = __decoratorStart(null);
  2118        __decorateElement(_init, 2, "foo", _foo_dec, Foo2);
  2119      }, TypeError);
  2120    },
  2121    "Getter decorators: Return null (static getter)": () => {
  2122      assertThrows(() => {
  2123        var _foo_dec, _init;
  2124        const dec = (fn, ctx) => {
  2125          return null;
  2126        };
  2127        _foo_dec = [dec];
  2128        class Foo2 {
  2129          static get foo() {
  2130            return;
  2131          }
  2132        }
  2133        _init = __decoratorStart(null);
  2134        __decorateElement(_init, 10, "foo", _foo_dec, Foo2);
  2135        __runInitializers(_init, 3, Foo2);
  2136      }, TypeError);
  2137    },
  2138    "Getter decorators: Return null (private instance getter)": () => {
  2139      assertThrows(() => {
  2140        var _foo_dec, _init, _Foo_instances, foo_get;
  2141        const dec = (fn, ctx) => {
  2142          return null;
  2143        };
  2144        _foo_dec = [dec];
  2145        class Foo2 {
  2146          constructor() {
  2147            __runInitializers(_init, 5, this);
  2148            __privateAdd(this, _Foo_instances);
  2149          }
  2150        }
  2151        _init = __decoratorStart(null);
  2152        _Foo_instances = new WeakSet();
  2153        foo_get = function() {
  2154          return;
  2155        };
  2156        foo_get = __decorateElement(_init, 18, "#foo", _foo_dec, _Foo_instances, foo_get);
  2157      }, TypeError);
  2158    },
  2159    "Getter decorators: Return null (private static getter)": () => {
  2160      assertThrows(() => {
  2161        var _foo_dec, _init, _Foo_static, foo_get;
  2162        const dec = (fn, ctx) => {
  2163          return null;
  2164        };
  2165        _foo_dec = [dec];
  2166        class Foo2 {
  2167        }
  2168        _init = __decoratorStart(null);
  2169        _Foo_static = new WeakSet();
  2170        foo_get = function() {
  2171          return;
  2172        };
  2173        foo_get = __decorateElement(_init, 26, "#foo", _foo_dec, _Foo_static, foo_get);
  2174        __privateAdd(Foo2, _Foo_static);
  2175        __runInitializers(_init, 3, Foo2);
  2176      }, TypeError);
  2177    },
  2178    "Getter decorators: Return object (instance getter)": () => {
  2179      assertThrows(() => {
  2180        var _foo_dec, _init;
  2181        const dec = (fn, ctx) => {
  2182          return {};
  2183        };
  2184        _foo_dec = [dec];
  2185        class Foo2 {
  2186          constructor() {
  2187            __runInitializers(_init, 5, this);
  2188          }
  2189          get foo() {
  2190            return;
  2191          }
  2192        }
  2193        _init = __decoratorStart(null);
  2194        __decorateElement(_init, 2, "foo", _foo_dec, Foo2);
  2195      }, TypeError);
  2196    },
  2197    "Getter decorators: Return object (static getter)": () => {
  2198      assertThrows(() => {
  2199        var _foo_dec, _init;
  2200        const dec = (fn, ctx) => {
  2201          return {};
  2202        };
  2203        _foo_dec = [dec];
  2204        class Foo2 {
  2205          static get foo() {
  2206            return;
  2207          }
  2208        }
  2209        _init = __decoratorStart(null);
  2210        __decorateElement(_init, 10, "foo", _foo_dec, Foo2);
  2211        __runInitializers(_init, 3, Foo2);
  2212      }, TypeError);
  2213    },
  2214    "Getter decorators: Return object (private instance getter)": () => {
  2215      assertThrows(() => {
  2216        var _foo_dec, _init, _Foo_instances, foo_get;
  2217        const dec = (fn, ctx) => {
  2218          return {};
  2219        };
  2220        _foo_dec = [dec];
  2221        class Foo2 {
  2222          constructor() {
  2223            __runInitializers(_init, 5, this);
  2224            __privateAdd(this, _Foo_instances);
  2225          }
  2226        }
  2227        _init = __decoratorStart(null);
  2228        _Foo_instances = new WeakSet();
  2229        foo_get = function() {
  2230          return;
  2231        };
  2232        foo_get = __decorateElement(_init, 18, "#foo", _foo_dec, _Foo_instances, foo_get);
  2233      }, TypeError);
  2234    },
  2235    "Getter decorators: Return object (private static getter)": () => {
  2236      assertThrows(() => {
  2237        var _foo_dec, _init, _Foo_static, foo_get;
  2238        const dec = (fn, ctx) => {
  2239          return {};
  2240        };
  2241        _foo_dec = [dec];
  2242        class Foo2 {
  2243        }
  2244        _init = __decoratorStart(null);
  2245        _Foo_static = new WeakSet();
  2246        foo_get = function() {
  2247          return;
  2248        };
  2249        foo_get = __decorateElement(_init, 26, "#foo", _foo_dec, _Foo_static, foo_get);
  2250        __privateAdd(Foo2, _Foo_static);
  2251        __runInitializers(_init, 3, Foo2);
  2252      }, TypeError);
  2253    },
  2254    "Getter decorators: Extra initializer (instance getter)": () => {
  2255      var _foo_dec, _init;
  2256      let oldAddInitializer;
  2257      let got;
  2258      const dec = (fn, ctx) => {
  2259        ctx.addInitializer(function(...args) {
  2260          got = { this: this, args };
  2261        });
  2262        if (oldAddInitializer) assertThrows(() => oldAddInitializer(() => {
  2263        }), TypeError);
  2264        assertThrows(() => ctx.addInitializer({}), TypeError);
  2265        oldAddInitializer = ctx.addInitializer;
  2266      };
  2267      _foo_dec = [dec, dec];
  2268      class Foo2 {
  2269        constructor() {
  2270          __runInitializers(_init, 5, this);
  2271        }
  2272        get foo() {
  2273          return;
  2274        }
  2275      }
  2276      _init = __decoratorStart(null);
  2277      __decorateElement(_init, 2, "foo", _foo_dec, Foo2);
  2278      assertEq(() => got, void 0);
  2279      const instance = new Foo2();
  2280      assertEq(() => got.this, instance);
  2281      assertEq(() => got.args.length, 0);
  2282    },
  2283    "Getter decorators: Extra initializer (static getter)": () => {
  2284      var _foo_dec, _init;
  2285      let oldAddInitializer;
  2286      let got;
  2287      const dec = (fn, ctx) => {
  2288        ctx.addInitializer(function(...args) {
  2289          got = { this: this, args };
  2290        });
  2291        if (oldAddInitializer) assertThrows(() => oldAddInitializer(() => {
  2292        }), TypeError);
  2293        assertThrows(() => ctx.addInitializer({}), TypeError);
  2294        oldAddInitializer = ctx.addInitializer;
  2295      };
  2296      _foo_dec = [dec, dec];
  2297      class Foo2 {
  2298        static get foo() {
  2299          return;
  2300        }
  2301      }
  2302      _init = __decoratorStart(null);
  2303      __decorateElement(_init, 10, "foo", _foo_dec, Foo2);
  2304      __runInitializers(_init, 3, Foo2);
  2305      assertEq(() => got.this, Foo2);
  2306      assertEq(() => got.args.length, 0);
  2307    },
  2308    "Getter decorators: Extra initializer (private instance getter)": () => {
  2309      var _foo_dec, _init, _Foo_instances, foo_get;
  2310      let oldAddInitializer;
  2311      let got;
  2312      const dec = (fn, ctx) => {
  2313        ctx.addInitializer(function(...args) {
  2314          got = { this: this, args };
  2315        });
  2316        if (oldAddInitializer) assertThrows(() => oldAddInitializer(() => {
  2317        }), TypeError);
  2318        assertThrows(() => ctx.addInitializer({}), TypeError);
  2319        oldAddInitializer = ctx.addInitializer;
  2320      };
  2321      _foo_dec = [dec, dec];
  2322      class Foo2 {
  2323        constructor() {
  2324          __runInitializers(_init, 5, this);
  2325          __privateAdd(this, _Foo_instances);
  2326        }
  2327      }
  2328      _init = __decoratorStart(null);
  2329      _Foo_instances = new WeakSet();
  2330      foo_get = function() {
  2331        return;
  2332      };
  2333      foo_get = __decorateElement(_init, 18, "#foo", _foo_dec, _Foo_instances, foo_get);
  2334      assertEq(() => got, void 0);
  2335      const instance = new Foo2();
  2336      assertEq(() => got.this, instance);
  2337      assertEq(() => got.args.length, 0);
  2338    },
  2339    "Getter decorators: Extra initializer (private static getter)": () => {
  2340      var _foo_dec, _init, _Foo_static, foo_get;
  2341      let oldAddInitializer;
  2342      let got;
  2343      const dec = (fn, ctx) => {
  2344        ctx.addInitializer(function(...args) {
  2345          got = { this: this, args };
  2346        });
  2347        if (oldAddInitializer) assertThrows(() => oldAddInitializer(() => {
  2348        }), TypeError);
  2349        assertThrows(() => ctx.addInitializer({}), TypeError);
  2350        oldAddInitializer = ctx.addInitializer;
  2351      };
  2352      _foo_dec = [dec, dec];
  2353      class Foo2 {
  2354      }
  2355      _init = __decoratorStart(null);
  2356      _Foo_static = new WeakSet();
  2357      foo_get = function() {
  2358        return;
  2359      };
  2360      foo_get = __decorateElement(_init, 26, "#foo", _foo_dec, _Foo_static, foo_get);
  2361      __privateAdd(Foo2, _Foo_static);
  2362      __runInitializers(_init, 3, Foo2);
  2363      assertEq(() => got.this, Foo2);
  2364      assertEq(() => got.args.length, 0);
  2365    },
  2366    // Setter decorators
  2367    "Setter decorators: Basic (instance setter)": () => {
  2368      var _baz_dec, _a, _bar_dec, _b, _foo_dec, _init;
  2369      const dec = (key, name) => (fn, ctx) => {
  2370        assertEq(() => typeof fn, "function");
  2371        assertEq(() => fn.name, name);
  2372        assertEq(() => ctx.kind, "setter");
  2373        assertEq(() => ctx.name, key);
  2374        assertEq(() => ctx.static, false);
  2375        assertEq(() => ctx.private, false);
  2376        assertEq(() => ctx.access.has({ [key]: false }), true);
  2377        assertEq(() => ctx.access.has({ bar: true }), false);
  2378        assertEq(() => "get" in ctx.access, false);
  2379        const obj2 = {};
  2380        ctx.access.set(obj2, 123);
  2381        assertEq(() => obj2[key], 123);
  2382        assertEq(() => "bar" in obj2, false);
  2383      };
  2384      const bar = Symbol("bar");
  2385      const baz = Symbol();
  2386      class Foo2 {
  2387        constructor() {
  2388          __runInitializers(_init, 5, this);
  2389          __publicField(this, "bar", 0);
  2390        }
  2391        set foo(x) {
  2392          this.bar = x;
  2393        }
  2394        set [(_foo_dec = [dec("foo", "set foo")], _b = (_bar_dec = [dec(bar, "set [bar]")], bar))](x) {
  2395          this.bar = x;
  2396        }
  2397        set [_a = (_baz_dec = [dec(baz, "set ")], baz)](x) {
  2398          this.bar = x;
  2399        }
  2400      }
  2401      _init = __decoratorStart(null);
  2402      __decorateElement(_init, 3, "foo", _foo_dec, Foo2);
  2403      __decorateElement(_init, 3, _b, _bar_dec, Foo2);
  2404      __decorateElement(_init, 3, _a, _baz_dec, Foo2);
  2405      var obj = new Foo2();
  2406      obj.foo = 321;
  2407      assertEq(() => obj.bar, 321);
  2408      obj[bar] = 4321;
  2409      assertEq(() => obj.bar, 4321);
  2410      obj[baz] = 54321;
  2411      assertEq(() => obj.bar, 54321);
  2412    },
  2413    "Setter decorators: Basic (static setter)": () => {
  2414      var _baz_dec, _a, _bar_dec, _b, _foo_dec, _init;
  2415      const dec = (key, name) => (fn, ctx) => {
  2416        assertEq(() => typeof fn, "function");
  2417        assertEq(() => fn.name, name);
  2418        assertEq(() => ctx.kind, "setter");
  2419        assertEq(() => ctx.name, key);
  2420        assertEq(() => ctx.static, true);
  2421        assertEq(() => ctx.private, false);
  2422        assertEq(() => ctx.access.has({ [key]: false }), true);
  2423        assertEq(() => ctx.access.has({ bar: true }), false);
  2424        assertEq(() => "get" in ctx.access, false);
  2425        const obj = {};
  2426        ctx.access.set(obj, 123);
  2427        assertEq(() => obj[key], 123);
  2428        assertEq(() => "bar" in obj, false);
  2429      };
  2430      const bar = Symbol("bar");
  2431      const baz = Symbol();
  2432      class Foo2 {
  2433        static set foo(x) {
  2434          this.bar = x;
  2435        }
  2436        static set [(_foo_dec = [dec("foo", "set foo")], _b = (_bar_dec = [dec(bar, "set [bar]")], bar))](x) {
  2437          this.bar = x;
  2438        }
  2439        static set [_a = (_baz_dec = [dec(baz, "set ")], baz)](x) {
  2440          this.bar = x;
  2441        }
  2442      }
  2443      _init = __decoratorStart(null);
  2444      __decorateElement(_init, 11, "foo", _foo_dec, Foo2);
  2445      __decorateElement(_init, 11, _b, _bar_dec, Foo2);
  2446      __decorateElement(_init, 11, _a, _baz_dec, Foo2);
  2447      __runInitializers(_init, 3, Foo2);
  2448      __publicField(Foo2, "bar", 0);
  2449      Foo2.foo = 321;
  2450      assertEq(() => Foo2.bar, 321);
  2451      Foo2[bar] = 4321;
  2452      assertEq(() => Foo2.bar, 4321);
  2453      Foo2[baz] = 54321;
  2454      assertEq(() => Foo2.bar, 54321);
  2455    },
  2456    "Setter decorators: Basic (private instance setter)": () => {
  2457      var _foo_dec, _init, _Foo_instances, foo_set;
  2458      let lateAsserts;
  2459      const dec = (fn, ctx) => {
  2460        assertEq(() => typeof fn, "function");
  2461        assertEq(() => fn.name, "set #foo");
  2462        assertEq(() => ctx.kind, "setter");
  2463        assertEq(() => ctx.name, "#foo");
  2464        assertEq(() => ctx.static, false);
  2465        assertEq(() => ctx.private, true);
  2466        lateAsserts = () => {
  2467          assertEq(() => ctx.access.has(new Foo2()), true);
  2468          assertEq(() => ctx.access.has({}), false);
  2469          assertEq(() => "get" in ctx.access, false);
  2470          assertEq(() => {
  2471            const obj2 = new Foo2();
  2472            ctx.access.set(obj2, 123);
  2473            return obj2.bar;
  2474          }, 123);
  2475        };
  2476      };
  2477      let set$foo;
  2478      _foo_dec = [dec];
  2479      class Foo2 {
  2480        constructor() {
  2481          __runInitializers(_init, 5, this);
  2482          __privateAdd(this, _Foo_instances);
  2483          __publicField(this, "bar", 0);
  2484        }
  2485      }
  2486      _init = __decoratorStart(null);
  2487      _Foo_instances = new WeakSet();
  2488      foo_set = function(x) {
  2489        this.bar = x;
  2490      };
  2491      foo_set = __decorateElement(_init, 19, "#foo", _foo_dec, _Foo_instances, foo_set);
  2492      set$foo = (x, y) => {
  2493        __privateSet(x, _Foo_instances, y, foo_set);
  2494      };
  2495      lateAsserts();
  2496      var obj = new Foo2();
  2497      assertEq(() => set$foo(obj, 321), void 0);
  2498      assertEq(() => obj.bar, 321);
  2499    },
  2500    "Setter decorators: Basic (private static setter)": () => {
  2501      var _foo_dec, _init, _Foo_static, foo_set;
  2502      let lateAsserts;
  2503      const dec = (fn, ctx) => {
  2504        assertEq(() => typeof fn, "function");
  2505        assertEq(() => fn.name, "set #foo");
  2506        assertEq(() => ctx.kind, "setter");
  2507        assertEq(() => ctx.name, "#foo");
  2508        assertEq(() => ctx.static, true);
  2509        assertEq(() => ctx.private, true);
  2510        lateAsserts = () => {
  2511          assertEq(() => ctx.access.has(Foo2), true);
  2512          assertEq(() => ctx.access.has({}), false);
  2513          assertEq(() => "get" in ctx.access, false);
  2514          assertEq(() => {
  2515            ctx.access.set(Foo2, 123);
  2516            return Foo2.bar;
  2517          }, 123);
  2518        };
  2519      };
  2520      let set$foo;
  2521      _foo_dec = [dec];
  2522      class Foo2 {
  2523      }
  2524      _init = __decoratorStart(null);
  2525      _Foo_static = new WeakSet();
  2526      foo_set = function(x) {
  2527        this.bar = x;
  2528      };
  2529      foo_set = __decorateElement(_init, 27, "#foo", _foo_dec, _Foo_static, foo_set);
  2530      __privateAdd(Foo2, _Foo_static);
  2531      __runInitializers(_init, 3, Foo2);
  2532      __publicField(Foo2, "bar", 0);
  2533      set$foo = (x, y) => {
  2534        __privateSet(x, _Foo_static, y, foo_set);
  2535      };
  2536      lateAsserts();
  2537      assertEq(() => set$foo(Foo2, 321), void 0);
  2538      assertEq(() => Foo2.bar, 321);
  2539    },
  2540    "Setter decorators: Shim (instance setter)": () => {
  2541      var _foo_dec, _init;
  2542      let bar;
  2543      const dec = (fn, ctx) => {
  2544        bar = function(x) {
  2545          fn.call(this, x + 1);
  2546        };
  2547        return bar;
  2548      };
  2549      _foo_dec = [dec];
  2550      class Foo2 {
  2551        constructor() {
  2552          __runInitializers(_init, 5, this);
  2553          __publicField(this, "bar", 123);
  2554        }
  2555        set foo(x) {
  2556          this.bar = x;
  2557        }
  2558      }
  2559      _init = __decoratorStart(null);
  2560      __decorateElement(_init, 3, "foo", _foo_dec, Foo2);
  2561      assertEq(() => Object.getOwnPropertyDescriptor(Foo2.prototype, "foo").set, bar);
  2562      var obj = new Foo2();
  2563      obj.foo = 321;
  2564      assertEq(() => obj.bar, 322);
  2565    },
  2566    "Setter decorators: Shim (static setter)": () => {
  2567      var _foo_dec, _init;
  2568      let bar;
  2569      const dec = (fn, ctx) => {
  2570        bar = function(x) {
  2571          fn.call(this, x + 1);
  2572        };
  2573        return bar;
  2574      };
  2575      _foo_dec = [dec];
  2576      class Foo2 {
  2577        static set foo(x) {
  2578          this.bar = x;
  2579        }
  2580      }
  2581      _init = __decoratorStart(null);
  2582      __decorateElement(_init, 11, "foo", _foo_dec, Foo2);
  2583      __runInitializers(_init, 3, Foo2);
  2584      __publicField(Foo2, "bar", 123);
  2585      assertEq(() => Object.getOwnPropertyDescriptor(Foo2, "foo").set, bar);
  2586      Foo2.foo = 321;
  2587      assertEq(() => Foo2.bar, 322);
  2588    },
  2589    "Setter decorators: Shim (private instance setter)": () => {
  2590      var _foo_dec, _init, _Foo_instances, foo_set;
  2591      let bar;
  2592      const dec = (fn, ctx) => {
  2593        bar = function(x) {
  2594          fn.call(this, x + 1);
  2595        };
  2596        return bar;
  2597      };
  2598      let set$foo;
  2599      _foo_dec = [dec];
  2600      class Foo2 {
  2601        constructor() {
  2602          __runInitializers(_init, 5, this);
  2603          __privateAdd(this, _Foo_instances);
  2604          __publicField(this, "bar", 123);
  2605        }
  2606      }
  2607      _init = __decoratorStart(null);
  2608      _Foo_instances = new WeakSet();
  2609      foo_set = function(x) {
  2610        this.bar = x;
  2611      };
  2612      foo_set = __decorateElement(_init, 19, "#foo", _foo_dec, _Foo_instances, foo_set);
  2613      set$foo = (x, y) => {
  2614        __privateSet(x, _Foo_instances, y, foo_set);
  2615      };
  2616      var obj = new Foo2();
  2617      assertEq(() => set$foo(obj, 321), void 0);
  2618      assertEq(() => obj.bar, 322);
  2619    },
  2620    "Setter decorators: Shim (private static setter)": () => {
  2621      var _foo_dec, _init, _Foo_static, foo_set;
  2622      let bar;
  2623      const dec = (fn, ctx) => {
  2624        bar = function(x) {
  2625          fn.call(this, x + 1);
  2626        };
  2627        return bar;
  2628      };
  2629      let set$foo;
  2630      _foo_dec = [dec];
  2631      class Foo2 {
  2632      }
  2633      _init = __decoratorStart(null);
  2634      _Foo_static = new WeakSet();
  2635      foo_set = function(x) {
  2636        this.bar = x;
  2637      };
  2638      foo_set = __decorateElement(_init, 27, "#foo", _foo_dec, _Foo_static, foo_set);
  2639      __privateAdd(Foo2, _Foo_static);
  2640      __runInitializers(_init, 3, Foo2);
  2641      __publicField(Foo2, "bar", 123);
  2642      set$foo = (x, y) => {
  2643        __privateSet(x, _Foo_static, y, foo_set);
  2644      };
  2645      assertEq(() => set$foo(Foo2, 321), void 0);
  2646      assertEq(() => Foo2.bar, 322);
  2647    },
  2648    "Setter decorators: Order (instance setter)": () => {
  2649      var _foo_dec, _init;
  2650      const log = [];
  2651      let bar;
  2652      let baz;
  2653      const dec1 = (fn, ctx) => {
  2654        log.push(2);
  2655        bar = function(x) {
  2656          log.push(4);
  2657          fn.call(this, x);
  2658        };
  2659        return bar;
  2660      };
  2661      const dec2 = (fn, ctx) => {
  2662        log.push(1);
  2663        baz = function(x) {
  2664          log.push(5);
  2665          fn.call(this, x);
  2666        };
  2667        return baz;
  2668      };
  2669      log.push(0);
  2670      _foo_dec = [dec1, dec2];
  2671      class Foo2 {
  2672        constructor() {
  2673          __runInitializers(_init, 5, this);
  2674        }
  2675        set foo(x) {
  2676          log.push(6);
  2677        }
  2678      }
  2679      _init = __decoratorStart(null);
  2680      __decorateElement(_init, 3, "foo", _foo_dec, Foo2);
  2681      log.push(3);
  2682      new Foo2().foo = 123;
  2683      log.push(7);
  2684      assertEq(() => Object.getOwnPropertyDescriptor(Foo2.prototype, "foo").set, bar);
  2685      assertEq(() => log + "", "0,1,2,3,4,5,6,7");
  2686    },
  2687    "Setter decorators: Order (static setter)": () => {
  2688      var _foo_dec, _init;
  2689      const log = [];
  2690      let bar;
  2691      let baz;
  2692      const dec1 = (fn, ctx) => {
  2693        log.push(2);
  2694        bar = function(x) {
  2695          log.push(4);
  2696          fn.call(this, x);
  2697        };
  2698        return bar;
  2699      };
  2700      const dec2 = (fn, ctx) => {
  2701        log.push(1);
  2702        baz = function(x) {
  2703          log.push(5);
  2704          fn.call(this, x);
  2705        };
  2706        return baz;
  2707      };
  2708      log.push(0);
  2709      _foo_dec = [dec1, dec2];
  2710      class Foo2 {
  2711        static set foo(x) {
  2712          log.push(6);
  2713        }
  2714      }
  2715      _init = __decoratorStart(null);
  2716      __decorateElement(_init, 11, "foo", _foo_dec, Foo2);
  2717      __runInitializers(_init, 3, Foo2);
  2718      log.push(3);
  2719      Foo2.foo = 123;
  2720      log.push(7);
  2721      assertEq(() => Object.getOwnPropertyDescriptor(Foo2, "foo").set, bar);
  2722      assertEq(() => log + "", "0,1,2,3,4,5,6,7");
  2723    },
  2724    "Setter decorators: Order (private instance setter)": () => {
  2725      var _foo_dec, _init, _Foo_instances, foo_set;
  2726      const log = [];
  2727      let bar;
  2728      let baz;
  2729      const dec1 = (fn, ctx) => {
  2730        log.push(2);
  2731        bar = function(x) {
  2732          log.push(4);
  2733          fn.call(this, x);
  2734        };
  2735        return bar;
  2736      };
  2737      const dec2 = (fn, ctx) => {
  2738        log.push(1);
  2739        baz = function(x) {
  2740          log.push(5);
  2741          fn.call(this, x);
  2742        };
  2743        return baz;
  2744      };
  2745      log.push(0);
  2746      let set$foo;
  2747      _foo_dec = [dec1, dec2];
  2748      class Foo2 {
  2749        constructor() {
  2750          __runInitializers(_init, 5, this);
  2751          __privateAdd(this, _Foo_instances);
  2752        }
  2753      }
  2754      _init = __decoratorStart(null);
  2755      _Foo_instances = new WeakSet();
  2756      foo_set = function(x) {
  2757        log.push(6);
  2758      };
  2759      foo_set = __decorateElement(_init, 19, "#foo", _foo_dec, _Foo_instances, foo_set);
  2760      set$foo = (x, y) => {
  2761        __privateSet(x, _Foo_instances, y, foo_set);
  2762      };
  2763      log.push(3);
  2764      assertEq(() => set$foo(new Foo2(), 123), void 0);
  2765      log.push(7);
  2766      assertEq(() => log + "", "0,1,2,3,4,5,6,7");
  2767    },
  2768    "Setter decorators: Order (private static setter)": () => {
  2769      var _foo_dec, _init, _Foo_static, foo_set;
  2770      const log = [];
  2771      let bar;
  2772      let baz;
  2773      const dec1 = (fn, ctx) => {
  2774        log.push(2);
  2775        bar = function(x) {
  2776          log.push(4);
  2777          fn.call(this, x);
  2778        };
  2779        return bar;
  2780      };
  2781      const dec2 = (fn, ctx) => {
  2782        log.push(1);
  2783        baz = function(x) {
  2784          log.push(5);
  2785          fn.call(this, x);
  2786        };
  2787        return baz;
  2788      };
  2789      log.push(0);
  2790      let set$foo;
  2791      _foo_dec = [dec1, dec2];
  2792      class Foo2 {
  2793      }
  2794      _init = __decoratorStart(null);
  2795      _Foo_static = new WeakSet();
  2796      foo_set = function(x) {
  2797        log.push(6);
  2798      };
  2799      foo_set = __decorateElement(_init, 27, "#foo", _foo_dec, _Foo_static, foo_set);
  2800      __privateAdd(Foo2, _Foo_static);
  2801      __runInitializers(_init, 3, Foo2);
  2802      set$foo = (x, y) => {
  2803        __privateSet(x, _Foo_static, y, foo_set);
  2804      };
  2805      log.push(3);
  2806      assertEq(() => set$foo(Foo2, 123), void 0);
  2807      log.push(7);
  2808      assertEq(() => log + "", "0,1,2,3,4,5,6,7");
  2809    },
  2810    "Setter decorators: Return null (instance setter)": () => {
  2811      assertThrows(() => {
  2812        var _foo_dec, _init;
  2813        const dec = (fn, ctx) => {
  2814          return null;
  2815        };
  2816        _foo_dec = [dec];
  2817        class Foo2 {
  2818          constructor() {
  2819            __runInitializers(_init, 5, this);
  2820          }
  2821          set foo(x) {
  2822          }
  2823        }
  2824        _init = __decoratorStart(null);
  2825        __decorateElement(_init, 3, "foo", _foo_dec, Foo2);
  2826      }, TypeError);
  2827    },
  2828    "Setter decorators: Return null (static setter)": () => {
  2829      assertThrows(() => {
  2830        var _foo_dec, _init;
  2831        const dec = (fn, ctx) => {
  2832          return null;
  2833        };
  2834        _foo_dec = [dec];
  2835        class Foo2 {
  2836          static set foo(x) {
  2837          }
  2838        }
  2839        _init = __decoratorStart(null);
  2840        __decorateElement(_init, 11, "foo", _foo_dec, Foo2);
  2841        __runInitializers(_init, 3, Foo2);
  2842      }, TypeError);
  2843    },
  2844    "Setter decorators: Return null (private instance setter)": () => {
  2845      assertThrows(() => {
  2846        var _foo_dec, _init, _Foo_instances, foo_set;
  2847        const dec = (fn, ctx) => {
  2848          return null;
  2849        };
  2850        _foo_dec = [dec];
  2851        class Foo2 {
  2852          constructor() {
  2853            __runInitializers(_init, 5, this);
  2854            __privateAdd(this, _Foo_instances);
  2855          }
  2856        }
  2857        _init = __decoratorStart(null);
  2858        _Foo_instances = new WeakSet();
  2859        foo_set = function(x) {
  2860        };
  2861        foo_set = __decorateElement(_init, 19, "#foo", _foo_dec, _Foo_instances, foo_set);
  2862      }, TypeError);
  2863    },
  2864    "Setter decorators: Return null (private static setter)": () => {
  2865      assertThrows(() => {
  2866        var _foo_dec, _init, _Foo_static, foo_set;
  2867        const dec = (fn, ctx) => {
  2868          return null;
  2869        };
  2870        _foo_dec = [dec];
  2871        class Foo2 {
  2872        }
  2873        _init = __decoratorStart(null);
  2874        _Foo_static = new WeakSet();
  2875        foo_set = function(x) {
  2876        };
  2877        foo_set = __decorateElement(_init, 27, "#foo", _foo_dec, _Foo_static, foo_set);
  2878        __privateAdd(Foo2, _Foo_static);
  2879        __runInitializers(_init, 3, Foo2);
  2880      }, TypeError);
  2881    },
  2882    "Setter decorators: Return object (instance setter)": () => {
  2883      assertThrows(() => {
  2884        var _foo_dec, _init;
  2885        const dec = (fn, ctx) => {
  2886          return {};
  2887        };
  2888        _foo_dec = [dec];
  2889        class Foo2 {
  2890          constructor() {
  2891            __runInitializers(_init, 5, this);
  2892          }
  2893          set foo(x) {
  2894          }
  2895        }
  2896        _init = __decoratorStart(null);
  2897        __decorateElement(_init, 3, "foo", _foo_dec, Foo2);
  2898      }, TypeError);
  2899    },
  2900    "Setter decorators: Return object (static setter)": () => {
  2901      assertThrows(() => {
  2902        var _foo_dec, _init;
  2903        const dec = (fn, ctx) => {
  2904          return {};
  2905        };
  2906        _foo_dec = [dec];
  2907        class Foo2 {
  2908          static set foo(x) {
  2909          }
  2910        }
  2911        _init = __decoratorStart(null);
  2912        __decorateElement(_init, 11, "foo", _foo_dec, Foo2);
  2913        __runInitializers(_init, 3, Foo2);
  2914      }, TypeError);
  2915    },
  2916    "Setter decorators: Return object (private instance setter)": () => {
  2917      assertThrows(() => {
  2918        var _foo_dec, _init, _Foo_instances, foo_set;
  2919        const dec = (fn, ctx) => {
  2920          return {};
  2921        };
  2922        _foo_dec = [dec];
  2923        class Foo2 {
  2924          constructor() {
  2925            __runInitializers(_init, 5, this);
  2926            __privateAdd(this, _Foo_instances);
  2927          }
  2928        }
  2929        _init = __decoratorStart(null);
  2930        _Foo_instances = new WeakSet();
  2931        foo_set = function(x) {
  2932        };
  2933        foo_set = __decorateElement(_init, 19, "#foo", _foo_dec, _Foo_instances, foo_set);
  2934      }, TypeError);
  2935    },
  2936    "Setter decorators: Return object (private static setter)": () => {
  2937      assertThrows(() => {
  2938        var _foo_dec, _init, _Foo_static, foo_set;
  2939        const dec = (fn, ctx) => {
  2940          return {};
  2941        };
  2942        _foo_dec = [dec];
  2943        class Foo2 {
  2944        }
  2945        _init = __decoratorStart(null);
  2946        _Foo_static = new WeakSet();
  2947        foo_set = function(x) {
  2948        };
  2949        foo_set = __decorateElement(_init, 27, "#foo", _foo_dec, _Foo_static, foo_set);
  2950        __privateAdd(Foo2, _Foo_static);
  2951        __runInitializers(_init, 3, Foo2);
  2952      }, TypeError);
  2953    },
  2954    "Setter decorators: Extra initializer (instance setter)": () => {
  2955      var _foo_dec, _init;
  2956      let oldAddInitializer;
  2957      let got;
  2958      const dec = (fn, ctx) => {
  2959        ctx.addInitializer(function(...args) {
  2960          got = { this: this, args };
  2961        });
  2962        if (oldAddInitializer) assertThrows(() => oldAddInitializer(() => {
  2963        }), TypeError);
  2964        assertThrows(() => ctx.addInitializer({}), TypeError);
  2965        oldAddInitializer = ctx.addInitializer;
  2966      };
  2967      _foo_dec = [dec, dec];
  2968      class Foo2 {
  2969        constructor() {
  2970          __runInitializers(_init, 5, this);
  2971        }
  2972        set foo(x) {
  2973        }
  2974      }
  2975      _init = __decoratorStart(null);
  2976      __decorateElement(_init, 3, "foo", _foo_dec, Foo2);
  2977      assertEq(() => got, void 0);
  2978      const instance = new Foo2();
  2979      assertEq(() => got.this, instance);
  2980      assertEq(() => got.args.length, 0);
  2981    },
  2982    "Setter decorators: Extra initializer (static setter)": () => {
  2983      var _foo_dec, _init;
  2984      let oldAddInitializer;
  2985      let got;
  2986      const dec = (fn, ctx) => {
  2987        ctx.addInitializer(function(...args) {
  2988          got = { this: this, args };
  2989        });
  2990        if (oldAddInitializer) assertThrows(() => oldAddInitializer(() => {
  2991        }), TypeError);
  2992        assertThrows(() => ctx.addInitializer({}), TypeError);
  2993        oldAddInitializer = ctx.addInitializer;
  2994      };
  2995      _foo_dec = [dec, dec];
  2996      class Foo2 {
  2997        static set foo(x) {
  2998        }
  2999      }
  3000      _init = __decoratorStart(null);
  3001      __decorateElement(_init, 11, "foo", _foo_dec, Foo2);
  3002      __runInitializers(_init, 3, Foo2);
  3003      assertEq(() => got.this, Foo2);
  3004      assertEq(() => got.args.length, 0);
  3005    },
  3006    "Setter decorators: Extra initializer (private instance setter)": () => {
  3007      var _foo_dec, _init, _Foo_instances, foo_set;
  3008      let oldAddInitializer;
  3009      let got;
  3010      const dec = (fn, ctx) => {
  3011        ctx.addInitializer(function(...args) {
  3012          got = { this: this, args };
  3013        });
  3014        if (oldAddInitializer) assertThrows(() => oldAddInitializer(() => {
  3015        }), TypeError);
  3016        assertThrows(() => ctx.addInitializer({}), TypeError);
  3017        oldAddInitializer = ctx.addInitializer;
  3018      };
  3019      _foo_dec = [dec, dec];
  3020      class Foo2 {
  3021        constructor() {
  3022          __runInitializers(_init, 5, this);
  3023          __privateAdd(this, _Foo_instances);
  3024        }
  3025      }
  3026      _init = __decoratorStart(null);
  3027      _Foo_instances = new WeakSet();
  3028      foo_set = function(x) {
  3029      };
  3030      foo_set = __decorateElement(_init, 19, "#foo", _foo_dec, _Foo_instances, foo_set);
  3031      assertEq(() => got, void 0);
  3032      const instance = new Foo2();
  3033      assertEq(() => got.this, instance);
  3034      assertEq(() => got.args.length, 0);
  3035    },
  3036    "Setter decorators: Extra initializer (private static setter)": () => {
  3037      var _foo_dec, _init, _Foo_static, foo_set;
  3038      let oldAddInitializer;
  3039      let got;
  3040      const dec = (fn, ctx) => {
  3041        ctx.addInitializer(function(...args) {
  3042          got = { this: this, args };
  3043        });
  3044        if (oldAddInitializer) assertThrows(() => oldAddInitializer(() => {
  3045        }), TypeError);
  3046        assertThrows(() => ctx.addInitializer({}), TypeError);
  3047        oldAddInitializer = ctx.addInitializer;
  3048      };
  3049      _foo_dec = [dec, dec];
  3050      class Foo2 {
  3051      }
  3052      _init = __decoratorStart(null);
  3053      _Foo_static = new WeakSet();
  3054      foo_set = function(x) {
  3055      };
  3056      foo_set = __decorateElement(_init, 27, "#foo", _foo_dec, _Foo_static, foo_set);
  3057      __privateAdd(Foo2, _Foo_static);
  3058      __runInitializers(_init, 3, Foo2);
  3059      assertEq(() => got.this, Foo2);
  3060      assertEq(() => got.args.length, 0);
  3061    },
  3062    // Auto-accessor decorators
  3063    "Auto-accessor decorators: Basic (instance auto-accessor)": () => {
  3064      var _baz_dec, _a, _bar_dec, _b, _foo_dec, _init, _foo, __b, __a;
  3065      const dec = (key, getName, setName) => (target, ctx) => {
  3066        assertEq(() => typeof target.get, "function");
  3067        assertEq(() => typeof target.set, "function");
  3068        assertEq(() => target.get.name, getName);
  3069        assertEq(() => target.set.name, setName);
  3070        assertEq(() => ctx.kind, "accessor");
  3071        assertEq(() => ctx.name, key);
  3072        assertEq(() => ctx.static, false);
  3073        assertEq(() => ctx.private, false);
  3074        assertEq(() => ctx.access.has({ [key]: false }), true);
  3075        assertEq(() => ctx.access.has({ bar: true }), false);
  3076        assertEq(() => ctx.access.get({ [key]: 123 }), 123);
  3077        assertEq(() => {
  3078          const obj2 = {};
  3079          ctx.access.set(obj2, 123);
  3080          return obj2[key];
  3081        }, 123);
  3082      };
  3083      const bar = Symbol("bar");
  3084      const baz = Symbol();
  3085      _foo_dec = [dec("foo", "get foo", "set foo")], _b = (_bar_dec = [dec(bar, "get [bar]", "set [bar]")], bar), _a = (_baz_dec = [dec(baz, "get ", "set ")], baz);
  3086      class Foo2 {
  3087        constructor() {
  3088          __privateAdd(this, _foo, __runInitializers(_init, 8, this, 0)), __runInitializers(_init, 11, this);
  3089          __privateAdd(this, __b, __runInitializers(_init, 12, this, 0)), __runInitializers(_init, 15, this);
  3090          __privateAdd(this, __a, __runInitializers(_init, 16, this, 0)), __runInitializers(_init, 19, this);
  3091        }
  3092      }
  3093      _init = __decoratorStart(null);
  3094      _foo = new WeakMap();
  3095      __b = new WeakMap();
  3096      __a = new WeakMap();
  3097      __decorateElement(_init, 4, "foo", _foo_dec, Foo2, _foo);
  3098      __decorateElement(_init, 4, _b, _bar_dec, Foo2, __b);
  3099      __decorateElement(_init, 4, _a, _baz_dec, Foo2, __a);
  3100      var obj = new Foo2();
  3101      obj.foo = 321;
  3102      assertEq(() => obj.foo, 321);
  3103      obj[bar] = 4321;
  3104      assertEq(() => obj[bar], 4321);
  3105      obj[baz] = 54321;
  3106      assertEq(() => obj[baz], 54321);
  3107    },
  3108    "Auto-accessor decorators: Basic (static auto-accessor)": () => {
  3109      var _baz_dec, _a, _bar_dec, _b, _foo_dec, _init, _foo, __b, __a;
  3110      const dec = (key, getName, setName) => (target, ctx) => {
  3111        assertEq(() => typeof target.get, "function");
  3112        assertEq(() => typeof target.set, "function");
  3113        assertEq(() => target.get.name, getName);
  3114        assertEq(() => target.set.name, setName);
  3115        assertEq(() => ctx.kind, "accessor");
  3116        assertEq(() => ctx.name, key);
  3117        assertEq(() => ctx.static, true);
  3118        assertEq(() => ctx.private, false);
  3119        assertEq(() => ctx.access.has({ [key]: false }), true);
  3120        assertEq(() => ctx.access.has({ bar: true }), false);
  3121        assertEq(() => ctx.access.get({ [key]: 123 }), 123);
  3122        assertEq(() => {
  3123          const obj = {};
  3124          ctx.access.set(obj, 123);
  3125          return obj[key];
  3126        }, 123);
  3127      };
  3128      const bar = Symbol("bar");
  3129      const baz = Symbol();
  3130      _foo_dec = [dec("foo", "get foo", "set foo")], _b = (_bar_dec = [dec(bar, "get [bar]", "set [bar]")], bar), _a = (_baz_dec = [dec(baz, "get ", "set ")], baz);
  3131      class Foo2 {
  3132      }
  3133      _init = __decoratorStart(null);
  3134      _foo = new WeakMap();
  3135      __b = new WeakMap();
  3136      __a = new WeakMap();
  3137      __decorateElement(_init, 12, "foo", _foo_dec, Foo2, _foo);
  3138      __decorateElement(_init, 12, _b, _bar_dec, Foo2, __b);
  3139      __decorateElement(_init, 12, _a, _baz_dec, Foo2, __a);
  3140      __privateAdd(Foo2, _foo, __runInitializers(_init, 8, Foo2, 0)), __runInitializers(_init, 11, Foo2);
  3141      __privateAdd(Foo2, __b, __runInitializers(_init, 12, Foo2, 0)), __runInitializers(_init, 15, Foo2);
  3142      __privateAdd(Foo2, __a, __runInitializers(_init, 16, Foo2, 0)), __runInitializers(_init, 19, Foo2);
  3143      Foo2.foo = 321;
  3144      assertEq(() => Foo2.foo, 321);
  3145      Foo2[bar] = 4321;
  3146      assertEq(() => Foo2[bar], 4321);
  3147      Foo2[baz] = 54321;
  3148      assertEq(() => Foo2[baz], 54321);
  3149    },
  3150    "Auto-accessor decorators: Basic (private instance auto-accessor)": () => {
  3151      var _foo_dec, _init, _foo, _a, foo_get, foo_set, _Foo_instances;
  3152      let lateAsserts;
  3153      const dec = (target, ctx) => {
  3154        assertEq(() => typeof target.get, "function");
  3155        assertEq(() => typeof target.set, "function");
  3156        assertEq(() => target.get.name, "get #foo");
  3157        assertEq(() => target.set.name, "set #foo");
  3158        assertEq(() => ctx.kind, "accessor");
  3159        assertEq(() => ctx.name, "#foo");
  3160        assertEq(() => ctx.static, false);
  3161        assertEq(() => ctx.private, true);
  3162        lateAsserts = () => {
  3163          assertEq(() => ctx.access.has(new Foo2()), true);
  3164          assertEq(() => ctx.access.has({}), false);
  3165          assertEq(() => ctx.access.get(new Foo2()), 0);
  3166          assertEq(() => {
  3167            const obj2 = new Foo2();
  3168            ctx.access.set(obj2, 123);
  3169            return get$foo(obj2);
  3170          }, 123);
  3171        };
  3172      };
  3173      let get$foo;
  3174      let set$foo;
  3175      _foo_dec = [dec];
  3176      class Foo2 {
  3177        constructor() {
  3178          __privateAdd(this, _Foo_instances);
  3179          __privateAdd(this, _foo, __runInitializers(_init, 8, this, 0)), __runInitializers(_init, 11, this);
  3180        }
  3181      }
  3182      _init = __decoratorStart(null);
  3183      _foo = new WeakMap();
  3184      _Foo_instances = new WeakSet();
  3185      _a = __decorateElement(_init, 20, "#foo", _foo_dec, _Foo_instances, _foo), foo_get = _a.get, foo_set = _a.set;
  3186      get$foo = (x) => __privateGet(x, _Foo_instances, foo_get);
  3187      set$foo = (x, y) => {
  3188        __privateSet(x, _Foo_instances, y, foo_set);
  3189      };
  3190      lateAsserts();
  3191      var obj = new Foo2();
  3192      assertEq(() => set$foo(obj, 321), void 0);
  3193      assertEq(() => get$foo(obj), 321);
  3194    },
  3195    "Auto-accessor decorators: Basic (private static auto-accessor)": () => {
  3196      var _foo_dec, _init, _foo, _a, foo_get, foo_set, _Foo_static;
  3197      let lateAsserts;
  3198      const dec = (target, ctx) => {
  3199        assertEq(() => typeof target.get, "function");
  3200        assertEq(() => typeof target.set, "function");
  3201        assertEq(() => target.get.name, "get #foo");
  3202        assertEq(() => target.set.name, "set #foo");
  3203        assertEq(() => ctx.kind, "accessor");
  3204        assertEq(() => ctx.name, "#foo");
  3205        assertEq(() => ctx.static, true);
  3206        assertEq(() => ctx.private, true);
  3207        lateAsserts = () => {
  3208          assertEq(() => ctx.access.has(Foo2), true);
  3209          assertEq(() => ctx.access.has({}), false);
  3210          assertEq(() => ctx.access.get(Foo2), 0);
  3211          assertEq(() => {
  3212            ctx.access.set(Foo2, 123);
  3213            return get$foo(Foo2);
  3214          }, 123);
  3215        };
  3216      };
  3217      let get$foo;
  3218      let set$foo;
  3219      _foo_dec = [dec];
  3220      class Foo2 {
  3221      }
  3222      _init = __decoratorStart(null);
  3223      _foo = new WeakMap();
  3224      _Foo_static = new WeakSet();
  3225      _a = __decorateElement(_init, 28, "#foo", _foo_dec, _Foo_static, _foo), foo_get = _a.get, foo_set = _a.set;
  3226      __privateAdd(Foo2, _Foo_static);
  3227      __privateAdd(Foo2, _foo, __runInitializers(_init, 8, Foo2, 0)), __runInitializers(_init, 11, Foo2);
  3228      get$foo = (x) => __privateGet(x, _Foo_static, foo_get);
  3229      set$foo = (x, y) => {
  3230        __privateSet(x, _Foo_static, y, foo_set);
  3231      };
  3232      lateAsserts();
  3233      assertEq(() => set$foo(Foo2, 321), void 0);
  3234      assertEq(() => get$foo(Foo2), 321);
  3235    },
  3236    "Auto-accessor decorators: Shim (instance auto-accessor)": () => {
  3237      var _foo_dec, _init, _foo;
  3238      let get;
  3239      let set;
  3240      const dec = (target, ctx) => {
  3241        function init(x) {
  3242          assertEq(() => this instanceof Foo2, true);
  3243          return x + 1;
  3244        }
  3245        get = function() {
  3246          return target.get.call(this) * 10;
  3247        };
  3248        set = function(x) {
  3249          target.set.call(this, x * 2);
  3250        };
  3251        return { get, set, init };
  3252      };
  3253      _foo_dec = [dec];
  3254      class Foo2 {
  3255        constructor() {
  3256          __privateAdd(this, _foo, __runInitializers(_init, 8, this, 123)), __runInitializers(_init, 11, this);
  3257        }
  3258      }
  3259      _init = __decoratorStart(null);
  3260      _foo = new WeakMap();
  3261      __decorateElement(_init, 4, "foo", _foo_dec, Foo2, _foo);
  3262      assertEq(() => Object.getOwnPropertyDescriptor(Foo2.prototype, "foo").get, get);
  3263      assertEq(() => Object.getOwnPropertyDescriptor(Foo2.prototype, "foo").set, set);
  3264      var obj = new Foo2();
  3265      assertEq(() => obj.foo, (123 + 1) * 10);
  3266      obj.foo = 321;
  3267      assertEq(() => obj.foo, 321 * 2 * 10);
  3268    },
  3269    "Auto-accessor decorators: Shim (static auto-accessor)": () => {
  3270      var _foo_dec, _init, _foo;
  3271      let foo;
  3272      let get;
  3273      let set;
  3274      const dec = (target, ctx) => {
  3275        function init(x) {
  3276          assertEq(() => this, foo);
  3277          return x + 1;
  3278        }
  3279        get = function() {
  3280          return target.get.call(this) * 10;
  3281        };
  3282        set = function(x) {
  3283          target.set.call(this, x * 2);
  3284        };
  3285        return { get, set, init };
  3286      };
  3287      _foo_dec = [dec];
  3288      const _Foo = class _Foo {
  3289      };
  3290      _init = __decoratorStart(null);
  3291      _foo = new WeakMap();
  3292      __decorateElement(_init, 12, "foo", _foo_dec, _Foo, _foo);
  3293      foo = _Foo;
  3294      __privateAdd(_Foo, _foo, __runInitializers(_init, 8, _Foo, 123)), __runInitializers(_init, 11, _Foo);
  3295      let Foo2 = _Foo;
  3296      assertEq(() => Object.getOwnPropertyDescriptor(Foo2, "foo").get, get);
  3297      assertEq(() => Object.getOwnPropertyDescriptor(Foo2, "foo").set, set);
  3298      assertEq(() => Foo2.foo, (123 + 1) * 10);
  3299      Foo2.foo = 321;
  3300      assertEq(() => Foo2.foo, 321 * 2 * 10);
  3301    },
  3302    "Auto-accessor decorators: Shim (private instance auto-accessor)": () => {
  3303      var _foo_dec, _init, _foo, _a, foo_get, foo_set, _Foo_instances;
  3304      let get;
  3305      let set;
  3306      const dec = (target, ctx) => {
  3307        function init(x) {
  3308          assertEq(() => this instanceof Foo2, true);
  3309          return x + 1;
  3310        }
  3311        get = function() {
  3312          return target.get.call(this) * 10;
  3313        };
  3314        set = function(x) {
  3315          target.set.call(this, x * 2);
  3316        };
  3317        return { get, set, init };
  3318      };
  3319      let get$foo;
  3320      let set$foo;
  3321      _foo_dec = [dec];
  3322      class Foo2 {
  3323        constructor() {
  3324          __privateAdd(this, _Foo_instances);
  3325          __privateAdd(this, _foo, __runInitializers(_init, 8, this, 123)), __runInitializers(_init, 11, this);
  3326        }
  3327      }
  3328      _init = __decoratorStart(null);
  3329      _foo = new WeakMap();
  3330      _Foo_instances = new WeakSet();
  3331      _a = __decorateElement(_init, 20, "#foo", _foo_dec, _Foo_instances, _foo), foo_get = _a.get, foo_set = _a.set;
  3332      get$foo = (x) => __privateGet(x, _Foo_instances, foo_get);
  3333      set$foo = (x, y) => {
  3334        __privateSet(x, _Foo_instances, y, foo_set);
  3335      };
  3336      var obj = new Foo2();
  3337      assertEq(() => get$foo(obj), (123 + 1) * 10);
  3338      assertEq(() => set$foo(obj, 321), void 0);
  3339      assertEq(() => get$foo(obj), 321 * 2 * 10);
  3340    },
  3341    "Auto-accessor decorators: Shim (private static auto-accessor)": () => {
  3342      var _foo_dec, _init, _foo, _a, foo_get, foo_set, _Foo_static;
  3343      let foo;
  3344      let get;
  3345      let set;
  3346      const dec = (target, ctx) => {
  3347        function init(x) {
  3348          assertEq(() => this, foo);
  3349          return x + 1;
  3350        }
  3351        get = function() {
  3352          return target.get.call(this) * 10;
  3353        };
  3354        set = function(x) {
  3355          target.set.call(this, x * 2);
  3356        };
  3357        return { get, set, init };
  3358      };
  3359      let get$foo;
  3360      let set$foo;
  3361      _foo_dec = [dec];
  3362      const _Foo = class _Foo {
  3363      };
  3364      _init = __decoratorStart(null);
  3365      _foo = new WeakMap();
  3366      _Foo_static = new WeakSet();
  3367      _a = __decorateElement(_init, 28, "#foo", _foo_dec, _Foo_static, _foo), foo_get = _a.get, foo_set = _a.set;
  3368      __privateAdd(_Foo, _Foo_static);
  3369      foo = _Foo;
  3370      get$foo = (x) => __privateGet(x, _Foo_static, foo_get);
  3371      set$foo = (x, y) => {
  3372        __privateSet(x, _Foo_static, y, foo_set);
  3373      };
  3374      __privateAdd(_Foo, _foo, __runInitializers(_init, 8, _Foo, 123)), __runInitializers(_init, 11, _Foo);
  3375      let Foo2 = _Foo;
  3376      assertEq(() => get$foo(Foo2), (123 + 1) * 10);
  3377      assertEq(() => set$foo(Foo2, 321), void 0);
  3378      assertEq(() => get$foo(Foo2), 321 * 2 * 10);
  3379    },
  3380    "Auto-accessor decorators: Return null (instance auto-accessor)": () => {
  3381      assertThrows(() => {
  3382        var _foo_dec, _init, _foo;
  3383        const dec = (target, ctx) => {
  3384          return null;
  3385        };
  3386        _foo_dec = [dec];
  3387        class Foo2 {
  3388          constructor() {
  3389            __privateAdd(this, _foo, __runInitializers(_init, 8, this)), __runInitializers(_init, 11, this);
  3390          }
  3391        }
  3392        _init = __decoratorStart(null);
  3393        _foo = new WeakMap();
  3394        __decorateElement(_init, 4, "foo", _foo_dec, Foo2, _foo);
  3395      }, TypeError);
  3396    },
  3397    "Auto-accessor decorators: Return null (static auto-accessor)": () => {
  3398      assertThrows(() => {
  3399        var _foo_dec, _init, _foo;
  3400        const dec = (target, ctx) => {
  3401          return null;
  3402        };
  3403        _foo_dec = [dec];
  3404        class Foo2 {
  3405        }
  3406        _init = __decoratorStart(null);
  3407        _foo = new WeakMap();
  3408        __decorateElement(_init, 12, "foo", _foo_dec, Foo2, _foo);
  3409        __privateAdd(Foo2, _foo, __runInitializers(_init, 8, Foo2)), __runInitializers(_init, 11, Foo2);
  3410      }, TypeError);
  3411    },
  3412    "Auto-accessor decorators: Return null (private instance auto-accessor)": () => {
  3413      assertThrows(() => {
  3414        var _foo_dec, _init, _foo, _a, foo_get, foo_set, _Foo_instances;
  3415        const dec = (target, ctx) => {
  3416          return null;
  3417        };
  3418        _foo_dec = [dec];
  3419        class Foo2 {
  3420          constructor() {
  3421            __privateAdd(this, _Foo_instances);
  3422            __privateAdd(this, _foo, __runInitializers(_init, 8, this)), __runInitializers(_init, 11, this);
  3423          }
  3424        }
  3425        _init = __decoratorStart(null);
  3426        _foo = new WeakMap();
  3427        _Foo_instances = new WeakSet();
  3428        _a = __decorateElement(_init, 20, "#foo", _foo_dec, _Foo_instances, _foo), foo_get = _a.get, foo_set = _a.set;
  3429      }, TypeError);
  3430    },
  3431    "Auto-accessor decorators: Return null (private static auto-accessor)": () => {
  3432      assertThrows(() => {
  3433        var _foo_dec, _init, _foo, _a, foo_get, foo_set, _Foo_static;
  3434        const dec = (target, ctx) => {
  3435          return null;
  3436        };
  3437        _foo_dec = [dec];
  3438        class Foo2 {
  3439        }
  3440        _init = __decoratorStart(null);
  3441        _foo = new WeakMap();
  3442        _Foo_static = new WeakSet();
  3443        _a = __decorateElement(_init, 28, "#foo", _foo_dec, _Foo_static, _foo), foo_get = _a.get, foo_set = _a.set;
  3444        __privateAdd(Foo2, _Foo_static);
  3445        __privateAdd(Foo2, _foo, __runInitializers(_init, 8, Foo2)), __runInitializers(_init, 11, Foo2);
  3446      }, TypeError);
  3447    },
  3448    "Auto-accessor decorators: Extra initializer (instance auto-accessor)": () => {
  3449      var _foo_dec, _init, _foo;
  3450      let oldAddInitializer;
  3451      let got;
  3452      const dec = (target, ctx) => {
  3453        ctx.addInitializer(function(...args) {
  3454          got = { this: this, args };
  3455        });
  3456        if (oldAddInitializer) assertThrows(() => oldAddInitializer(() => {
  3457        }), TypeError);
  3458        assertThrows(() => ctx.addInitializer({}), TypeError);
  3459        oldAddInitializer = ctx.addInitializer;
  3460      };
  3461      _foo_dec = [dec, dec];
  3462      class Foo2 {
  3463        constructor() {
  3464          __privateAdd(this, _foo, __runInitializers(_init, 8, this)), __runInitializers(_init, 11, this);
  3465        }
  3466      }
  3467      _init = __decoratorStart(null);
  3468      _foo = new WeakMap();
  3469      __decorateElement(_init, 4, "foo", _foo_dec, Foo2, _foo);
  3470      assertEq(() => got, void 0);
  3471      const instance = new Foo2();
  3472      assertEq(() => got.this, instance);
  3473      assertEq(() => got.args.length, 0);
  3474    },
  3475    "Auto-accessor decorators: Extra initializer (static auto-accessor)": () => {
  3476      var _foo_dec, _init, _foo;
  3477      let oldAddInitializer;
  3478      let got;
  3479      const dec = (target, ctx) => {
  3480        ctx.addInitializer(function(...args) {
  3481          got = { this: this, args };
  3482        });
  3483        if (oldAddInitializer) assertThrows(() => oldAddInitializer(() => {
  3484        }), TypeError);
  3485        assertThrows(() => ctx.addInitializer({}), TypeError);
  3486        oldAddInitializer = ctx.addInitializer;
  3487      };
  3488      _foo_dec = [dec, dec];
  3489      class Foo2 {
  3490      }
  3491      _init = __decoratorStart(null);
  3492      _foo = new WeakMap();
  3493      __decorateElement(_init, 12, "foo", _foo_dec, Foo2, _foo);
  3494      __privateAdd(Foo2, _foo, __runInitializers(_init, 8, Foo2)), __runInitializers(_init, 11, Foo2);
  3495      assertEq(() => got.this, Foo2);
  3496      assertEq(() => got.args.length, 0);
  3497    },
  3498    "Auto-accessor decorators: Extra initializer (private instance auto-accessor)": () => {
  3499      var _foo_dec, _init, _foo, _a, foo_get, foo_set, _Foo_instances;
  3500      let oldAddInitializer;
  3501      let got;
  3502      const dec = (target, ctx) => {
  3503        ctx.addInitializer(function(...args) {
  3504          got = { this: this, args };
  3505        });
  3506        if (oldAddInitializer) assertThrows(() => oldAddInitializer(() => {
  3507        }), TypeError);
  3508        assertThrows(() => ctx.addInitializer({}), TypeError);
  3509        oldAddInitializer = ctx.addInitializer;
  3510      };
  3511      _foo_dec = [dec, dec];
  3512      class Foo2 {
  3513        constructor() {
  3514          __privateAdd(this, _Foo_instances);
  3515          __privateAdd(this, _foo, __runInitializers(_init, 8, this)), __runInitializers(_init, 11, this);
  3516        }
  3517      }
  3518      _init = __decoratorStart(null);
  3519      _foo = new WeakMap();
  3520      _Foo_instances = new WeakSet();
  3521      _a = __decorateElement(_init, 20, "#foo", _foo_dec, _Foo_instances, _foo), foo_get = _a.get, foo_set = _a.set;
  3522      assertEq(() => got, void 0);
  3523      const instance = new Foo2();
  3524      assertEq(() => got.this, instance);
  3525      assertEq(() => got.args.length, 0);
  3526    },
  3527    "Auto-accessor decorators: Extra initializer (private static auto-accessor)": () => {
  3528      var _foo_dec, _init, _foo, _a, foo_get, foo_set, _Foo_static;
  3529      let oldAddInitializer;
  3530      let got;
  3531      const dec = (target, ctx) => {
  3532        ctx.addInitializer(function(...args) {
  3533          got = { this: this, args };
  3534        });
  3535        if (oldAddInitializer) assertThrows(() => oldAddInitializer(() => {
  3536        }), TypeError);
  3537        assertThrows(() => ctx.addInitializer({}), TypeError);
  3538        oldAddInitializer = ctx.addInitializer;
  3539      };
  3540      _foo_dec = [dec, dec];
  3541      class Foo2 {
  3542      }
  3543      _init = __decoratorStart(null);
  3544      _foo = new WeakMap();
  3545      _Foo_static = new WeakSet();
  3546      _a = __decorateElement(_init, 28, "#foo", _foo_dec, _Foo_static, _foo), foo_get = _a.get, foo_set = _a.set;
  3547      __privateAdd(Foo2, _Foo_static);
  3548      __privateAdd(Foo2, _foo, __runInitializers(_init, 8, Foo2)), __runInitializers(_init, 11, Foo2);
  3549      assertEq(() => got.this, Foo2);
  3550      assertEq(() => got.args.length, 0);
  3551    },
  3552    // Decorator list evaluation
  3553    "Decorator list evaluation: Computed names (class statement)": () => {
  3554      var _dec, _a, _dec2, _b, _dec3, _c, _dec4, _d, _dec5, _e, _dec6, _f, _dec7, _g, _dec8, _h, _dec9, _i, _dec10, _j, _Foo_decorators, _init, __b, __a, _k;
  3555      const log = [];
  3556      const foo = (n) => {
  3557        log.push(n);
  3558        return () => {
  3559        };
  3560      };
  3561      const computed = {
  3562        get method() {
  3563          log.push(log.length);
  3564          return Symbol("method");
  3565        },
  3566        get field() {
  3567          log.push(log.length);
  3568          return Symbol("field");
  3569        },
  3570        get getter() {
  3571          log.push(log.length);
  3572          return Symbol("getter");
  3573        },
  3574        get setter() {
  3575          log.push(log.length);
  3576          return Symbol("setter");
  3577        },
  3578        get accessor() {
  3579          log.push(log.length);
  3580          return Symbol("accessor");
  3581        }
  3582      };
  3583      _Foo_decorators = [foo(0)];
  3584      class Foo2 extends (_k = (foo(1), Object)) {
  3585        constructor() {
  3586          super(...arguments);
  3587          __runInitializers(_init, 5, this);
  3588          __publicField(this, _h, __runInitializers(_init, 20, this)), __runInitializers(_init, 23, this);
  3589          __privateAdd(this, __b, __runInitializers(_init, 12, this)), __runInitializers(_init, 15, this);
  3590        }
  3591        [_j = (_dec10 = [foo(2)], computed.method)]() {
  3592        }
  3593        static [_i = (_dec9 = [foo(4)], computed.method)]() {
  3594        }
  3595        get [(_h = (_dec8 = [foo(6)], computed.field), _g = (_dec7 = [foo(8)], computed.field), _f = (_dec6 = [foo(10)], computed.getter))]() {
  3596          return;
  3597        }
  3598        static get [_e = (_dec5 = [foo(12)], computed.getter)]() {
  3599          return;
  3600        }
  3601        set [_d = (_dec4 = [foo(14)], computed.setter)](x) {
  3602        }
  3603        static set [(_c = (_dec3 = [foo(16)], computed.setter), _b = (_dec2 = [foo(18)], computed.accessor), _a = (_dec = [foo(20)], computed.accessor), _c)](x) {
  3604        }
  3605      }
  3606      _init = __decoratorStart(_k);
  3607      __b = new WeakMap();
  3608      __a = new WeakMap();
  3609      __decorateElement(_init, 9, _i, _dec9, Foo2);
  3610      __decorateElement(_init, 10, _e, _dec5, Foo2);
  3611      __decorateElement(_init, 11, _c, _dec3, Foo2);
  3612      __decorateElement(_init, 12, _a, _dec, Foo2, __a);
  3613      __decorateElement(_init, 1, _j, _dec10, Foo2);
  3614      __decorateElement(_init, 2, _f, _dec6, Foo2);
  3615      __decorateElement(_init, 3, _d, _dec4, Foo2);
  3616      __decorateElement(_init, 4, _b, _dec2, Foo2, __b);
  3617      __decorateElement(_init, 13, _g, _dec7, Foo2);
  3618      __decorateElement(_init, 5, _h, _dec8, Foo2);
  3619      Foo2 = __decorateElement(_init, 0, "Foo", _Foo_decorators, Foo2);
  3620      __runInitializers(_init, 3, Foo2);
  3621      __publicField(Foo2, _g, __runInitializers(_init, 16, Foo2)), __runInitializers(_init, 19, Foo2);
  3622      __privateAdd(Foo2, __a, __runInitializers(_init, 8, Foo2)), __runInitializers(_init, 11, Foo2);
  3623      __runInitializers(_init, 1, Foo2);
  3624      assertEq(() => "" + log, "0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21");
  3625    },
  3626    "Decorator list evaluation: Computed names (class expression)": () => {
  3627      var _dec, _a, _dec2, _b, _dec3, _c, _dec4, _d, _dec5, _e, _dec6, _f, _dec7, _g, _dec8, _h, _dec9, _i, _dec10, _j, _class_decorators, _init, _k, __b, __a, _l;
  3628      const log = [];
  3629      const foo = (n) => {
  3630        log.push(n);
  3631        return () => {
  3632        };
  3633      };
  3634      const computed = {
  3635        get method() {
  3636          log.push(log.length);
  3637          return Symbol("method");
  3638        },
  3639        get field() {
  3640          log.push(log.length);
  3641          return Symbol("field");
  3642        },
  3643        get getter() {
  3644          log.push(log.length);
  3645          return Symbol("getter");
  3646        },
  3647        get setter() {
  3648          log.push(log.length);
  3649          return Symbol("setter");
  3650        },
  3651        get accessor() {
  3652          log.push(log.length);
  3653          return Symbol("accessor");
  3654        }
  3655      };
  3656      _class_decorators = [foo(0)], _k = class extends (_l = (foo(1), Object)) {
  3657        constructor() {
  3658          super(...arguments);
  3659          __runInitializers(_init, 5, this);
  3660          __publicField(this, _h, __runInitializers(_init, 20, this)), __runInitializers(_init, 23, this);
  3661          __privateAdd(this, __b, __runInitializers(_init, 12, this)), __runInitializers(_init, 15, this);
  3662        }
  3663        [_j = (_dec10 = [foo(2)], computed.method)]() {
  3664        }
  3665        static [_i = (_dec9 = [foo(4)], computed.method)]() {
  3666        }
  3667        get [(_h = (_dec8 = [foo(6)], computed.field), _g = (_dec7 = [foo(8)], computed.field), _f = (_dec6 = [foo(10)], computed.getter))]() {
  3668          return;
  3669        }
  3670        static get [_e = (_dec5 = [foo(12)], computed.getter)]() {
  3671          return;
  3672        }
  3673        set [_d = (_dec4 = [foo(14)], computed.setter)](x) {
  3674        }
  3675        static set [(_c = (_dec3 = [foo(16)], computed.setter), _b = (_dec2 = [foo(18)], computed.accessor), _a = (_dec = [foo(20)], computed.accessor), _c)](x) {
  3676        }
  3677      }, _init = __decoratorStart(_l), __b = new WeakMap(), __a = new WeakMap(), __decorateElement(_init, 9, _i, _dec9, _k), __decorateElement(_init, 10, _e, _dec5, _k), __decorateElement(_init, 11, _c, _dec3, _k), __decorateElement(_init, 12, _a, _dec, _k, __a), __decorateElement(_init, 1, _j, _dec10, _k), __decorateElement(_init, 2, _f, _dec6, _k), __decorateElement(_init, 3, _d, _dec4, _k), __decorateElement(_init, 4, _b, _dec2, _k, __b), __decorateElement(_init, 13, _g, _dec7, _k), __decorateElement(_init, 5, _h, _dec8, _k), _k = __decorateElement(_init, 0, "", _class_decorators, _k), __runInitializers(_init, 3, _k), __publicField(_k, _g, __runInitializers(_init, 16, _k)), __runInitializers(_init, 19, _k), __privateAdd(_k, __a, __runInitializers(_init, 8, _k)), __runInitializers(_init, 11, _k), __runInitializers(_init, 1, _k), _k;
  3678      assertEq(() => "" + log, "0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21");
  3679    },
  3680    'Decorator list evaluation: "this" (class statement)': () => {
  3681      const log = [];
  3682      const dummy = () => {
  3683      };
  3684      const ctx = {
  3685        foo(n) {
  3686          log.push(n);
  3687        }
  3688      };
  3689      function wrapper() {
  3690        var _accessor_dec, _accessor_dec2, _setter_dec, _setter_dec2, _getter_dec, _getter_dec2, _field_dec, _field_dec2, _method_dec, _method_dec2, _a, _Foo_decorators, _init, _accessor, _accessor2;
  3691        _Foo_decorators = [(assertEq(() => this.foo(0), void 0), dummy)];
  3692        class Foo2 extends (_a = (assertEq(() => this.foo(1), void 0), Object), _method_dec2 = [(assertEq(() => this.foo(2), void 0), dummy)], _method_dec = [(assertEq(() => this.foo(3), void 0), dummy)], _field_dec2 = [(assertEq(() => this.foo(4), void 0), dummy)], _field_dec = [(assertEq(() => this.foo(5), void 0), dummy)], _getter_dec2 = [(assertEq(() => this.foo(6), void 0), dummy)], _getter_dec = [(assertEq(() => this.foo(7), void 0), dummy)], _setter_dec2 = [(assertEq(() => this.foo(8), void 0), dummy)], _setter_dec = [(assertEq(() => this.foo(9), void 0), dummy)], _accessor_dec2 = [(assertEq(() => this.foo(10), void 0), dummy)], _accessor_dec = [(assertEq(() => this.foo(11), void 0), dummy)], _a) {
  3693          constructor() {
  3694            super(...arguments);
  3695            __runInitializers(_init, 5, this);
  3696            __publicField(this, "field", __runInitializers(_init, 20, this)), __runInitializers(_init, 23, this);
  3697            __privateAdd(this, _accessor, __runInitializers(_init, 12, this)), __runInitializers(_init, 15, this);
  3698          }
  3699          method() {
  3700          }
  3701          static method() {
  3702          }
  3703          get getter() {
  3704            return;
  3705          }
  3706          static get getter() {
  3707            return;
  3708          }
  3709          set setter(x) {
  3710          }
  3711          static set setter(x) {
  3712          }
  3713        }
  3714        _init = __decoratorStart(_a);
  3715        _accessor = new WeakMap();
  3716        _accessor2 = new WeakMap();
  3717        __decorateElement(_init, 9, "method", _method_dec, Foo2);
  3718        __decorateElement(_init, 10, "getter", _getter_dec, Foo2);
  3719        __decorateElement(_init, 11, "setter", _setter_dec, Foo2);
  3720        __decorateElement(_init, 12, "accessor", _accessor_dec, Foo2, _accessor2);
  3721        __decorateElement(_init, 1, "method", _method_dec2, Foo2);
  3722        __decorateElement(_init, 2, "getter", _getter_dec2, Foo2);
  3723        __decorateElement(_init, 3, "setter", _setter_dec2, Foo2);
  3724        __decorateElement(_init, 4, "accessor", _accessor_dec2, Foo2, _accessor);
  3725        __decorateElement(_init, 13, "field", _field_dec, Foo2);
  3726        __decorateElement(_init, 5, "field", _field_dec2, Foo2);
  3727        Foo2 = __decorateElement(_init, 0, "Foo", _Foo_decorators, Foo2);
  3728        __runInitializers(_init, 3, Foo2);
  3729        __publicField(Foo2, "field", __runInitializers(_init, 16, Foo2)), __runInitializers(_init, 19, Foo2);
  3730        __privateAdd(Foo2, _accessor2, __runInitializers(_init, 8, Foo2)), __runInitializers(_init, 11, Foo2);
  3731        __runInitializers(_init, 1, Foo2);
  3732      }
  3733      wrapper.call(ctx);
  3734      assertEq(() => "" + log, "0,1,2,3,4,5,6,7,8,9,10,11");
  3735    },
  3736    'Decorator list evaluation: "this" (class expression)': () => {
  3737      const log = [];
  3738      const dummy = () => {
  3739      };
  3740      const ctx = {
  3741        foo(n) {
  3742          log.push(n);
  3743        }
  3744      };
  3745      function wrapper() {
  3746        var _accessor_dec, _accessor_dec2, _setter_dec, _setter_dec2, _getter_dec, _getter_dec2, _field_dec, _field_dec2, _method_dec, _method_dec2, _a, _class_decorators, _init, _b, _accessor, _accessor2;
  3747        _class_decorators = [(assertEq(() => this.foo(0), void 0), dummy)], _b = class extends (_a = (assertEq(() => this.foo(1), void 0), Object), _method_dec2 = [(assertEq(() => this.foo(2), void 0), dummy)], _method_dec = [(assertEq(() => this.foo(3), void 0), dummy)], _field_dec2 = [(assertEq(() => this.foo(4), void 0), dummy)], _field_dec = [(assertEq(() => this.foo(5), void 0), dummy)], _getter_dec2 = [(assertEq(() => this.foo(6), void 0), dummy)], _getter_dec = [(assertEq(() => this.foo(7), void 0), dummy)], _setter_dec2 = [(assertEq(() => this.foo(8), void 0), dummy)], _setter_dec = [(assertEq(() => this.foo(9), void 0), dummy)], _accessor_dec2 = [(assertEq(() => this.foo(10), void 0), dummy)], _accessor_dec = [(assertEq(() => this.foo(11), void 0), dummy)], _a) {
  3748          constructor() {
  3749            super(...arguments);
  3750            __runInitializers(_init, 5, this);
  3751            __publicField(this, "field", __runInitializers(_init, 20, this)), __runInitializers(_init, 23, this);
  3752            __privateAdd(this, _accessor, __runInitializers(_init, 12, this)), __runInitializers(_init, 15, this);
  3753          }
  3754          method() {
  3755          }
  3756          static method() {
  3757          }
  3758          get getter() {
  3759            return;
  3760          }
  3761          static get getter() {
  3762            return;
  3763          }
  3764          set setter(x) {
  3765          }
  3766          static set setter(x) {
  3767          }
  3768        }, _init = __decoratorStart(_a), _accessor = new WeakMap(), _accessor2 = new WeakMap(), __decorateElement(_init, 9, "method", _method_dec, _b), __decorateElement(_init, 10, "getter", _getter_dec, _b), __decorateElement(_init, 11, "setter", _setter_dec, _b), __decorateElement(_init, 12, "accessor", _accessor_dec, _b, _accessor2), __decorateElement(_init, 1, "method", _method_dec2, _b), __decorateElement(_init, 2, "getter", _getter_dec2, _b), __decorateElement(_init, 3, "setter", _setter_dec2, _b), __decorateElement(_init, 4, "accessor", _accessor_dec2, _b, _accessor), __decorateElement(_init, 13, "field", _field_dec, _b), __decorateElement(_init, 5, "field", _field_dec2, _b), _b = __decorateElement(_init, 0, "", _class_decorators, _b), __runInitializers(_init, 3, _b), __publicField(_b, "field", __runInitializers(_init, 16, _b)), __runInitializers(_init, 19, _b), __privateAdd(_b, _accessor2, __runInitializers(_init, 8, _b)), __runInitializers(_init, 11, _b), __runInitializers(_init, 1, _b), _b;
  3769      }
  3770      wrapper.call(ctx);
  3771      assertEq(() => "" + log, "0,1,2,3,4,5,6,7,8,9,10,11");
  3772    },
  3773    'Decorator list evaluation: "await" (class statement)': async () => {
  3774      const log = [];
  3775      const dummy = () => {
  3776      };
  3777      async function wrapper() {
  3778        var _accessor_dec, _accessor_dec2, _setter_dec, _setter_dec2, _getter_dec, _getter_dec2, _field_dec, _field_dec2, _method_dec, _method_dec2, _a, _Foo_decorators, _init, _accessor, _accessor2;
  3779        _Foo_decorators = [(log.push(await Promise.resolve(0)), dummy)];
  3780        class Foo2 extends (_a = (log.push(await Promise.resolve(1)), Object), _method_dec2 = [(log.push(await Promise.resolve(2)), dummy)], _method_dec = [(log.push(await Promise.resolve(3)), dummy)], _field_dec2 = [(log.push(await Promise.resolve(4)), dummy)], _field_dec = [(log.push(await Promise.resolve(5)), dummy)], _getter_dec2 = [(log.push(await Promise.resolve(6)), dummy)], _getter_dec = [(log.push(await Promise.resolve(7)), dummy)], _setter_dec2 = [(log.push(await Promise.resolve(8)), dummy)], _setter_dec = [(log.push(await Promise.resolve(9)), dummy)], _accessor_dec2 = [(log.push(await Promise.resolve(10)), dummy)], _accessor_dec = [(log.push(await Promise.resolve(11)), dummy)], _a) {
  3781          constructor() {
  3782            super(...arguments);
  3783            __runInitializers(_init, 5, this);
  3784            __publicField(this, "field", __runInitializers(_init, 20, this)), __runInitializers(_init, 23, this);
  3785            __privateAdd(this, _accessor, __runInitializers(_init, 12, this)), __runInitializers(_init, 15, this);
  3786          }
  3787          method() {
  3788          }
  3789          static method() {
  3790          }
  3791          get getter() {
  3792            return;
  3793          }
  3794          static get getter() {
  3795            return;
  3796          }
  3797          set setter(x) {
  3798          }
  3799          static set setter(x) {
  3800          }
  3801        }
  3802        _init = __decoratorStart(_a);
  3803        _accessor = new WeakMap();
  3804        _accessor2 = new WeakMap();
  3805        __decorateElement(_init, 9, "method", _method_dec, Foo2);
  3806        __decorateElement(_init, 10, "getter", _getter_dec, Foo2);
  3807        __decorateElement(_init, 11, "setter", _setter_dec, Foo2);
  3808        __decorateElement(_init, 12, "accessor", _accessor_dec, Foo2, _accessor2);
  3809        __decorateElement(_init, 1, "method", _method_dec2, Foo2);
  3810        __decorateElement(_init, 2, "getter", _getter_dec2, Foo2);
  3811        __decorateElement(_init, 3, "setter", _setter_dec2, Foo2);
  3812        __decorateElement(_init, 4, "accessor", _accessor_dec2, Foo2, _accessor);
  3813        __decorateElement(_init, 13, "field", _field_dec, Foo2);
  3814        __decorateElement(_init, 5, "field", _field_dec2, Foo2);
  3815        Foo2 = __decorateElement(_init, 0, "Foo", _Foo_decorators, Foo2);
  3816        __runInitializers(_init, 3, Foo2);
  3817        __publicField(Foo2, "field", __runInitializers(_init, 16, Foo2)), __runInitializers(_init, 19, Foo2);
  3818        __privateAdd(Foo2, _accessor2, __runInitializers(_init, 8, Foo2)), __runInitializers(_init, 11, Foo2);
  3819        __runInitializers(_init, 1, Foo2);
  3820      }
  3821      await wrapper();
  3822      assertEq(() => "" + log, "0,1,2,3,4,5,6,7,8,9,10,11");
  3823    },
  3824    'Decorator list evaluation: "await" (class expression)': async () => {
  3825      const log = [];
  3826      const dummy = () => {
  3827      };
  3828      async function wrapper() {
  3829        var _accessor_dec, _accessor_dec2, _setter_dec, _setter_dec2, _getter_dec, _getter_dec2, _field_dec, _field_dec2, _method_dec, _method_dec2, _a, _class_decorators, _init, _b, _accessor, _accessor2;
  3830        _class_decorators = [(log.push(await Promise.resolve(0)), dummy)], _b = class extends (_a = (log.push(await Promise.resolve(1)), Object), _method_dec2 = [(log.push(await Promise.resolve(2)), dummy)], _method_dec = [(log.push(await Promise.resolve(3)), dummy)], _field_dec2 = [(log.push(await Promise.resolve(4)), dummy)], _field_dec = [(log.push(await Promise.resolve(5)), dummy)], _getter_dec2 = [(log.push(await Promise.resolve(6)), dummy)], _getter_dec = [(log.push(await Promise.resolve(7)), dummy)], _setter_dec2 = [(log.push(await Promise.resolve(8)), dummy)], _setter_dec = [(log.push(await Promise.resolve(9)), dummy)], _accessor_dec2 = [(log.push(await Promise.resolve(10)), dummy)], _accessor_dec = [(log.push(await Promise.resolve(11)), dummy)], _a) {
  3831          constructor() {
  3832            super(...arguments);
  3833            __runInitializers(_init, 5, this);
  3834            __publicField(this, "field", __runInitializers(_init, 20, this)), __runInitializers(_init, 23, this);
  3835            __privateAdd(this, _accessor, __runInitializers(_init, 12, this)), __runInitializers(_init, 15, this);
  3836          }
  3837          method() {
  3838          }
  3839          static method() {
  3840          }
  3841          get getter() {
  3842            return;
  3843          }
  3844          static get getter() {
  3845            return;
  3846          }
  3847          set setter(x) {
  3848          }
  3849          static set setter(x) {
  3850          }
  3851        }, _init = __decoratorStart(_a), _accessor = new WeakMap(), _accessor2 = new WeakMap(), __decorateElement(_init, 9, "method", _method_dec, _b), __decorateElement(_init, 10, "getter", _getter_dec, _b), __decorateElement(_init, 11, "setter", _setter_dec, _b), __decorateElement(_init, 12, "accessor", _accessor_dec, _b, _accessor2), __decorateElement(_init, 1, "method", _method_dec2, _b), __decorateElement(_init, 2, "getter", _getter_dec2, _b), __decorateElement(_init, 3, "setter", _setter_dec2, _b), __decorateElement(_init, 4, "accessor", _accessor_dec2, _b, _accessor), __decorateElement(_init, 13, "field", _field_dec, _b), __decorateElement(_init, 5, "field", _field_dec2, _b), _b = __decorateElement(_init, 0, "", _class_decorators, _b), __runInitializers(_init, 3, _b), __publicField(_b, "field", __runInitializers(_init, 16, _b)), __runInitializers(_init, 19, _b), __privateAdd(_b, _accessor2, __runInitializers(_init, 8, _b)), __runInitializers(_init, 11, _b), __runInitializers(_init, 1, _b), _b;
  3852      }
  3853      await wrapper();
  3854      assertEq(() => "" + log, "0,1,2,3,4,5,6,7,8,9,10,11");
  3855    },
  3856    "Decorator list evaluation: Outer private name (class statement)": () => {
  3857      var _accessor_dec, _accessor_dec2, _setter_dec, _setter_dec2, _getter_dec, _getter_dec2, _field_dec, _field_dec2, _method_dec, _method_dec2, _a, _Foo_decorators, _init, _accessor, _accessor2;
  3858      const log = [];
  3859      class Dummy {
  3860        static #foo(n) {
  3861          log.push(n);
  3862          return () => {
  3863          };
  3864        }
  3865        static {
  3866          const dummy = this;
  3867          _Foo_decorators = [dummy.#foo(0)];
  3868          class Foo2 extends (_a = (dummy.#foo(1), Object), _method_dec2 = [dummy.#foo(2)], _method_dec = [dummy.#foo(3)], _field_dec2 = [dummy.#foo(4)], _field_dec = [dummy.#foo(5)], _getter_dec2 = [dummy.#foo(6)], _getter_dec = [dummy.#foo(7)], _setter_dec2 = [dummy.#foo(8)], _setter_dec = [dummy.#foo(9)], _accessor_dec2 = [dummy.#foo(10)], _accessor_dec = [dummy.#foo(11)], _a) {
  3869            constructor() {
  3870              super(...arguments);
  3871              __runInitializers(_init, 5, this);
  3872              __publicField(this, "field", __runInitializers(_init, 20, this)), __runInitializers(_init, 23, this);
  3873              __privateAdd(this, _accessor, __runInitializers(_init, 12, this)), __runInitializers(_init, 15, this);
  3874            }
  3875            method() {
  3876            }
  3877            static method() {
  3878            }
  3879            get getter() {
  3880              return;
  3881            }
  3882            static get getter() {
  3883              return;
  3884            }
  3885            set setter(x) {
  3886            }
  3887            static set setter(x) {
  3888            }
  3889          }
  3890          _init = __decoratorStart(_a);
  3891          _accessor = new WeakMap();
  3892          _accessor2 = new WeakMap();
  3893          __decorateElement(_init, 9, "method", _method_dec, Foo2);
  3894          __decorateElement(_init, 10, "getter", _getter_dec, Foo2);
  3895          __decorateElement(_init, 11, "setter", _setter_dec, Foo2);
  3896          __decorateElement(_init, 12, "accessor", _accessor_dec, Foo2, _accessor2);
  3897          __decorateElement(_init, 1, "method", _method_dec2, Foo2);
  3898          __decorateElement(_init, 2, "getter", _getter_dec2, Foo2);
  3899          __decorateElement(_init, 3, "setter", _setter_dec2, Foo2);
  3900          __decorateElement(_init, 4, "accessor", _accessor_dec2, Foo2, _accessor);
  3901          __decorateElement(_init, 13, "field", _field_dec, Foo2);
  3902          __decorateElement(_init, 5, "field", _field_dec2, Foo2);
  3903          Foo2 = __decorateElement(_init, 0, "Foo", _Foo_decorators, Foo2);
  3904          __runInitializers(_init, 3, Foo2);
  3905          __publicField(Foo2, "field", __runInitializers(_init, 16, Foo2)), __runInitializers(_init, 19, Foo2);
  3906          __privateAdd(Foo2, _accessor2, __runInitializers(_init, 8, Foo2)), __runInitializers(_init, 11, Foo2);
  3907          __runInitializers(_init, 1, Foo2);
  3908        }
  3909      }
  3910      assertEq(() => "" + log, "0,1,2,3,4,5,6,7,8,9,10,11");
  3911    },
  3912    "Decorator list evaluation: Outer private name (class expression)": () => {
  3913      var _accessor_dec, _accessor_dec2, _setter_dec, _setter_dec2, _getter_dec, _getter_dec2, _field_dec, _field_dec2, _method_dec, _method_dec2, _a, _class_decorators, _init, _b, _accessor, _accessor2;
  3914      const log = [];
  3915      class Dummy {
  3916        static #foo(n) {
  3917          log.push(n);
  3918          return () => {
  3919          };
  3920        }
  3921        static {
  3922          const dummy = this;
  3923          _class_decorators = [dummy.#foo(0)], _b = class extends (_a = (dummy.#foo(1), Object), _method_dec2 = [dummy.#foo(2)], _method_dec = [dummy.#foo(3)], _field_dec2 = [dummy.#foo(4)], _field_dec = [dummy.#foo(5)], _getter_dec2 = [dummy.#foo(6)], _getter_dec = [dummy.#foo(7)], _setter_dec2 = [dummy.#foo(8)], _setter_dec = [dummy.#foo(9)], _accessor_dec2 = [dummy.#foo(10)], _accessor_dec = [dummy.#foo(11)], _a) {
  3924            constructor() {
  3925              super(...arguments);
  3926              __runInitializers(_init, 5, this);
  3927              __publicField(this, "field", __runInitializers(_init, 20, this)), __runInitializers(_init, 23, this);
  3928              __privateAdd(this, _accessor, __runInitializers(_init, 12, this)), __runInitializers(_init, 15, this);
  3929            }
  3930            method() {
  3931            }
  3932            static method() {
  3933            }
  3934            get getter() {
  3935              return;
  3936            }
  3937            static get getter() {
  3938              return;
  3939            }
  3940            set setter(x) {
  3941            }
  3942            static set setter(x) {
  3943            }
  3944          }, _init = __decoratorStart(_a), _accessor = new WeakMap(), _accessor2 = new WeakMap(), __decorateElement(_init, 9, "method", _method_dec, _b), __decorateElement(_init, 10, "getter", _getter_dec, _b), __decorateElement(_init, 11, "setter", _setter_dec, _b), __decorateElement(_init, 12, "accessor", _accessor_dec, _b, _accessor2), __decorateElement(_init, 1, "method", _method_dec2, _b), __decorateElement(_init, 2, "getter", _getter_dec2, _b), __decorateElement(_init, 3, "setter", _setter_dec2, _b), __decorateElement(_init, 4, "accessor", _accessor_dec2, _b, _accessor), __decorateElement(_init, 13, "field", _field_dec, _b), __decorateElement(_init, 5, "field", _field_dec2, _b), _b = __decorateElement(_init, 0, "", _class_decorators, _b), __runInitializers(_init, 3, _b), __publicField(_b, "field", __runInitializers(_init, 16, _b)), __runInitializers(_init, 19, _b), __privateAdd(_b, _accessor2, __runInitializers(_init, 8, _b)), __runInitializers(_init, 11, _b), __runInitializers(_init, 1, _b), _b;
  3945        }
  3946      }
  3947      assertEq(() => "" + log, "0,1,2,3,4,5,6,7,8,9,10,11");
  3948    },
  3949    "Decorator list evaluation: Inner private name (class statement)": () => {
  3950      var _accessor_dec, _accessor_dec2, _setter_dec, _setter_dec2, _getter_dec, _getter_dec2, _field_dec, _field_dec2, _method_dec, _method_dec2, _Foo_decorators, _foo, _init, _accessor, _accessor2;
  3951      const fns = [];
  3952      const capture = (fn) => {
  3953        fns.push(fn);
  3954        return () => {
  3955        };
  3956      };
  3957      class Dummy {
  3958        static #foo = NaN;
  3959        static {
  3960          _Foo_decorators = [capture(() => new Foo2().#foo + 0)], _method_dec2 = [capture(() => __privateGet(new _Foo(), _foo) + 1)], _method_dec = [capture(() => __privateGet(new _Foo(), _foo) + 2)], _field_dec2 = [capture(() => __privateGet(new _Foo(), _foo) + 3)], _field_dec = [capture(() => __privateGet(new _Foo(), _foo) + 4)], _getter_dec2 = [capture(() => __privateGet(new _Foo(), _foo) + 5)], _getter_dec = [capture(() => __privateGet(new _Foo(), _foo) + 6)], _setter_dec2 = [capture(() => __privateGet(new _Foo(), _foo) + 7)], _setter_dec = [capture(() => __privateGet(new _Foo(), _foo) + 8)], _accessor_dec2 = [capture(() => __privateGet(new _Foo(), _foo) + 9)], _accessor_dec = [capture(() => __privateGet(new _Foo(), _foo) + 10)];
  3961          let _Foo = class _Foo {
  3962            constructor() {
  3963              __runInitializers(_init, 5, this);
  3964              __privateAdd(this, _foo, 10);
  3965              __publicField(this, "field", __runInitializers(_init, 20, this)), __runInitializers(_init, 23, this);
  3966              __privateAdd(this, _accessor, __runInitializers(_init, 12, this)), __runInitializers(_init, 15, this);
  3967            }
  3968            method() {
  3969            }
  3970            static method() {
  3971            }
  3972            get getter() {
  3973              return;
  3974            }
  3975            static get getter() {
  3976              return;
  3977            }
  3978            set setter(x) {
  3979            }
  3980            static set setter(x) {
  3981            }
  3982          };
  3983          _init = __decoratorStart(null);
  3984          _foo = new WeakMap();
  3985          _accessor = new WeakMap();
  3986          _accessor2 = new WeakMap();
  3987          __decorateElement(_init, 9, "method", _method_dec, _Foo);
  3988          __decorateElement(_init, 10, "getter", _getter_dec, _Foo);
  3989          __decorateElement(_init, 11, "setter", _setter_dec, _Foo);
  3990          __decorateElement(_init, 12, "accessor", _accessor_dec, _Foo, _accessor2);
  3991          __decorateElement(_init, 1, "method", _method_dec2, _Foo);
  3992          __decorateElement(_init, 2, "getter", _getter_dec2, _Foo);
  3993          __decorateElement(_init, 3, "setter", _setter_dec2, _Foo);
  3994          __decorateElement(_init, 4, "accessor", _accessor_dec2, _Foo, _accessor);
  3995          __decorateElement(_init, 13, "field", _field_dec, _Foo);
  3996          __decorateElement(_init, 5, "field", _field_dec2, _Foo);
  3997          _Foo = __decorateElement(_init, 0, "Foo", _Foo_decorators, _Foo);
  3998          __runInitializers(_init, 3, _Foo);
  3999          __publicField(_Foo, "field", __runInitializers(_init, 16, _Foo)), __runInitializers(_init, 19, _Foo);
  4000          __privateAdd(_Foo, _accessor2, __runInitializers(_init, 8, _Foo)), __runInitializers(_init, 11, _Foo);
  4001          __runInitializers(_init, 1, _Foo);
  4002          let Foo2 = _Foo;
  4003        }
  4004      }
  4005      const firstFn = fns.shift();
  4006      assertEq(() => {
  4007        try {
  4008          firstFn();
  4009          throw new Error("Expected a TypeError to be thrown");
  4010        } catch (err) {
  4011          if (err instanceof TypeError) return true;
  4012          throw err;
  4013        }
  4014      }, true);
  4015      const log = [];
  4016      for (const fn of fns) log.push(fn());
  4017      assertEq(() => "" + log, "11,12,13,14,15,16,17,18,19,20");
  4018    },
  4019    "Decorator list evaluation: Inner private name (class expression)": () => {
  4020      var _accessor_dec, _accessor_dec2, _setter_dec, _setter_dec2, _getter_dec, _getter_dec2, _field_dec, _field_dec2, _method_dec, _method_dec2, _Foo_decorators, _foo, _init, _a, _accessor, _accessor2;
  4021      const fns = [];
  4022      const capture = (fn) => {
  4023        fns.push(fn);
  4024        return () => {
  4025        };
  4026      };
  4027      class Outer {
  4028        static #foo = 0;
  4029        static {
  4030          _Foo_decorators = [capture(() => Outer.#foo + 0)], _method_dec2 = [capture(() => __privateGet(new _a(), _foo) + 1)], _method_dec = [capture(() => __privateGet(new _a(), _foo) + 2)], _field_dec2 = [capture(() => __privateGet(new _a(), _foo) + 3)], _field_dec = [capture(() => __privateGet(new _a(), _foo) + 4)], _getter_dec2 = [capture(() => __privateGet(new _a(), _foo) + 5)], _getter_dec = [capture(() => __privateGet(new _a(), _foo) + 6)], _setter_dec2 = [capture(() => __privateGet(new _a(), _foo) + 7)], _setter_dec = [capture(() => __privateGet(new _a(), _foo) + 8)], _accessor_dec2 = [capture(() => __privateGet(new _a(), _foo) + 9)], _accessor_dec = [capture(() => __privateGet(new _a(), _foo) + 10)], _a = class {
  4031            constructor() {
  4032              __runInitializers(_init, 5, this);
  4033              __privateAdd(this, _foo, 10);
  4034              __publicField(this, "field", __runInitializers(_init, 20, this)), __runInitializers(_init, 23, this);
  4035              __privateAdd(this, _accessor, __runInitializers(_init, 12, this)), __runInitializers(_init, 15, this);
  4036            }
  4037            method() {
  4038            }
  4039            static method() {
  4040            }
  4041            get getter() {
  4042              return;
  4043            }
  4044            static get getter() {
  4045              return;
  4046            }
  4047            set setter(x) {
  4048            }
  4049            static set setter(x) {
  4050            }
  4051          }, _init = __decoratorStart(null), _foo = new WeakMap(), _accessor = new WeakMap(), _accessor2 = new WeakMap(), __decorateElement(_init, 9, "method", _method_dec, _a), __decorateElement(_init, 10, "getter", _getter_dec, _a), __decorateElement(_init, 11, "setter", _setter_dec, _a), __decorateElement(_init, 12, "accessor", _accessor_dec, _a, _accessor2), __decorateElement(_init, 1, "method", _method_dec2, _a), __decorateElement(_init, 2, "getter", _getter_dec2, _a), __decorateElement(_init, 3, "setter", _setter_dec2, _a), __decorateElement(_init, 4, "accessor", _accessor_dec2, _a, _accessor), __decorateElement(_init, 13, "field", _field_dec, _a), __decorateElement(_init, 5, "field", _field_dec2, _a), _a = __decorateElement(_init, 0, "Foo", _Foo_decorators, _a), __runInitializers(_init, 3, _a), __publicField(_a, "field", __runInitializers(_init, 16, _a)), __runInitializers(_init, 19, _a), __privateAdd(_a, _accessor2, __runInitializers(_init, 8, _a)), __runInitializers(_init, 11, _a), __runInitializers(_init, 1, _a), _a;
  4052        }
  4053      }
  4054      const log = [];
  4055      for (const fn of fns) log.push(fn());
  4056      assertEq(() => "" + log, "0,11,12,13,14,15,16,17,18,19,20");
  4057    },
  4058    "Decorator list evaluation: Class binding (class statement)": () => {
  4059      var _accessor_dec, _accessor_dec2, _setter_dec, _setter_dec2, _getter_dec, _getter_dec2, _field_dec, _field_dec2, _method_dec, _method_dec2, _Foo_decorators, _init, _accessor, _accessor2;
  4060      const fns = [];
  4061      const capture = (fn) => {
  4062        fns.push(fn);
  4063        assertThrows(() => fn(), ReferenceError);
  4064        return () => {
  4065        };
  4066      };
  4067      _Foo_decorators = [capture(() => Foo2)], _method_dec2 = [capture(() => _Foo)], _method_dec = [capture(() => _Foo)], _field_dec2 = [capture(() => _Foo)], _field_dec = [capture(() => _Foo)], _getter_dec2 = [capture(() => _Foo)], _getter_dec = [capture(() => _Foo)], _setter_dec2 = [capture(() => _Foo)], _setter_dec = [capture(() => _Foo)], _accessor_dec2 = [capture(() => _Foo)], _accessor_dec = [capture(() => _Foo)];
  4068      let _Foo = class _Foo {
  4069        constructor() {
  4070          __runInitializers(_init, 5, this);
  4071          __publicField(this, "field", __runInitializers(_init, 20, this)), __runInitializers(_init, 23, this);
  4072          __privateAdd(this, _accessor, __runInitializers(_init, 12, this)), __runInitializers(_init, 15, this);
  4073        }
  4074        method() {
  4075        }
  4076        static method() {
  4077        }
  4078        get getter() {
  4079          return;
  4080        }
  4081        static get getter() {
  4082          return;
  4083        }
  4084        set setter(x) {
  4085        }
  4086        static set setter(x) {
  4087        }
  4088      };
  4089      _init = __decoratorStart(null);
  4090      _accessor = new WeakMap();
  4091      _accessor2 = new WeakMap();
  4092      __decorateElement(_init, 9, "method", _method_dec, _Foo);
  4093      __decorateElement(_init, 10, "getter", _getter_dec, _Foo);
  4094      __decorateElement(_init, 11, "setter", _setter_dec, _Foo);
  4095      __decorateElement(_init, 12, "accessor", _accessor_dec, _Foo, _accessor2);
  4096      __decorateElement(_init, 1, "method", _method_dec2, _Foo);
  4097      __decorateElement(_init, 2, "getter", _getter_dec2, _Foo);
  4098      __decorateElement(_init, 3, "setter", _setter_dec2, _Foo);
  4099      __decorateElement(_init, 4, "accessor", _accessor_dec2, _Foo, _accessor);
  4100      __decorateElement(_init, 13, "field", _field_dec, _Foo);
  4101      __decorateElement(_init, 5, "field", _field_dec2, _Foo);
  4102      _Foo = __decorateElement(_init, 0, "Foo", _Foo_decorators, _Foo);
  4103      __runInitializers(_init, 3, _Foo);
  4104      __publicField(_Foo, "field", __runInitializers(_init, 16, _Foo)), __runInitializers(_init, 19, _Foo);
  4105      __privateAdd(_Foo, _accessor2, __runInitializers(_init, 8, _Foo)), __runInitializers(_init, 11, _Foo);
  4106      __runInitializers(_init, 1, _Foo);
  4107      let Foo2 = _Foo;
  4108      const originalFoo = Foo2;
  4109      for (const fn of fns) {
  4110        assertEq(() => fn(), originalFoo);
  4111      }
  4112      Foo2 = null;
  4113      const firstFn = fns.shift();
  4114      assertEq(() => firstFn(), null);
  4115      for (const fn of fns) {
  4116        assertEq(() => fn(), originalFoo);
  4117      }
  4118    },
  4119    "Decorator list evaluation: Class binding (class expression)": () => {
  4120      var _accessor_dec, _accessor_dec2, _setter_dec, _setter_dec2, _getter_dec, _getter_dec2, _field_dec, _field_dec2, _method_dec, _method_dec2, _Foo_decorators, _init, _a, _accessor, _accessor2;
  4121      const fns = [];
  4122      const capture = (fn) => {
  4123        fns.push(fn);
  4124        return () => {
  4125        };
  4126      };
  4127      const originalFoo = (_Foo_decorators = [capture(() => Foo)], _method_dec2 = [capture(() => _a)], _method_dec = [capture(() => _a)], _field_dec2 = [capture(() => _a)], _field_dec = [capture(() => _a)], _getter_dec2 = [capture(() => _a)], _getter_dec = [capture(() => _a)], _setter_dec2 = [capture(() => _a)], _setter_dec = [capture(() => _a)], _accessor_dec2 = [capture(() => _a)], _accessor_dec = [capture(() => _a)], _a = class {
  4128        constructor() {
  4129          __runInitializers(_init, 5, this);
  4130          __publicField(this, "field", __runInitializers(_init, 20, this)), __runInitializers(_init, 23, this);
  4131          __privateAdd(this, _accessor, __runInitializers(_init, 12, this)), __runInitializers(_init, 15, this);
  4132        }
  4133        method() {
  4134        }
  4135        static method() {
  4136        }
  4137        get getter() {
  4138          return;
  4139        }
  4140        static get getter() {
  4141          return;
  4142        }
  4143        set setter(x) {
  4144        }
  4145        static set setter(x) {
  4146        }
  4147      }, _init = __decoratorStart(null), _accessor = new WeakMap(), _accessor2 = new WeakMap(), __decorateElement(_init, 9, "method", _method_dec, _a), __decorateElement(_init, 10, "getter", _getter_dec, _a), __decorateElement(_init, 11, "setter", _setter_dec, _a), __decorateElement(_init, 12, "accessor", _accessor_dec, _a, _accessor2), __decorateElement(_init, 1, "method", _method_dec2, _a), __decorateElement(_init, 2, "getter", _getter_dec2, _a), __decorateElement(_init, 3, "setter", _setter_dec2, _a), __decorateElement(_init, 4, "accessor", _accessor_dec2, _a, _accessor), __decorateElement(_init, 13, "field", _field_dec, _a), __decorateElement(_init, 5, "field", _field_dec2, _a), _a = __decorateElement(_init, 0, "Foo", _Foo_decorators, _a), __runInitializers(_init, 3, _a), __publicField(_a, "field", __runInitializers(_init, 16, _a)), __runInitializers(_init, 19, _a), __privateAdd(_a, _accessor2, __runInitializers(_init, 8, _a)), __runInitializers(_init, 11, _a), __runInitializers(_init, 1, _a), _a);
  4148      const firstFn = fns.shift();
  4149      assertThrows(() => firstFn(), ReferenceError);
  4150      for (const fn of fns) {
  4151        assertEq(() => fn(), originalFoo);
  4152      }
  4153    },
  4154    // Decorator metadata
  4155    "Decorator metadata: class statement": () => {
  4156      var _staticSetter_dec, _staticGetter_dec, _staticMethod_dec, _staticAccessor_dec, _staticField_dec, _instanceSetter_dec, _instanceGetter_dec, _instanceMethod_dec, _instanceAccessor_dec, _instanceField_dec, _Foo_decorators, _init, _instanceAccessor, _staticAccessor, _staticSetter_dec2, _staticGetter_dec2, _staticMethod_dec2, _staticAccessor_dec2, _staticField_dec2, _instanceSetter_dec2, _instanceGetter_dec2, _instanceMethod_dec2, _instanceAccessor_dec2, _instanceField_dec2, _a, _Bar_decorators, _init2, _instanceField, _instanceAccessor2, _b, instanceAccessor_get, instanceAccessor_set, _Bar_instances, instanceMethod_fn, instanceGetter_get, instanceSetter_set, _staticField, _staticAccessor2, _c, staticAccessor_get, staticAccessor_set, _Bar_static, staticMethod_fn, staticGetter_get, staticSetter_set;
  4157      let counter = 0;
  4158      const dec = (_, ctx) => {
  4159        ctx.metadata[ctx.name] = counter++;
  4160      };
  4161      _Foo_decorators = [dec], _instanceField_dec = [dec], _instanceAccessor_dec = [dec], _instanceMethod_dec = [dec], _instanceGetter_dec = [dec], _instanceSetter_dec = [dec], _staticField_dec = [dec], _staticAccessor_dec = [dec], _staticMethod_dec = [dec], _staticGetter_dec = [dec], _staticSetter_dec = [dec];
  4162      class Foo2 {
  4163        constructor() {
  4164          __runInitializers(_init, 5, this);
  4165          __publicField(this, "instanceField", __runInitializers(_init, 20, this)), __runInitializers(_init, 23, this);
  4166          __privateAdd(this, _instanceAccessor, __runInitializers(_init, 12, this)), __runInitializers(_init, 15, this);
  4167        }
  4168        instanceMethod() {
  4169        }
  4170        get instanceGetter() {
  4171          return;
  4172        }
  4173        set instanceSetter(_) {
  4174        }
  4175        static staticMethod() {
  4176        }
  4177        static get staticGetter() {
  4178          return;
  4179        }
  4180        static set staticSetter(_) {
  4181        }
  4182      }
  4183      _init = __decoratorStart(null);
  4184      _instanceAccessor = new WeakMap();
  4185      _staticAccessor = new WeakMap();
  4186      __decorateElement(_init, 12, "staticAccessor", _staticAccessor_dec, Foo2, _staticAccessor);
  4187      __decorateElement(_init, 9, "staticMethod", _staticMethod_dec, Foo2);
  4188      __decorateElement(_init, 10, "staticGetter", _staticGetter_dec, Foo2);
  4189      __decorateElement(_init, 11, "staticSetter", _staticSetter_dec, Foo2);
  4190      __decorateElement(_init, 4, "instanceAccessor", _instanceAccessor_dec, Foo2, _instanceAccessor);
  4191      __decorateElement(_init, 1, "instanceMethod", _instanceMethod_dec, Foo2);
  4192      __decorateElement(_init, 2, "instanceGetter", _instanceGetter_dec, Foo2);
  4193      __decorateElement(_init, 3, "instanceSetter", _instanceSetter_dec, Foo2);
  4194      __decorateElement(_init, 13, "staticField", _staticField_dec, Foo2);
  4195      __decorateElement(_init, 5, "instanceField", _instanceField_dec, Foo2);
  4196      Foo2 = __decorateElement(_init, 0, "Foo", _Foo_decorators, Foo2);
  4197      __runInitializers(_init, 3, Foo2);
  4198      __publicField(Foo2, "staticField", __runInitializers(_init, 16, Foo2)), __runInitializers(_init, 19, Foo2);
  4199      __privateAdd(Foo2, _staticAccessor, __runInitializers(_init, 8, Foo2)), __runInitializers(_init, 11, Foo2);
  4200      __runInitializers(_init, 1, Foo2);
  4201      _Bar_decorators = [dec];
  4202      class Bar extends (_a = Foo2, _instanceField_dec2 = [dec], _instanceAccessor_dec2 = [dec], _instanceMethod_dec2 = [dec], _instanceGetter_dec2 = [dec], _instanceSetter_dec2 = [dec], _staticField_dec2 = [dec], _staticAccessor_dec2 = [dec], _staticMethod_dec2 = [dec], _staticGetter_dec2 = [dec], _staticSetter_dec2 = [dec], _a) {
  4203        constructor() {
  4204          super(...arguments);
  4205          __runInitializers(_init2, 5, this);
  4206          __privateAdd(this, _Bar_instances);
  4207          __privateAdd(this, _instanceField, __runInitializers(_init2, 20, this)), __runInitializers(_init2, 23, this);
  4208          __privateAdd(this, _instanceAccessor2, __runInitializers(_init2, 12, this)), __runInitializers(_init2, 15, this);
  4209        }
  4210      }
  4211      _init2 = __decoratorStart(_a);
  4212      _instanceField = new WeakMap();
  4213      _instanceAccessor2 = new WeakMap();
  4214      _Bar_instances = new WeakSet();
  4215      instanceMethod_fn = function() {
  4216      };
  4217      instanceGetter_get = function() {
  4218        return;
  4219      };
  4220      instanceSetter_set = function(_) {
  4221      };
  4222      _staticField = new WeakMap();
  4223      _staticAccessor2 = new WeakMap();
  4224      _Bar_static = new WeakSet();
  4225      staticMethod_fn = function() {
  4226      };
  4227      staticGetter_get = function() {
  4228        return;
  4229      };
  4230      staticSetter_set = function(_) {
  4231      };
  4232      _c = __decorateElement(_init2, 28, "#staticAccessor", _staticAccessor_dec2, _Bar_static, _staticAccessor2), staticAccessor_get = _c.get, staticAccessor_set = _c.set;
  4233      staticMethod_fn = __decorateElement(_init2, 25, "#staticMethod", _staticMethod_dec2, _Bar_static, staticMethod_fn);
  4234      staticGetter_get = __decorateElement(_init2, 26, "#staticGetter", _staticGetter_dec2, _Bar_static, staticGetter_get);
  4235      staticSetter_set = __decorateElement(_init2, 27, "#staticSetter", _staticSetter_dec2, _Bar_static, staticSetter_set);
  4236      _b = __decorateElement(_init2, 20, "#instanceAccessor", _instanceAccessor_dec2, _Bar_instances, _instanceAccessor2), instanceAccessor_get = _b.get, instanceAccessor_set = _b.set;
  4237      instanceMethod_fn = __decorateElement(_init2, 17, "#instanceMethod", _instanceMethod_dec2, _Bar_instances, instanceMethod_fn);
  4238      instanceGetter_get = __decorateElement(_init2, 18, "#instanceGetter", _instanceGetter_dec2, _Bar_instances, instanceGetter_get);
  4239      instanceSetter_set = __decorateElement(_init2, 19, "#instanceSetter", _instanceSetter_dec2, _Bar_instances, instanceSetter_set);
  4240      __decorateElement(_init2, 29, "#staticField", _staticField_dec2, _staticField);
  4241      __decorateElement(_init2, 21, "#instanceField", _instanceField_dec2, _instanceField);
  4242      __privateAdd(Bar, _Bar_static);
  4243      Bar = __decorateElement(_init2, 0, "Bar", _Bar_decorators, Bar);
  4244      __runInitializers(_init2, 3, Bar);
  4245      __privateAdd(Bar, _staticField, __runInitializers(_init2, 16, Bar)), __runInitializers(_init2, 19, Bar);
  4246      __privateAdd(Bar, _staticAccessor2, __runInitializers(_init2, 8, Bar)), __runInitializers(_init2, 11, Bar);
  4247      __runInitializers(_init2, 1, Bar);
  4248      const order = (meta) => "" + [
  4249        meta["staticAccessor"],
  4250        meta["staticMethod"],
  4251        meta["staticGetter"],
  4252        meta["staticSetter"],
  4253        meta["#staticAccessor"],
  4254        meta["#staticMethod"],
  4255        meta["#staticGetter"],
  4256        meta["#staticSetter"],
  4257        meta["instanceAccessor"],
  4258        meta["instanceMethod"],
  4259        meta["instanceGetter"],
  4260        meta["instanceSetter"],
  4261        meta["#instanceAccessor"],
  4262        meta["#instanceMethod"],
  4263        meta["#instanceGetter"],
  4264        meta["#instanceSetter"],
  4265        meta["staticField"],
  4266        meta["#staticField"],
  4267        meta["instanceField"],
  4268        meta["#instanceField"],
  4269        meta["Foo"],
  4270        meta["Bar"]
  4271      ];
  4272      const foo = Foo2[Symbol.metadata];
  4273      const bar = Bar[Symbol.metadata];
  4274      assertEq(() => order(foo), "0,1,2,3,,,,,4,5,6,7,,,,,8,,9,,10,");
  4275      assertEq(() => order(bar), "0,1,2,3,11,12,13,14,4,5,6,7,15,16,17,18,8,19,9,20,10,21");
  4276      assertEq(() => Object.getPrototypeOf(bar), foo);
  4277    },
  4278    "Decorator metadata: class expression": () => {
  4279      var _staticSetter_dec, _staticGetter_dec, _staticMethod_dec, _staticAccessor_dec, _staticField_dec, _instanceSetter_dec, _instanceGetter_dec, _instanceMethod_dec, _instanceAccessor_dec, _instanceField_dec, _Foo_decorators, _init, _a, _instanceAccessor, _staticAccessor, _staticSetter_dec2, _staticGetter_dec2, _staticMethod_dec2, _staticAccessor_dec2, _staticField_dec2, _instanceSetter_dec2, _instanceGetter_dec2, _instanceMethod_dec2, _instanceAccessor_dec2, _instanceField_dec2, _b, _Bar_decorators, _init2, _instanceField, _instanceAccessor2, _c, instanceAccessor_get, instanceAccessor_set, _Bar_instances, instanceMethod_fn, instanceGetter_get, instanceSetter_set, _d, _staticField, _staticAccessor2, _e, staticAccessor_get, staticAccessor_set, _Bar_static, staticMethod_fn, staticGetter_get, staticSetter_set;
  4280      let counter = 0;
  4281      const dec = (_, ctx) => {
  4282        ctx.metadata[ctx.name] = counter++;
  4283      };
  4284      const Foo2 = (_Foo_decorators = [dec], _instanceField_dec = [dec], _instanceAccessor_dec = [dec], _instanceMethod_dec = [dec], _instanceGetter_dec = [dec], _instanceSetter_dec = [dec], _staticField_dec = [dec], _staticAccessor_dec = [dec], _staticMethod_dec = [dec], _staticGetter_dec = [dec], _staticSetter_dec = [dec], _a = class {
  4285        constructor() {
  4286          __runInitializers(_init, 5, this);
  4287          __publicField(this, "instanceField", __runInitializers(_init, 20, this)), __runInitializers(_init, 23, this);
  4288          __privateAdd(this, _instanceAccessor, __runInitializers(_init, 12, this)), __runInitializers(_init, 15, this);
  4289        }
  4290        instanceMethod() {
  4291        }
  4292        get instanceGetter() {
  4293          return;
  4294        }
  4295        set instanceSetter(_) {
  4296        }
  4297        static staticMethod() {
  4298        }
  4299        static get staticGetter() {
  4300          return;
  4301        }
  4302        static set staticSetter(_) {
  4303        }
  4304      }, _init = __decoratorStart(null), _instanceAccessor = new WeakMap(), _staticAccessor = new WeakMap(), __decorateElement(_init, 12, "staticAccessor", _staticAccessor_dec, _a, _staticAccessor), __decorateElement(_init, 9, "staticMethod", _staticMethod_dec, _a), __decorateElement(_init, 10, "staticGetter", _staticGetter_dec, _a), __decorateElement(_init, 11, "staticSetter", _staticSetter_dec, _a), __decorateElement(_init, 4, "instanceAccessor", _instanceAccessor_dec, _a, _instanceAccessor), __decorateElement(_init, 1, "instanceMethod", _instanceMethod_dec, _a), __decorateElement(_init, 2, "instanceGetter", _instanceGetter_dec, _a), __decorateElement(_init, 3, "instanceSetter", _instanceSetter_dec, _a), __decorateElement(_init, 13, "staticField", _staticField_dec, _a), __decorateElement(_init, 5, "instanceField", _instanceField_dec, _a), _a = __decorateElement(_init, 0, "Foo", _Foo_decorators, _a), __runInitializers(_init, 3, _a), __publicField(_a, "staticField", __runInitializers(_init, 16, _a)), __runInitializers(_init, 19, _a), __privateAdd(_a, _staticAccessor, __runInitializers(_init, 8, _a)), __runInitializers(_init, 11, _a), __runInitializers(_init, 1, _a), _a), Bar = (_Bar_decorators = [dec], _d = class extends (_b = Foo2, _instanceField_dec2 = [dec], _instanceAccessor_dec2 = [dec], _instanceMethod_dec2 = [dec], _instanceGetter_dec2 = [dec], _instanceSetter_dec2 = [dec], _staticField_dec2 = [dec], _staticAccessor_dec2 = [dec], _staticMethod_dec2 = [dec], _staticGetter_dec2 = [dec], _staticSetter_dec2 = [dec], _b) {
  4305        constructor() {
  4306          super(...arguments);
  4307          __runInitializers(_init2, 5, this);
  4308          __privateAdd(this, _Bar_instances);
  4309          __privateAdd(this, _instanceField, __runInitializers(_init2, 20, this)), __runInitializers(_init2, 23, this);
  4310          __privateAdd(this, _instanceAccessor2, __runInitializers(_init2, 12, this)), __runInitializers(_init2, 15, this);
  4311        }
  4312      }, _init2 = __decoratorStart(_b), _instanceField = new WeakMap(), _instanceAccessor2 = new WeakMap(), _Bar_instances = new WeakSet(), instanceMethod_fn = function() {
  4313      }, instanceGetter_get = function() {
  4314        return;
  4315      }, instanceSetter_set = function(_) {
  4316      }, _staticField = new WeakMap(), _staticAccessor2 = new WeakMap(), _Bar_static = new WeakSet(), staticMethod_fn = function() {
  4317      }, staticGetter_get = function() {
  4318        return;
  4319      }, staticSetter_set = function(_) {
  4320      }, _e = __decorateElement(_init2, 28, "#staticAccessor", _staticAccessor_dec2, _Bar_static, _staticAccessor2), staticAccessor_get = _e.get, staticAccessor_set = _e.set, staticMethod_fn = __decorateElement(_init2, 25, "#staticMethod", _staticMethod_dec2, _Bar_static, staticMethod_fn), staticGetter_get = __decorateElement(_init2, 26, "#staticGetter", _staticGetter_dec2, _Bar_static, staticGetter_get), staticSetter_set = __decorateElement(_init2, 27, "#staticSetter", _staticSetter_dec2, _Bar_static, staticSetter_set), _c = __decorateElement(_init2, 20, "#instanceAccessor", _instanceAccessor_dec2, _Bar_instances, _instanceAccessor2), instanceAccessor_get = _c.get, instanceAccessor_set = _c.set, instanceMethod_fn = __decorateElement(_init2, 17, "#instanceMethod", _instanceMethod_dec2, _Bar_instances, instanceMethod_fn), instanceGetter_get = __decorateElement(_init2, 18, "#instanceGetter", _instanceGetter_dec2, _Bar_instances, instanceGetter_get), instanceSetter_set = __decorateElement(_init2, 19, "#instanceSetter", _instanceSetter_dec2, _Bar_instances, instanceSetter_set), __decorateElement(_init2, 29, "#staticField", _staticField_dec2, _staticField), __decorateElement(_init2, 21, "#instanceField", _instanceField_dec2, _instanceField), __privateAdd(_d, _Bar_static), _d = __decorateElement(_init2, 0, "Bar", _Bar_decorators, _d), __runInitializers(_init2, 3, _d), __privateAdd(_d, _staticField, __runInitializers(_init2, 16, _d)), __runInitializers(_init2, 19, _d), __privateAdd(_d, _staticAccessor2, __runInitializers(_init2, 8, _d)), __runInitializers(_init2, 11, _d), __runInitializers(_init2, 1, _d), _d);
  4321      const order = (meta) => "" + [
  4322        meta["staticAccessor"],
  4323        meta["staticMethod"],
  4324        meta["staticGetter"],
  4325        meta["staticSetter"],
  4326        meta["#staticAccessor"],
  4327        meta["#staticMethod"],
  4328        meta["#staticGetter"],
  4329        meta["#staticSetter"],
  4330        meta["instanceAccessor"],
  4331        meta["instanceMethod"],
  4332        meta["instanceGetter"],
  4333        meta["instanceSetter"],
  4334        meta["#instanceAccessor"],
  4335        meta["#instanceMethod"],
  4336        meta["#instanceGetter"],
  4337        meta["#instanceSetter"],
  4338        meta["staticField"],
  4339        meta["#staticField"],
  4340        meta["instanceField"],
  4341        meta["#instanceField"],
  4342        meta["Foo"],
  4343        meta["Bar"]
  4344      ];
  4345      const foo = Foo2[Symbol.metadata];
  4346      const bar = Bar[Symbol.metadata];
  4347      assertEq(() => order(foo), "0,1,2,3,,,,,4,5,6,7,,,,,8,,9,,10,");
  4348      assertEq(() => order(bar), "0,1,2,3,11,12,13,14,4,5,6,7,15,16,17,18,8,19,9,20,10,21");
  4349      assertEq(() => Object.getPrototypeOf(bar), foo);
  4350    },
  4351    // Initializer order
  4352    "Initializer order (public members, class statement)": () => {
  4353      var _accessor_dec, _accessor_dec2, _setter_dec, _setter_dec2, _getter_dec, _getter_dec2, _field_dec, _field_dec2, _method_dec, _method_dec2, _a, _Foo_decorators, _init, _accessor, _accessor2;
  4354      const log = [];
  4355      const classDec1 = (cls, ctxClass) => {
  4356        log.push("c2");
  4357        if (!assertEq(() => typeof ctxClass.addInitializer, "function")) return;
  4358        ctxClass.addInitializer(() => log.push("c5"));
  4359        ctxClass.addInitializer(() => log.push("c6"));
  4360      };
  4361      const classDec2 = (cls, ctxClass) => {
  4362        log.push("c1");
  4363        if (!assertEq(() => typeof ctxClass.addInitializer, "function")) return;
  4364        ctxClass.addInitializer(() => log.push("c3"));
  4365        ctxClass.addInitializer(() => log.push("c4"));
  4366      };
  4367      const methodDec1 = (fn, ctxMethod) => {
  4368        log.push("m2");
  4369        if (!assertEq(() => typeof ctxMethod.addInitializer, "function")) return;
  4370        ctxMethod.addInitializer(() => log.push("m5"));
  4371        ctxMethod.addInitializer(() => log.push("m6"));
  4372      };
  4373      const methodDec2 = (fn, ctxMethod) => {
  4374        log.push("m1");
  4375        if (!assertEq(() => typeof ctxMethod.addInitializer, "function")) return;
  4376        ctxMethod.addInitializer(() => log.push("m3"));
  4377        ctxMethod.addInitializer(() => log.push("m4"));
  4378      };
  4379      const staticMethodDec1 = (fn, ctxStaticMethod) => {
  4380        log.push("M2");
  4381        if (!assertEq(() => typeof ctxStaticMethod.addInitializer, "function")) return;
  4382        ctxStaticMethod.addInitializer(() => log.push("M5"));
  4383        ctxStaticMethod.addInitializer(() => log.push("M6"));
  4384      };
  4385      const staticMethodDec2 = (fn, ctxStaticMethod) => {
  4386        log.push("M1");
  4387        if (!assertEq(() => typeof ctxStaticMethod.addInitializer, "function")) return;
  4388        ctxStaticMethod.addInitializer(() => log.push("M3"));
  4389        ctxStaticMethod.addInitializer(() => log.push("M4"));
  4390      };
  4391      const fieldDec1 = (value, ctxField) => {
  4392        log.push("f2");
  4393        if (!assertEq(() => typeof ctxField.addInitializer, "function")) return;
  4394        ctxField.addInitializer(() => log.push("f5"));
  4395        ctxField.addInitializer(() => log.push("f6"));
  4396        return () => {
  4397          log.push("f7");
  4398        };
  4399      };
  4400      const fieldDec2 = (value, ctxField) => {
  4401        log.push("f1");
  4402        if (!assertEq(() => typeof ctxField.addInitializer, "function")) return;
  4403        ctxField.addInitializer(() => log.push("f3"));
  4404        ctxField.addInitializer(() => log.push("f4"));
  4405        return () => {
  4406          log.push("f8");
  4407        };
  4408      };
  4409      const staticFieldDec1 = (value, ctxStaticField) => {
  4410        log.push("F2");
  4411        if (!assertEq(() => typeof ctxStaticField.addInitializer, "function")) return;
  4412        ctxStaticField.addInitializer(() => log.push("F5"));
  4413        ctxStaticField.addInitializer(() => log.push("F6"));
  4414        return () => {
  4415          log.push("F7");
  4416        };
  4417      };
  4418      const staticFieldDec2 = (value, ctxStaticField) => {
  4419        log.push("F1");
  4420        if (!assertEq(() => typeof ctxStaticField.addInitializer, "function")) return;
  4421        ctxStaticField.addInitializer(() => log.push("F3"));
  4422        ctxStaticField.addInitializer(() => log.push("F4"));
  4423        return () => {
  4424          log.push("F8");
  4425        };
  4426      };
  4427      const getterDec1 = (fn, ctxGetter) => {
  4428        log.push("g2");
  4429        if (!assertEq(() => typeof ctxGetter.addInitializer, "function")) return;
  4430        ctxGetter.addInitializer(() => log.push("g5"));
  4431        ctxGetter.addInitializer(() => log.push("g6"));
  4432      };
  4433      const getterDec2 = (fn, ctxGetter) => {
  4434        log.push("g1");
  4435        if (!assertEq(() => typeof ctxGetter.addInitializer, "function")) return;
  4436        ctxGetter.addInitializer(() => log.push("g3"));
  4437        ctxGetter.addInitializer(() => log.push("g4"));
  4438      };
  4439      const staticGetterDec1 = (fn, ctxStaticGetter) => {
  4440        log.push("G2");
  4441        if (!assertEq(() => typeof ctxStaticGetter.addInitializer, "function")) return;
  4442        ctxStaticGetter.addInitializer(() => log.push("G5"));
  4443        ctxStaticGetter.addInitializer(() => log.push("G6"));
  4444      };
  4445      const staticGetterDec2 = (fn, ctxStaticGetter) => {
  4446        log.push("G1");
  4447        if (!assertEq(() => typeof ctxStaticGetter.addInitializer, "function")) return;
  4448        ctxStaticGetter.addInitializer(() => log.push("G3"));
  4449        ctxStaticGetter.addInitializer(() => log.push("G4"));
  4450      };
  4451      const setterDec1 = (fn, ctxSetter) => {
  4452        log.push("s2");
  4453        if (!assertEq(() => typeof ctxSetter.addInitializer, "function")) return;
  4454        ctxSetter.addInitializer(() => log.push("s5"));
  4455        ctxSetter.addInitializer(() => log.push("s6"));
  4456      };
  4457      const setterDec2 = (fn, ctxSetter) => {
  4458        log.push("s1");
  4459        if (!assertEq(() => typeof ctxSetter.addInitializer, "function")) return;
  4460        ctxSetter.addInitializer(() => log.push("s3"));
  4461        ctxSetter.addInitializer(() => log.push("s4"));
  4462      };
  4463      const staticSetterDec1 = (fn, ctxStaticSetter) => {
  4464        log.push("S2");
  4465        if (!assertEq(() => typeof ctxStaticSetter.addInitializer, "function")) return;
  4466        ctxStaticSetter.addInitializer(() => log.push("S5"));
  4467        ctxStaticSetter.addInitializer(() => log.push("S6"));
  4468      };
  4469      const staticSetterDec2 = (fn, ctxStaticSetter) => {
  4470        log.push("S1");
  4471        if (!assertEq(() => typeof ctxStaticSetter.addInitializer, "function")) return;
  4472        ctxStaticSetter.addInitializer(() => log.push("S3"));
  4473        ctxStaticSetter.addInitializer(() => log.push("S4"));
  4474      };
  4475      const accessorDec1 = (target, ctxAccessor) => {
  4476        log.push("a2");
  4477        if (!assertEq(() => typeof ctxAccessor.addInitializer, "function")) return;
  4478        ctxAccessor.addInitializer(() => log.push("a5"));
  4479        ctxAccessor.addInitializer(() => log.push("a6"));
  4480        return { init() {
  4481          log.push("a7");
  4482        } };
  4483      };
  4484      const accessorDec2 = (target, ctxAccessor) => {
  4485        log.push("a1");
  4486        if (!assertEq(() => typeof ctxAccessor.addInitializer, "function")) return;
  4487        ctxAccessor.addInitializer(() => log.push("a3"));
  4488        ctxAccessor.addInitializer(() => log.push("a4"));
  4489        return { init() {
  4490          log.push("a8");
  4491        } };
  4492      };
  4493      const staticAccessorDec1 = (target, ctxStaticAccessor) => {
  4494        log.push("A2");
  4495        if (!assertEq(() => typeof ctxStaticAccessor.addInitializer, "function")) return;
  4496        ctxStaticAccessor.addInitializer(() => log.push("A5"));
  4497        ctxStaticAccessor.addInitializer(() => log.push("A6"));
  4498        return { init() {
  4499          log.push("A7");
  4500        } };
  4501      };
  4502      const staticAccessorDec2 = (target, ctxStaticAccessor) => {
  4503        log.push("A1");
  4504        if (!assertEq(() => typeof ctxStaticAccessor.addInitializer, "function")) return;
  4505        ctxStaticAccessor.addInitializer(() => log.push("A3"));
  4506        ctxStaticAccessor.addInitializer(() => log.push("A4"));
  4507        return { init() {
  4508          log.push("A8");
  4509        } };
  4510      };
  4511      log.push("start");
  4512      _Foo_decorators = [classDec1, classDec2];
  4513      class Foo2 extends (_a = (log.push("extends"), Object), _method_dec2 = [methodDec1, methodDec2], _method_dec = [staticMethodDec1, staticMethodDec2], _field_dec2 = [fieldDec1, fieldDec2], _field_dec = [staticFieldDec1, staticFieldDec2], _getter_dec2 = [getterDec1, getterDec2], _getter_dec = [staticGetterDec1, staticGetterDec2], _setter_dec2 = [setterDec1, setterDec2], _setter_dec = [staticSetterDec1, staticSetterDec2], _accessor_dec2 = [accessorDec1, accessorDec2], _accessor_dec = [staticAccessorDec1, staticAccessorDec2], _a) {
  4514        constructor() {
  4515          log.push("ctor:start");
  4516          super();
  4517          __runInitializers(_init, 5, this);
  4518          __publicField(this, "field", __runInitializers(_init, 20, this)), __runInitializers(_init, 23, this);
  4519          __privateAdd(this, _accessor, __runInitializers(_init, 12, this)), __runInitializers(_init, 15, this);
  4520          log.push("ctor:end");
  4521        }
  4522        method() {
  4523        }
  4524        static method() {
  4525        }
  4526        get getter() {
  4527          return;
  4528        }
  4529        static get getter() {
  4530          return;
  4531        }
  4532        set setter(x) {
  4533        }
  4534        static set setter(x) {
  4535        }
  4536      }
  4537      _init = __decoratorStart(_a);
  4538      _accessor = new WeakMap();
  4539      _accessor2 = new WeakMap();
  4540      __decorateElement(_init, 9, "method", _method_dec, Foo2);
  4541      __decorateElement(_init, 10, "getter", _getter_dec, Foo2);
  4542      __decorateElement(_init, 11, "setter", _setter_dec, Foo2);
  4543      __decorateElement(_init, 12, "accessor", _accessor_dec, Foo2, _accessor2);
  4544      __decorateElement(_init, 1, "method", _method_dec2, Foo2);
  4545      __decorateElement(_init, 2, "getter", _getter_dec2, Foo2);
  4546      __decorateElement(_init, 3, "setter", _setter_dec2, Foo2);
  4547      __decorateElement(_init, 4, "accessor", _accessor_dec2, Foo2, _accessor);
  4548      __decorateElement(_init, 13, "field", _field_dec, Foo2);
  4549      __decorateElement(_init, 5, "field", _field_dec2, Foo2);
  4550      Foo2 = __decorateElement(_init, 0, "Foo", _Foo_decorators, Foo2);
  4551      __runInitializers(_init, 3, Foo2);
  4552      log.push("static:start");
  4553      __publicField(Foo2, "field", __runInitializers(_init, 16, Foo2)), __runInitializers(_init, 19, Foo2);
  4554      __privateAdd(Foo2, _accessor2, __runInitializers(_init, 8, Foo2)), __runInitializers(_init, 11, Foo2);
  4555      log.push("static:end");
  4556      __runInitializers(_init, 1, Foo2);
  4557      log.push("after");
  4558      new Foo2();
  4559      log.push("end");
  4560      assertEq(() => log + "", "start,extends,M1,M2,G1,G2,S1,S2,A1,A2,m1,m2,g1,g2,s1,s2,a1,a2,F1,F2,f1,f2,c1,c2,M3,M4,M5,M6,G3,G4,G5,G6,S3,S4,S5,S6,static:start,F7,F8,F3,F4,F5,F6,A7,A8,A3,A4,A5,A6,static:end,c3,c4,c5,c6,after,ctor:start,m3,m4,m5,m6,g3,g4,g5,g6,s3,s4,s5,s6,f7,f8,f3,f4,f5,f6,a7,a8,a3,a4,a5,a6,ctor:end,end");
  4561    },
  4562    "Initializer order (public members, class expression)": () => {
  4563      var _accessor_dec, _accessor_dec2, _setter_dec, _setter_dec2, _getter_dec, _getter_dec2, _field_dec, _field_dec2, _method_dec, _method_dec2, _a, _Foo_decorators, _init, _b, _accessor, _accessor2;
  4564      const log = [];
  4565      const classDec1 = (cls, ctxClass) => {
  4566        log.push("c2");
  4567        if (!assertEq(() => typeof ctxClass.addInitializer, "function")) return;
  4568        ctxClass.addInitializer(() => log.push("c5"));
  4569        ctxClass.addInitializer(() => log.push("c6"));
  4570      };
  4571      const classDec2 = (cls, ctxClass) => {
  4572        log.push("c1");
  4573        if (!assertEq(() => typeof ctxClass.addInitializer, "function")) return;
  4574        ctxClass.addInitializer(() => log.push("c3"));
  4575        ctxClass.addInitializer(() => log.push("c4"));
  4576      };
  4577      const methodDec1 = (fn, ctxMethod) => {
  4578        log.push("m2");
  4579        if (!assertEq(() => typeof ctxMethod.addInitializer, "function")) return;
  4580        ctxMethod.addInitializer(() => log.push("m5"));
  4581        ctxMethod.addInitializer(() => log.push("m6"));
  4582      };
  4583      const methodDec2 = (fn, ctxMethod) => {
  4584        log.push("m1");
  4585        if (!assertEq(() => typeof ctxMethod.addInitializer, "function")) return;
  4586        ctxMethod.addInitializer(() => log.push("m3"));
  4587        ctxMethod.addInitializer(() => log.push("m4"));
  4588      };
  4589      const staticMethodDec1 = (fn, ctxStaticMethod) => {
  4590        log.push("M2");
  4591        if (!assertEq(() => typeof ctxStaticMethod.addInitializer, "function")) return;
  4592        ctxStaticMethod.addInitializer(() => log.push("M5"));
  4593        ctxStaticMethod.addInitializer(() => log.push("M6"));
  4594      };
  4595      const staticMethodDec2 = (fn, ctxStaticMethod) => {
  4596        log.push("M1");
  4597        if (!assertEq(() => typeof ctxStaticMethod.addInitializer, "function")) return;
  4598        ctxStaticMethod.addInitializer(() => log.push("M3"));
  4599        ctxStaticMethod.addInitializer(() => log.push("M4"));
  4600      };
  4601      const fieldDec1 = (value, ctxField) => {
  4602        log.push("f2");
  4603        if (!assertEq(() => typeof ctxField.addInitializer, "function")) return;
  4604        ctxField.addInitializer(() => log.push("f5"));
  4605        ctxField.addInitializer(() => log.push("f6"));
  4606        return () => {
  4607          log.push("f7");
  4608        };
  4609      };
  4610      const fieldDec2 = (value, ctxField) => {
  4611        log.push("f1");
  4612        if (!assertEq(() => typeof ctxField.addInitializer, "function")) return;
  4613        ctxField.addInitializer(() => log.push("f3"));
  4614        ctxField.addInitializer(() => log.push("f4"));
  4615        return () => {
  4616          log.push("f8");
  4617        };
  4618      };
  4619      const staticFieldDec1 = (value, ctxStaticField) => {
  4620        log.push("F2");
  4621        if (!assertEq(() => typeof ctxStaticField.addInitializer, "function")) return;
  4622        ctxStaticField.addInitializer(() => log.push("F5"));
  4623        ctxStaticField.addInitializer(() => log.push("F6"));
  4624        return () => {
  4625          log.push("F7");
  4626        };
  4627      };
  4628      const staticFieldDec2 = (value, ctxStaticField) => {
  4629        log.push("F1");
  4630        if (!assertEq(() => typeof ctxStaticField.addInitializer, "function")) return;
  4631        ctxStaticField.addInitializer(() => log.push("F3"));
  4632        ctxStaticField.addInitializer(() => log.push("F4"));
  4633        return () => {
  4634          log.push("F8");
  4635        };
  4636      };
  4637      const getterDec1 = (fn, ctxGetter) => {
  4638        log.push("g2");
  4639        if (!assertEq(() => typeof ctxGetter.addInitializer, "function")) return;
  4640        ctxGetter.addInitializer(() => log.push("g5"));
  4641        ctxGetter.addInitializer(() => log.push("g6"));
  4642      };
  4643      const getterDec2 = (fn, ctxGetter) => {
  4644        log.push("g1");
  4645        if (!assertEq(() => typeof ctxGetter.addInitializer, "function")) return;
  4646        ctxGetter.addInitializer(() => log.push("g3"));
  4647        ctxGetter.addInitializer(() => log.push("g4"));
  4648      };
  4649      const staticGetterDec1 = (fn, ctxStaticGetter) => {
  4650        log.push("G2");
  4651        if (!assertEq(() => typeof ctxStaticGetter.addInitializer, "function")) return;
  4652        ctxStaticGetter.addInitializer(() => log.push("G5"));
  4653        ctxStaticGetter.addInitializer(() => log.push("G6"));
  4654      };
  4655      const staticGetterDec2 = (fn, ctxStaticGetter) => {
  4656        log.push("G1");
  4657        if (!assertEq(() => typeof ctxStaticGetter.addInitializer, "function")) return;
  4658        ctxStaticGetter.addInitializer(() => log.push("G3"));
  4659        ctxStaticGetter.addInitializer(() => log.push("G4"));
  4660      };
  4661      const setterDec1 = (fn, ctxSetter) => {
  4662        log.push("s2");
  4663        if (!assertEq(() => typeof ctxSetter.addInitializer, "function")) return;
  4664        ctxSetter.addInitializer(() => log.push("s5"));
  4665        ctxSetter.addInitializer(() => log.push("s6"));
  4666      };
  4667      const setterDec2 = (fn, ctxSetter) => {
  4668        log.push("s1");
  4669        if (!assertEq(() => typeof ctxSetter.addInitializer, "function")) return;
  4670        ctxSetter.addInitializer(() => log.push("s3"));
  4671        ctxSetter.addInitializer(() => log.push("s4"));
  4672      };
  4673      const staticSetterDec1 = (fn, ctxStaticSetter) => {
  4674        log.push("S2");
  4675        if (!assertEq(() => typeof ctxStaticSetter.addInitializer, "function")) return;
  4676        ctxStaticSetter.addInitializer(() => log.push("S5"));
  4677        ctxStaticSetter.addInitializer(() => log.push("S6"));
  4678      };
  4679      const staticSetterDec2 = (fn, ctxStaticSetter) => {
  4680        log.push("S1");
  4681        if (!assertEq(() => typeof ctxStaticSetter.addInitializer, "function")) return;
  4682        ctxStaticSetter.addInitializer(() => log.push("S3"));
  4683        ctxStaticSetter.addInitializer(() => log.push("S4"));
  4684      };
  4685      const accessorDec1 = (target, ctxAccessor) => {
  4686        log.push("a2");
  4687        if (!assertEq(() => typeof ctxAccessor.addInitializer, "function")) return;
  4688        ctxAccessor.addInitializer(() => log.push("a5"));
  4689        ctxAccessor.addInitializer(() => log.push("a6"));
  4690        return { init() {
  4691          log.push("a7");
  4692        } };
  4693      };
  4694      const accessorDec2 = (target, ctxAccessor) => {
  4695        log.push("a1");
  4696        if (!assertEq(() => typeof ctxAccessor.addInitializer, "function")) return;
  4697        ctxAccessor.addInitializer(() => log.push("a3"));
  4698        ctxAccessor.addInitializer(() => log.push("a4"));
  4699        return { init() {
  4700          log.push("a8");
  4701        } };
  4702      };
  4703      const staticAccessorDec1 = (target, ctxStaticAccessor) => {
  4704        log.push("A2");
  4705        if (!assertEq(() => typeof ctxStaticAccessor.addInitializer, "function")) return;
  4706        ctxStaticAccessor.addInitializer(() => log.push("A5"));
  4707        ctxStaticAccessor.addInitializer(() => log.push("A6"));
  4708        return { init() {
  4709          log.push("A7");
  4710        } };
  4711      };
  4712      const staticAccessorDec2 = (target, ctxStaticAccessor) => {
  4713        log.push("A1");
  4714        if (!assertEq(() => typeof ctxStaticAccessor.addInitializer, "function")) return;
  4715        ctxStaticAccessor.addInitializer(() => log.push("A3"));
  4716        ctxStaticAccessor.addInitializer(() => log.push("A4"));
  4717        return { init() {
  4718          log.push("A8");
  4719        } };
  4720      };
  4721      log.push("start");
  4722      const Foo2 = (_Foo_decorators = [classDec1, classDec2], _b = class extends (_a = (log.push("extends"), Object), _method_dec2 = [methodDec1, methodDec2], _method_dec = [staticMethodDec1, staticMethodDec2], _field_dec2 = [fieldDec1, fieldDec2], _field_dec = [staticFieldDec1, staticFieldDec2], _getter_dec2 = [getterDec1, getterDec2], _getter_dec = [staticGetterDec1, staticGetterDec2], _setter_dec2 = [setterDec1, setterDec2], _setter_dec = [staticSetterDec1, staticSetterDec2], _accessor_dec2 = [accessorDec1, accessorDec2], _accessor_dec = [staticAccessorDec1, staticAccessorDec2], _a) {
  4723        constructor() {
  4724          log.push("ctor:start");
  4725          super();
  4726          __runInitializers(_init, 5, this);
  4727          __publicField(this, "field", __runInitializers(_init, 20, this)), __runInitializers(_init, 23, this);
  4728          __privateAdd(this, _accessor, __runInitializers(_init, 12, this)), __runInitializers(_init, 15, this);
  4729          log.push("ctor:end");
  4730        }
  4731        method() {
  4732        }
  4733        static method() {
  4734        }
  4735        get getter() {
  4736          return;
  4737        }
  4738        static get getter() {
  4739          return;
  4740        }
  4741        set setter(x) {
  4742        }
  4743        static set setter(x) {
  4744        }
  4745      }, _init = __decoratorStart(_a), _accessor = new WeakMap(), _accessor2 = new WeakMap(), __decorateElement(_init, 9, "method", _method_dec, _b), __decorateElement(_init, 10, "getter", _getter_dec, _b), __decorateElement(_init, 11, "setter", _setter_dec, _b), __decorateElement(_init, 12, "accessor", _accessor_dec, _b, _accessor2), __decorateElement(_init, 1, "method", _method_dec2, _b), __decorateElement(_init, 2, "getter", _getter_dec2, _b), __decorateElement(_init, 3, "setter", _setter_dec2, _b), __decorateElement(_init, 4, "accessor", _accessor_dec2, _b, _accessor), __decorateElement(_init, 13, "field", _field_dec, _b), __decorateElement(_init, 5, "field", _field_dec2, _b), _b = __decorateElement(_init, 0, "Foo", _Foo_decorators, _b), __runInitializers(_init, 3, _b), log.push("static:start"), __publicField(_b, "field", __runInitializers(_init, 16, _b)), __runInitializers(_init, 19, _b), __privateAdd(_b, _accessor2, __runInitializers(_init, 8, _b)), __runInitializers(_init, 11, _b), log.push("static:end"), __runInitializers(_init, 1, _b), _b);
  4746      log.push("after");
  4747      new Foo2();
  4748      log.push("end");
  4749      assertEq(() => log + "", "start,extends,M1,M2,G1,G2,S1,S2,A1,A2,m1,m2,g1,g2,s1,s2,a1,a2,F1,F2,f1,f2,c1,c2,M3,M4,M5,M6,G3,G4,G5,G6,S3,S4,S5,S6,static:start,F7,F8,F3,F4,F5,F6,A7,A8,A3,A4,A5,A6,static:end,c3,c4,c5,c6,after,ctor:start,m3,m4,m5,m6,g3,g4,g5,g6,s3,s4,s5,s6,f7,f8,f3,f4,f5,f6,a7,a8,a3,a4,a5,a6,ctor:end,end");
  4750    },
  4751    "Initializer order (private members, class statement)": () => {
  4752      var _staticAccessor_dec, _accessor_dec, _staticSetter_dec, _setter_dec, _staticGetter_dec, _getter_dec, _staticField_dec, _field_dec, _staticMethod_dec, _method_dec, _a, _Foo_decorators, _init, _Foo_instances, method_fn, _Foo_static, staticMethod_fn, _field, _staticField, getter_get, staticGetter_get, setter_set, staticSetter_set, _accessor, _b, accessor_get, accessor_set, _staticAccessor, _c, staticAccessor_get, staticAccessor_set;
  4753      const log = [];
  4754      const classDec1 = (cls, ctxClass) => {
  4755        log.push("c2");
  4756        if (!assertEq(() => typeof ctxClass.addInitializer, "function")) return;
  4757        ctxClass.addInitializer(() => log.push("c5"));
  4758        ctxClass.addInitializer(() => log.push("c6"));
  4759      };
  4760      const classDec2 = (cls, ctxClass) => {
  4761        log.push("c1");
  4762        if (!assertEq(() => typeof ctxClass.addInitializer, "function")) return;
  4763        ctxClass.addInitializer(() => log.push("c3"));
  4764        ctxClass.addInitializer(() => log.push("c4"));
  4765      };
  4766      const methodDec1 = (fn, ctxMethod) => {
  4767        log.push("m2");
  4768        if (!assertEq(() => typeof ctxMethod.addInitializer, "function")) return;
  4769        ctxMethod.addInitializer(() => log.push("m5"));
  4770        ctxMethod.addInitializer(() => log.push("m6"));
  4771      };
  4772      const methodDec2 = (fn, ctxMethod) => {
  4773        log.push("m1");
  4774        if (!assertEq(() => typeof ctxMethod.addInitializer, "function")) return;
  4775        ctxMethod.addInitializer(() => log.push("m3"));
  4776        ctxMethod.addInitializer(() => log.push("m4"));
  4777      };
  4778      const staticMethodDec1 = (fn, ctxStaticMethod) => {
  4779        log.push("M2");
  4780        if (!assertEq(() => typeof ctxStaticMethod.addInitializer, "function")) return;
  4781        ctxStaticMethod.addInitializer(() => log.push("M5"));
  4782        ctxStaticMethod.addInitializer(() => log.push("M6"));
  4783      };
  4784      const staticMethodDec2 = (fn, ctxStaticMethod) => {
  4785        log.push("M1");
  4786        if (!assertEq(() => typeof ctxStaticMethod.addInitializer, "function")) return;
  4787        ctxStaticMethod.addInitializer(() => log.push("M3"));
  4788        ctxStaticMethod.addInitializer(() => log.push("M4"));
  4789      };
  4790      const fieldDec1 = (value, ctxField) => {
  4791        log.push("f2");
  4792        if (!assertEq(() => typeof ctxField.addInitializer, "function")) return;
  4793        ctxField.addInitializer(() => log.push("f5"));
  4794        ctxField.addInitializer(() => log.push("f6"));
  4795        return () => {
  4796          log.push("f7");
  4797        };
  4798      };
  4799      const fieldDec2 = (value, ctxField) => {
  4800        log.push("f1");
  4801        if (!assertEq(() => typeof ctxField.addInitializer, "function")) return;
  4802        ctxField.addInitializer(() => log.push("f3"));
  4803        ctxField.addInitializer(() => log.push("f4"));
  4804        return () => {
  4805          log.push("f8");
  4806        };
  4807      };
  4808      const staticFieldDec1 = (value, ctxStaticField) => {
  4809        log.push("F2");
  4810        if (!assertEq(() => typeof ctxStaticField.addInitializer, "function")) return;
  4811        ctxStaticField.addInitializer(() => log.push("F5"));
  4812        ctxStaticField.addInitializer(() => log.push("F6"));
  4813        return () => {
  4814          log.push("F7");
  4815        };
  4816      };
  4817      const staticFieldDec2 = (value, ctxStaticField) => {
  4818        log.push("F1");
  4819        if (!assertEq(() => typeof ctxStaticField.addInitializer, "function")) return;
  4820        ctxStaticField.addInitializer(() => log.push("F3"));
  4821        ctxStaticField.addInitializer(() => log.push("F4"));
  4822        return () => {
  4823          log.push("F8");
  4824        };
  4825      };
  4826      const getterDec1 = (fn, ctxGetter) => {
  4827        log.push("g2");
  4828        if (!assertEq(() => typeof ctxGetter.addInitializer, "function")) return;
  4829        ctxGetter.addInitializer(() => log.push("g5"));
  4830        ctxGetter.addInitializer(() => log.push("g6"));
  4831      };
  4832      const getterDec2 = (fn, ctxGetter) => {
  4833        log.push("g1");
  4834        if (!assertEq(() => typeof ctxGetter.addInitializer, "function")) return;
  4835        ctxGetter.addInitializer(() => log.push("g3"));
  4836        ctxGetter.addInitializer(() => log.push("g4"));
  4837      };
  4838      const staticGetterDec1 = (fn, ctxStaticGetter) => {
  4839        log.push("G2");
  4840        if (!assertEq(() => typeof ctxStaticGetter.addInitializer, "function")) return;
  4841        ctxStaticGetter.addInitializer(() => log.push("G5"));
  4842        ctxStaticGetter.addInitializer(() => log.push("G6"));
  4843      };
  4844      const staticGetterDec2 = (fn, ctxStaticGetter) => {
  4845        log.push("G1");
  4846        if (!assertEq(() => typeof ctxStaticGetter.addInitializer, "function")) return;
  4847        ctxStaticGetter.addInitializer(() => log.push("G3"));
  4848        ctxStaticGetter.addInitializer(() => log.push("G4"));
  4849      };
  4850      const setterDec1 = (fn, ctxSetter) => {
  4851        log.push("s2");
  4852        if (!assertEq(() => typeof ctxSetter.addInitializer, "function")) return;
  4853        ctxSetter.addInitializer(() => log.push("s5"));
  4854        ctxSetter.addInitializer(() => log.push("s6"));
  4855      };
  4856      const setterDec2 = (fn, ctxSetter) => {
  4857        log.push("s1");
  4858        if (!assertEq(() => typeof ctxSetter.addInitializer, "function")) return;
  4859        ctxSetter.addInitializer(() => log.push("s3"));
  4860        ctxSetter.addInitializer(() => log.push("s4"));
  4861      };
  4862      const staticSetterDec1 = (fn, ctxStaticSetter) => {
  4863        log.push("S2");
  4864        if (!assertEq(() => typeof ctxStaticSetter.addInitializer, "function")) return;
  4865        ctxStaticSetter.addInitializer(() => log.push("S5"));
  4866        ctxStaticSetter.addInitializer(() => log.push("S6"));
  4867      };
  4868      const staticSetterDec2 = (fn, ctxStaticSetter) => {
  4869        log.push("S1");
  4870        if (!assertEq(() => typeof ctxStaticSetter.addInitializer, "function")) return;
  4871        ctxStaticSetter.addInitializer(() => log.push("S3"));
  4872        ctxStaticSetter.addInitializer(() => log.push("S4"));
  4873      };
  4874      const accessorDec1 = (target, ctxAccessor) => {
  4875        log.push("a2");
  4876        if (!assertEq(() => typeof ctxAccessor.addInitializer, "function")) return;
  4877        ctxAccessor.addInitializer(() => log.push("a5"));
  4878        ctxAccessor.addInitializer(() => log.push("a6"));
  4879        return { init() {
  4880          log.push("a7");
  4881        } };
  4882      };
  4883      const accessorDec2 = (target, ctxAccessor) => {
  4884        log.push("a1");
  4885        if (!assertEq(() => typeof ctxAccessor.addInitializer, "function")) return;
  4886        ctxAccessor.addInitializer(() => log.push("a3"));
  4887        ctxAccessor.addInitializer(() => log.push("a4"));
  4888        return { init() {
  4889          log.push("a8");
  4890        } };
  4891      };
  4892      const staticAccessorDec1 = (target, ctxStaticAccessor) => {
  4893        log.push("A2");
  4894        if (!assertEq(() => typeof ctxStaticAccessor.addInitializer, "function")) return;
  4895        ctxStaticAccessor.addInitializer(() => log.push("A5"));
  4896        ctxStaticAccessor.addInitializer(() => log.push("A6"));
  4897        return { init() {
  4898          log.push("A7");
  4899        } };
  4900      };
  4901      const staticAccessorDec2 = (target, ctxStaticAccessor) => {
  4902        log.push("A1");
  4903        if (!assertEq(() => typeof ctxStaticAccessor.addInitializer, "function")) return;
  4904        ctxStaticAccessor.addInitializer(() => log.push("A3"));
  4905        ctxStaticAccessor.addInitializer(() => log.push("A4"));
  4906        return { init() {
  4907          log.push("A8");
  4908        } };
  4909      };
  4910      log.push("start");
  4911      _Foo_decorators = [classDec1, classDec2];
  4912      class Foo2 extends (_a = (log.push("extends"), Object), _method_dec = [methodDec1, methodDec2], _staticMethod_dec = [staticMethodDec1, staticMethodDec2], _field_dec = [fieldDec1, fieldDec2], _staticField_dec = [staticFieldDec1, staticFieldDec2], _getter_dec = [getterDec1, getterDec2], _staticGetter_dec = [staticGetterDec1, staticGetterDec2], _setter_dec = [setterDec1, setterDec2], _staticSetter_dec = [staticSetterDec1, staticSetterDec2], _accessor_dec = [accessorDec1, accessorDec2], _staticAccessor_dec = [staticAccessorDec1, staticAccessorDec2], _a) {
  4913        constructor() {
  4914          log.push("ctor:start");
  4915          super();
  4916          __runInitializers(_init, 5, this);
  4917          __privateAdd(this, _Foo_instances);
  4918          __privateAdd(this, _field, __runInitializers(_init, 20, this)), __runInitializers(_init, 23, this);
  4919          __privateAdd(this, _accessor, __runInitializers(_init, 12, this)), __runInitializers(_init, 15, this);
  4920          log.push("ctor:end");
  4921        }
  4922      }
  4923      _init = __decoratorStart(_a);
  4924      _Foo_instances = new WeakSet();
  4925      method_fn = function() {
  4926      };
  4927      _Foo_static = new WeakSet();
  4928      staticMethod_fn = function() {
  4929      };
  4930      _field = new WeakMap();
  4931      _staticField = new WeakMap();
  4932      getter_get = function() {
  4933        return;
  4934      };
  4935      staticGetter_get = function() {
  4936        return;
  4937      };
  4938      setter_set = function(x) {
  4939      };
  4940      staticSetter_set = function(x) {
  4941      };
  4942      _accessor = new WeakMap();
  4943      _staticAccessor = new WeakMap();
  4944      staticMethod_fn = __decorateElement(_init, 25, "#staticMethod", _staticMethod_dec, _Foo_static, staticMethod_fn);
  4945      staticGetter_get = __decorateElement(_init, 26, "#staticGetter", _staticGetter_dec, _Foo_static, staticGetter_get);
  4946      staticSetter_set = __decorateElement(_init, 27, "#staticSetter", _staticSetter_dec, _Foo_static, staticSetter_set);
  4947      _c = __decorateElement(_init, 28, "#staticAccessor", _staticAccessor_dec, _Foo_static, _staticAccessor), staticAccessor_get = _c.get, staticAccessor_set = _c.set;
  4948      method_fn = __decorateElement(_init, 17, "#method", _method_dec, _Foo_instances, method_fn);
  4949      getter_get = __decorateElement(_init, 18, "#getter", _getter_dec, _Foo_instances, getter_get);
  4950      setter_set = __decorateElement(_init, 19, "#setter", _setter_dec, _Foo_instances, setter_set);
  4951      _b = __decorateElement(_init, 20, "#accessor", _accessor_dec, _Foo_instances, _accessor), accessor_get = _b.get, accessor_set = _b.set;
  4952      __decorateElement(_init, 29, "#staticField", _staticField_dec, _staticField);
  4953      __decorateElement(_init, 21, "#field", _field_dec, _field);
  4954      __privateAdd(Foo2, _Foo_static);
  4955      Foo2 = __decorateElement(_init, 0, "Foo", _Foo_decorators, Foo2);
  4956      __runInitializers(_init, 3, Foo2);
  4957      log.push("static:start");
  4958      __privateAdd(Foo2, _staticField, __runInitializers(_init, 16, Foo2)), __runInitializers(_init, 19, Foo2);
  4959      __privateAdd(Foo2, _staticAccessor, __runInitializers(_init, 8, Foo2)), __runInitializers(_init, 11, Foo2);
  4960      log.push("static:end");
  4961      __runInitializers(_init, 1, Foo2);
  4962      log.push("after");
  4963      new Foo2();
  4964      log.push("end");
  4965      assertEq(() => log + "", "start,extends,M1,M2,G1,G2,S1,S2,A1,A2,m1,m2,g1,g2,s1,s2,a1,a2,F1,F2,f1,f2,c1,c2,M3,M4,M5,M6,G3,G4,G5,G6,S3,S4,S5,S6,static:start,F7,F8,F3,F4,F5,F6,A7,A8,A3,A4,A5,A6,static:end,c3,c4,c5,c6,after,ctor:start,m3,m4,m5,m6,g3,g4,g5,g6,s3,s4,s5,s6,f7,f8,f3,f4,f5,f6,a7,a8,a3,a4,a5,a6,ctor:end,end");
  4966    },
  4967    "Initializer order (private members, class expression)": () => {
  4968      var _staticAccessor_dec, _accessor_dec, _staticSetter_dec, _setter_dec, _staticGetter_dec, _getter_dec, _staticField_dec, _field_dec, _staticMethod_dec, _method_dec, _a, _Foo_decorators, _init, _Foo_instances, method_fn, _Foo_static, _b, staticMethod_fn, _field, _staticField, getter_get, staticGetter_get, setter_set, staticSetter_set, _accessor, _c, accessor_get, accessor_set, _staticAccessor, _d, staticAccessor_get, staticAccessor_set;
  4969      const log = [];
  4970      const classDec1 = (cls, ctxClass) => {
  4971        log.push("c2");
  4972        if (!assertEq(() => typeof ctxClass.addInitializer, "function")) return;
  4973        ctxClass.addInitializer(() => log.push("c5"));
  4974        ctxClass.addInitializer(() => log.push("c6"));
  4975      };
  4976      const classDec2 = (cls, ctxClass) => {
  4977        log.push("c1");
  4978        if (!assertEq(() => typeof ctxClass.addInitializer, "function")) return;
  4979        ctxClass.addInitializer(() => log.push("c3"));
  4980        ctxClass.addInitializer(() => log.push("c4"));
  4981      };
  4982      const methodDec1 = (fn, ctxMethod) => {
  4983        log.push("m2");
  4984        if (!assertEq(() => typeof ctxMethod.addInitializer, "function")) return;
  4985        ctxMethod.addInitializer(() => log.push("m5"));
  4986        ctxMethod.addInitializer(() => log.push("m6"));
  4987      };
  4988      const methodDec2 = (fn, ctxMethod) => {
  4989        log.push("m1");
  4990        if (!assertEq(() => typeof ctxMethod.addInitializer, "function")) return;
  4991        ctxMethod.addInitializer(() => log.push("m3"));
  4992        ctxMethod.addInitializer(() => log.push("m4"));
  4993      };
  4994      const staticMethodDec1 = (fn, ctxStaticMethod) => {
  4995        log.push("M2");
  4996        if (!assertEq(() => typeof ctxStaticMethod.addInitializer, "function")) return;
  4997        ctxStaticMethod.addInitializer(() => log.push("M5"));
  4998        ctxStaticMethod.addInitializer(() => log.push("M6"));
  4999      };
  5000      const staticMethodDec2 = (fn, ctxStaticMethod) => {
  5001        log.push("M1");
  5002        if (!assertEq(() => typeof ctxStaticMethod.addInitializer, "function")) return;
  5003        ctxStaticMethod.addInitializer(() => log.push("M3"));
  5004        ctxStaticMethod.addInitializer(() => log.push("M4"));
  5005      };
  5006      const fieldDec1 = (value, ctxField) => {
  5007        log.push("f2");
  5008        if (!assertEq(() => typeof ctxField.addInitializer, "function")) return;
  5009        ctxField.addInitializer(() => log.push("f5"));
  5010        ctxField.addInitializer(() => log.push("f6"));
  5011        return () => {
  5012          log.push("f7");
  5013        };
  5014      };
  5015      const fieldDec2 = (value, ctxField) => {
  5016        log.push("f1");
  5017        if (!assertEq(() => typeof ctxField.addInitializer, "function")) return;
  5018        ctxField.addInitializer(() => log.push("f3"));
  5019        ctxField.addInitializer(() => log.push("f4"));
  5020        return () => {
  5021          log.push("f8");
  5022        };
  5023      };
  5024      const staticFieldDec1 = (value, ctxStaticField) => {
  5025        log.push("F2");
  5026        if (!assertEq(() => typeof ctxStaticField.addInitializer, "function")) return;
  5027        ctxStaticField.addInitializer(() => log.push("F5"));
  5028        ctxStaticField.addInitializer(() => log.push("F6"));
  5029        return () => {
  5030          log.push("F7");
  5031        };
  5032      };
  5033      const staticFieldDec2 = (value, ctxStaticField) => {
  5034        log.push("F1");
  5035        if (!assertEq(() => typeof ctxStaticField.addInitializer, "function")) return;
  5036        ctxStaticField.addInitializer(() => log.push("F3"));
  5037        ctxStaticField.addInitializer(() => log.push("F4"));
  5038        return () => {
  5039          log.push("F8");
  5040        };
  5041      };
  5042      const getterDec1 = (fn, ctxGetter) => {
  5043        log.push("g2");
  5044        if (!assertEq(() => typeof ctxGetter.addInitializer, "function")) return;
  5045        ctxGetter.addInitializer(() => log.push("g5"));
  5046        ctxGetter.addInitializer(() => log.push("g6"));
  5047      };
  5048      const getterDec2 = (fn, ctxGetter) => {
  5049        log.push("g1");
  5050        if (!assertEq(() => typeof ctxGetter.addInitializer, "function")) return;
  5051        ctxGetter.addInitializer(() => log.push("g3"));
  5052        ctxGetter.addInitializer(() => log.push("g4"));
  5053      };
  5054      const staticGetterDec1 = (fn, ctxStaticGetter) => {
  5055        log.push("G2");
  5056        if (!assertEq(() => typeof ctxStaticGetter.addInitializer, "function")) return;
  5057        ctxStaticGetter.addInitializer(() => log.push("G5"));
  5058        ctxStaticGetter.addInitializer(() => log.push("G6"));
  5059      };
  5060      const staticGetterDec2 = (fn, ctxStaticGetter) => {
  5061        log.push("G1");
  5062        if (!assertEq(() => typeof ctxStaticGetter.addInitializer, "function")) return;
  5063        ctxStaticGetter.addInitializer(() => log.push("G3"));
  5064        ctxStaticGetter.addInitializer(() => log.push("G4"));
  5065      };
  5066      const setterDec1 = (fn, ctxSetter) => {
  5067        log.push("s2");
  5068        if (!assertEq(() => typeof ctxSetter.addInitializer, "function")) return;
  5069        ctxSetter.addInitializer(() => log.push("s5"));
  5070        ctxSetter.addInitializer(() => log.push("s6"));
  5071      };
  5072      const setterDec2 = (fn, ctxSetter) => {
  5073        log.push("s1");
  5074        if (!assertEq(() => typeof ctxSetter.addInitializer, "function")) return;
  5075        ctxSetter.addInitializer(() => log.push("s3"));
  5076        ctxSetter.addInitializer(() => log.push("s4"));
  5077      };
  5078      const staticSetterDec1 = (fn, ctxStaticSetter) => {
  5079        log.push("S2");
  5080        if (!assertEq(() => typeof ctxStaticSetter.addInitializer, "function")) return;
  5081        ctxStaticSetter.addInitializer(() => log.push("S5"));
  5082        ctxStaticSetter.addInitializer(() => log.push("S6"));
  5083      };
  5084      const staticSetterDec2 = (fn, ctxStaticSetter) => {
  5085        log.push("S1");
  5086        if (!assertEq(() => typeof ctxStaticSetter.addInitializer, "function")) return;
  5087        ctxStaticSetter.addInitializer(() => log.push("S3"));
  5088        ctxStaticSetter.addInitializer(() => log.push("S4"));
  5089      };
  5090      const accessorDec1 = (target, ctxAccessor) => {
  5091        log.push("a2");
  5092        if (!assertEq(() => typeof ctxAccessor.addInitializer, "function")) return;
  5093        ctxAccessor.addInitializer(() => log.push("a5"));
  5094        ctxAccessor.addInitializer(() => log.push("a6"));
  5095        return { init() {
  5096          log.push("a7");
  5097        } };
  5098      };
  5099      const accessorDec2 = (target, ctxAccessor) => {
  5100        log.push("a1");
  5101        if (!assertEq(() => typeof ctxAccessor.addInitializer, "function")) return;
  5102        ctxAccessor.addInitializer(() => log.push("a3"));
  5103        ctxAccessor.addInitializer(() => log.push("a4"));
  5104        return { init() {
  5105          log.push("a8");
  5106        } };
  5107      };
  5108      const staticAccessorDec1 = (target, ctxStaticAccessor) => {
  5109        log.push("A2");
  5110        if (!assertEq(() => typeof ctxStaticAccessor.addInitializer, "function")) return;
  5111        ctxStaticAccessor.addInitializer(() => log.push("A5"));
  5112        ctxStaticAccessor.addInitializer(() => log.push("A6"));
  5113        return { init() {
  5114          log.push("A7");
  5115        } };
  5116      };
  5117      const staticAccessorDec2 = (target, ctxStaticAccessor) => {
  5118        log.push("A1");
  5119        if (!assertEq(() => typeof ctxStaticAccessor.addInitializer, "function")) return;
  5120        ctxStaticAccessor.addInitializer(() => log.push("A3"));
  5121        ctxStaticAccessor.addInitializer(() => log.push("A4"));
  5122        return { init() {
  5123          log.push("A8");
  5124        } };
  5125      };
  5126      log.push("start");
  5127      const Foo2 = (_Foo_decorators = [classDec1, classDec2], _b = class extends (_a = (log.push("extends"), Object), _method_dec = [methodDec1, methodDec2], _staticMethod_dec = [staticMethodDec1, staticMethodDec2], _field_dec = [fieldDec1, fieldDec2], _staticField_dec = [staticFieldDec1, staticFieldDec2], _getter_dec = [getterDec1, getterDec2], _staticGetter_dec = [staticGetterDec1, staticGetterDec2], _setter_dec = [setterDec1, setterDec2], _staticSetter_dec = [staticSetterDec1, staticSetterDec2], _accessor_dec = [accessorDec1, accessorDec2], _staticAccessor_dec = [staticAccessorDec1, staticAccessorDec2], _a) {
  5128        constructor() {
  5129          log.push("ctor:start");
  5130          super();
  5131          __runInitializers(_init, 5, this);
  5132          __privateAdd(this, _Foo_instances);
  5133          __privateAdd(this, _field, __runInitializers(_init, 20, this)), __runInitializers(_init, 23, this);
  5134          __privateAdd(this, _accessor, __runInitializers(_init, 12, this)), __runInitializers(_init, 15, this);
  5135          log.push("ctor:end");
  5136        }
  5137      }, _init = __decoratorStart(_a), _Foo_instances = new WeakSet(), method_fn = function() {
  5138      }, _Foo_static = new WeakSet(), staticMethod_fn = function() {
  5139      }, _field = new WeakMap(), _staticField = new WeakMap(), getter_get = function() {
  5140        return;
  5141      }, staticGetter_get = function() {
  5142        return;
  5143      }, setter_set = function(x) {
  5144      }, staticSetter_set = function(x) {
  5145      }, _accessor = new WeakMap(), _staticAccessor = new WeakMap(), staticMethod_fn = __decorateElement(_init, 25, "#staticMethod", _staticMethod_dec, _Foo_static, staticMethod_fn), staticGetter_get = __decorateElement(_init, 26, "#staticGetter", _staticGetter_dec, _Foo_static, staticGetter_get), staticSetter_set = __decorateElement(_init, 27, "#staticSetter", _staticSetter_dec, _Foo_static, staticSetter_set), _d = __decorateElement(_init, 28, "#staticAccessor", _staticAccessor_dec, _Foo_static, _staticAccessor), staticAccessor_get = _d.get, staticAccessor_set = _d.set, method_fn = __decorateElement(_init, 17, "#method", _method_dec, _Foo_instances, method_fn), getter_get = __decorateElement(_init, 18, "#getter", _getter_dec, _Foo_instances, getter_get), setter_set = __decorateElement(_init, 19, "#setter", _setter_dec, _Foo_instances, setter_set), _c = __decorateElement(_init, 20, "#accessor", _accessor_dec, _Foo_instances, _accessor), accessor_get = _c.get, accessor_set = _c.set, __decorateElement(_init, 29, "#staticField", _staticField_dec, _staticField), __decorateElement(_init, 21, "#field", _field_dec, _field), __privateAdd(_b, _Foo_static), _b = __decorateElement(_init, 0, "Foo", _Foo_decorators, _b), __runInitializers(_init, 3, _b), log.push("static:start"), __privateAdd(_b, _staticField, __runInitializers(_init, 16, _b)), __runInitializers(_init, 19, _b), __privateAdd(_b, _staticAccessor, __runInitializers(_init, 8, _b)), __runInitializers(_init, 11, _b), log.push("static:end"), __runInitializers(_init, 1, _b), _b);
  5146      log.push("after");
  5147      new Foo2();
  5148      log.push("end");
  5149      assertEq(() => log + "", "start,extends,M1,M2,G1,G2,S1,S2,A1,A2,m1,m2,g1,g2,s1,s2,a1,a2,F1,F2,f1,f2,c1,c2,M3,M4,M5,M6,G3,G4,G5,G6,S3,S4,S5,S6,static:start,F7,F8,F3,F4,F5,F6,A7,A8,A3,A4,A5,A6,static:end,c3,c4,c5,c6,after,ctor:start,m3,m4,m5,m6,g3,g4,g5,g6,s3,s4,s5,s6,f7,f8,f3,f4,f5,f6,a7,a8,a3,a4,a5,a6,ctor:end,end");
  5150    }
  5151  };
  5152  function prettyPrint(x) {
  5153    if (x && x.prototype && x.prototype.constructor === x) return "class";
  5154    if (typeof x === "string") return JSON.stringify(x);
  5155    return x;
  5156  }
  5157  function assertEq(callback, expected) {
  5158    let details;
  5159    try {
  5160      let x = callback();
  5161      if (x === expected) return true;
  5162      details = `  Expected: ${prettyPrint(expected)}
  5163    Observed: ${prettyPrint(x)}`;
  5164    } catch (error) {
  5165      details = `  Throws: ${error}`;
  5166    }
  5167    const code = callback.toString().replace(/^\(\) => /, "").replace(/\s+/g, " ");
  5168    console.log(`\u274C ${testName}
  5169    Code: ${code}
  5170  ${details}
  5171  `);
  5172    failures++;
  5173    return false;
  5174  }
  5175  function assertThrows(callback, expected) {
  5176    let details;
  5177    try {
  5178      let x = callback();
  5179      details = `  Expected: throws instanceof ${expected.name}
  5180    Observed: returns ${prettyPrint(x)}`;
  5181    } catch (error) {
  5182      if (error instanceof expected) return true;
  5183      details = `  Expected: throws instanceof ${expected.name}
  5184    Observed: throws ${error}`;
  5185    }
  5186    const code = callback.toString().replace(/^\(\) => /, "").replace(/\s+/g, " ");
  5187    console.log(`\u274C ${testName}
  5188    Code: ${code}
  5189  ${details}
  5190  `);
  5191    failures++;
  5192    return false;
  5193  }
  5194  let testName;
  5195  let failures = 0;
  5196  async function run() {
  5197    for (const [name, test] of Object.entries(tests)) {
  5198      testName = name;
  5199      try {
  5200        await test();
  5201      } catch (err) {
  5202        console.log(`\u274C ${name}
  5203    Throws: ${err}
  5204  `);
  5205        failures++;
  5206      }
  5207    }
  5208    if (failures > 0) {
  5209      console.log(`\u274C ${failures} checks failed`);
  5210    } else {
  5211      console.log(`\u2705 All checks passed`);
  5212    }
  5213  }
  5214  const promise = run();