diff --git a/src/build/asm/Assembler.go b/src/build/asm/Assembler.go index 6ad35c8..d539003 100644 --- a/src/build/asm/Assembler.go +++ b/src/build/asm/Assembler.go @@ -13,3 +13,12 @@ func (a *Assembler) Merge(b Assembler) { maps.Copy(a.Data, b.Data) a.Instructions = append(a.Instructions, b.Instructions...) } + +// SetData sets the data for the given label. +func (a *Assembler) SetData(label string, data []byte) { + if a.Data == nil { + a.Data = map[string][]byte{} + } + + a.Data[label] = data +} diff --git a/src/build/core/Function.go b/src/build/core/Function.go index b5c3c67..eef5bcd 100644 --- a/src/build/core/Function.go +++ b/src/build/core/Function.go @@ -27,7 +27,6 @@ func NewFunction(name string, file *fs.File, body token.List) *Function { state: state{ assembler: asm.Assembler{ Instructions: make([]asm.Instruction, 0, 32), - Data: map[string][]byte{}, }, cpu: cpu.CPU{ All: x64.AllRegisters, diff --git a/src/build/core/TokenToRegister.go b/src/build/core/TokenToRegister.go index afedcb5..7f81b17 100644 --- a/src/build/core/TokenToRegister.go +++ b/src/build/core/TokenToRegister.go @@ -40,8 +40,8 @@ func (f *Function) TokenToRegister(t token.Token, register cpu.Register) error { case token.String: f.count.data++ label := fmt.Sprintf("%s_data_%d", f.Name, f.count.data) - value := t.Text()[1 : len(t.Bytes)-1] - f.assembler.Data[label] = []byte(value) + value := t.Bytes[1 : len(t.Bytes)-1] + f.assembler.SetData(label, value) f.RegisterLabel(asm.MOVE, register, label) return nil