% -*- mode: latex; auto-revert-interval: 0.5 -*- \begin{tikzpicture}[->,>=stealth',shorten >=1pt,auto, node distance=4em, very thin,font={\scriptsize\bf}] \pgfdeclarelayer{background} \pgfdeclarelayer{foreground} \pgfsetlayers{background,main,foreground} \tikzstyle{basic-block} = [draw=black!50, fill=white, rectangle, minimum width=15em] \ifthenelse{\boolean{preview}} {\tikzstyle{block} = [basic-block]} {\tikzstyle{block} = [basic-block, drop shadow]} \tikzstyle{enter} = [block, ellipse, fill=red!20] \tikzstyle{guard} = [block, fill=yellow!20] \tikzstyle{newguard} = [block, fill=green!20] \tikzstyle{lbl} = [font={\scriptsize\it}, minimum width=0em] \clip (-4.3, 1.9) rectangle (11.9,-9.5); \node[enter, name=start] {loop($obj\_val_0$)} ; \node[guard, name=block1, below of=start] { \begin{tabular}{c} $t_0$ = int\_lt($obj\_val_0$, $10$) \\ \textcolor{blue}{guard\_false($t_0$)} \end{tabular} }; \node[guard, name=block2, below=7em of block1] { \begin{tabular}{c} $obj\_val_1$ = int\_sub($obj\_val_0$, $1$) \\ \end{tabular} }; \node[guard, name=block3, below=3em of block2] { \begin{tabular}{c} $t_1$ = int\_gt($obj\_val_1$, 0) \\ guard\_true($t_1$) \\ jump($obj\_val_1$) \end{tabular} }; \path (start.south) edge (block1.north) ; \path (block1.south) edge node[name=block1_2, pos=0.4, rectangle, minimum width=7.5em]{} (block2.north) ; \path (block2.south) edge (block3.north) ; \path (block3.south) edge[out distance=21em, in distance=21em, out=230, in=130] (start.north) ; \node[newguard, name=block4, right=1em of block1_2] { \begin{tabular}{c} $obj_0$ = new\_with\_vtable(\texttt{W\_Int}) \\ setfield\_gc($obj_0$, $obj\_val_2$, \texttt{val}) \\ call(\texttt{external\_func}, $obj_0$) \\ \end{tabular} }; \node[newguard, name=block5, right=1em of block2] { \begin{tabular}{c} $obj\_val_3$ = getfield\_gc($obj_0$, \texttt{val}) \\ $obj\_val_4$ = int\_sub($obj\_val_3$, $1$) \\ \end{tabular} }; \node[newguard, name=block6, right=1em of block3] { \begin{tabular}{c} $t_2$ = int\_gt($obj\_val_4$, 0) \\ guard\_true($t_2$) \\ jump($obj\_val_4$) \end{tabular} }; \path (block1.south east) edge node[lbl] { \begin{tabular}{c} $obj\_val_2 \leftarrow obj\_val_0$ \\ \end{tabular} } (block4.north) ; \path (block4.south) edge (block5.north) ; \path (block5.south) edge (block6.north) ; \path (block6.south) edge[out distance=30em, in distance=25em, out=340, in=40] (start.north) ; \end{tikzpicture}