@@ -519,15 +519,15 @@ class KotlinFileExtractor(val logger: FileLogger, val tw: FileTrapWriter, val fi
519519 tw.writeStmts_block(id, parent, idx, callable)
520520 tw.writeHasLocation(id, locId)
521521 for ((sIdx, stmt) in b.statements.withIndex()) {
522- extractStatement(stmt, callable, irCallable, id, sIdx)
522+ extractStatement(stmt, irCallable, id, sIdx)
523523 }
524524 }
525525
526526 fun useVariable (v : IrVariable ): Label <out DbLocalvar > {
527527 return tw.getVariableLabelFor<DbLocalvar >(v)
528528 }
529529
530- fun extractVariable (v : IrVariable , callable : Label < out DbCallable >, irCallable : IrFunction ) {
530+ fun extractVariable (v : IrVariable , irCallable : IrFunction ) {
531531 val id = useVariable(v)
532532 val locId = tw.getLocation(v)
533533 val typeId = useType(v.type)
@@ -538,17 +538,17 @@ class KotlinFileExtractor(val logger: FileLogger, val tw: FileTrapWriter, val fi
538538 tw.writeHasLocation(id, locId)
539539 val i = v.initializer
540540 if (i != null ) {
541- extractExpression(i, callable, irCallable, decId, 0 )
541+ extractExpression(i, irCallable, decId, 0 )
542542 }
543543 }
544544
545- fun extractStatement (s : IrStatement , callable : Label < out DbCallable >, irCallable : IrFunction , parent : Label <out DbStmtparent >, idx : Int ) {
545+ fun extractStatement (s : IrStatement , irCallable : IrFunction , parent : Label <out DbStmtparent >, idx : Int ) {
546546 when (s) {
547547 is IrExpression -> {
548- extractExpression(s, callable, irCallable, parent, idx)
548+ extractExpression(s, irCallable, parent, idx)
549549 }
550550 is IrVariable -> {
551- extractVariable(s, callable, irCallable)
551+ extractVariable(s, irCallable)
552552 }
553553 else -> {
554554 logger.warnElement(Severity .ErrorSevere , " Unrecognised IrStatement: " + s.javaClass, s)
@@ -571,7 +571,7 @@ class KotlinFileExtractor(val logger: FileLogger, val tw: FileTrapWriter, val fi
571571 }
572572 }
573573
574- fun extractCall (c : IrCall , callable : Label < out DbCallable >, irCallable : IrFunction , parent : Label <out DbExprparent >, idx : Int ) {
574+ fun extractCall (c : IrCall , irCallable : IrFunction , parent : Label <out DbExprparent >, idx : Int ) {
575575 val exprId: Label <out DbExpr > = when {
576576 c.origin == PLUS -> {
577577 val id = tw.getFreshIdLabel<DbAddexpr >()
@@ -657,12 +657,12 @@ class KotlinFileExtractor(val logger: FileLogger, val tw: FileTrapWriter, val fi
657657 val dr = c.dispatchReceiver
658658 val offset = if (dr == null ) 0 else 1
659659 if (dr != null ) {
660- extractExpression(dr, callable, irCallable, exprId, 0 ) // todo: should this be at index -1 instead?
660+ extractExpression(dr, irCallable, exprId, 0 ) // todo: should this be at index -1 instead?
661661 }
662662 for (i in 0 until c.valueArgumentsCount) {
663663 val arg = c.getValueArgument(i)
664664 if (arg != null ) {
665- extractExpression(arg, callable, irCallable, exprId, i + offset)
665+ extractExpression(arg, irCallable, exprId, i + offset)
666666 }
667667 }
668668
@@ -673,7 +673,6 @@ class KotlinFileExtractor(val logger: FileLogger, val tw: FileTrapWriter, val fi
673673 e : IrFunctionAccessExpression ,
674674 parent : Label <out DbExprparent >,
675675 idx : Int ,
676- callable : Label <out DbCallable >,
677676 irCallable : IrFunction
678677 ) {
679678 val id = tw.getFreshIdLabel<DbNewexpr >()
@@ -686,20 +685,21 @@ class KotlinFileExtractor(val logger: FileLogger, val tw: FileTrapWriter, val fi
686685 for (i in 0 until e.valueArgumentsCount) {
687686 val arg = e.getValueArgument(i)
688687 if (arg != null ) {
689- extractExpression(arg, callable, irCallable, id, i)
688+ extractExpression(arg, irCallable, id, i)
690689 }
691690 }
692691 val dr = e.dispatchReceiver
693692 if (dr != null ) {
694- extractExpression(dr, callable, irCallable, id, - 3 )
693+ extractExpression(dr, irCallable, id, - 3 )
695694 }
696695
697696 // todo: type arguments at index -4, -5, ...
698697 }
699698
700699 private val loopIdMap: MutableMap <IrLoop , Label <out DbKtloopstmt >> = mutableMapOf ()
701700
702- fun extractExpression (e : IrExpression , callable : Label <out DbCallable >, irCallable : IrFunction , parent : Label <out DbExprparent >, idx : Int ) {
701+ fun extractExpression (e : IrExpression , irCallable : IrFunction , parent : Label <out DbExprparent >, idx : Int ) {
702+ val callableLabel = useFunction(irCallable)
703703 when (e) {
704704 is IrInstanceInitializerCall -> {
705705 // todo: how do we want to handle this?
@@ -713,6 +713,7 @@ class KotlinFileExtractor(val logger: FileLogger, val tw: FileTrapWriter, val fi
713713 val currentClass = (irCallable as IrDeclaration ).parent as IrClass
714714
715715 val id: Label <out DbStmt >
716+ val callable = useFunction(irCallable)
716717 if (delegatingClass != currentClass) {
717718 id = tw.getFreshIdLabel<DbSuperconstructorinvocationstmt >()
718719 tw.writeStmts_superconstructorinvocationstmt(id, parent, idx, callable)
@@ -730,23 +731,23 @@ class KotlinFileExtractor(val logger: FileLogger, val tw: FileTrapWriter, val fi
730731 for (i in 0 until e.valueArgumentsCount) {
731732 val arg = e.getValueArgument(i)
732733 if (arg != null ) {
733- extractExpression(arg, callable, irCallable, id, i)
734+ extractExpression(arg, irCallable, id, i)
734735 }
735736 }
736737 val dr = e.dispatchReceiver
737738 if (dr != null ) {
738- extractExpression(dr, callable, irCallable, id, - 1 )
739+ extractExpression(dr, irCallable, id, - 1 )
739740 }
740741
741742 // todo: type arguments at index -2, -3, ...
742743 }
743744 is IrConstructorCall -> {
744- extractConstructorCall(e, parent, idx, callable, irCallable)
745+ extractConstructorCall(e, parent, idx, irCallable)
745746 }
746747 is IrEnumConstructorCall -> {
747- extractConstructorCall(e, parent, idx, callable, irCallable)
748+ extractConstructorCall(e, parent, idx, irCallable)
748749 }
749- is IrCall -> extractCall(e, callable, irCallable, parent, idx)
750+ is IrCall -> extractCall(e, irCallable, parent, idx)
750751 is IrConst <* > -> {
751752 val v = e.value
752753 when (v) {
@@ -828,64 +829,64 @@ class KotlinFileExtractor(val logger: FileLogger, val tw: FileTrapWriter, val fi
828829 val vId = useValueDeclaration(e.symbol.owner)
829830 tw.writeVariableBinding(lhsId, vId)
830831
831- extractExpression(e.value, callable, irCallable, id, 1 )
832+ extractExpression(e.value, irCallable, id, 1 )
832833 }
833834 is IrThrow -> {
834835 val id = tw.getFreshIdLabel<DbThrowstmt >()
835836 val locId = tw.getLocation(e)
836- tw.writeStmts_throwstmt(id, parent, idx, callable )
837+ tw.writeStmts_throwstmt(id, parent, idx, callableLabel )
837838 tw.writeHasLocation(id, locId)
838- extractExpression(e.value, callable, irCallable, id, 0 )
839+ extractExpression(e.value, irCallable, id, 0 )
839840 }
840841 is IrBreak -> {
841842 val id = tw.getFreshIdLabel<DbBreakstmt >()
842- tw.writeStmts_breakstmt(id, parent, idx, callable )
843+ tw.writeStmts_breakstmt(id, parent, idx, callableLabel )
843844 extractBreakContinue(e, id)
844845 }
845846 is IrContinue -> {
846847 val id = tw.getFreshIdLabel<DbContinuestmt >()
847- tw.writeStmts_continuestmt(id, parent, idx, callable )
848+ tw.writeStmts_continuestmt(id, parent, idx, callableLabel )
848849 extractBreakContinue(e, id)
849850 }
850851 is IrReturn -> {
851852 val id = tw.getFreshIdLabel<DbReturnstmt >()
852853 val locId = tw.getLocation(e)
853- tw.writeStmts_returnstmt(id, parent, idx, callable )
854+ tw.writeStmts_returnstmt(id, parent, idx, callableLabel )
854855 tw.writeHasLocation(id, locId)
855- extractExpression(e.value, callable, irCallable, id, 0 )
856+ extractExpression(e.value, irCallable, id, 0 )
856857 }
857858 is IrContainerExpression -> {
858859 val id = tw.getFreshIdLabel<DbBlock >()
859860 val locId = tw.getLocation(e)
860- tw.writeStmts_block(id, parent, idx, callable )
861+ tw.writeStmts_block(id, parent, idx, callableLabel )
861862 tw.writeHasLocation(id, locId)
862863 e.statements.forEachIndexed { i, s ->
863- extractStatement(s, callable, irCallable, id, i)
864+ extractStatement(s, irCallable, id, i)
864865 }
865866 }
866867 is IrWhileLoop -> {
867868 val id = tw.getFreshIdLabel<DbWhilestmt >()
868869 loopIdMap[e] = id
869870 val locId = tw.getLocation(e)
870- tw.writeStmts_whilestmt(id, parent, idx, callable )
871+ tw.writeStmts_whilestmt(id, parent, idx, callableLabel )
871872 tw.writeHasLocation(id, locId)
872- extractExpression(e.condition, callable, irCallable, id, 0 )
873+ extractExpression(e.condition, irCallable, id, 0 )
873874 val body = e.body
874875 if (body != null ) {
875- extractExpression(body, callable, irCallable, id, 1 )
876+ extractExpression(body, irCallable, id, 1 )
876877 }
877878 loopIdMap.remove(e)
878879 }
879880 is IrDoWhileLoop -> {
880881 val id = tw.getFreshIdLabel<DbDostmt >()
881882 loopIdMap[e] = id
882883 val locId = tw.getLocation(e)
883- tw.writeStmts_dostmt(id, parent, idx, callable )
884+ tw.writeStmts_dostmt(id, parent, idx, callableLabel )
884885 tw.writeHasLocation(id, locId)
885- extractExpression(e.condition, callable, irCallable, id, 0 )
886+ extractExpression(e.condition, irCallable, id, 0 )
886887 val body = e.body
887888 if (body != null ) {
888- extractExpression(body, callable, irCallable, id, 1 )
889+ extractExpression(body, irCallable, id, 1 )
889890 }
890891 loopIdMap.remove(e)
891892 }
@@ -903,8 +904,8 @@ class KotlinFileExtractor(val logger: FileLogger, val tw: FileTrapWriter, val fi
903904 val bLocId = tw.getLocation(b)
904905 tw.writeWhen_branch(bId, id, i)
905906 tw.writeHasLocation(bId, bLocId)
906- extractExpression(b.condition, callable, irCallable, bId, 0 )
907- extractExpression(b.result, callable, irCallable, bId, 1 )
907+ extractExpression(b.condition, irCallable, bId, 0 )
908+ extractExpression(b.result, irCallable, bId, 1 )
908909 if (b is IrElseBranch ) {
909910 tw.writeWhen_branch_else(bId)
910911 }
@@ -916,7 +917,7 @@ class KotlinFileExtractor(val logger: FileLogger, val tw: FileTrapWriter, val fi
916917 val typeId = useType(e.type)
917918 tw.writeExprs_getclassexpr(id, typeId, parent, idx)
918919 tw.writeHasLocation(id, locId)
919- extractExpression(e.argument, callable, irCallable, id, 0 )
920+ extractExpression(e.argument, irCallable, id, 0 )
920921 }
921922 else -> {
922923 logger.warnElement(Severity .ErrorSevere , " Unrecognised IrExpression: " + e.javaClass, e)
0 commit comments