
diff -r 4437dc1a41bf -r 9d06a8863898 handouts/ho07.tex
--- a/handouts/ho07.tex	Fri Feb 07 12:44:27 2020 +0000
+++ b/handouts/ho07.tex	Fri Feb 21 23:55:56 2020 +0100
@@ -4,6 +4,7 @@
 \usepackage{../langs}
 \usepackage{../grammar}
 \usepackage{../graphics}
+\usetikzlibrary{calc,shapes,arrows}
 \usepackage{framed}
 \usepackage[belowskip=7pt,aboveskip=0pt]{caption}
 
@@ -1074,6 +1075,58 @@
 L2:
 \end{lstlisting}
 
+\begin{figure}[p]
+\begin{center}
+\begin{tikzpicture}[every text node part/.style={align=left},
+                    stack/.style={rectangle split,rectangle split parts = 5,
+                                  fill=black!20,draw,text width=1.6cm,line width=0.5mm}]
+\node (A)  {};
+\node[stack,right = 80pt] (0) at (A.east) {$\textit{index}$\nodepart{two} \ldots\phantom{l}};
+\node[stack,right = 60pt] (1) at (0.east)  
+   {array\nodepart{two}
+    $\textit{index}$\nodepart{three} \ldots\phantom{l}};
+\node[stack,below = 40pt] (2) at (1.south)  
+   {array\nodepart{two}
+    $\textit{index}$ \nodepart{three}
+    array \nodepart{four}
+    $\textit{index}$\nodepart{five} \ldots\phantom{l}}; 
+\node[stack,left = 90pt] (3) at (2.west)  
+   {array\_len\nodepart{two}
+    $\textit{index}$ \nodepart{three}
+    array \nodepart{four}
+    $\textit{index}$\nodepart{five} \ldots\phantom{l}};    
+\node[stack,below right of = 3,node distance = 130pt,rectangle split parts = 3] (4b) at (3.south)
+   {array\nodepart{two}
+    $\textit{index}$\nodepart{three} \ldots\phantom{l}};
+\node[stack,below left of = 3,node distance = 130pt,rectangle split parts = 3] (4a) at (3.south)
+   {array\nodepart{two}
+    $\textit{index}$\nodepart{three} \ldots\phantom{l}};  
+\node[stack,below of = 4a,node distance = 70pt,rectangle split parts = 3] (5a) at (4a.south)
+   {$\textit{index}$\nodepart{two}
+    array\nodepart{three} \ldots\phantom{l}};                
+\node[stack,below of = 5a,node distance = 60pt,rectangle split parts = 2] (6a) at (5a.south)
+   {$\textit{array\_elem}$\nodepart{two} \ldots\phantom{l}};
+\node[stack,below of = 4b,node distance = 65pt,rectangle split parts = 2] (5b) at (4b.south)
+   {\ldots\phantom{l}};       
+\node[stack,below of = 5b,node distance = 60pt,rectangle split parts = 2] (6b) at (5b.south)
+   {0\nodepart{two} \ldots\phantom{l}}; 
+
+\draw [|->,line width=2.5mm] (A) -- node [above,pos=0.45] {$\textit{index\_aexp}$} (0); 
+\draw [->,line width=2.5mm] (0) -- node [above,pos=0.35] {\instr{aload}} (1);
+\draw [->,line width=2.5mm] (1) -- node [right,pos=0.35] {\instr{dup2}} (2);  
+\draw [->,line width=2.5mm] (2) -- node [above,pos=0.40] {\instr{arraylength}} (3);
+\path[->,draw,line width=2.5mm] 
+  let \p1=(3.south), \p2=(4a.north) in (3.south) -- +(0,0.5*\y2-0.5*\y1) node [right,pos=0.50] {\instr{if_icmple}} -| (4a.north);  
+\path[->,draw,line width=2.5mm] 
+  let \p1=(3.south), \p2=(4b.north) in (3.south) -- +(0,0.5*\y2-0.5*\y1) -| (4b.north);
+\draw [->,line width=2.5mm] (4a) -- node [right,pos=0.35] {\instr{swap}} (5a);
+\draw [->,line width=2.5mm] (4b) -- node [right,pos=0.35] {\instr{pop2}} (5b);  
+\draw [->,line width=2.5mm] (5a) -- node [right,pos=0.35] {\instr{iaload}} (6a);
+\draw [->,line width=2.5mm] (5b) -- node [right,pos=0.35] {\instr{iconst_0}} (6b);
+\end{tikzpicture}                      
+\end{center}
+\end{figure}
+
 goto\_w problem solved for too large jumps
 \end{document}
 




