Skip to content

Instantly share code, notes, and snippets.

@dolpheen
Created January 18, 2020 21:37
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save dolpheen/819a4077c50ec520ea6335707c58cbcd to your computer and use it in GitHub Desktop.
Save dolpheen/819a4077c50ec520ea6335707c58cbcd to your computer and use it in GitHub Desktop.
Dart Internals - Getters Setters VM Example (compiled to IL flow graph)
*** BEGIN CFG
Unoptimized Compilation
==== file:///Users/vadimlukicev/dev/getters_setters/main.dart_::_main_main
B0[graph]:0
B1[function entry]:2
t0 <- LoadLocal(:arg_desc @0)
t0 <- LoadField(t0 . ArgumentsDescriptor.type_args_len {final})
t1 <- Constant(#0)
Branch if StrictCompare:8(===, t0, t1) goto (4, 5)
B4[target]:12
goto:16 B3
B3[join]:6 pred(B4)
t0 <- LoadLocal(:arg_desc @0)
t0 <- LoadField(t0 . ArgumentsDescriptor.count {final})
t1 <- LoadLocal(:t0 @-4)
t2 <- Constant(#1)
Branch if StrictCompare:22(===, t1, t2) goto (7, 8)
B7[target]:26
t1 <- LoadLocal(:arg_desc @0)
t1 <- LoadField(t1 . ArgumentsDescriptor.positional_count {final})
Branch if StrictCompare:30(===, t0, t1) goto (9, 10)
B9[target]:34
goto:42 B6
B6[join]:20 pred(B9)
t0 <- LoadLocal(:closure @1)
t0 <- LoadField(t0 . Closure.context {final})
StoreLocal(:current_context_var @-1, t0)
goto:46 B11
B11[join]:44 pred(B6)
Constant(#0)
CheckStackOverflow:48(stack=0, loop=0)
goto:60 B12
B10[target]:36
goto:40 B2
B8[target]:28
goto:38 B2
B5[target]:14
goto:18 B2
B2[join]:4 pred(B5, B8, B10)
t0 <- LoadLocal(:arg_desc @0)
TailCall(CallClosureNoSuchMethod(t0))
B13[function entry]:58
Constant(#1)
CheckStackOverflow:54(stack=0, loop=0)
goto:62 B12
B12[join]:56 pred(B11, B13)
t0 <- StaticCall:50( main<0> )
Return:52(t0)
*** END CFG
*** BEGIN CFG
Unoptimized Compilation
==== file:///Users/vadimlukicev/dev/getters_setters/main.dart_::_main
B0[graph]:0
B1[function entry]:2
CheckStackOverflow:8(stack=0, loop=0)
DebugStepCheck:10()
t0 <- AllocateObject(A)
t1 <- LoadLocal(:t0 @-4)
PushArgument(t1)
StaticCall:12( A.<0> t1)
StoreLocal(a @-1, t0)
t0 <- MakeTemp()
t1 <- LoadLocal(a @-1)
PushArgument(t1)
t2 <- Constant(#propA)
t2 <- StoreLocal(:t0 @-4, t2)
PushArgument(t2)
InstanceCall:14( set:prop<0>, t1, t2)
DropTemps(1)
t0 <- LoadLocal(a @-1)
PushArgument(t0)
t0 <- InstanceCall:16( get:prop<0>, t0)
PushArgument(t0)
StaticCall:18( print<0> t0)
t0 <- AllocateObject(B)
t1 <- LoadLocal(:t0 @-4)
PushArgument(t1)
StaticCall:20( B.<0> t1)
StoreLocal(b @-2, t0)
t0 <- MakeTemp()
t1 <- LoadLocal(b @-2)
PushArgument(t1)
t2 <- Constant(#propB)
t2 <- StoreLocal(:t0 @-4, t2)
PushArgument(t2)
InstanceCall:22( set:prop<0>, t1, t2)
DropTemps(1)
t0 <- LoadLocal(b @-2)
PushArgument(t0)
t0 <- InstanceCall:24( get:prop<0>, t0)
PushArgument(t0)
StaticCall:26( print<0> t0)
t0 <- AllocateObject(C)
t1 <- LoadLocal(:t0 @-4)
PushArgument(t1)
StaticCall:28( C.<0> t1)
StoreLocal(c @-3, t0)
t0 <- LoadLocal(c @-3)
PushArgument(t0)
t0 <- InstanceCall:30( get:prop<0>, t0)
PushArgument(t0)
StaticCall:32( print<0> t0)
t0 <- Constant(#null)
DebugStepCheck:34()
Return:36(t0)
*** END CFG
*** BEGIN CFG
Unoptimized Compilation
==== file:///Users/vadimlukicev/dev/getters_setters/main.dart_A_A.
B0[graph]:0
B1[function entry]:2
CheckStackOverflow:8(stack=0, loop=0)
t0 <- LoadLocal(this @1)
PushArgument(t0)
StaticCall:10( Object.<0> t0, recognized_kind = ObjectConstructor)
t0 <- Constant(#null)
Return:12(t0)
*** END CFG
*** BEGIN CFG
Unoptimized Compilation
==== file:///Users/vadimlukicev/dev/getters_setters/main.dart_A_set_prop
B0[graph]:0
B1[function entry]:2
t0 <- LoadLocal(this @2)
t1 <- LoadLocal(value @1)
t2 <- LoadLocal(:t1 @-3)
GuardFieldClass:4(prop <nullable Null>, t2)
StoreInstanceField(t0 . prop = t1)
t0 <- Constant(#null)
Return:8(t0)
*** END CFG
*** BEGIN CFG
Unoptimized Compilation
==== file:///Users/vadimlukicev/dev/getters_setters/main.dart_A_get_prop
B0[graph]:0
B1[function entry]:2
t0 <- LoadLocal(this @1)
t0 <- LoadField(t0 . prop)
Return:4(t0)
*** END CFG
propA
*** BEGIN CFG
Unoptimized Compilation
==== file:///Users/vadimlukicev/dev/getters_setters/main.dart_B_B.
B0[graph]:0
B1[function entry]:2
CheckStackOverflow:8(stack=0, loop=0)
t0 <- LoadLocal(this @1)
PushArgument(t0)
StaticCall:10( Object.<0> t0, recognized_kind = ObjectConstructor)
t0 <- Constant(#null)
Return:12(t0)
*** END CFG
*** BEGIN CFG
Unoptimized Compilation
==== file:///Users/vadimlukicev/dev/getters_setters/main.dart_B_set_prop
B0[graph]:0
B1[function entry]:2
CheckStackOverflow:8(stack=0, loop=0)
DebugStepCheck:10()
t0 <- MakeTemp()
t1 <- LoadLocal(this @2)
PushArgument(t1)
t2 <- LoadLocal(value @1)
t2 <- StoreLocal(:t0 @-2, t2)
PushArgument(t2)
InstanceCall:12( set:_prop@19294495<0>, t1, t2)
DebugStepCheck:14()
Return:16(t0)
*** END CFG
*** BEGIN CFG
Unoptimized Compilation
==== file:///Users/vadimlukicev/dev/getters_setters/main.dart_B_set__prop@19294495
B0[graph]:0
B1[function entry]:2
t0 <- LoadLocal(this @2)
t1 <- LoadLocal(value @1)
t2 <- LoadLocal(:t1 @-3)
GuardFieldClass:4(_prop@19294495 <nullable Null>, t2)
StoreInstanceField(t0 . _prop@19294495 = t1)
t0 <- Constant(#null)
Return:8(t0)
*** END CFG
*** BEGIN CFG
Unoptimized Compilation
==== file:///Users/vadimlukicev/dev/getters_setters/main.dart_B_get_prop
B0[graph]:0
B1[function entry]:2
CheckStackOverflow:8(stack=0, loop=0)
DebugStepCheck:10()
t0 <- LoadLocal(this @1)
PushArgument(t0)
t0 <- InstanceCall:12( get:_prop@19294495<0>, t0)
DebugStepCheck:14()
Return:16(t0)
*** END CFG
*** BEGIN CFG
Unoptimized Compilation
==== file:///Users/vadimlukicev/dev/getters_setters/main.dart_B_get__prop@19294495
B0[graph]:0
B1[function entry]:2
t0 <- LoadLocal(this @1)
t0 <- LoadField(t0 . _prop@19294495)
Return:4(t0)
*** END CFG
propB
*** BEGIN CFG
Unoptimized Compilation
==== file:///Users/vadimlukicev/dev/getters_setters/main.dart_C_C.
B0[graph]:0
B1[function entry]:2
CheckStackOverflow:8(stack=0, loop=0)
t0 <- LoadLocal(this @1)
PushArgument(t0)
StaticCall:10( Object.<0> t0, recognized_kind = ObjectConstructor)
t0 <- Constant(#null)
Return:12(t0)
*** END CFG
*** BEGIN CFG
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment