when: emit switch for String if possible
Effectively, the following when structure:
when (s) {
s1, s2 -> e1,
s3 -> e2,
s4 -> e3,
...
else -> e
}
is implemented as:
when (s.hashCode()) {
h1 -> {
if (s == s1)
e1
else if (s == s2)
e1
else if (s == s3)
e2
else
e
}
h2 -> if (s == s3) e2 else e,
...
else -> e
}
where s1.hashCode() == s2.hashCode() == s3.hashCode() == h1,
s4.hashCode() == h2.
A tableswitch or lookupswitch is used for the hash code lookup.
Change-Id: I087bf623dbb4a41d3cc64399a1b42342a50757a6
This commit is contained in:
committed by
max-kammerer
parent
1a9ed88be4
commit
f6cf434650
+20
@@ -24625,6 +24625,11 @@ public class LightAnalysisModeTestGenerated extends AbstractLightAnalysisModeTes
|
||||
runTest("compiler/testData/codegen/box/when/callProperty.kt");
|
||||
}
|
||||
|
||||
@TestMetadata("edgeCases.kt")
|
||||
public void testEdgeCases() throws Exception {
|
||||
runTest("compiler/testData/codegen/box/when/edgeCases.kt");
|
||||
}
|
||||
|
||||
@TestMetadata("emptyWhen.kt")
|
||||
public void testEmptyWhen() throws Exception {
|
||||
runTest("compiler/testData/codegen/box/when/emptyWhen.kt");
|
||||
@@ -24755,6 +24760,11 @@ public class LightAnalysisModeTestGenerated extends AbstractLightAnalysisModeTes
|
||||
runTest("compiler/testData/codegen/box/when/switchOptimizationDense.kt");
|
||||
}
|
||||
|
||||
@TestMetadata("switchOptimizationDuplicates.kt")
|
||||
public void testSwitchOptimizationDuplicates() throws Exception {
|
||||
runTest("compiler/testData/codegen/box/when/switchOptimizationDuplicates.kt");
|
||||
}
|
||||
|
||||
@TestMetadata("switchOptimizationMultipleConditions.kt")
|
||||
public void testSwitchOptimizationMultipleConditions() throws Exception {
|
||||
runTest("compiler/testData/codegen/box/when/switchOptimizationMultipleConditions.kt");
|
||||
@@ -24925,6 +24935,16 @@ public class LightAnalysisModeTestGenerated extends AbstractLightAnalysisModeTes
|
||||
runTest("compiler/testData/codegen/box/when/stringOptimization/duplicatingItemsSameHashCode.kt");
|
||||
}
|
||||
|
||||
@TestMetadata("duplicatingItemsSameHashCode2.kt")
|
||||
public void testDuplicatingItemsSameHashCode2() throws Exception {
|
||||
runTest("compiler/testData/codegen/box/when/stringOptimization/duplicatingItemsSameHashCode2.kt");
|
||||
}
|
||||
|
||||
@TestMetadata("duplicatingItemsSameHashCode3.kt")
|
||||
public void testDuplicatingItemsSameHashCode3() throws Exception {
|
||||
runTest("compiler/testData/codegen/box/when/stringOptimization/duplicatingItemsSameHashCode3.kt");
|
||||
}
|
||||
|
||||
@TestMetadata("expression.kt")
|
||||
public void testExpression() throws Exception {
|
||||
runTest("compiler/testData/codegen/box/when/stringOptimization/expression.kt");
|
||||
|
||||
Reference in New Issue
Block a user