Make constructors just methods.

* Eliminate "new" reserved word.
* Allow "this" before a method definition to define a constructor.
* Only create a default constructor for classes that don't define one.
This commit is contained in:
Bob Nystrom
2015-07-10 09:18:22 -07:00
parent 0ddaa2517c
commit 5fb6186d7d
221 changed files with 864 additions and 654 deletions
+2 -2
View File
@@ -1,7 +1,7 @@
class Foo {
getClosure { new Fn { toString } }
getClosure { Fn.new { toString } }
toString { "Foo" }
}
var closure = (new Foo).getClosure
var closure = Foo.new().getClosure
IO.print(closure.call()) // expect: Foo
+3 -3
View File
@@ -2,7 +2,7 @@ class Outer {
method {
IO.print(this) // expect: Outer
new Fn {
Fn.new {
IO.print(this) // expect: Outer
class Inner {
@@ -12,11 +12,11 @@ class Outer {
toString { "Inner" }
}
(new Inner).method
Inner.new().method
}.call()
}
toString { "Outer" }
}
(new Outer).method
Outer.new().method
+2 -2
View File
@@ -1,7 +1,7 @@
class Foo {
getClosure { new Fn { new Fn { new Fn { toString } } } }
getClosure { Fn.new { Fn.new { Fn.new { toString } } } }
toString { "Foo" }
}
var closure = (new Foo).getClosure
var closure = Foo.new().getClosure
IO.print(closure.call().call().call()) // expect: Foo
+1 -1
View File
@@ -3,4 +3,4 @@ class Foo {
baz { "baz" }
}
IO.print((new Foo).bar.baz) // expect: baz
IO.print(Foo.new().bar.baz) // expect: baz
@@ -1,3 +1,3 @@
new Fn {
Fn.new {
this // expect error
}