digraph g { enter []; mxin [label = "x = x_in", ]; try []; x_in [label = "x_in = x", ]; f [label = "f()", ]; nr [label = "normal return"]; x_out_nr [label = "x = x_out"]; er [label = "error return"]; catch [label = "catch (Exception e)"]; x_out_catch [label = "x = x_out"]; log [label = "log(\"error\")"]; x_0 [label = "x = 0", style = invis]; x_in2 [label = "x_in = x", style = filled, fillcolor = lightgreen]; f2 [label = "f()", style = filled, fillcolor = lightgreen]; nr2 [label = "normal return", style = filled, fillcolor = lightgreen]; er2 [label = "error return", style = filled, fillcolor = lightgreen]; ee [label = "error exit"]; x_out_nr2 [label = "x = x_out", style = filled, fillcolor = lightgreen]; x_out_ee [label = "x = x_out", style = filled, fillcolor = lightgreen]; enter -> {mxin try}; enter -> x_0 [style = invis]; try -> f -> {x_in nr er} nr -> x_out_nr er -> catch -> {x_out_catch log} enter -> {f2} f2 -> {x_in2 nr2 er2} nr2 -> x_out_nr2 er2 -> ee -> x_out_ee; {edge [color = red, constraint = false]; mxin -> x_in; {x_out_catch x_out_nr} -> x_in2; x_0 -> x_in2 [style = invis]; } {edge [color = blue, constraint = false]; x_in -> {x_out_nr x_out_catch} x_in2 -> {x_out_nr2 x_out_ee} } }