summaryrefslogtreecommitdiff
path: root/docs/chapter10/lattice.gv
diff options
context:
space:
mode:
Diffstat (limited to 'docs/chapter10/lattice.gv')
-rw-r--r--docs/chapter10/lattice.gv135
1 files changed, 135 insertions, 0 deletions
diff --git a/docs/chapter10/lattice.gv b/docs/chapter10/lattice.gv
new file mode 100644
index 00000000..c074f1a4
--- /dev/null
+++ b/docs/chapter10/lattice.gv
@@ -0,0 +1,135 @@
+digraph Lattice {
+ // Define nodes
+ splines=false;
+ node [shape=circle, style=filled, fillcolor=lightblue];
+ nodesep=0.6;
+
+ TOP [label="⊤"];
+ BOT [label="⊥"];
+
+ XCTRL [label="~Ctrl"];
+ CTRL [label="Ctrl"];
+
+ INT_TOP [label="IntTop"];
+ INT_BOT [label="IntBot"];
+
+ INT_MIN [label="-n"];
+ INT_MINDOTS [label="..." shape=none style=none];
+ INT_ZERO [label="0"];
+ INT_MAXDOTS [label="..." shape=none style=none];
+ INT_MAX [label="+n"];
+
+ TUPLE [label="TUPLE"];
+
+ STRUCT_TOP [label="$TOP"];
+ STRUCT_S1 [label="S1"];
+ STRUCT_DOTS [label="..." shape=none style=none];
+ STRUCT_SN [label="Sn"];
+ STRUCT_BOT [label="$BOT"]
+
+ PTR_TOP [label="*$TOP"];
+ PTR_NULL [label="null"];
+ PTR_VOIDPTR [label="*void"];
+ PTR_S1 [label="*S1"];
+ PTR_SDOTS [label="..." shape=none style=none];
+ PTR_SN [label="*SN"];
+ PTR_S1OPT [label="*S1?"];
+ PTR_SOPTDOTS [label="..." shape=none style=none];
+ PTR_SNOPT [label="*SN?"];
+ PTR_BOT [label="*$BOT?"];
+
+ MEM_TOP [label="MEM#TOP"];
+ MEM_ALIAS1 [label="#1"];
+ MEM_ALIAS2 [label="#2"];
+ MEM_ALIASDOTS [label="..." shape=none style=none];
+ MEM_ALIASN [label="#n"];
+ MEM_BOT [label="MEM#BOT"];
+
+ // Define edges
+ edge [arrowhead=none];
+
+ TOP -> XCTRL;
+ XCTRL -> CTRL;
+ CTRL -> BOT;
+
+ TOP -> INT_TOP;
+ INT_TOP -> INT_MIN;
+ INT_TOP -> INT_MINDOTS;
+ INT_TOP -> INT_ZERO;
+ INT_TOP -> INT_MAXDOTS;
+ INT_TOP -> INT_MAX;
+ INT_MIN -> INT_BOT;
+ INT_MINDOTS -> INT_BOT;
+ INT_ZERO -> INT_BOT;
+ INT_MAXDOTS -> INT_BOT;
+ INT_MAX -> INT_BOT;
+ INT_BOT -> BOT;
+
+ INT_MIN -> INT_MINDOTS -> INT_ZERO -> INT_MAXDOTS -> INT_MAX [style=invis];
+
+ TOP -> TUPLE;
+ TUPLE -> BOT;
+
+ TOP -> STRUCT_TOP;
+ STRUCT_TOP -> STRUCT_S1;
+ STRUCT_TOP -> STRUCT_DOTS;
+ STRUCT_TOP -> STRUCT_SN;
+ STRUCT_S1 -> STRUCT_BOT;
+ STRUCT_DOTS -> STRUCT_BOT;
+ STRUCT_SN -> STRUCT_BOT;
+ STRUCT_BOT -> BOT;
+
+ STRUCT_S1 -> STRUCT_DOTS -> STRUCT_SN [style=invis];
+
+ TOP -> PTR_TOP;
+ PTR_TOP -> PTR_S1;
+ PTR_TOP -> PTR_SDOTS;
+ PTR_TOP -> PTR_SN;
+ PTR_TOP -> PTR_NULL;
+ PTR_TOP -> PTR_VOIDPTR;
+ PTR_NULL -> PTR_BOT;
+ PTR_NULL -> PTR_S1OPT;
+ PTR_NULL -> PTR_SOPTDOTS;
+ PTR_NULL -> PTR_SNOPT;
+ PTR_S1 -> PTR_S1OPT;
+ PTR_S1 -> PTR_VOIDPTR;
+ PTR_SDOTS -> PTR_SOPTDOTS;
+ PTR_SDOTS -> PTR_VOIDPTR;
+ PTR_SN -> PTR_SNOPT;
+ PTR_SN -> PTR_VOIDPTR;
+ PTR_VOIDPTR -> PTR_BOT;
+ PTR_S1OPT -> PTR_BOT;
+ PTR_SOPTDOTS -> PTR_BOT;
+ PTR_SNOPT -> PTR_BOT;
+ PTR_BOT -> BOT;
+
+ PTR_S1 -> PTR_SDOTS -> PTR_SN [style=invis];
+ PTR_S1OPT -> PTR_SOPTDOTS -> PTR_SNOPT [style=invis];
+
+ TOP -> MEM_TOP;
+ MEM_TOP -> MEM_ALIAS1;
+ MEM_TOP -> MEM_ALIAS2;
+ MEM_TOP -> MEM_ALIASDOTS;
+ MEM_TOP -> MEM_ALIASN;
+ MEM_ALIAS1 -> MEM_BOT;
+ MEM_ALIAS2 -> MEM_BOT;
+ MEM_ALIASDOTS -> MEM_BOT;
+ MEM_ALIASN -> MEM_BOT;
+ MEM_BOT -> BOT;
+
+ MEM_ALIAS1 -> MEM_ALIAS2 -> MEM_ALIASDOTS -> MEM_ALIASN [style=invis];
+
+ // Additional customization
+ {rank=same; TOP;}
+ {rank=same; INT_TOP; XCTRL; STRUCT_TOP; PTR_TOP; MEM_TOP;}
+ {rank=same; PTR_S1; PTR_SDOTS; PTR_SN;}
+ {rank=same; INT_MIN; INT_MINDOTS;
+ INT_ZERO; INT_MAXDOTS;
+ INT_MAX; TUPLE; STRUCT_S1; STRUCT_DOTS; STRUCT_SN;
+ PTR_NULL; PTR_VOIDPTR;
+ MEM_ALIAS1; MEM_ALIAS2;
+ MEM_ALIASDOTS; MEM_ALIASN;}
+ {rank=same; PTR_S1OPT; PTR_SOPTDOTS; PTR_SNOPT; }
+ {rank=same; INT_BOT; CTRL; STRUCT_BOT; PTR_BOT; MEM_BOT;}
+ {rank=same; BOT;}
+}