JS: optimize destructuring declaration when possible
See KT-8285
This commit is contained in:
@@ -2332,6 +2332,12 @@ public class BoxJsTestGenerated extends AbstractBoxJsTest {
|
|||||||
doTest(fileName);
|
doTest(fileName);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@TestMetadata("singleComponentDestructuring.kt")
|
||||||
|
public void testSingleComponentDestructuring() throws Exception {
|
||||||
|
String fileName = KotlinTestUtils.navigationMetadata("js/js.translator/testData/box/expression/evaluationOrder/singleComponentDestructuring.kt");
|
||||||
|
doTest(fileName);
|
||||||
|
}
|
||||||
|
|
||||||
@TestMetadata("whenAsMinusArgument.kt")
|
@TestMetadata("whenAsMinusArgument.kt")
|
||||||
public void testWhenAsMinusArgument() throws Exception {
|
public void testWhenAsMinusArgument() throws Exception {
|
||||||
String fileName = KotlinTestUtils.navigationMetadata("js/js.translator/testData/box/expression/evaluationOrder/whenAsMinusArgument.kt");
|
String fileName = KotlinTestUtils.navigationMetadata("js/js.translator/testData/box/expression/evaluationOrder/whenAsMinusArgument.kt");
|
||||||
|
|||||||
+3
-1
@@ -122,7 +122,9 @@ public final class ExpressionVisitor extends TranslatorVisitor<JsNode> {
|
|||||||
assert jetInitializer != null : "Initializer for multi declaration must be not null";
|
assert jetInitializer != null : "Initializer for multi declaration must be not null";
|
||||||
JsExpression initializer = Translation.translateAsExpression(jetInitializer, context);
|
JsExpression initializer = Translation.translateAsExpression(jetInitializer, context);
|
||||||
JsName parameterName = JsScope.declareTemporary();
|
JsName parameterName = JsScope.declareTemporary();
|
||||||
context.addStatementToCurrentBlock(JsAstUtils.newVar(parameterName, initializer));
|
JsVars tempVarDeclaration = JsAstUtils.newVar(parameterName, initializer);
|
||||||
|
MetadataProperties.setSynthetic(tempVarDeclaration, true);
|
||||||
|
context.addStatementToCurrentBlock(tempVarDeclaration);
|
||||||
return DestructuringDeclarationTranslator.translate(multiDeclaration, JsAstUtils.pureFqn(parameterName, null), context);
|
return DestructuringDeclarationTranslator.translate(multiDeclaration, JsAstUtils.pureFqn(parameterName, null), context);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
+20
@@ -0,0 +1,20 @@
|
|||||||
|
// EXPECTED_REACHABLE_NODES: 1029
|
||||||
|
// CHECK_VARS_COUNT: function=test count=2
|
||||||
|
var log = ""
|
||||||
|
|
||||||
|
fun test() {
|
||||||
|
val (a, _) = idAndLog(Pair(idAndLog(1), idAndLog(2)))
|
||||||
|
val (_, b) = idAndLog(Pair(idAndLog(3), idAndLog(4)))
|
||||||
|
log += "result:$a,$b;"
|
||||||
|
}
|
||||||
|
|
||||||
|
fun <T> idAndLog(x: T): T {
|
||||||
|
log += "$x;"
|
||||||
|
return x
|
||||||
|
}
|
||||||
|
|
||||||
|
fun box(): String {
|
||||||
|
test()
|
||||||
|
if (log != "1;2;(1, 2);3;4;(3, 4);result:1,4;") return "fail: $log"
|
||||||
|
return "OK"
|
||||||
|
}
|
||||||
Reference in New Issue
Block a user