Previously, the code size had to be calculated before code generation
phase because raw pointers to instruction were used to determine proper
jump offsets. It introduced unnecessary coupling between parser and
generator as well as complicated the parser because it had to know in
advance what instructions will be generated.
The solution is the dynamic reallocation of the code during generation
phase and the usage of relative offsets when calculating jump instructions.