
void __start()
__start: scope:[__start]  from
  [0] phi()
  to:__start::__init1
__start::__init1: scope:[__start]  from __start
  [1] idx = 0
  to:__start::@1
__start::@1: scope:[__start]  from __start::__init1
  [2] phi()
  [3] call main
  to:__start::@return
__start::@return: scope:[__start]  from __start::@1
  [4] return 
  to:@return

void world()
world: scope:[world]  from
  [5] phi()
  [6] call print
  to:world::@return
world::@return: scope:[world]  from world
  [7] return 
  to:@return

void hello()
hello: scope:[hello]  from
  [8] phi()
  [9] call print
  to:hello::@return
hello::@return: scope:[hello]  from hello
  [10] return 
  to:@return

void main()
main: scope:[main]  from __start::@1
  [11] phi()
  [12] call do10
  to:main::@1
main::@1: scope:[main]  from main
  [13] phi()
  [14] call do10
  to:main::@return
main::@return: scope:[main]  from main::@1
  [15] return 
  to:@return

void print(char *msg)
print: scope:[print]  from hello world
  [16] print::msg#3 = phi( hello/hello::msg, world/world::msg )
  to:print::@1
print::@1: scope:[print]  from print print::@1
  [17] print::i#2 = phi( print/0, print::@1/print::i#1 )
  [18] SCREEN[idx] = print::msg#3[print::i#2]
  [19] idx = ++ idx
  [20] print::i#1 = ++ print::i#2
  [21] if(0!=print::msg#3[print::i#1]) goto print::@1
  to:print::@return
print::@return: scope:[print]  from print::@1
  [22] return 
  to:@return

void do10(void (*fn)())
do10: scope:[do10]  from main main::@1
  [23] do10::fn#3 = phi( main/&hello, main::@1/&world )
  to:do10::@1
do10::@1: scope:[do10]  from do10 do10::@2
  [24] do10::i#2 = phi( do10/0, do10::@2/do10::i#1 )
  [25] callexecute *do10::fn#3 
  to:do10::@2
do10::@2: scope:[do10]  from do10::@1
  [26] do10::i#1 = ++ do10::i#2
  [27] if(do10::i#1!=$a) goto do10::@1
  to:do10::@return
do10::@return: scope:[do10]  from do10::@2
  [28] return 
  to:@return
