Skip to content

Commit 110f950

Browse files
authored
Merge pull request #12 from pzuraq/call-field-accessor-initializers-after-definition
Call field and accessor extra initializer after field/accessor definition on the instance
2 parents c4465e4 + 967241b commit 110f950

File tree

1 file changed

+33
-18
lines changed

1 file changed

+33
-18
lines changed

spec.html

Lines changed: 33 additions & 18 deletions
Original file line numberDiff line numberDiff line change
@@ -4657,14 +4657,9 @@ <h1>The DecoratorDefinition Record Specification Type</h1>
46574657
are defined by
46584658
<emu-xref href="#table-decoratordefinition-fields"></emu-xref>. Such
46594659
values are referred to as
4660-
<dfn variants="DecoratorDefinition Record"
4661-
>DecoratorDefinition Records</dfn
4662-
>.
4660+
<dfn variants="DecoratorDefinition Record">DecoratorDefinition Records</dfn>.
46634661
</p>
4664-
<emu-table
4665-
id="table-decoratordefinition-fields"
4666-
caption="DecoratorDefinition Record Fields"
4667-
>
4662+
<emu-table id="table-decoratordefinition-fields" caption="DecoratorDefinition Record Fields">
46684663
<table>
46694664
<tr>
46704665
<th>Field Name</th>
@@ -4819,6 +4814,20 @@ <h1>The ClassElementDefinition Record Specification Type</h1>
48194814
The initializers of the field or accessor, if any.
48204815
</td>
48214816
</tr>
4817+
<tr>
4818+
<td>
4819+
[[ExtraInitializers]]
4820+
</td>
4821+
<td>
4822+
~field~ and ~accessor~
4823+
</td>
4824+
<td>
4825+
a List of function objects
4826+
</td>
4827+
<td>
4828+
The extra initializers of the field or accessor, if any.
4829+
</td>
4830+
</tr>
48224831
</table>
48234832
</emu-table>
48244833
</emu-clause>
@@ -6880,6 +6889,8 @@ <h1>
68806889
1. Else,
68816890
1. Assert: IsPropertyKey(_fieldName_) is *true*.
68826891
1. Perform ? CreateDataPropertyOrThrow(_receiver_, _fieldName_, _initValue_).
6892+
1. For each element _initializer_ of _elementRecord_.[[ExtraInitializers]], do
6893+
1. Perform ? Call(_initializer_, _receiver_).
68836894
1. Return ~unused~.
68846895
</emu-alg>
68856896
</emu-clause>
@@ -6889,7 +6900,7 @@ <h1>
68896900
InitializeInstanceElements (
68906901
_O_: an Object,
68916902
_constructor_: an ECMAScript function object,
6892-
): either a normal completion containing ~unused~ or a throw completion
6903+
): either a normal completion containing ~unused~ or an abrupt completion
68936904
</h1>
68946905
<dl class="header">
68956906
</dl>
@@ -25031,10 +25042,11 @@ <h1>
2503125042
<emu-alg>
2503225043
1. Let _name_ be ? Evaluation of |ClassElementName|.
2503325044
1. Let _initializers_ be a new empty List.
25045+
1. Let _extraInitializers_ be a new empty List.
2503425046
1. If |Initializer?| is present, then
2503525047
1. Let _initializer_ be CreateFieldInitializerFunction(_homeObject_, _name_, |Initializer|).
2503625048
1. Append _initializer_ to _initializers_.
25037-
1. Return ClassElementDefinition Record { [[Key]]: _name_, [[Kind]]: ~field~, [[Initializers]]: _initializers_, [[Decorators]]: ~empty~ }.
25049+
1. Return ClassElementDefinition Record { [[Key]]: _name_, [[Kind]]: ~field~, [[Initializers]]: _initializers_, [[ExtraInitializers]]: _extraInitializers_, [[Decorators]]: ~empty~ }.
2503825050
</emu-alg>
2503925051
<emu-grammar>
2504025052
FieldDefinition : `accessor` ClassElementName Initializer?
@@ -25047,13 +25059,14 @@ <h1>
2504725059
1. Let _getter_ be MakeAutoAccessorGetter(_homeObject_, _name_, _privateStateName_).
2504825060
1. Let _setter_ be MakeAutoAccessorSetter(_homeObject_, _name_, _privateStateName_).
2504925061
1. Let _initializers_ be a new empty List.
25062+
1. Let _extraInitializers_ be a new empty List.
2505025063
1. If |Initializer?| is present, then
2505125064
1. Let _initializer_ be CreateFieldInitializerFunction(_homeObject_, _name_, |Initializer|).
2505225065
1. Append _initializer_ to _initializers_.
2505325066
1. If _name_ is not a Private Name, then
2505425067
1. Let _desc_ be the PropertyDescriptor { [[Get]]: _getter_, [[Set]]: _setter_, [[Enumerable]]: *true*, [[Configurable]]: *true* }.
2505525068
1. Perform ? DefinePropertyOrThrow(_homeObject_, _name_, _desc_).
25056-
1. Return ClassElementDefinition Record { [[Key]]: _name_, [[Kind]]: ~accessor~, [[Get]]: _getter_, [[Set]]: _setter_, [[BackingStorageKey]]: _privateStateName_, [[Initializers]]: _initializers_, [[Decorators]]: ~empty~ }.
25069+
1. Return ClassElementDefinition Record { [[Key]]: _name_, [[Kind]]: ~accessor~, [[Get]]: _getter_, [[Set]]: _setter_, [[BackingStorageKey]]: _privateStateName_, [[Initializers]]: _initializers_, [[ExtraInitializers]]: _extraInitializers_, [[Decorators]]: ~empty~ }.
2505725070
</emu-alg>
2505825071
<emu-note>
2505925072
The function created for _initializer_ is never directly accessible to ECMAScript code.
@@ -25238,34 +25251,36 @@ <h1>
2523825251
1. Assert: _element_ is a ClassStaticBlockDefinition Record.
2523925252
1. Append _element_ to _staticElements_.
2524025253
1. Set the running execution context's LexicalEnvironment to _env_.
25241-
1. Let _instanceExtraInitializers_ be a new empty List.
25242-
1. Let _staticExtraInitializers_ be a new empty List.
25254+
1. Let _instanceMethodExtraInitializers_ be a new empty List.
25255+
1. Let _staticMethodExtraInitializers_ be a new empty List.
2524325256
1. For each element _e_ of _staticElements_, do
2524425257
1. If _e_ is a ClassElementDefinition Record and _e_.[[Kind]] is not ~field~, then
25245-
1. Let _result_ be Completion(ApplyDecoratorsAndDefineMethod(_F_, _e_, _staticExtraInitializers_, *true*)).
25258+
1. If _e_.[[Kind]] is ~accessor~, let _extraInitializers_ be _e_.[[ExtraInitializers]]; otherwise, let _extraInitializers_ be _staticMethodExtraInitializers_.
25259+
1. Let _result_ be Completion(ApplyDecoratorsAndDefineMethod(_F_, _e_, _extraInitializers_, *true*)).
2524625260
1. If _result_ is an abrupt completion, then
2524725261
1. Set the running execution context's PrivateEnvironment to _outerPrivateEnvironment_.
2524825262
1. Return ? _result_.
2524925263
1. For each element _e_ of _instanceElements_, do
2525025264
1. If _e_.[[Kind]] is not ~field~, then
25251-
1. Let _result_ be Completion(ApplyDecoratorsAndDefineMethod(_proto_, _e_, _instanceExtraInitializers_, *true*)).
25265+
1. If _e_.[[Kind]] is ~accessor~, let _extraInitializers_ be _e_.[[ExtraInitializers]]; otherwise, let _extraInitializers_ be _instanceMethodExtraInitializers_.
25266+
1. Let _result_ be Completion(ApplyDecoratorsAndDefineMethod(_proto_, _e_, _extraInitializers_, *false*)).
2525225267
1. If _result_ is an abrupt completion, then
2525325268
1. Set the running execution context's PrivateEnvironment to _outerPrivateEnvironment_.
2525425269
1. Return ? _result_.
2525525270
1. For each element _e_ of _staticElements_, do
2525625271
1. If _e_.[[Kind]] is ~field~, then
25257-
1. Let _result_ be Completion(ApplyDecoratorsToElementDefinition(_F_, _e_, _staticExtraInitializers_, *true*)).
25272+
1. Let _result_ be Completion(ApplyDecoratorsToElementDefinition(_F_, _e_, _e_.[[ExtraInitializers]], *true*)).
2525825273
1. If _result_ is an abrupt completion, then
2525925274
1. Set the running execution context's PrivateEnvironment to _outerPrivateEnvironment_.
2526025275
1. Return ? _result_.
2526125276
1. For each element _e_ of _instanceElements_, do
2526225277
1. If _e_.[[Kind]] is ~field~, then
25263-
1. Let _result_ be Completion(ApplyDecoratorsToElementDefinition(_proto_, _e_, _instanceExtraInitializers_, *false*)).
25278+
1. Let _result_ be Completion(ApplyDecoratorsToElementDefinition(_proto_, _e_, _e_.[[ExtraInitializers]], *false*)).
2526425279
1. If _result_ is an abrupt completion, then
2526525280
1. Set the running execution context's PrivateEnvironment to _outerPrivateEnvironment_.
2526625281
1. Return ? _result_.
2526725282
1. Set _F_.[[Elements]] to _instanceElements_.
25268-
1. Set _F_.[[Initializers]] to _instanceExtraInitializers_.
25283+
1. Set _F_.[[Initializers]] to _instanceMethodExtraInitializers_.
2526925284
1. Perform ? InitializePrivateMethods(_F_, _staticElements_).
2527025285
1. Let _classExtraInitializers_ be a new empty List.
2527125286
1. Let _newF_ be Completion(ApplyDecoratorsToClassDefinition(_F_, _decorators_, _className_, _classExtraInitializers_)).
@@ -25275,7 +25290,7 @@ <h1>
2527525290
1. Set _F_ to _newF_.[[Value]].
2527625291
1. If _classBinding_ is not *undefined*, then
2527725292
1. Perform _classEnv_.InitializeBinding(_classBinding_, _F_).
25278-
1. For each element _initializer_ of _staticExtraInitializers_, do
25293+
1. For each element _initializer_ of _staticMethodExtraInitializers_, do
2527925294
1. Let _result_ be Completion(Call(_initializer_, _F_)).
2528025295
1. If _result_ is an abrupt completion, then
2528125296
1. Set the running execution context's PrivateEnvironment to _outerPrivateEnvironment_.

0 commit comments

Comments
 (0)