mirror of
				https://github.com/tc39/test262.git
				synced 2025-10-31 19:53:50 +01:00 
			
		
		
		
	classfields: field definition abrupt completion tests
# Conflicts: # test/language/statements/class/classelementname-abrupt-completion.js # test/language/statements/class/fielddefinition-initializer-abrupt-completion.js # test/language/statements/class/super-fielddefinition-initializer-abrupt-completion.js
This commit is contained in:
		
							parent
							
								
									2f458d164f
								
							
						
					
					
						commit
						5d014bdfba
					
				| @ -0,0 +1,42 @@ | |||||||
|  | // Copyright (C) 2017 Valerie Young. All rights reserved.
 | ||||||
|  | // This code is governed by the BSD license found in the LICENSE file.
 | ||||||
|  | 
 | ||||||
|  | /*--- | ||||||
|  | description: Class definition should error if evaluation of static ClassElementName errors | ||||||
|  | esid: runtime-semantics-class-definition-evaluation | ||||||
|  | info: | | ||||||
|  |   Runtime Semantics: ClassDefinitionEvaluation | ||||||
|  |   ... | ||||||
|  |   27. For each ClassElement e in order from elements | ||||||
|  |     a. If IsStatic of e is false, then | ||||||
|  |         i. Let fields be the result of performing ClassElementEvaluation for e with arguments proto and false. | ||||||
|  |     b. Else, | ||||||
|  |         i. Let fields be the result of performing ClassElementEvaluation for e with arguments F and false. | ||||||
|  |     c. If fields is an abrupt completion, then | ||||||
|  |         i. Set the running execution context's LexicalEnvironment to lex. | ||||||
|  |         ii. Set the running execution context's PrivateNameEnvironment to outerPrivateEnvironment. | ||||||
|  |         iii. Return Completion(status). | ||||||
|  | 
 | ||||||
|  |   Runtime Semantics: ClassElementEvaluation | ||||||
|  |   ... | ||||||
|  |     ClassElement : static FieldDefinition ; | ||||||
|  |       1. Return ClassFieldDefinitionEvaluation of FieldDefinition with parameter true and object. | ||||||
|  | 
 | ||||||
|  |   Runtime Semantics: ClassFieldDefinitionEvaluation | ||||||
|  |   With parameters isStatic and homeObject. | ||||||
|  |     FieldDefinition : ClassElementNameInitializer | ||||||
|  |       1. Let fieldName be the result of evaluating ClassElementName. | ||||||
|  |       2. ReturnIfAbrupt(fieldName). | ||||||
|  | 
 | ||||||
|  | features: [class-fields] | ||||||
|  | ---*/ | ||||||
|  | 
 | ||||||
|  | function f() { | ||||||
|  |   throw new Test262Error(); | ||||||
|  | } | ||||||
|  | 
 | ||||||
|  | assert.throws(Test262Error, function() { | ||||||
|  |   class C { | ||||||
|  |     static [f()] | ||||||
|  |   } | ||||||
|  | }); | ||||||
| @ -0,0 +1,42 @@ | |||||||
|  | // Copyright (C) 2017 Valerie Young. All rights reserved.
 | ||||||
|  | // This code is governed by the BSD license found in the LICENSE file.
 | ||||||
|  | 
 | ||||||
|  | /*--- | ||||||
|  | description: Class construction should error if evaluation of static field initializer errors | ||||||
|  | esid: runtime-semantics-class-definition-evaluation | ||||||
|  | info: | | ||||||
|  |   Runtime Semantics: ClassDefinitionEvaluation | ||||||
|  |   ... | ||||||
|  |   33. Let result be InitializeStaticFields(F). | ||||||
|  |   34. If result is an abrupt completion, then | ||||||
|  |     a. Set the running execution context's LexicalEnvironment to lex. | ||||||
|  |     b. Return Completion(result). | ||||||
|  | 
 | ||||||
|  |   InitializeStaticFields(F) | ||||||
|  |     1. Assert: Type(F) is Object. | ||||||
|  |     2. Assert: F is an ECMAScript function object. | ||||||
|  |     3. Let fieldRecords be the value of F's [[Fields]] internal slot. | ||||||
|  |     4. For each item fieldRecord in order from fieldRecords, | ||||||
|  |       a. If fieldRecord.[[static]] is true, then | ||||||
|  |         i. Perform ? DefineField(F, fieldRecord). | ||||||
|  | 
 | ||||||
|  |   DefineField(receiver, fieldRecord) | ||||||
|  |     1. Assert: Type(receiver) is Object. | ||||||
|  |     2. Assert: fieldRecord is a Record as created by ClassFieldDefinitionEvaluation. | ||||||
|  |     3. Let fieldName be fieldRecord.[[Name]]. | ||||||
|  |     4. Let initializer be fieldRecord.[[Initializer]]. | ||||||
|  |     5. If initializer is not empty, then | ||||||
|  |         a. Let initValue be ? Call(initializer, receiver). | ||||||
|  | 
 | ||||||
|  | features: [class-fields] | ||||||
|  | ---*/ | ||||||
|  | 
 | ||||||
|  | function f() { | ||||||
|  |   throw new Test262Error(); | ||||||
|  | } | ||||||
|  | 
 | ||||||
|  | assert.throws(Test262Error, function() { | ||||||
|  |   class C { | ||||||
|  |     static x = f(); | ||||||
|  |   } | ||||||
|  | }) | ||||||
		Loading…
	
	
			
			x
			
			
		
	
		Reference in New Issue
	
	Block a user