Remove the `this new` constructor declaration syntax in favor of a `new` keyword that creates instances directly. Superclass constructors are now invoked via bare `super(args)` instead of `super.new(args)`, eliminating the semantic weirdness of calling a constructor on a partially-constructed instance. Update the compiler to treat `new` as a keyword token, replace the `isMethod` flag with `methodName`/`methodLength` fields, and change the VM's `NEW` opcode to pop the class from the stack before creating the instance. Add a default `new` native method on Object that returns `this`. Update all benchmarks and tests to use the new syntax.
19 lines
176 B
Plaintext
19 lines
176 B
Plaintext
class A {
|
|
foo {
|
|
io.write("A.foo")
|
|
}
|
|
}
|
|
|
|
class B is A {}
|
|
|
|
class C is B {
|
|
foo {
|
|
io.write("C.foo")
|
|
super.foo
|
|
}
|
|
}
|
|
|
|
(new C).foo
|
|
// expect: C.foo
|
|
// expect: A.foo
|