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,4 +1,6 @@
class Foo {
construct new() {}
foo(a, b) {
_field1 = a
_field2 = b
@@ -11,6 +13,8 @@ class Foo {
}
class Bar is Foo {
construct new() {}
bar(a, b) {
_field1 = a
_field2 = b
@@ -6,6 +6,7 @@ class Foo {
}
class Bar is Foo {
construct new() {}
methodOnBar { IO.print("bar") }
method(a, b) { IO.print("bar") }
method(a, b, c, d) { IO.print("bar") }
+9 -3
View File
@@ -1,6 +1,12 @@
class A {}
class B is A {}
class C is B {}
class A {
construct new() {}
}
class B is A {
construct new() {}
}
class C is B {
construct new() {}
}
var a = A.new()
var b = B.new()
var c = C.new()