MIRROR: javascript for 馃悳's, a tiny runtime with big ambitions
1
fork

Configure Feed

Select the types of activity you want to include in your feed.

at master 97 lines 2.2 kB view raw
1function assert(condition, message) { 2 if (!condition) throw new Error(message); 3} 4 5function assertEq(actual, expected, message) { 6 if (actual !== expected) { 7 throw new Error(`${message}: expected ${expected}, got ${actual}`); 8 } 9} 10 11function runNewTargetHot() { 12 function readNewTarget() { 13 return new.target; 14 } 15 16 let last = null; 17 for (let i = 0; i < 600; i++) { 18 last = readNewTarget(); 19 } 20 return last; 21} 22 23class BaseBox { 24 static value = 7; 25} 26 27class DerivedBox extends BaseBox { 28 static readSuperValue() { 29 return super.value; 30 } 31} 32 33const superReader = DerivedBox.readSuperValue; 34 35const staticValueSymbol = Symbol("static-value"); 36 37class SymbolBaseBox { 38 static [staticValueSymbol] = 11; 39} 40 41class SymbolDerivedBox extends SymbolBaseBox { 42 static readSuperSymbol() { 43 return super[staticValueSymbol]; 44 } 45} 46 47const superSymbolReader = SymbolDerivedBox.readSuperSymbol; 48 49class ConstructorBase { 50 get value() { 51 return this.tag; 52 } 53} 54 55class ConstructorDerived extends ConstructorBase { 56 constructor() { 57 super(); 58 this.tag = "ctor-super"; 59 this.fromCtor = super.value; 60 } 61} 62 63function runSuperHot() { 64 let last = 0; 65 for (let i = 0; i < 600; i++) { 66 last = superReader(); 67 } 68 return last; 69} 70 71function runSuperSymbolHot() { 72 let last = 0; 73 for (let i = 0; i < 600; i++) { 74 last = superSymbolReader(); 75 } 76 return last; 77} 78 79const isAnt = typeof process === "object" 80 && process !== null 81 && typeof process.versions === "object" 82 && process.versions !== null 83 && typeof process.versions.ant === "string"; 84 85assertEq(runNewTargetHot(), undefined, "hot inline helper preserves new.target"); 86assertEq(superReader(), 7, "extracted static super value lookup"); 87assertEq(runSuperHot(), 7, "hot direct call preserves super value lookup"); 88assertEq(superSymbolReader(), 11, "extracted static super symbol lookup"); 89assertEq(runSuperSymbolHot(), 11, "hot direct call preserves super symbol lookup"); 90assertEq(new ConstructorDerived().fromCtor, "ctor-super", "constructor super getter lookup"); 91 92if (isAnt) { 93 const antOnly = await import("./test_jit_inline_special_obj_import.mjs"); 94 await antOnly.verifyImportBinding(assert, assertEq); 95} 96 97console.log("OK: test_jit_inline_special_obj");