fib_naive.dot 7.5 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203
  1. digraph {
  2. node[shape="point"]
  3. mid_var_1[width="0"]
  4. mid_var_2[width="0"]
  5. mid_var_3[width="0"]
  6. mid_var_4[width="0"]
  7. HELP_var_1 [label="integer_subtraction",shape="rectangle"]
  8. HELP_var_2 [label="integer_addition",shape="rectangle"]
  9. HELP_var_3 [label="integer_gt",shape="rectangle"]
  10. HELP_var_4 [label="fib",shape="rectangle"]
  11. var_1 -> HELP_var_1 [style="dotted"]
  12. var_2 -> HELP_var_2 [style="dotted"]
  13. var_3 -> HELP_var_3 [style="dotted"]
  14. var_4 -> HELP_var_4 [style="dotted"]
  15. root -> globals [label="__globals"]
  16. globals -> mid_var_1 [arrowhead="none"]
  17. mid_var_1 -> var_1 [constraint="true"]
  18. mid_var_1 -> var_value_1
  19. var_value_1 -> signature_1 [label="value"]
  20. signature_1 -> body_1 [label="body"]
  21. signature_1 -> params_1 [label="params"]
  22. params_1 -> params_1_a [label="a"]
  23. params_1 -> params_1_b [label="b"]
  24. globals -> mid_var_2 [arrowhead="none"]
  25. mid_var_2 -> var_2 [constraint="true"]
  26. mid_var_2 -> var_value_2
  27. var_value_2 -> signature_2 [label="value"]
  28. signature_2 -> body_2 [label="body"]
  29. signature_2 -> params_2 [label="params"]
  30. params_2 -> params_2_a [label="a"]
  31. params_2 -> params_2_b [label="b"]
  32. globals -> mid_var_3 [arrowhead="none"]
  33. mid_var_3 -> var_3 [constraint="true"]
  34. mid_var_3 -> var_value_3
  35. var_value_3 -> signature_3 [label="value"]
  36. signature_3 -> body_3 [label="body"]
  37. signature_3 -> params_3 [label="params"]
  38. params_3 -> params_3_a [label="a"]
  39. params_3 -> params_3_b [label="b"]
  40. globals -> mid_var_4 [arrowhead="none"]
  41. mid_var_4 -> var_4 [constraint="true"]
  42. mid_var_4 -> var_value_4
  43. var_value_4 -> signature_4 [label="value"]
  44. signature_4 -> if_1 [label="body"]
  45. signature_4 -> params_4 [label="params"]
  46. params_4 -> params_4_a [label="n"]
  47. // The actual function begins here
  48. value_1 [shape="oval",label="1"]
  49. value_2 [shape="oval",label="1"]
  50. value_3 [shape="oval",label="1"]
  51. value_5 [shape="oval",label="2"]
  52. value_a [shape="oval",label="a"]
  53. value_b [shape="oval",label="b"]
  54. value_a2 [shape="oval",label="a"]
  55. value_b2 [shape="oval",label="b"]
  56. value_a3 [shape="oval",label="a"]
  57. value_b3 [shape="oval",label="b"]
  58. value_a4 [shape="oval",label="a"]
  59. value_b4 [shape="oval",label="b"]
  60. value_n [shape="oval",label="n"]
  61. value_n2 [shape="oval",label="n"]
  62. value_n3 [shape="oval",label="n"]
  63. access_resolve_1 [shape="oval",label="ACCESS"]
  64. access_resolve_3 [shape="oval",label="ACCESS"]
  65. access_resolve_4 [shape="oval",label="ACCESS"]
  66. access_resolve_5 [shape="oval",label="ACCESS"]
  67. access_resolve_7 [shape="oval",label="ACCESS"]
  68. access_resolve_8 [shape="oval",label="ACCESS"]
  69. access_resolve_9 [shape="oval",label="ACCESS"]
  70. if_1 [shape="oval",label="IF"]
  71. call_1 [shape="oval",label="CALL"]
  72. call_2 [shape="oval",label="CALL"]
  73. call_3 [shape="oval",label="CALL"]
  74. call_4 [shape="oval",label="CALL"]
  75. call_5 [shape="oval",label="CALL"]
  76. call_6 [shape="oval",label="CALL"]
  77. resolve_1 [shape="oval",label="RESOLVE"]
  78. resolve_2 [shape="oval",label="RESOLVE"]
  79. resolve_3 [shape="oval",label="RESOLVE"]
  80. resolve_4 [shape="oval",label="RESOLVE"]
  81. resolve_5 [shape="oval",label="RESOLVE"]
  82. resolve_6 [shape="oval",label="RESOLVE"]
  83. resolve_7 [shape="oval",label="RESOLVE"]
  84. resolve_8 [shape="oval",label="RESOLVE"]
  85. resolve_9 [shape="oval",label="RESOLVE"]
  86. resolve_11 [shape="oval",label="RESOLVE"]
  87. access_1 [shape="oval",label="ACCESS"]
  88. access_3 [shape="oval",label="ACCESS"]
  89. access_4 [shape="oval",label="ACCESS"]
  90. return_1 [shape="oval",label="RETURN"]
  91. return_2 [shape="oval",label="RETURN"]
  92. const_1 [shape="oval",label="CONST"]
  93. const_2 [shape="oval",label="CONST"]
  94. const_3 [shape="oval",label="CONST"]
  95. const_4 [shape="oval",label="CONST"]
  96. const_5 [shape="oval",label="CONST"]
  97. if_1 -> call_1 [label="cond"]
  98. if_1 -> return_2 [label="then"]
  99. if_1 -> return_1 [label="else"]
  100. // Condition
  101. call_1 -> access_resolve_1 [label="func"]
  102. access_resolve_1 -> resolve_1 [label="var"]
  103. resolve_1 -> var_3 [label="var",constraint="true"]
  104. call_1 -> param_1a [label="params"]
  105. param_1a -> value_a [label="name"]
  106. param_1a -> access_1 [label="value"]
  107. access_1 -> resolve_2 [label="var"]
  108. resolve_2 -> params_4_a [label="var",constraint="true"]
  109. param_1b -> value_b [label="name"]
  110. param_1b -> const_1 [label="value"]
  111. const_1 -> value_1 [label="node"]
  112. call_1 -> param_1b [label="last_param"]
  113. param_1a -> param_1b [label="next_param"]
  114. // Else
  115. return_1 -> const_2 [label="value"]
  116. const_2 -> value_2 [label="node"]
  117. // Then
  118. return_2 -> call_2 [label="value"]
  119. call_2 -> access_resolve_3 [label="func"]
  120. access_resolve_3 -> resolve_3 [label="var"]
  121. resolve_3 -> var_2 [label="var",constraint="true"]
  122. call_2 -> param_2a [label="params"]
  123. call_2 -> param_2b [label="last_param"]
  124. param_2a -> value_a2 [label="name"]
  125. param_2a -> call_5 [label="value"]
  126. param_2b -> value_b2 [label="name"]
  127. param_2b -> call_3 [label="value"]
  128. param_2a -> param_2b [label="next_param"]
  129. // call to self with n - 1
  130. call_3 -> access_resolve_4 [label="func"]
  131. access_resolve_4 -> resolve_4 [label="var"]
  132. resolve_4 -> var_4 [label="var",constraint="true"]
  133. call_3 -> param_3a [label="params"]
  134. call_3 -> param_3a [label="last_param"]
  135. param_3a -> value_n [label="name"]
  136. param_3a -> call_4 [label="value"]
  137. // Subtraction operation
  138. call_4 -> access_resolve_5 [label="func"]
  139. access_resolve_5 -> resolve_5 [label="var"]
  140. resolve_5 -> var_1 [label="var",constraint="true"]
  141. call_4 -> param_4a [label="params"]
  142. param_4a -> value_a3 [label="name"]
  143. param_4a -> access_3 [label="value"]
  144. access_3 -> resolve_6 [label="var"]
  145. resolve_6 -> params_4_a [label="var"]
  146. param_4b -> value_b3 [label="name"]
  147. param_4b -> const_3 [label="value"]
  148. const_3 -> value_3 [label="node"]
  149. call_4 -> param_4b [label="last_param"]
  150. param_4a -> param_4b [label="next_param"]
  151. // call to self with n - 2
  152. call_5 -> access_resolve_8 [label="func"]
  153. access_resolve_8 -> resolve_8 [label="var"]
  154. resolve_8 -> var_4 [label="var",constraint="true"]
  155. call_5 -> param_5a [label="params"]
  156. call_5 -> param_5a [label="last_param"]
  157. param_5a -> value_n2 [label="name"]
  158. param_5a -> call_6 [label="value"]
  159. // Subtraction operation
  160. call_6 -> access_resolve_9 [label="func"]
  161. access_resolve_9 -> resolve_9 [label="var"]
  162. resolve_9 -> var_1 [label="var",constraint="true"]
  163. call_6 -> param_6a [label="params"]
  164. param_6a -> value_a4 [label="name"]
  165. param_6a -> access_4 [label="value"]
  166. access_4 -> resolve_11 [label="var"]
  167. resolve_11 -> params_4_a [label="var"]
  168. param_6b -> value_b4 [label="name"]
  169. param_6b -> const_5 [label="value"]
  170. const_5 -> value_5 [label="node"]
  171. call_6 -> param_6b [label="last_param"]
  172. param_6a -> param_6b [label="next_param"]
  173. // Global initial IP
  174. const_4 [shape="oval",label="CONST"]
  175. value_4 [shape="oval",label="3"]
  176. resolve_7 [shape="oval",label="RESOLVE"]
  177. invoke_fib [shape="oval",label="CALL"]
  178. globals -> invoke_fib [label="__IP"]
  179. invoke_fib -> access_resolve_7 [label="func"]
  180. access_resolve_7 -> resolve_7 [label="var"]
  181. resolve_7 -> var_4 [label="var",constraint="true"]
  182. invoke_fib -> invoke_params [label="params"]
  183. invoke_fib -> invoke_params [label="last_param"]
  184. invoke_params -> const_4 [label="value"]
  185. invoke_params -> value_n2 [label="name"]
  186. const_4 -> value_4 [label="node"]
  187. }