diff options
| author | Cliff Click <cliffc@acm.org> | 2026-10-03 14:03:48 -0700 |
|---|---|---|
| committer | Cliff Click <cliffc@acm.org> | 2026-10-03 14:03:48 -0700 |
| commit | 22df891893d30e9906d0b14fc3ae5d8e67d500b2 (patch) | |
| tree | 2bda142f92febc8b26f1cabd4bb0c46d1864f34b /chapter10b/docs | |
| parent | c3958e34c0de21df52e57e47e4f47ffe6464f138 (diff) | |
| download | Simple-22df891893d30e9906d0b14fc3ae5d8e67d500b2.tar.gz Simple-22df891893d30e9906d0b14fc3ae5d8e67d500b2.zip | |
Chapter renumber, and split ch 17
Renumber chapters 10a, 10b, 11, 12, 13, 14 -> 10, 11, 13, 12, [11,14].
Split ch 17 into a 17a and 17b; shuffle around im/mutable syntax to be consistent, and present it more slowly.
THe new immutable syntax is pushed through all later chapters
Diffstat (limited to 'chapter10b/docs')
| -rw-r--r-- | chapter10b/docs/10-grammar.md | 125 | ||||
| -rw-r--r-- | chapter10b/docs/Makefile | 1 | ||||
| -rw-r--r-- | chapter10b/docs/example1.gv | 20 | ||||
| -rw-r--r-- | chapter10b/docs/example1.json | 31 | ||||
| -rw-r--r-- | chapter10b/docs/example1.svg | 155 | ||||
| -rw-r--r-- | chapter10b/docs/example2a.gv | 17 | ||||
| -rw-r--r-- | chapter10b/docs/example2a.json | 20 | ||||
| -rw-r--r-- | chapter10b/docs/example2a.svg | 103 | ||||
| -rw-r--r-- | chapter10b/docs/example2b.gv | 19 | ||||
| -rw-r--r-- | chapter10b/docs/example2b.json | 30 | ||||
| -rw-r--r-- | chapter10b/docs/example2b.svg | 150 | ||||
| -rw-r--r-- | chapter10b/docs/example2c.gv | 15 | ||||
| -rw-r--r-- | chapter10b/docs/example2c.json | 23 | ||||
| -rw-r--r-- | chapter10b/docs/example2c.svg | 121 | ||||
| -rw-r--r-- | chapter10b/docs/lattice.gv | 133 | ||||
| -rw-r--r-- | chapter10b/docs/lattice.svg | 644 |
16 files changed, 0 insertions, 1607 deletions
diff --git a/chapter10b/docs/10-grammar.md b/chapter10b/docs/10-grammar.md deleted file mode 100644 index 9a80d6ea..00000000 --- a/chapter10b/docs/10-grammar.md +++ /dev/null @@ -1,125 +0,0 @@ -# Grammar for Chapter 10b - -```antlrv4 -grammar SimpleLanguage; - -program - : statement+ EOF - ; - -statement - : returnStatement - | structDeclaration - | declStatement - | blockStatment - | expressionStatement - | ifStatement - | whileStatement - | breakStatement - | continueStatment - ; - -field - : 'int' IDENTIFIER ';' - ; - -fields - : field+ - ; - -structDeclaration - : 'struct' IDENTIFIER '{' fields '}' - ; - -whileStatement - : 'while' '(' expression ')' statement - ; - -breakStatement - : 'break' ';' - ; - -continueStatement - : 'continue' ';' - ; - -ifStatement - : 'if' '(' expression ')' statement ('else' statement)? - ; - - -expressionStatement - : IDENTIFIER '=' expression ';' - | fieldExpression '=' expression ';' - ; - -blockStatement - : '{' statement+ '}' - ; - -structName - : IDENTIFIER - ; - -declStatement - : 'int' IDENTIFIER '=' expression ';' - | structName ('?')? IDENTIFIER '=' expression ';' - ; - -returnStatement - : 'return' expression ';' - ; - -expression - : comparisonExpression - ; - -comparisonExpression - : additiveExpression (('==' | '!='| '>'| '<'| '>='| '<=') additiveExpression)* - ; - -additiveExpression - : multiplicativeExpression (('+' | '-') multiplicativeExpression)* - ; - -multiplicativeExpression - : unaryExpression (('*' | '/') unaryExpression)* - ; - -unaryExpression - : ('-') unaryExpression - | '!' unaryExpression - | primaryExpression - ; - -newExpression - : 'new' IDENTIFIER - ; - -fieldExpression - : primaryExpresson '.' IDENTIFIER - ; - -primaryExpression - : IDENTIFIER - | INTEGER_LITERAL - | 'true' - | 'false' - | 'null' - | newExpression - | '(' expression ')' - | fieldExpression - ; - -INTEGER_LITERAL - : [1-9][0-9]* - | [0] - ; - -IDENTIFIER - : NON_DIGIT (NON_DIGIT | DIGIT)* - ; - -NON_DIGIT: [a-zA-Z_]; -DEC_DIGIT: [0-9]; -``` diff --git a/chapter10b/docs/Makefile b/chapter10b/docs/Makefile deleted file mode 100644 index 6fa0f057..00000000 --- a/chapter10b/docs/Makefile +++ /dev/null @@ -1 +0,0 @@ -include ../../graph/docs.mk diff --git a/chapter10b/docs/example1.gv b/chapter10b/docs/example1.gv deleted file mode 100644 index 5e059d77..00000000 --- a/chapter10b/docs/example1.gv +++ /dev/null @@ -1,20 +0,0 @@ -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=BT; - - M [label="Initial memory" shape=octagon style="filled" fillcolor="#dcecff"]; - X [label="Store x = 42" shape=octagon style="filled" fillcolor="#dcecff"]; - Y [label="Loop: Store y" shape=octagon style="filled" fillcolor="#dcecff"]; - L [label="Load x (42)" shape=box style="rounded,filled" fillcolor="#edf3f7"]; - L -> X -> M [color="#2867b2"]; Y -> M [color="#2867b2"]; - MemMerge -> X [color="#2867b2"]; MemMerge -> Y [color="#2867b2"]; - Return -> MemMerge [color="#2867b2"]; Return -> L; - { rank=same; MemMerge -> L [style=invis]; } - Y -> X [style=invis]; // Layout only: keep the stores in code order. - Return [shape=box style="filled" fillcolor="#fff1c4"]; - MemMerge [shape=octagon style="filled" fillcolor="#dcecff"]; -} diff --git a/chapter10b/docs/example1.json b/chapter10b/docs/example1.json deleted file mode 100644 index 67c277e1..00000000 --- a/chapter10b/docs/example1.json +++ /dev/null @@ -1,31 +0,0 @@ -{ - "ver": 1, - "comp": "chapter10b/docs/example1.svg", - "step": 1, - "roots": [24], - "scope": 0, - "nodes": [ - {"id": 1, "label": "Start", "type": null, "kind": "CTRL", "edges": [], "proj": null}, - {"id": 3, "label": "$mem", "type": null, "kind": "MEM", "edges": [{"idx": 0, "def": 1, "role": "MEM", "label": null}], "proj": {"par": 1, "idx": 1}}, - {"id": 4, "label": "arg", "type": null, "kind": "DATA", "edges": [{"idx": 0, "def": 1, "role": "DATA", "label": null}], "proj": {"par": 1, "idx": 2}}, - {"id": 5, "label": "new Point", "type": null, "kind": "DATA", "edges": [{"idx": 0, "def": 0, "role": "CTRL", "label": null}], "proj": null}, - {"id": 6, "label": "#0", "type": null, "kind": "DATA", "edges": [{"idx": 0, "def": 1, "role": "ASSOC", "label": null}], "proj": null}, - {"id": 7, "label": "#42", "type": null, "kind": "DATA", "edges": [{"idx": 0, "def": 1, "role": "ASSOC", "label": null}], "proj": null}, - {"id": 8, "label": "Store p.x", "type": "MEM#2", "kind": "MEM", "edges": [{"idx": 0, "def": 0, "role": "CTRL", "label": null}, {"idx": 1, "def": 3, "role": "MEM", "label": null}, {"idx": 2, "def": 5, "role": "DATA", "label": null}, {"idx": 3, "def": 7, "role": "DATA", "label": null}], "proj": null}, - {"id": 9, "label": "Store p.y", "type": "MEM#3", "kind": "MEM", "edges": [{"idx": 0, "def": 0, "role": "CTRL", "label": null}, {"idx": 1, "def": 3, "role": "MEM", "label": null}, {"idx": 2, "def": 5, "role": "DATA", "label": null}, {"idx": 3, "def": 6, "role": "DATA", "label": null}], "proj": null}, - {"id": 11, "label": "MemPhi y", "type": "MEM#3", "kind": "PHI", "edges": [{"idx": 0, "def": 0, "role": "ASSOC", "label": null}, {"idx": 1, "def": 9, "role": "MEM", "label": null}, {"idx": 2, "def": 19, "role": "MEM", "label": null}], "proj": null}, - {"id": 12, "label": "Phi arg", "type": null, "kind": "PHI", "edges": [{"idx": 0, "def": 0, "role": "ASSOC", "label": null}, {"idx": 1, "def": 4, "role": "DATA", "label": null}, {"idx": 2, "def": 21, "role": "DATA", "label": null}], "proj": null}, - {"id": 15, "label": "True", "type": null, "kind": "CTRL", "edges": [], "proj": {"par": 0, "idx": 0}}, - {"id": 16, "label": "False", "type": null, "kind": "CTRL", "edges": [], "proj": {"par": 0, "idx": 1}}, - {"id": 17, "label": "Load p.y", "type": null, "kind": "DATA", "edges": [{"idx": 0, "def": 15, "role": "CTRL", "label": null}, {"idx": 1, "def": 11, "role": "MEM", "label": null}, {"idx": 2, "def": 5, "role": "DATA", "label": null}, {"idx": 3, "def": 0, "role": "DATA", "label": null}], "proj": null}, - {"id": 18, "label": "+", "type": null, "kind": "DATA", "edges": [{"idx": 0, "def": 0, "role": "CTRL", "label": null}, {"idx": 1, "def": 17, "role": "DATA", "label": null}, {"idx": 2, "def": 12, "role": "DATA", "label": null}], "proj": null}, - {"id": 19, "label": "Store p.y", "type": "MEM#3", "kind": "MEM", "edges": [{"idx": 0, "def": 15, "role": "CTRL", "label": null}, {"idx": 1, "def": 11, "role": "MEM", "label": null}, {"idx": 2, "def": 5, "role": "DATA", "label": null}, {"idx": 3, "def": 18, "role": "DATA", "label": null}], "proj": null}, - {"id": 20, "label": "#1", "type": null, "kind": "DATA", "edges": [{"idx": 0, "def": 1, "role": "ASSOC", "label": null}], "proj": null}, - {"id": 21, "label": "-", "type": null, "kind": "DATA", "edges": [{"idx": 0, "def": 0, "role": "CTRL", "label": null}, {"idx": 1, "def": 12, "role": "DATA", "label": null}, {"idx": 2, "def": 20, "role": "DATA", "label": null}], "proj": null}, - {"id": 22, "label": "MemMerge", "type": null, "kind": "MEM", "edges": [{"idx": 0, "def": 0, "role": "CTRL", "label": null}, {"idx": 1, "def": 3, "role": "MEM", "label": null}, {"idx": 2, "def": 8, "role": "MEM", "label": null}, {"idx": 3, "def": 11, "role": "MEM", "label": null}], "proj": null}, - {"id": 23, "label": "Load p.x", "type": null, "kind": "DATA", "edges": [{"idx": 0, "def": 16, "role": "CTRL", "label": null}, {"idx": 1, "def": 8, "role": "MEM", "label": null}, {"idx": 2, "def": 5, "role": "DATA", "label": null}, {"idx": 3, "def": 0, "role": "DATA", "label": null}], "proj": null}, - {"id": 24, "label": "Return", "type": null, "kind": "CTRL", "edges": [{"idx": 0, "def": 0, "role": "CTRL", "label": null}, {"idx": 1, "def": 22, "role": "MEM", "label": null}, {"idx": 2, "def": 23, "role": "DATA", "label": null}], "proj": null} - ], - "groups": [ - ] -} diff --git a/chapter10b/docs/example1.svg b/chapter10b/docs/example1.svg deleted file mode 100644 index 46faf818..00000000 --- a/chapter10b/docs/example1.svg +++ /dev/null @@ -1,155 +0,0 @@ -<svg aria-label="Compiler graph" width="929" height="674" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 929 674" style="font-family: sans-serif;"><style> - html, body { height:100%; margin:0; font-family:sans-serif; } - .viewer { height:100%; display:grid; grid-template-rows:auto minmax(0,1fr) auto; } - .source { padding:8px; border-bottom:1px solid #ccc; } - #program { width:min(600px,80vw); vertical-align:middle; } - #status { margin-top:4px; } - #graph { min-height:0; overflow:hidden; position:relative; background:#fafbfc; } - #elk { width:100%; height:100%; } - #graph svg { display:block; } - .tools { display:flex; flex-wrap:wrap; align-items:center; gap:14px; margin-top:8px; font-size:12px; } - .hint { color:#616c78; } - .ctrl { color:#b63838; } .mem { color:#2867b2; } .data { color:#536477; } - .edge { fill:none; stroke-width:1.5; } - .edge.CTRL { stroke-width:2; } - .edge.ASSOC { stroke-dasharray:4 4; } - .edge.PARSER { stroke-dasharray:5 4; } - .parser rect { fill:#f6f0ff; stroke:#7956a5; stroke-width:1.5; stroke-dasharray:5 4; } - .edge.selected { stroke-width:3.5; } - .edge.bundle { stroke-width:4; } - .edge.bundle.selected { stroke-width:6; } - .edge-hit { fill:none; stroke:transparent; stroke-width:12; vector-effect:non-scaling-stroke; pointer-events:stroke; cursor:pointer; } - .edge-jump { fill:transparent; pointer-events:all; cursor:pointer; } - .node { cursor:pointer; } - .box { stroke:#758191; stroke-width:1; } - .node.held .box { stroke-dasharray:5 3; } - .node.near .box { stroke:#c18221; stroke-width:2; } - .node.focus .box { stroke:#9c4900; stroke-width:3; } - .node.selected .box { stroke:#1569b9; stroke-width:3; } - .node.folded .box { stroke-width:4; } - .node.folding .box { fill:#f4ccd7; } - .fold-tag { font-size:9px; font-weight:700; fill:#963751; } - .peep-area { fill:#fff3d9; fill-opacity:.8; stroke:#c18221; stroke-width:2; pointer-events:none; } - .node.peep-edit .box { stroke:#9c4900; stroke-width:3; } - .node.error .box { stroke:#b42318; stroke-width:4; } - #event.error { color:#b42318; font-weight:600; white-space:pre-wrap; overflow-wrap:anywhere; } - .peep-ghosts { pointer-events:none; } - .region-box { stroke:#9da9b8; stroke-width:1.5; } - .fold-btn { cursor:pointer; } - .fold-btn rect { fill:white; stroke:#596674; } - .fold-btn text { font-size:14px; fill:#152330; } - .fold-btn:focus rect { stroke:#1569b9; stroke-width:2; } - .shortcut { cursor:pointer; } - .shortcut path { fill:none; stroke-width:1.5; } - .shortcut rect { fill:#fff8ec; stroke:#b63838; stroke-dasharray:3 2; } - .shortcut text { font-size:11px; fill:#783030; } - .shortcut.selected rect, .shortcut:focus rect { stroke-width:2.5; } - .label { font-size:12px; fill:#152330; font-weight:600; } - .node-id { font-size:10px; fill:#596674; font-weight:400; } - .type { font-size:11px; fill:#455768; } - .port { stroke:#536477; stroke-width:1; } - .row { stroke:#b6afcf; stroke-width:1; } - .bind { font-size:12px; fill:#152330; } - .slot { font-size:10px; fill:#364352; paint-order:stroke; stroke:#fafbfc; stroke-width:3; } - #detail { position:absolute; top:8px; right:8px; margin:0; padding:12px; max-width:320px; - max-height:45%; overflow:auto; white-space:pre-wrap; overflow-wrap:anywhere; - background:#fffffff2; border:1px solid #bac5d0; border-radius:4px; font-size:12px; } - .controls { display:flex; flex-wrap:wrap; justify-content:center; align-items:center; gap:6px; padding:6px; } - .button { color:white; background:black; font-size:20px; min-width:30px; } - .button:disabled { background:grey; } - .count { font-size:20px; min-width:35px; text-align:center; } - #N { width:6ch; } - #scrub { width:clamp(120px,35vw,600px); } - </style><defs><marker id="arrow-CTRL" viewBox="0 -4 8 8" refX="8" refY="0" markerWidth="7" markerHeight="7" orient="auto-start-reverse"><path d="M0,-4L8,0L0,4Z" fill="#b63838"/></marker><marker id="arrow-DATA" viewBox="0 -4 8 8" refX="8" refY="0" markerWidth="7" markerHeight="7" orient="auto-start-reverse"><path d="M0,-4L8,0L0,4Z" fill="#536477"/></marker><marker id="arrow-MEM" viewBox="0 -4 8 8" refX="8" refY="0" markerWidth="7" markerHeight="7" orient="auto-start-reverse"><path d="M0,-4L8,0L0,4Z" fill="#2867b2"/></marker><marker id="arrow-ASSOC" viewBox="0 -4 8 8" refX="8" refY="0" markerWidth="7" markerHeight="7" orient="auto-start-reverse"><path d="M0,-4L8,0L0,4Z" fill="#9396a3"/></marker><marker id="arrow-PARSER" viewBox="0 -4 8 8" refX="8" refY="0" markerWidth="7" markerHeight="7" orient="auto-start-reverse"><path d="M0,-4L8,0L0,4Z" fill="#7956a5"/></marker></defs><rect width="100%" height="100%" fill="rgb(250, 251, 252)"/><g><g class="regions" style="opacity: 1;"/><rect class="peep-area" rx="36" style="opacity: 0;"/><g class="edges"><path class="edge ASSOC" id="e6i0" d="M435,46 C435,70 682,41 682,65" stroke="#9396a3" marker-start="url(#arrow-ASSOC)" style="opacity: 1;"><title>#6[0] → #1 · ASSOC</title></path><path class="edge ASSOC" id="e7i0" d="M435,46 C435,70 100,41 100,65" stroke="#9396a3" marker-start="url(#arrow-ASSOC)" style="opacity: 1;"><title>#7[0] → #1 · ASSOC</title></path><path class="edge MEM" id="e8i1" d="M252,118 L252,168" stroke="#2867b2" marker-start="url(#arrow-MEM)" style="opacity: 1;"><title>#8[1] → #3 · MEM</title></path><path class="edge DATA" id="e8i2" d="M530,118 L530,140 Q530,148 522,148 L284,148 Q276,148 276,156 L276,168" stroke="#536477" marker-start="url(#arrow-DATA)" style="opacity: 1;"><title>#8[2] → #5 · DATA</title></path><path class="edge DATA" id="e8i3" d="M100,118 L100,150 Q100,158 108,158 L295,158 Q300,158 300,163 L300,168" stroke="#536477" marker-start="url(#arrow-DATA)" style="opacity: 1;"><title>#8[3] → #7 · DATA</title></path><path class="edge MEM" id="e9i1" d="M252,118 L252,130 Q252,138 260,138 L385,138 Q393,138 393,146 L393,168" stroke="#2867b2" marker-start="url(#arrow-MEM)" style="opacity: 1;"><title>#9[1] → #3 · MEM</title></path><path class="edge DATA" id="e9i2" d="M530,118 L530,140 Q530,148 522,148 L425,148 Q417,148 417,156 L417,168" stroke="#536477" marker-start="url(#arrow-DATA)" style="opacity: 1;"><title>#9[2] → #5 · DATA</title></path><path class="edge DATA" id="e9i3" d="M682,118 L682,150 Q682,158 674,158 L446,158 Q441,158 441,163 L441,168" stroke="#536477" marker-start="url(#arrow-DATA)" style="opacity: 1;"><title>#9[3] → #6 · DATA</title></path><path class="edge MEM" id="e11i1" d="M405,224 L405,272" stroke="#2867b2" marker-start="url(#arrow-MEM)" style="opacity: 1;"><title>#11[1] → #9 · MEM</title></path><path class="edge MEM" id="e11i2" d="M777,640 L777,645 Q777,650 772,650 L32,650 Q24,650 24,642 L24,242 Q24,234 32,234 L437,234 Q445,234 445,242 L445,272" stroke="#2867b2" marker-start="url(#arrow-MEM)" style="opacity: 1;"><title>#11[2] → #19 · MEM</title></path><path class="edge DATA" id="e12i1" d="M372,118 L372,123 Q372,128 377,128 L684,128 Q692,128 692,136 L692,168" stroke="#536477" marker-start="url(#arrow-DATA)" style="opacity: 1;"><title>#12[1] → #4 · DATA</title></path><path class="edge DATA" id="e12i2" d="M620,328 L620,333 Q620,338 625,338 L682,338 Q690,338 690,330 L690,252 Q690,244 698,244 L774,244 Q782,244 782,236 L782,166 Q782,158 774,158 L737,158 Q732,158 732,163 L732,168" stroke="#536477" marker-start="url(#arrow-DATA)" style="opacity: 1;"><title>#12[2] → #21 · DATA</title></path><path class="edge CTRL" id="e17i0" d="M741,328 L741,340 Q741,348 749,348 L790,348 Q798,348 798,356 L798,376" stroke="#b63838" marker-start="url(#arrow-CTRL)" style="opacity: 1;"><title>#17[0] → #15 · CTRL</title></path><path class="edge MEM" id="e17i1" d="M425,328 L425,350 Q425,358 433,358 L814,358 Q822,358 822,366 L822,376" stroke="#2867b2" marker-start="url(#arrow-MEM)" style="opacity: 1;"><title>#17[1] → #11 · MEM</title></path><path class="edge DATA" id="e17i2" d="M530,118 L530,140 Q530,148 538,148 L784,148 Q792,148 792,156 L792,330 Q792,338 800,338 L838,338 Q846,338 846,346 L846,376" stroke="#536477" marker-start="url(#arrow-DATA)" style="opacity: 1;"><title>#17[2] → #5 · DATA</title></path><path class="edge DATA" id="e18i1" d="M834,432 L834,480" stroke="#536477" marker-start="url(#arrow-DATA)" style="opacity: 1;"><title>#18[1] → #17 · DATA</title></path><path class="edge DATA" id="e18i2" d="M712,224 L712,229 Q712,234 717,234 L896,234 Q904,234 904,242 L904,434 Q904,442 896,442 L872,442 Q864,442 864,450 L864,480" stroke="#536477" marker-start="url(#arrow-DATA)" style="opacity: 1;"><title>#18[2] → #12 · DATA</title></path><path class="edge CTRL" id="e19i0" d="M741,328 L741,584" stroke="#b63838" marker-start="url(#arrow-CTRL)" style="opacity: 1;"><title>#19[0] → #15 · CTRL</title></path><path class="edge MEM" id="e19i1" d="M425,328 L425,350 Q425,358 433,358 L744,358 Q752,358 752,366 L752,549.5 Q752,556 758.5,556 L758.5,556 Q765,556 765,562.5 L765,584" stroke="#2867b2" marker-start="url(#arrow-MEM)" style="opacity: 1;"><title>#19[1] → #11 · MEM</title></path><path class="edge DATA" id="e19i2" d="M530,118 L530,140 Q530,148 538,148 L784,148 Q792,148 792,156 L792,330 Q792,338 784,338 L771,338 Q763,338 763,346 L763,538 Q763,546 771,546 L781,546 Q789,546 789,554 L789,584" stroke="#536477" marker-start="url(#arrow-DATA)" style="opacity: 1;"><title>#19[2] → #5 · DATA</title></path><path class="edge DATA" id="e19i3" d="M834,536 L834,541 Q834,546 829,546 L821,546 Q813,546 813,554 L813,584" stroke="#536477" marker-start="url(#arrow-DATA)" style="opacity: 1;"><title>#19[3] → #18 · DATA</title></path><path class="edge ASSOC" id="e20i0" d="M435,46 C435,70 557,147 557,171" stroke="#9396a3" marker-start="url(#arrow-ASSOC)" style="opacity: 1;"><title>#20[0] → #1 · ASSOC</title></path><path class="edge DATA" id="e21i1" d="M712,224 L712,229 Q712,234 707,234 L628,234 Q620,234 620,242 L620,272" stroke="#536477" marker-start="url(#arrow-DATA)" style="opacity: 1;"><title>#21[1] → #12 · DATA</title></path><path class="edge DATA" id="e21i2" d="M557,224 L557,236 Q557,244 565,244 L642,244 Q650,244 650,252 L650,272" stroke="#536477" marker-start="url(#arrow-DATA)" style="opacity: 1;"><title>#21[2] → #20 · DATA</title></path><path class="edge MEM" id="e22i1" d="M252,118 L252,130 Q252,138 244,138 L82,138 Q74,138 74,146 L74,333.5 Q74,338 78.5,338 L78.5,338 Q83,338 83,342.5 L83,376" stroke="#2867b2" marker-start="url(#arrow-MEM)" style="opacity: 1;"><title>#22[1] → #3 · MEM</title></path><path class="edge MEM" id="e22i2" d="M264,224 L264,236 Q264,244 256,244 L102,244 Q94,244 94,252 L94,331.5 Q94,338 100.5,338 L100.5,338 Q107,338 107,344.5 L107,376" stroke="#2867b2" marker-start="url(#arrow-MEM)" style="opacity: 1;"><title>#22[2] → #8 · MEM</title></path><path class="edge MEM" id="e22i3" d="M425,328 L425,350 Q425,358 417,358 L139,358 Q131,358 131,366 L131,376" stroke="#2867b2" marker-start="url(#arrow-MEM)" style="opacity: 1;"><title>#22[3] → #11 · MEM</title></path><path class="edge CTRL" id="e23i0" d="M129,224 L129,272" stroke="#b63838" marker-start="url(#arrow-CTRL)" style="opacity: 1;"><title>#23[0] → #16 · CTRL</title></path><path class="edge MEM" id="e23i1" d="M264,224 L264,236 Q264,244 256,244 L161,244 Q153,244 153,252 L153,272" stroke="#2867b2" marker-start="url(#arrow-MEM)" style="opacity: 1;"><title>#23[1] → #8 · MEM</title></path><path class="edge DATA" id="e23i2" d="M530,118 L530,140 Q530,148 522,148 L342,148 Q334,148 334,156 L334,246 Q334,254 326,254 L185,254 Q177,254 177,262 L177,272" stroke="#536477" marker-start="url(#arrow-DATA)" style="opacity: 1;"><title>#23[2] → #5 · DATA</title></path><path class="edge MEM" id="e24i1" d="M95,432 L95,437 Q95,442 100,442 L127,442 Q135,442 135,450 L135,480" stroke="#2867b2" marker-start="url(#arrow-MEM)" style="opacity: 1;"><title>#24[1] → #22 · MEM</title></path><path class="edge DATA" id="e24i2" d="M165,328 L165,480" stroke="#536477" marker-start="url(#arrow-DATA)" style="opacity: 1;"><title>#24[2] → #23 · DATA</title></path></g><g class="edge-hits"/><g class="parser" style="opacity: 1;"/><g class="nodes"><g class="node" id="n1" data-id="1" transform="translate(192,24)" style="opacity: 1;"><path class="box" d="M0,0H240V44H0Z" fill="#fff1c4"/><text class="label" text-anchor="middle" x="120" y="18"><tspan>Start</tspan><tspan class="node-id"> #1</tspan></text><text class="type" text-anchor="middle" y="35" x="120"/><title>#1 Start -Type not computed - -</title></g><g class="node" id="n3" data-id="3" transform="translate(192,68)" style="opacity: 1;"><path class="box" d="M0,0H120V44H0Z" fill="#dcecff"/><text class="label" text-anchor="middle" x="60" y="18"><tspan>$mem</tspan><tspan class="node-id"> #3/1</tspan></text><text class="type" text-anchor="middle" y="35" x="60"/><title>#3 $mem -Projection 1 of #1 -Type not computed - -[0] → #1 MEM</title></g><g class="node" id="n4" data-id="4" transform="translate(312,68)" style="opacity: 1;"><path class="box" d="M0,0H120V44H0Z" fill="#edf3f7"/><text class="label" text-anchor="middle" x="60" y="18"><tspan>arg</tspan><tspan class="node-id"> #4/2</tspan></text><text class="type" text-anchor="middle" y="35" x="60"/><title>#4 arg -Projection 2 of #1 -Type not computed - -[0] → #1 DATA</title></g><g class="node" id="n5" data-id="5" transform="translate(470,68)" style="opacity: 1;"><path class="box" d="M14,0H106Q120,0 120,14V30Q120,44 106,44H14Q0,44 0,30V14Q0,0 14,0Z" fill="#edf3f7"/><text class="label" text-anchor="middle" x="60" y="18"><tspan>new Point</tspan><tspan class="node-id"> #5</tspan></text><text class="type" text-anchor="middle" y="35" x="60"/><title>#5 new Point -Type not computed - -[0] → — CTRL</title><circle class="port" cx="60" cy="-3" r="3" fill="white"/><text class="slot" x="60" y="-10" text-anchor="middle">0</text></g><g class="node" id="n6" data-id="6" transform="translate(622,68)" style="opacity: 1;"><path class="box" d="M14,0H106Q120,0 120,14V30Q120,44 106,44H14Q0,44 0,30V14Q0,0 14,0Z" fill="#edf3f7"/><text class="label" text-anchor="middle" x="60" y="18"><tspan>#0</tspan><tspan class="node-id"> #6</tspan></text><text class="type" text-anchor="middle" y="35" x="60"/><title>#6 #0 -Type not computed - -[0] → #1 ASSOC</title><circle class="port" cx="60" cy="-3" r="3" fill="#536477"/><text class="slot" x="60" y="-10" text-anchor="middle">0</text></g><g class="node" id="n7" data-id="7" transform="translate(40,68)" style="opacity: 1;"><path class="box" d="M14,0H106Q120,0 120,14V30Q120,44 106,44H14Q0,44 0,30V14Q0,0 14,0Z" fill="#edf3f7"/><text class="label" text-anchor="middle" x="60" y="18"><tspan>#42</tspan><tspan class="node-id"> #7</tspan></text><text class="type" text-anchor="middle" y="35" x="60"/><title>#7 #42 -Type not computed - -[0] → #1 ASSOC</title><circle class="port" cx="60" cy="-3" r="3" fill="#536477"/><text class="slot" x="60" y="-10" text-anchor="middle">0</text></g><g class="node" id="n8" data-id="8" transform="translate(204,174)" style="opacity: 1;"><path class="box" d="M10,0H110L120,10V34L110,44H10L0,34V10Z" fill="#dcecff"/><text class="label" text-anchor="middle" x="60" y="18"><tspan>Store p.x</tspan><tspan class="node-id"> #8</tspan></text><text class="type" text-anchor="middle" y="35" x="60">MEM#2</text><title>#8 Store p.x -MEM#2 - -[0] → — CTRL -[1] → #3 MEM -[2] → #5 DATA -[3] → #7 DATA</title><circle class="port" cx="24" cy="-3" r="3" fill="white"/><circle class="port" cx="48" cy="-3" r="3" fill="#536477"/><circle class="port" cx="72" cy="-3" r="3" fill="#536477"/><circle class="port" cx="96" cy="-3" r="3" fill="#536477"/><text class="slot" x="24" y="-10" text-anchor="middle">0</text><text class="slot" x="48" y="-10" text-anchor="middle">1</text><text class="slot" x="72" y="-10" text-anchor="middle">2</text><text class="slot" x="96" y="-10" text-anchor="middle">3</text></g><g class="node" id="n9" data-id="9" transform="translate(345,174)" style="opacity: 1;"><path class="box" d="M10,0H110L120,10V34L110,44H10L0,34V10Z" fill="#dcecff"/><text class="label" text-anchor="middle" x="60" y="18"><tspan>Store p.y</tspan><tspan class="node-id"> #9</tspan></text><text class="type" text-anchor="middle" y="35" x="60">MEM#3</text><title>#9 Store p.y -MEM#3 - -[0] → — CTRL -[1] → #3 MEM -[2] → #5 DATA -[3] → #6 DATA</title><circle class="port" cx="24" cy="-3" r="3" fill="white"/><circle class="port" cx="48" cy="-3" r="3" fill="#536477"/><circle class="port" cx="72" cy="-3" r="3" fill="#536477"/><circle class="port" cx="96" cy="-3" r="3" fill="#536477"/><text class="slot" x="24" y="-10" text-anchor="middle">0</text><text class="slot" x="48" y="-10" text-anchor="middle">1</text><text class="slot" x="72" y="-10" text-anchor="middle">2</text><text class="slot" x="96" y="-10" text-anchor="middle">3</text></g><g class="node" id="n11" data-id="11" transform="translate(365,278)" style="opacity: 1;"><path class="box" d="M12,0H108L120,22L108,44H12L0,22Z" fill="#f5e4fa"/><text class="label" text-anchor="middle" x="60" y="18"><tspan>MemPhi y</tspan><tspan class="node-id"> #11</tspan></text><text class="type" text-anchor="middle" y="35" x="60">MEM#3</text><title>#11 MemPhi y -MEM#3 - -[0] → — ASSOC -[1] → #9 MEM -[2] → #19 MEM</title><circle class="port" cx="0" cy="-3" r="3" fill="white"/><circle class="port" cx="40" cy="-3" r="3" fill="#536477"/><circle class="port" cx="80" cy="-3" r="3" fill="#536477"/><text class="slot" x="0" y="-10" text-anchor="middle">0</text><text class="slot" x="40" y="-10" text-anchor="middle">1</text><text class="slot" x="80" y="-10" text-anchor="middle">2</text></g><g class="node" id="n12" data-id="12" transform="translate(652,174)" style="opacity: 1;"><path class="box" d="M12,0H108L120,22L108,44H12L0,22Z" fill="#f5e4fa"/><text class="label" text-anchor="middle" x="60" y="18"><tspan>Phi arg</tspan><tspan class="node-id"> #12</tspan></text><text class="type" text-anchor="middle" y="35" x="60"/><title>#12 Phi arg -Type not computed - -[0] → — ASSOC -[1] → #4 DATA -[2] → #21 DATA</title><circle class="port" cx="0" cy="-3" r="3" fill="white"/><circle class="port" cx="40" cy="-3" r="3" fill="#536477"/><circle class="port" cx="80" cy="-3" r="3" fill="#536477"/><text class="slot" x="0" y="-10" text-anchor="middle">0</text><text class="slot" x="40" y="-10" text-anchor="middle">1</text><text class="slot" x="80" y="-10" text-anchor="middle">2</text></g><g class="node" id="n15" data-id="15" transform="translate(700,296)" style="opacity: 1;"><path class="box" d="M0,0H82V26H0Z" fill="#fff1c4"/><text class="label" text-anchor="middle" x="41" y="17"><tspan>True</tspan><tspan class="node-id"> #15/0</tspan></text><text class="type" text-anchor="middle" y="35" x="41"/><title>#15 True -Projection 0 of #0 -Type not computed - -</title></g><g class="node" id="n16" data-id="16" transform="translate(85,192)" style="opacity: 1;"><path class="box" d="M0,0H87V26H0Z" fill="#fff1c4"/><text class="label" text-anchor="middle" x="43.5" y="17"><tspan>False</tspan><tspan class="node-id"> #16/1</tspan></text><text class="type" text-anchor="middle" y="35" x="43.5"/><title>#16 False -Projection 1 of #0 -Type not computed - -</title></g><g class="node" id="n17" data-id="17" transform="translate(774,382)" style="opacity: 1;"><path class="box" d="M14,0H106Q120,0 120,14V30Q120,44 106,44H14Q0,44 0,30V14Q0,0 14,0Z" fill="#edf3f7"/><text class="label" text-anchor="middle" x="60" y="18"><tspan>Load p.y</tspan><tspan class="node-id"> #17</tspan></text><text class="type" text-anchor="middle" y="35" x="60"/><title>#17 Load p.y -Type not computed - -[0] → #15 CTRL -[1] → #11 MEM -[2] → #5 DATA -[3] → — DATA</title><circle class="port" cx="24" cy="-3" r="3" fill="#536477"/><circle class="port" cx="48" cy="-3" r="3" fill="#536477"/><circle class="port" cx="72" cy="-3" r="3" fill="#536477"/><circle class="port" cx="96" cy="-3" r="3" fill="white"/><text class="slot" x="24" y="-10" text-anchor="middle">0</text><text class="slot" x="48" y="-10" text-anchor="middle">1</text><text class="slot" x="72" y="-10" text-anchor="middle">2</text><text class="slot" x="96" y="-10" text-anchor="middle">3</text></g><g class="node" id="n18" data-id="18" transform="translate(774,486)" style="opacity: 1;"><path class="box" d="M14,0H106Q120,0 120,14V30Q120,44 106,44H14Q0,44 0,30V14Q0,0 14,0Z" fill="#edf3f7"/><text class="label" text-anchor="middle" x="60" y="18"><tspan>+</tspan><tspan class="node-id"> #18</tspan></text><text class="type" text-anchor="middle" y="35" x="60"/><title>#18 + -Type not computed - -[0] → — CTRL -[1] → #17 DATA -[2] → #12 DATA</title><circle class="port" cx="30" cy="-3" r="3" fill="white"/><circle class="port" cx="60" cy="-3" r="3" fill="#536477"/><circle class="port" cx="90" cy="-3" r="3" fill="#536477"/><text class="slot" x="30" y="-10" text-anchor="middle">0</text><text class="slot" x="60" y="-10" text-anchor="middle">1</text><text class="slot" x="90" y="-10" text-anchor="middle">2</text></g><g class="node" id="n19" data-id="19" transform="translate(717,590)" style="opacity: 1;"><path class="box" d="M10,0H110L120,10V34L110,44H10L0,34V10Z" fill="#dcecff"/><text class="label" text-anchor="middle" x="60" y="18"><tspan>Store p.y</tspan><tspan class="node-id"> #19</tspan></text><text class="type" text-anchor="middle" y="35" x="60">MEM#3</text><title>#19 Store p.y -MEM#3 - -[0] → #15 CTRL -[1] → #11 MEM -[2] → #5 DATA -[3] → #18 DATA</title><circle class="port" cx="24" cy="-3" r="3" fill="#536477"/><circle class="port" cx="48" cy="-3" r="3" fill="#536477"/><circle class="port" cx="72" cy="-3" r="3" fill="#536477"/><circle class="port" cx="96" cy="-3" r="3" fill="#536477"/><text class="slot" x="24" y="-10" text-anchor="middle">0</text><text class="slot" x="48" y="-10" text-anchor="middle">1</text><text class="slot" x="72" y="-10" text-anchor="middle">2</text><text class="slot" x="96" y="-10" text-anchor="middle">3</text></g><g class="node" id="n20" data-id="20" transform="translate(497,174)" style="opacity: 1;"><path class="box" d="M14,0H106Q120,0 120,14V30Q120,44 106,44H14Q0,44 0,30V14Q0,0 14,0Z" fill="#edf3f7"/><text class="label" text-anchor="middle" x="60" y="18"><tspan>#1</tspan><tspan class="node-id"> #20</tspan></text><text class="type" text-anchor="middle" y="35" x="60"/><title>#20 #1 -Type not computed - -[0] → #1 ASSOC</title><circle class="port" cx="60" cy="-3" r="3" fill="#536477"/><text class="slot" x="60" y="-10" text-anchor="middle">0</text></g><g class="node" id="n21" data-id="21" transform="translate(560,278)" style="opacity: 1;"><path class="box" d="M14,0H106Q120,0 120,14V30Q120,44 106,44H14Q0,44 0,30V14Q0,0 14,0Z" fill="#edf3f7"/><text class="label" text-anchor="middle" x="60" y="18"><tspan>-</tspan><tspan class="node-id"> #21</tspan></text><text class="type" text-anchor="middle" y="35" x="60"/><title>#21 - -Type not computed - -[0] → — CTRL -[1] → #12 DATA -[2] → #20 DATA</title><circle class="port" cx="30" cy="-3" r="3" fill="white"/><circle class="port" cx="60" cy="-3" r="3" fill="#536477"/><circle class="port" cx="90" cy="-3" r="3" fill="#536477"/><text class="slot" x="30" y="-10" text-anchor="middle">0</text><text class="slot" x="60" y="-10" text-anchor="middle">1</text><text class="slot" x="90" y="-10" text-anchor="middle">2</text></g><g class="node" id="n22" data-id="22" transform="translate(35,382)" style="opacity: 1;"><path class="box" d="M10,0H110L120,10V34L110,44H10L0,34V10Z" fill="#dcecff"/><text class="label" text-anchor="middle" x="60" y="18"><tspan>MemMerge</tspan><tspan class="node-id"> #22</tspan></text><text class="type" text-anchor="middle" y="35" x="60"/><title>#22 MemMerge -Type not computed - -[0] → — CTRL -[1] → #3 MEM -[2] → #8 MEM -[3] → #11 MEM</title><circle class="port" cx="24" cy="-3" r="3" fill="white"/><circle class="port" cx="48" cy="-3" r="3" fill="#536477"/><circle class="port" cx="72" cy="-3" r="3" fill="#536477"/><circle class="port" cx="96" cy="-3" r="3" fill="#536477"/><text class="slot" x="24" y="-10" text-anchor="middle">0</text><text class="slot" x="48" y="-10" text-anchor="middle">1</text><text class="slot" x="72" y="-10" text-anchor="middle">2</text><text class="slot" x="96" y="-10" text-anchor="middle">3</text></g><g class="node" id="n23" data-id="23" transform="translate(105,278)" style="opacity: 1;"><path class="box" d="M14,0H106Q120,0 120,14V30Q120,44 106,44H14Q0,44 0,30V14Q0,0 14,0Z" fill="#edf3f7"/><text class="label" text-anchor="middle" x="60" y="18"><tspan>Load p.x</tspan><tspan class="node-id"> #23</tspan></text><text class="type" text-anchor="middle" y="35" x="60"/><title>#23 Load p.x -Type not computed - -[0] → #16 CTRL -[1] → #8 MEM -[2] → #5 DATA -[3] → — DATA</title><circle class="port" cx="24" cy="-3" r="3" fill="#536477"/><circle class="port" cx="48" cy="-3" r="3" fill="#536477"/><circle class="port" cx="72" cy="-3" r="3" fill="#536477"/><circle class="port" cx="96" cy="-3" r="3" fill="white"/><text class="slot" x="24" y="-10" text-anchor="middle">0</text><text class="slot" x="48" y="-10" text-anchor="middle">1</text><text class="slot" x="72" y="-10" text-anchor="middle">2</text><text class="slot" x="96" y="-10" text-anchor="middle">3</text></g><g class="node" id="n24" data-id="24" transform="translate(75,486)" style="opacity: 1;"><path class="box" d="M0,0H120V44H0Z" fill="#fff1c4"/><text class="label" text-anchor="middle" x="60" y="18"><tspan>Return</tspan><tspan class="node-id"> #24</tspan></text><text class="type" text-anchor="middle" y="35" x="60"/><title>#24 Return -Type not computed - -[0] → — CTRL -[1] → #22 MEM -[2] → #23 DATA</title><circle class="port" cx="30" cy="-3" r="3" fill="white"/><circle class="port" cx="60" cy="-3" r="3" fill="#536477"/><circle class="port" cx="90" cy="-3" r="3" fill="#536477"/><text class="slot" x="30" y="-10" text-anchor="middle">0</text><text class="slot" x="60" y="-10" text-anchor="middle">1</text><text class="slot" x="90" y="-10" text-anchor="middle">2</text></g></g><g class="region-heads" style="opacity: 1;"/><g class="shortcuts" style="opacity: 1;"/><g class="peep-ghosts" pointer-events="none"/></g></svg> diff --git a/chapter10b/docs/example2a.gv b/chapter10b/docs/example2a.gv deleted file mode 100644 index 187e63b9..00000000 --- a/chapter10b/docs/example2a.gv +++ /dev/null @@ -1,17 +0,0 @@ -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; - - M [label="Default memory" shape=octagon style="filled" fillcolor="#dcecff"]; - X [label="Store x" shape=octagon style="filled" fillcolor="#dcecff"]; - Y [label="Store y" shape=octagon style="filled" fillcolor="#dcecff"]; - X -> M [color="#2867b2"]; Y -> M [color="#2867b2"]; - MemMerge -> M [xlabel="default",color="#2867b2"]; MemMerge -> X [xlabel="x",color="#2867b2"]; - MemMerge -> Y [xlabel="y",color="#2867b2"]; Return -> MemMerge [color="#2867b2"]; - Return [shape=box style="filled" fillcolor="#fff1c4"]; - MemMerge [shape=octagon style="filled" fillcolor="#dcecff"]; -} diff --git a/chapter10b/docs/example2a.json b/chapter10b/docs/example2a.json deleted file mode 100644 index 2a9461b6..00000000 --- a/chapter10b/docs/example2a.json +++ /dev/null @@ -1,20 +0,0 @@ -{ - "ver": 1, - "comp": "chapter10b/docs/example2a.svg", - "step": 1, - "roots": [11], - "scope": 0, - "nodes": [ - {"id": 1, "label": "Start", "type": null, "kind": "CTRL", "edges": [], "proj": null}, - {"id": 3, "label": "$mem", "type": null, "kind": "MEM", "edges": [{"idx": 0, "def": 1, "role": "MEM", "label": null}], "proj": {"par": 1, "idx": 1}}, - {"id": 4, "label": "arg", "type": null, "kind": "DATA", "edges": [{"idx": 0, "def": 1, "role": "DATA", "label": null}], "proj": {"par": 1, "idx": 2}}, - {"id": 5, "label": "new Point", "type": null, "kind": "DATA", "edges": [{"idx": 0, "def": 0, "role": "CTRL", "label": null}], "proj": null}, - {"id": 7, "label": "Store p.x", "type": "MEM#2", "kind": "MEM", "edges": [{"idx": 0, "def": 0, "role": "CTRL", "label": null}, {"idx": 1, "def": 3, "role": "MEM", "label": null}, {"idx": 2, "def": 5, "role": "DATA", "label": null}, {"idx": 3, "def": 4, "role": "DATA", "label": null}], "proj": null}, - {"id": 8, "label": "#42", "type": null, "kind": "DATA", "edges": [{"idx": 0, "def": 1, "role": "ASSOC", "label": null}], "proj": null}, - {"id": 9, "label": "Store p.y", "type": "MEM#3", "kind": "MEM", "edges": [{"idx": 0, "def": 0, "role": "CTRL", "label": null}, {"idx": 1, "def": 3, "role": "MEM", "label": null}, {"idx": 2, "def": 5, "role": "DATA", "label": null}, {"idx": 3, "def": 8, "role": "DATA", "label": null}], "proj": null}, - {"id": 10, "label": "MemMerge", "type": null, "kind": "MEM", "edges": [{"idx": 0, "def": 0, "role": "CTRL", "label": null}, {"idx": 1, "def": 3, "role": "MEM", "label": null}, {"idx": 2, "def": 7, "role": "MEM", "label": null}, {"idx": 3, "def": 9, "role": "MEM", "label": null}], "proj": null}, - {"id": 11, "label": "Return", "type": null, "kind": "CTRL", "edges": [{"idx": 0, "def": 0, "role": "CTRL", "label": null}, {"idx": 1, "def": 10, "role": "MEM", "label": null}, {"idx": 2, "def": 5, "role": "DATA", "label": null}], "proj": null} - ], - "groups": [ - ] -} diff --git a/chapter10b/docs/example2a.svg b/chapter10b/docs/example2a.svg deleted file mode 100644 index b43a55b4..00000000 --- a/chapter10b/docs/example2a.svg +++ /dev/null @@ -1,103 +0,0 @@ -<svg aria-label="Compiler graph" width="598" height="454" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 598 454" style="font-family: sans-serif;"><style> - html, body { height:100%; margin:0; font-family:sans-serif; } - .viewer { height:100%; display:grid; grid-template-rows:auto minmax(0,1fr) auto; } - .source { padding:8px; border-bottom:1px solid #ccc; } - #program { width:min(600px,80vw); vertical-align:middle; } - #status { margin-top:4px; } - #graph { min-height:0; overflow:hidden; position:relative; background:#fafbfc; } - #elk { width:100%; height:100%; } - #graph svg { display:block; } - .tools { display:flex; flex-wrap:wrap; align-items:center; gap:14px; margin-top:8px; font-size:12px; } - .hint { color:#616c78; } - .ctrl { color:#b63838; } .mem { color:#2867b2; } .data { color:#536477; } - .edge { fill:none; stroke-width:1.5; } - .edge.CTRL { stroke-width:2; } - .edge.ASSOC { stroke-dasharray:4 4; } - .edge.PARSER { stroke-dasharray:5 4; } - .parser rect { fill:#f6f0ff; stroke:#7956a5; stroke-width:1.5; stroke-dasharray:5 4; } - .edge.selected { stroke-width:3.5; } - .edge.bundle { stroke-width:4; } - .edge.bundle.selected { stroke-width:6; } - .edge-hit { fill:none; stroke:transparent; stroke-width:12; vector-effect:non-scaling-stroke; pointer-events:stroke; cursor:pointer; } - .edge-jump { fill:transparent; pointer-events:all; cursor:pointer; } - .node { cursor:pointer; } - .box { stroke:#758191; stroke-width:1; } - .node.held .box { stroke-dasharray:5 3; } - .node.near .box { stroke:#c18221; stroke-width:2; } - .node.focus .box { stroke:#9c4900; stroke-width:3; } - .node.selected .box { stroke:#1569b9; stroke-width:3; } - .node.folded .box { stroke-width:4; } - .node.folding .box { fill:#f4ccd7; } - .fold-tag { font-size:9px; font-weight:700; fill:#963751; } - .peep-area { fill:#fff3d9; fill-opacity:.8; stroke:#c18221; stroke-width:2; pointer-events:none; } - .node.peep-edit .box { stroke:#9c4900; stroke-width:3; } - .node.error .box { stroke:#b42318; stroke-width:4; } - #event.error { color:#b42318; font-weight:600; white-space:pre-wrap; overflow-wrap:anywhere; } - .peep-ghosts { pointer-events:none; } - .region-box { stroke:#9da9b8; stroke-width:1.5; } - .fold-btn { cursor:pointer; } - .fold-btn rect { fill:white; stroke:#596674; } - .fold-btn text { font-size:14px; fill:#152330; } - .fold-btn:focus rect { stroke:#1569b9; stroke-width:2; } - .shortcut { cursor:pointer; } - .shortcut path { fill:none; stroke-width:1.5; } - .shortcut rect { fill:#fff8ec; stroke:#b63838; stroke-dasharray:3 2; } - .shortcut text { font-size:11px; fill:#783030; } - .shortcut.selected rect, .shortcut:focus rect { stroke-width:2.5; } - .label { font-size:12px; fill:#152330; font-weight:600; } - .node-id { font-size:10px; fill:#596674; font-weight:400; } - .type { font-size:11px; fill:#455768; } - .port { stroke:#536477; stroke-width:1; } - .row { stroke:#b6afcf; stroke-width:1; } - .bind { font-size:12px; fill:#152330; } - .slot { font-size:10px; fill:#364352; paint-order:stroke; stroke:#fafbfc; stroke-width:3; } - #detail { position:absolute; top:8px; right:8px; margin:0; padding:12px; max-width:320px; - max-height:45%; overflow:auto; white-space:pre-wrap; overflow-wrap:anywhere; - background:#fffffff2; border:1px solid #bac5d0; border-radius:4px; font-size:12px; } - .controls { display:flex; flex-wrap:wrap; justify-content:center; align-items:center; gap:6px; padding:6px; } - .button { color:white; background:black; font-size:20px; min-width:30px; } - .button:disabled { background:grey; } - .count { font-size:20px; min-width:35px; text-align:center; } - #N { width:6ch; } - #scrub { width:clamp(120px,35vw,600px); } - </style><defs><marker id="arrow-CTRL" viewBox="0 -4 8 8" refX="8" refY="0" markerWidth="7" markerHeight="7" orient="auto-start-reverse"><path d="M0,-4L8,0L0,4Z" fill="#b63838"/></marker><marker id="arrow-DATA" viewBox="0 -4 8 8" refX="8" refY="0" markerWidth="7" markerHeight="7" orient="auto-start-reverse"><path d="M0,-4L8,0L0,4Z" fill="#536477"/></marker><marker id="arrow-MEM" viewBox="0 -4 8 8" refX="8" refY="0" markerWidth="7" markerHeight="7" orient="auto-start-reverse"><path d="M0,-4L8,0L0,4Z" fill="#2867b2"/></marker><marker id="arrow-ASSOC" viewBox="0 -4 8 8" refX="8" refY="0" markerWidth="7" markerHeight="7" orient="auto-start-reverse"><path d="M0,-4L8,0L0,4Z" fill="#9396a3"/></marker><marker id="arrow-PARSER" viewBox="0 -4 8 8" refX="8" refY="0" markerWidth="7" markerHeight="7" orient="auto-start-reverse"><path d="M0,-4L8,0L0,4Z" fill="#7956a5"/></marker></defs><rect width="100%" height="100%" fill="rgb(250, 251, 252)"/><g><g class="regions" style="opacity: 1;"/><rect class="peep-area" rx="36" style="opacity: 0;"/><g class="edges"><path class="edge MEM" id="e7i1" d="M84,118 L84,140 Q84,148 92,148 L135,148 Q143,148 143,156 L143,166" stroke="#2867b2" marker-start="url(#arrow-MEM)" style="opacity: 1;"><title>#7[1] → #3 · MEM</title></path><path class="edge DATA" id="e7i2" d="M362,118 L362,123 Q362,128 357,128 L175,128 Q167,128 167,136 L167,166" stroke="#536477" marker-start="url(#arrow-DATA)" style="opacity: 1;"><title>#7[2] → #5 · DATA</title></path><path class="edge DATA" id="e7i3" d="M204,118 L204,131.5 Q204,138 197.5,138 L197.5,138 Q191,138 191,144.5 L191,166" stroke="#536477" marker-start="url(#arrow-DATA)" style="opacity: 1;"><title>#7[3] → #4 · DATA</title></path><path class="edge ASSOC" id="e8i0" d="M267,46 C267,70 514,41 514,65" stroke="#9396a3" marker-start="url(#arrow-ASSOC)" style="opacity: 1;"><title>#8[0] → #1 · ASSOC</title></path><path class="edge MEM" id="e9i1" d="M84,118 L84,140 Q84,148 92,148 L287,148 Q295,148 295,156 L295,166" stroke="#2867b2" marker-start="url(#arrow-MEM)" style="opacity: 1;"><title>#9[1] → #3 · MEM</title></path><path class="edge DATA" id="e9i2" d="M362,118 L362,123 Q362,128 357,128 L327,128 Q319,128 319,136 L319,166" stroke="#536477" marker-start="url(#arrow-DATA)" style="opacity: 1;"><title>#9[2] → #5 · DATA</title></path><path class="edge DATA" id="e9i3" d="M514,118 L514,130 Q514,138 506,138 L351,138 Q343,138 343,146 L343,166" stroke="#536477" marker-start="url(#arrow-DATA)" style="opacity: 1;"><title>#9[3] → #8 · DATA</title></path><path class="edge MEM" id="e10i1" d="M84,118 L84,224 Q84,232 92,232 L123,232 Q131,232 131,240 L131,270" stroke="#2867b2" marker-start="url(#arrow-MEM)" style="opacity: 1;"><title>#10[1] → #3 · MEM</title></path><path class="edge MEM" id="e10i2" d="M155,222 L155,270" stroke="#2867b2" marker-start="url(#arrow-MEM)" style="opacity: 1;"><title>#10[2] → #7 · MEM</title></path><path class="edge MEM" id="e10i3" d="M307,222 L307,227 Q307,232 302,232 L187,232 Q179,232 179,240 L179,270" stroke="#2867b2" marker-start="url(#arrow-MEM)" style="opacity: 1;"><title>#10[3] → #9 · MEM</title></path><path class="edge MEM" id="e11i1" d="M143,326 L143,331 Q143,336 148,336 L339,336 Q347,336 347,344 L347,374" stroke="#2867b2" marker-start="url(#arrow-MEM)" style="opacity: 1;"><title>#11[1] → #10 · MEM</title></path><path class="edge DATA" id="e11i2" d="M362,118 L362,123 Q362,128 367,128 L369.5,128 Q377,128 377,135.5 L377,374" stroke="#536477" marker-start="url(#arrow-DATA)" style="opacity: 1;"><title>#11[2] → #5 · DATA</title></path></g><g class="edge-hits"/><g class="parser" style="opacity: 1;"/><g class="nodes"><g class="node" id="n1" data-id="1" transform="translate(24,24)" style="opacity: 1;"><path class="box" d="M0,0H240V44H0Z" fill="#fff1c4"/><text class="label" text-anchor="middle" x="120" y="18"><tspan>Start</tspan><tspan class="node-id"> #1</tspan></text><text class="type" text-anchor="middle" y="35" x="120"/><title>#1 Start -Type not computed - -</title></g><g class="node" id="n3" data-id="3" transform="translate(24,68)" style="opacity: 1;"><path class="box" d="M0,0H120V44H0Z" fill="#dcecff"/><text class="label" text-anchor="middle" x="60" y="18"><tspan>$mem</tspan><tspan class="node-id"> #3/1</tspan></text><text class="type" text-anchor="middle" y="35" x="60"/><title>#3 $mem -Projection 1 of #1 -Type not computed - -[0] → #1 MEM</title></g><g class="node" id="n4" data-id="4" transform="translate(144,68)" style="opacity: 1;"><path class="box" d="M0,0H120V44H0Z" fill="#edf3f7"/><text class="label" text-anchor="middle" x="60" y="18"><tspan>arg</tspan><tspan class="node-id"> #4/2</tspan></text><text class="type" text-anchor="middle" y="35" x="60"/><title>#4 arg -Projection 2 of #1 -Type not computed - -[0] → #1 DATA</title></g><g class="node" id="n5" data-id="5" transform="translate(302,68)" style="opacity: 1;"><path class="box" d="M14,0H106Q120,0 120,14V30Q120,44 106,44H14Q0,44 0,30V14Q0,0 14,0Z" fill="#edf3f7"/><text class="label" text-anchor="middle" x="60" y="18"><tspan>new Point</tspan><tspan class="node-id"> #5</tspan></text><text class="type" text-anchor="middle" y="35" x="60"/><title>#5 new Point -Type not computed - -[0] → — CTRL</title><circle class="port" cx="60" cy="-3" r="3" fill="white"/><text class="slot" x="60" y="-10" text-anchor="middle">0</text></g><g class="node" id="n7" data-id="7" transform="translate(95,172)" style="opacity: 1;"><path class="box" d="M10,0H110L120,10V34L110,44H10L0,34V10Z" fill="#dcecff"/><text class="label" text-anchor="middle" x="60" y="18"><tspan>Store p.x</tspan><tspan class="node-id"> #7</tspan></text><text class="type" text-anchor="middle" y="35" x="60">MEM#2</text><title>#7 Store p.x -MEM#2 - -[0] → — CTRL -[1] → #3 MEM -[2] → #5 DATA -[3] → #4 DATA</title><circle class="port" cx="24" cy="-3" r="3" fill="white"/><circle class="port" cx="48" cy="-3" r="3" fill="#536477"/><circle class="port" cx="72" cy="-3" r="3" fill="#536477"/><circle class="port" cx="96" cy="-3" r="3" fill="#536477"/><text class="slot" x="24" y="-10" text-anchor="middle">0</text><text class="slot" x="48" y="-10" text-anchor="middle">1</text><text class="slot" x="72" y="-10" text-anchor="middle">2</text><text class="slot" x="96" y="-10" text-anchor="middle">3</text></g><g class="node" id="n8" data-id="8" transform="translate(454,68)" style="opacity: 1;"><path class="box" d="M14,0H106Q120,0 120,14V30Q120,44 106,44H14Q0,44 0,30V14Q0,0 14,0Z" fill="#edf3f7"/><text class="label" text-anchor="middle" x="60" y="18"><tspan>#42</tspan><tspan class="node-id"> #8</tspan></text><text class="type" text-anchor="middle" y="35" x="60"/><title>#8 #42 -Type not computed - -[0] → #1 ASSOC</title><circle class="port" cx="60" cy="-3" r="3" fill="#536477"/><text class="slot" x="60" y="-10" text-anchor="middle">0</text></g><g class="node" id="n9" data-id="9" transform="translate(247,172)" style="opacity: 1;"><path class="box" d="M10,0H110L120,10V34L110,44H10L0,34V10Z" fill="#dcecff"/><text class="label" text-anchor="middle" x="60" y="18"><tspan>Store p.y</tspan><tspan class="node-id"> #9</tspan></text><text class="type" text-anchor="middle" y="35" x="60">MEM#3</text><title>#9 Store p.y -MEM#3 - -[0] → — CTRL -[1] → #3 MEM -[2] → #5 DATA -[3] → #8 DATA</title><circle class="port" cx="24" cy="-3" r="3" fill="white"/><circle class="port" cx="48" cy="-3" r="3" fill="#536477"/><circle class="port" cx="72" cy="-3" r="3" fill="#536477"/><circle class="port" cx="96" cy="-3" r="3" fill="#536477"/><text class="slot" x="24" y="-10" text-anchor="middle">0</text><text class="slot" x="48" y="-10" text-anchor="middle">1</text><text class="slot" x="72" y="-10" text-anchor="middle">2</text><text class="slot" x="96" y="-10" text-anchor="middle">3</text></g><g class="node" id="n10" data-id="10" transform="translate(83,276)" style="opacity: 1;"><path class="box" d="M10,0H110L120,10V34L110,44H10L0,34V10Z" fill="#dcecff"/><text class="label" text-anchor="middle" x="60" y="18"><tspan>MemMerge</tspan><tspan class="node-id"> #10</tspan></text><text class="type" text-anchor="middle" y="35" x="60"/><title>#10 MemMerge -Type not computed - -[0] → — CTRL -[1] → #3 MEM -[2] → #7 MEM -[3] → #9 MEM</title><circle class="port" cx="24" cy="-3" r="3" fill="white"/><circle class="port" cx="48" cy="-3" r="3" fill="#536477"/><circle class="port" cx="72" cy="-3" r="3" fill="#536477"/><circle class="port" cx="96" cy="-3" r="3" fill="#536477"/><text class="slot" x="24" y="-10" text-anchor="middle">0</text><text class="slot" x="48" y="-10" text-anchor="middle">1</text><text class="slot" x="72" y="-10" text-anchor="middle">2</text><text class="slot" x="96" y="-10" text-anchor="middle">3</text></g><g class="node" id="n11" data-id="11" transform="translate(287,380)" style="opacity: 1;"><path class="box" d="M0,0H120V44H0Z" fill="#fff1c4"/><text class="label" text-anchor="middle" x="60" y="18"><tspan>Return</tspan><tspan class="node-id"> #11</tspan></text><text class="type" text-anchor="middle" y="35" x="60"/><title>#11 Return -Type not computed - -[0] → — CTRL -[1] → #10 MEM -[2] → #5 DATA</title><circle class="port" cx="30" cy="-3" r="3" fill="white"/><circle class="port" cx="60" cy="-3" r="3" fill="#536477"/><circle class="port" cx="90" cy="-3" r="3" fill="#536477"/><text class="slot" x="30" y="-10" text-anchor="middle">0</text><text class="slot" x="60" y="-10" text-anchor="middle">1</text><text class="slot" x="90" y="-10" text-anchor="middle">2</text></g></g><g class="region-heads" style="opacity: 1;"/><g class="shortcuts" style="opacity: 1;"/><g class="peep-ghosts" pointer-events="none"/></g></svg> diff --git a/chapter10b/docs/example2b.gv b/chapter10b/docs/example2b.gv deleted file mode 100644 index 39b87a6a..00000000 --- a/chapter10b/docs/example2b.gv +++ /dev/null @@ -1,19 +0,0 @@ -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; - - P [label="MemPhi(x)" shape=hexagon style="filled" fillcolor="#f5e4fa"]; - B [label="BulkMemPhi(All except x)" shape=hexagon style="filled" fillcolor="#f5e4fa"]; - P -> Left [xlabel="slice x",color="#2867b2"]; P -> Right [xlabel="slice x",color="#2867b2"]; - B -> Left [color="#2867b2"]; B -> Right [color="#2867b2"]; - P -> Region [style=dashed,color="#9396a3"]; B -> Region [style=dashed,color="#9396a3"]; - MemMerge -> P [xlabel="x",color="#2867b2"]; MemMerge -> B [xlabel="default",color="#2867b2"]; - MemMerge [shape=octagon style="filled" fillcolor="#dcecff"]; - Left [shape=octagon style="filled" fillcolor="#dcecff"]; - Right [shape=octagon style="filled" fillcolor="#dcecff"]; - Region [shape=trapezium style="filled" fillcolor="#fff1c4"]; -} diff --git a/chapter10b/docs/example2b.json b/chapter10b/docs/example2b.json deleted file mode 100644 index 3d919618..00000000 --- a/chapter10b/docs/example2b.json +++ /dev/null @@ -1,30 +0,0 @@ -{ - "ver": 1, - "comp": "chapter10b/docs/example2b.svg", - "step": 1, - "roots": [23], - "scope": 0, - "nodes": [ - {"id": 1, "label": "Start", "type": null, "kind": "CTRL", "edges": [], "proj": null}, - {"id": 3, "label": "$mem", "type": null, "kind": "MEM", "edges": [{"idx": 0, "def": 1, "role": "MEM", "label": null}], "proj": {"par": 1, "idx": 1}}, - {"id": 5, "label": "new Point", "type": null, "kind": "DATA", "edges": [{"idx": 0, "def": 0, "role": "CTRL", "label": null}], "proj": null}, - {"id": 6, "label": "#0", "type": null, "kind": "DATA", "edges": [{"idx": 0, "def": 1, "role": "ASSOC", "label": null}], "proj": null}, - {"id": 7, "label": "Store p.x", "type": "MEM#2", "kind": "MEM", "edges": [{"idx": 0, "def": 0, "role": "CTRL", "label": null}, {"idx": 1, "def": 3, "role": "MEM", "label": null}, {"idx": 2, "def": 5, "role": "DATA", "label": null}, {"idx": 3, "def": 6, "role": "DATA", "label": null}], "proj": null}, - {"id": 8, "label": "Store p.y", "type": "MEM#3", "kind": "MEM", "edges": [{"idx": 0, "def": 0, "role": "CTRL", "label": null}, {"idx": 1, "def": 3, "role": "MEM", "label": null}, {"idx": 2, "def": 5, "role": "DATA", "label": null}, {"idx": 3, "def": 6, "role": "DATA", "label": null}], "proj": null}, - {"id": 9, "label": "MemMerge", "type": null, "kind": "MEM", "edges": [{"idx": 0, "def": 0, "role": "CTRL", "label": null}, {"idx": 1, "def": 3, "role": "MEM", "label": null}, {"idx": 2, "def": 7, "role": "MEM", "label": null}, {"idx": 3, "def": 8, "role": "MEM", "label": null}], "proj": null}, - {"id": 11, "label": "True", "type": null, "kind": "CTRL", "edges": [], "proj": {"par": 0, "idx": 0}}, - {"id": 12, "label": "False", "type": null, "kind": "CTRL", "edges": [], "proj": {"par": 0, "idx": 1}}, - {"id": 13, "label": "#3", "type": null, "kind": "DATA", "edges": [{"idx": 0, "def": 1, "role": "ASSOC", "label": null}], "proj": null}, - {"id": 14, "label": "Store p.x", "type": "MEM#2", "kind": "MEM", "edges": [{"idx": 0, "def": 11, "role": "CTRL", "label": null}, {"idx": 1, "def": 7, "role": "MEM", "label": null}, {"idx": 2, "def": 5, "role": "DATA", "label": null}, {"idx": 3, "def": 13, "role": "DATA", "label": null}], "proj": null}, - {"id": 15, "label": "#4", "type": null, "kind": "DATA", "edges": [{"idx": 0, "def": 1, "role": "ASSOC", "label": null}], "proj": null}, - {"id": 16, "label": "Store p.x", "type": "MEM#2", "kind": "MEM", "edges": [{"idx": 0, "def": 12, "role": "CTRL", "label": null}, {"idx": 1, "def": 7, "role": "MEM", "label": null}, {"idx": 2, "def": 5, "role": "DATA", "label": null}, {"idx": 3, "def": 15, "role": "DATA", "label": null}], "proj": null}, - {"id": 17, "label": "MemMerge", "type": null, "kind": "MEM", "edges": [{"idx": 0, "def": 0, "role": "CTRL", "label": null}, {"idx": 1, "def": 9, "role": "MEM", "label": null}, {"idx": 2, "def": 14, "role": "MEM", "label": null}], "proj": null}, - {"id": 18, "label": "MemMerge", "type": null, "kind": "MEM", "edges": [{"idx": 0, "def": 0, "role": "CTRL", "label": null}, {"idx": 1, "def": 9, "role": "MEM", "label": null}, {"idx": 2, "def": 16, "role": "MEM", "label": null}], "proj": null}, - {"id": 20, "label": "MemPhi x", "type": "MEM#2", "kind": "PHI", "edges": [{"idx": 0, "def": 0, "role": "ASSOC", "label": null}, {"idx": 1, "def": 14, "role": "MEM", "label": null}, {"idx": 2, "def": 16, "role": "MEM", "label": null}], "proj": null}, - {"id": 21, "label": "BulkMemPhi except x", "type": null, "kind": "PHI", "edges": [{"idx": 0, "def": 0, "role": "ASSOC", "label": null}, {"idx": 1, "def": 17, "role": "MEM", "label": null}, {"idx": 2, "def": 18, "role": "MEM", "label": null}], "proj": null}, - {"id": 22, "label": "MemMerge", "type": null, "kind": "MEM", "edges": [{"idx": 0, "def": 0, "role": "CTRL", "label": null}, {"idx": 1, "def": 21, "role": "MEM", "label": null}, {"idx": 2, "def": 20, "role": "MEM", "label": null}], "proj": null}, - {"id": 23, "label": "Return", "type": null, "kind": "CTRL", "edges": [{"idx": 0, "def": 0, "role": "CTRL", "label": null}, {"idx": 1, "def": 22, "role": "MEM", "label": null}, {"idx": 2, "def": 5, "role": "DATA", "label": null}], "proj": null} - ], - "groups": [ - ] -} diff --git a/chapter10b/docs/example2b.svg b/chapter10b/docs/example2b.svg deleted file mode 100644 index 54ddad9d..00000000 --- a/chapter10b/docs/example2b.svg +++ /dev/null @@ -1,150 +0,0 @@ -<svg aria-label="Compiler graph" width="886" height="768" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 886 768" style="font-family: sans-serif;"><style> - html, body { height:100%; margin:0; font-family:sans-serif; } - .viewer { height:100%; display:grid; grid-template-rows:auto minmax(0,1fr) auto; } - .source { padding:8px; border-bottom:1px solid #ccc; } - #program { width:min(600px,80vw); vertical-align:middle; } - #status { margin-top:4px; } - #graph { min-height:0; overflow:hidden; position:relative; background:#fafbfc; } - #elk { width:100%; height:100%; } - #graph svg { display:block; } - .tools { display:flex; flex-wrap:wrap; align-items:center; gap:14px; margin-top:8px; font-size:12px; } - .hint { color:#616c78; } - .ctrl { color:#b63838; } .mem { color:#2867b2; } .data { color:#536477; } - .edge { fill:none; stroke-width:1.5; } - .edge.CTRL { stroke-width:2; } - .edge.ASSOC { stroke-dasharray:4 4; } - .edge.PARSER { stroke-dasharray:5 4; } - .parser rect { fill:#f6f0ff; stroke:#7956a5; stroke-width:1.5; stroke-dasharray:5 4; } - .edge.selected { stroke-width:3.5; } - .edge.bundle { stroke-width:4; } - .edge.bundle.selected { stroke-width:6; } - .edge-hit { fill:none; stroke:transparent; stroke-width:12; vector-effect:non-scaling-stroke; pointer-events:stroke; cursor:pointer; } - .edge-jump { fill:transparent; pointer-events:all; cursor:pointer; } - .node { cursor:pointer; } - .box { stroke:#758191; stroke-width:1; } - .node.held .box { stroke-dasharray:5 3; } - .node.near .box { stroke:#c18221; stroke-width:2; } - .node.focus .box { stroke:#9c4900; stroke-width:3; } - .node.selected .box { stroke:#1569b9; stroke-width:3; } - .node.folded .box { stroke-width:4; } - .node.folding .box { fill:#f4ccd7; } - .fold-tag { font-size:9px; font-weight:700; fill:#963751; } - .peep-area { fill:#fff3d9; fill-opacity:.8; stroke:#c18221; stroke-width:2; pointer-events:none; } - .node.peep-edit .box { stroke:#9c4900; stroke-width:3; } - .node.error .box { stroke:#b42318; stroke-width:4; } - #event.error { color:#b42318; font-weight:600; white-space:pre-wrap; overflow-wrap:anywhere; } - .peep-ghosts { pointer-events:none; } - .region-box { stroke:#9da9b8; stroke-width:1.5; } - .fold-btn { cursor:pointer; } - .fold-btn rect { fill:white; stroke:#596674; } - .fold-btn text { font-size:14px; fill:#152330; } - .fold-btn:focus rect { stroke:#1569b9; stroke-width:2; } - .shortcut { cursor:pointer; } - .shortcut path { fill:none; stroke-width:1.5; } - .shortcut rect { fill:#fff8ec; stroke:#b63838; stroke-dasharray:3 2; } - .shortcut text { font-size:11px; fill:#783030; } - .shortcut.selected rect, .shortcut:focus rect { stroke-width:2.5; } - .label { font-size:12px; fill:#152330; font-weight:600; } - .node-id { font-size:10px; fill:#596674; font-weight:400; } - .type { font-size:11px; fill:#455768; } - .port { stroke:#536477; stroke-width:1; } - .row { stroke:#b6afcf; stroke-width:1; } - .bind { font-size:12px; fill:#152330; } - .slot { font-size:10px; fill:#364352; paint-order:stroke; stroke:#fafbfc; stroke-width:3; } - #detail { position:absolute; top:8px; right:8px; margin:0; padding:12px; max-width:320px; - max-height:45%; overflow:auto; white-space:pre-wrap; overflow-wrap:anywhere; - background:#fffffff2; border:1px solid #bac5d0; border-radius:4px; font-size:12px; } - .controls { display:flex; flex-wrap:wrap; justify-content:center; align-items:center; gap:6px; padding:6px; } - .button { color:white; background:black; font-size:20px; min-width:30px; } - .button:disabled { background:grey; } - .count { font-size:20px; min-width:35px; text-align:center; } - #N { width:6ch; } - #scrub { width:clamp(120px,35vw,600px); } - </style><defs><marker id="arrow-CTRL" viewBox="0 -4 8 8" refX="8" refY="0" markerWidth="7" markerHeight="7" orient="auto-start-reverse"><path d="M0,-4L8,0L0,4Z" fill="#b63838"/></marker><marker id="arrow-DATA" viewBox="0 -4 8 8" refX="8" refY="0" markerWidth="7" markerHeight="7" orient="auto-start-reverse"><path d="M0,-4L8,0L0,4Z" fill="#536477"/></marker><marker id="arrow-MEM" viewBox="0 -4 8 8" refX="8" refY="0" markerWidth="7" markerHeight="7" orient="auto-start-reverse"><path d="M0,-4L8,0L0,4Z" fill="#2867b2"/></marker><marker id="arrow-ASSOC" viewBox="0 -4 8 8" refX="8" refY="0" markerWidth="7" markerHeight="7" orient="auto-start-reverse"><path d="M0,-4L8,0L0,4Z" fill="#9396a3"/></marker><marker id="arrow-PARSER" viewBox="0 -4 8 8" refX="8" refY="0" markerWidth="7" markerHeight="7" orient="auto-start-reverse"><path d="M0,-4L8,0L0,4Z" fill="#7956a5"/></marker></defs><rect width="100%" height="100%" fill="rgb(250, 251, 252)"/><g><g class="regions" style="opacity: 1;"/><rect class="peep-area" rx="36" style="opacity: 0;"/><g class="edges"><path class="edge ASSOC" id="e6i0" d="M147,46 C147,70 279,41 279,65" stroke="#9396a3" marker-start="url(#arrow-ASSOC)" style="opacity: 1;"><title>#6[0] → #1 · ASSOC</title></path><path class="edge MEM" id="e7i1" d="M84,118 L84,140 Q84,148 92,148 L341,148 Q349,148 349,156 L349,166" stroke="#2867b2" marker-start="url(#arrow-MEM)" style="opacity: 1;"><title>#7[1] → #3 · MEM</title></path><path class="edge DATA" id="e7i2" d="M431,118 L431,130 Q431,138 423,138 L381,138 Q373,138 373,146 L373,166" stroke="#536477" marker-start="url(#arrow-DATA)" style="opacity: 1;"><title>#7[2] → #5 · DATA</title></path><path class="edge DATA" id="e7i3" d="M279,118 L279,123 Q279,128 284,128 L389,128 Q397,128 397,136 L397,166" stroke="#536477" marker-start="url(#arrow-DATA)" style="opacity: 1;"><title>#7[3] → #6 · DATA</title></path><path class="edge MEM" id="e8i1" d="M84,118 L84,166" stroke="#2867b2" marker-start="url(#arrow-MEM)" style="opacity: 1;"><title>#8[1] → #3 · MEM</title></path><path class="edge DATA" id="e8i2" d="M431,118 L431,130 Q431,138 423,138 L116,138 Q108,138 108,146 L108,166" stroke="#536477" marker-start="url(#arrow-DATA)" style="opacity: 1;"><title>#8[2] → #5 · DATA</title></path><path class="edge DATA" id="e8i3" d="M279,118 L279,123 Q279,128 274,128 L140,128 Q132,128 132,136 L132,166" stroke="#536477" marker-start="url(#arrow-DATA)" style="opacity: 1;"><title>#8[3] → #6 · DATA</title></path><path class="edge MEM" id="e9i1" d="M84,118 L84,140 Q84,148 76,148 L33,148 Q25,148 25,156 L25,234 Q25,242 33,242 L93,242 Q101,242 101,250 L101,272" stroke="#2867b2" marker-start="url(#arrow-MEM)" style="opacity: 1;"><title>#9[1] → #3 · MEM</title></path><path class="edge MEM" id="e9i2" d="M361,222 L361,234 Q361,242 353,242 L133,242 Q125,242 125,250 L125,272" stroke="#2867b2" marker-start="url(#arrow-MEM)" style="opacity: 1;"><title>#9[2] → #7 · MEM</title></path><path class="edge MEM" id="e9i3" d="M96,222 L96,227 Q96,232 101,232 L141,232 Q149,232 149,240 L149,272" stroke="#2867b2" marker-start="url(#arrow-MEM)" style="opacity: 1;"><title>#9[3] → #8 · MEM</title></path><path class="edge ASSOC" id="e13i0" d="M147,46 C147,70 502,145 502,169" stroke="#9396a3" marker-start="url(#arrow-ASSOC)" style="opacity: 1;"><title>#13[0] → #1 · ASSOC</title></path><path class="edge CTRL" id="e14i0" d="M229,222 L229,272" stroke="#b63838" marker-start="url(#arrow-CTRL)" style="opacity: 1;"><title>#14[0] → #11 · CTRL</title></path><path class="edge MEM" id="e14i1" d="M361,222 L361,234 Q361,242 353,242 L261,242 Q253,242 253,250 L253,272" stroke="#2867b2" marker-start="url(#arrow-MEM)" style="opacity: 1;"><title>#14[1] → #7 · MEM</title></path><path class="edge DATA" id="e14i2" d="M431,118 L431,244 Q431,252 423,252 L285,252 Q277,252 277,260 L277,272" stroke="#536477" marker-start="url(#arrow-DATA)" style="opacity: 1;"><title>#14[2] → #5 · DATA</title></path><path class="edge DATA" id="e14i3" d="M502,222 L502,254 Q502,262 494,262 L306,262 Q301,262 301,267 L301,272" stroke="#536477" marker-start="url(#arrow-DATA)" style="opacity: 1;"><title>#14[3] → #13 · DATA</title></path><path class="edge ASSOC" id="e15i0" d="M147,46 C147,70 762,145 762,169" stroke="#9396a3" marker-start="url(#arrow-ASSOC)" style="opacity: 1;"><title>#15[0] → #1 · ASSOC</title></path><path class="edge CTRL" id="e16i0" d="M638,222 L638,272" stroke="#b63838" marker-start="url(#arrow-CTRL)" style="opacity: 1;"><title>#16[0] → #12 · CTRL</title></path><path class="edge MEM" id="e16i1" d="M361,222 L361,234 Q361,242 369,242 L654,242 Q662,242 662,250 L662,272" stroke="#2867b2" marker-start="url(#arrow-MEM)" style="opacity: 1;"><title>#16[1] → #7 · MEM</title></path><path class="edge DATA" id="e16i2" d="M431,118 L431,130 Q431,138 439,138 L683,138 Q691,138 691,146 L691,229.5 Q691,232 688.5,232 L688.5,232 Q686,232 686,234.5 L686,272" stroke="#536477" marker-start="url(#arrow-DATA)" style="opacity: 1;"><title>#16[2] → #5 · DATA</title></path><path class="edge DATA" id="e16i3" d="M762,222 L762,227 Q762,232 757,232 L718,232 Q710,232 710,240 L710,272" stroke="#536477" marker-start="url(#arrow-DATA)" style="opacity: 1;"><title>#16[3] → #15 · DATA</title></path><path class="edge MEM" id="e17i1" d="M113,328 L113,340 Q113,348 121,348 L227,348 Q235,348 235,356 L235,376" stroke="#2867b2" marker-start="url(#arrow-MEM)" style="opacity: 1;"><title>#17[1] → #9 · MEM</title></path><path class="edge MEM" id="e17i2" d="M265,328 L265,376" stroke="#2867b2" marker-start="url(#arrow-MEM)" style="opacity: 1;"><title>#17[2] → #14 · MEM</title></path><path class="edge MEM" id="e18i1" d="M113,328 L113,340 Q113,348 121,348 L491,348 Q499,348 499,356 L499,376" stroke="#2867b2" marker-start="url(#arrow-MEM)" style="opacity: 1;"><title>#18[1] → #9 · MEM</title></path><path class="edge MEM" id="e18i2" d="M674,328 L674,340 Q674,348 666,348 L537,348 Q529,348 529,356 L529,376" stroke="#2867b2" marker-start="url(#arrow-MEM)" style="opacity: 1;"><title>#18[2] → #16 · MEM</title></path><path class="edge MEM" id="e20i1" d="M265,328 L265,333 Q265,338 270,338 L626,338 Q634,338 634,346 L634,376" stroke="#2867b2" marker-start="url(#arrow-MEM)" style="opacity: 1;"><title>#20[1] → #14 · MEM</title></path><path class="edge MEM" id="e20i2" d="M674,328 L674,376" stroke="#2867b2" marker-start="url(#arrow-MEM)" style="opacity: 1;"><title>#20[2] → #16 · MEM</title></path><path class="edge MEM" id="e21i1" d="M235,432 L235,437 Q235,442 240,442 L436,442 Q444,442 444,450 L444,480" stroke="#2867b2" marker-start="url(#arrow-MEM)" style="opacity: 1;"><title>#21[1] → #17 · MEM</title></path><path class="edge MEM" id="e21i2" d="M499,432 L499,480" stroke="#2867b2" marker-start="url(#arrow-MEM)" style="opacity: 1;"><title>#21[2] → #18 · MEM</title></path><path class="edge MEM" id="e22i1" d="M472,536 L472,541 Q472,546 477,546 L616,546 Q624,546 624,554 L624,584" stroke="#2867b2" marker-start="url(#arrow-MEM)" style="opacity: 1;"><title>#22[1] → #21 · MEM</title></path><path class="edge MEM" id="e22i2" d="M654,432 L654,584" stroke="#2867b2" marker-start="url(#arrow-MEM)" style="opacity: 1;"><title>#22[2] → #20 · MEM</title></path><path class="edge MEM" id="e23i1" d="M624,640 L624,645 Q624,650 629,650 L794,650 Q802,650 802,658 L802,688" stroke="#2867b2" marker-start="url(#arrow-MEM)" style="opacity: 1;"><title>#23[1] → #22 · MEM</title></path><path class="edge DATA" id="e23i2" d="M431,118 L431,130 Q431,138 439,138 L824,138 Q832,138 832,146 L832,688" stroke="#536477" marker-start="url(#arrow-DATA)" style="opacity: 1;"><title>#23[2] → #5 · DATA</title></path></g><g class="edge-hits"/><g class="parser" style="opacity: 1;"/><g class="nodes"><g class="node" id="n1" data-id="1" transform="translate(24,24)" style="opacity: 1;"><path class="box" d="M0,0H120V44H0Z" fill="#fff1c4"/><text class="label" text-anchor="middle" x="60" y="18"><tspan>Start</tspan><tspan class="node-id"> #1</tspan></text><text class="type" text-anchor="middle" y="35" x="60"/><title>#1 Start -Type not computed - -</title></g><g class="node" id="n3" data-id="3" transform="translate(24,68)" style="opacity: 1;"><path class="box" d="M0,0H120V44H0Z" fill="#dcecff"/><text class="label" text-anchor="middle" x="60" y="18"><tspan>$mem</tspan><tspan class="node-id"> #3/1</tspan></text><text class="type" text-anchor="middle" y="35" x="60"/><title>#3 $mem -Projection 1 of #1 -Type not computed - -[0] → #1 MEM</title></g><g class="node" id="n5" data-id="5" transform="translate(371,68)" style="opacity: 1;"><path class="box" d="M14,0H106Q120,0 120,14V30Q120,44 106,44H14Q0,44 0,30V14Q0,0 14,0Z" fill="#edf3f7"/><text class="label" text-anchor="middle" x="60" y="18"><tspan>new Point</tspan><tspan class="node-id"> #5</tspan></text><text class="type" text-anchor="middle" y="35" x="60"/><title>#5 new Point -Type not computed - -[0] → — CTRL</title><circle class="port" cx="60" cy="-3" r="3" fill="white"/><text class="slot" x="60" y="-10" text-anchor="middle">0</text></g><g class="node" id="n6" data-id="6" transform="translate(219,68)" style="opacity: 1;"><path class="box" d="M14,0H106Q120,0 120,14V30Q120,44 106,44H14Q0,44 0,30V14Q0,0 14,0Z" fill="#edf3f7"/><text class="label" text-anchor="middle" x="60" y="18"><tspan>#0</tspan><tspan class="node-id"> #6</tspan></text><text class="type" text-anchor="middle" y="35" x="60"/><title>#6 #0 -Type not computed - -[0] → #1 ASSOC</title><circle class="port" cx="60" cy="-3" r="3" fill="#536477"/><text class="slot" x="60" y="-10" text-anchor="middle">0</text></g><g class="node" id="n7" data-id="7" transform="translate(301,172)" style="opacity: 1;"><path class="box" d="M10,0H110L120,10V34L110,44H10L0,34V10Z" fill="#dcecff"/><text class="label" text-anchor="middle" x="60" y="18"><tspan>Store p.x</tspan><tspan class="node-id"> #7</tspan></text><text class="type" text-anchor="middle" y="35" x="60">MEM#2</text><title>#7 Store p.x -MEM#2 - -[0] → — CTRL -[1] → #3 MEM -[2] → #5 DATA -[3] → #6 DATA</title><circle class="port" cx="24" cy="-3" r="3" fill="white"/><circle class="port" cx="48" cy="-3" r="3" fill="#536477"/><circle class="port" cx="72" cy="-3" r="3" fill="#536477"/><circle class="port" cx="96" cy="-3" r="3" fill="#536477"/><text class="slot" x="24" y="-10" text-anchor="middle">0</text><text class="slot" x="48" y="-10" text-anchor="middle">1</text><text class="slot" x="72" y="-10" text-anchor="middle">2</text><text class="slot" x="96" y="-10" text-anchor="middle">3</text></g><g class="node" id="n8" data-id="8" transform="translate(36,172)" style="opacity: 1;"><path class="box" d="M10,0H110L120,10V34L110,44H10L0,34V10Z" fill="#dcecff"/><text class="label" text-anchor="middle" x="60" y="18"><tspan>Store p.y</tspan><tspan class="node-id"> #8</tspan></text><text class="type" text-anchor="middle" y="35" x="60">MEM#3</text><title>#8 Store p.y -MEM#3 - -[0] → — CTRL -[1] → #3 MEM -[2] → #5 DATA -[3] → #6 DATA</title><circle class="port" cx="24" cy="-3" r="3" fill="white"/><circle class="port" cx="48" cy="-3" r="3" fill="#536477"/><circle class="port" cx="72" cy="-3" r="3" fill="#536477"/><circle class="port" cx="96" cy="-3" r="3" fill="#536477"/><text class="slot" x="24" y="-10" text-anchor="middle">0</text><text class="slot" x="48" y="-10" text-anchor="middle">1</text><text class="slot" x="72" y="-10" text-anchor="middle">2</text><text class="slot" x="96" y="-10" text-anchor="middle">3</text></g><g class="node" id="n9" data-id="9" transform="translate(53,278)" style="opacity: 1;"><path class="box" d="M10,0H110L120,10V34L110,44H10L0,34V10Z" fill="#dcecff"/><text class="label" text-anchor="middle" x="60" y="18"><tspan>MemMerge</tspan><tspan class="node-id"> #9</tspan></text><text class="type" text-anchor="middle" y="35" x="60"/><title>#9 MemMerge -Type not computed - -[0] → — CTRL -[1] → #3 MEM -[2] → #7 MEM -[3] → #8 MEM</title><circle class="port" cx="24" cy="-3" r="3" fill="white"/><circle class="port" cx="48" cy="-3" r="3" fill="#536477"/><circle class="port" cx="72" cy="-3" r="3" fill="#536477"/><circle class="port" cx="96" cy="-3" r="3" fill="#536477"/><text class="slot" x="24" y="-10" text-anchor="middle">0</text><text class="slot" x="48" y="-10" text-anchor="middle">1</text><text class="slot" x="72" y="-10" text-anchor="middle">2</text><text class="slot" x="96" y="-10" text-anchor="middle">3</text></g><g class="node" id="n11" data-id="11" transform="translate(188,190)" style="opacity: 1;"><path class="box" d="M0,0H81V26H0Z" fill="#fff1c4"/><text class="label" text-anchor="middle" x="40.5" y="17"><tspan>True</tspan><tspan class="node-id"> #11/0</tspan></text><text class="type" text-anchor="middle" y="35" x="40.5"/><title>#11 True -Projection 0 of #0 -Type not computed - -</title></g><g class="node" id="n12" data-id="12" transform="translate(594,190)" style="opacity: 1;"><path class="box" d="M0,0H87V26H0Z" fill="#fff1c4"/><text class="label" text-anchor="middle" x="43.5" y="17"><tspan>False</tspan><tspan class="node-id"> #12/1</tspan></text><text class="type" text-anchor="middle" y="35" x="43.5"/><title>#12 False -Projection 1 of #0 -Type not computed - -</title></g><g class="node" id="n13" data-id="13" transform="translate(442,172)" style="opacity: 1;"><path class="box" d="M14,0H106Q120,0 120,14V30Q120,44 106,44H14Q0,44 0,30V14Q0,0 14,0Z" fill="#edf3f7"/><text class="label" text-anchor="middle" x="60" y="18"><tspan>#3</tspan><tspan class="node-id"> #13</tspan></text><text class="type" text-anchor="middle" y="35" x="60"/><title>#13 #3 -Type not computed - -[0] → #1 ASSOC</title><circle class="port" cx="60" cy="-3" r="3" fill="#536477"/><text class="slot" x="60" y="-10" text-anchor="middle">0</text></g><g class="node" id="n14" data-id="14" transform="translate(205,278)" style="opacity: 1;"><path class="box" d="M10,0H110L120,10V34L110,44H10L0,34V10Z" fill="#dcecff"/><text class="label" text-anchor="middle" x="60" y="18"><tspan>Store p.x</tspan><tspan class="node-id"> #14</tspan></text><text class="type" text-anchor="middle" y="35" x="60">MEM#2</text><title>#14 Store p.x -MEM#2 - -[0] → #11 CTRL -[1] → #7 MEM -[2] → #5 DATA -[3] → #13 DATA</title><circle class="port" cx="24" cy="-3" r="3" fill="#536477"/><circle class="port" cx="48" cy="-3" r="3" fill="#536477"/><circle class="port" cx="72" cy="-3" r="3" fill="#536477"/><circle class="port" cx="96" cy="-3" r="3" fill="#536477"/><text class="slot" x="24" y="-10" text-anchor="middle">0</text><text class="slot" x="48" y="-10" text-anchor="middle">1</text><text class="slot" x="72" y="-10" text-anchor="middle">2</text><text class="slot" x="96" y="-10" text-anchor="middle">3</text></g><g class="node" id="n15" data-id="15" transform="translate(702,172)" style="opacity: 1;"><path class="box" d="M14,0H106Q120,0 120,14V30Q120,44 106,44H14Q0,44 0,30V14Q0,0 14,0Z" fill="#edf3f7"/><text class="label" text-anchor="middle" x="60" y="18"><tspan>#4</tspan><tspan class="node-id"> #15</tspan></text><text class="type" text-anchor="middle" y="35" x="60"/><title>#15 #4 -Type not computed - -[0] → #1 ASSOC</title><circle class="port" cx="60" cy="-3" r="3" fill="#536477"/><text class="slot" x="60" y="-10" text-anchor="middle">0</text></g><g class="node" id="n16" data-id="16" transform="translate(614,278)" style="opacity: 1;"><path class="box" d="M10,0H110L120,10V34L110,44H10L0,34V10Z" fill="#dcecff"/><text class="label" text-anchor="middle" x="60" y="18"><tspan>Store p.x</tspan><tspan class="node-id"> #16</tspan></text><text class="type" text-anchor="middle" y="35" x="60">MEM#2</text><title>#16 Store p.x -MEM#2 - -[0] → #12 CTRL -[1] → #7 MEM -[2] → #5 DATA -[3] → #15 DATA</title><circle class="port" cx="24" cy="-3" r="3" fill="#536477"/><circle class="port" cx="48" cy="-3" r="3" fill="#536477"/><circle class="port" cx="72" cy="-3" r="3" fill="#536477"/><circle class="port" cx="96" cy="-3" r="3" fill="#536477"/><text class="slot" x="24" y="-10" text-anchor="middle">0</text><text class="slot" x="48" y="-10" text-anchor="middle">1</text><text class="slot" x="72" y="-10" text-anchor="middle">2</text><text class="slot" x="96" y="-10" text-anchor="middle">3</text></g><g class="node" id="n17" data-id="17" transform="translate(175,382)" style="opacity: 1;"><path class="box" d="M10,0H110L120,10V34L110,44H10L0,34V10Z" fill="#dcecff"/><text class="label" text-anchor="middle" x="60" y="18"><tspan>MemMerge</tspan><tspan class="node-id"> #17</tspan></text><text class="type" text-anchor="middle" y="35" x="60"/><title>#17 MemMerge -Type not computed - -[0] → — CTRL -[1] → #9 MEM -[2] → #14 MEM</title><circle class="port" cx="30" cy="-3" r="3" fill="white"/><circle class="port" cx="60" cy="-3" r="3" fill="#536477"/><circle class="port" cx="90" cy="-3" r="3" fill="#536477"/><text class="slot" x="30" y="-10" text-anchor="middle">0</text><text class="slot" x="60" y="-10" text-anchor="middle">1</text><text class="slot" x="90" y="-10" text-anchor="middle">2</text></g><g class="node" id="n18" data-id="18" transform="translate(439,382)" style="opacity: 1;"><path class="box" d="M10,0H110L120,10V34L110,44H10L0,34V10Z" fill="#dcecff"/><text class="label" text-anchor="middle" x="60" y="18"><tspan>MemMerge</tspan><tspan class="node-id"> #18</tspan></text><text class="type" text-anchor="middle" y="35" x="60"/><title>#18 MemMerge -Type not computed - -[0] → — CTRL -[1] → #9 MEM -[2] → #16 MEM</title><circle class="port" cx="30" cy="-3" r="3" fill="white"/><circle class="port" cx="60" cy="-3" r="3" fill="#536477"/><circle class="port" cx="90" cy="-3" r="3" fill="#536477"/><text class="slot" x="30" y="-10" text-anchor="middle">0</text><text class="slot" x="60" y="-10" text-anchor="middle">1</text><text class="slot" x="90" y="-10" text-anchor="middle">2</text></g><g class="node" id="n20" data-id="20" transform="translate(594,382)" style="opacity: 1;"><path class="box" d="M12,0H108L120,22L108,44H12L0,22Z" fill="#f5e4fa"/><text class="label" text-anchor="middle" x="60" y="18"><tspan>MemPhi x</tspan><tspan class="node-id"> #20</tspan></text><text class="type" text-anchor="middle" y="35" x="60">MEM#2</text><title>#20 MemPhi x -MEM#2 - -[0] → — ASSOC -[1] → #14 MEM -[2] → #16 MEM</title><circle class="port" cx="0" cy="-3" r="3" fill="white"/><circle class="port" cx="40" cy="-3" r="3" fill="#536477"/><circle class="port" cx="80" cy="-3" r="3" fill="#536477"/><text class="slot" x="0" y="-10" text-anchor="middle">0</text><text class="slot" x="40" y="-10" text-anchor="middle">1</text><text class="slot" x="80" y="-10" text-anchor="middle">2</text></g><g class="node" id="n21" data-id="21" transform="translate(390,486)" style="opacity: 1;"><path class="box" d="M12,0H151L163,22L151,44H12L0,22Z" fill="#f5e4fa"/><text class="label" text-anchor="middle" x="81.5" y="18"><tspan>BulkMemPhi except x</tspan><tspan class="node-id"> #21</tspan></text><text class="type" text-anchor="middle" y="35" x="81.5"/><title>#21 BulkMemPhi except x -Type not computed - -[0] → — ASSOC -[1] → #17 MEM -[2] → #18 MEM</title><circle class="port" cx="0" cy="-3" r="3" fill="white"/><circle class="port" cx="54" cy="-3" r="3" fill="#536477"/><circle class="port" cx="109" cy="-3" r="3" fill="#536477"/><text class="slot" x="0" y="-10" text-anchor="middle">0</text><text class="slot" x="54" y="-10" text-anchor="middle">1</text><text class="slot" x="109" y="-10" text-anchor="middle">2</text></g><g class="node" id="n22" data-id="22" transform="translate(564,590)" style="opacity: 1;"><path class="box" d="M10,0H110L120,10V34L110,44H10L0,34V10Z" fill="#dcecff"/><text class="label" text-anchor="middle" x="60" y="18"><tspan>MemMerge</tspan><tspan class="node-id"> #22</tspan></text><text class="type" text-anchor="middle" y="35" x="60"/><title>#22 MemMerge -Type not computed - -[0] → — CTRL -[1] → #21 MEM -[2] → #20 MEM</title><circle class="port" cx="30" cy="-3" r="3" fill="white"/><circle class="port" cx="60" cy="-3" r="3" fill="#536477"/><circle class="port" cx="90" cy="-3" r="3" fill="#536477"/><text class="slot" x="30" y="-10" text-anchor="middle">0</text><text class="slot" x="60" y="-10" text-anchor="middle">1</text><text class="slot" x="90" y="-10" text-anchor="middle">2</text></g><g class="node" id="n23" data-id="23" transform="translate(742,694)" style="opacity: 1;"><path class="box" d="M0,0H120V44H0Z" fill="#fff1c4"/><text class="label" text-anchor="middle" x="60" y="18"><tspan>Return</tspan><tspan class="node-id"> #23</tspan></text><text class="type" text-anchor="middle" y="35" x="60"/><title>#23 Return -Type not computed - -[0] → — CTRL -[1] → #22 MEM -[2] → #5 DATA</title><circle class="port" cx="30" cy="-3" r="3" fill="white"/><circle class="port" cx="60" cy="-3" r="3" fill="#536477"/><circle class="port" cx="90" cy="-3" r="3" fill="#536477"/><text class="slot" x="30" y="-10" text-anchor="middle">0</text><text class="slot" x="60" y="-10" text-anchor="middle">1</text><text class="slot" x="90" y="-10" text-anchor="middle">2</text></g></g><g class="region-heads" style="opacity: 1;"/><g class="shortcuts" style="opacity: 1;"/><g class="peep-ghosts" pointer-events="none"/></g></svg> diff --git a/chapter10b/docs/example2c.gv b/chapter10b/docs/example2c.gv deleted file mode 100644 index b32d186d..00000000 --- a/chapter10b/docs/example2c.gv +++ /dev/null @@ -1,15 +0,0 @@ -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; - - M [label="Prior x 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"]; - Y [label="Store p.y: independent" shape=octagon style="filled" fillcolor="#dcecff"]; -} diff --git a/chapter10b/docs/example2c.json b/chapter10b/docs/example2c.json deleted file mode 100644 index 380815a2..00000000 --- a/chapter10b/docs/example2c.json +++ /dev/null @@ -1,23 +0,0 @@ -{ - "ver": 1, - "comp": "chapter10b/docs/example2c.svg", - "step": 1, - "roots": [13], - "scope": 0, - "nodes": [ - {"id": 1, "label": "Start", "type": null, "kind": "CTRL", "edges": [], "proj": null}, - {"id": 3, "label": "$mem", "type": null, "kind": "MEM", "edges": [{"idx": 0, "def": 1, "role": "MEM", "label": null}], "proj": {"par": 1, "idx": 1}}, - {"id": 4, "label": "arg", "type": null, "kind": "DATA", "edges": [{"idx": 0, "def": 1, "role": "DATA", "label": null}], "proj": {"par": 1, "idx": 2}}, - {"id": 5, "label": "new Point", "type": null, "kind": "DATA", "edges": [{"idx": 0, "def": 0, "role": "CTRL", "label": null}], "proj": null}, - {"id": 6, "label": "#0", "type": null, "kind": "DATA", "edges": [{"idx": 0, "def": 1, "role": "ASSOC", "label": null}], "proj": null}, - {"id": 7, "label": "Store p.x", "type": "MEM#2", "kind": "MEM", "edges": [{"idx": 0, "def": 0, "role": "CTRL", "label": null}, {"idx": 1, "def": 3, "role": "MEM", "label": null}, {"idx": 2, "def": 5, "role": "DATA", "label": null}, {"idx": 3, "def": 6, "role": "DATA", "label": null}], "proj": null}, - {"id": 8, "label": "Store p.y", "type": "MEM#3", "kind": "MEM", "edges": [{"idx": 0, "def": 0, "role": "CTRL", "label": null}, {"idx": 1, "def": 3, "role": "MEM", "label": null}, {"idx": 2, "def": 5, "role": "DATA", "label": null}, {"idx": 3, "def": 6, "role": "DATA", "label": null}], "proj": null}, - {"id": 9, "label": "Load p.x", "type": null, "kind": "DATA", "edges": [{"idx": 0, "def": 0, "role": "CTRL", "label": null}, {"idx": 1, "def": 7, "role": "MEM", "label": null}, {"idx": 2, "def": 5, "role": "DATA", "label": null}, {"idx": 3, "def": 0, "role": "DATA", "label": null}], "proj": null}, - {"id": 10, "label": "Store p.x", "type": "MEM#2", "kind": "MEM", "edges": [{"idx": 0, "def": 0, "role": "CTRL", "label": null}, {"idx": 1, "def": 7, "role": "MEM", "label": null}, {"idx": 2, "def": 5, "role": "DATA", "label": null}, {"idx": 3, "def": 4, "role": "DATA", "label": null}], "proj": null}, - {"id": 11, "label": "Store p.y", "type": "MEM#3", "kind": "MEM", "edges": [{"idx": 0, "def": 0, "role": "CTRL", "label": null}, {"idx": 1, "def": 8, "role": "MEM", "label": null}, {"idx": 2, "def": 5, "role": "DATA", "label": null}, {"idx": 3, "def": 4, "role": "DATA", "label": null}], "proj": null}, - {"id": 12, "label": "MemMerge", "type": null, "kind": "MEM", "edges": [{"idx": 0, "def": 0, "role": "CTRL", "label": null}, {"idx": 1, "def": 3, "role": "MEM", "label": null}, {"idx": 2, "def": 10, "role": "MEM", "label": null}, {"idx": 3, "def": 11, "role": "MEM", "label": null}], "proj": null}, - {"id": 13, "label": "Return", "type": null, "kind": "CTRL", "edges": [{"idx": 0, "def": 0, "role": "CTRL", "label": null}, {"idx": 1, "def": 12, "role": "MEM", "label": null}, {"idx": 2, "def": 9, "role": "DATA", "label": null}], "proj": null} - ], - "groups": [ - ] -} diff --git a/chapter10b/docs/example2c.svg b/chapter10b/docs/example2c.svg deleted file mode 100644 index 01bbe10a..00000000 --- a/chapter10b/docs/example2c.svg +++ /dev/null @@ -1,121 +0,0 @@ -<svg aria-label="Compiler graph" width="598" height="572" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 598 572" style="font-family: sans-serif;"><style> - html, body { height:100%; margin:0; font-family:sans-serif; } - .viewer { height:100%; display:grid; grid-template-rows:auto minmax(0,1fr) auto; } - .source { padding:8px; border-bottom:1px solid #ccc; } - #program { width:min(600px,80vw); vertical-align:middle; } - #status { margin-top:4px; } - #graph { min-height:0; overflow:hidden; position:relative; background:#fafbfc; } - #elk { width:100%; height:100%; } - #graph svg { display:block; } - .tools { display:flex; flex-wrap:wrap; align-items:center; gap:14px; margin-top:8px; font-size:12px; } - .hint { color:#616c78; } - .ctrl { color:#b63838; } .mem { color:#2867b2; } .data { color:#536477; } - .edge { fill:none; stroke-width:1.5; } - .edge.CTRL { stroke-width:2; } - .edge.ASSOC { stroke-dasharray:4 4; } - .edge.PARSER { stroke-dasharray:5 4; } - .parser rect { fill:#f6f0ff; stroke:#7956a5; stroke-width:1.5; stroke-dasharray:5 4; } - .edge.selected { stroke-width:3.5; } - .edge.bundle { stroke-width:4; } - .edge.bundle.selected { stroke-width:6; } - .edge-hit { fill:none; stroke:transparent; stroke-width:12; vector-effect:non-scaling-stroke; pointer-events:stroke; cursor:pointer; } - .edge-jump { fill:transparent; pointer-events:all; cursor:pointer; } - .node { cursor:pointer; } - .box { stroke:#758191; stroke-width:1; } - .node.held .box { stroke-dasharray:5 3; } - .node.near .box { stroke:#c18221; stroke-width:2; } - .node.focus .box { stroke:#9c4900; stroke-width:3; } - .node.selected .box { stroke:#1569b9; stroke-width:3; } - .node.folded .box { stroke-width:4; } - .node.folding .box { fill:#f4ccd7; } - .fold-tag { font-size:9px; font-weight:700; fill:#963751; } - .peep-area { fill:#fff3d9; fill-opacity:.8; stroke:#c18221; stroke-width:2; pointer-events:none; } - .node.peep-edit .box { stroke:#9c4900; stroke-width:3; } - .node.error .box { stroke:#b42318; stroke-width:4; } - #event.error { color:#b42318; font-weight:600; white-space:pre-wrap; overflow-wrap:anywhere; } - .peep-ghosts { pointer-events:none; } - .region-box { stroke:#9da9b8; stroke-width:1.5; } - .fold-btn { cursor:pointer; } - .fold-btn rect { fill:white; stroke:#596674; } - .fold-btn text { font-size:14px; fill:#152330; } - .fold-btn:focus rect { stroke:#1569b9; stroke-width:2; } - .shortcut { cursor:pointer; } - .shortcut path { fill:none; stroke-width:1.5; } - .shortcut rect { fill:#fff8ec; stroke:#b63838; stroke-dasharray:3 2; } - .shortcut text { font-size:11px; fill:#783030; } - .shortcut.selected rect, .shortcut:focus rect { stroke-width:2.5; } - .label { font-size:12px; fill:#152330; font-weight:600; } - .node-id { font-size:10px; fill:#596674; font-weight:400; } - .type { font-size:11px; fill:#455768; } - .port { stroke:#536477; stroke-width:1; } - .row { stroke:#b6afcf; stroke-width:1; } - .bind { font-size:12px; fill:#152330; } - .slot { font-size:10px; fill:#364352; paint-order:stroke; stroke:#fafbfc; stroke-width:3; } - #detail { position:absolute; top:8px; right:8px; margin:0; padding:12px; max-width:320px; - max-height:45%; overflow:auto; white-space:pre-wrap; overflow-wrap:anywhere; - background:#fffffff2; border:1px solid #bac5d0; border-radius:4px; font-size:12px; } - .controls { display:flex; flex-wrap:wrap; justify-content:center; align-items:center; gap:6px; padding:6px; } - .button { color:white; background:black; font-size:20px; min-width:30px; } - .button:disabled { background:grey; } - .count { font-size:20px; min-width:35px; text-align:center; } - #N { width:6ch; } - #scrub { width:clamp(120px,35vw,600px); } - </style><defs><marker id="arrow-CTRL" viewBox="0 -4 8 8" refX="8" refY="0" markerWidth="7" markerHeight="7" orient="auto-start-reverse"><path d="M0,-4L8,0L0,4Z" fill="#b63838"/></marker><marker id="arrow-DATA" viewBox="0 -4 8 8" refX="8" refY="0" markerWidth="7" markerHeight="7" orient="auto-start-reverse"><path d="M0,-4L8,0L0,4Z" fill="#536477"/></marker><marker id="arrow-MEM" viewBox="0 -4 8 8" refX="8" refY="0" markerWidth="7" markerHeight="7" orient="auto-start-reverse"><path d="M0,-4L8,0L0,4Z" fill="#2867b2"/></marker><marker id="arrow-ASSOC" viewBox="0 -4 8 8" refX="8" refY="0" markerWidth="7" markerHeight="7" orient="auto-start-reverse"><path d="M0,-4L8,0L0,4Z" fill="#9396a3"/></marker><marker id="arrow-PARSER" viewBox="0 -4 8 8" refX="8" refY="0" markerWidth="7" markerHeight="7" orient="auto-start-reverse"><path d="M0,-4L8,0L0,4Z" fill="#7956a5"/></marker></defs><rect width="100%" height="100%" fill="rgb(250, 251, 252)"/><g><g class="regions" style="opacity: 1;"/><rect class="peep-area" rx="36" style="opacity: 0;"/><g class="edges"><path class="edge ASSOC" id="e6i0" d="M267,46 C267,70 514,41 514,65" stroke="#9396a3" marker-start="url(#arrow-ASSOC)" style="opacity: 1;"><title>#6[0] → #1 · ASSOC</title></path><path class="edge MEM" id="e7i1" d="M84,118 L84,150 Q84,158 92,158 L181,158 Q186,158 186,163 L186,168" stroke="#2867b2" marker-start="url(#arrow-MEM)" style="opacity: 1;"><title>#7[1] → #3 · MEM</title></path><path class="edge DATA" id="e7i2" d="M362,118 L362,140 Q362,148 354,148 L218,148 Q210,148 210,156 L210,168" stroke="#536477" marker-start="url(#arrow-DATA)" style="opacity: 1;"><title>#7[2] → #5 · DATA</title></path><path class="edge DATA" id="e7i3" d="M514,118 L514,130 Q514,138 506,138 L242,138 Q234,138 234,146 L234,168" stroke="#536477" marker-start="url(#arrow-DATA)" style="opacity: 1;"><title>#7[3] → #6 · DATA</title></path><path class="edge MEM" id="e8i1" d="M84,118 L84,150 Q84,158 92,158 L333,158 Q338,158 338,163 L338,168" stroke="#2867b2" marker-start="url(#arrow-MEM)" style="opacity: 1;"><title>#8[1] → #3 · MEM</title></path><path class="edge DATA" id="e8i2" d="M362,118 L362,168" stroke="#536477" marker-start="url(#arrow-DATA)" style="opacity: 1;"><title>#8[2] → #5 · DATA</title></path><path class="edge DATA" id="e8i3" d="M514,118 L514,130 Q514,138 506,138 L394,138 Q386,138 386,146 L386,168" stroke="#536477" marker-start="url(#arrow-DATA)" style="opacity: 1;"><title>#8[3] → #6 · DATA</title></path><path class="edge MEM" id="e9i1" d="M198,224 L198,256 Q198,264 206,264 L439,264 Q447,264 447,272 L447,284" stroke="#2867b2" marker-start="url(#arrow-MEM)" style="opacity: 1;"><title>#9[1] → #7 · MEM</title></path><path class="edge DATA" id="e9i2" d="M362,118 L362,140 Q362,148 370,148 L463,148 Q471,148 471,156 L471,284" stroke="#536477" marker-start="url(#arrow-DATA)" style="opacity: 1;"><title>#9[2] → #5 · DATA</title></path><path class="edge MEM" id="e10i1" d="M198,224 L198,256 Q198,264 190,264 L151,264 Q143,264 143,272 L143,284" stroke="#2867b2" marker-start="url(#arrow-MEM)" style="opacity: 1;"><title>#10[1] → #7 · MEM</title></path><path class="edge DATA" id="e10i2" d="M362,118 L362,140 Q362,148 354,148 L124,148 Q116,148 116,156 L116,266 Q116,274 124,274 L162,274 Q167,274 167,279 L167,284" stroke="#536477" marker-start="url(#arrow-DATA)" style="opacity: 1;"><title>#10[2] → #5 · DATA</title></path><path class="edge DATA" id="e10i3" d="M204,118 L204,123 Q204,128 199,128 L135,128 Q127,128 127,136 L127,226 Q127,234 135,234 L183,234 Q191,234 191,242 L191,284" stroke="#536477" marker-start="url(#arrow-DATA)" style="opacity: 1;"><title>#10[3] → #4 · DATA</title></path><path class="edge MEM" id="e11i1" d="M350,224 L350,229 Q350,234 345,234 L303,234 Q295,234 295,242 L295,284" stroke="#2867b2" marker-start="url(#arrow-MEM)" style="opacity: 1;"><title>#11[1] → #8 · MEM</title></path><path class="edge DATA" id="e11i2" d="M362,118 L362,140 Q362,148 370,148 L412,148 Q420,148 420,156 L420,236 Q420,244 412,244 L327,244 Q319,244 319,252 L319,284" stroke="#536477" marker-start="url(#arrow-DATA)" style="opacity: 1;"><title>#11[2] → #5 · DATA</title></path><path class="edge DATA" id="e11i3" d="M204,118 L204,123 Q204,128 209,128 L423,128 Q431,128 431,136 L431,246 Q431,254 423,254 L351,254 Q343,254 343,262 L343,284" stroke="#536477" marker-start="url(#arrow-DATA)" style="opacity: 1;"><title>#11[3] → #4 · DATA</title></path><path class="edge MEM" id="e12i1" d="M84,118 L84,342 Q84,350 92,350 L123,350 Q131,350 131,358 L131,388" stroke="#2867b2" marker-start="url(#arrow-MEM)" style="opacity: 1;"><title>#12[1] → #3 · MEM</title></path><path class="edge MEM" id="e12i2" d="M155,340 L155,388" stroke="#2867b2" marker-start="url(#arrow-MEM)" style="opacity: 1;"><title>#12[2] → #10 · MEM</title></path><path class="edge MEM" id="e12i3" d="M307,340 L307,345 Q307,350 302,350 L187,350 Q179,350 179,358 L179,388" stroke="#2867b2" marker-start="url(#arrow-MEM)" style="opacity: 1;"><title>#12[3] → #11 · MEM</title></path><path class="edge MEM" id="e13i1" d="M143,444 L143,449 Q143,454 148,454 L421,454 Q429,454 429,462 L429,492" stroke="#2867b2" marker-start="url(#arrow-MEM)" style="opacity: 1;"><title>#13[1] → #12 · MEM</title></path><path class="edge DATA" id="e13i2" d="M459,340 L459,492" stroke="#536477" marker-start="url(#arrow-DATA)" style="opacity: 1;"><title>#13[2] → #9 · DATA</title></path></g><g class="edge-hits"/><g class="parser" style="opacity: 1;"/><g class="nodes"><g class="node" id="n1" data-id="1" transform="translate(24,24)" style="opacity: 1;"><path class="box" d="M0,0H240V44H0Z" fill="#fff1c4"/><text class="label" text-anchor="middle" x="120" y="18"><tspan>Start</tspan><tspan class="node-id"> #1</tspan></text><text class="type" text-anchor="middle" y="35" x="120"/><title>#1 Start -Type not computed - -</title></g><g class="node" id="n3" data-id="3" transform="translate(24,68)" style="opacity: 1;"><path class="box" d="M0,0H120V44H0Z" fill="#dcecff"/><text class="label" text-anchor="middle" x="60" y="18"><tspan>$mem</tspan><tspan class="node-id"> #3/1</tspan></text><text class="type" text-anchor="middle" y="35" x="60"/><title>#3 $mem -Projection 1 of #1 -Type not computed - -[0] → #1 MEM</title></g><g class="node" id="n4" data-id="4" transform="translate(144,68)" style="opacity: 1;"><path class="box" d="M0,0H120V44H0Z" fill="#edf3f7"/><text class="label" text-anchor="middle" x="60" y="18"><tspan>arg</tspan><tspan class="node-id"> #4/2</tspan></text><text class="type" text-anchor="middle" y="35" x="60"/><title>#4 arg -Projection 2 of #1 -Type not computed - -[0] → #1 DATA</title></g><g class="node" id="n5" data-id="5" transform="translate(302,68)" style="opacity: 1;"><path class="box" d="M14,0H106Q120,0 120,14V30Q120,44 106,44H14Q0,44 0,30V14Q0,0 14,0Z" fill="#edf3f7"/><text class="label" text-anchor="middle" x="60" y="18"><tspan>new Point</tspan><tspan class="node-id"> #5</tspan></text><text class="type" text-anchor="middle" y="35" x="60"/><title>#5 new Point -Type not computed - -[0] → — CTRL</title><circle class="port" cx="60" cy="-3" r="3" fill="white"/><text class="slot" x="60" y="-10" text-anchor="middle">0</text></g><g class="node" id="n6" data-id="6" transform="translate(454,68)" style="opacity: 1;"><path class="box" d="M14,0H106Q120,0 120,14V30Q120,44 106,44H14Q0,44 0,30V14Q0,0 14,0Z" fill="#edf3f7"/><text class="label" text-anchor="middle" x="60" y="18"><tspan>#0</tspan><tspan class="node-id"> #6</tspan></text><text class="type" text-anchor="middle" y="35" x="60"/><title>#6 #0 -Type not computed - -[0] → #1 ASSOC</title><circle class="port" cx="60" cy="-3" r="3" fill="#536477"/><text class="slot" x="60" y="-10" text-anchor="middle">0</text></g><g class="node" id="n7" data-id="7" transform="translate(138,174)" style="opacity: 1;"><path class="box" d="M10,0H110L120,10V34L110,44H10L0,34V10Z" fill="#dcecff"/><text class="label" text-anchor="middle" x="60" y="18"><tspan>Store p.x</tspan><tspan class="node-id"> #7</tspan></text><text class="type" text-anchor="middle" y="35" x="60">MEM#2</text><title>#7 Store p.x -MEM#2 - -[0] → — CTRL -[1] → #3 MEM -[2] → #5 DATA -[3] → #6 DATA</title><circle class="port" cx="24" cy="-3" r="3" fill="white"/><circle class="port" cx="48" cy="-3" r="3" fill="#536477"/><circle class="port" cx="72" cy="-3" r="3" fill="#536477"/><circle class="port" cx="96" cy="-3" r="3" fill="#536477"/><text class="slot" x="24" y="-10" text-anchor="middle">0</text><text class="slot" x="48" y="-10" text-anchor="middle">1</text><text class="slot" x="72" y="-10" text-anchor="middle">2</text><text class="slot" x="96" y="-10" text-anchor="middle">3</text></g><g class="node" id="n8" data-id="8" transform="translate(290,174)" style="opacity: 1;"><path class="box" d="M10,0H110L120,10V34L110,44H10L0,34V10Z" fill="#dcecff"/><text class="label" text-anchor="middle" x="60" y="18"><tspan>Store p.y</tspan><tspan class="node-id"> #8</tspan></text><text class="type" text-anchor="middle" y="35" x="60">MEM#3</text><title>#8 Store p.y -MEM#3 - -[0] → — CTRL -[1] → #3 MEM -[2] → #5 DATA -[3] → #6 DATA</title><circle class="port" cx="24" cy="-3" r="3" fill="white"/><circle class="port" cx="48" cy="-3" r="3" fill="#536477"/><circle class="port" cx="72" cy="-3" r="3" fill="#536477"/><circle class="port" cx="96" cy="-3" r="3" fill="#536477"/><text class="slot" x="24" y="-10" text-anchor="middle">0</text><text class="slot" x="48" y="-10" text-anchor="middle">1</text><text class="slot" x="72" y="-10" text-anchor="middle">2</text><text class="slot" x="96" y="-10" text-anchor="middle">3</text></g><g class="node" id="n9" data-id="9" transform="translate(399,290)" style="opacity: 1;"><path class="box" d="M14,0H106Q120,0 120,14V30Q120,44 106,44H14Q0,44 0,30V14Q0,0 14,0Z" fill="#edf3f7"/><text class="label" text-anchor="middle" x="60" y="18"><tspan>Load p.x</tspan><tspan class="node-id"> #9</tspan></text><text class="type" text-anchor="middle" y="35" x="60"/><title>#9 Load p.x -Type not computed - -[0] → — CTRL -[1] → #7 MEM -[2] → #5 DATA -[3] → — DATA</title><circle class="port" cx="24" cy="-3" r="3" fill="white"/><circle class="port" cx="48" cy="-3" r="3" fill="#536477"/><circle class="port" cx="72" cy="-3" r="3" fill="#536477"/><circle class="port" cx="96" cy="-3" r="3" fill="white"/><text class="slot" x="24" y="-10" text-anchor="middle">0</text><text class="slot" x="48" y="-10" text-anchor="middle">1</text><text class="slot" x="72" y="-10" text-anchor="middle">2</text><text class="slot" x="96" y="-10" text-anchor="middle">3</text></g><g class="node" id="n10" data-id="10" transform="translate(95,290)" style="opacity: 1;"><path class="box" d="M10,0H110L120,10V34L110,44H10L0,34V10Z" fill="#dcecff"/><text class="label" text-anchor="middle" x="60" y="18"><tspan>Store p.x</tspan><tspan class="node-id"> #10</tspan></text><text class="type" text-anchor="middle" y="35" x="60">MEM#2</text><title>#10 Store p.x -MEM#2 - -[0] → — CTRL -[1] → #7 MEM -[2] → #5 DATA -[3] → #4 DATA</title><circle class="port" cx="24" cy="-3" r="3" fill="white"/><circle class="port" cx="48" cy="-3" r="3" fill="#536477"/><circle class="port" cx="72" cy="-3" r="3" fill="#536477"/><circle class="port" cx="96" cy="-3" r="3" fill="#536477"/><text class="slot" x="24" y="-10" text-anchor="middle">0</text><text class="slot" x="48" y="-10" text-anchor="middle">1</text><text class="slot" x="72" y="-10" text-anchor="middle">2</text><text class="slot" x="96" y="-10" text-anchor="middle">3</text></g><g class="node" id="n11" data-id="11" transform="translate(247,290)" style="opacity: 1;"><path class="box" d="M10,0H110L120,10V34L110,44H10L0,34V10Z" fill="#dcecff"/><text class="label" text-anchor="middle" x="60" y="18"><tspan>Store p.y</tspan><tspan class="node-id"> #11</tspan></text><text class="type" text-anchor="middle" y="35" x="60">MEM#3</text><title>#11 Store p.y -MEM#3 - -[0] → — CTRL -[1] → #8 MEM -[2] → #5 DATA -[3] → #4 DATA</title><circle class="port" cx="24" cy="-3" r="3" fill="white"/><circle class="port" cx="48" cy="-3" r="3" fill="#536477"/><circle class="port" cx="72" cy="-3" r="3" fill="#536477"/><circle class="port" cx="96" cy="-3" r="3" fill="#536477"/><text class="slot" x="24" y="-10" text-anchor="middle">0</text><text class="slot" x="48" y="-10" text-anchor="middle">1</text><text class="slot" x="72" y="-10" text-anchor="middle">2</text><text class="slot" x="96" y="-10" text-anchor="middle">3</text></g><g class="node" id="n12" data-id="12" transform="translate(83,394)" style="opacity: 1;"><path class="box" d="M10,0H110L120,10V34L110,44H10L0,34V10Z" fill="#dcecff"/><text class="label" text-anchor="middle" x="60" y="18"><tspan>MemMerge</tspan><tspan class="node-id"> #12</tspan></text><text class="type" text-anchor="middle" y="35" x="60"/><title>#12 MemMerge -Type not computed - -[0] → — CTRL -[1] → #3 MEM -[2] → #10 MEM -[3] → #11 MEM</title><circle class="port" cx="24" cy="-3" r="3" fill="white"/><circle class="port" cx="48" cy="-3" r="3" fill="#536477"/><circle class="port" cx="72" cy="-3" r="3" fill="#536477"/><circle class="port" cx="96" cy="-3" r="3" fill="#536477"/><text class="slot" x="24" y="-10" text-anchor="middle">0</text><text class="slot" x="48" y="-10" text-anchor="middle">1</text><text class="slot" x="72" y="-10" text-anchor="middle">2</text><text class="slot" x="96" y="-10" text-anchor="middle">3</text></g><g class="node" id="n13" data-id="13" transform="translate(369,498)" style="opacity: 1;"><path class="box" d="M0,0H120V44H0Z" fill="#fff1c4"/><text class="label" text-anchor="middle" x="60" y="18"><tspan>Return</tspan><tspan class="node-id"> #13</tspan></text><text class="type" text-anchor="middle" y="35" x="60"/><title>#13 Return -Type not computed - -[0] → — CTRL -[1] → #12 MEM -[2] → #9 DATA</title><circle class="port" cx="30" cy="-3" r="3" fill="white"/><circle class="port" cx="60" cy="-3" r="3" fill="#536477"/><circle class="port" cx="90" cy="-3" r="3" fill="#536477"/><text class="slot" x="30" y="-10" text-anchor="middle">0</text><text class="slot" x="60" y="-10" text-anchor="middle">1</text><text class="slot" x="90" y="-10" text-anchor="middle">2</text></g></g><g class="region-heads" style="opacity: 1;"/><g class="shortcuts" style="opacity: 1;"/><g class="peep-ghosts" pointer-events="none"/></g></svg> diff --git a/chapter10b/docs/lattice.gv b/chapter10b/docs/lattice.gv deleted file mode 100644 index 93d99dd8..00000000 --- a/chapter10b/docs/lattice.gv +++ /dev/null @@ -1,133 +0,0 @@ -digraph Lattice { - rankdir=TB; - newrank=true; - // Preserve the same-rank ordering edges through cluster layout. - remincross=false; - nodesep=0.22; - ranksep=0.65; - node [shape=ellipse, style=filled, fontname="DejaVu Sans", fontsize=13]; - edge [color="#555555", arrowsize=0.6]; - - // These arrows are lattice-order edges, not use/definition edges. - TOP [label="⊤", fillcolor=black, fontcolor=white]; - BOT [label="⊥", fillcolor=black, fontcolor=white]; - - subgraph cluster_control { - label="Control"; fontname="Arial"; color="#cccccc"; - node [fillcolor="#ffff00"]; - XCTRL [label="⊤:ctrl"]; - CTRL [label="⊥:ctrl"]; - XCTRL -> CTRL; - } - - subgraph cluster_integer { - label="Integer"; fontname="Arial"; color="#cccccc"; - node [fillcolor="#add8e6"]; - INT_TOP [label="⊤:int"]; - INT_BOT [label="⊥:int"]; - INT_NEG [label="… −2, −1"]; - INT_ZERO [label="0"]; - INT_POS [label="1, 2, …"]; - {rank=same; INT_NEG; INT_ZERO; INT_POS;} - INT_NEG -> INT_ZERO -> INT_POS [style=invis]; - INT_TOP -> {INT_NEG INT_ZERO INT_POS}; - {INT_NEG INT_ZERO INT_POS} -> INT_BOT; - } - - subgraph cluster_pointer { - label="Pointer = nullability × struct type"; - fontname="Arial"; color="#cccccc"; - node [fillcolor="#008000", fontcolor=white]; - PTR_TOP [label="⊤:ptr\n[*⊤:struct]"]; - PTR_BOT [label="⊥:ptr\n[*⊥:struct?]"]; - PTR_NULL [label="null"]; - PTR_ANY [label="*⊥:struct\n[ptr any struct]"]; - PTR_PERSON [label="*Person"]; - PTR_S1 [label="*s1"]; - PTR_MORE [label="*s2, …"]; - PTR_PERSON_NIL [label="*Person?"]; - PTR_S1_NIL [label="*s1?"]; - PTR_MORE_NIL [label="*s2?, …"]; - {rank=same; PTR_PERSON; PTR_S1; PTR_MORE; PTR_NULL;} - {rank=same; PTR_ANY; PTR_PERSON_NIL; PTR_S1_NIL; PTR_MORE_NIL;} - PTR_PERSON -> PTR_S1 -> PTR_MORE -> PTR_NULL [style=invis]; - PTR_ANY -> PTR_PERSON_NIL -> PTR_S1_NIL -> PTR_MORE_NIL [style=invis]; - PTR_TOP -> {PTR_PERSON PTR_S1 PTR_MORE PTR_NULL}; - {PTR_PERSON PTR_S1 PTR_MORE} -> PTR_ANY; - PTR_PERSON -> PTR_PERSON_NIL; - PTR_S1 -> PTR_S1_NIL; - PTR_MORE -> PTR_MORE_NIL; - PTR_NULL -> {PTR_PERSON_NIL PTR_S1_NIL PTR_MORE_NIL}; - {PTR_ANY PTR_PERSON_NIL PTR_S1_NIL PTR_MORE_NIL} -> PTR_BOT; - } - - subgraph cluster_struct { - label="Struct\nnamed collection of named scalar types"; - fontname="Arial"; color="#cccccc"; - node [fillcolor="#90ee90"]; - STRUCT_TOP [label="⊤:struct\n[struct top]"]; - 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: 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]; - STRUCT_TOP -> {STRUCT_PERSON STRUCT_S1 STRUCT_S2 STRUCT_MORE}; - {STRUCT_PERSON STRUCT_S1 STRUCT_S2 STRUCT_MORE} -> STRUCT_BOT; - } - - subgraph cluster_memory { - label="Memory\nprecise alias slices"; fontname="Arial"; color="#cccccc"; - node [fillcolor="#00008b", fontcolor=white]; - MEM_TOP [label="⊤:mem"]; - MEM_BOT [label="⊥:mem"]; - MEM_ALIAS2 [label="MEM#2"]; - MEM_ALIAS3 [label="MEM#3"]; - MEM_MORE [label="…"]; - {rank=same; MEM_ALIAS2; MEM_ALIAS3; MEM_MORE;} - MEM_ALIAS2 -> MEM_ALIAS3 -> MEM_MORE [style=invis]; - MEM_TOP -> {MEM_ALIAS2 MEM_ALIAS3 MEM_MORE}; - {MEM_ALIAS2 MEM_ALIAS3 MEM_MORE} -> MEM_BOT; - } - - subgraph cluster_tuple { - label="Tuple\ncollection of types"; - fontname="Arial"; color="#cccccc"; - node [fillcolor="#ffc0cb"]; - TUPLE_TOP [label="⊤:tuple"]; - TUPLE_BOT [label="⊥:tuple"]; - // Each black element stands for a recursively nested type lattice. - TUPLE1 [shape=plain, label=< - <TABLE BORDER="0" CELLBORDER="1" CELLSPACING="0" CELLPADDING="4"> - <TR><TD BGCOLOR="#ffc0cb">tuple</TD></TR> - <TR><TD BGCOLOR="black"><FONT COLOR="white">type</FONT></TD></TR> - </TABLE> - >]; - TUPLE2 [shape=plain, label=< - <TABLE BORDER="0" CELLBORDER="1" CELLSPACING="0" CELLPADDING="4"> - <TR><TD BGCOLOR="#ffc0cb">tuple</TD></TR> - <TR><TD BGCOLOR="black"><FONT COLOR="white">type</FONT></TD></TR> - <TR><TD BGCOLOR="black"><FONT COLOR="white">type</FONT></TD></TR> - </TABLE> - >]; - TUPLEN [shape=plain, label=< - <TABLE BORDER="0" CELLBORDER="1" CELLSPACING="0" CELLPADDING="4"> - <TR><TD BGCOLOR="#ffc0cb">tuple</TD></TR> - <TR><TD BGCOLOR="black"><FONT COLOR="white">type</FONT></TD></TR> - <TR><TD BGCOLOR="black"><FONT COLOR="white">…</FONT></TD></TR> - <TR><TD BGCOLOR="black"><FONT COLOR="white">type</FONT></TD></TR> - </TABLE> - >]; - {rank=same; TUPLE1; TUPLE2; TUPLEN;} - TUPLE1 -> TUPLE2 -> TUPLEN [style=invis]; - TUPLE_TOP -> {TUPLE1 TUPLE2 TUPLEN}; - {TUPLE1 TUPLE2 TUPLEN} -> TUPLE_BOT; - } - - TOP -> {XCTRL INT_TOP PTR_TOP STRUCT_TOP MEM_TOP TUPLE_TOP}; - {CTRL INT_BOT PTR_BOT STRUCT_BOT MEM_BOT TUPLE_BOT} -> BOT; - {rank=same; XCTRL; INT_TOP; PTR_TOP; STRUCT_TOP; MEM_TOP; TUPLE_TOP;} - {rank=same; CTRL; INT_BOT; PTR_BOT; STRUCT_BOT; MEM_BOT; TUPLE_BOT;} - XCTRL -> INT_TOP -> PTR_TOP -> STRUCT_TOP -> MEM_TOP -> TUPLE_TOP [style=invis]; -} diff --git a/chapter10b/docs/lattice.svg b/chapter10b/docs/lattice.svg deleted file mode 100644 index 8d2e2875..00000000 --- a/chapter10b/docs/lattice.svg +++ /dev/null @@ -1,644 +0,0 @@ -<?xml version="1.0" encoding="UTF-8" standalone="no"?> -<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" - "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd"> -<!-- Generated by graphviz version 12.2.0 (20241103.1931) - --> -<!-- Title: Lattice Pages: 1 --> -<svg width="1727pt" height="603pt" - viewBox="0.00 0.00 1727.00 603.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 599.45)"> -<title>Lattice</title> -<polygon fill="white" stroke="none" points="-4,4 -4,-599.45 1723,-599.45 1723,4 -4,4"/> -<g id="clust1" class="cluster"> -<title>cluster_control</title> -<polygon fill="none" stroke="#cccccc" points="8,-85.99 8,-524.71 98,-524.71 98,-85.99 8,-85.99"/> -<text text-anchor="middle" x="53" y="-507.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,-524.71 404,-524.71 404,-85.99 106,-85.99"/> -<text text-anchor="middle" x="255" y="-507.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,-535.7 893,-535.7 893,-75 412,-75"/> -<text text-anchor="middle" x="652.5" y="-518.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,-551.45 1233,-551.45 1233,-75 901,-75"/> -<text text-anchor="middle" x="1067" y="-534.15" font-family="Arial" font-size="14.00">Struct</text> -<text text-anchor="middle" x="1067" y="-518.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,-540.46 1523,-540.46 1523,-85.99 1241,-85.99"/> -<text text-anchor="middle" x="1382" y="-523.16" font-family="Arial" font-size="14.00">Memory</text> -<text text-anchor="middle" x="1382" y="-507.41" font-family="Arial" font-size="14.00">precise alias slices</text> -</g> -<g id="clust21" class="cluster"> -<title>cluster_tuple</title> -<polygon fill="none" stroke="#cccccc" points="1531,-85.99 1531,-540.46 1711,-540.46 1711,-85.99 1531,-85.99"/> -<text text-anchor="middle" x="1621" y="-523.16" font-family="Arial" font-size="14.00">Tuple</text> -<text text-anchor="middle" x="1621" y="-507.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="887" cy="-577.45" rx="27" ry="18"/> -<text text-anchor="middle" x="887" y="-573.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="-474.96" rx="36.51" ry="18"/> -<text text-anchor="middle" x="53" y="-470.86" font-family="DejaVu Sans" font-size="13.00">⊤:ctrl</text> -</g> -<!-- TOP->XCTRL --> -<g id="edge60" class="edge"> -<title>TOP->XCTRL</title> -<path fill="none" stroke="#555555" d="M859.92,-576.29C725.56,-575.4 135.66,-570.43 102,-551.45 82.17,-540.27 69.05,-517.37 61.41,-499.71"/> -<polygon fill="#555555" stroke="#555555" points="63.45,-499.15 59.23,-494.39 59.57,-500.74 63.45,-499.15"/> -</g> -<!-- INT_TOP --> -<g id="node5" class="node"> -<title>INT_TOP</title> -<ellipse fill="#add8e6" stroke="black" cx="353" cy="-474.96" rx="33.44" ry="18"/> -<text text-anchor="middle" x="353" y="-470.86" font-family="DejaVu Sans" font-size="13.00">⊤:int</text> -</g> -<!-- TOP->INT_TOP --> -<g id="edge61" class="edge"> -<title>TOP->INT_TOP</title> -<path fill="none" stroke="#555555" d="M859.8,-576.38C764.27,-575.97 447.72,-572.97 408,-551.45 387.23,-540.19 372.29,-517.31 363.27,-499.67"/> -<polygon fill="#555555" stroke="#555555" points="365.18,-498.79 360.66,-494.32 361.41,-500.63 365.18,-498.79"/> -</g> -<!-- PTR_TOP --> -<g id="node10" class="node"> -<title>PTR_TOP</title> -<ellipse fill="#008000" stroke="black" cx="715" cy="-474.96" rx="61.7" ry="28.99"/> -<text text-anchor="middle" x="715" y="-479.11" font-family="DejaVu Sans" font-size="13.00" fill="white">⊤:ptr</text> -<text text-anchor="middle" x="715" y="-462.61" font-family="DejaVu Sans" font-size="13.00" fill="white">[*⊤:struct]</text> -</g> -<!-- TOP->PTR_TOP --> -<g id="edge62" class="edge"> -<title>TOP->PTR_TOP</title> -<path fill="none" stroke="#555555" d="M867.27,-564.92C841.1,-549.63 794.17,-522.21 759.3,-501.84"/> -<polygon fill="#555555" stroke="#555555" points="760.48,-500.1 754.24,-498.88 758.36,-503.72 760.48,-500.1"/> -</g> -<!-- STRUCT_TOP --> -<g id="node20" class="node"> -<title>STRUCT_TOP</title> -<ellipse fill="#90ee90" stroke="black" cx="1020" cy="-474.96" rx="64.35" ry="28.99"/> -<text text-anchor="middle" x="1020" y="-479.11" font-family="DejaVu Sans" font-size="13.00">⊤:struct</text> -<text text-anchor="middle" x="1020" y="-462.61" font-family="DejaVu Sans" font-size="13.00">[struct top]</text> -</g> -<!-- TOP->STRUCT_TOP --> -<g id="edge63" class="edge"> -<title>TOP->STRUCT_TOP</title> -<path fill="none" stroke="#555555" d="M904.39,-563.31C923.88,-548.58 956.09,-524.25 981.56,-505"/> -<polygon fill="#555555" stroke="#555555" points="982.82,-506.68 986.34,-501.39 980.29,-503.33 982.82,-506.68"/> -</g> -<!-- MEM_TOP --> -<g id="node26" class="node"> -<title>MEM_TOP</title> -<ellipse fill="#00008b" stroke="black" cx="1347" cy="-474.96" rx="44.7" ry="18"/> -<text text-anchor="middle" x="1347" y="-470.86" font-family="DejaVu Sans" font-size="13.00" fill="white">⊤:mem</text> -</g> -<!-- TOP->MEM_TOP --> -<g id="edge64" class="edge"> -<title>TOP->MEM_TOP</title> -<path fill="none" stroke="#555555" d="M914.28,-576.34C985.84,-575.75 1177.55,-572.23 1237,-551.45 1270.57,-539.71 1303.45,-514.89 1324.38,-496.91"/> -<polygon fill="#555555" stroke="#555555" points="1325.69,-498.56 1328.82,-493.03 1322.92,-495.39 1325.69,-498.56"/> -</g> -<!-- TUPLE_TOP --> -<g id="node31" class="node"> -<title>TUPLE_TOP</title> -<ellipse fill="#ffc0cb" stroke="black" cx="1584" cy="-474.96" rx="44.7" ry="18"/> -<text text-anchor="middle" x="1584" y="-470.86" font-family="DejaVu Sans" font-size="13.00">⊤:tuple</text> -</g> -<!-- TOP->TUPLE_TOP --> -<g id="edge65" class="edge"> -<title>TOP->TUPLE_TOP</title> -<path fill="none" stroke="#555555" d="M914.19,-576.75C1029.19,-577.83 1472.18,-580.1 1527,-551.45 1548.39,-540.27 1564,-517.05 1573.43,-499.3"/> -<polygon fill="#555555" stroke="#555555" points="1575.08,-500.68 1575.93,-494.38 1571.33,-498.78 1575.08,-500.68"/> -</g> -<!-- BOT --> -<g id="node2" class="node"> -<title>BOT</title> -<ellipse fill="black" stroke="black" cx="884" cy="-18" rx="27" ry="18"/> -<text text-anchor="middle" x="884" y="-13.9" font-family="DejaVu Sans" font-size="13.00" fill="white">⊥</text> -</g> -<!-- CTRL --> -<g id="node4" class="node"> -<title>CTRL</title> -<ellipse fill="#ffff00" stroke="black" cx="53" cy="-111.99" rx="36.51" ry="18"/> -<text text-anchor="middle" x="53" y="-107.89" font-family="DejaVu Sans" font-size="13.00">⊥:ctrl</text> -</g> -<!-- XCTRL->CTRL --> -<g id="edge1" class="edge"> -<title>XCTRL->CTRL</title> -<path fill="none" stroke="#555555" d="M53,-456.55C53,-397.7 53,-206.04 53,-137.58"/> -<polygon fill="#555555" stroke="#555555" points="55.1,-137.74 53,-131.74 50.9,-137.74 55.1,-137.74"/> -</g> -<!-- XCTRL->INT_TOP --> -<!-- CTRL->BOT --> -<g id="edge66" class="edge"> -<title>CTRL->BOT</title> -<path fill="none" stroke="#555555" d="M69.29,-95.39C78.22,-87.83 89.91,-79.45 102,-75 242.26,-23.4 717.31,-19.12 849.57,-18.95"/> -<polygon fill="#555555" stroke="#555555" points="849.19,-21.05 855.19,-18.94 849.18,-16.85 849.19,-21.05"/> -</g> -<!-- INT_NEG --> -<g id="node7" class="node"> -<title>INT_NEG</title> -<ellipse fill="#add8e6" stroke="black" cx="169" cy="-345.97" rx="55.45" ry="18"/> -<text text-anchor="middle" x="169" y="-341.87" font-family="DejaVu Sans" font-size="13.00">… −2, −1</text> -</g> -<!-- INT_TOP->INT_NEG --> -<g id="edge4" class="edge"> -<title>INT_TOP->INT_NEG</title> -<path fill="none" stroke="#555555" d="M330.56,-461.28C305.82,-447.02 265.13,-422.74 232,-398.97 218.63,-389.37 204.44,-377.8 192.92,-368"/> -<polygon fill="#555555" stroke="#555555" points="194.57,-366.65 188.64,-364.34 191.83,-369.84 194.57,-366.65"/> -</g> -<!-- INT_ZERO --> -<g id="node8" class="node"> -<title>INT_ZERO</title> -<ellipse fill="#add8e6" stroke="black" cx="267" cy="-345.97" rx="27" ry="18"/> -<text text-anchor="middle" x="267" y="-341.87" font-family="DejaVu Sans" font-size="13.00">0</text> -</g> -<!-- INT_TOP->INT_ZERO --> -<g id="edge5" class="edge"> -<title>INT_TOP->INT_ZERO</title> -<path fill="none" stroke="#555555" d="M341.83,-457.59C331.49,-442.41 315.68,-419.18 302,-398.97 295.36,-389.15 288.04,-378.28 281.81,-369.03"/> -<polygon fill="#555555" stroke="#555555" points="283.64,-367.97 278.55,-364.17 280.15,-370.32 283.64,-367.97"/> -</g> -<!-- INT_POS --> -<g id="node9" class="node"> -<title>INT_POS</title> -<ellipse fill="#add8e6" stroke="black" cx="353" cy="-345.97" rx="43.16" ry="18"/> -<text text-anchor="middle" x="353" y="-341.87" font-family="DejaVu Sans" font-size="13.00">1, 2, …</text> -</g> -<!-- INT_TOP->INT_POS --> -<g id="edge6" class="edge"> -<title>INT_TOP->INT_POS</title> -<path fill="none" stroke="#555555" d="M353,-456.57C353,-434.53 353,-396.41 353,-371.44"/> -<polygon fill="#555555" stroke="#555555" points="355.1,-371.66 353,-365.66 350.9,-371.66 355.1,-371.66"/> -</g> -<!-- INT_TOP->PTR_TOP --> -<!-- INT_BOT --> -<g id="node6" class="node"> -<title>INT_BOT</title> -<ellipse fill="#add8e6" stroke="black" cx="289" cy="-111.99" rx="33.44" ry="18"/> -<text text-anchor="middle" x="289" y="-107.89" font-family="DejaVu Sans" font-size="13.00">⊥:int</text> -</g> -<!-- INT_BOT->BOT --> -<g id="edge67" class="edge"> -<title>INT_BOT->BOT</title> -<path fill="none" stroke="#555555" d="M316.06,-101.31C339.95,-93.13 375.88,-81.69 408,-75 571.35,-40.97 770.86,-25.89 849.65,-20.95"/> -<polygon fill="#555555" stroke="#555555" points="849.52,-23.07 855.38,-20.6 849.26,-18.87 849.52,-23.07"/> -</g> -<!-- INT_NEG->INT_BOT --> -<g id="edge7" class="edge"> -<title>INT_NEG->INT_BOT</title> -<path fill="none" stroke="#555555" d="M177.82,-327.91C199.03,-286.92 252.87,-182.84 276.99,-136.21"/> -<polygon fill="#555555" stroke="#555555" points="278.74,-137.4 279.63,-131.11 275.01,-135.47 278.74,-137.4"/> -</g> -<!-- INT_NEG->INT_ZERO --> -<!-- INT_ZERO->INT_BOT --> -<g id="edge8" class="edge"> -<title>INT_ZERO->INT_BOT</title> -<path fill="none" stroke="#555555" d="M268.65,-327.53C272.53,-286.71 282.19,-184.82 286.66,-137.66"/> -<polygon fill="#555555" stroke="#555555" points="288.74,-137.99 287.21,-131.82 284.56,-137.59 288.74,-137.99"/> -</g> -<!-- INT_ZERO->INT_POS --> -<!-- INT_POS->INT_BOT --> -<g id="edge9" class="edge"> -<title>INT_POS->INT_BOT</title> -<path fill="none" stroke="#555555" d="M348.29,-327.91C337.06,-287.19 308.65,-184.2 295.66,-137.13"/> -<polygon fill="#555555" stroke="#555555" points="297.74,-136.76 294.12,-131.53 293.69,-137.88 297.74,-136.76"/> -</g> -<!-- PTR_NULL --> -<g id="node12" class="node"> -<title>PTR_NULL</title> -<ellipse fill="#008000" stroke="black" cx="799" cy="-345.97" rx="27.3" ry="18"/> -<text text-anchor="middle" x="799" y="-341.87" font-family="DejaVu Sans" font-size="13.00" fill="white">null</text> -</g> -<!-- PTR_TOP->PTR_NULL --> -<g id="edge16" class="edge"> -<title>PTR_TOP->PTR_NULL</title> -<path fill="none" stroke="#555555" d="M732.81,-447.03C748.16,-423.83 770.03,-390.77 784.37,-369.09"/> -<polygon fill="#555555" stroke="#555555" points="785.98,-370.45 787.54,-364.29 782.48,-368.13 785.98,-370.45"/> -</g> -<!-- PTR_PERSON --> -<g id="node14" class="node"> -<title>PTR_PERSON</title> -<ellipse fill="#008000" stroke="black" cx="542" cy="-345.97" rx="45.72" ry="18"/> -<text text-anchor="middle" x="542" y="-341.87" font-family="DejaVu Sans" font-size="13.00" fill="white">*Person</text> -</g> -<!-- PTR_TOP->PTR_PERSON --> -<g id="edge17" class="edge"> -<title>PTR_TOP->PTR_PERSON</title> -<path fill="none" stroke="#555555" d="M675.88,-452.05C651.99,-438.01 621.28,-418.77 596,-398.97 584.24,-389.76 572.18,-378.36 562.44,-368.58"/> -<polygon fill="#555555" stroke="#555555" points="564.05,-367.22 558.35,-364.42 561.06,-370.17 564.05,-367.22"/> -</g> -<!-- PTR_S1 --> -<g id="node15" class="node"> -<title>PTR_S1</title> -<ellipse fill="#008000" stroke="black" cx="631" cy="-345.97" rx="27" ry="18"/> -<text text-anchor="middle" x="631" y="-341.87" font-family="DejaVu Sans" font-size="13.00" fill="white">*s1</text> -</g> -<!-- PTR_TOP->PTR_S1 --> -<g id="edge18" class="edge"> -<title>PTR_TOP->PTR_S1</title> -<path fill="none" stroke="#555555" d="M697.19,-447.03C681.84,-423.83 659.97,-390.77 645.63,-369.09"/> -<polygon fill="#555555" stroke="#555555" points="647.52,-368.13 642.46,-364.29 644.02,-370.45 647.52,-368.13"/> -</g> -<!-- PTR_MORE --> -<g id="node16" class="node"> -<title>PTR_MORE</title> -<ellipse fill="#008000" stroke="black" cx="715" cy="-345.97" rx="40.6" ry="18"/> -<text text-anchor="middle" x="715" y="-341.87" font-family="DejaVu Sans" font-size="13.00" fill="white">*s2, …</text> -</g> -<!-- PTR_TOP->PTR_MORE --> -<g id="edge19" class="edge"> -<title>PTR_TOP->PTR_MORE</title> -<path fill="none" stroke="#555555" d="M715,-445.77C715,-423.52 715,-392.77 715,-371.51"/> -<polygon fill="#555555" stroke="#555555" points="717.1,-371.66 715,-365.66 712.9,-371.66 717.1,-371.66"/> -</g> -<!-- PTR_TOP->STRUCT_TOP --> -<!-- PTR_BOT --> -<g id="node11" class="node"> -<title>PTR_BOT</title> -<ellipse fill="#008000" stroke="black" cx="748" cy="-111.99" rx="66.47" ry="28.99"/> -<text text-anchor="middle" x="748" y="-116.14" font-family="DejaVu Sans" font-size="13.00" fill="white">⊥:ptr</text> -<text text-anchor="middle" x="748" y="-99.64" font-family="DejaVu Sans" font-size="13.00" fill="white">[*⊥:struct?]</text> -</g> -<!-- PTR_BOT->BOT --> -<g id="edge68" class="edge"> -<title>PTR_BOT->BOT</title> -<path fill="none" stroke="#555555" d="M783.38,-87.06C807.3,-70.88 838.29,-49.92 859.52,-35.56"/> -<polygon fill="#555555" stroke="#555555" points="860.46,-37.46 864.25,-32.36 858.1,-33.98 860.46,-37.46"/> -</g> -<!-- PTR_PERSON_NIL --> -<g id="node17" class="node"> -<title>PTR_PERSON_NIL</title> -<ellipse fill="#008000" stroke="black" cx="651" cy="-216.97" rx="50.33" ry="18"/> -<text text-anchor="middle" x="651" y="-212.87" font-family="DejaVu Sans" font-size="13.00" fill="white">*Person?</text> -</g> -<!-- PTR_NULL->PTR_PERSON_NIL --> -<g id="edge26" class="edge"> -<title>PTR_NULL->PTR_PERSON_NIL</title> -<path fill="none" stroke="#555555" d="M790.34,-328.75C783.99,-317.83 774.65,-303.55 764,-292.97 740.64,-269.76 709.08,-249.53 685.25,-235.95"/> -<polygon fill="#555555" stroke="#555555" points="686.33,-234.14 680.07,-233.04 684.27,-237.8 686.33,-234.14"/> -</g> -<!-- PTR_S1_NIL --> -<g id="node18" class="node"> -<title>PTR_S1_NIL</title> -<ellipse fill="#008000" stroke="black" cx="748" cy="-216.97" rx="30.37" ry="18"/> -<text text-anchor="middle" x="748" y="-212.87" font-family="DejaVu Sans" font-size="13.00" fill="white">*s1?</text> -</g> -<!-- PTR_NULL->PTR_S1_NIL --> -<g id="edge27" class="edge"> -<title>PTR_NULL->PTR_S1_NIL</title> -<path fill="none" stroke="#555555" d="M792.23,-328.1C783.31,-305.9 767.59,-266.75 757.49,-241.6"/> -<polygon fill="#555555" stroke="#555555" points="759.55,-241.1 755.36,-236.31 755.65,-242.66 759.55,-241.1"/> -</g> -<!-- PTR_MORE_NIL --> -<g id="node19" class="node"> -<title>PTR_MORE_NIL</title> -<ellipse fill="#008000" stroke="black" cx="840" cy="-216.97" rx="45.21" ry="18"/> -<text text-anchor="middle" x="840" y="-212.87" font-family="DejaVu Sans" font-size="13.00" fill="white">*s2?, …</text> -</g> -<!-- PTR_NULL->PTR_MORE_NIL --> -<g id="edge28" class="edge"> -<title>PTR_NULL->PTR_MORE_NIL</title> -<path fill="none" stroke="#555555" d="M804.53,-327.84C811.65,-305.78 824.07,-267.3 832.17,-242.24"/> -<polygon fill="#555555" stroke="#555555" points="834.12,-243.03 833.96,-236.68 830.12,-241.74 834.12,-243.03"/> -</g> -<!-- PTR_ANY --> -<g id="node13" class="node"> -<title>PTR_ANY</title> -<ellipse fill="#008000" stroke="black" cx="502" cy="-216.97" rx="82.38" ry="28.99"/> -<text text-anchor="middle" x="502" y="-221.12" font-family="DejaVu Sans" font-size="13.00" fill="white">*⊥:struct</text> -<text text-anchor="middle" x="502" y="-204.62" font-family="DejaVu Sans" font-size="13.00" fill="white">[ptr any struct]</text> -</g> -<!-- PTR_ANY->PTR_BOT --> -<g id="edge29" class="edge"> -<title>PTR_ANY->PTR_BOT</title> -<path fill="none" stroke="#555555" d="M554.17,-194.13C595.32,-176.91 652.51,-152.97 694.1,-135.56"/> -<polygon fill="#555555" stroke="#555555" points="694.78,-137.55 699.5,-133.29 693.15,-133.67 694.78,-137.55"/> -</g> -<!-- PTR_ANY->PTR_PERSON_NIL --> -<!-- PTR_PERSON->PTR_ANY --> -<g id="edge20" class="edge"> -<title>PTR_PERSON->PTR_ANY</title> -<path fill="none" stroke="#555555" d="M536.61,-327.84C530.59,-308.74 520.69,-277.32 513.02,-252.97"/> -<polygon fill="#555555" stroke="#555555" points="515.08,-252.52 511.28,-247.43 511.08,-253.78 515.08,-252.52"/> -</g> -<!-- PTR_PERSON->PTR_S1 --> -<!-- PTR_PERSON->PTR_PERSON_NIL --> -<g id="edge23" class="edge"> -<title>PTR_PERSON->PTR_PERSON_NIL</title> -<path fill="none" stroke="#555555" d="M556.03,-328.62C575.38,-306.08 610.32,-265.36 632,-240.11"/> -<polygon fill="#555555" stroke="#555555" points="633.38,-241.73 635.7,-235.81 630.19,-238.99 633.38,-241.73"/> -</g> -<!-- PTR_S1->PTR_ANY --> -<g id="edge21" class="edge"> -<title>PTR_S1->PTR_ANY</title> -<path fill="none" stroke="#555555" d="M621.75,-328.57C615.28,-317.84 606.03,-303.85 596,-292.97 580.61,-276.28 561.35,-260.24 544.26,-247.31"/> -<polygon fill="#555555" stroke="#555555" points="545.84,-245.87 539.78,-243.96 543.32,-249.23 545.84,-245.87"/> -</g> -<!-- PTR_S1->PTR_MORE --> -<!-- PTR_S1->PTR_S1_NIL --> -<g id="edge24" class="edge"> -<title>PTR_S1->PTR_S1_NIL</title> -<path fill="none" stroke="#555555" d="M640.49,-328.79C647.07,-318.15 656.34,-304.18 666,-292.97 684.1,-271.96 707.73,-250.9 724.97,-236.47"/> -<polygon fill="#555555" stroke="#555555" points="726.11,-238.25 729.39,-232.8 723.43,-235.02 726.11,-238.25"/> -</g> -<!-- PTR_MORE->PTR_NULL --> -<!-- PTR_MORE->PTR_ANY --> -<g id="edge22" class="edge"> -<title>PTR_MORE->PTR_ANY</title> -<path fill="none" stroke="#555555" d="M702.63,-328.84C693.45,-317.69 680.11,-303.08 666,-292.97 635.59,-271.17 597.84,-253.38 566.22,-240.61"/> -<polygon fill="#555555" stroke="#555555" points="567.33,-238.79 560.98,-238.52 565.78,-242.69 567.33,-238.79"/> -</g> -<!-- PTR_MORE->PTR_MORE_NIL --> -<g id="edge25" class="edge"> -<title>PTR_MORE->PTR_MORE_NIL</title> -<path fill="none" stroke="#555555" d="M729.86,-328.89C739.5,-318.54 752.38,-304.85 764,-292.97 782,-274.55 802.85,-254.03 818.15,-239.12"/> -<polygon fill="#555555" stroke="#555555" points="819.6,-240.64 822.44,-234.95 816.67,-237.63 819.6,-240.64"/> -</g> -<!-- PTR_PERSON_NIL->PTR_BOT --> -<g id="edge30" class="edge"> -<title>PTR_PERSON_NIL->PTR_BOT</title> -<path fill="none" stroke="#555555" d="M666.58,-199.43C680.58,-184.56 701.51,-162.35 718.65,-144.16"/> -<polygon fill="#555555" stroke="#555555" points="719.75,-146.05 722.33,-140.24 716.69,-143.17 719.75,-146.05"/> -</g> -<!-- PTR_PERSON_NIL->PTR_S1_NIL --> -<!-- PTR_S1_NIL->PTR_BOT --> -<g id="edge31" class="edge"> -<title>PTR_S1_NIL->PTR_BOT</title> -<path fill="none" stroke="#555555" d="M748,-198.5C748,-184.97 748,-165.76 748,-148.97"/> -<polygon fill="#555555" stroke="#555555" points="750.1,-148.97 748,-142.97 745.9,-148.97 750.1,-148.97"/> -</g> -<!-- PTR_S1_NIL->PTR_MORE_NIL --> -<!-- PTR_MORE_NIL->PTR_BOT --> -<g id="edge32" class="edge"> -<title>PTR_MORE_NIL->PTR_BOT</title> -<path fill="none" stroke="#555555" d="M825.62,-199.88C812.53,-185.22 792.8,-163.14 776.51,-144.9"/> -<polygon fill="#555555" stroke="#555555" points="778.14,-143.58 772.58,-140.51 775.01,-146.38 778.14,-143.58"/> -</g> -<!-- STRUCT_PERSON --> -<g id="node22" class="node"> -<title>STRUCT_PERSON</title> -<polygon fill="#90ee90" stroke="black" points="976.5,-237.47 909.5,-237.47 909.5,-196.47 976.5,-196.47 976.5,-237.47"/> -<text text-anchor="middle" x="943" y="-221.12" font-family="DejaVu Sans" font-size="13.00">Person</text> -<text text-anchor="middle" x="943" y="-204.62" font-family="DejaVu Sans" font-size="13.00">age: int</text> -</g> -<!-- STRUCT_TOP->STRUCT_PERSON --> -<g id="edge36" class="edge"> -<title>STRUCT_TOP->STRUCT_PERSON</title> -<path fill="none" stroke="#555555" d="M1011.61,-446.07C996.71,-396.53 965.8,-293.77 951.1,-244.91"/> -<polygon fill="#555555" stroke="#555555" points="953.15,-244.41 949.41,-239.27 949.12,-245.62 953.15,-244.41"/> -</g> -<!-- STRUCT_S1 --> -<g id="node23" class="node"> -<title>STRUCT_S1</title> -<polygon fill="#90ee90" stroke="black" points="1047,-237.47 993,-237.47 993,-196.47 1047,-196.47 1047,-237.47"/> -<text text-anchor="middle" x="1020" y="-221.12" font-family="DejaVu Sans" font-size="13.00">s1</text> -<text text-anchor="middle" x="1020" y="-204.62" font-family="DejaVu Sans" font-size="13.00">x: int</text> -</g> -<!-- STRUCT_TOP->STRUCT_S1 --> -<g id="edge37" class="edge"> -<title>STRUCT_TOP->STRUCT_S1</title> -<path fill="none" stroke="#555555" d="M1020,-445.58C1020,-395.91 1020,-293.85 1020,-245.08"/> -<polygon fill="#555555" stroke="#555555" points="1022.1,-245.25 1020,-239.25 1017.9,-245.25 1022.1,-245.25"/> -</g> -<!-- STRUCT_S2 --> -<g id="node24" class="node"> -<title>STRUCT_S2</title> -<polygon fill="#90ee90" stroke="black" points="1154.88,-237.47 1063.12,-237.47 1063.12,-196.47 1154.88,-196.47 1154.88,-237.47"/> -<text text-anchor="middle" x="1109" y="-221.12" font-family="DejaVu Sans" font-size="13.00">s2</text> -<text text-anchor="middle" x="1109" y="-204.62" font-family="DejaVu Sans" font-size="13.00">x: int, y: int</text> -</g> -<!-- STRUCT_TOP->STRUCT_S2 --> -<g id="edge38" class="edge"> -<title>STRUCT_TOP->STRUCT_S2</title> -<path fill="none" stroke="#555555" d="M1029.69,-446.07C1046.92,-396.53 1082.65,-293.77 1099.64,-244.91"/> -<polygon fill="#555555" stroke="#555555" points="1101.62,-245.61 1101.6,-239.25 1097.65,-244.23 1101.62,-245.61"/> -</g> -<!-- STRUCT_MORE --> -<g id="node25" class="node"> -<title>STRUCT_MORE</title> -<polygon fill="#90ee90" stroke="black" points="1225,-234.97 1171,-234.97 1171,-198.97 1225,-198.97 1225,-234.97"/> -<text text-anchor="middle" x="1198" y="-212.87" font-family="DejaVu Sans" font-size="13.00">…</text> -</g> -<!-- STRUCT_TOP->STRUCT_MORE --> -<g id="edge39" class="edge"> -<title>STRUCT_TOP->STRUCT_MORE</title> -<path fill="none" stroke="#555555" d="M1038.71,-447.05C1073.74,-396.68 1148.63,-288.97 1181.71,-241.39"/> -<polygon fill="#555555" stroke="#555555" points="1183.35,-242.73 1185.05,-236.6 1179.9,-240.33 1183.35,-242.73"/> -</g> -<!-- STRUCT_TOP->MEM_TOP --> -<!-- STRUCT_BOT --> -<g id="node21" class="node"> -<title>STRUCT_BOT</title> -<ellipse fill="#90ee90" stroke="black" cx="1020" cy="-111.99" rx="82.91" ry="28.99"/> -<text text-anchor="middle" x="1020" y="-116.14" font-family="DejaVu Sans" font-size="13.00">⊥:struct</text> -<text text-anchor="middle" x="1020" y="-99.64" font-family="DejaVu Sans" font-size="13.00">[struct bottom]</text> -</g> -<!-- STRUCT_BOT->BOT --> -<g id="edge69" class="edge"> -<title>STRUCT_BOT->BOT</title> -<path fill="none" stroke="#555555" d="M982.84,-85.85C959.17,-69.85 929.19,-49.57 908.49,-35.56"/> -<polygon fill="#555555" stroke="#555555" points="909.78,-33.9 903.63,-32.28 907.42,-37.38 909.78,-33.9"/> -</g> -<!-- STRUCT_PERSON->STRUCT_BOT --> -<g id="edge40" class="edge"> -<title>STRUCT_PERSON->STRUCT_BOT</title> -<path fill="none" stroke="#555555" d="M957.85,-196.12C968.43,-181.96 982.92,-162.59 995.24,-146.11"/> -<polygon fill="#555555" stroke="#555555" points="996.85,-147.46 998.76,-141.4 993.49,-144.94 996.85,-147.46"/> -</g> -<!-- STRUCT_PERSON->STRUCT_S1 --> -<!-- STRUCT_S1->STRUCT_BOT --> -<g id="edge41" class="edge"> -<title>STRUCT_S1->STRUCT_BOT</title> -<path fill="none" stroke="#555555" d="M1020,-196.12C1020,-182.64 1020,-164.43 1020,-148.49"/> -<polygon fill="#555555" stroke="#555555" points="1022.1,-148.87 1020,-142.87 1017.9,-148.87 1022.1,-148.87"/> -</g> -<!-- STRUCT_S1->STRUCT_S2 --> -<!-- STRUCT_S2->STRUCT_BOT --> -<g id="edge42" class="edge"> -<title>STRUCT_S2->STRUCT_BOT</title> -<path fill="none" stroke="#555555" d="M1091.84,-196.12C1079.5,-181.83 1062.57,-162.25 1048.25,-145.68"/> -<polygon fill="#555555" stroke="#555555" points="1050,-144.5 1044.49,-141.33 1046.82,-147.24 1050,-144.5"/> -</g> -<!-- STRUCT_S2->STRUCT_MORE --> -<!-- STRUCT_MORE->STRUCT_BOT --> -<g id="edge43" class="edge"> -<title>STRUCT_MORE->STRUCT_BOT</title> -<path fill="none" stroke="#555555" d="M1177.76,-198.72C1173.05,-195 1167.95,-191.22 1163,-187.98 1135.19,-169.81 1102.49,-152.39 1075.38,-138.93"/> -<polygon fill="#555555" stroke="#555555" points="1076.64,-137.21 1070.33,-136.44 1074.78,-140.97 1076.64,-137.21"/> -</g> -<!-- MEM_ALIAS2 --> -<g id="node28" class="node"> -<title>MEM_ALIAS2</title> -<ellipse fill="#00008b" stroke="black" cx="1294" cy="-216.97" rx="45.21" ry="18"/> -<text text-anchor="middle" x="1294" y="-212.87" font-family="DejaVu Sans" font-size="13.00" fill="white">MEM#2</text> -</g> -<!-- MEM_TOP->MEM_ALIAS2 --> -<g id="edge46" class="edge"> -<title>MEM_TOP->MEM_ALIAS2</title> -<path fill="none" stroke="#555555" d="M1343.44,-456.76C1334.24,-412.32 1309.64,-293.5 1299.01,-242.16"/> -<polygon fill="#555555" stroke="#555555" points="1301.12,-242.02 1297.85,-236.57 1297.01,-242.88 1301.12,-242.02"/> -</g> -<!-- MEM_ALIAS3 --> -<g id="node29" class="node"> -<title>MEM_ALIAS3</title> -<ellipse fill="#00008b" stroke="black" cx="1400" cy="-216.97" rx="45.21" ry="18"/> -<text text-anchor="middle" x="1400" y="-212.87" font-family="DejaVu Sans" font-size="13.00" fill="white">MEM#3</text> -</g> -<!-- MEM_TOP->MEM_ALIAS3 --> -<g id="edge47" class="edge"> -<title>MEM_TOP->MEM_ALIAS3</title> -<path fill="none" stroke="#555555" d="M1350.56,-456.76C1359.76,-412.32 1384.36,-293.5 1394.99,-242.16"/> -<polygon fill="#555555" stroke="#555555" points="1396.99,-242.88 1396.15,-236.57 1392.88,-242.02 1396.99,-242.88"/> -</g> -<!-- MEM_MORE --> -<g id="node30" class="node"> -<title>MEM_MORE</title> -<ellipse fill="#00008b" stroke="black" cx="1488" cy="-216.97" rx="27" ry="18"/> -<text text-anchor="middle" x="1488" y="-212.87" font-family="DejaVu Sans" font-size="13.00" fill="white">…</text> -</g> -<!-- MEM_TOP->MEM_MORE --> -<g id="edge48" class="edge"> -<title>MEM_TOP->MEM_MORE</title> -<path fill="none" stroke="#555555" d="M1356.25,-457.16C1380.82,-412.56 1447.72,-291.1 1475.57,-240.54"/> -<polygon fill="#555555" stroke="#555555" points="1477.29,-241.76 1478.35,-235.49 1473.62,-239.74 1477.29,-241.76"/> -</g> -<!-- MEM_TOP->TUPLE_TOP --> -<!-- MEM_BOT --> -<g id="node27" class="node"> -<title>MEM_BOT</title> -<ellipse fill="#00008b" stroke="black" cx="1347" cy="-111.99" rx="44.7" ry="18"/> -<text text-anchor="middle" x="1347" y="-107.89" font-family="DejaVu Sans" font-size="13.00" fill="white">⊥:mem</text> -</g> -<!-- MEM_BOT->BOT --> -<g id="edge70" class="edge"> -<title>MEM_BOT->BOT</title> -<path fill="none" stroke="#555555" d="M1315.14,-99.08C1293.38,-91.31 1263.76,-81.46 1237,-75 1121.65,-47.17 981.66,-29.67 918.21,-22.6"/> -<polygon fill="#555555" stroke="#555555" points="918.55,-20.52 912.36,-21.95 918.09,-24.7 918.55,-20.52"/> -</g> -<!-- MEM_ALIAS2->MEM_BOT --> -<g id="edge49" class="edge"> -<title>MEM_ALIAS2->MEM_BOT</title> -<path fill="none" stroke="#555555" d="M1302.75,-198.97C1311.5,-181.97 1325.02,-155.71 1334.81,-136.68"/> -<polygon fill="#555555" stroke="#555555" points="1336.66,-137.66 1337.54,-131.37 1332.93,-135.74 1336.66,-137.66"/> -</g> -<!-- MEM_ALIAS2->MEM_ALIAS3 --> -<!-- MEM_ALIAS3->MEM_BOT --> -<g id="edge50" class="edge"> -<title>MEM_ALIAS3->MEM_BOT</title> -<path fill="none" stroke="#555555" d="M1391.25,-198.97C1382.5,-181.97 1368.98,-155.71 1359.19,-136.68"/> -<polygon fill="#555555" stroke="#555555" points="1361.07,-135.74 1356.46,-131.37 1357.34,-137.66 1361.07,-135.74"/> -</g> -<!-- MEM_ALIAS3->MEM_MORE --> -<!-- MEM_MORE->MEM_BOT --> -<g id="edge51" class="edge"> -<title>MEM_MORE->MEM_BOT</title> -<path fill="none" stroke="#555555" d="M1471.42,-202.39C1465.65,-197.74 1459.09,-192.57 1453,-187.98 1426.93,-168.37 1396.47,-146.96 1374.9,-132.06"/> -<polygon fill="#555555" stroke="#555555" points="1376.17,-130.38 1370.03,-128.71 1373.78,-133.84 1376.17,-130.38"/> -</g> -<!-- TUPLE1 --> -<g id="node33" class="node"> -<title>TUPLE1</title> -<polygon fill="#ffc0cb" stroke="none" points="1582.88,-372.47 1539.12,-372.47 1539.12,-319.47 1582.88,-319.47 1582.88,-372.47"/> -<polygon fill="#ffc0cb" stroke="none" points="1539.12,-345.97 1539.12,-372.47 1582.88,-372.47 1582.88,-345.97 1539.12,-345.97"/> -<polygon fill="none" stroke="black" points="1539.12,-345.97 1539.12,-372.47 1582.88,-372.47 1582.88,-345.97 1539.12,-345.97"/> -<text text-anchor="start" x="1544.12" y="-355.12" font-family="DejaVu Sans" font-size="13.00">tuple</text> -<polygon fill="black" stroke="none" points="1539.12,-319.47 1539.12,-345.97 1582.88,-345.97 1582.88,-319.47 1539.12,-319.47"/> -<polygon fill="none" stroke="black" points="1539.12,-319.47 1539.12,-345.97 1582.88,-345.97 1582.88,-319.47 1539.12,-319.47"/> -<text text-anchor="start" x="1546.38" y="-328.62" font-family="DejaVu Sans" font-size="13.00" fill="white">type</text> -</g> -<!-- TUPLE_TOP->TUPLE1 --> -<g id="edge54" class="edge"> -<title>TUPLE_TOP->TUPLE1</title> -<path fill="none" stroke="#555555" d="M1580.85,-456.57C1577.26,-436.74 1571.31,-403.91 1566.86,-379.34"/> -<polygon fill="#555555" stroke="#555555" points="1568.94,-379.03 1565.81,-373.5 1564.81,-379.77 1568.94,-379.03"/> -</g> -<!-- TUPLE2 --> -<g id="node34" class="node"> -<title>TUPLE2</title> -<polygon fill="#ffc0cb" stroke="none" points="1642.88,-385.72 1599.12,-385.72 1599.12,-306.22 1642.88,-306.22 1642.88,-385.72"/> -<polygon fill="#ffc0cb" stroke="none" points="1599.12,-359.22 1599.12,-385.72 1642.88,-385.72 1642.88,-359.22 1599.12,-359.22"/> -<polygon fill="none" stroke="black" points="1599.12,-359.22 1599.12,-385.72 1642.88,-385.72 1642.88,-359.22 1599.12,-359.22"/> -<text text-anchor="start" x="1604.12" y="-368.37" font-family="DejaVu Sans" font-size="13.00">tuple</text> -<polygon fill="black" stroke="none" points="1599.12,-332.72 1599.12,-359.22 1642.88,-359.22 1642.88,-332.72 1599.12,-332.72"/> -<polygon fill="none" stroke="black" points="1599.12,-332.72 1599.12,-359.22 1642.88,-359.22 1642.88,-332.72 1599.12,-332.72"/> -<text text-anchor="start" x="1606.38" y="-341.87" font-family="DejaVu Sans" font-size="13.00" fill="white">type</text> -<polygon fill="black" stroke="none" points="1599.12,-306.22 1599.12,-332.72 1642.88,-332.72 1642.88,-306.22 1599.12,-306.22"/> -<polygon fill="none" stroke="black" points="1599.12,-306.22 1599.12,-332.72 1642.88,-332.72 1642.88,-306.22 1599.12,-306.22"/> -<text text-anchor="start" x="1606.38" y="-315.37" font-family="DejaVu Sans" font-size="13.00" fill="white">type</text> -</g> -<!-- TUPLE_TOP->TUPLE2 --> -<g id="edge55" class="edge"> -<title>TUPLE_TOP->TUPLE2</title> -<path fill="none" stroke="#555555" d="M1588.99,-456.83C1593.76,-440.46 1601.17,-415.04 1607.65,-392.78"/> -<polygon fill="#555555" stroke="#555555" points="1609.64,-393.48 1609.3,-387.13 1605.6,-392.3 1609.64,-393.48"/> -</g> -<!-- TUPLEN --> -<g id="node35" class="node"> -<title>TUPLEN</title> -<polygon fill="#ffc0cb" stroke="none" points="1702.88,-398.97 1659.12,-398.97 1659.12,-292.97 1702.88,-292.97 1702.88,-398.97"/> -<polygon fill="#ffc0cb" stroke="none" points="1659.12,-372.47 1659.12,-398.97 1702.88,-398.97 1702.88,-372.47 1659.12,-372.47"/> -<polygon fill="none" stroke="black" points="1659.12,-372.47 1659.12,-398.97 1702.88,-398.97 1702.88,-372.47 1659.12,-372.47"/> -<text text-anchor="start" x="1664.12" y="-381.62" font-family="DejaVu Sans" font-size="13.00">tuple</text> -<polygon fill="black" stroke="none" points="1659.12,-345.97 1659.12,-372.47 1702.88,-372.47 1702.88,-345.97 1659.12,-345.97"/> -<polygon fill="none" stroke="black" points="1659.12,-345.97 1659.12,-372.47 1702.88,-372.47 1702.88,-345.97 1659.12,-345.97"/> -<text text-anchor="start" x="1666.38" y="-355.12" font-family="DejaVu Sans" font-size="13.00" fill="white">type</text> -<polygon fill="black" stroke="none" points="1659.12,-319.47 1659.12,-345.97 1702.88,-345.97 1702.88,-319.47 1659.12,-319.47"/> -<polygon fill="none" stroke="black" points="1659.12,-319.47 1659.12,-345.97 1702.88,-345.97 1702.88,-319.47 1659.12,-319.47"/> -<text text-anchor="start" x="1674.62" y="-328.62" font-family="DejaVu Sans" font-size="13.00" fill="white">…</text> -<polygon fill="black" stroke="none" points="1659.12,-292.97 1659.12,-319.47 1702.88,-319.47 1702.88,-292.97 1659.12,-292.97"/> -<polygon fill="none" stroke="black" points="1659.12,-292.97 1659.12,-319.47 1702.88,-319.47 1702.88,-292.97 1659.12,-292.97"/> -<text text-anchor="start" x="1666.38" y="-302.12" font-family="DejaVu Sans" font-size="13.00" fill="white">type</text> -</g> -<!-- TUPLE_TOP->TUPLEN --> -<g id="edge56" class="edge"> -<title>TUPLE_TOP->TUPLEN</title> -<path fill="none" stroke="#555555" d="M1600.21,-457.82C1614.47,-443.17 1635.34,-420.61 1651,-398.97 1652.4,-397.02 1653.8,-395.01 1655.17,-392.95"/> -<polygon fill="#555555" stroke="#555555" points="1656.91,-394.14 1658.41,-387.96 1653.38,-391.86 1656.91,-394.14"/> -</g> -<!-- TUPLE_BOT --> -<g id="node32" class="node"> -<title>TUPLE_BOT</title> -<ellipse fill="#ffc0cb" stroke="black" cx="1602" cy="-111.99" rx="44.7" ry="18"/> -<text text-anchor="middle" x="1602" y="-107.89" font-family="DejaVu Sans" font-size="13.00">⊥:tuple</text> -</g> -<!-- TUPLE_BOT->BOT --> -<g id="edge71" class="edge"> -<title>TUPLE_BOT->BOT</title> -<path fill="none" stroke="#555555" d="M1577.54,-96.47C1563.29,-88.74 1544.69,-79.84 1527,-75 1410.53,-43.12 1034.45,-25.23 918.41,-20.37"/> -<polygon fill="#555555" stroke="#555555" points="918.75,-18.28 912.67,-20.13 918.57,-22.48 918.75,-18.28"/> -</g> -<!-- TUPLE1->TUPLE_BOT --> -<g id="edge57" class="edge"> -<title>TUPLE1->TUPLE_BOT</title> -<path fill="none" stroke="#555555" d="M1565.47,-319.7C1573.39,-274.85 1589.82,-181.9 1597.66,-137.56"/> -<polygon fill="#555555" stroke="#555555" points="1599.69,-138.14 1598.66,-131.86 1595.55,-137.4 1599.69,-138.14"/> -</g> -<!-- TUPLE1->TUPLE2 --> -<!-- TUPLE2->TUPLE_BOT --> -<g id="edge58" class="edge"> -<title>TUPLE2->TUPLE_BOT</title> -<path fill="none" stroke="#555555" d="M1617.84,-306.4C1613.91,-258.37 1607.3,-177.75 1604,-137.46"/> -<polygon fill="#555555" stroke="#555555" points="1606.13,-137.74 1603.55,-131.93 1601.95,-138.08 1606.13,-137.74"/> -</g> -<!-- TUPLE2->TUPLEN --> -<!-- TUPLEN->TUPLE_BOT --> -<g id="edge59" class="edge"> -<title>TUPLEN->TUPLE_BOT</title> -<path fill="none" stroke="#555555" d="M1663.37,-293.19C1646.79,-244.5 1622.69,-173.75 1610.2,-137.07"/> -<polygon fill="#555555" stroke="#555555" points="1612.27,-136.64 1608.35,-131.63 1608.3,-137.99 1612.27,-136.64"/> -</g> -</g> -</svg> |
