Add lexer support for `TOKEN_INTERPOLATION` to split string literals at interpolation points, introduce `MAX_INTERPOLATION_NESTING` limit of 8, and compile interpolated strings by emitting calls to `String.interpolate_()`. Optimize list and map literal construction with new `addCore_` primitives to reduce stack churn. Update `String`, `List`, and `Map` `toString` methods in core library to use interpolation syntax, and migrate all benchmark and test files from explicit concatenation to interpolated strings.
43 lines
778 B
Plaintext
43 lines
778 B
Plaintext
class Api {
|
|
static noParams {
|
|
System.print("noParams")
|
|
}
|
|
|
|
static zero() {
|
|
System.print("zero")
|
|
}
|
|
|
|
static one(one) {
|
|
System.print("one %(one)")
|
|
}
|
|
|
|
static two(one, two) {
|
|
// Don't print null bytes.
|
|
if (two is String && two.bytes.contains(0)) {
|
|
two = two.bytes.toList
|
|
}
|
|
|
|
System.print("two %(one) %(two)")
|
|
}
|
|
|
|
static getValue(value) {
|
|
// Return a new value if we aren't given one.
|
|
if (value == null) return ["a", "b"]
|
|
|
|
// Otherwise print it.
|
|
System.print(value)
|
|
}
|
|
}
|
|
|
|
// expect: noParams
|
|
// expect: zero
|
|
// expect: one 1
|
|
// expect: two 1 2
|
|
|
|
// expect: two true false
|
|
// expect: two 1.2 3.4
|
|
// expect: two 3 4
|
|
// expect: two string another
|
|
// expect: two null [a, b]
|
|
// expect: two str [98, 0, 121, 0, 116, 0, 101]
|