Temporary chapter name for all chapters
multi-digit-vm

The VM still grabs only the last byte of an i64.const line. Now that the line is i64.const 12 (or i64.const 12345), we need to parse the number after the "i64.const " prefix.

We already have parseNumber. It works on any []const u8 plus a position pointer. The number starts right after the "i64.const " prefix, so the start position is "i64.const ".len.

Replace this:

stack[stack_pointer] = @as(i64, line[line.len - 1]) - '0';

with a parseNumber call.

The other VM branches (i64.add, i64.sub, etc.) don't change at all -- they pop and push i64s and never touched the source bytes.

if (stringStartsWith(line, "i64.const ")) {
    var num_pos: usize = "i64.const ".len;
    stack[stack_pointer] = parseNumber(line, &num_pos);
    stack_pointer += 1;
}

parseNumber carrying its weight: the same helper we use to parse from the source input also parses from the WAT line. line is a plain []const u8 with no sentinel, which is exactly why parseNumber's loop condition has the position.* < buffer.len check.