private int getLineNumber ( int pc ) { LineNumberTable lnt = getMethod ( ) . getLineNumberTable ( ) ; if ( lnt == null ) { return pc ; } LineNumber [ ] lns = lnt . getLineNumberTable ( ) ; if ( lns == null ) { return pc ; } if ( pc > lns [ lns . length - 1 ] . getStartPC ( ) ) { return lns [ lns . length - 1 ] . getLineNumber ( ) ; } int lo = 0 ; int hi = lns . length - 2 ; int mid = 0 ; while ( lo <= hi ) { mid = ( lo + hi ) >>> 1 ; if ( pc < lns [ mid ] . getStartPC ( ) ) { hi = mid - 1 ; } else if ( pc >= lns [ mid + 1 ] . getStartPC ( ) ) { lo = mid + 1 ; } else { break ; } } return lns [ mid ] . getLineNumber ( ) ; }
returns the source line number for the pc or just the pc if the line number table doesn t exist