package codegen import ( "git.urbach.dev/cli/q/src/asm" ) // leave cleans up the stack and returns to the caller. func (f *Function) leave() { if f.IsExit { return } if f.stackSize > 0 { f.Assembler.Append(&asm.AddNumber{ Destination: f.CPU.StackPointer, Source: f.CPU.StackPointer, Number: int(f.stackSize), }) } if f.hasStackFrame || f.hasExternCalls { f.Assembler.Append(&asm.StackFrameEnd{FramePointer: f.needsFramePointer}) } if f.Preserved.Count() > 0 { f.Assembler.Append(&asm.Pop{Registers: f.Preserved.Slice()}) } f.Assembler.Append(&asm.Return{}) }