feat: rename IO.write to IO.print and add Unicode escape support in strings
Rename the IO.write method to IO.print, which now prints without a trailing newline, and add a new IO.print method that appends a newline after output. Update all benchmark, example, and test files to use IO.print instead of IO.write. Additionally, implement Unicode escape sequence parsing in the compiler's string tokenizer, supporting \uXXXX and \u{...} syntax with proper UTF-8 encoding for code points up to U+10FFFF.
This commit is contained in:
@@ -1,2 +1,2 @@
|
||||
var f = fn {}
|
||||
IO.write(f.call) // expect: null
|
||||
IO.print(f.call) // expect: null
|
||||
|
||||
+10
-10
@@ -1,16 +1,16 @@
|
||||
// Not structurally equal.
|
||||
IO.write((fn 123) == (fn 123)) // expect: false
|
||||
IO.write((fn 123) != (fn 123)) // expect: true
|
||||
IO.print((fn 123) == (fn 123)) // expect: false
|
||||
IO.print((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
|
||||
IO.print((fn 123) == 1) // expect: false
|
||||
IO.print((fn 123) == false) // expect: false
|
||||
IO.print((fn 123) == "fn 123") // expect: false
|
||||
IO.print((fn 123) != 1) // expect: true
|
||||
IO.print((fn 123) != false) // expect: true
|
||||
IO.print((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
|
||||
IO.print(f == f) // expect: true
|
||||
IO.print(f != f) // expect: false
|
||||
|
||||
@@ -1,50 +1,50 @@
|
||||
var f0 = fn 0
|
||||
IO.write(f0.call) // expect: 0
|
||||
IO.print(f0.call) // expect: 0
|
||||
|
||||
var f1 = fn(a) a
|
||||
IO.write(f1.call(1)) // expect: 1
|
||||
IO.print(f1.call(1)) // expect: 1
|
||||
|
||||
var f2 = fn(a, b) a + b
|
||||
IO.write(f2.call(1, 2)) // expect: 3
|
||||
IO.print(f2.call(1, 2)) // expect: 3
|
||||
|
||||
var f3 = fn(a, b, c) a + b + c
|
||||
IO.write(f3.call(1, 2, 3)) // expect: 6
|
||||
IO.print(f3.call(1, 2, 3)) // expect: 6
|
||||
|
||||
var f4 = fn(a, b, c, d) a + b + c + d
|
||||
IO.write(f4.call(1, 2, 3, 4)) // expect: 10
|
||||
IO.print(f4.call(1, 2, 3, 4)) // expect: 10
|
||||
|
||||
var f5 = fn(a, b, c, d, e) a + b + c + d + e
|
||||
IO.write(f5.call(1, 2, 3, 4, 5)) // expect: 15
|
||||
IO.print(f5.call(1, 2, 3, 4, 5)) // expect: 15
|
||||
|
||||
var f6 = fn(a, b, c, d, e, f) a + b + c + d + e + f
|
||||
IO.write(f6.call(1, 2, 3, 4, 5, 6)) // expect: 21
|
||||
IO.print(f6.call(1, 2, 3, 4, 5, 6)) // expect: 21
|
||||
|
||||
var f7 = fn(a, b, c, d, e, f, g) a + b + c + d + e + f + g
|
||||
IO.write(f7.call(1, 2, 3, 4, 5, 6, 7)) // expect: 28
|
||||
IO.print(f7.call(1, 2, 3, 4, 5, 6, 7)) // expect: 28
|
||||
|
||||
var f8 = fn(a, b, c, d, e, f, g, h) a + b + c + d + e + f + g + h
|
||||
IO.write(f8.call(1, 2, 3, 4, 5, 6, 7, 8)) // expect: 36
|
||||
IO.print(f8.call(1, 2, 3, 4, 5, 6, 7, 8)) // expect: 36
|
||||
|
||||
var f9 = fn(a, b, c, d, e, f, g, h, i) a + b + c + d + e + f + g + h + i
|
||||
IO.write(f9.call(1, 2, 3, 4, 5, 6, 7, 8, 9)) // expect: 45
|
||||
IO.print(f9.call(1, 2, 3, 4, 5, 6, 7, 8, 9)) // expect: 45
|
||||
|
||||
var f10 = fn(a, b, c, d, e, f, g, h, i, j) a + b + c + d + e + f + g + h + i + j
|
||||
IO.write(f10.call(1, 2, 3, 4, 5, 6, 7, 8, 9, 10)) // expect: 55
|
||||
IO.print(f10.call(1, 2, 3, 4, 5, 6, 7, 8, 9, 10)) // expect: 55
|
||||
|
||||
var f11 = fn(a, b, c, d, e, f, g, h, i, j, k) a + b + c + d + e + f + g + h + i + j + k
|
||||
IO.write(f11.call(1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11)) // expect: 66
|
||||
IO.print(f11.call(1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11)) // expect: 66
|
||||
|
||||
var f12 = fn(a, b, c, d, e, f, g, h, i, j, k, l) a + b + c + d + e + f + g + h + i + j + k + l
|
||||
IO.write(f12.call(1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12)) // expect: 78
|
||||
IO.print(f12.call(1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12)) // expect: 78
|
||||
|
||||
var f13 = fn(a, b, c, d, e, f, g, h, i, j, k, l, m) a + b + c + d + e + f + g + h + i + j + k + l + m
|
||||
IO.write(f13.call(1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13)) // expect: 91
|
||||
IO.print(f13.call(1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13)) // expect: 91
|
||||
|
||||
var f14 = fn(a, b, c, d, e, f, g, h, i, j, k, l, m, n) a + b + c + d + e + f + g + h + i + j + k + l + m + n
|
||||
IO.write(f14.call(1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14)) // expect: 105
|
||||
IO.print(f14.call(1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14)) // expect: 105
|
||||
|
||||
var f15 = fn(a, b, c, d, e, f, g, h, i, j, k, l, m, n, o) a + b + c + d + e + f + g + h + i + j + k + l + m + n + o
|
||||
IO.write(f15.call(1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15)) // expect: 120
|
||||
IO.print(f15.call(1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15)) // expect: 120
|
||||
|
||||
var f16 = fn(a, b, c, d, e, f, g, h, i, j, k, l, m, n, o, p) a + b + c + d + e + f + g + h + i + j + k + l + m + n + o + p
|
||||
IO.write(f16.call(1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16)) // expect: 136
|
||||
IO.print(f16.call(1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16)) // expect: 136
|
||||
|
||||
@@ -1,31 +1,31 @@
|
||||
// Single expression body.
|
||||
(fn IO.write("ok")).call // expect: ok
|
||||
(fn IO.print("ok")).call // expect: ok
|
||||
|
||||
// TODO: Precedence of fn body.
|
||||
|
||||
// Curly body.
|
||||
fn {
|
||||
IO.write("ok") // expect: ok
|
||||
IO.print("ok") // expect: ok
|
||||
}.call
|
||||
|
||||
// No trailing newline.
|
||||
fn {
|
||||
IO.write("ok") }.call // expect: ok
|
||||
IO.print("ok") }.call // expect: ok
|
||||
|
||||
// Multiple expressions.
|
||||
fn {
|
||||
IO.write("1") // expect: 1
|
||||
IO.write("2") // expect: 2
|
||||
IO.print("1") // expect: 1
|
||||
IO.print("2") // expect: 2
|
||||
}.call
|
||||
|
||||
// Extra newlines.
|
||||
fn {
|
||||
|
||||
|
||||
IO.write("1") // expect: 1
|
||||
IO.print("1") // expect: 1
|
||||
|
||||
|
||||
IO.write("2") // expect: 2
|
||||
IO.print("2") // expect: 2
|
||||
|
||||
|
||||
}.call
|
||||
|
||||
@@ -1,4 +1,4 @@
|
||||
IO.write((fn 0) is Function) // expect: true
|
||||
IO.write((fn 0) is Object) // expect: true
|
||||
IO.write((fn 0) is String) // expect: false
|
||||
IO.write((fn 0).type == Function) // expect: true
|
||||
IO.print((fn 0) is Function) // expect: true
|
||||
IO.print((fn 0) is Object) // expect: true
|
||||
IO.print((fn 0) is String) // expect: false
|
||||
IO.print((fn 0).type == Function) // expect: true
|
||||
|
||||
Reference in New Issue
Block a user