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
+4 -4
View File
@@ -1,5 +1,5 @@
class Foo {
new(value) { _value = value }
this new(value) { _value = value }
toString { _value }
bar=(value) {
_value = value
@@ -7,9 +7,9 @@ class Foo {
}
}
var a = new Foo("a")
var b = new Foo("b")
var c = new Foo("c")
var a = Foo.new("a")
var b = Foo.new("b")
var c = Foo.new("c")
// Assignment is right-associative.
a.bar = b.bar = c.bar = "d"
+1 -1
View File
@@ -2,5 +2,5 @@ class Foo {
bar=(value) { value }
}
var foo = new Foo
var foo = Foo.new()
(foo.bar) = "value" // expect error
+1 -1
View File
@@ -2,5 +2,5 @@ class Foo {
bar=(value) { value }
}
var foo = new Foo
var foo = Foo.new()
"a" + foo.bar = "value" // expect error
+1 -1
View File
@@ -4,5 +4,5 @@ class Foo {
}
}
var foo = new Foo
var foo = Foo.new()
foo.bar = "value" // expect: value
+1 -1
View File
@@ -2,5 +2,5 @@ class Foo {
bar=(value) { value }
}
var foo = new Foo
var foo = Foo.new()
a is foo.bar = "value" // expect error
+1 -1
View File
@@ -2,5 +2,5 @@ class Foo {
bar=(value) { value }
}
var foo = new Foo
var foo = Foo.new()
!foo.bar = "value" // expect error
+1 -1
View File
@@ -2,5 +2,5 @@ class Foo {
bar=(value) { "result" }
}
var foo = new Foo
var foo = Foo.new()
IO.print(foo.bar = "value") // expect: result
@@ -3,6 +3,6 @@ class Foo {
bar { IO.print("get") }
}
var foo = new Foo
var foo = Foo.new()
foo.bar = "value" // expect: set
foo.bar // expect: get