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

View File

@ -1,7 +1,7 @@
import "cthulu" for Cthulu
class Lovecraft {
say { (new Cthulu).message }
say() { Cthulu.new().message }
}
IO.print((new Lovecraft).say)
IO.print(Lovecraft.new().say())

View File

@ -7,7 +7,7 @@
// Class definition with a toplevel name.
class SyntaxExample {
// Constructor
new {
this new() {
// Top-level name `IO`
IO.print("I am a constructor!")
@ -26,7 +26,7 @@ class SyntaxExample {
}
// Constructor with arguments
new(a, b) {
this constructor(a, b) {
print(a, b)
field = a
}
@ -82,14 +82,11 @@ class SyntaxExample {
// `class`, `is`
class ReservedWords is SyntaxExample {
// `new`
new {
reserved {
// `super`, `true`, `false`
super(true, false)
// `this`
this.foo
// `new`
new SyntaxExample
}
foo {