Compute pseudo value for parameter correctly:
do not throw away pseudo value for default value
This commit is contained in:
@@ -981,7 +981,17 @@ public class JetControlFlowProcessor {
|
|||||||
generateInstructions(defaultValue);
|
generateInstructions(defaultValue);
|
||||||
builder.bindLabel(skipDefaultValue);
|
builder.bindLabel(skipDefaultValue);
|
||||||
}
|
}
|
||||||
generateInitializer(parameter, createSyntheticValue(parameter));
|
generateInitializer(parameter, computePseudoValueForParameter(parameter));
|
||||||
|
}
|
||||||
|
|
||||||
|
@NotNull
|
||||||
|
private PseudoValue computePseudoValueForParameter(@NotNull JetParameter parameter) {
|
||||||
|
PseudoValue syntheticValue = createSyntheticValue(parameter);
|
||||||
|
PseudoValue defaultValue = builder.getBoundValue(parameter.getDefaultValue());
|
||||||
|
if (defaultValue == null) {
|
||||||
|
return syntheticValue;
|
||||||
|
}
|
||||||
|
return builder.merge(parameter, Lists.newArrayList(defaultValue, syntheticValue)).getOutputValue();
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
|
|||||||
@@ -1,5 +1,5 @@
|
|||||||
== foo ==
|
== foo ==
|
||||||
fun foo(i: Int = 1) = i + 2
|
fun foo(i: Int = 1, j: Int) = i + j
|
||||||
---------------------
|
---------------------
|
||||||
L0:
|
L0:
|
||||||
1 <START>
|
1 <START>
|
||||||
@@ -8,11 +8,15 @@ L0:
|
|||||||
r(1) -> <v0>
|
r(1) -> <v0>
|
||||||
L2 [after default value for parameter i]:
|
L2 [after default value for parameter i]:
|
||||||
magic(i: Int = 1) -> <v1> PREV:[jmp?(L2 [after default value for parameter i]), r(1) -> <v0>]
|
magic(i: Int = 1) -> <v1> PREV:[jmp?(L2 [after default value for parameter i]), r(1) -> <v0>]
|
||||||
w(i|<v1>)
|
merge(i: Int = 1|<v0>, <v1>) -> <v2>
|
||||||
r(i) -> <v2>
|
w(i|<v2>)
|
||||||
r(2) -> <v3>
|
v(j: Int)
|
||||||
mark(i + 2)
|
magic(j: Int) -> <v3>
|
||||||
call(+, plus|<v2>, <v3>) -> <v4>
|
w(j|<v3>)
|
||||||
|
r(i) -> <v4>
|
||||||
|
r(j) -> <v5>
|
||||||
|
mark(i + j)
|
||||||
|
call(+, plus|<v4>, <v5>) -> <v6>
|
||||||
L1:
|
L1:
|
||||||
<END> NEXT:[<SINK>]
|
<END> NEXT:[<SINK>]
|
||||||
error:
|
error:
|
||||||
|
|||||||
@@ -1 +1 @@
|
|||||||
fun foo(i: Int = 1) = i + 2
|
fun foo(i: Int = 1, j: Int) = i + j
|
||||||
@@ -1,8 +1,9 @@
|
|||||||
== foo ==
|
== foo ==
|
||||||
fun foo(i: Int = 1) = i + 2
|
fun foo(i: Int = 1, j: Int) = i + j
|
||||||
---------------------
|
---------------------
|
||||||
1 <v0> NEW()
|
1 <v0> NEW()
|
||||||
i <v2> NEW()
|
i: Int = 1 <v2> NEW(<v0>, <v1>)
|
||||||
2 <v3> NEW()
|
i <v4> NEW()
|
||||||
i + 2 <v4> NEW(<v2>, <v3>)
|
j <v5> NEW()
|
||||||
|
i + j <v6> NEW(<v4>, <v5>)
|
||||||
=====================
|
=====================
|
||||||
|
|||||||
Reference in New Issue
Block a user