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();