Thanks to visit codestin.com
Credit goes to github.com

Skip to content

Commit f18ab2e

Browse files
tamasvajkigfoo
authored andcommitted
Reduce parameter passing, and compute label for enclosing callable on the fly
1 parent 1304839 commit f18ab2e

1 file changed

Lines changed: 37 additions & 36 deletions

File tree

java/kotlin-extractor/src/main/kotlin/KotlinExtractorExtension.kt

Lines changed: 37 additions & 36 deletions
Original file line numberDiff line numberDiff line change
@@ -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

Comments
 (0)