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
+1 -1
View File
@@ -1,4 +1,4 @@
var fiber = new Fiber {
var fiber = Fiber.new {
Fiber.abort("Error message.")
}
+1 -1
View File
@@ -1,4 +1,4 @@
var fiber = new Fiber {
var fiber = Fiber.new {
IO.print("fiber")
}
+1 -1
View File
@@ -1,6 +1,6 @@
var fiber
fiber = new Fiber {
fiber = Fiber.new {
fiber.call() // expect runtime error: Fiber has already been called.
}
+2 -2
View File
@@ -1,11 +1,11 @@
var a
var b
a = new Fiber {
a = Fiber.new {
b.call() // expect runtime error: Fiber has already been called.
}
b = new Fiber {
b = Fiber.new {
a.call()
}
@@ -1,4 +1,4 @@
var fiber = new Fiber {
var fiber = Fiber.new {
IO.print("fiber")
}
+1 -1
View File
@@ -1,4 +1,4 @@
var fiber = new Fiber {
var fiber = Fiber.new {
IO.print("fiber")
return "result"
}
+1 -1
View File
@@ -1,4 +1,4 @@
var fiber = new Fiber {
var fiber = Fiber.new {
IO.print("call")
}
+1 -1
View File
@@ -1,4 +1,4 @@
var fiber = new Fiber {
var fiber = Fiber.new {
IO.print("fiber")
}
@@ -1,6 +1,6 @@
var fiber
fiber = new Fiber {
fiber = Fiber.new {
fiber.call(2) // expect runtime error: Fiber has already been called.
}
@@ -1,11 +1,11 @@
var a
var b
a = new Fiber {
a = Fiber.new {
b.call(3) // expect runtime error: Fiber has already been called.
}
b = new Fiber {
b = Fiber.new {
a.call(2)
}
@@ -1,4 +1,4 @@
var fiber = new Fiber {
var fiber = Fiber.new {
IO.print("call")
}
+1 -1
View File
@@ -1,4 +1,4 @@
var fiber = new Fiber {
var fiber = Fiber.new {
"s".unknown
}
+1 -1
View File
@@ -1,4 +1,4 @@
var fiber = new Fiber {
var fiber = Fiber.new {
IO.print("1")
Fiber.yield()
IO.print("2")
+1 -1
View File
@@ -1,4 +1,4 @@
var fiber = new Fiber {
var fiber = Fiber.new {
"s".unknown
}
+1 -1
View File
@@ -1 +1 @@
var fiber = new Fiber("not fn") // expect runtime error: Argument must be a function.
var fiber = Fiber.new("not fn") // expect runtime error: Argument must be a function.
+2 -2
View File
@@ -1,8 +1,8 @@
var b = new Fiber {
var b = Fiber.new {
IO.print("fiber b")
}
var a = new Fiber {
var a = Fiber.new {
IO.print("begin fiber a")
b.call()
IO.print("end fiber a")
+1 -1
View File
@@ -1,4 +1,4 @@
var fiber = new Fiber {
var fiber = Fiber.new {
IO.print("fiber")
}
+1 -1
View File
@@ -1,6 +1,6 @@
var fiber
fiber = new Fiber {
fiber = Fiber.new {
IO.print(1) // expect: 1
fiber.run()
IO.print(2) // expect: 2
+2 -2
View File
@@ -1,13 +1,13 @@
var a
var b
a = new Fiber {
a = Fiber.new {
IO.print(2)
b.run()
IO.print("nope")
}
b = new Fiber {
b = Fiber.new {
IO.print(1)
a.run()
IO.print(3)
+2 -2
View File
@@ -1,10 +1,10 @@
var a = new Fiber {
var a = Fiber.new {
IO.print("run")
}
// Run a through an intermediate fiber since it will get discarded and we need
// to return to the main one after a completes.
var b = new Fiber {
var b = Fiber.new {
a.run()
IO.print("nope")
}
+1 -1
View File
@@ -1,4 +1,4 @@
var fiber = new Fiber {
var fiber = Fiber.new {
IO.print("fiber")
}
@@ -1,6 +1,6 @@
var fiber
fiber = new Fiber {
fiber = Fiber.new {
IO.print(1) // expect: 1
fiber.run("ignored")
IO.print(2) // expect: 2
@@ -1,13 +1,13 @@
var a
var b
a = new Fiber {
a = Fiber.new {
IO.print(2)
b.run("ignored")
IO.print("nope")
}
b = new Fiber {
b = Fiber.new {
IO.print(1)
a.run("ignored")
IO.print(3)
+1 -1
View File
@@ -1,4 +1,4 @@
var fiber = new Fiber {
var fiber = Fiber.new {
IO.print("before")
true.unknownMethod
IO.print("after")
+1 -1
View File
@@ -1,6 +1,6 @@
var fiber
fiber = new Fiber {
fiber = Fiber.new {
fiber.try() // expect runtime error: Fiber has already been called.
}
+2 -2
View File
@@ -1,11 +1,11 @@
var a
var b
a = new Fiber {
a = Fiber.new {
b.try() // expect runtime error: Fiber has already been called.
}
b = new Fiber {
b = Fiber.new {
a.call()
}
+1 -1
View File
@@ -1,4 +1,4 @@
var fiber = new Fiber {
var fiber = Fiber.new {
IO.print("try")
}
+1 -1
View File
@@ -1,4 +1,4 @@
var fiber = new Fiber {
var fiber = Fiber.new {
IO.print("fiber")
}
+1 -1
View File
@@ -1,4 +1,4 @@
var fiber = new Fiber {}
var fiber = Fiber.new {}
IO.print(fiber is Fiber) // expect: true
IO.print(fiber is Object) // expect: true
IO.print(fiber is Bool) // expect: false
+1 -1
View File
@@ -1,4 +1,4 @@
var fiber = new Fiber {
var fiber = Fiber.new {
IO.print("fiber 1")
Fiber.yield()
IO.print("fiber 2")
+1 -1
View File
@@ -1,4 +1,4 @@
var fiber = new Fiber {
var fiber = Fiber.new {
IO.print("fiber 1")
var result = Fiber.yield()
IO.print(result)
+1 -1
View File
@@ -1,4 +1,4 @@
var fiber = new Fiber {
var fiber = Fiber.new {
IO.print("fiber")
var result = Fiber.yield()
IO.print(result)
+3 -3
View File
@@ -1,11 +1,11 @@
var a = new Fiber {
var a = Fiber.new {
IO.print("before") // expect: before
Fiber.yield()
}
// Run a chain of fibers. Since none of them are called, they all get discarded
// and there is no remaining caller.
var b = new Fiber { a.run() }
var c = new Fiber { b.run() }
var b = Fiber.new { a.run() }
var c = Fiber.new { b.run() }
c.run()
IO.print("not reached")
+1 -1
View File
@@ -1,4 +1,4 @@
var fiber = new Fiber {
var fiber = Fiber.new {
IO.print("fiber 1")
Fiber.yield("yield 1")
IO.print("fiber 2")
@@ -1,11 +1,11 @@
var a = new Fiber {
var a = Fiber.new {
IO.print("before") // expect: before
Fiber.yield(1)
}
// Run a chain of fibers. Since none of them are called, they all get discarded
// and there is no remaining caller.
var b = new Fiber { a.run() }
var c = new Fiber { b.run() }
var b = Fiber.new { a.run() }
var c = Fiber.new { b.run() }
c.run()
IO.print("not reached")