# V3 step 6 — QBE harden + unicode (planned) Status: not started. ## Scope - Close every construct gap between "test language" and "compiler language": procedure types + indirect calls (needs QBE `call` through register + frame design spike first), `LONGINT` quads, set ops full lowering, `WITH`-field `VAR` actuals. - Unicode (locked): `UCHAR` 32-bit codepoint, UString = `LONGCARD` count + codepoints, `U'..'/U".."` literals, strict-RFC3629 `LexUString` (bad bytes → lex error 234), `UCHR/CHR8/UORD`, `Utf8` syslib shared by lexer + output libs. ## Acceptance (planned) - `U'é'`→`w 233`, overlong/surrogate/`>10FFFF`/truncated → 234, `CHR8(U'€')` traps, UString index/assign/HIGH = array rules, round-trip byte-identity; suite green. ## Files (planned) - `compiler/src/M2.atg` (`ustring` token, grown `LexString` buffer); `runtime/syslib/Utf8`; `QbeGen` UString `data` emission. - This file filled in on landing.