diff --git a/src/asm/Assembler.go b/src/asm/Assembler.go index db9d7b6..eb4d53e 100644 --- a/src/asm/Assembler.go +++ b/src/asm/Assembler.go @@ -73,11 +73,14 @@ func (a *Assembler) Compile(b *build.Build) (code []byte, data []byte) { // Merge combines the contents of this assembler with another one. func (a *Assembler) Merge(b *Assembler) { - maps.Copy(a.Data, b.Data) + skip := 0 - for _, instr := range b.Instructions { - a.Append(instr) + for a.Skip(b.Instructions[skip]) { + skip++ } + + a.Instructions = append(a.Instructions, b.Instructions[skip:]...) + maps.Copy(a.Data, b.Data) } // SetData sets the data for the given label. diff --git a/src/linker/WriteFile.go b/src/linker/WriteFile.go index 0cf74b4..68f8de3 100644 --- a/src/linker/WriteFile.go +++ b/src/linker/WriteFile.go @@ -22,7 +22,7 @@ func WriteFile(executable string, b *build.Build, env *core.Environment) error { traversed := make(map[*core.Function]bool, len(env.Functions)) final := asm.Assembler{ - Instructions: make([]asm.Instruction, 0, 8), + Instructions: make([]asm.Instruction, 0, 32), Data: make(data.Data, 32), }