| // Copyright (C) 2016 the V8 project authors. All rights reserved. |
| // This code is governed by the BSD license found in the LICENSE file. |
| /*--- |
| esid: sec-globaldeclarationinstantiation |
| es6id: 15.1.8 |
| description: > |
| Declaration of variable when there is no corresponding global property and |
| the global object is non-extensible |
| info: | |
| [...] |
| 11. Let declaredVarNames be a new empty List. |
| 12. For each d in varDeclarations, do |
| a. If d is a VariableDeclaration or a ForBinding, then |
| i. For each String vn in the BoundNames of d, do |
| 1. If vn is not an element of declaredFunctionNames, then |
| a. Let vnDefinable be ? envRec.CanDeclareGlobalVar(vn). |
| b. If vnDefinable is false, throw a TypeError exception. |
| c. If vn is not an element of declaredVarNames, then |
| i. Append vn to declaredVarNames. |
| |
| 8.1.1.4.15 CanDeclareGlobalVar |
| |
| 1. Let envRec be the global Environment Record for which the method was |
| invoked. |
| 2. Let ObjRec be envRec.[[ObjectRecord]]. |
| 3. Let globalObject be the binding object for ObjRec. |
| 4. Let hasProperty be ? HasOwnProperty(globalObject, N). |
| 5. If hasProperty is true, return true. |
| 6. Return ? IsExtensible(globalObject). |
| ---*/ |
| |
| var executed = false; |
| |
| Object.preventExtensions(this); |
| |
| assert.throws(TypeError, function() { |
| $262.evalScript('executed = true; var test262;'); |
| }); |
| |
| assert.sameValue(executed, false); |