object-shorthand.js (1839B)
1 load(libdir + 'asserts.js'); 2 3 // globals: 4 a = b = get = set = eval = arguments = 10; 5 6 assertEq({arguments}.arguments, 10); 7 8 var o = {a, b: b, get, set: set}; 9 assertEq(o.a, 10); 10 assertEq(o.b, 10); 11 assertEq(o.get, 10); 12 assertEq(o.set, 10); 13 14 var names = ['a', 'get', 'set', 'eval']; 15 // global 16 names.forEach(ident => 17 assertEq(new Function('return {' + ident + '}.' + ident + ';')(), 10)); 18 // local 19 names.forEach(ident => 20 assertEq(new Function('var ' + ident + ' = 20; return {' + ident + '}.' + ident + ';')(), 20)); 21 // scope 22 names.forEach(ident => 23 assertEq(new Function('var ' + ident + ' = 30; return (function () {return {' + ident + '}.' + ident + ';})();')(), 30)); 24 25 var reserved = [ 26 'break', 27 'do', 28 'in', 29 'typeof', 30 'case', 31 'else', 32 'instanceof', 33 'var', 34 'catch', 35 'export', 36 'new', 37 'void', 38 'class', 39 'extends', 40 'return', 41 'while', 42 'const', 43 'finally', 44 'super', 45 'with', 46 'continue', 47 'for', 48 'switch', 49 'debugger', 50 'function', 51 'this', 52 'delete', 53 'import', 54 'try', 55 'enum', 56 'null', 57 'true', 58 'false' 59 ]; 60 61 // non-identifiers should also throw 62 var nonidents = [ 63 '"str"', 64 '0' 65 ]; 66 67 reserved.concat(nonidents).forEach(ident => 68 assertThrowsInstanceOf(() => new Function('return {' + ident + '}'), SyntaxError)); 69 70 var reservedStrict = [ 71 'implements', 72 'interface', 73 'package', 74 'private', 75 'protected', 76 'public', 77 'static', 78 // XXX: according to 12.1.1, these should only be errors in strict code: 79 // see https://bugzilla.mozilla.org/show_bug.cgi?id=1032150 80 //'let', 81 //'yield' 82 ]; 83 84 reservedStrict.forEach(ident => 85 assertEq(new Function('var ' + ident + ' = 10; return {' + ident + '}.' + ident + ';')(), 10)); 86 87 reservedStrict.concat(['let', 'yield']).forEach(ident => 88 assertThrowsInstanceOf(() => new Function('"use strict"; return {' + ident + '}'), SyntaxError));