Pseudocode: Generate magics for cast expressions

This commit is contained in:
Alexey Sedunov
2014-07-18 21:02:45 +04:00
parent 00dd1dbb0b
commit c32d112e67
7 changed files with 64 additions and 1 deletions
@@ -0,0 +1,29 @@
== foo ==
fun foo(a: Any) {
a : String
a as String
a as? String
}
---------------------
L0:
1 <START>
v(a: Any)
magic[FAKE_INITIALIZER](a: Any) -> <v0>
w(a|<v0>)
2 mark({ a : String a as String a as? String })
mark(a : String)
r(a) -> <v1>
magic[CAST](a : String|<v1>) -> <v2>
mark(a as String)
r(a) -> <v3>
magic[CAST](a as String|<v3>) -> <v4>
mark(a as? String)
r(a) -> <v5>
magic[CAST](a as? String|<v5>) -> <v6>
L1:
1 <END> NEXT:[<SINK>]
error:
<ERROR> PREV:[]
sink:
<SINK> PREV:[<ERROR>, <END>]
=====================
@@ -0,0 +1,5 @@
fun foo(a: Any) {
a : String
a as String
a as? String
}
@@ -0,0 +1,16 @@
== foo ==
fun foo(a: Any) {
a : String
a as String
a as? String
}
---------------------
<v0>: {<: Any} NEW: magic[FAKE_INITIALIZER](a: Any) -> <v0>
a <v1>: * NEW: r(a) -> <v1>
a : String <v2>: * NEW: magic[CAST](a : String|<v1>) -> <v2>
a <v3>: * NEW: r(a) -> <v3>
a as String <v4>: * NEW: magic[CAST](a as String|<v3>) -> <v4>
a <v5>: * NEW: r(a) -> <v5>
a as? String <v6>: * NEW: magic[CAST](a as? String|<v5>) -> <v6>
{ a : String a as String a as? String } <v6>: * COPY
=====================