From b77f9dd5f8e91f17d3079d49a9716d721bdd4419 Mon Sep 17 00:00:00 2001 From: Karol Stasiak Date: Wed, 26 Dec 2018 15:28:57 +0100 Subject: [PATCH] Fix deduplication --- src/main/scala/millfork/output/Deduplicate.scala | 9 +++++++-- src/main/scala/millfork/output/MosDeduplicate.scala | 2 ++ src/main/scala/millfork/output/Z80Deduplicate.scala | 3 +++ 3 files changed, 12 insertions(+), 2 deletions(-) diff --git a/src/main/scala/millfork/output/Deduplicate.scala b/src/main/scala/millfork/output/Deduplicate.scala index 57629885..042ac656 100644 --- a/src/main/scala/millfork/output/Deduplicate.scala +++ b/src/main/scala/millfork/output/Deduplicate.scala @@ -144,7 +144,8 @@ abstract class Deduplicate[T <: AbstractCode](env: Environment, options: Compila def deduplicateIdenticalFunctions(segmentName: String, segContents: Map[String, Either[String, CodeAndAlignment[T]]]): Seq[(String, CompiledFunction[T])] = { var result = ListBuffer[(String, CompiledFunction[T])]() val identicalFunctions = segContents.flatMap{ - case (name, code) => code.toOption.map(c => name -> actualCode(name, c.code)) + case (name, code) => + code.toOption.map(c => name -> removePositionInfo(actualCode(name, c.code))) }.filter{ case (_, code) => checkIfLabelsAreInternal(code, code) }.groupBy{ @@ -294,6 +295,10 @@ abstract class Deduplicate[T <: AbstractCode](env: Environment, options: Compila def renumerateLabels(code: List[T], temporary: Boolean): List[T] + def removePositionInfo(line: T): T + + def removePositionInfo(code: List[T]): List[T] = code.map((t:T) => removePositionInfo(t)) + def checkIfLabelsAreInternal(snippet: List[T], code: List[T]): Boolean def bySegment(compiledFunctions: mutable.Map[String, CompiledFunction[T]]): Map[String, Map[String, Either[String, CodeAndAlignment[T]]]] = { @@ -319,7 +324,7 @@ abstract class Deduplicate[T <: AbstractCode](env: Environment, options: Compila val (good, rest2) = mutCode.span(l => isExtractable(l)) mutCode = rest2 if (good.nonEmpty) { - result += CodeChunk(functionName, cursor, cursor + good.length)(good) + result += CodeChunk(functionName, cursor, cursor + good.length)(removePositionInfo(good)) cursor += good.length } else { //println(s"Snippets in $functionName: $result") diff --git a/src/main/scala/millfork/output/MosDeduplicate.scala b/src/main/scala/millfork/output/MosDeduplicate.scala index 4504c57e..cec21510 100644 --- a/src/main/scala/millfork/output/MosDeduplicate.scala +++ b/src/main/scala/millfork/output/MosDeduplicate.scala @@ -112,4 +112,6 @@ class MosDeduplicate(env: Environment, options: CompilationOptions) extends Dedu useCount.values.forall(_ == 0) } + override def removePositionInfo(line: AssemblyLine): AssemblyLine = line.copy(source = None) + } diff --git a/src/main/scala/millfork/output/Z80Deduplicate.scala b/src/main/scala/millfork/output/Z80Deduplicate.scala index 5abce9d0..adb1cc8f 100644 --- a/src/main/scala/millfork/output/Z80Deduplicate.scala +++ b/src/main/scala/millfork/output/Z80Deduplicate.scala @@ -120,4 +120,7 @@ class Z80Deduplicate(env: Environment, options: CompilationOptions) extends Dedu } useCount.values.forall(_ == 0) } + + override def removePositionInfo(line: ZLine): ZLine = line.copy(source = None) + }