Add string literals to the compiler. When c_factor() sees ", it needs to:
1. Read the string bytes
2. Store them in a string table (a compile-time data structure)
3. Emit i64.const with the packed (addr, len) value
The string table will later become WAT (data ...) sections.
var str_table: [256][]const u8 = undefined;
var str_addrs: [256]usize = undefined;
var str_count: usize = 0;
var str_next_addr: usize = 60000;
In c_factor():
if (cur() == '"') {
pos += 1;
const start: usize = pos;
while (cur() != '"' and cur() != 0) { pos += 1; }
const text: []const u8 = source[start..pos];
if (cur() == '"') { pos += 1; skip(); }
// Add to string table
const addr: usize = str_next_addr;
str_table[str_count] = text;
str_addrs[str_count] = addr;
str_count += 1;
str_next_addr += text.len;
const packed: i64 = @as(i64, @intCast(addr)) * 65536 + @as(i64, @intCast(text.len));
emit_const(packed);
return;
}