feat: replace block syntax with fn keyword for function literals across compiler and tests

Rename `block` parsing rule to `fn` by adding TOKEN_FN token and function prefix rule, removing the old block prefix from TOKEN_LEFT_BRACE. Update compiler.c to replace `block()` with `function()` and add fn equality primitives (fn_eqeq, fn_bangeq) in primitives.c. Migrate test files: rename block_call.wren to fn_call.wren, block_syntax.wren to fn_syntax.wren, and replace `{ ... }` with `fn { ... }` or `fn expr` syntax. Remove obsolete bool_equality.wren test.
This commit is contained in:
Bob Nystrom
2013-11-06 15:47:47 +00:00
parent cae70590d8
commit 46977dceea
9 changed files with 98 additions and 63 deletions
-3
View File
@@ -1,3 +0,0 @@
io.write({ 123 }.call) // expect: 123
// TODO(bob): Arguments.
-23
View File
@@ -1,23 +0,0 @@
io.write(true == true) // expect: true
io.write(true == false) // expect: false
io.write(false == true) // expect: false
io.write(false == false) // expect: true
// Not equal to other types.
io.write(true == 1) // expect: false
io.write(false == 0) // expect: false
io.write(true == "true") // expect: false
io.write(false == "false") // expect: false
io.write(false == "") // expect: false
io.write(true != true) // expect: false
io.write(true != false) // expect: true
io.write(false != true) // expect: true
io.write(false != false) // expect: false
// Not equal to other types.
io.write(true != 1) // expect: true
io.write(false != 0) // expect: true
io.write(true != "true") // expect: true
io.write(false != "false") // expect: true
io.write(false != "") // expect: true
+3
View File
@@ -0,0 +1,3 @@
io.write((fn 123).call) // expect: 123
// TODO(bob): Arguments.
+16
View File
@@ -0,0 +1,16 @@
// Not structurally equal.
io.write((fn 123) == (fn 123)) // expect: false
io.write((fn 123) != (fn 123)) // expect: true
// Not equal to other types.
io.write((fn 123) == 1) // expect: false
io.write((fn 123) == false) // expect: false
io.write((fn 123) == "fn 123") // expect: false
io.write((fn 123) != 1) // expect: true
io.write((fn 123) != false) // expect: true
io.write((fn 123) != "fn 123") // expect: true
// Equal by identity.
var f = fn 123
io.write(f == f) // expect: true
io.write(f != f) // expect: false
+11 -9
View File
@@ -1,23 +1,25 @@
// Single line.
{ io.write("ok") }.call // expect: ok
// Single expression body.
(fn io.write("ok")).call // expect: ok
// No trailing newline.
{
io.write("ok") }.call // expect: ok
// TODO(bob): Precedence of fn body.
// Trailing newline.
{
// Curly body.
fn {
io.write("ok") // expect: ok
}.call
// No trailing newline.
fn {
io.write("ok") }.call // expect: ok
// Multiple expressions.
{
fn {
io.write("1") // expect: 1
io.write("2") // expect: 2
}.call
// Extra newlines.
{
fn {
io.write("1") // expect: 1
+2 -2
View File
@@ -1,3 +1,3 @@
{
fn {
io.write(notDefined) // expect error
}
}.call