LibJS: Initial class implementation; allow super expressions in object

literal methods; add EnvrionmentRecord fields and methods to
LexicalEnvironment

Adding EnvrionmentRecord's fields and methods lets us throw an exception
when |this| is not initialized, which occurs when the super constructor
in a derived class has not yet been called, or when |this| has already
been initialized (the super constructor was already called).
This commit is contained in:
Jack Karamanian 2020-06-08 13:31:21 -05:00 committed by Andreas Kling
parent a535d58cac
commit 7533fd8b02
Notes: sideshowbarker 2024-07-19 05:19:30 +09:00
18 changed files with 967 additions and 92 deletions

View file

@ -70,6 +70,22 @@ try {
assert(a[2] === 3);
assert(o4.test === undefined);
var base = {
getNumber() {
return 10;
}
};
var derived = {
getNumber() {
return 20 + super.getNumber();
}
};
Object.setPrototypeOf(derived, base)
assert(derived.getNumber() === 30);
assertIsSyntaxError("({ foo: function() { super.bar; } })")
assertIsSyntaxError("({ get ...foo })");
assertIsSyntaxError("({ get... foo })");
assertIsSyntaxError("({ get foo })");