Feeding the Snake
compiler-strings

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;
    }