From f6edf311d773fec9b7dba257eea54228043113d9 Mon Sep 17 00:00:00 2001 From: Michael Bogdanov Date: Tue, 19 Apr 2016 15:52:05 +0300 Subject: [PATCH] Optimization in NestedSourceMapper --- .../org/jetbrains/kotlin/codegen/inline/SMAP2.kt | 15 +++++++++------ 1 file changed, 9 insertions(+), 6 deletions(-) diff --git a/compiler/backend/src/org/jetbrains/kotlin/codegen/inline/SMAP2.kt b/compiler/backend/src/org/jetbrains/kotlin/codegen/inline/SMAP2.kt index 7d4ca917642..c3c50c97569 100644 --- a/compiler/backend/src/org/jetbrains/kotlin/codegen/inline/SMAP2.kt +++ b/compiler/backend/src/org/jetbrains/kotlin/codegen/inline/SMAP2.kt @@ -30,20 +30,23 @@ open class NestedSourceMapper( override val parent: SourceMapper, val ranges: List, sourceInfo: SourceInfo ) : DefaultSourceMapper(sourceInfo) { - val visited = TIntIntHashMap() + val visitedLines = TIntIntHashMap() + + var lastVisitedRange: RangeMapping? = null override fun visitLineNumber(iv: MethodVisitor, lineNumber: Int, start: Label) { - val mappedLineNumber = visited.get(lineNumber) + val mappedLineNumber = visitedLines.get(lineNumber) if (mappedLineNumber > 0) { iv.visitLineNumber(mappedLineNumber, start) } else { - val findMappingIfExists = findMappingIfExists(lineNumber)!! - val sourceLineNumber = findMappingIfExists.mapDestToSource(lineNumber) - val visitLineNumber = parent.visitLineNumber(iv, start, sourceLineNumber, findMappingIfExists.parent!!.name, findMappingIfExists.parent!!.path) + val rangeForMapping = if (lastVisitedRange?.contains(lineNumber) ?: false) lastVisitedRange!! else findMappingIfExists(lineNumber)!! + val sourceLineNumber = rangeForMapping.mapDestToSource(lineNumber) + val visitLineNumber = parent.visitLineNumber(iv, start, sourceLineNumber, rangeForMapping.parent!!.name, rangeForMapping.parent!!.path) if (visitLineNumber > 0) { - visited.put(lineNumber, visitLineNumber) + visitedLines.put(lineNumber, visitLineNumber) } + lastVisitedRange = rangeForMapping } }