Properly implement static class fields. (#4221)

JerryScript-DCO-1.0-Signed-off-by: Zoltan Herczeg zherczeg.u-szeged@partner.samsung.com
This commit is contained in:
Zoltan Herczeg
2020-09-25 14:23:02 +02:00
committed by GitHub
parent e478640d80
commit bc64957d19
15 changed files with 344 additions and 162 deletions
+30
View File
@@ -51,3 +51,33 @@ check_property(C1, 23, 11)
check_property(C1, "a b", undefined)
assert(res === "msg")
assert(counter === 2)
counter = 0
class C2 {
static a = (assert(++counter === 6), "x")
static [(assert(++counter === 1), "b")]
static [(assert(++counter === 2), "f")]() {}
static [(assert(++counter === 3), "c")] = (assert(++counter === 7), this);
[(assert(++counter === 4), "a")]
static [(assert(++counter === 5), "d")];static e = (assert(++counter === 8), C2)
}
assert(counter === 8)
check_property(C2, "a", "x")
check_property(C2, "b", undefined)
check_property(C2, "c", C2)
check_property(C2, "d", undefined)
check_property(C2, "e", C2)
res = new C2
check_property(res, "a", undefined)
let C3 = class C4 {
static f() {}
static xx = C4
static yy = this
}
assert(Reflect.ownKeys(C3).toString() === "length,prototype,f,name,xx,yy")
check_property(C3, "xx", C3)
check_property(C3, "yy", C3)
-10
View File
@@ -6082,9 +6082,7 @@
<test id="language/expressions/class/elements/async-gen-private-method/yield-star-sync-return.js"><reason></reason></test>
<test id="language/expressions/class/elements/async-gen-private-method/yield-star-sync-throw.js"><reason></reason></test>
<test id="language/expressions/class/elements/class-name-static-initializer-anonymous.js"><reason></reason></test>
<test id="language/expressions/class/elements/class-name-static-initializer-decl.js"><reason></reason></test>
<test id="language/expressions/class/elements/class-name-static-initializer-default-export.js"><reason></reason></test>
<test id="language/expressions/class/elements/class-name-static-initializer-expr.js"><reason></reason></test>
<test id="language/expressions/class/elements/derived-cls-direct-eval-contains-superproperty-1.js"><reason></reason></test>
<test id="language/expressions/class/elements/derived-cls-direct-eval-contains-superproperty-2.js"><reason></reason></test>
<test id="language/expressions/class/elements/direct-eval-err-contains-newtarget.js"><reason></reason></test>
@@ -6098,7 +6096,6 @@
<test id="language/expressions/class/elements/gen-private-method/yield-spread-arr-single.js"><reason></reason></test>
<test id="language/expressions/class/elements/gen-private-method/yield-spread-obj.js"><reason></reason></test>
<test id="language/expressions/class/elements/grammar-private-field-optional-chaining.js"><reason></reason></test>
<test id="language/expressions/class/elements/intercalated-static-non-static-computed-fields.js"><reason></reason></test>
<test id="language/expressions/class/elements/multiple-definitions-grammar-privatename-identifier-semantics-stringvalue.js"><reason></reason></test>
<test id="language/expressions/class/elements/multiple-definitions-private-field-usage.js"><reason></reason></test>
<test id="language/expressions/class/elements/multiple-definitions-private-method-getter-usage.js"><reason></reason></test>
@@ -6531,9 +6528,6 @@
<test id="language/expressions/class/elements/same-line-method-static-private-methods.js"><reason></reason></test>
<test id="language/expressions/class/elements/static-field-anonymous-function-length.js"><reason></reason></test>
<test id="language/expressions/class/elements/static-field-anonymous-function-name.js"><reason></reason></test>
<test id="language/expressions/class/elements/static-field-init-this-inside-arrow-function.js"><reason></reason></test>
<test id="language/expressions/class/elements/static-field-init-with-this.js"><reason></reason></test>
<test id="language/expressions/class/elements/static-field-redeclaration.js"><reason></reason></test>
<test id="language/expressions/class/elements/static-private-fields-proxy-default-handler-throws.js"><reason></reason></test>
<test id="language/expressions/class/elements/static-private-getter-access-on-inner-arrow-function.js"><reason></reason></test>
<test id="language/expressions/class/elements/static-private-getter-access-on-inner-class.js"><reason></reason></test>
@@ -7705,7 +7699,6 @@
<test id="language/statements/class/elements/get-access-of-missing-private-getter.js"><reason></reason></test>
<test id="language/statements/class/elements/get-access-of-missing-shadowed-private-getter.js"><reason></reason></test>
<test id="language/statements/class/elements/grammar-private-field-optional-chaining.js"><reason></reason></test>
<test id="language/statements/class/elements/intercalated-static-non-static-computed-fields.js"><reason></reason></test>
<test id="language/statements/class/elements/multiple-definitions-grammar-privatename-identifier-semantics-stringvalue.js"><reason></reason></test>
<test id="language/statements/class/elements/multiple-definitions-private-field-usage.js"><reason></reason></test>
<test id="language/statements/class/elements/multiple-definitions-private-method-getter-usage.js"><reason></reason></test>
@@ -8197,9 +8190,6 @@
<test id="language/statements/class/elements/set-access-of-shadowed-private-method.js"><reason></reason></test>
<test id="language/statements/class/elements/static-field-anonymous-function-length.js"><reason></reason></test>
<test id="language/statements/class/elements/static-field-anonymous-function-name.js"><reason></reason></test>
<test id="language/statements/class/elements/static-field-init-this-inside-arrow-function.js"><reason></reason></test>
<test id="language/statements/class/elements/static-field-init-with-this.js"><reason></reason></test>
<test id="language/statements/class/elements/static-field-redeclaration.js"><reason></reason></test>
<test id="language/statements/class/elements/static-private-fields-proxy-default-handler-throws.js"><reason></reason></test>
<test id="language/statements/class/elements/static-private-getter-access-on-inner-arrow-function.js"><reason></reason></test>
<test id="language/statements/class/elements/static-private-getter-access-on-inner-class.js"><reason></reason></test>