summaryrefslogtreecommitdiff
path: root/chapter10a
diff options
context:
space:
mode:
Diffstat (limited to 'chapter10a')
-rw-r--r--chapter10a/README.md8
-rw-r--r--chapter10a/docs/example1.gv20
-rw-r--r--chapter10a/docs/example1.svg48
-rw-r--r--chapter10a/docs/example2a.gv21
-rw-r--r--chapter10a/docs/example2a.svg56
-rw-r--r--chapter10a/docs/example2b.gv22
-rw-r--r--chapter10a/docs/example2b.svg48
-rw-r--r--chapter10a/docs/example2c.gv17
-rw-r--r--chapter10a/docs/example2c.svg34
-rw-r--r--chapter10a/docs/lattice.gv2
-rw-r--r--chapter10a/docs/lattice.svg233
11 files changed, 267 insertions, 242 deletions
diff --git a/chapter10a/README.md b/chapter10a/README.md
index 80a1f46c..b9ea258a 100644
--- a/chapter10a/README.md
+++ b/chapter10a/README.md
@@ -45,7 +45,7 @@ are `{ctrl, $mem, result}`.
The memory edge is a dependency, not a copy of the heap. The graph determines
the legal execution order. In hardware, a Store updates physical memory
-directly. In the evaluator, a Store updates an objects' attached memory array.
+directly. In the evaluator, a Store updates an object's attached memory array.
## Memory is an SSA variable
@@ -269,7 +269,7 @@ If `bar` is `null` then we would like `!bar` to evaluate to `true`. In the else
branch we know `bar` is not null, hence the assignment to `bar.a` should be
allowed.
-To enable this behaviour, we make following enhancements.
+To enable this behaviour, we make the following enhancements.
* We track the null-ness of a pointer in the Type system, and hence in every
Node that ptr type flows through.
@@ -286,7 +286,7 @@ To enable this behaviour, we make following enhancements.
* The up-cast is represented by the `CastNode` op, and if applicable, we
replace all occurrences of the original predicate with the up-cast in the
- current scope. The change is local to each branch of the `If`; occuring
+ current scope. The change is local to each branch of the `If`; occurring
separately for the true and the false branches of the `If` (and the false
branch inverts the predicate).
@@ -295,7 +295,7 @@ To enable this behaviour, we make following enhancements.
and `CastNode`.
* When computing a type for Not, we produce an Integer type when its input is a
- ptr. When the input is a `null` we convert to `1` and when is a not `null`
+ ptr. When the input is a `null` we convert to `1` and when it is a non-null
ptr value, we convert to `0`. See `NotNode.compute()`.
diff --git a/chapter10a/docs/example1.gv b/chapter10a/docs/example1.gv
index d399b562..9585b8e4 100644
--- a/chapter10a/docs/example1.gv
+++ b/chapter10a/docs/example1.gv
@@ -1,10 +1,16 @@
digraph Memory {
+ // IR styles match graph/web/render.js; arrows are use -> definition.
+ graph [bgcolor="#fafbfc" fontname="Helvetica" nodesep=0.35 ranksep=0.55 splines=ortho];
+ node [fontname="Helvetica" fontsize=12 color="#758191" fontcolor="#152330" shape=box style="rounded,filled" fillcolor="#edf3f7"];
+ edge [fontname="Helvetica" fontsize=9 color="#536477" fontcolor="#364352" arrowsize=0.7 penwidth=1.5];
+
rankdir=RL;
- node [shape=box];
- M0 [label="Initial memory"];
- X [label="Store p.x = 3"];
- Y [label="Store p.y = arg"];
- L [label="Load p.x"];
- L -> Y -> X -> M0 [color=blue];
- Return -> Y [color=blue]; Return -> L;
+
+ M0 [label="Initial memory" shape=octagon style="filled" fillcolor="#dcecff"];
+ X [label="Store p.x = 3" shape=octagon style="filled" fillcolor="#dcecff"];
+ Y [label="Store p.y = arg" shape=octagon style="filled" fillcolor="#dcecff"];
+ L [label="Load p.x" shape=box style="rounded,filled" fillcolor="#edf3f7"];
+ L -> Y -> X -> M0 [color="#2867b2"];
+ Return -> Y [color="#2867b2"]; Return -> L;
+ Return [shape=box style="filled" fillcolor="#fff1c4"];
}
diff --git a/chapter10a/docs/example1.svg b/chapter10a/docs/example1.svg
index d1c5e3bd..fdb4864c 100644
--- a/chapter10a/docs/example1.svg
+++ b/chapter10a/docs/example1.svg
@@ -4,70 +4,70 @@
<!-- Generated by graphviz version 12.2.0 (20241103.1931)
-->
<!-- Title: Memory Pages: 1 -->
-<svg width="556pt" height="67pt"
- viewBox="0.00 0.00 555.75 67.00" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink">
-<g id="graph0" class="graph" transform="scale(1 1) rotate(0) translate(4 63)">
+<svg width="650pt" height="72pt"
+ viewBox="0.00 0.00 650.34 72.00" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink">
+<g id="graph0" class="graph" transform="scale(1 1) rotate(0) translate(4 68)">
<title>Memory</title>
-<polygon fill="white" stroke="none" points="-4,4 -4,-63 551.75,-63 551.75,4 -4,4"/>
+<polygon fill="#fafbfc" stroke="none" points="-4,4 -4,-68 646.34,-68 646.34,4 -4,4"/>
<!-- M0 -->
<g id="node1" class="node">
<title>M0</title>
-<polygon fill="none" stroke="black" points="98.5,-59 0,-59 0,-23 98.5,-23 98.5,-59"/>
-<text text-anchor="middle" x="49.25" y="-35.95" font-family="Times New Roman,serif" font-size="14.00">Initial memory</text>
+<polygon fill="#dcecff" stroke="#758191" points="124.26,-38.54 124.26,-53.46 87.87,-64 36.4,-64 0,-53.46 0,-38.54 36.4,-28 87.87,-28 124.26,-38.54"/>
+<text text-anchor="middle" x="62.13" y="-41.73" font-family="Helvetica,sans-Serif" font-size="12.00" fill="#152330">Initial memory</text>
</g>
<!-- X -->
<g id="node2" class="node">
<title>X</title>
-<polygon fill="none" stroke="black" points="222.5,-59 134.5,-59 134.5,-23 222.5,-23 222.5,-59"/>
-<text text-anchor="middle" x="178.5" y="-35.95" font-family="Times New Roman,serif" font-size="14.00">Store p.x = 3</text>
+<polygon fill="#dcecff" stroke="#758191" points="278.2,-38.54 278.2,-53.46 244.83,-64 197.63,-64 164.26,-53.46 164.26,-38.54 197.63,-28 244.83,-28 278.2,-38.54"/>
+<text text-anchor="middle" x="221.23" y="-41.73" font-family="Helvetica,sans-Serif" font-size="12.00" fill="#152330">Store p.x = 3</text>
</g>
<!-- X&#45;&gt;M0 -->
<g id="edge3" class="edge">
<title>X&#45;&gt;M0</title>
-<path fill="none" stroke="blue" d="M134.06,-41C126.33,-41 118.16,-41 110.06,-41"/>
-<polygon fill="blue" stroke="blue" points="110.24,-37.5 100.24,-41 110.24,-44.5 110.24,-37.5"/>
+<path fill="none" stroke="#2867b2" stroke-width="1.5" d="M163.79,-46C163.79,-46 133.87,-46 133.87,-46"/>
+<polygon fill="#2867b2" stroke="#2867b2" stroke-width="1.5" points="133.87,-43.55 126.87,-46 133.87,-48.45 133.87,-43.55"/>
</g>
<!-- Y -->
<g id="node3" class="node">
<title>Y</title>
-<polygon fill="none" stroke="black" points="357,-59 258.5,-59 258.5,-23 357,-23 357,-59"/>
-<text text-anchor="middle" x="307.75" y="-35.95" font-family="Times New Roman,serif" font-size="14.00">Store p.y = arg</text>
+<polygon fill="#dcecff" stroke="#758191" points="446.59,-38.54 446.59,-53.46 408.98,-64 355.8,-64 318.2,-53.46 318.2,-38.54 355.8,-28 408.98,-28 446.59,-38.54"/>
+<text text-anchor="middle" x="382.39" y="-41.73" font-family="Helvetica,sans-Serif" font-size="12.00" fill="#152330">Store p.y = arg</text>
</g>
<!-- Y&#45;&gt;X -->
<g id="edge2" class="edge">
<title>Y&#45;&gt;X</title>
-<path fill="none" stroke="blue" d="M258.28,-41C250.45,-41 242.29,-41 234.32,-41"/>
-<polygon fill="blue" stroke="blue" points="234.35,-37.5 224.35,-41 234.35,-44.5 234.35,-37.5"/>
+<path fill="none" stroke="#2867b2" stroke-width="1.5" d="M317.77,-46C317.77,-46 287.85,-46 287.85,-46"/>
+<polygon fill="#2867b2" stroke="#2867b2" stroke-width="1.5" points="287.85,-43.55 280.85,-46 287.85,-48.45 287.85,-43.55"/>
</g>
<!-- L -->
<g id="node4" class="node">
<title>L</title>
-<polygon fill="none" stroke="black" points="457.75,-36 393,-36 393,0 457.75,0 457.75,-36"/>
-<text text-anchor="middle" x="425.38" y="-12.95" font-family="Times New Roman,serif" font-size="14.00">Load p.x</text>
+<path fill="#edf3f7" stroke="#758191" d="M536.34,-36C536.34,-36 498.59,-36 498.59,-36 492.59,-36 486.59,-30 486.59,-24 486.59,-24 486.59,-12 486.59,-12 486.59,-6 492.59,0 498.59,0 498.59,0 536.34,0 536.34,0 542.34,0 548.34,-6 548.34,-12 548.34,-12 548.34,-24 548.34,-24 548.34,-30 542.34,-36 536.34,-36"/>
+<text text-anchor="middle" x="517.46" y="-13.72" font-family="Helvetica,sans-Serif" font-size="12.00" fill="#152330">Load p.x</text>
</g>
<!-- L&#45;&gt;Y -->
<g id="edge1" class="edge">
<title>L&#45;&gt;Y</title>
-<path fill="none" stroke="blue" d="M392.78,-24.28C385.16,-25.8 376.76,-27.47 368.31,-29.15"/>
-<polygon fill="blue" stroke="blue" points="367.85,-25.68 358.73,-31.06 369.22,-32.54 367.85,-25.68"/>
+<path fill="none" stroke="#2867b2" stroke-width="1.5" d="M486.13,-32C486.13,-32 434.33,-32 434.33,-32"/>
+<polygon fill="#2867b2" stroke="#2867b2" stroke-width="1.5" points="434.33,-29.55 427.33,-32 434.33,-34.45 434.33,-29.55"/>
</g>
<!-- Return -->
<g id="node5" class="node">
<title>Return</title>
-<polygon fill="none" stroke="black" points="547.75,-59 493.75,-59 493.75,-23 547.75,-23 547.75,-59"/>
-<text text-anchor="middle" x="520.75" y="-35.95" font-family="Times New Roman,serif" font-size="14.00">Return</text>
+<polygon fill="#fff1c4" stroke="#758191" points="642.34,-64 588.34,-64 588.34,-28 642.34,-28 642.34,-64"/>
+<text text-anchor="middle" x="615.34" y="-41.73" font-family="Helvetica,sans-Serif" font-size="12.00" fill="#152330">Return</text>
</g>
<!-- Return&#45;&gt;Y -->
<g id="edge4" class="edge">
<title>Return&#45;&gt;Y</title>
-<path fill="none" stroke="blue" d="M493.52,-43.07C482.49,-43.84 469.5,-44.62 457.75,-45 428.99,-45.93 421.77,-45.68 393,-45 385.14,-44.81 376.87,-44.53 368.71,-44.2"/>
-<polygon fill="blue" stroke="blue" points="368.95,-40.7 358.81,-43.76 368.65,-47.7 368.95,-40.7"/>
+<path fill="none" stroke="#2867b2" stroke-width="1.5" d="M588.16,-50C588.16,-50 455.99,-50 455.99,-50"/>
+<polygon fill="#2867b2" stroke="#2867b2" stroke-width="1.5" points="455.99,-47.55 448.99,-50 455.99,-52.45 455.99,-47.55"/>
</g>
<!-- Return&#45;&gt;L -->
<g id="edge5" class="edge">
<title>Return&#45;&gt;L</title>
-<path fill="none" stroke="black" d="M493.74,-34.59C486.17,-32.73 477.69,-30.64 469.38,-28.59"/>
-<polygon fill="black" stroke="black" points="470.24,-25.2 459.7,-26.21 468.57,-32 470.24,-25.2"/>
+<path fill="none" stroke="#536477" stroke-width="1.5" d="M588.07,-32C588.07,-32 558,-32 558,-32"/>
+<polygon fill="#536477" stroke="#536477" stroke-width="1.5" points="558,-29.55 551,-32 558,-34.45 558,-29.55"/>
</g>
</g>
</svg>
diff --git a/chapter10a/docs/example2a.gv b/chapter10a/docs/example2a.gv
index ec5afbdc..93a8a904 100644
--- a/chapter10a/docs/example2a.gv
+++ b/chapter10a/docs/example2a.gv
@@ -1,10 +1,17 @@
digraph Memory {
+ // IR styles match graph/web/render.js; arrows are use -> definition.
+ graph [bgcolor="#fafbfc" fontname="Helvetica" nodesep=0.35 ranksep=0.55 splines=ortho];
+ node [fontname="Helvetica" fontsize=12 color="#758191" fontcolor="#152330" shape=box style="rounded,filled" fillcolor="#edf3f7"];
+ edge [fontname="Helvetica" fontsize=9 color="#536477" fontcolor="#364352" arrowsize=0.7 penwidth=1.5];
+
rankdir=RL;
- node [shape=box];
- M [label="Incoming memory"];
- A [label="True: Store x"];
- B [label="False: Store y"];
- P [label="Phi(memory)"];
- P -> A -> M [color=blue]; P -> B -> M [color=blue];
- P -> Region [style=dashed]; Return -> P [color=blue];
+
+ M [label="Incoming memory" shape=octagon style="filled" fillcolor="#dcecff"];
+ A [label="True: Store x" shape=octagon style="filled" fillcolor="#dcecff"];
+ B [label="False: Store x" shape=octagon style="filled" fillcolor="#dcecff"];
+ P [label="Phi(memory)" shape=hexagon style="filled" fillcolor="#f5e4fa"];
+ P -> A -> M [color="#2867b2"]; P -> B -> M [color="#2867b2"];
+ P -> Region [style=dashed,color="#9396a3"]; Return -> P [color="#2867b2"];
+ Return [shape=box style="filled" fillcolor="#fff1c4"];
+ Region [shape=trapezium style="filled" fillcolor="#fff1c4"];
}
diff --git a/chapter10a/docs/example2a.svg b/chapter10a/docs/example2a.svg
index f9a9b4fd..f0bbf531 100644
--- a/chapter10a/docs/example2a.svg
+++ b/chapter10a/docs/example2a.svg
@@ -4,82 +4,82 @@
<!-- Generated by graphviz version 12.2.0 (20241103.1931)
-->
<!-- Title: Memory Pages: 1 -->
-<svg width="469pt" height="152pt"
- viewBox="0.00 0.00 469.25 152.00" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink">
-<g id="graph0" class="graph" transform="scale(1 1) rotate(0) translate(4 148)">
+<svg width="581pt" height="166pt"
+ viewBox="0.00 0.00 581.12 166.00" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink">
+<g id="graph0" class="graph" transform="scale(1 1) rotate(0) translate(4 162)">
<title>Memory</title>
-<polygon fill="white" stroke="none" points="-4,4 -4,-148 465.25,-148 465.25,4 -4,4"/>
+<polygon fill="#fafbfc" stroke="none" points="-4,4 -4,-162 577.12,-162 577.12,4 -4,4"/>
<!-- M -->
<g id="node1" class="node">
<title>M</title>
-<polygon fill="none" stroke="black" points="118.75,-117 0,-117 0,-81 118.75,-81 118.75,-117"/>
-<text text-anchor="middle" x="59.38" y="-93.95" font-family="Times New Roman,serif" font-size="14.00">Incoming memory</text>
+<polygon fill="#dcecff" stroke="#758191" points="152.14,-101.54 152.14,-116.46 107.58,-127 44.56,-127 0,-116.46 0,-101.54 44.56,-91 107.58,-91 152.14,-101.54"/>
+<text text-anchor="middle" x="76.07" y="-104.72" font-family="Helvetica,sans-Serif" font-size="12.00" fill="#152330">Incoming memory</text>
</g>
<!-- A -->
<g id="node2" class="node">
<title>A</title>
-<polygon fill="none" stroke="black" points="244.25,-144 156.25,-144 156.25,-108 244.25,-108 244.25,-144"/>
-<text text-anchor="middle" x="200.25" y="-120.95" font-family="Times New Roman,serif" font-size="14.00">True: Store x</text>
+<polygon fill="#dcecff" stroke="#758191" points="311.24,-132.54 311.24,-147.46 277.57,-158 229.95,-158 196.27,-147.46 196.27,-132.54 229.95,-122 277.57,-122 311.24,-132.54"/>
+<text text-anchor="middle" x="253.76" y="-135.72" font-family="Helvetica,sans-Serif" font-size="12.00" fill="#152330">True: Store x</text>
</g>
<!-- A&#45;&gt;M -->
<g id="edge2" class="edge">
<title>A&#45;&gt;M</title>
-<path fill="none" stroke="blue" d="M156.07,-117.61C147.84,-116.01 139.03,-114.29 130.22,-112.58"/>
-<polygon fill="blue" stroke="blue" points="131.06,-109.18 120.58,-110.7 129.72,-116.05 131.06,-109.18"/>
+<path fill="none" stroke="#2867b2" stroke-width="1.5" d="M272.92,-121.71C272.92,-117.22 272.92,-113.67 272.92,-113.67 272.92,-113.67 161.73,-113.67 161.73,-113.67"/>
+<polygon fill="#2867b2" stroke="#2867b2" stroke-width="1.5" points="161.73,-111.22 154.73,-113.67 161.73,-116.12 161.73,-111.22"/>
</g>
<!-- B -->
<g id="node3" class="node">
<title>B</title>
-<polygon fill="none" stroke="black" points="245.75,-90 154.75,-90 154.75,-54 245.75,-54 245.75,-90"/>
-<text text-anchor="middle" x="200.25" y="-66.95" font-family="Times New Roman,serif" font-size="14.00">False: Store y</text>
+<polygon fill="#dcecff" stroke="#758191" points="315.37,-71.54 315.37,-86.46 279.28,-97 228.24,-97 192.14,-86.46 192.14,-71.54 228.24,-61 279.28,-61 315.37,-71.54"/>
+<text text-anchor="middle" x="253.76" y="-74.72" font-family="Helvetica,sans-Serif" font-size="12.00" fill="#152330">False: Store x</text>
</g>
<!-- B&#45;&gt;M -->
<g id="edge4" class="edge">
<title>B&#45;&gt;M</title>
-<path fill="none" stroke="blue" d="M154.54,-80.69C146.8,-82.2 138.59,-83.79 130.37,-85.39"/>
-<polygon fill="blue" stroke="blue" points="129.83,-81.93 120.68,-87.28 131.16,-88.8 129.83,-81.93"/>
+<path fill="none" stroke="#2867b2" stroke-width="1.5" d="M234.6,-97.29C234.6,-101.78 234.6,-105.33 234.6,-105.33 234.6,-105.33 161.82,-105.33 161.82,-105.33"/>
+<polygon fill="#2867b2" stroke="#2867b2" stroke-width="1.5" points="161.82,-102.88 154.82,-105.33 161.82,-107.78 161.82,-102.88"/>
</g>
<!-- P -->
<g id="node4" class="node">
<title>P</title>
-<polygon fill="none" stroke="black" points="371.25,-90 281.75,-90 281.75,-54 371.25,-54 371.25,-90"/>
-<text text-anchor="middle" x="326.5" y="-66.95" font-family="Times New Roman,serif" font-size="14.00">Phi(memory)</text>
+<polygon fill="#f5e4fa" stroke="#758191" points="479.12,-79 448.18,-97 386.31,-97 355.37,-79 386.31,-61 448.18,-61 479.12,-79"/>
+<text text-anchor="middle" x="417.25" y="-74.72" font-family="Helvetica,sans-Serif" font-size="12.00" fill="#152330">Phi(memory)</text>
</g>
<!-- P&#45;&gt;A -->
<g id="edge1" class="edge">
<title>P&#45;&gt;A</title>
-<path fill="none" stroke="blue" d="M283.09,-90.43C273.69,-94.52 263.62,-98.89 253.88,-103.13"/>
-<polygon fill="blue" stroke="blue" points="252.64,-99.85 244.86,-107.05 255.43,-106.27 252.64,-99.85"/>
+<path fill="none" stroke="#2867b2" stroke-width="1.5" d="M417.25,-97.3C417.25,-115.27 417.25,-140 417.25,-140 417.25,-140 320.67,-140 320.67,-140"/>
+<polygon fill="#2867b2" stroke="#2867b2" stroke-width="1.5" points="320.67,-137.55 313.67,-140 320.67,-142.45 320.67,-137.55"/>
</g>
<!-- P&#45;&gt;B -->
<g id="edge3" class="edge">
<title>P&#45;&gt;B</title>
-<path fill="none" stroke="blue" d="M281.34,-72C273.66,-72 265.57,-72 257.61,-72"/>
-<polygon fill="blue" stroke="blue" points="257.62,-68.5 247.62,-72 257.62,-75.5 257.62,-68.5"/>
+<path fill="none" stroke="#2867b2" stroke-width="1.5" d="M354.5,-79C354.5,-79 325.06,-79 325.06,-79"/>
+<polygon fill="#2867b2" stroke="#2867b2" stroke-width="1.5" points="325.06,-76.55 318.06,-79 325.06,-81.45 325.06,-76.55"/>
</g>
<!-- Region -->
<g id="node5" class="node">
<title>Region</title>
-<polygon fill="none" stroke="black" points="227.75,-36 172.75,-36 172.75,0 227.75,0 227.75,-36"/>
-<text text-anchor="middle" x="200.25" y="-12.95" font-family="Times New Roman,serif" font-size="14.00">Region</text>
+<polygon fill="#fff1c4" stroke="#758191" points="282.65,-36 224.86,-36 204.29,0 303.23,0 282.65,-36"/>
+<text text-anchor="middle" x="253.76" y="-13.72" font-family="Helvetica,sans-Serif" font-size="12.00" fill="#152330">Region</text>
</g>
<!-- P&#45;&gt;Region -->
<g id="edge5" class="edge">
<title>P&#45;&gt;Region</title>
-<path fill="none" stroke="black" stroke-dasharray="5,2" d="M283.09,-53.57C268.52,-47.24 252.34,-40.21 238.24,-34.08"/>
-<polygon fill="black" stroke="black" points="239.88,-30.97 229.31,-30.2 237.09,-37.39 239.88,-30.97"/>
+<path fill="none" stroke="#9396a3" stroke-width="1.5" stroke-dasharray="5,2" d="M417.25,-60.7C417.25,-42.73 417.25,-18 417.25,-18 417.25,-18 302.6,-18 302.6,-18"/>
+<polygon fill="#9396a3" stroke="#9396a3" stroke-width="1.5" points="302.6,-15.55 295.6,-18 302.6,-20.45 302.6,-15.55"/>
</g>
<!-- Return -->
<g id="node6" class="node">
<title>Return</title>
-<polygon fill="none" stroke="black" points="461.25,-90 407.25,-90 407.25,-54 461.25,-54 461.25,-90"/>
-<text text-anchor="middle" x="434.25" y="-66.95" font-family="Times New Roman,serif" font-size="14.00">Return</text>
+<polygon fill="#fff1c4" stroke="#758191" points="573.12,-97 519.12,-97 519.12,-61 573.12,-61 573.12,-97"/>
+<text text-anchor="middle" x="546.12" y="-74.72" font-family="Helvetica,sans-Serif" font-size="12.00" fill="#152330">Return</text>
</g>
<!-- Return&#45;&gt;P -->
<g id="edge6" class="edge">
<title>Return&#45;&gt;P</title>
-<path fill="none" stroke="blue" d="M406.84,-72C399.52,-72 391.29,-72 382.97,-72"/>
-<polygon fill="blue" stroke="blue" points="383.17,-68.5 373.17,-72 383.17,-75.5 383.17,-68.5"/>
+<path fill="none" stroke="#2867b2" stroke-width="1.5" d="M518.79,-79C518.79,-79 489.34,-79 489.34,-79"/>
+<polygon fill="#2867b2" stroke="#2867b2" stroke-width="1.5" points="489.34,-76.55 482.34,-79 489.34,-81.45 489.34,-76.55"/>
</g>
</g>
</svg>
diff --git a/chapter10a/docs/example2b.gv b/chapter10a/docs/example2b.gv
index 3f3309e5..c7d64509 100644
--- a/chapter10a/docs/example2b.gv
+++ b/chapter10a/docs/example2b.gv
@@ -1,11 +1,19 @@
digraph Memory {
+ // IR styles match graph/web/render.js; arrows are use -> definition.
+ graph [bgcolor="#fafbfc" fontname="Helvetica" nodesep=0.35 ranksep=0.55 splines=ortho];
+ node [fontname="Helvetica" fontsize=12 color="#758191" fontcolor="#152330" shape=box style="rounded,filled" fillcolor="#edf3f7"];
+ edge [fontname="Helvetica" fontsize=9 color="#536477" fontcolor="#364352" arrowsize=0.7 penwidth=1.5];
+
rankdir=RL;
- node [shape=box];
- P [label="Phi(memory)"];
- S [label="Loop-body Store"];
- P -> Entry [color=blue];
- P -> S [color=blue,constraint=false]; // Backedge must not place Store before Phi.
- S -> P [color=blue];
- P -> Loop [style=dashed]; Return -> P [color=blue];
+
+ P [label="Phi(memory)" shape=hexagon style="filled" fillcolor="#f5e4fa"];
+ S [label="Loop-body Store" shape=octagon style="filled" fillcolor="#dcecff"];
+ P -> Entry [color="#2867b2"];
+ P -> S [color="#2867b2",constraint=false]; // Backedge must not place Store before Phi.
+ S -> P [color="#2867b2"];
+ P -> Loop [style=dashed,color="#9396a3"]; Return -> P [color="#2867b2"];
Return -> S [style=invis]; // Layout only: Phi, Store, Return from left to right.
+ Return [shape=box style="filled" fillcolor="#fff1c4"];
+ Entry [shape=octagon style="filled" fillcolor="#dcecff"];
+ Loop [shape=box style="rounded,filled" fillcolor="#ffe0ab"];
}
diff --git a/chapter10a/docs/example2b.svg b/chapter10a/docs/example2b.svg
index 8fff33d4..77ebec85 100644
--- a/chapter10a/docs/example2b.svg
+++ b/chapter10a/docs/example2b.svg
@@ -4,70 +4,70 @@
<!-- Generated by graphviz version 12.2.0 (20241103.1931)
-->
<!-- Title: Memory Pages: 1 -->
-<svg width="422pt" height="98pt"
- viewBox="0.00 0.00 421.75 98.00" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink">
-<g id="graph0" class="graph" transform="scale(1 1) rotate(0) translate(4 94)">
+<svg width="510pt" height="105pt"
+ viewBox="0.00 0.00 509.87 105.00" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink">
+<g id="graph0" class="graph" transform="scale(1 1) rotate(0) translate(4 101)">
<title>Memory</title>
-<polygon fill="white" stroke="none" points="-4,4 -4,-94 417.75,-94 417.75,4 -4,4"/>
+<polygon fill="#fafbfc" stroke="none" points="-4,4 -4,-101 505.87,-101 505.87,4 -4,4"/>
<!-- P -->
<g id="node1" class="node">
<title>P</title>
-<polygon fill="none" stroke="black" points="179.5,-63 90,-63 90,-27 179.5,-27 179.5,-63"/>
-<text text-anchor="middle" x="134.75" y="-39.95" font-family="Times New Roman,serif" font-size="14.00">Phi(memory)</text>
+<polygon fill="#f5e4fa" stroke="#758191" points="223.99,-48 193.05,-66 131.17,-66 100.24,-48 131.17,-30 193.05,-30 223.99,-48"/>
+<text text-anchor="middle" x="162.11" y="-43.73" font-family="Helvetica,sans-Serif" font-size="12.00" fill="#152330">Phi(memory)</text>
</g>
<!-- S -->
<g id="node2" class="node">
<title>S</title>
-<polygon fill="none" stroke="black" points="323.75,-40 215.5,-40 215.5,-4 323.75,-4 323.75,-40"/>
-<text text-anchor="middle" x="269.62" y="-16.95" font-family="Times New Roman,serif" font-size="14.00">Loop&#45;body Store</text>
+<polygon fill="#dcecff" stroke="#758191" points="407.87,-12.54 407.87,-27.46 365.73,-38 306.13,-38 263.99,-27.46 263.99,-12.54 306.13,-2 365.73,-2 407.87,-12.54"/>
+<text text-anchor="middle" x="335.93" y="-15.72" font-family="Helvetica,sans-Serif" font-size="12.00" fill="#152330">Loop&#45;body Store</text>
</g>
<!-- P&#45;&gt;S -->
<g id="edge2" class="edge">
<title>P&#45;&gt;S</title>
-<path fill="none" stroke="blue" d="M179.67,-43.79C187.52,-42.69 195.84,-41.37 204.12,-39.91"/>
-<polygon fill="blue" stroke="blue" points="204.65,-43.37 213.86,-38.13 203.39,-36.49 204.65,-43.37"/>
+<path fill="none" stroke="#2867b2" stroke-width="1.5" d="M202.86,-35.33C202.86,-35.33 284.35,-35.33 284.35,-35.33"/>
+<polygon fill="#2867b2" stroke="#2867b2" stroke-width="1.5" points="284.35,-37.78 291.35,-35.33 284.35,-32.88 284.35,-37.78"/>
</g>
<!-- Entry -->
<g id="node3" class="node">
<title>Entry</title>
-<polygon fill="none" stroke="black" points="54,-90 0,-90 0,-54 54,-54 54,-90"/>
-<text text-anchor="middle" x="27" y="-66.95" font-family="Times New Roman,serif" font-size="14.00">Entry</text>
+<polygon fill="#dcecff" stroke="#758191" points="60.24,-71.54 60.24,-86.46 42.59,-97 17.64,-97 0,-86.46 0,-71.54 17.64,-61 42.59,-61 60.24,-71.54"/>
+<text text-anchor="middle" x="30.12" y="-74.72" font-family="Helvetica,sans-Serif" font-size="12.00" fill="#152330">Entry</text>
</g>
<!-- P&#45;&gt;Entry -->
<g id="edge1" class="edge">
<title>P&#45;&gt;Entry</title>
-<path fill="none" stroke="blue" d="M89.52,-56.29C81.45,-58.35 73.12,-60.48 65.28,-62.48"/>
-<polygon fill="blue" stroke="blue" points="64.54,-59.06 55.72,-64.92 66.27,-65.84 64.54,-59.06"/>
+<path fill="none" stroke="#2867b2" stroke-width="1.5" d="M107.6,-52.67C67.92,-52.67 21.12,-52.67 21.12,-52.67 21.12,-52.67 21.12,-53.47 21.12,-53.47"/>
+<polygon fill="#2867b2" stroke="#2867b2" stroke-width="1.5" points="18.67,-51.44 21.12,-58.44 23.57,-51.44 18.67,-51.44"/>
</g>
<!-- Loop -->
<g id="node4" class="node">
<title>Loop</title>
-<polygon fill="none" stroke="black" points="54,-36 0,-36 0,0 54,0 54,-36"/>
-<text text-anchor="middle" x="27" y="-12.95" font-family="Times New Roman,serif" font-size="14.00">Loop</text>
+<path fill="#ffe0ab" stroke="#758191" d="M45.12,-36C45.12,-36 15.12,-36 15.12,-36 9.12,-36 3.12,-30 3.12,-24 3.12,-24 3.12,-12 3.12,-12 3.12,-6 9.12,0 15.12,0 15.12,0 45.12,0 45.12,0 51.12,0 57.12,-6 57.12,-12 57.12,-12 57.12,-24 57.12,-24 57.12,-30 51.12,-36 45.12,-36"/>
+<text text-anchor="middle" x="30.12" y="-13.72" font-family="Helvetica,sans-Serif" font-size="12.00" fill="#152330">Loop</text>
</g>
<!-- P&#45;&gt;Loop -->
<g id="edge4" class="edge">
<title>P&#45;&gt;Loop</title>
-<path fill="none" stroke="black" stroke-dasharray="5,2" d="M89.52,-33.71C81.45,-31.65 73.12,-29.52 65.28,-27.52"/>
-<polygon fill="black" stroke="black" points="66.27,-24.16 55.72,-25.08 64.54,-30.94 66.27,-24.16"/>
+<path fill="none" stroke="#9396a3" stroke-width="1.5" stroke-dasharray="5,2" d="M105.65,-44.33C73.32,-44.33 39.12,-44.33 39.12,-44.33 39.12,-44.33 31.88,-44.33 31.88,-44.33"/>
+<polygon fill="#9396a3" stroke="#9396a3" stroke-width="1.5" points="34.74,-44.82 37.6,-37.98 31.1,-41.54 34.74,-44.82"/>
</g>
<!-- S&#45;&gt;P -->
<g id="edge3" class="edge">
<title>S&#45;&gt;P</title>
-<path fill="none" stroke="blue" d="M215.35,-24.59C207.3,-25.84 198.98,-27.27 190.89,-28.79"/>
-<polygon fill="blue" stroke="blue" points="190.29,-25.34 181.15,-30.71 191.64,-32.21 190.29,-25.34"/>
+<path fill="none" stroke="#2867b2" stroke-width="1.5" d="M282.83,-32.67C282.83,-32.67 207.65,-32.67 207.65,-32.67"/>
+<polygon fill="#2867b2" stroke="#2867b2" stroke-width="1.5" points="207.65,-30.22 200.65,-32.67 207.65,-35.12 207.65,-30.22"/>
</g>
<!-- Return -->
<g id="node5" class="node">
<title>Return</title>
-<polygon fill="none" stroke="black" points="413.75,-63 359.75,-63 359.75,-27 413.75,-27 413.75,-63"/>
-<text text-anchor="middle" x="386.75" y="-39.95" font-family="Times New Roman,serif" font-size="14.00">Return</text>
+<polygon fill="#fff1c4" stroke="#758191" points="501.87,-66 447.87,-66 447.87,-30 501.87,-30 501.87,-66"/>
+<text text-anchor="middle" x="474.87" y="-43.73" font-family="Helvetica,sans-Serif" font-size="12.00" fill="#152330">Return</text>
</g>
<!-- Return&#45;&gt;P -->
<g id="edge5" class="edge">
<title>Return&#45;&gt;P</title>
-<path fill="none" stroke="blue" d="M359.52,-47.07C348.49,-47.84 335.5,-48.62 323.75,-49 275.66,-50.55 263.6,-50.21 215.5,-49 207.59,-48.8 199.24,-48.49 191.04,-48.13"/>
-<polygon fill="blue" stroke="blue" points="191.28,-44.64 181.12,-47.67 190.95,-51.63 191.28,-44.64"/>
+<path fill="none" stroke="#2867b2" stroke-width="1.5" d="M447.39,-52C447.39,-52 227.1,-52 227.1,-52"/>
+<polygon fill="#2867b2" stroke="#2867b2" stroke-width="1.5" points="227.1,-49.55 220.1,-52 227.1,-54.45 227.1,-49.55"/>
</g>
<!-- Return&#45;&gt;S -->
</g>
diff --git a/chapter10a/docs/example2c.gv b/chapter10a/docs/example2c.gv
index ef8a5fc8..f3a52b4d 100644
--- a/chapter10a/docs/example2c.gv
+++ b/chapter10a/docs/example2c.gv
@@ -1,9 +1,14 @@
digraph Memory {
+ // IR styles match graph/web/render.js; arrows are use -> definition.
+ graph [bgcolor="#fafbfc" fontname="Helvetica" nodesep=0.35 ranksep=0.55 splines=ortho];
+ node [fontname="Helvetica" fontsize=12 color="#758191" fontcolor="#152330" shape=box style="rounded,filled" fillcolor="#edf3f7"];
+ edge [fontname="Helvetica" fontsize=9 color="#536477" fontcolor="#364352" arrowsize=0.7 penwidth=1.5];
+
rankdir=RL;
- node [shape=box];
- M [label="Prior memory"];
- L [label="Load p.x"];
- S [label="Store p.x"];
- L -> M [color=blue]; S -> M [color=blue];
- S -> L [style=dashed,label="execute load first"];
+
+ M [label="Prior memory" shape=octagon style="filled" fillcolor="#dcecff"];
+ L [label="Load p.x" shape=box style="rounded,filled" fillcolor="#edf3f7"];
+ S [label="Store p.x" shape=octagon style="filled" fillcolor="#dcecff"];
+ L -> M [color="#2867b2"]; S -> M [color="#2867b2"];
+ S -> L [style=dashed,xlabel="execute load first"];
}
diff --git a/chapter10a/docs/example2c.svg b/chapter10a/docs/example2c.svg
index c7b37912..2aa8fa2d 100644
--- a/chapter10a/docs/example2c.svg
+++ b/chapter10a/docs/example2c.svg
@@ -4,47 +4,47 @@
<!-- Generated by graphviz version 12.2.0 (20241103.1931)
-->
<!-- Title: Memory Pages: 1 -->
-<svg width="398pt" height="67pt"
- viewBox="0.00 0.00 398.25 67.00" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink">
-<g id="graph0" class="graph" transform="scale(1 1) rotate(0) translate(4 63)">
+<svg width="357pt" height="72pt"
+ viewBox="0.00 0.00 356.97 72.00" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink">
+<g id="graph0" class="graph" transform="scale(1 1) rotate(0) translate(4 68)">
<title>Memory</title>
-<polygon fill="white" stroke="none" points="-4,4 -4,-63 394.25,-63 394.25,4 -4,4"/>
+<polygon fill="#fafbfc" stroke="none" points="-4,4 -4,-68 352.97,-68 352.97,4 -4,4"/>
<!-- M -->
<g id="node1" class="node">
<title>M</title>
-<polygon fill="none" stroke="black" points="93.25,-59 0,-59 0,-23 93.25,-23 93.25,-59"/>
-<text text-anchor="middle" x="46.62" y="-35.95" font-family="Times New Roman,serif" font-size="14.00">Prior memory</text>
+<polygon fill="#dcecff" stroke="#758191" points="120.13,-38.54 120.13,-53.46 84.95,-64 35.19,-64 0,-53.46 0,-38.54 35.19,-28 84.95,-28 120.13,-38.54"/>
+<text text-anchor="middle" x="60.07" y="-41.73" font-family="Helvetica,sans-Serif" font-size="12.00" fill="#152330">Prior memory</text>
</g>
<!-- L -->
<g id="node2" class="node">
<title>L</title>
-<polygon fill="none" stroke="black" points="195,-36 130.25,-36 130.25,0 195,0 195,-36"/>
-<text text-anchor="middle" x="162.62" y="-12.95" font-family="Times New Roman,serif" font-size="14.00">Load p.x</text>
+<path fill="#edf3f7" stroke="#758191" d="M209.88,-36C209.88,-36 172.13,-36 172.13,-36 166.13,-36 160.13,-30 160.13,-24 160.13,-24 160.13,-12 160.13,-12 160.13,-6 166.13,0 172.13,0 172.13,0 209.88,0 209.88,0 215.88,0 221.88,-6 221.88,-12 221.88,-12 221.88,-24 221.88,-24 221.88,-30 215.88,-36 209.88,-36"/>
+<text text-anchor="middle" x="191.01" y="-13.72" font-family="Helvetica,sans-Serif" font-size="12.00" fill="#152330">Load p.x</text>
</g>
<!-- L&#45;&gt;M -->
<g id="edge1" class="edge">
<title>L&#45;&gt;M</title>
-<path fill="none" stroke="blue" d="M129.87,-24.41C122.08,-25.98 113.51,-27.71 104.92,-29.44"/>
-<polygon fill="blue" stroke="blue" points="104.29,-26 95.18,-31.41 105.68,-32.86 104.29,-26"/>
+<path fill="none" stroke="#2867b2" stroke-width="1.5" d="M159.64,-32C159.64,-32 108.9,-32 108.9,-32"/>
+<polygon fill="#2867b2" stroke="#2867b2" stroke-width="1.5" points="108.9,-29.55 101.9,-32 108.9,-34.45 108.9,-29.55"/>
</g>
<!-- S -->
<g id="node3" class="node">
<title>S</title>
-<polygon fill="none" stroke="black" points="390.25,-59 324.75,-59 324.75,-23 390.25,-23 390.25,-59"/>
-<text text-anchor="middle" x="357.5" y="-35.95" font-family="Times New Roman,serif" font-size="14.00">Store p.x</text>
+<polygon fill="#dcecff" stroke="#758191" points="348.97,-38.54 348.97,-53.46 323.46,-64 287.39,-64 261.88,-53.46 261.88,-38.54 287.39,-28 323.46,-28 348.97,-38.54"/>
+<text text-anchor="middle" x="305.42" y="-41.73" font-family="Helvetica,sans-Serif" font-size="12.00" fill="#152330">Store p.x</text>
</g>
<!-- S&#45;&gt;M -->
<g id="edge2" class="edge">
<title>S&#45;&gt;M</title>
-<path fill="none" stroke="blue" d="M324.5,-47.66C318.62,-48.63 312.52,-49.48 306.75,-50 237.56,-56.21 157.62,-51.66 105.04,-47.07"/>
-<polygon fill="blue" stroke="blue" points="105.37,-43.59 95.1,-46.17 104.74,-50.56 105.37,-43.59"/>
+<path fill="none" stroke="#2867b2" stroke-width="1.5" d="M261.56,-50C261.56,-50 129.87,-50 129.87,-50"/>
+<polygon fill="#2867b2" stroke="#2867b2" stroke-width="1.5" points="129.87,-47.55 122.87,-50 129.87,-52.45 129.87,-47.55"/>
</g>
<!-- S&#45;&gt;L -->
<g id="edge3" class="edge">
<title>S&#45;&gt;L</title>
-<path fill="none" stroke="black" stroke-dasharray="5,2" d="M324.41,-35.96C318.54,-35.1 312.47,-34.24 306.75,-33.5 273.09,-29.14 234.87,-25.05 206.4,-22.16"/>
-<polygon fill="black" stroke="black" points="207.03,-18.71 196.73,-21.19 206.33,-25.67 207.03,-18.71"/>
-<text text-anchor="middle" x="259.88" y="-36.7" font-family="Times New Roman,serif" font-size="14.00">execute load first</text>
+<path fill="none" stroke="#536477" stroke-width="1.5" stroke-dasharray="5,2" d="M276.55,-32C276.55,-32 231.55,-32 231.55,-32"/>
+<polygon fill="#536477" stroke="#536477" stroke-width="1.5" points="231.55,-29.55 224.55,-32 231.55,-34.45 231.55,-29.55"/>
+<text text-anchor="middle" x="219.55" y="-33.95" font-family="Helvetica,sans-Serif" font-size="9.00" fill="#364352">execute load first</text>
</g>
</g>
</svg>
diff --git a/chapter10a/docs/lattice.gv b/chapter10a/docs/lattice.gv
index 733a5287..eb4d7fb1 100644
--- a/chapter10a/docs/lattice.gv
+++ b/chapter10a/docs/lattice.gv
@@ -69,7 +69,7 @@ digraph Lattice {
STRUCT_BOT [label="⊥:struct\n[struct bottom]"];
STRUCT_PERSON [label="Person\nage: int", shape=box];
STRUCT_S1 [label="s1\nx: int", shape=box];
- STRUCT_S2 [label="s2\nx: int, y: *s1", shape=box];
+ STRUCT_S2 [label="s2\nx: int, y: int", shape=box];
STRUCT_MORE [label="…", shape=box];
{rank=same; STRUCT_PERSON; STRUCT_S1; STRUCT_S2; STRUCT_MORE;}
STRUCT_PERSON -> STRUCT_S1 -> STRUCT_S2 -> STRUCT_MORE [style=invis];
diff --git a/chapter10a/docs/lattice.svg b/chapter10a/docs/lattice.svg
index 24c0de8c..c8bed535 100644
--- a/chapter10a/docs/lattice.svg
+++ b/chapter10a/docs/lattice.svg
@@ -4,122 +4,122 @@
<!-- Generated by graphviz version 12.2.0 (20241103.1931)
-->
<!-- Title: Lattice Pages: 1 -->
-<svg width="1647pt" height="555pt"
- viewBox="0.00 0.00 1647.00 555.43" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink">
-<g id="graph0" class="graph" transform="scale(1 1) rotate(0) translate(4 551.43)">
+<svg width="1647pt" height="533pt"
+ viewBox="0.00 0.00 1647.00 533.45" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink">
+<g id="graph0" class="graph" transform="scale(1 1) rotate(0) translate(4 529.45)">
<title>Lattice</title>
-<polygon fill="white" stroke="none" points="-4,4 -4,-551.43 1643,-551.43 1643,4 -4,4"/>
+<polygon fill="white" stroke="none" points="-4,4 -4,-529.45 1643,-529.45 1643,4 -4,4"/>
<g id="clust1" class="cluster">
<title>cluster_control</title>
-<polygon fill="none" stroke="#cccccc" points="8,-85.99 8,-476.69 98,-476.69 98,-85.99 8,-85.99"/>
-<text text-anchor="middle" x="53" y="-459.39" font-family="Arial" font-size="14.00">Control</text>
+<polygon fill="none" stroke="#cccccc" points="8,-85.99 8,-454.71 98,-454.71 98,-85.99 8,-85.99"/>
+<text text-anchor="middle" x="53" y="-437.41" font-family="Arial" font-size="14.00">Control</text>
</g>
<g id="clust2" class="cluster">
<title>cluster_integer</title>
-<polygon fill="none" stroke="#cccccc" points="106,-85.99 106,-476.69 404,-476.69 404,-85.99 106,-85.99"/>
-<text text-anchor="middle" x="255" y="-459.39" font-family="Arial" font-size="14.00">Integer</text>
+<polygon fill="none" stroke="#cccccc" points="106,-85.99 106,-454.71 404,-454.71 404,-85.99 106,-85.99"/>
+<text text-anchor="middle" x="255" y="-437.41" font-family="Arial" font-size="14.00">Integer</text>
</g>
<g id="clust6" class="cluster">
<title>cluster_pointer</title>
-<polygon fill="none" stroke="#cccccc" points="412,-75 412,-487.68 893,-487.68 893,-75 412,-75"/>
-<text text-anchor="middle" x="652.5" y="-470.38" font-family="Arial" font-size="14.00">Pointer = nullability × struct type</text>
+<polygon fill="none" stroke="#cccccc" points="412,-75 412,-465.7 893,-465.7 893,-75 412,-75"/>
+<text text-anchor="middle" x="652.5" y="-448.4" font-family="Arial" font-size="14.00">Pointer = nullability × struct type</text>
</g>
<g id="clust13" class="cluster">
<title>cluster_struct</title>
-<polygon fill="none" stroke="#cccccc" points="901,-75 901,-503.43 1233,-503.43 1233,-75 901,-75"/>
-<text text-anchor="middle" x="1067" y="-486.13" font-family="Arial" font-size="14.00">Struct</text>
-<text text-anchor="middle" x="1067" y="-470.38" font-family="Arial" font-size="14.00">named collection of named scalar types</text>
+<polygon fill="none" stroke="#cccccc" points="901,-75 901,-481.45 1233,-481.45 1233,-75 901,-75"/>
+<text text-anchor="middle" x="1067" y="-464.15" font-family="Arial" font-size="14.00">Struct</text>
+<text text-anchor="middle" x="1067" y="-448.4" font-family="Arial" font-size="14.00">named collection of named scalar types</text>
</g>
<g id="clust17" class="cluster">
<title>cluster_memory</title>
-<polygon fill="none" stroke="#cccccc" points="1241,-85.99 1241,-476.69 1347,-476.69 1347,-85.99 1241,-85.99"/>
-<text text-anchor="middle" x="1294" y="-459.39" font-family="Arial" font-size="14.00">Memory</text>
+<polygon fill="none" stroke="#cccccc" points="1241,-85.99 1241,-454.71 1347,-454.71 1347,-85.99 1241,-85.99"/>
+<text text-anchor="middle" x="1294" y="-437.41" font-family="Arial" font-size="14.00">Memory</text>
</g>
<g id="clust18" class="cluster">
<title>cluster_tuple</title>
-<polygon fill="none" stroke="#cccccc" points="1355,-85.99 1355,-492.44 1631,-492.44 1631,-85.99 1355,-85.99"/>
-<text text-anchor="middle" x="1493" y="-475.14" font-family="Arial" font-size="14.00">Tuple</text>
-<text text-anchor="middle" x="1493" y="-459.39" font-family="Arial" font-size="14.00">collection of types</text>
+<polygon fill="none" stroke="#cccccc" points="1355,-85.99 1355,-470.46 1631,-470.46 1631,-85.99 1355,-85.99"/>
+<text text-anchor="middle" x="1493" y="-453.16" font-family="Arial" font-size="14.00">Tuple</text>
+<text text-anchor="middle" x="1493" y="-437.41" font-family="Arial" font-size="14.00">collection of types</text>
</g>
<!-- TOP -->
<g id="node1" class="node">
<title>TOP</title>
-<ellipse fill="black" stroke="black" cx="845" cy="-529.43" rx="27" ry="18"/>
-<text text-anchor="middle" x="845" y="-525.33" font-family="DejaVu Sans" font-size="13.00" fill="white">⊤</text>
+<ellipse fill="black" stroke="black" cx="875" cy="-507.45" rx="27" ry="18"/>
+<text text-anchor="middle" x="875" y="-503.35" font-family="DejaVu Sans" font-size="13.00" fill="white">⊤</text>
</g>
<!-- XCTRL -->
<g id="node3" class="node">
<title>XCTRL</title>
-<ellipse fill="#ffff00" stroke="black" cx="53" cy="-426.94" rx="36.51" ry="18"/>
-<text text-anchor="middle" x="53" y="-422.84" font-family="DejaVu Sans" font-size="13.00">⊤:ctrl</text>
+<ellipse fill="#ffff00" stroke="black" cx="53" cy="-404.96" rx="36.51" ry="18"/>
+<text text-anchor="middle" x="53" y="-400.86" font-family="DejaVu Sans" font-size="13.00">⊤:ctrl</text>
</g>
<!-- TOP&#45;&gt;XCTRL -->
<g id="edge53" class="edge">
<title>TOP&#45;&gt;XCTRL</title>
-<path fill="none" stroke="#555555" d="M817.66,-528.22C687.28,-527.11 133.71,-521.35 102,-503.43 82.18,-492.23 69.06,-469.34 61.42,-451.68"/>
-<polygon fill="#555555" stroke="#555555" points="63.46,-451.12 59.24,-446.37 59.57,-452.72 63.46,-451.12"/>
+<path fill="none" stroke="#555555" d="M847.89,-506.27C714.74,-505.32 135.11,-500.13 102,-481.45 82.18,-470.26 69.05,-447.37 61.41,-429.71"/>
+<polygon fill="#555555" stroke="#555555" points="63.45,-429.15 59.24,-424.39 59.57,-430.74 63.45,-429.15"/>
</g>
<!-- INT_TOP -->
<g id="node5" class="node">
<title>INT_TOP</title>
-<ellipse fill="#add8e6" stroke="black" cx="353" cy="-426.94" rx="33.44" ry="18"/>
-<text text-anchor="middle" x="353" y="-422.84" font-family="DejaVu Sans" font-size="13.00">⊤:int</text>
+<ellipse fill="#add8e6" stroke="black" cx="353" cy="-404.96" rx="33.44" ry="18"/>
+<text text-anchor="middle" x="353" y="-400.86" font-family="DejaVu Sans" font-size="13.00">⊤:int</text>
</g>
<!-- TOP&#45;&gt;INT_TOP -->
<g id="edge54" class="edge">
<title>TOP&#45;&gt;INT_TOP</title>
-<path fill="none" stroke="#555555" d="M817.72,-528.22C727.72,-527.33 443.86,-522.98 408,-503.43 387.26,-492.12 372.32,-469.24 363.29,-451.62"/>
-<polygon fill="#555555" stroke="#555555" points="365.2,-450.74 360.67,-446.28 361.42,-452.59 365.2,-450.74"/>
+<path fill="none" stroke="#555555" d="M847.84,-506.34C753.92,-505.8 446.62,-502.41 408,-481.45 387.24,-470.18 372.3,-447.29 363.27,-429.66"/>
+<polygon fill="#555555" stroke="#555555" points="365.18,-428.78 360.66,-424.31 361.41,-430.63 365.18,-428.78"/>
</g>
<!-- PTR_TOP -->
<g id="node10" class="node">
<title>PTR_TOP</title>
-<ellipse fill="#008000" stroke="black" cx="685" cy="-426.94" rx="61.7" ry="28.99"/>
-<text text-anchor="middle" x="685" y="-431.09" font-family="DejaVu Sans" font-size="13.00" fill="white">⊤:ptr</text>
-<text text-anchor="middle" x="685" y="-414.59" font-family="DejaVu Sans" font-size="13.00" fill="white">[*⊤:struct]</text>
+<ellipse fill="#008000" stroke="black" cx="715" cy="-404.96" rx="61.7" ry="28.99"/>
+<text text-anchor="middle" x="715" y="-409.11" font-family="DejaVu Sans" font-size="13.00" fill="white">⊤:ptr</text>
+<text text-anchor="middle" x="715" y="-392.61" font-family="DejaVu Sans" font-size="13.00" fill="white">[*⊤:struct]</text>
</g>
<!-- TOP&#45;&gt;PTR_TOP -->
<g id="edge55" class="edge">
<title>TOP&#45;&gt;PTR_TOP</title>
-<path fill="none" stroke="#555555" d="M825.7,-516.31C801.54,-501.14 759.48,-474.72 727.62,-454.71"/>
-<polygon fill="#555555" stroke="#555555" points="728.87,-453.01 722.67,-451.6 726.64,-456.57 728.87,-453.01"/>
+<path fill="none" stroke="#555555" d="M855.7,-494.33C831.54,-479.16 789.48,-452.73 757.62,-432.72"/>
+<polygon fill="#555555" stroke="#555555" points="758.87,-431.03 752.67,-429.62 756.64,-434.59 758.87,-431.03"/>
</g>
<!-- STRUCT_TOP -->
<g id="node20" class="node">
<title>STRUCT_TOP</title>
-<ellipse fill="#90ee90" stroke="black" cx="996" cy="-426.94" rx="64.35" ry="28.99"/>
-<text text-anchor="middle" x="996" y="-431.09" font-family="DejaVu Sans" font-size="13.00">⊤:struct</text>
-<text text-anchor="middle" x="996" y="-414.59" font-family="DejaVu Sans" font-size="13.00">[struct top]</text>
+<ellipse fill="#90ee90" stroke="black" cx="996" cy="-404.96" rx="64.35" ry="28.99"/>
+<text text-anchor="middle" x="996" y="-409.11" font-family="DejaVu Sans" font-size="13.00">⊤:struct</text>
+<text text-anchor="middle" x="996" y="-392.61" font-family="DejaVu Sans" font-size="13.00">[struct top]</text>
</g>
<!-- TOP&#45;&gt;STRUCT_TOP -->
<g id="edge56" class="edge">
<title>TOP&#45;&gt;STRUCT_TOP</title>
-<path fill="none" stroke="#555555" d="M867.28,-518.93C876.68,-514.61 887.61,-509.19 897,-503.43 919.21,-489.82 942.45,-472.29 960.83,-457.55"/>
-<polygon fill="#555555" stroke="#555555" points="961.85,-459.43 965.2,-454.02 959.21,-456.16 961.85,-459.43"/>
+<path fill="none" stroke="#555555" d="M891.32,-492.9C908.92,-478.28 937.5,-454.55 960.35,-435.57"/>
+<polygon fill="#555555" stroke="#555555" points="961.58,-437.27 964.86,-431.82 958.9,-434.04 961.58,-437.27"/>
</g>
<!-- MEM_TOP -->
<g id="node26" class="node">
<title>MEM_TOP</title>
-<ellipse fill="#00008b" stroke="black" cx="1294" cy="-426.94" rx="44.7" ry="18"/>
-<text text-anchor="middle" x="1294" y="-422.84" font-family="DejaVu Sans" font-size="13.00" fill="white">⊤:mem</text>
+<ellipse fill="#00008b" stroke="black" cx="1294" cy="-404.96" rx="44.7" ry="18"/>
+<text text-anchor="middle" x="1294" y="-400.86" font-family="DejaVu Sans" font-size="13.00" fill="white">⊤:mem</text>
</g>
<!-- TOP&#45;&gt;MEM_TOP -->
<g id="edge57" class="edge">
<title>TOP&#45;&gt;MEM_TOP</title>
-<path fill="none" stroke="#555555" d="M872.35,-528C956.06,-526.49 1205.1,-520.6 1237,-503.43 1258.25,-491.99 1273.89,-468.81 1283.35,-451.14"/>
-<polygon fill="#555555" stroke="#555555" points="1284.99,-452.55 1285.86,-446.25 1281.25,-450.62 1284.99,-452.55"/>
+<path fill="none" stroke="#555555" d="M902.2,-505.86C981.35,-503.98 1207.82,-497.26 1237,-481.45 1258.22,-469.95 1273.86,-446.78 1283.33,-429.12"/>
+<polygon fill="#555555" stroke="#555555" points="1284.97,-430.54 1285.85,-424.24 1281.23,-428.61 1284.97,-430.54"/>
</g>
<!-- TUPLE_TOP -->
<g id="node28" class="node">
<title>TUPLE_TOP</title>
-<ellipse fill="#ffc0cb" stroke="black" cx="1408" cy="-426.94" rx="44.7" ry="18"/>
-<text text-anchor="middle" x="1408" y="-422.84" font-family="DejaVu Sans" font-size="13.00">⊤:tuple</text>
+<ellipse fill="#ffc0cb" stroke="black" cx="1408" cy="-404.96" rx="44.7" ry="18"/>
+<text text-anchor="middle" x="1408" y="-400.86" font-family="DejaVu Sans" font-size="13.00">⊤:tuple</text>
</g>
<!-- TOP&#45;&gt;TUPLE_TOP -->
<g id="edge58" class="edge">
<title>TOP&#45;&gt;TUPLE_TOP</title>
-<path fill="none" stroke="#555555" d="M872.34,-528.42C971.49,-528.22 1308.63,-525.85 1351,-503.43 1372.33,-492.14 1387.95,-468.94 1397.39,-451.22"/>
-<polygon fill="#555555" stroke="#555555" points="1399.04,-452.62 1399.9,-446.32 1395.3,-450.7 1399.04,-452.62"/>
+<path fill="none" stroke="#555555" d="M902.34,-506.35C997.63,-505.82 1311.4,-502.48 1351,-481.45 1372.31,-470.13 1387.94,-446.93 1397.39,-429.22"/>
+<polygon fill="#555555" stroke="#555555" points="1399.03,-430.62 1399.89,-424.32 1395.29,-428.7 1399.03,-430.62"/>
</g>
<!-- BOT -->
<g id="node2" class="node">
@@ -136,8 +136,8 @@
<!-- XCTRL&#45;&gt;CTRL -->
<g id="edge1" class="edge">
<title>XCTRL&#45;&gt;CTRL</title>
-<path fill="none" stroke="#555555" d="M53,-408.67C53,-356.2 53,-198.53 53,-137.49"/>
-<polygon fill="#555555" stroke="#555555" points="55.1,-137.72 53,-131.72 50.9,-137.72 55.1,-137.72"/>
+<path fill="none" stroke="#555555" d="M53,-386.63C53,-337.1 53,-194.83 53,-137.43"/>
+<polygon fill="#555555" stroke="#555555" points="55.1,-137.74 53,-131.74 50.9,-137.74 55.1,-137.74"/>
</g>
<!-- XCTRL&#45;&gt;INT_TOP -->
<!-- CTRL&#45;&gt;BOT -->
@@ -155,8 +155,8 @@
<!-- INT_TOP&#45;&gt;INT_NEG -->
<g id="edge4" class="edge">
<title>INT_TOP&#45;&gt;INT_NEG</title>
-<path fill="none" stroke="#555555" d="M339.17,-410.31C306.78,-373.7 225.91,-282.29 188.52,-240.04"/>
-<polygon fill="#555555" stroke="#555555" points="190.31,-238.89 184.76,-235.78 187.16,-241.67 190.31,-238.89"/>
+<path fill="none" stroke="#555555" d="M337.94,-388.74C305.38,-355.83 228.33,-277.94 190.59,-239.8"/>
+<polygon fill="#555555" stroke="#555555" points="192.09,-238.33 186.38,-235.54 189.11,-241.28 192.09,-238.33"/>
</g>
<!-- INT_ZERO -->
<g id="node8" class="node">
@@ -167,8 +167,8 @@
<!-- INT_TOP&#45;&gt;INT_ZERO -->
<g id="edge5" class="edge">
<title>INT_TOP&#45;&gt;INT_ZERO</title>
-<path fill="none" stroke="#555555" d="M345.96,-408.92C330.64,-371.87 294.24,-283.85 276.74,-241.52"/>
-<polygon fill="#555555" stroke="#555555" points="278.71,-240.79 274.47,-236.05 274.83,-242.39 278.71,-240.79"/>
+<path fill="none" stroke="#555555" d="M345.22,-387.12C329.8,-353.79 295.37,-279.32 277.78,-241.29"/>
+<polygon fill="#555555" stroke="#555555" points="279.76,-240.57 275.34,-236.01 275.95,-242.34 279.76,-240.57"/>
</g>
<!-- INT_POS -->
<g id="node9" class="node">
@@ -179,8 +179,8 @@
<!-- INT_TOP&#45;&gt;INT_POS -->
<g id="edge6" class="edge">
<title>INT_TOP&#45;&gt;INT_POS</title>
-<path fill="none" stroke="#555555" d="M353,-408.57C353,-371.71 353,-285.59 353,-242.89"/>
-<polygon fill="#555555" stroke="#555555" points="355.1,-242.96 353,-236.96 350.9,-242.96 355.1,-242.96"/>
+<path fill="none" stroke="#555555" d="M353,-386.46C353,-353.14 353,-280.53 353,-242.43"/>
+<polygon fill="#555555" stroke="#555555" points="355.1,-242.8 353,-236.8 350.9,-242.8 355.1,-242.8"/>
</g>
<!-- INT_TOP&#45;&gt;PTR_TOP -->
<!-- INT_BOT -->
@@ -218,51 +218,50 @@
<!-- PTR_NULL -->
<g id="node12" class="node">
<title>PTR_NULL</title>
-<ellipse fill="#008000" stroke="black" cx="808" cy="-321.96" rx="66.47" ry="28.99"/>
-<text text-anchor="middle" x="808" y="-326.11" font-family="DejaVu Sans" font-size="13.00" fill="white">null</text>
-<text text-anchor="middle" x="808" y="-309.61" font-family="DejaVu Sans" font-size="13.00" fill="white">[*⊤:struct?]</text>
+<ellipse fill="#008000" stroke="black" cx="799" cy="-310.97" rx="27.3" ry="18"/>
+<text text-anchor="middle" x="799" y="-306.87" font-family="DejaVu Sans" font-size="13.00" fill="white">null</text>
</g>
<!-- PTR_TOP&#45;&gt;PTR_NULL -->
<g id="edge16" class="edge">
<title>PTR_TOP&#45;&gt;PTR_NULL</title>
-<path fill="none" stroke="#555555" d="M714.46,-401.27C731.85,-386.71 753.98,-368.18 772.35,-352.8"/>
-<polygon fill="#555555" stroke="#555555" points="773.51,-354.57 776.76,-349.11 770.82,-351.35 773.51,-354.57"/>
+<path fill="none" stroke="#555555" d="M738.85,-377.84C752,-363.43 768.1,-345.8 780.33,-332.41"/>
+<polygon fill="#555555" stroke="#555555" points="781.8,-333.91 784.3,-328.06 778.7,-331.08 781.8,-333.91"/>
</g>
<!-- PTR_PERSON -->
<g id="node14" class="node">
<title>PTR_PERSON</title>
-<ellipse fill="#008000" stroke="black" cx="512" cy="-321.96" rx="45.72" ry="18"/>
-<text text-anchor="middle" x="512" y="-317.86" font-family="DejaVu Sans" font-size="13.00" fill="white">*Person</text>
+<ellipse fill="#008000" stroke="black" cx="542" cy="-310.97" rx="45.72" ry="18"/>
+<text text-anchor="middle" x="542" y="-306.87" font-family="DejaVu Sans" font-size="13.00" fill="white">*Person</text>
</g>
<!-- PTR_TOP&#45;&gt;PTR_PERSON -->
<g id="edge17" class="edge">
<title>PTR_TOP&#45;&gt;PTR_PERSON</title>
-<path fill="none" stroke="#555555" d="M647.46,-403.59C616.14,-384.95 572.05,-358.7 542.78,-341.28"/>
-<polygon fill="#555555" stroke="#555555" points="543.94,-339.52 537.71,-338.26 541.79,-343.13 543.94,-339.52"/>
+<path fill="none" stroke="#555555" d="M674.88,-382.62C644.57,-366.5 603.47,-344.65 575.04,-329.54"/>
+<polygon fill="#555555" stroke="#555555" points="576.08,-327.71 569.8,-326.75 574.11,-331.42 576.08,-327.71"/>
</g>
<!-- PTR_S1 -->
<g id="node15" class="node">
<title>PTR_S1</title>
-<ellipse fill="#008000" stroke="black" cx="601" cy="-321.96" rx="27" ry="18"/>
-<text text-anchor="middle" x="601" y="-317.86" font-family="DejaVu Sans" font-size="13.00" fill="white">*s1</text>
+<ellipse fill="#008000" stroke="black" cx="631" cy="-310.97" rx="27" ry="18"/>
+<text text-anchor="middle" x="631" y="-306.87" font-family="DejaVu Sans" font-size="13.00" fill="white">*s1</text>
</g>
<!-- PTR_TOP&#45;&gt;PTR_S1 -->
<g id="edge18" class="edge">
<title>PTR_TOP&#45;&gt;PTR_S1</title>
-<path fill="none" stroke="#555555" d="M663.37,-399.42C649.25,-382.12 631.09,-359.85 618.01,-343.81"/>
-<polygon fill="#555555" stroke="#555555" points="619.81,-342.7 614.39,-339.38 616.56,-345.36 619.81,-342.7"/>
+<path fill="none" stroke="#555555" d="M691.15,-377.84C678,-363.43 661.9,-345.8 649.67,-332.41"/>
+<polygon fill="#555555" stroke="#555555" points="651.3,-331.08 645.7,-328.06 648.2,-333.91 651.3,-331.08"/>
</g>
<!-- PTR_MORE -->
<g id="node16" class="node">
<title>PTR_MORE</title>
-<ellipse fill="#008000" stroke="black" cx="685" cy="-321.96" rx="40.6" ry="18"/>
-<text text-anchor="middle" x="685" y="-317.86" font-family="DejaVu Sans" font-size="13.00" fill="white">*s2, …</text>
+<ellipse fill="#008000" stroke="black" cx="715" cy="-310.97" rx="40.6" ry="18"/>
+<text text-anchor="middle" x="715" y="-306.87" font-family="DejaVu Sans" font-size="13.00" fill="white">*s2, …</text>
</g>
<!-- PTR_TOP&#45;&gt;PTR_MORE -->
<g id="edge19" class="edge">
<title>PTR_TOP&#45;&gt;PTR_MORE</title>
-<path fill="none" stroke="#555555" d="M685,-397.53C685,-381.91 685,-362.73 685,-347.73"/>
-<polygon fill="#555555" stroke="#555555" points="687.1,-347.82 685,-341.82 682.9,-347.82 687.1,-347.82"/>
+<path fill="none" stroke="#555555" d="M715,-375.61C715,-363.22 715,-348.82 715,-336.86"/>
+<polygon fill="#555555" stroke="#555555" points="717.1,-336.91 715,-330.91 712.9,-336.91 717.1,-336.91"/>
</g>
<!-- PTR_TOP&#45;&gt;STRUCT_TOP -->
<!-- PTR_BOT -->
@@ -287,8 +286,8 @@
<!-- PTR_NULL&#45;&gt;PTR_PERSON_NIL -->
<g id="edge26" class="edge">
<title>PTR_NULL&#45;&gt;PTR_PERSON_NIL</title>
-<path fill="none" stroke="#555555" d="M771.98,-297.33C744.16,-279.08 706.14,-254.14 680.2,-237.12"/>
-<polygon fill="#555555" stroke="#555555" points="681.63,-235.56 675.47,-234.02 679.33,-239.07 681.63,-235.56"/>
+<path fill="none" stroke="#555555" d="M779.65,-297.94C754.63,-282.39 710.79,-255.14 681.32,-236.82"/>
+<polygon fill="#555555" stroke="#555555" points="682.76,-235.24 676.55,-233.86 680.54,-238.81 682.76,-235.24"/>
</g>
<!-- PTR_S1_NIL -->
<g id="node18" class="node">
@@ -299,8 +298,8 @@
<!-- PTR_NULL&#45;&gt;PTR_S1_NIL -->
<g id="edge27" class="edge">
<title>PTR_NULL&#45;&gt;PTR_S1_NIL</title>
-<path fill="none" stroke="#555555" d="M791.92,-293.36C782.32,-276.89 770.28,-256.22 761.24,-240.69"/>
-<polygon fill="#555555" stroke="#555555" points="763.16,-239.82 758.32,-235.69 759.53,-241.93 763.16,-239.82"/>
+<path fill="none" stroke="#555555" d="M789.88,-293.52C781.74,-278.83 769.73,-257.16 760.65,-240.8"/>
+<polygon fill="#555555" stroke="#555555" points="762.69,-240.14 757.94,-235.91 759.02,-242.18 762.69,-240.14"/>
</g>
<!-- PTR_MORE_NIL -->
<g id="node19" class="node">
@@ -311,8 +310,8 @@
<!-- PTR_NULL&#45;&gt;PTR_MORE_NIL -->
<g id="edge28" class="edge">
<title>PTR_NULL&#45;&gt;PTR_MORE_NIL</title>
-<path fill="none" stroke="#555555" d="M816.74,-292.82C821.67,-276.95 827.77,-257.33 832.48,-242.16"/>
-<polygon fill="#555555" stroke="#555555" points="834.45,-242.91 834.23,-236.56 830.44,-241.66 834.45,-242.91"/>
+<path fill="none" stroke="#555555" d="M806.33,-293.52C812.78,-279.05 822.24,-257.81 829.5,-241.54"/>
+<polygon fill="#555555" stroke="#555555" points="831.32,-242.62 831.84,-236.28 827.48,-240.91 831.32,-242.62"/>
</g>
<!-- PTR_ANY -->
<g id="node13" class="node">
@@ -331,41 +330,41 @@
<!-- PTR_PERSON&#45;&gt;PTR_ANY -->
<g id="edge20" class="edge">
<title>PTR_PERSON&#45;&gt;PTR_ANY</title>
-<path fill="none" stroke="#555555" d="M510.3,-303.49C508.98,-289.83 507.09,-270.39 505.45,-253.5"/>
-<polygon fill="#555555" stroke="#555555" points="507.58,-253.71 504.91,-247.94 503.4,-254.12 507.58,-253.71"/>
+<path fill="none" stroke="#555555" d="M534.66,-293.09C529.74,-281.77 523.08,-266.45 517.05,-252.6"/>
+<polygon fill="#555555" stroke="#555555" points="519.08,-251.99 514.76,-247.33 515.23,-253.67 519.08,-251.99"/>
</g>
<!-- PTR_PERSON&#45;&gt;PTR_S1 -->
<!-- PTR_PERSON&#45;&gt;PTR_PERSON_NIL -->
<g id="edge23" class="edge">
<title>PTR_PERSON&#45;&gt;PTR_PERSON_NIL</title>
-<path fill="none" stroke="#555555" d="M532.81,-305.54C557.17,-287.49 597.57,-257.56 624.25,-237.8"/>
-<polygon fill="#555555" stroke="#555555" points="625.26,-239.66 628.83,-234.4 622.76,-236.28 625.26,-239.66"/>
+<path fill="none" stroke="#555555" d="M560.49,-294.36C578.62,-279.06 606.38,-255.63 626.38,-238.76"/>
+<polygon fill="#555555" stroke="#555555" points="627.67,-240.42 630.9,-234.94 624.96,-237.21 627.67,-240.42"/>
</g>
<!-- PTR_S1&#45;&gt;PTR_ANY -->
<g id="edge21" class="edge">
<title>PTR_S1&#45;&gt;PTR_ANY</title>
-<path fill="none" stroke="#555555" d="M586.82,-306.2C572.74,-291.56 550.72,-268.65 532.64,-249.85"/>
-<polygon fill="#555555" stroke="#555555" points="534.38,-248.62 528.7,-245.75 531.35,-251.53 534.38,-248.62"/>
+<path fill="none" stroke="#555555" d="M613.06,-297.17C595.19,-284.43 567.11,-264.41 543.66,-247.68"/>
+<polygon fill="#555555" stroke="#555555" points="545.14,-246.16 539.04,-244.39 542.7,-249.58 545.14,-246.16"/>
</g>
<!-- PTR_S1&#45;&gt;PTR_MORE -->
<!-- PTR_S1&#45;&gt;PTR_S1_NIL -->
<g id="edge24" class="edge">
<title>PTR_S1&#45;&gt;PTR_S1_NIL</title>
-<path fill="none" stroke="#555555" d="M617.46,-307.22C623.23,-302.56 629.81,-297.42 636,-292.97 667.33,-270.44 677.09,-267.67 709,-245.97 713.75,-242.74 718.77,-239.22 723.56,-235.8"/>
-<polygon fill="#555555" stroke="#555555" points="724.61,-237.64 728.26,-232.43 722.16,-234.22 724.61,-237.64"/>
+<path fill="none" stroke="#555555" d="M648.01,-296.59C668.14,-280.76 701.78,-254.32 724.41,-236.52"/>
+<polygon fill="#555555" stroke="#555555" points="725.59,-238.26 729.01,-232.91 722.99,-234.96 725.59,-238.26"/>
</g>
<!-- PTR_MORE&#45;&gt;PTR_NULL -->
<!-- PTR_MORE&#45;&gt;PTR_ANY -->
<g id="edge22" class="edge">
<title>PTR_MORE&#45;&gt;PTR_ANY</title>
-<path fill="none" stroke="#555555" d="M660.85,-307.1C652.94,-302.58 644.1,-297.55 636,-292.97 608.08,-277.18 576.81,-259.67 551.5,-245.54"/>
-<polygon fill="#555555" stroke="#555555" points="552.79,-243.85 546.52,-242.76 550.74,-247.52 552.79,-243.85"/>
+<path fill="none" stroke="#555555" d="M686.72,-297.75C654.45,-283.81 600.84,-260.66 559.66,-242.88"/>
+<polygon fill="#555555" stroke="#555555" points="560.63,-241.01 554.29,-240.56 558.97,-244.86 560.63,-241.01"/>
</g>
<!-- PTR_MORE&#45;&gt;PTR_MORE_NIL -->
<g id="edge25" class="edge">
<title>PTR_MORE&#45;&gt;PTR_MORE_NIL</title>
-<path fill="none" stroke="#555555" d="M706.88,-306.42C734.22,-288.25 781.1,-257.11 811.3,-237.04"/>
-<polygon fill="#555555" stroke="#555555" points="812.38,-238.85 816.22,-233.78 810.06,-235.35 812.38,-238.85"/>
+<path fill="none" stroke="#555555" d="M735.36,-294.98C756.57,-279.37 789.9,-254.84 813.23,-237.67"/>
+<polygon fill="#555555" stroke="#555555" points="814.42,-239.4 818.01,-234.16 811.93,-236.02 814.42,-239.4"/>
</g>
<!-- PTR_PERSON_NIL&#45;&gt;PTR_BOT -->
<g id="edge30" class="edge">
@@ -397,8 +396,8 @@
<!-- STRUCT_TOP&#45;&gt;STRUCT_PERSON -->
<g id="edge36" class="edge">
<title>STRUCT_TOP&#45;&gt;STRUCT_PERSON</title>
-<path fill="none" stroke="#555555" d="M988.85,-397.89C978.61,-357.71 959.89,-284.26 949.83,-244.77"/>
-<polygon fill="#555555" stroke="#555555" points="951.95,-244.58 948.43,-239.28 947.88,-245.61 951.95,-244.58"/>
+<path fill="none" stroke="#555555" d="M987.95,-375.71C977.84,-340.23 960.61,-279.78 950.68,-244.92"/>
+<polygon fill="#555555" stroke="#555555" points="952.75,-244.54 949.09,-239.35 948.72,-245.69 952.75,-244.54"/>
</g>
<!-- STRUCT_S1 -->
<g id="node23" class="node">
@@ -410,8 +409,8 @@
<!-- STRUCT_TOP&#45;&gt;STRUCT_S1 -->
<g id="edge37" class="edge">
<title>STRUCT_TOP&#45;&gt;STRUCT_S1</title>
-<path fill="none" stroke="#555555" d="M999.24,-397.89C1003.85,-357.88 1012.28,-284.87 1016.85,-245.27"/>
-<polygon fill="#555555" stroke="#555555" points="1018.94,-245.52 1017.54,-239.32 1014.76,-245.04 1018.94,-245.52"/>
+<path fill="none" stroke="#555555" d="M999.65,-375.71C1004.22,-340.23 1012.02,-279.78 1016.52,-244.92"/>
+<polygon fill="#555555" stroke="#555555" points="1018.55,-245.61 1017.24,-239.39 1014.39,-245.07 1018.55,-245.61"/>
</g>
<!-- STRUCT_S2 -->
<g id="node24" class="node">
@@ -423,8 +422,8 @@
<!-- STRUCT_TOP&#45;&gt;STRUCT_S2 -->
<g id="edge38" class="edge">
<title>STRUCT_TOP&#45;&gt;STRUCT_S2</title>
-<path fill="none" stroke="#555555" d="M1011.01,-398.32C1032.86,-358.11 1073.16,-283.94 1094.64,-244.41"/>
-<polygon fill="#555555" stroke="#555555" points="1096.43,-245.51 1097.45,-239.24 1092.74,-243.51 1096.43,-245.51"/>
+<path fill="none" stroke="#555555" d="M1012.67,-376.51C1034.35,-340.84 1071.93,-278.99 1093.18,-244.02"/>
+<polygon fill="#555555" stroke="#555555" points="1094.84,-245.33 1096.16,-239.11 1091.25,-243.14 1094.84,-245.33"/>
</g>
<!-- STRUCT_MORE -->
<g id="node25" class="node">
@@ -435,8 +434,8 @@
<!-- STRUCT_TOP&#45;&gt;STRUCT_MORE -->
<g id="edge39" class="edge">
<title>STRUCT_TOP&#45;&gt;STRUCT_MORE</title>
-<path fill="none" stroke="#555555" d="M1021.18,-400.02C1061.16,-358.86 1138.49,-279.24 1176.23,-240.39"/>
-<polygon fill="#555555" stroke="#555555" points="1177.33,-242.26 1180.01,-236.5 1174.32,-239.34 1177.33,-242.26"/>
+<path fill="none" stroke="#555555" d="M1023.66,-378.49C1063.42,-341.89 1136.06,-275.01 1173.79,-240.26"/>
+<polygon fill="#555555" stroke="#555555" points="1174.99,-242.01 1177.99,-236.4 1172.15,-238.92 1174.99,-242.01"/>
</g>
<!-- STRUCT_TOP&#45;&gt;MEM_TOP -->
<!-- STRUCT_BOT -->
@@ -488,8 +487,8 @@
<!-- MEM_TOP&#45;&gt;MEM_BOT -->
<g id="edge44" class="edge">
<title>MEM_TOP&#45;&gt;MEM_BOT</title>
-<path fill="none" stroke="#555555" d="M1294,-408.67C1294,-356.2 1294,-198.53 1294,-137.49"/>
-<polygon fill="#555555" stroke="#555555" points="1296.1,-137.72 1294,-131.72 1291.9,-137.72 1296.1,-137.72"/>
+<path fill="none" stroke="#555555" d="M1294,-386.63C1294,-337.1 1294,-194.83 1294,-137.43"/>
+<polygon fill="#555555" stroke="#555555" points="1296.1,-137.74 1294,-131.74 1291.9,-137.74 1296.1,-137.74"/>
</g>
<!-- MEM_TOP&#45;&gt;TUPLE_TOP -->
<!-- MEM_BOT&#45;&gt;BOT -->
@@ -501,38 +500,38 @@
<!-- TUPLE1 -->
<g id="node30" class="node">
<title>TUPLE1</title>
-<polygon fill="#ffc0cb" stroke="black" points="1418.88,-339.96 1363.12,-339.96 1363.12,-303.96 1418.88,-303.96 1418.88,-339.96"/>
-<text text-anchor="middle" x="1391" y="-317.86" font-family="DejaVu Sans" font-size="13.00">(type)</text>
+<polygon fill="#ffc0cb" stroke="black" points="1418.88,-328.97 1363.12,-328.97 1363.12,-292.97 1418.88,-292.97 1418.88,-328.97"/>
+<text text-anchor="middle" x="1391" y="-306.87" font-family="DejaVu Sans" font-size="13.00">(type)</text>
</g>
<!-- TUPLE_TOP&#45;&gt;TUPLE1 -->
<g id="edge47" class="edge">
<title>TUPLE_TOP&#45;&gt;TUPLE1</title>
-<path fill="none" stroke="#555555" d="M1405.19,-408.93C1402.44,-392.26 1398.22,-366.67 1395.09,-347.74"/>
-<polygon fill="#555555" stroke="#555555" points="1397.16,-347.4 1394.11,-341.83 1393.02,-348.09 1397.16,-347.4"/>
+<path fill="none" stroke="#555555" d="M1404.8,-386.65C1402.19,-372.52 1398.47,-352.37 1395.54,-336.56"/>
+<polygon fill="#555555" stroke="#555555" points="1397.61,-336.2 1394.46,-330.68 1393.48,-336.96 1397.61,-336.2"/>
</g>
<!-- TUPLE2 -->
<g id="node31" class="node">
<title>TUPLE2</title>
-<polygon fill="#ffc0cb" stroke="black" points="1529,-339.96 1435,-339.96 1435,-303.96 1529,-303.96 1529,-339.96"/>
-<text text-anchor="middle" x="1482" y="-317.86" font-family="DejaVu Sans" font-size="13.00">(type, type)</text>
+<polygon fill="#ffc0cb" stroke="black" points="1529,-328.97 1435,-328.97 1435,-292.97 1529,-292.97 1529,-328.97"/>
+<text text-anchor="middle" x="1482" y="-306.87" font-family="DejaVu Sans" font-size="13.00">(type, type)</text>
</g>
<!-- TUPLE_TOP&#45;&gt;TUPLE2 -->
<g id="edge48" class="edge">
<title>TUPLE_TOP&#45;&gt;TUPLE2</title>
-<path fill="none" stroke="#555555" d="M1419.89,-409.39C1432.2,-392.26 1451.54,-365.35 1465.37,-346.1"/>
-<polygon fill="#555555" stroke="#555555" points="1466.97,-347.48 1468.76,-341.38 1463.56,-345.02 1466.97,-347.48"/>
+<path fill="none" stroke="#555555" d="M1421.23,-387.51C1433,-372.87 1450.35,-351.31 1463.5,-334.97"/>
+<polygon fill="#555555" stroke="#555555" points="1465.06,-336.38 1467.18,-330.39 1461.79,-333.74 1465.06,-336.38"/>
</g>
<!-- TUPLEN -->
<g id="node32" class="node">
<title>TUPLEN</title>
-<polygon fill="#ffc0cb" stroke="black" points="1622.75,-339.96 1545.25,-339.96 1545.25,-303.96 1622.75,-303.96 1622.75,-339.96"/>
-<text text-anchor="middle" x="1584" y="-317.86" font-family="DejaVu Sans" font-size="13.00">(type, …)</text>
+<polygon fill="#ffc0cb" stroke="black" points="1622.75,-328.97 1545.25,-328.97 1545.25,-292.97 1622.75,-292.97 1622.75,-328.97"/>
+<text text-anchor="middle" x="1584" y="-306.87" font-family="DejaVu Sans" font-size="13.00">(type, …)</text>
</g>
<!-- TUPLE_TOP&#45;&gt;TUPLEN -->
<g id="edge49" class="edge">
<title>TUPLE_TOP&#45;&gt;TUPLEN</title>
-<path fill="none" stroke="#555555" d="M1432.78,-411.64C1458.78,-396.61 1500.83,-372.23 1537,-350.95 1540.81,-348.7 1544.8,-346.35 1548.76,-344"/>
-<polygon fill="#555555" stroke="#555555" points="1549.56,-345.97 1553.64,-341.1 1547.41,-342.36 1549.56,-345.97"/>
+<path fill="none" stroke="#555555" d="M1434.35,-390.18C1463.39,-375.01 1510.42,-350.42 1544.01,-332.87"/>
+<polygon fill="#555555" stroke="#555555" points="1544.85,-334.8 1549.2,-330.16 1542.91,-331.07 1544.85,-334.8"/>
</g>
<!-- TUPLE_BOT -->
<g id="node29" class="node">
@@ -549,22 +548,22 @@
<!-- TUPLE1&#45;&gt;TUPLE_BOT -->
<g id="edge50" class="edge">
<title>TUPLE1&#45;&gt;TUPLE_BOT</title>
-<path fill="none" stroke="#555555" d="M1395.51,-303.58C1405.12,-266.56 1427.65,-179.82 1438.68,-137.32"/>
-<polygon fill="#555555" stroke="#555555" points="1440.68,-137.97 1440.16,-131.63 1436.62,-136.91 1440.68,-137.97"/>
+<path fill="none" stroke="#555555" d="M1395.79,-292.49C1405.46,-257.21 1427.33,-177.44 1438.37,-137.19"/>
+<polygon fill="#555555" stroke="#555555" points="1440.33,-137.95 1439.9,-131.61 1436.28,-136.84 1440.33,-137.95"/>
</g>
<!-- TUPLE1&#45;&gt;TUPLE2 -->
<!-- TUPLE2&#45;&gt;TUPLE_BOT -->
<g id="edge51" class="edge">
<title>TUPLE2&#45;&gt;TUPLE_BOT</title>
-<path fill="none" stroke="#555555" d="M1478.91,-303.58C1472.32,-266.56 1456.89,-179.82 1449.33,-137.32"/>
-<polygon fill="#555555" stroke="#555555" points="1451.44,-137.2 1448.32,-131.66 1447.3,-137.93 1451.44,-137.2"/>
+<path fill="none" stroke="#555555" d="M1478.72,-292.49C1472.12,-257.37 1457.24,-178.17 1449.65,-137.74"/>
+<polygon fill="#555555" stroke="#555555" points="1451.73,-137.43 1448.56,-131.92 1447.6,-138.2 1451.73,-137.43"/>
</g>
<!-- TUPLE2&#45;&gt;TUPLEN -->
<!-- TUPLEN&#45;&gt;TUPLE_BOT -->
<g id="edge52" class="edge">
<title>TUPLEN&#45;&gt;TUPLE_BOT</title>
-<path fill="none" stroke="#555555" d="M1572.39,-303.58C1547.38,-266.16 1488.41,-177.94 1460.36,-135.96"/>
-<polygon fill="#555555" stroke="#555555" points="1462.21,-134.96 1457.13,-131.14 1458.72,-137.29 1462.21,-134.96"/>
+<path fill="none" stroke="#555555" d="M1571.66,-292.49C1546.44,-256.74 1488.97,-175.3 1460.95,-135.59"/>
+<polygon fill="#555555" stroke="#555555" points="1462.76,-134.52 1457.59,-130.83 1459.33,-136.94 1462.76,-134.52"/>
</g>
</g>
</svg>