Skip to content
Snippets Groups Projects
Commit ad12c4f5 authored by Valerie R Young's avatar Valerie R Young
Browse files

classfields: field definition abrupt completion tests

parent 4b4c44cb
No related branches found
No related tags found
No related merge requests found
// 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 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 : FieldDefinition ;
1. Return ClassFieldDefinitionEvaluation of FieldDefinition with parameter false 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 {
[f()]
}
});
// 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 field initializer errors
esid: sec-ecmascript-function-objects-construct-argumentslist-newtarget
info: |
[[Construct]] ( argumentsList, newTarget)
...
8. If kind is "base", then
a. Perform OrdinaryCallBindThis(F, calleeContext, thisArgument).
b. Let result be InitializeInstanceFields(thisArgument, F).
c. If result is an abrupt completion, then
i. Remove calleeContext from execution context stack and restore callerContext as the running execution context.
ii. Return Completion(result).
InitializeInstanceFields ( O, constructor )
1. Assert: Type ( O ) is Object.
2. Assert: Assert constructor is an ECMAScript function object.
3. Let fieldRecords be the value of constructor's [[Fields]] internal slot.
4. For each item fieldRecord in order from fieldRecords,
a. If fieldRecord.[[static]] is false, then
i. Perform ? DefineField(O, 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();
}
class C {
x = f();
}
assert.throws(Test262Error, function() {
new C();
})
// 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()]
}
});
// 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();
}
})
// 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 field initializer in super errors
esid: sec-super-keyword-runtime-semantics-evaluation
info: |
Runtime Semantics: Evaluation
SuperCall : superArguments
1. Let newTarget be GetNewTarget().
2. If newTarget is undefined, throw a ReferenceError exception.
3. Let func be ? GetSuperConstructor().
4. Let argList be ArgumentListEvaluation of Arguments.
5. ReturnIfAbrupt(argList).
6. Let result be ? Construct(func, argList, newTarget).
7. Let thisER be GetThisEnvironment( ).
8. Let F be thisER.[[FunctionObject]].
9. Assert: F is an ECMAScript function object.
10. Perform ? InitializeInstanceFields(result, F).
InitializeInstanceFields ( O, constructor )
1. Assert: Type ( O ) is Object.
2. Assert: Assert constructor is an ECMAScript function object.
3. Let fieldRecords be the value of constructor's [[Fields]] internal slot.
4. For each item fieldRecord in order from fieldRecords,
a. If fieldRecord.[[static]] is false, then
i. Perform ? DefineField(O, 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();
}
class A {
x = f();
}
class C extends A {
constructor() {
super();
}
}
assert.throws(Test262Error, function() {
new C();
})
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment