mirror of
				https://github.com/tc39/test262.git
				synced 2025-10-31 19:53:50 +01:00 
			
		
		
		
	For each test that asserts the behavior of either "direct" or "indirect" eval (but not both), introduce an equivalent test for the opposite case.
		
			
				
	
	
		
			36 lines
		
	
	
		
			1.1 KiB
		
	
	
	
		
			JavaScript
		
	
	
	
	
	
			
		
		
	
	
			36 lines
		
	
	
		
			1.1 KiB
		
	
	
	
		
			JavaScript
		
	
	
	
	
	
| // 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-evaldeclarationinstantiation
 | |
| es6id: 18.2.1.2
 | |
| description: Throws a TypeError if a global variable cannot be defined.
 | |
| info: |
 | |
|   Runtime Semantics: EvalDeclarationInstantiation( body, varEnv, lexEnv, strict)
 | |
| 
 | |
|   ...
 | |
|   10. 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. If varEnvRec is a global Environment Record, then
 | |
|             i. Let vnDefinable be varEnvRec.CanDeclareGlobalVar(vn).
 | |
|             ii. ReturnIfAbrupt(vnDefinable).
 | |
|             iii. If vnDefinable is false, throw TypeError exception.
 | |
|           ...
 | |
| ---*/
 | |
| 
 | |
| var nonExtensible;
 | |
| try {
 | |
|   Object.preventExtensions(this);
 | |
|   nonExtensible = !Object.isExtensible(this);
 | |
| } catch (e) {
 | |
|   nonExtensible = false;
 | |
| }
 | |
| 
 | |
| // Run test if global object is non-extensible.
 | |
| if (nonExtensible) {
 | |
|   assert.throws(TypeError, function() {
 | |
|     (0,eval)("var unlikelyVariableName;");
 | |
|   });
 | |
| }
 |