text: load("1d8ada728956c1a3d52d68d1d4d6dd52.js");
  // Copyright 2016 the V8 project authors. All rights reserved.
  // Use of this source code is governed by a BSD-style license that can be
  // found in the LICENSE file.
  
  
  function doTest(scripts, expectedError) {
    var realm = Realm.create();
  
    for (var i = 0; i < scripts.length - 1; i++) {
      Realm.eval(realm, scripts[i]);
    }
    assertThrows(function() {
      Realm.eval(realm, scripts[scripts.length - 1]);
    }, Realm.eval(realm, expectedError));
  
    Realm.dispose(realm);
  }
  
  var tests = [
    {
      // ES#sec-globaldeclarationinstantiation 5.a:
      // If envRec.HasVarDeclaration(name) is true, throw a SyntaxError
      // exception.
      scripts: [
        "var a;",
        "let a;",
      ],
      expectedError: "SyntaxError",
    },
    {
      // ES#sec-globaldeclarationinstantiation 6.a:
      // If envRec.HasLexicalDeclaration(name) is true, throw a SyntaxError
      // exception.
      scripts: [
        "let a;",
        "var a;",
      ],
      expectedError: "SyntaxError",
    },
    {
      // ES#sec-globaldeclarationinstantiation 5.b:
      // If envRec.HasLexicalDeclaration(name) is true, throw a SyntaxError
      // exception.
      scripts: [
        "let a;",
        "let a;",
      ],
      expectedError: "SyntaxError",
    },
    {
      // ES#sec-evaldeclarationinstantiation 5.a.i.1:
      // If varEnvRec.HasLexicalDeclaration(name) is true, throw a SyntaxError
      // exception.
      scripts: [
        'let a; eval("var a;");',
      ],
      expectedError: "SyntaxError",
    },
    {
      // ES#sec-evaldeclarationinstantiation 5.a.i.1:
      // If varEnvRec.HasLexicalDeclaration(name) is true, throw a SyntaxError
      // exception.
      scripts: [
        'let a; eval("function a() {}");',
      ],
      expectedError: "SyntaxError",
    },
    {
      // ES#sec-evaldeclarationinstantiation 5.d.ii.2.a.i:
      // Throw a SyntaxError exception.
      scripts: [
        '(function() { let a; eval("var a;"); })();',
      ],
      expectedError: "SyntaxError",
    },
    {
      // ES#sec-evaldeclarationinstantiation 5.d.ii.2.a.i:
      // Throw a SyntaxError exception.
      scripts: [
        '(function() { let a; eval("function a() {}"); })();',
      ],
      expectedError: "SyntaxError",
    },
    {
      // ES#sec-globaldeclarationinstantiation 5.d:
      // If hasRestrictedGlobal is true, throw a SyntaxError exception.
      scripts: [
        'let NaN;',
      ],
      expectedError: "SyntaxError",
    },
    {
      // ES#sec-globaldeclarationinstantiation 5.d:
      // If hasRestrictedGlobal is true, throw a SyntaxError exception.
      scripts: [
        'function NaN() {}',
      ],
      expectedError: "SyntaxError",
    },
  
    {
      // ES#sec-evaldeclarationinstantiation 8.a.iv.1.b:
      // If fnDefinable is false, throw a TypeError exception.
      scripts: [
        'eval("function NaN() {}");',
      ],
      expectedError: "TypeError",
    },
    {
      // ES#sec-evaldeclarationinstantiation 8.a.iv.1.b:
      // If fnDefinable is false, throw a TypeError exception.
      scripts: [
        `
          let a;
          try {
            eval("function a() {}");
          } catch (e) {}
          eval("function NaN() {}");
        `,
      ],
      expectedError: "TypeError",
    },
    {
      // ES#sec-evaldeclarationinstantiation 8.a.iv.1.b:
      // If fnDefinable is false, throw a TypeError exception.
      scripts: [
        `
          eval("
            function f() {
              function b() {
                (0, eval)('function NaN() {}');
              }
              b();
            }
            f();
          ");
        `.replace(/"/g, '`'),
      ],
      expectedError: "TypeError",
    },
  ];
  
  tests.forEach(function(test) {
    doTest(test.scripts, test.expectedError);
  });
  