ergonomic-1.js (1363B)
1 class Base { 2 constructor(o) { 3 return o; 4 } 5 } 6 7 class A extends Base { 8 #x = 12; 9 #y = 13; 10 static has(o) { 11 return A.evalStr(o, '#x in o'); 12 } 13 14 static evalStr(o, str) { 15 return eval(str); 16 } 17 } 18 19 var obj = {}; 20 assertEq(A.has(obj), false); 21 new A(obj); 22 assertEq(A.has(obj), true); 23 24 A.evalStr(obj, `#x in o in o`) // 'false' in o 25 26 function assertSyntaxError(functionText) { 27 let threw = false; 28 let exception = undefined; 29 try { 30 A.evalStr({}, functionText) 31 } catch (e) { 32 exception = e; 33 threw = true; 34 } 35 assertEq(threw, true); 36 assertEq(exception instanceof SyntaxError, true); 37 } 38 39 assertSyntaxError(`#x`); 40 assertSyntaxError(`#x == undefined`); 41 assertSyntaxError(`1 + #x in o`) 42 assertSyntaxError(`#z in o`); 43 44 assertSyntaxError(`for (#x in o) { return 1;}`) 45 assertSyntaxError(`!#x in o`) 46 assertSyntaxError(`+#x in o`) 47 assertSyntaxError(`-#x in o`) 48 assertSyntaxError(`~#x in o`) 49 assertSyntaxError(`void #x in o`) 50 assertSyntaxError(`typeof #x in o`) 51 assertSyntaxError(`++#x in o`) 52 assertSyntaxError(`--#x in o`) 53 54 assertSyntaxError(`#x in #y in o`) 55 assertSyntaxError(`{} instanceof #x in o`) 56 assertSyntaxError(`10 > #x in o`) 57 var threw = true 58 try { 59 eval(`class Async { 60 #x; 61 async func(o) { 62 await #x in o; 63 } 64 }`); 65 threw = false; 66 } catch (e) { 67 assertEq(e instanceof SyntaxError, true); 68 } 69 assertEq(threw, true);