feat: allow empty argument list methods in calls, definitions, and docs

- Compile empty `()` as a valid method signature distinct from no parentheses
- Update `call()`, `clear()`, `run()`, `try()`, and `yield()` to use empty argument lists
- Revise documentation across multiple files to reflect new signature semantics
This commit is contained in:
Bob Nystrom
2015-02-27 07:08:36 +00:00
parent 94f34367f9
commit 5382fa05d7
94 changed files with 291 additions and 224 deletions
+1 -1
View File
@@ -2,6 +2,6 @@ var fiber = new Fiber {
Fiber.abort("Error message.")
}
IO.print(fiber.try) // expect: Error message.
IO.print(fiber.try()) // expect: Error message.
IO.print(fiber.isDone) // expect: true
IO.print(fiber.error) // expect: Error message.
+1 -1
View File
@@ -3,5 +3,5 @@ var fiber = new Fiber {
}
IO.print("before") // expect: before
fiber.call // expect: fiber
fiber.call() // expect: fiber
IO.print("after") // expect: after
+2 -2
View File
@@ -1,7 +1,7 @@
var fiber
fiber = new Fiber {
fiber.call // expect runtime error: Fiber has already been called.
fiber.call() // expect runtime error: Fiber has already been called.
}
fiber.call
fiber.call()
+3 -3
View File
@@ -2,11 +2,11 @@ var a
var b
a = new Fiber {
b.call // expect runtime error: Fiber has already been called.
b.call() // expect runtime error: Fiber has already been called.
}
b = new Fiber {
a.call
a.call()
}
b.call
b.call()
+2 -2
View File
@@ -2,5 +2,5 @@ var fiber = new Fiber {
IO.print("fiber")
}
var result = fiber.call // expect: fiber
IO.print(result) // expect: null
var result = fiber.call() // expect: fiber
IO.print(result) // expect: null
+2 -2
View File
@@ -3,5 +3,5 @@ var fiber = new Fiber {
return "result"
}
var result = fiber.call // expect: fiber
IO.print(result) // expect: result
var result = fiber.call() // expect: fiber
IO.print(result) // expect: result
+2 -2
View File
@@ -2,5 +2,5 @@ var fiber = new Fiber {
IO.print("call")
}
fiber.call // expect: call
fiber.call // expect runtime error: Cannot call a finished fiber.
fiber.call() // expect: call
fiber.call() // expect runtime error: Cannot call a finished fiber.
+8 -8
View File
@@ -5,9 +5,9 @@ var closure
var a = "before"
fiber = new Fiber {
IO.print(a)
Fiber.yield
Fiber.yield()
a = "after"
Fiber.yield
Fiber.yield()
IO.print(a)
a = "final"
}
@@ -17,9 +17,9 @@ var closure
}
}
fiber.call // expect: before
closure.call // expect: before
fiber.call
closure.call // expect: after
fiber.call // expect: after
closure.call // expect: final
fiber.call() // expect: before
closure.call() // expect: before
fiber.call()
closure.call() // expect: after
fiber.call() // expect: after
closure.call() // expect: final
+1 -1
View File
@@ -3,5 +3,5 @@ var fiber = new Fiber {
}
IO.print(fiber.error) // expect: null
IO.print(fiber.try) // expect: String does not implement 'unknown'.
IO.print(fiber.try()) // expect: String does not implement 'unknown'.
IO.print(fiber.error) // expect: String does not implement 'unknown'.
+3 -3
View File
@@ -1,11 +1,11 @@
var fiber = new Fiber {
IO.print("1")
Fiber.yield
Fiber.yield()
IO.print("2")
}
IO.print(fiber.isDone) // expect: false
fiber.call // expect: 1
fiber.call() // expect: 1
IO.print(fiber.isDone) // expect: false
fiber.call // expect: 2
fiber.call() // expect: 2
IO.print(fiber.isDone) // expect: true
+1 -1
View File
@@ -2,5 +2,5 @@ var fiber = new Fiber {
"s".unknown
}
fiber.try
fiber.try()
IO.print(fiber.isDone) // expect: true
+2 -2
View File
@@ -4,12 +4,12 @@ var b = new Fiber {
var a = new Fiber {
IO.print("begin fiber a")
b.call
b.call()
IO.print("end fiber a")
}
IO.print("begin main")
a.call
a.call()
IO.print("end main")
// expect: begin main
+1 -1
View File
@@ -3,7 +3,7 @@ var fiber = new Fiber {
}
IO.print("before") // expect: before
fiber.run // expect: fiber
fiber.run() // expect: fiber
// This does not get run since we exit when the run fiber completes.
IO.print("nope")
+2 -2
View File
@@ -2,9 +2,9 @@ var fiber
fiber = new Fiber {
IO.print(1) // expect: 1
fiber.run
fiber.run()
IO.print(2) // expect: 2
}
fiber.call
fiber.call()
IO.print(3) // expect: 3
+3 -3
View File
@@ -3,17 +3,17 @@ var b
a = new Fiber {
IO.print(2)
b.run
b.run()
IO.print("nope")
}
b = new Fiber {
IO.print(1)
a.run
a.run()
IO.print(3)
}
b.call
b.call()
// expect: 1
// expect: 2
// expect: 3
+3 -3
View File
@@ -5,9 +5,9 @@ var a = new Fiber {
// 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 {
a.run
a.run()
IO.print("nope")
}
b.call // expect: run
a.run // expect runtime error: Cannot run a finished fiber.
b.call() // expect: run
a.run() // expect runtime error: Cannot run a finished fiber.
@@ -6,5 +6,5 @@ fiber = new Fiber {
IO.print(2) // expect: 2
}
fiber.call
fiber.call()
IO.print(3) // expect: 3
@@ -13,7 +13,7 @@ b = new Fiber {
IO.print(3)
}
b.call
b.call()
// expect: 1
// expect: 2
// expect: 3
+1 -1
View File
@@ -4,7 +4,7 @@ var fiber = new Fiber {
IO.print("after")
}
IO.print(fiber.try)
IO.print(fiber.try())
// expect: before
// expect: Bool does not implement 'unknownMethod'.
IO.print("after try") // expect: after try
+2 -2
View File
@@ -1,7 +1,7 @@
var fiber
fiber = new Fiber {
fiber.try // expect runtime error: Fiber has already been called.
fiber.try() // expect runtime error: Fiber has already been called.
}
fiber.call
fiber.call()
+3 -3
View File
@@ -2,11 +2,11 @@ var a
var b
a = new Fiber {
b.try // expect runtime error: Fiber has already been called.
b.try() // expect runtime error: Fiber has already been called.
}
b = new Fiber {
a.call
a.call()
}
b.call
b.call()
+2 -2
View File
@@ -2,5 +2,5 @@ var fiber = new Fiber {
IO.print("try")
}
fiber.try // expect: try
fiber.try // expect runtime error: Cannot try a finished fiber.
fiber.try() // expect: try
fiber.try() // expect runtime error: Cannot try a finished fiber.
+4 -4
View File
@@ -2,7 +2,7 @@ var fiber = new Fiber {
IO.print("fiber")
}
IO.print("before") // expect: before
IO.print(fiber.try) // expect: fiber
// expect: null
IO.print("after") // expect: after
IO.print("before") // expect: before
IO.print(fiber.try()) // expect: fiber
// expect: null
IO.print("after") // expect: after
+8 -8
View File
@@ -1,14 +1,14 @@
var fiber = new Fiber {
IO.print("fiber 1")
Fiber.yield
Fiber.yield()
IO.print("fiber 2")
Fiber.yield
Fiber.yield()
IO.print("fiber 3")
}
var result = fiber.call // expect: fiber 1
IO.print("main 1") // expect: main 1
result = fiber.call // expect: fiber 2
IO.print("main 2") // expect: main 2
result = fiber.call // expect: fiber 3
IO.print("main 3") // expect: main 3
var result = fiber.call() // expect: fiber 1
IO.print("main 1") // expect: main 1
result = fiber.call() // expect: fiber 2
IO.print("main 2") // expect: main 2
result = fiber.call() // expect: fiber 3
IO.print("main 3") // expect: main 3
+1 -1
View File
@@ -1 +1 @@
Fiber.yield // expect runtime error: No fiber to yield to.
Fiber.yield() // expect runtime error: No fiber to yield to.
+4 -4
View File
@@ -1,14 +1,14 @@
var fiber = new Fiber {
IO.print("fiber 1")
var result = Fiber.yield
var result = Fiber.yield()
IO.print(result)
result = Fiber.yield
result = Fiber.yield()
IO.print(result)
}
fiber.call // expect: fiber 1
fiber.call() // expect: fiber 1
IO.print("main 1") // expect: main 1
fiber.call("call 1") // expect: call 1
IO.print("main 2") // expect: main 2
fiber.call // expect: null
fiber.call() // expect: null
IO.print("main 3") // expect: main 3
+2 -2
View File
@@ -1,10 +1,10 @@
var fiber = new Fiber {
IO.print("fiber")
var result = Fiber.yield
var result = Fiber.yield()
IO.print(result)
}
fiber.call // expect: fiber
fiber.call() // expect: fiber
IO.print("main") // expect: main
fiber.run("run") // expect: run
+4 -4
View File
@@ -1,9 +1,9 @@
var a = new Fiber {
Fiber.yield // expect runtime error: No fiber to yield to.
Fiber.yield() // expect runtime error: No fiber to yield to.
}
// 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 }
c.run
var b = new Fiber { a.run() }
var c = new Fiber { b.run() }
c.run()
+3 -3
View File
@@ -6,9 +6,9 @@ var fiber = new Fiber {
IO.print("fiber 3")
}
var result = fiber.call // expect: fiber 1
var result = fiber.call() // expect: fiber 1
IO.print(result) // expect: yield 1
result = fiber.call // expect: fiber 2
result = fiber.call() // expect: fiber 2
IO.print(result) // expect: yield 2
result = fiber.call // expect: fiber 3
result = fiber.call() // expect: fiber 3
IO.print(result) // expect: null
@@ -4,6 +4,6 @@ var a = new Fiber {
// 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 }
c.run
var b = new Fiber { a.run() }
var c = new Fiber { b.run() }
c.run()