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
+4 -1
View File
@@ -5,6 +5,7 @@ class Api {
// Class with a default constructor.
foreign class Counter {
construct new() {}
foreign increment(amount)
foreign value
}
@@ -53,7 +54,9 @@ var error = Fiber.new {
IO.print(error) // expect: Class 'Subclass' cannot inherit from foreign class 'Point'.
// Class with a finalizer.
foreign class Resource {}
foreign class Resource {
construct new() {}
}
var resources = [
Resource.new(),