@@ -376,6 +376,8 @@ trait BCodeSkelBuilder extends BCodeHelpers {
376
376
var shouldEmitCleanup = false
377
377
// line numbers
378
378
var lastEmittedLineNr = - 1
379
+ // by real line number we mean line number that is not pointing to virtual lines added by inlined calls
380
+ var lastRealLineNr = - 1
379
381
380
382
object bc extends JCodeMethodN {
381
383
override def jmethod = PlainSkelBuilder .this .mnode
@@ -552,19 +554,27 @@ trait BCodeSkelBuilder extends BCodeHelpers {
552
554
case labnode : asm.tree.LabelNode => (labnode.getLabel == lbl);
553
555
case _ => false } )
554
556
}
557
+
558
+ def emitNr (nr : Int ): Unit =
559
+ if nr != lastEmittedLineNr then
560
+ lastEmittedLineNr = nr
561
+ lastInsn match
562
+ case lnn : asm.tree.LineNumberNode =>
563
+ // overwrite previous landmark as no instructions have been emitted for it
564
+ lnn.line = nr
565
+ case _ =>
566
+ mnode.visitLineNumber(nr, currProgramPoint())
567
+
555
568
def lineNumber (tree : Tree ): Unit = {
556
- if (! emitLines || ! tree.span.exists) return ;
557
- val nr = if (tree.source != cunit.source) sourceMap.lineFor(tree.sourcePos) else Some (ctx.source.offsetToLine(tree.span.point) + 1 )
558
- nr match
559
- case Some (nr) if nr != lastEmittedLineNr =>
560
- lastEmittedLineNr = nr
561
- lastInsn match
562
- case lnn : asm.tree.LineNumberNode =>
563
- // overwrite previous landmark as no instructions have been emitted for it
564
- lnn.line = nr
565
- case _ =>
566
- mnode.visitLineNumber(nr, currProgramPoint())
567
- case _ => ()
569
+ if ! emitLines || ! tree.span.exists then return ;
570
+ if tree.source != cunit.source then
571
+ sourceMap.lineFor(tree.sourcePos, lastRealLineNr) match
572
+ case Some (nr) => emitNr(nr)
573
+ case None => ()
574
+ else
575
+ val nr = ctx.source.offsetToLine(tree.span.point) + 1
576
+ lastRealLineNr = nr
577
+ emitNr(nr)
568
578
}
569
579
570
580
// on entering a method
0 commit comments