Expand the abbreviated string type and its conversion builtin to the full
word everywhere:
str -> string (the immutable-string type)
str(x) -> str -> string(x) -> string (the stringify builtin;
what `{…}` interpolation calls)
Types are recognized by identifier, and llty maps both spellings to LLVM
`ptr`, so this is an atomic source rewrite: type annotations, the Ludic
type tags, the builtin name/dispatch, and the interpolation desugar, plus
the grammars, LSP, docs (type-str -> type-string, fn-str -> fn-string), and
inventory. int/bool stay (universally accepted, like Math).
Reseeded; C-free fixpoint holds; all suites green (45/24/29); site + check.py OK.
Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
939 B
939 B
| id | name | category | kind | tokens | sig | tip | order | ns | member |
|---|---|---|---|---|---|---|---|---|---|
| text-slice | Text.slice | text | namespace-method | Text.slice | Text.slice(s, a, b) -> string | A substring covering bytes [a, b). | 2 | Text | slice |
Returns a fresh string of the bytes from index a up to but not including b — the half-open range [a, b), so Text.slice("hello world", 0, 5) is "hello". It is the call form of the s[a..b] slice syntax and allocates a new string. Use it to cut a fixed-width field, drop a prefix, or take the first few characters of a name.
Parameters:
s— the source stringa— the start byte index (inclusive)b— the end byte index (exclusive)
program FirstWord {
var line: string = "hello world"
handler Split phase Update {
let space = Text.index_of(line, " ") # 5
let word = Text.slice(line, 0, space) # "hello"
}
}