'visitLineNumber' replaced with 'mapLineNumber' in SourceMapper

This commit is contained in:
Michael Bogdanov
2016-04-20 12:52:02 +03:00
parent c70e1c6065
commit 2cec779c14
2 changed files with 18 additions and 23 deletions
@@ -19,7 +19,6 @@ package org.jetbrains.kotlin.codegen.inline;
import org.jetbrains.annotations.NotNull; import org.jetbrains.annotations.NotNull;
import org.jetbrains.org.objectweb.asm.Label; import org.jetbrains.org.objectweb.asm.Label;
import org.jetbrains.org.objectweb.asm.MethodVisitor; import org.jetbrains.org.objectweb.asm.MethodVisitor;
import org.jetbrains.org.objectweb.asm.Opcodes;
import org.jetbrains.org.objectweb.asm.commons.InstructionAdapter; import org.jetbrains.org.objectweb.asm.commons.InstructionAdapter;
import java.util.ArrayList; import java.util.ArrayList;
@@ -90,11 +89,9 @@ public class InlineAdapter extends InstructionAdapter {
@Override @Override
public void visitLineNumber(int line, Label start) { public void visitLineNumber(int line, Label start) {
if (InlineCodegenUtil.GENERATE_SMAP) { if (InlineCodegenUtil.GENERATE_SMAP) {
sourceMapper.visitLineNumber(mv, line, start); line = sourceMapper.mapLineNumber(line);
}
else {
super.visitLineNumber(line, start);
} }
super.visitLineNumber(line, start);
} }
@Override @Override
@@ -92,19 +92,20 @@ open class NestedSourceMapper(
var lastVisitedRange: RangeMapping? = null var lastVisitedRange: RangeMapping? = null
override fun visitLineNumber(iv: MethodVisitor, lineNumber: Int, start: Label) { override fun mapLineNumber(lineNumber: Int): Int {
val mappedLineNumber = visitedLines.get(lineNumber) val mappedLineNumber = visitedLines.get(lineNumber)
if (mappedLineNumber > 0) { if (mappedLineNumber > 0) {
iv.visitLineNumber(mappedLineNumber, start) return mappedLineNumber
} else { } else {
val rangeForMapping = if (lastVisitedRange?.contains(lineNumber) ?: false) lastVisitedRange!! else findMappingIfExists(lineNumber)!! val rangeForMapping = if (lastVisitedRange?.contains(lineNumber) ?: false) lastVisitedRange!! else findMappingIfExists(lineNumber)!!
val sourceLineNumber = rangeForMapping.mapDestToSource(lineNumber) val sourceLineNumber = rangeForMapping.mapDestToSource(lineNumber)
val visitLineNumber = parent.visitLineNumber(iv, start, sourceLineNumber, rangeForMapping.parent!!.name, rangeForMapping.parent!!.path) val newLineNumber = parent.mapLineNumber(sourceLineNumber, rangeForMapping.parent!!.name, rangeForMapping.parent!!.path)
if (visitLineNumber > 0) { if (newLineNumber > 0) {
visitedLines.put(lineNumber, visitLineNumber) visitedLines.put(lineNumber, newLineNumber)
} }
lastVisitedRange = rangeForMapping lastVisitedRange = rangeForMapping
return newLineNumber
} }
} }
@@ -127,13 +128,13 @@ open class InlineLambdaSourceMapper(
} }
} }
override fun visitLineNumber(iv: MethodVisitor, lineNumber: Int, start: Label) { override fun mapLineNumber(lineNumber: Int): Int {
if (ranges.firstOrNull()?.contains(lineNumber) ?: false) { if (ranges.firstOrNull()?.contains(lineNumber) ?: false) {
//don't remap origin lambda line numbers //don't remap origin lambda line numbers
iv.visitLineNumber(lineNumber, start) return lineNumber
} }
else { else {
super.visitLineNumber(iv, lineNumber, start) return super.mapLineNumber(lineNumber)
} }
} }
} }
@@ -143,11 +144,11 @@ interface SourceMapper {
val parent: SourceMapper? val parent: SourceMapper?
get() = null get() = null
fun visitLineNumber(iv: MethodVisitor, lineNumber: Int, start: Label) { fun mapLineNumber(lineNumber: Int): Int {
throw UnsupportedOperationException("fail") throw UnsupportedOperationException("fail")
} }
fun visitLineNumber(iv: MethodVisitor, start: Label, source: Int, sourceName: String, sourcePath:String): Int { fun mapLineNumber(source: Int, sourceName: String, sourcePath: String): Int {
throw UnsupportedOperationException("fail") throw UnsupportedOperationException("fail")
} }
@@ -173,9 +174,7 @@ object IdenticalSourceMapper : SourceMapper {
override val parent: SourceMapper? override val parent: SourceMapper?
get() = null get() = null
override fun visitLineNumber(iv: MethodVisitor, lineNumber: Int, start: Label) { override fun mapLineNumber(lineNumber: Int) = lineNumber
iv.visitLineNumber(lineNumber, start)
}
} }
class CallSiteMarker(val lineNumber: Int) class CallSiteMarker(val lineNumber: Int)
@@ -226,21 +225,20 @@ open class DefaultSourceMapper(val sourceInfo: SourceInfo) : SourceMapper {
return fileMappings.getOrPut(createKey(name, path)) { RawFileMapping(name, path) } return fileMappings.getOrPut(createKey(name, path)) { RawFileMapping(name, path) }
} }
override fun visitLineNumber(iv: MethodVisitor, lineNumber: Int, start: Label) { override fun mapLineNumber(lineNumber: Int): Int {
if (lineNumber < 0) { if (lineNumber < 0) {
//no source information, so just skip this linenumber //no source information, so just skip this linenumber
return return - 1
} }
iv.visitLineNumber(lineNumber, start) return lineNumber
} }
override fun visitLineNumber(iv: MethodVisitor, start: Label, source: Int, sourceName: String, sourcePath: String): Int { override fun mapLineNumber(source: Int, sourceName: String, sourcePath: String): Int {
if (source < 0) { if (source < 0) {
//no source information, so just skip this linenumber //no source information, so just skip this linenumber
return -1 return -1
} }
val mappedLineIndex = createMapping(getOrRegisterNewSource(sourceName, sourcePath), source) val mappedLineIndex = createMapping(getOrRegisterNewSource(sourceName, sourcePath), source)
iv.visitLineNumber(mappedLineIndex, start)
return mappedLineIndex return mappedLineIndex
} }