tor-browser

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

script-decl-var-collision.js (2095B)


      1 // Copyright (C) 2016 the V8 project authors. All rights reserved.
      2 // This code is governed by the BSD license found in the LICENSE file.
      3 /*---
      4 esid: sec-globaldeclarationinstantiation
      5 es6id: 15.1.8
      6 description: Var binding collision with existing lexical declaration
      7 info: |
      8  [...]
      9  6. For each name in varNames, do
     10     a. If envRec.HasLexicalDeclaration(name) is true, throw a SyntaxError
     11        exception.
     12 ---*/
     13 
     14 var test262Var;
     15 let test262Let;
     16 const test262Const = null;
     17 class test262Class {}
     18 
     19 $262.evalScript('var test262Var;');
     20 $262.evalScript('function test262Var() {}');
     21 
     22 assert.throws(SyntaxError, function() {
     23  $262.evalScript('var x; var test262Let;');
     24 }, '`var` on `let` binding');
     25 assert.throws(ReferenceError, function() {
     26  x;
     27 }, 'no bindings created (script declaring a `var` on a `let` binding)');
     28 
     29 assert.throws(SyntaxError, function() {
     30  $262.evalScript('var x; var test262Const;');
     31 }, '`var` on `const` binding');
     32 assert.throws(ReferenceError, function() {
     33  x;
     34 }, 'no bindings created (script declaring a `var` on a `const` binding)');
     35 
     36 assert.throws(SyntaxError, function() {
     37  $262.evalScript('var x; var test262Class;');
     38 }, '`var` on `class` binding');
     39 assert.throws(ReferenceError, function() {
     40  x;
     41 }, 'no bindings created (script declaring a `var` on a `class` binding)');
     42 
     43 assert.throws(SyntaxError, function() {
     44  $262.evalScript('var x; function test262Let() {}');
     45 }, 'function on `let` binding');
     46 assert.throws(ReferenceError, function() {
     47  x;
     48 }, 'no bindings created (script declaring a function on a `let` binding)');
     49 
     50 assert.throws(SyntaxError, function() {
     51  $262.evalScript('var x; function test262Const() {}');
     52 }, 'function on `const` binding');
     53 assert.throws(ReferenceError, function() {
     54  x;
     55 }, 'no bindings created (script declaring a function on a `const` binding)');
     56 
     57 assert.throws(SyntaxError, function() {
     58  $262.evalScript('var x; function test262Class() {}');
     59 } , 'function on `class` binding');
     60 assert.throws(ReferenceError, function() {
     61  x;
     62 }, 'no bindings created (script declaring a function on a class binding)');
     63 
     64 reportCompare(0, 0);