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:
Bob Nystrom
2013-12-19 15:02:27 +00:00
parent f5a61e4241
commit 0e70d98169
30 changed files with 171 additions and 190 deletions
+5 -4
View File
@@ -1,5 +1,5 @@
class Toggle {
this new(startState) {
new(startState) {
_state = startState
}
@@ -11,7 +11,8 @@ class Toggle {
}
class NthToggle is Toggle {
this new(startState, maxCounter) super.new(startState) {
new(startState, maxCounter) {
super(startState)
_countMax = maxCounter
_count = 0
}
@@ -31,7 +32,7 @@ var start = OS.clock
var n = 1000000
var i = 0
var val = true
var toggle = Toggle.new(val)
var toggle = new Toggle(val)
while (i < n) {
val = toggle.activate.value
@@ -41,7 +42,7 @@ while (i < n) {
io.write(toggle.value)
val = true
var ntoggle = NthToggle.new(val, 3)
var ntoggle = new NthToggle(val, 3)
i = 0
while (i < n) {