[IR] Add new method IrFileEntry.getLineAndColumnNumbers
Calling this method instead of sequence of `getLineNumber` and `getLineNumber` is faster because we eliminate one exess `getLineNumber` call.
This commit is contained in:
@@ -6,6 +6,7 @@
|
|||||||
package org.jetbrains.kotlin.backend.jvm
|
package org.jetbrains.kotlin.backend.jvm
|
||||||
|
|
||||||
import org.jetbrains.kotlin.ir.IrFileEntry
|
import org.jetbrains.kotlin.ir.IrFileEntry
|
||||||
|
import org.jetbrains.kotlin.ir.LineAndColumn
|
||||||
import org.jetbrains.kotlin.ir.SourceRangeInfo
|
import org.jetbrains.kotlin.ir.SourceRangeInfo
|
||||||
import org.jetbrains.kotlin.ir.UNDEFINED_OFFSET
|
import org.jetbrains.kotlin.ir.UNDEFINED_OFFSET
|
||||||
import org.jetbrains.kotlin.ir.declarations.IrClass
|
import org.jetbrains.kotlin.ir.declarations.IrClass
|
||||||
@@ -34,6 +35,9 @@ class MultifileFacadeFileEntry(
|
|||||||
|
|
||||||
override fun getColumnNumber(offset: Int): Int =
|
override fun getColumnNumber(offset: Int): Int =
|
||||||
error("Multifile facade doesn't support debug info: $className")
|
error("Multifile facade doesn't support debug info: $className")
|
||||||
|
|
||||||
|
override fun getLineAndColumnNumbers(offset: Int): LineAndColumn =
|
||||||
|
error("Multifile facade doesn't support debug info: $className")
|
||||||
}
|
}
|
||||||
|
|
||||||
fun IrFunction.isMultifileBridge(): Boolean =
|
fun IrFunction.isMultifileBridge(): Boolean =
|
||||||
|
|||||||
+6
-1
@@ -28,7 +28,6 @@ import org.jetbrains.kotlin.ir.types.IrTypeSystemContext
|
|||||||
import org.jetbrains.kotlin.ir.types.IrTypeSystemContextImpl
|
import org.jetbrains.kotlin.ir.types.IrTypeSystemContextImpl
|
||||||
import org.jetbrains.kotlin.ir.util.SymbolTable
|
import org.jetbrains.kotlin.ir.util.SymbolTable
|
||||||
import org.jetbrains.kotlin.ir.util.addChild
|
import org.jetbrains.kotlin.ir.util.addChild
|
||||||
import org.jetbrains.kotlin.js.config.JSConfigurationKeys
|
|
||||||
import org.jetbrains.kotlin.name.FqName
|
import org.jetbrains.kotlin.name.FqName
|
||||||
import org.jetbrains.kotlin.name.Name
|
import org.jetbrains.kotlin.name.Name
|
||||||
|
|
||||||
@@ -95,6 +94,9 @@ class WasmBackendContext(
|
|||||||
|
|
||||||
override fun getLineNumber(offset: Int) = UNDEFINED_LINE_NUMBER
|
override fun getLineNumber(offset: Int) = UNDEFINED_LINE_NUMBER
|
||||||
override fun getColumnNumber(offset: Int) = UNDEFINED_COLUMN_NUMBER
|
override fun getColumnNumber(offset: Int) = UNDEFINED_COLUMN_NUMBER
|
||||||
|
override fun getLineAndColumnNumbers(offset: Int): LineAndColumn {
|
||||||
|
return LineAndColumn(UNDEFINED_LINE_NUMBER, UNDEFINED_COLUMN_NUMBER)
|
||||||
|
}
|
||||||
}, internalPackageFragmentDescriptor, irModuleFragment).also {
|
}, internalPackageFragmentDescriptor, irModuleFragment).also {
|
||||||
irModuleFragment.files += it
|
irModuleFragment.files += it
|
||||||
}
|
}
|
||||||
@@ -167,6 +169,9 @@ class WasmBackendContext(
|
|||||||
|
|
||||||
override fun getLineNumber(offset: Int) = UNDEFINED_LINE_NUMBER
|
override fun getLineNumber(offset: Int) = UNDEFINED_LINE_NUMBER
|
||||||
override fun getColumnNumber(offset: Int) = UNDEFINED_COLUMN_NUMBER
|
override fun getColumnNumber(offset: Int) = UNDEFINED_COLUMN_NUMBER
|
||||||
|
override fun getLineAndColumnNumbers(offset: Int): LineAndColumn {
|
||||||
|
return LineAndColumn(UNDEFINED_LINE_NUMBER, UNDEFINED_COLUMN_NUMBER)
|
||||||
|
}
|
||||||
}, internalPackageFragmentDescriptor, module).also {
|
}, internalPackageFragmentDescriptor, module).also {
|
||||||
module.files += it
|
module.files += it
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -18,10 +18,7 @@ package org.jetbrains.kotlin.psi2ir.generators
|
|||||||
|
|
||||||
import org.jetbrains.kotlin.backend.common.CodegenUtil
|
import org.jetbrains.kotlin.backend.common.CodegenUtil
|
||||||
import org.jetbrains.kotlin.descriptors.impl.EmptyPackageFragmentDescriptor
|
import org.jetbrains.kotlin.descriptors.impl.EmptyPackageFragmentDescriptor
|
||||||
import org.jetbrains.kotlin.ir.IrFileEntry
|
import org.jetbrains.kotlin.ir.*
|
||||||
import org.jetbrains.kotlin.ir.PsiIrFileEntry
|
|
||||||
import org.jetbrains.kotlin.ir.SourceRangeInfo
|
|
||||||
import org.jetbrains.kotlin.ir.UNDEFINED_OFFSET
|
|
||||||
import org.jetbrains.kotlin.ir.declarations.DescriptorMetadataSource
|
import org.jetbrains.kotlin.ir.declarations.DescriptorMetadataSource
|
||||||
import org.jetbrains.kotlin.ir.declarations.IrModuleFragment
|
import org.jetbrains.kotlin.ir.declarations.IrModuleFragment
|
||||||
import org.jetbrains.kotlin.ir.declarations.impl.IrFileImpl
|
import org.jetbrains.kotlin.ir.declarations.impl.IrFileImpl
|
||||||
@@ -105,6 +102,7 @@ open class ModuleGenerator(override val context: GeneratorContext) : Generator {
|
|||||||
override fun getSourceRangeInfo(beginOffset: Int, endOffset: Int): SourceRangeInfo = TODO("Not yet implemented")
|
override fun getSourceRangeInfo(beginOffset: Int, endOffset: Int): SourceRangeInfo = TODO("Not yet implemented")
|
||||||
override fun getLineNumber(offset: Int): Int = TODO("Not yet implemented")
|
override fun getLineNumber(offset: Int): Int = TODO("Not yet implemented")
|
||||||
override fun getColumnNumber(offset: Int): Int = TODO("Not yet implemented")
|
override fun getColumnNumber(offset: Int): Int = TODO("Not yet implemented")
|
||||||
|
override fun getLineAndColumnNumbers(offset: Int): LineAndColumn = TODO("Not yet implemented")
|
||||||
}
|
}
|
||||||
val fakeFile = IrFileImpl(
|
val fakeFile = IrFileImpl(
|
||||||
fakeFileEntry,
|
fakeFileEntry,
|
||||||
|
|||||||
@@ -19,6 +19,8 @@ data class SourceRangeInfo(
|
|||||||
val endColumnNumber: Int
|
val endColumnNumber: Int
|
||||||
)
|
)
|
||||||
|
|
||||||
|
data class LineAndColumn(val line: Int, val column: Int)
|
||||||
|
|
||||||
interface IrFileEntry {
|
interface IrFileEntry {
|
||||||
val name: String
|
val name: String
|
||||||
val maxOffset: Int
|
val maxOffset: Int
|
||||||
@@ -26,4 +28,5 @@ interface IrFileEntry {
|
|||||||
fun getSourceRangeInfo(beginOffset: Int, endOffset: Int): SourceRangeInfo
|
fun getSourceRangeInfo(beginOffset: Int, endOffset: Int): SourceRangeInfo
|
||||||
fun getLineNumber(offset: Int): Int
|
fun getLineNumber(offset: Int): Int
|
||||||
fun getColumnNumber(offset: Int): Int
|
fun getColumnNumber(offset: Int): Int
|
||||||
|
fun getLineAndColumnNumbers(offset: Int): LineAndColumn
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -36,9 +36,17 @@ class PsiIrFileEntry(val psiFile: PsiFile) : IrFileEntry {
|
|||||||
return offset - lineStartOffsets[lineNumber]
|
return offset - lineStartOffsets[lineNumber]
|
||||||
}
|
}
|
||||||
|
|
||||||
|
override fun getLineAndColumnNumbers(offset: Int): LineAndColumn {
|
||||||
|
if (offset < 0) return LineAndColumn(UNDEFINED_LINE_NUMBER, UNDEFINED_COLUMN_NUMBER)
|
||||||
|
val lineNumber = getLineNumber(offset)
|
||||||
|
if (lineNumber < 0) return LineAndColumn(lineNumber, UNDEFINED_COLUMN_NUMBER)
|
||||||
|
val columnNumber = offset - lineStartOffsets[lineNumber]
|
||||||
|
return LineAndColumn(lineNumber, columnNumber)
|
||||||
|
}
|
||||||
|
|
||||||
override fun getSourceRangeInfo(beginOffset: Int, endOffset: Int): SourceRangeInfo =
|
override fun getSourceRangeInfo(beginOffset: Int, endOffset: Int): SourceRangeInfo =
|
||||||
SourceRangeInfo(
|
SourceRangeInfo(
|
||||||
filePath = getRecognizableName(),
|
filePath = name,
|
||||||
startOffset = beginOffset,
|
startOffset = beginOffset,
|
||||||
startLineNumber = getLineNumber(beginOffset),
|
startLineNumber = getLineNumber(beginOffset),
|
||||||
startColumnNumber = getColumnNumber(beginOffset),
|
startColumnNumber = getColumnNumber(beginOffset),
|
||||||
|
|||||||
@@ -277,7 +277,17 @@ class NaiveSourceBasedFileEntryImpl(
|
|||||||
if (offset == SYNTHETIC_OFFSET) return 0
|
if (offset == SYNTHETIC_OFFSET) return 0
|
||||||
if (offset < 0) return UNDEFINED_COLUMN_NUMBER
|
if (offset < 0) return UNDEFINED_COLUMN_NUMBER
|
||||||
val lineNumber = getLineNumber(offset)
|
val lineNumber = getLineNumber(offset)
|
||||||
return if (lineNumber < 0) UNDEFINED_COLUMN_NUMBER else offset - lineStartOffsets[lineNumber]
|
if (lineNumber < 0) return UNDEFINED_COLUMN_NUMBER
|
||||||
|
return offset - lineStartOffsets[lineNumber]
|
||||||
|
}
|
||||||
|
|
||||||
|
override fun getLineAndColumnNumbers(offset: Int): LineAndColumn {
|
||||||
|
if (offset == SYNTHETIC_OFFSET) return LineAndColumn(0, 0)
|
||||||
|
if (offset < 0) return LineAndColumn(UNDEFINED_LINE_NUMBER, UNDEFINED_COLUMN_NUMBER)
|
||||||
|
val lineNumber = getLineNumber(offset)
|
||||||
|
if (lineNumber < 0) return LineAndColumn(lineNumber, UNDEFINED_COLUMN_NUMBER)
|
||||||
|
val columnNumber = offset - lineStartOffsets[lineNumber]
|
||||||
|
return LineAndColumn(lineNumber, columnNumber)
|
||||||
}
|
}
|
||||||
|
|
||||||
override fun getSourceRangeInfo(beginOffset: Int, endOffset: Int): SourceRangeInfo =
|
override fun getSourceRangeInfo(beginOffset: Int, endOffset: Int): SourceRangeInfo =
|
||||||
|
|||||||
Reference in New Issue
Block a user