| == foo == |
| fun foo(a: Number) { |
| val t = when (a) { |
| 1 -> "1" |
| in Collections.singleton(2) -> "2" |
| is Int -> "Int" |
| !in Collections.singleton(3) -> "!3" |
| !is Number -> "!Number" |
| else -> null |
| } |
| } |
| --------------------- |
| L0: |
| 1 <START> |
| v(a: Number) |
| magic[FAKE_INITIALIZER](a: Number) -> <v0> |
| w(a|<v0>) |
| 2 mark({ val t = when (a) { 1 -> "1" in Collections.singleton(2) -> "2" is Int -> "Int" !in Collections.singleton(3) -> "!3" !is Number -> "!Number" else -> null } }) |
| v(val t = when (a) { 1 -> "1" in Collections.singleton(2) -> "2" is Int -> "Int" !in Collections.singleton(3) -> "!3" !is Number -> "!Number" else -> null }) |
| mark(when (a) { 1 -> "1" in Collections.singleton(2) -> "2" is Int -> "Int" !in Collections.singleton(3) -> "!3" !is Number -> "!Number" else -> null }) |
| r(a) -> <v1> |
| mark(1 -> "1") |
| mark(1) |
| r(1) -> <v2> |
| magic[EQUALS_IN_WHEN_CONDITION](1|<v1>, <v2>) -> <v3> |
| jmp?(L4|<v3>) NEXT:[mark(in Collections.singleton(2) -> "2"), mark("1")] |
| L3 ['when' entry body]: |
| mark("1") |
| r("1") -> <v4> |
| jmp(L2) NEXT:[merge(when (a) { 1 -> "1" in Collections.singleton(2) -> "2" is Int -> "Int" !in Collections.singleton(3) -> "!3" !is Number -> "!Number" else -> null }|<v4>, <v8>, <v10>, <v14>, <v16>, <v17>) -> <v18>] |
| L4 [next 'when' entry]: |
| mark(in Collections.singleton(2) -> "2") PREV:[jmp?(L4|<v3>)] |
| mark(Collections.singleton(2)) |
| r(2) -> <v5> |
| mark(singleton(2)) |
| call(singleton(2), singleton|<v5>) -> <v6> |
| mark(in Collections.singleton(2)) |
| call(in Collections.singleton(2), contains|<v6>, <v1>) -> <v7> |
| jmp?(L6|<v7>) NEXT:[mark(is Int -> "Int"), mark("2")] |
| L5 ['when' entry body]: |
| mark("2") |
| r("2") -> <v8> |
| jmp(L2) NEXT:[merge(when (a) { 1 -> "1" in Collections.singleton(2) -> "2" is Int -> "Int" !in Collections.singleton(3) -> "!3" !is Number -> "!Number" else -> null }|<v4>, <v8>, <v10>, <v14>, <v16>, <v17>) -> <v18>] |
| L6 [next 'when' entry]: |
| mark(is Int -> "Int") PREV:[jmp?(L6|<v7>)] |
| mark(is Int) |
| magic[IS](is Int|<v1>) -> <v9> |
| jmp?(L8|<v9>) NEXT:[mark(!in Collections.singleton(3) -> "!3"), mark("Int")] |
| L7 ['when' entry body]: |
| mark("Int") |
| r("Int") -> <v10> |
| jmp(L2) NEXT:[merge(when (a) { 1 -> "1" in Collections.singleton(2) -> "2" is Int -> "Int" !in Collections.singleton(3) -> "!3" !is Number -> "!Number" else -> null }|<v4>, <v8>, <v10>, <v14>, <v16>, <v17>) -> <v18>] |
| L8 [next 'when' entry]: |
| mark(!in Collections.singleton(3) -> "!3") PREV:[jmp?(L8|<v9>)] |
| mark(Collections.singleton(3)) |
| r(3) -> <v11> |
| mark(singleton(3)) |
| call(singleton(3), singleton|<v11>) -> <v12> |
| mark(!in Collections.singleton(3)) |
| call(!in Collections.singleton(3), contains|<v12>, <v1>) -> <v13> |
| jmp?(L10|<v13>) NEXT:[mark(!is Number -> "!Number"), mark("!3")] |
| L9 ['when' entry body]: |
| mark("!3") |
| r("!3") -> <v14> |
| jmp(L2) NEXT:[merge(when (a) { 1 -> "1" in Collections.singleton(2) -> "2" is Int -> "Int" !in Collections.singleton(3) -> "!3" !is Number -> "!Number" else -> null }|<v4>, <v8>, <v10>, <v14>, <v16>, <v17>) -> <v18>] |
| L10 [next 'when' entry]: |
| mark(!is Number -> "!Number") PREV:[jmp?(L10|<v13>)] |
| mark(!is Number) |
| magic[IS](!is Number|<v1>) -> <v15> |
| jmp?(L12|<v15>) NEXT:[mark(else -> null), mark("!Number")] |
| L11 ['when' entry body]: |
| mark("!Number") |
| r("!Number") -> <v16> |
| jmp(L2) NEXT:[merge(when (a) { 1 -> "1" in Collections.singleton(2) -> "2" is Int -> "Int" !in Collections.singleton(3) -> "!3" !is Number -> "!Number" else -> null }|<v4>, <v8>, <v10>, <v14>, <v16>, <v17>) -> <v18>] |
| L12 [next 'when' entry]: |
| mark(else -> null) PREV:[jmp?(L12|<v15>)] |
| L13 ['when' entry body]: |
| r(null) -> <v17> |
| jmp(L2) |
| L2 [after 'when' expression]: |
| merge(when (a) { 1 -> "1" in Collections.singleton(2) -> "2" is Int -> "Int" !in Collections.singleton(3) -> "!3" !is Number -> "!Number" else -> null }|<v4>, <v8>, <v10>, <v14>, <v16>, <v17>) -> <v18> PREV:[jmp(L2), jmp(L2), jmp(L2), jmp(L2), jmp(L2), jmp(L2)] |
| w(t|<v18>) |
| L1: |
| 1 <END> NEXT:[<SINK>] |
| error: |
| <ERROR> PREV:[] |
| sink: |
| <SINK> PREV:[<ERROR>, <END>] |
| ===================== |