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>
23 lines
950 B
Text
23 lines
950 B
Text
program T {
|
|
function wide(a: long, b: int) -> long { return a * b } # int arg widens to i64
|
|
|
|
entry {
|
|
let big: long = 1000000 # int literal widens to a long
|
|
let sq = big * big # i64 multiply -> 10^12, no overflow
|
|
print(sq) # 1000000000000
|
|
print(sq + 1) # 1000000000001
|
|
var acc: long = 0
|
|
acc += sq
|
|
acc += 5 # compound assign in i64
|
|
print(acc) # 1000000000005
|
|
print(wide(big, 3000000)) # 3000000000000 (> i32 max)
|
|
let x: long = big * 3
|
|
let y = big * 2 # inferred long
|
|
print(x > y) # 1
|
|
print(y < x) # 1
|
|
print(x == x) # 1
|
|
print(0 - sq) # -1000000000000 (unary negate stays 64-bit)
|
|
print(big) # 1000000
|
|
print(Text.length(string(sq))) # 13 — string(long) renders all 13 digits
|
|
}
|
|
}
|