refactor: replace Foo.new constructor syntax with new Foo and simplify superclass constructor calls
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.
This commit is contained in:
@@ -8,5 +8,5 @@ class Foo {
|
||||
}
|
||||
}
|
||||
|
||||
Foo.new.method("param")
|
||||
(new Foo).method("param")
|
||||
f.call // expect: param
|
||||
|
||||
@@ -8,7 +8,7 @@ var foo = null
|
||||
}
|
||||
}
|
||||
|
||||
foo = Foo.new
|
||||
foo = new Foo
|
||||
}
|
||||
|
||||
foo.method // expect: local
|
||||
|
||||
@@ -6,5 +6,5 @@
|
||||
}
|
||||
}
|
||||
|
||||
Foo.new.method // expect: local
|
||||
(new Foo).method // expect: local
|
||||
}
|
||||
|
||||
@@ -11,5 +11,5 @@ class Foo {
|
||||
}
|
||||
}
|
||||
|
||||
Foo.new.method // expect: global
|
||||
(new Foo).method // expect: global
|
||||
Foo.classMethod // expect: global
|
||||
|
||||
Reference in New Issue
Block a user