@begin: scope:[]  from
  [0] phi()
  to:@1
@1: scope:[]  from @begin
  [1] (word) last_time ← (word) 0
  to:@2
@2: scope:[]  from @1
  [2] phi()
  [3] call main 
  to:@end
@end: scope:[]  from @2
  [4] phi()

(void()) main()
main: scope:[main]  from @2
  [5] phi()
  [6] call start 
  to:main::@1
main::@1: scope:[main]  from main main::@7
  [7] (byte) main::c#8 ← phi( main/(byte) 0 main::@7/(byte) main::c#2 )
  [7] (byte*) print_char_cursor#48 ← phi( main/(byte*) 1024 main::@7/(byte*) print_char_cursor#10 )
  [8] call init 
  to:main::@2
main::@2: scope:[main]  from main::@1 main::@5
  [9] (struct node*) root#20 ← phi( main::@1/(struct node*) 0 main::@5/(struct node*) root#11 )
  [9] (word) free_#22 ← phi( main::@1/(byte) 0 main::@5/(word) free_#13 )
  [9] (word) main::i#3 ← phi( main::@1/(byte) 0 main::@5/(word) main::i#2 )
  [10] (word) prepend::x#0 ← (word) main::i#3
  [11] call prepend 
  to:main::@5
main::@5: scope:[main]  from main::@2
  [12] (word) main::i#2 ← ++ (word) main::i#3
  [13] if((word) main::i#2!=(word) $bb8) goto main::@2
  to:main::@3
main::@3: scope:[main]  from main::@5
  [14] phi()
  [15] call sum 
  [16] (word) sum::return#2 ← (word) sum::s#3
  to:main::@6
main::@6: scope:[main]  from main::@3
  [17] (word~) main::$5 ← (word) sum::return#2
  [18] (byte) print_char::ch#2 ← (byte)(word~) main::$5
  [19] call print_char 
  to:main::@7
main::@7: scope:[main]  from main::@6
  [20] (byte) main::c#2 ← ++ (byte) main::c#8
  [21] if((byte) main::c#2!=(byte) 5) goto main::@1
  to:main::@4
main::@4: scope:[main]  from main::@7
  [22] phi()
  [23] call end 
  to:main::@return
main::@return: scope:[main]  from main::@4
  [24] return 
  to:@return

(void()) end()
end: scope:[end]  from main::@4
  [25] (word) Ticks#1 ← (word) last_time
  [26] call start 
  to:end::@1
end::@1: scope:[end]  from end
  [27] (word) last_time ← (word) last_time - (word) Ticks#1
  [28] (word) Ticks#12 ← (word) last_time
  [29] (word) print_word::w#0 ← (word) Ticks#12
  [30] call print_word 
  to:end::@2
end::@2: scope:[end]  from end::@1
  [31] phi()
  [32] call print_ln 
  to:end::@return
end::@return: scope:[end]  from end::@2
  [33] return 
  to:@return

(void()) print_ln()
print_ln: scope:[print_ln]  from end::@2
  [34] phi()
  to:print_ln::@1
print_ln::@1: scope:[print_ln]  from print_ln print_ln::@1
  [35] (byte*) print_line_cursor#8 ← phi( print_ln/(byte*) 1024 print_ln::@1/(byte*) print_line_cursor#1 )
  [36] (byte*) print_line_cursor#1 ← (byte*) print_line_cursor#8 + (byte) $28
  [37] if((byte*) print_line_cursor#1<(byte*) print_char_cursor#10) goto print_ln::@1
  to:print_ln::@return
print_ln::@return: scope:[print_ln]  from print_ln::@1
  [38] return 
  to:@return

(void()) print_word((word) print_word::w)
print_word: scope:[print_word]  from end::@1
  [39] (byte) print_byte::b#0 ← > (word) print_word::w#0
  [40] call print_byte 
  to:print_word::@1
print_word::@1: scope:[print_word]  from print_word
  [41] (byte) print_byte::b#1 ← < (word) print_word::w#0
  [42] call print_byte 
  to:print_word::@return
print_word::@return: scope:[print_word]  from print_word::@1
  [43] return 
  to:@return

(void()) print_byte((byte) print_byte::b)
print_byte: scope:[print_byte]  from print_word print_word::@1
  [44] (byte) print_byte::b#2 ← phi( print_word/(byte) print_byte::b#0 print_word::@1/(byte) print_byte::b#1 )
  [45] (byte~) print_byte::$0 ← (byte) print_byte::b#2 >> (byte) 4
  [46] (byte) print_char::ch#0 ← *((const byte*) print_hextab + (byte~) print_byte::$0)
  [47] call print_char 
  to:print_byte::@1
print_byte::@1: scope:[print_byte]  from print_byte
  [48] (byte~) print_byte::$2 ← (byte) print_byte::b#2 & (byte) $f
  [49] (byte) print_char::ch#1 ← *((const byte*) print_hextab + (byte~) print_byte::$2)
  [50] call print_char 
  to:print_byte::@return
print_byte::@return: scope:[print_byte]  from print_byte::@1
  [51] return 
  to:@return

(void()) print_char((byte) print_char::ch)
print_char: scope:[print_char]  from main::@6 print_byte print_byte::@1
  [52] (byte*) print_char_cursor#26 ← phi( main::@6/(byte*) print_char_cursor#48 print_byte/(byte*) print_char_cursor#10 print_byte::@1/(byte*) print_char_cursor#10 )
  [52] (byte) print_char::ch#3 ← phi( main::@6/(byte) print_char::ch#2 print_byte/(byte) print_char::ch#0 print_byte::@1/(byte) print_char::ch#1 )
  [53] *((byte*) print_char_cursor#26) ← (byte) print_char::ch#3
  [54] (byte*) print_char_cursor#10 ← ++ (byte*) print_char_cursor#26
  to:print_char::@return
print_char::@return: scope:[print_char]  from print_char
  [55] return 
  to:@return

(void()) start()
start: scope:[start]  from end main
  asm { jsr$FFDE staLAST_TIME stxLAST_TIME+1  }
  to:start::@return
start::@return: scope:[start]  from start
  [57] return 
  to:@return

(word()) sum()
sum: scope:[sum]  from main::@3
  [58] (struct node*) sum::current#1 ← (struct node*) root#11
  to:sum::@1
sum::@1: scope:[sum]  from sum sum::@2
  [59] (word) sum::s#3 ← phi( sum/(byte) 0 sum::@2/(word) sum::s#2 )
  [59] (struct node*) sum::current#3 ← phi( sum/(struct node*) sum::current#1 sum::@2/(struct node*) sum::current#2 )
  [60] if((struct node*)(word) 0!=(struct node*) sum::current#3) goto sum::@2
  to:sum::@return
sum::@return: scope:[sum]  from sum::@1
  [61] return 
  to:@return
sum::@2: scope:[sum]  from sum::@1
  [62] (word) sum::s#2 ← (word) sum::s#3 + *((word*)(struct node*) sum::current#3 + (const byte) OFFSET_STRUCT_NODE_VALUE)
  [63] (struct node*) sum::current#2 ← *((struct node**)(struct node*) sum::current#3)
  to:sum::@1

(void()) prepend((word) prepend::x)
prepend: scope:[prepend]  from main::@2
  [64] phi()
  [65] call alloc 
  [66] (struct node*) alloc::return#2 ← (struct node*) alloc::return#0
  to:prepend::@1
prepend::@1: scope:[prepend]  from prepend
  [67] (struct node*) prepend::new#1 ← (struct node*) alloc::return#2
  [68] *((struct node**)(struct node*) prepend::new#1) ← (struct node*) root#20
  [69] *((word*)(struct node*) prepend::new#1 + (const byte) OFFSET_STRUCT_NODE_VALUE) ← (word) prepend::x#0
  [70] (struct node*) root#11 ← (struct node*) prepend::new#1
  to:prepend::@return
prepend::@return: scope:[prepend]  from prepend::@1
  [71] return 
  to:@return

(struct node*()) alloc()
alloc: scope:[alloc]  from prepend
  [72] (word~) alloc::$1 ← (word) free_#22 << (byte) 2
  [73] (struct node*) alloc::return#0 ← (const struct node*) heap + (word~) alloc::$1
  [74] (word) free_#13 ← ++ (word) free_#22
  to:alloc::@return
alloc::@return: scope:[alloc]  from alloc
  [75] return 
  to:@return

(void()) init()
init: scope:[init]  from main::@1
  [76] phi()
  to:init::@return
init::@return: scope:[init]  from init
  [77] return 
  to:@return
