fix: remove default constructors and require explicit construct new() for all user classes

The compiler no longer auto-generates a default `new()` constructor for classes. All classes must now explicitly define `construct new() {}` to be instantiable. This change removes the `createDefaultConstructor` function from the compiler, eliminates the `return_this` primitive used by Object's default initializer, and adds explicit constructors to all test and example classes. Core metaclasses (Bool, Class, Null, Num, Object, Range, Sequence) now correctly reject `new()` calls with runtime errors.
This commit is contained in:
Bob Nystrom
2015-09-01 15:16:04 +00:00
parent 4665ec1913
commit ef93496fd4
86 changed files with 248 additions and 133 deletions
+1
View File
@@ -1,4 +1,5 @@
class Foo {
construct new() {}
write { IO.print(_field) }
}
+2
View File
@@ -1,4 +1,6 @@
class Foo {
construct new() {}
set(a, b, c, d, e) {
_a = a
_b = b
+4
View File
@@ -1,9 +1,13 @@
class Outer {
construct new() {}
method {
_field = "outer"
IO.print(_field) // expect: outer
class Inner {
construct new() {}
method {
_field = "inner"
IO.print(_field) // expect: inner
+1
View File
@@ -1,4 +1,5 @@
class Foo {
construct new() {}
write { IO.print(_field) } // Compile a use of the field...
init { _field = "value" } // ...before an assignment to it.
}