package optimizer import "strings" // passSelfAssignment removes lda X; sta X pairs where the store immediately // follows the load and neither line is a branch target. func passSelfAssignment(lines []asmLine) []asmLine { var result []asmLine skipNext := false for i := 0; i < len(lines); i++ { if skipNext { skipNext = false continue } line := lines[i] // Check for lda X; sta X if line.isCode && line.opcode == "lda" && !isImmediate(line.operand) && i+1 < len(lines) { next := lines[i+1] if next.isCode && next.opcode == "sta" && next.operand == line.operand { if !strings.Contains(line.operand, "+") { skipNext = true // skip sta on next iteration continue // skip lda } } } result = append(result, line) } return result }