-
Notifications
You must be signed in to change notification settings - Fork 472
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
Merge branch 'master' into regexp-match-indices
- Loading branch information
Showing
137 changed files
with
3,069 additions
and
1,615 deletions.
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
|
@@ -236,4 +236,3 @@ WeakSet | |
# object, go here. | ||
|
||
IsHTMLDDA | ||
host-gc-required |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,42 @@ | ||
// Copyright (C) 2019 Caio Lima (Igalia SL). All rights reserved. | ||
// This code is governed by the BSD license found in the LICENSE file. | ||
|
||
/*--- | ||
desc: Anonymous function in field initilizer have length properly set | ||
info: | | ||
Updated Productions | ||
|
||
FieldDefinition : | ||
ClassElementName Initializer_opt | ||
|
||
InitializeInstanceFields ( O, constructor ) | ||
1. Assert: Type ( O ) is Object. | ||
2. Assert: constructor is an ECMAScript function object. | ||
3. Let fields be the value of constructor.[[Fields]]. | ||
4. For each item fieldRecord in order from fields, | ||
a. Perform ? DefineField(O, fieldRecord). | ||
5. Return. | ||
|
||
DefineField(receiver, fieldRecord) | ||
1. Assert: Type(receiver) is Object. | ||
2. Assert: fieldRecord is a Record as created by ClassFieldDefinitionEvaluation. | ||
3. Let name be fieldRecord.[[Name]]. | ||
4. Let initializer be fieldRecord.[[Initializer]]. | ||
5. If initializer is not empty, then | ||
a. Let initValue be ? Call(initializer, receiver). | ||
... | ||
template: default | ||
features: [class-static-fields-private, class-static-fields-public] | ||
---*/ | ||
|
||
//- elements | ||
field = function() {}; | ||
#field = (a, b, c, d) => undefined; | ||
|
||
accessPrivateField() { | ||
return this.#field; | ||
} | ||
//- assertions | ||
let c = new C(); | ||
assert.sameValue(c.accessPrivateField().length, 4); | ||
assert.sameValue(c.field.length, 0); |
55 changes: 55 additions & 0 deletions
55
src/class-elements/private-async-generator-method-name.case
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,55 @@ | ||
// Copyright (C) 2019 Caio Lima (Igalia SL). All rights reserved. | ||
// This code is governed by the BSD license found in the LICENSE file. | ||
|
||
/*--- | ||
desc: Private async generators methods have name property properly configured | ||
info: | | ||
Updated Productions | ||
|
||
ClassElement : MethodDefinition | ||
1. Return ClassElementEvaluation of MethodDefinition with arguments ! Get(homeObject, "prototype"),enumerable, and "prototype". | ||
|
||
ClassElement : MethodDefinition | ||
ClassElement : static MethodDefinition | ||
1. Perform ? PropertyDefinitionEvaluation with parameters object and enumerable. | ||
2. Return empty. | ||
|
||
AsyncMethod : async [no LineTerminator here] * ClassElementName (UniqueFormalParameters) { AsyncFunctionBody } | ||
1. Let propKey be the result of evaluating ClassElementName. | ||
... | ||
12. Perform ? DefineOrdinaryMethod(key, homeObject, closure, enumerable). | ||
|
||
ClassElementName : PrivateIdentifier | ||
1. Let bindingName be StringValue of PrivateIdentifier. | ||
... | ||
5. If scopeEnvRec's binding for bindingName is uninitialized, | ||
a. Let field be NewPrivateName(bindingName). | ||
b. Perform ! scopeEnvRec.InitializeBinding(bindingName, field). | ||
6. Otherwise, | ||
a. Let field be scopeEnvRec.GetBindingValue(bindingName). | ||
7. Assert: field.[[Description]] is bindingName. | ||
8. Return field. | ||
|
||
DefineOrdinaryMethod(key, homeObject, closure, enumerable) | ||
1. Perform SetFunctionName(closure, key). | ||
2. If key is a Private Name, | ||
a. Assert: key does not have a [[Kind]] field. | ||
b. Set key.[[Kind]] to "method". | ||
c. Set key.[[Value]] to closure. | ||
d. Set key.[[Brand]] to homeObject. | ||
3. Else, | ||
a. Let desc be the PropertyDescriptor{[[Value]]: closure, [[Writable]]: true, [[Enumerable]]: enumerable, [[Configurable]]: true}. | ||
b. Perform ? DefinePropertyOrThrow(homeObject, key, desc). | ||
template: default | ||
features: [class-methods-private] | ||
---*/ | ||
|
||
//- elements | ||
async * #method() {}; | ||
|
||
getPrivateMethod() { | ||
return this.#method; | ||
} | ||
//- assertions | ||
let c = new C(); | ||
assert.sameValue(c.getPrivateMethod().name, "#method"); |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,55 @@ | ||
// Copyright (C) 2019 Caio Lima (Igalia SL). All rights reserved. | ||
// This code is governed by the BSD license found in the LICENSE file. | ||
|
||
/*--- | ||
desc: Private async methods have name property properly configured | ||
info: | | ||
Updated Productions | ||
|
||
ClassElement : MethodDefinition | ||
1. Return ClassElementEvaluation of MethodDefinition with arguments ! Get(homeObject, "prototype"),enumerable, and "prototype". | ||
|
||
ClassElement : MethodDefinition | ||
ClassElement : static MethodDefinition | ||
1. Perform ? PropertyDefinitionEvaluation with parameters object and enumerable. | ||
2. Return empty. | ||
|
||
AsyncMethod : async [no LineTerminator here] ClassElementName (UniqueFormalParameters) { AsyncFunctionBody } | ||
1. Let propKey be the result of evaluating ClassElementName. | ||
... | ||
10. Perform ? DefineOrdinaryMethod(key, homeObject, closure, enumerable). | ||
|
||
ClassElementName : PrivateIdentifier | ||
1. Let bindingName be StringValue of PrivateIdentifier. | ||
... | ||
5. If scopeEnvRec's binding for bindingName is uninitialized, | ||
a. Let field be NewPrivateName(bindingName). | ||
b. Perform ! scopeEnvRec.InitializeBinding(bindingName, field). | ||
6. Otherwise, | ||
a. Let field be scopeEnvRec.GetBindingValue(bindingName). | ||
7. Assert: field.[[Description]] is bindingName. | ||
8. Return field. | ||
|
||
DefineOrdinaryMethod(key, homeObject, closure, enumerable) | ||
1. Perform SetFunctionName(closure, key). | ||
2. If key is a Private Name, | ||
a. Assert: key does not have a [[Kind]] field. | ||
b. Set key.[[Kind]] to "method". | ||
c. Set key.[[Value]] to closure. | ||
d. Set key.[[Brand]] to homeObject. | ||
3. Else, | ||
a. Let desc be the PropertyDescriptor{[[Value]]: closure, [[Writable]]: true, [[Enumerable]]: enumerable, [[Configurable]]: true}. | ||
b. Perform ? DefinePropertyOrThrow(homeObject, key, desc). | ||
template: default | ||
features: [class-methods-private] | ||
---*/ | ||
|
||
//- elements | ||
async #method() {}; | ||
|
||
getPrivateMethod() { | ||
return this.#method; | ||
} | ||
//- assertions | ||
let c = new C(); | ||
assert.sameValue(c.getPrivateMethod().name, "#method"); |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,55 @@ | ||
// Copyright (C) 2019 Caio Lima (Igalia SL). All rights reserved. | ||
// This code is governed by the BSD license found in the LICENSE file. | ||
|
||
/*--- | ||
desc: Private generator methods have name property properly configured | ||
info: | | ||
Updated Productions | ||
|
||
ClassElement : MethodDefinition | ||
1. Return ClassElementEvaluation of MethodDefinition with arguments ! Get(homeObject, "prototype"),enumerable, and "prototype". | ||
|
||
GeneratorMethod : * ClassElementName (UniqueFormalParameters) { GeneratorBody } | ||
1. Let key be the result of evaluating ClassElementName. | ||
... | ||
12. Return DefineOrdinaryMethod(key, homeObject, closure, enumerable). | ||
|
||
ClassElement : MethodDefinition | ||
ClassElement : static MethodDefinition | ||
1. Perform ? PropertyDefinitionEvaluation with parameters object and enumerable. | ||
2. Return empty. | ||
|
||
ClassElementName : PrivateIdentifier | ||
1. Let bindingName be StringValue of PrivateIdentifier. | ||
... | ||
5. If scopeEnvRec's binding for bindingName is uninitialized, | ||
a. Let field be NewPrivateName(bindingName). | ||
b. Perform ! scopeEnvRec.InitializeBinding(bindingName, field). | ||
6. Otherwise, | ||
a. Let field be scopeEnvRec.GetBindingValue(bindingName). | ||
7. Assert: field.[[Description]] is bindingName. | ||
8. Return field. | ||
|
||
DefineOrdinaryMethod(key, homeObject, closure, enumerable) | ||
1. Perform SetFunctionName(closure, key). | ||
2. If key is a Private Name, | ||
a. Assert: key does not have a [[Kind]] field. | ||
b. Set key.[[Kind]] to "method". | ||
c. Set key.[[Value]] to closure. | ||
d. Set key.[[Brand]] to homeObject. | ||
3. Else, | ||
a. Let desc be the PropertyDescriptor{[[Value]]: closure, [[Writable]]: true, [[Enumerable]]: enumerable, [[Configurable]]: true}. | ||
b. Perform ? DefinePropertyOrThrow(homeObject, key, desc). | ||
template: default | ||
features: [class-methods-private] | ||
---*/ | ||
|
||
//- elements | ||
* #method() {}; | ||
|
||
getPrivateMethod() { | ||
return this.#method; | ||
} | ||
//- assertions | ||
let c = new C(); | ||
assert.sameValue(c.getPrivateMethod().name, "#method"); |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,43 @@ | ||
// Copyright (C) 2019 Caio Lima (Igalia SL). All rights reserved. | ||
// This code is governed by the BSD license found in the LICENSE file. | ||
|
||
/*--- | ||
desc: Private methods have length property properly configured | ||
info: | | ||
Updated Productions | ||
|
||
ClassElement : MethodDefinition | ||
1. Return ClassElementEvaluation of MethodDefinition with arguments ! Get(homeObject, "prototype"),enumerable, and "prototype". | ||
|
||
ClassElement : static MethodDefinition | ||
1. Return ClassElementEvaluation of MethodDefinition with arguments homeObject, enumerable and "static". | ||
|
||
MethodDefinition : ClassElementName( UniqueFormalParameters ) { FunctionBody } | ||
1. Let methodDef be DefineMethod of MethodDefinition with argument homeObject. | ||
2. ReturnIfAbrupt(methodDef). | ||
3. Perform ? DefineOrdinaryMethod(methodDef.[[Key]], homeObject, methodDef.[[Closure]], _enumerable). | ||
|
||
ClassElement : MethodDefinition | ||
ClassElement : static MethodDefinition | ||
1. Perform ? PropertyDefinitionEvaluation with parameters object and enumerable. | ||
2. Return empty. | ||
|
||
MethodDefinition : ClassElementName (UniqueFormalParameters) { FunctionBody } | ||
... | ||
8. Let closure be FunctionCreate(kind, UniqueFormalParameters, FunctionBody, scope, privateScope, strict, prototype). | ||
9. Perform MakeMethod(closure, object). | ||
10. Return the Record{[[Key]]: propKey, [[Closure]]: closure}. | ||
template: default | ||
features: [class-methods-private] | ||
---*/ | ||
|
||
//- elements | ||
#method(a) {}; | ||
|
||
getPrivateMethod() { | ||
return this.#method; | ||
} | ||
|
||
//- assertions | ||
let c = new C(); | ||
assert.sameValue(c.getPrivateMethod().length, 1); |
56 changes: 56 additions & 0 deletions
56
src/class-elements/private-static-async-generator-method-name.case
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,56 @@ | ||
// Copyright (C) 2019 Caio Lima (Igalia SL). All rights reserved. | ||
// This code is governed by the BSD license found in the LICENSE file. | ||
|
||
/*--- | ||
desc: Private static async generator methods have name property properly configured | ||
info: | | ||
Updated Productions | ||
|
||
ClassElement : MethodDefinition | ||
1. Return ClassElementEvaluation of MethodDefinition with arguments ! Get(homeObject, "prototype"),enumerable, and "prototype". | ||
|
||
ClassElement : static MethodDefinition | ||
1. Return ClassElementEvaluation of MethodDefinition with arguments homeObject, enumerable and "static". | ||
|
||
AsyncMethod : async [no LineTerminator here] * ClassElementName (UniqueFormalParameters) { AsyncFunctionBody } | ||
... | ||
12. Perform ? DefineOrdinaryMethod(key, homeObject, closure, _enumerable). | ||
|
||
ClassElement : MethodDefinition | ||
ClassElement : static MethodDefinition | ||
1. Perform ? PropertyDefinitionEvaluation with parameters object and enumerable. | ||
2. Return empty. | ||
|
||
ClassElementName : PrivateIdentifier | ||
1. Let bindingName be StringValue of PrivateIdentifier. | ||
... | ||
5. If scopeEnvRec's binding for bindingName is uninitialized, | ||
a. Let field be NewPrivateName(bindingName). | ||
b. Perform ! scopeEnvRec.InitializeBinding(bindingName, field). | ||
6. Otherwise, | ||
a. Let field be scopeEnvRec.GetBindingValue(bindingName). | ||
7. Assert: field.[[Description]] is bindingName. | ||
8. Return field. | ||
|
||
DefineOrdinaryMethod(key, homeObject, closure, enumerable) | ||
1. Perform SetFunctionName(closure, key). | ||
2. If key is a Private Name, | ||
a. Assert: key does not have a [[Kind]] field. | ||
b. Set key.[[Kind]] to "method". | ||
c. Set key.[[Value]] to closure. | ||
d. Set key.[[Brand]] to homeObject. | ||
3. Else, | ||
a. Let desc be the PropertyDescriptor{[[Value]]: closure, [[Writable]]: true, [[Enumerable]]: enumerable, [[Configurable]]: true}. | ||
b. Perform ? DefinePropertyOrThrow(homeObject, key, desc). | ||
template: default | ||
features: [class-static-methods-private] | ||
---*/ | ||
|
||
//- elements | ||
static async * #method() {}; | ||
|
||
static getPrivateMethod() { | ||
return this.#method; | ||
} | ||
//- assertions | ||
assert.sameValue(C.getPrivateMethod().name, "#method"); |
Oops, something went wrong.