tor-browser

The Tor Browser
git clone https://git.dasho.dev/tor-browser.git
Log | Files | Refs | README | LICENSE

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