digraph { node[shape="point"] mid_var_1[width="0"] mid_var_2[width="0"] mid_var_3[width="0"] mid_var_4[width="0"] HELP_var_1 [label="integer_subtraction",shape="rectangle"] HELP_var_2 [label="integer_addition",shape="rectangle"] HELP_var_3 [label="integer_gt",shape="rectangle"] HELP_var_4 [label="fib",shape="rectangle"] var_1 -> HELP_var_1 [style="dotted"] var_2 -> HELP_var_2 [style="dotted"] var_3 -> HELP_var_3 [style="dotted"] var_4 -> HELP_var_4 [style="dotted"] root -> globals [label="__globals"] globals -> mid_var_1 [arrowhead="none"] mid_var_1 -> var_1 [constraint="true"] mid_var_1 -> var_value_1 var_value_1 -> signature_1 [label="value"] signature_1 -> body_1 [label="body"] signature_1 -> params_1 [label="params"] params_1 -> params_1_a [label="a"] params_1 -> params_1_b [label="b"] globals -> mid_var_2 [arrowhead="none"] mid_var_2 -> var_2 [constraint="true"] mid_var_2 -> var_value_2 var_value_2 -> signature_2 [label="value"] signature_2 -> body_2 [label="body"] signature_2 -> params_2 [label="params"] params_2 -> params_2_a [label="a"] params_2 -> params_2_b [label="b"] globals -> mid_var_3 [arrowhead="none"] mid_var_3 -> var_3 [constraint="true"] mid_var_3 -> var_value_3 var_value_3 -> signature_3 [label="value"] signature_3 -> body_3 [label="body"] signature_3 -> params_3 [label="params"] params_3 -> params_3_a [label="a"] params_3 -> params_3_b [label="b"] globals -> mid_var_4 [arrowhead="none"] mid_var_4 -> var_4 [constraint="true"] mid_var_4 -> var_value_4 var_value_4 -> signature_4 [label="value"] signature_4 -> if_1 [label="body"] signature_4 -> params_4 [label="params"] params_4 -> params_4_a [label="n"] // The actual function begins here value_1 [shape="oval",label="1"] value_2 [shape="oval",label="1"] value_3 [shape="oval",label="1"] value_5 [shape="oval",label="2"] value_a [shape="oval",label="a"] value_b [shape="oval",label="b"] value_a2 [shape="oval",label="a"] value_b2 [shape="oval",label="b"] value_a3 [shape="oval",label="a"] value_b3 [shape="oval",label="b"] value_a4 [shape="oval",label="a"] value_b4 [shape="oval",label="b"] value_n [shape="oval",label="n"] value_n2 [shape="oval",label="n"] value_n3 [shape="oval",label="n"] access_resolve_1 [shape="oval",label="ACCESS"] access_resolve_3 [shape="oval",label="ACCESS"] access_resolve_4 [shape="oval",label="ACCESS"] access_resolve_5 [shape="oval",label="ACCESS"] access_resolve_7 [shape="oval",label="ACCESS"] access_resolve_8 [shape="oval",label="ACCESS"] access_resolve_9 [shape="oval",label="ACCESS"] if_1 [shape="oval",label="IF"] call_1 [shape="oval",label="CALL"] call_2 [shape="oval",label="CALL"] call_3 [shape="oval",label="CALL"] call_4 [shape="oval",label="CALL"] call_5 [shape="oval",label="CALL"] call_6 [shape="oval",label="CALL"] resolve_1 [shape="oval",label="RESOLVE"] resolve_2 [shape="oval",label="RESOLVE"] resolve_3 [shape="oval",label="RESOLVE"] resolve_4 [shape="oval",label="RESOLVE"] resolve_5 [shape="oval",label="RESOLVE"] resolve_6 [shape="oval",label="RESOLVE"] resolve_7 [shape="oval",label="RESOLVE"] resolve_8 [shape="oval",label="RESOLVE"] resolve_9 [shape="oval",label="RESOLVE"] resolve_11 [shape="oval",label="RESOLVE"] access_1 [shape="oval",label="ACCESS"] access_3 [shape="oval",label="ACCESS"] access_4 [shape="oval",label="ACCESS"] return_1 [shape="oval",label="RETURN"] return_2 [shape="oval",label="RETURN"] const_1 [shape="oval",label="CONST"] const_2 [shape="oval",label="CONST"] const_3 [shape="oval",label="CONST"] const_4 [shape="oval",label="CONST"] const_5 [shape="oval",label="CONST"] if_1 -> call_1 [label="cond"] if_1 -> return_2 [label="then"] if_1 -> return_1 [label="else"] // Condition call_1 -> access_resolve_1 [label="func"] access_resolve_1 -> resolve_1 [label="var"] resolve_1 -> var_3 [label="var",constraint="true"] call_1 -> param_1a [label="params"] param_1a -> value_a [label="name"] param_1a -> access_1 [label="value"] access_1 -> resolve_2 [label="var"] resolve_2 -> params_4_a [label="var",constraint="true"] param_1b -> value_b [label="name"] param_1b -> const_1 [label="value"] const_1 -> value_1 [label="node"] call_1 -> param_1b [label="last_param"] param_1a -> param_1b [label="next_param"] // Else return_1 -> const_2 [label="value"] const_2 -> value_2 [label="node"] // Then return_2 -> call_2 [label="value"] call_2 -> access_resolve_3 [label="func"] access_resolve_3 -> resolve_3 [label="var"] resolve_3 -> var_2 [label="var",constraint="true"] call_2 -> param_2a [label="params"] call_2 -> param_2b [label="last_param"] param_2a -> value_a2 [label="name"] param_2a -> call_5 [label="value"] param_2b -> value_b2 [label="name"] param_2b -> call_3 [label="value"] param_2a -> param_2b [label="next_param"] // call to self with n - 1 call_3 -> access_resolve_4 [label="func"] access_resolve_4 -> resolve_4 [label="var"] resolve_4 -> var_4 [label="var",constraint="true"] call_3 -> param_3a [label="params"] call_3 -> param_3a [label="last_param"] param_3a -> value_n [label="name"] param_3a -> call_4 [label="value"] // Subtraction operation call_4 -> access_resolve_5 [label="func"] access_resolve_5 -> resolve_5 [label="var"] resolve_5 -> var_1 [label="var",constraint="true"] call_4 -> param_4a [label="params"] param_4a -> value_a3 [label="name"] param_4a -> access_3 [label="value"] access_3 -> resolve_6 [label="var"] resolve_6 -> params_4_a [label="var"] param_4b -> value_b3 [label="name"] param_4b -> const_3 [label="value"] const_3 -> value_3 [label="node"] call_4 -> param_4b [label="last_param"] param_4a -> param_4b [label="next_param"] // call to self with n - 2 call_5 -> access_resolve_8 [label="func"] access_resolve_8 -> resolve_8 [label="var"] resolve_8 -> var_4 [label="var",constraint="true"] call_5 -> param_5a [label="params"] call_5 -> param_5a [label="last_param"] param_5a -> value_n2 [label="name"] param_5a -> call_6 [label="value"] // Subtraction operation call_6 -> access_resolve_9 [label="func"] access_resolve_9 -> resolve_9 [label="var"] resolve_9 -> var_1 [label="var",constraint="true"] call_6 -> param_6a [label="params"] param_6a -> value_a4 [label="name"] param_6a -> access_4 [label="value"] access_4 -> resolve_11 [label="var"] resolve_11 -> params_4_a [label="var"] param_6b -> value_b4 [label="name"] param_6b -> const_5 [label="value"] const_5 -> value_5 [label="node"] call_6 -> param_6b [label="last_param"] param_6a -> param_6b [label="next_param"] // Global initial IP const_4 [shape="oval",label="CONST"] value_4 [shape="oval",label="3"] resolve_7 [shape="oval",label="RESOLVE"] invoke_fib [shape="oval",label="CALL"] globals -> invoke_fib [label="__IP"] invoke_fib -> access_resolve_7 [label="func"] access_resolve_7 -> resolve_7 [label="var"] resolve_7 -> var_4 [label="var",constraint="true"] invoke_fib -> invoke_params [label="params"] invoke_fib -> invoke_params [label="last_param"] invoke_params -> const_4 [label="value"] invoke_params -> value_n2 [label="name"] const_4 -> value_4 [label="node"] }