From e4dc3273f201ae741637b626998637cce973546b Mon Sep 17 00:00:00 2001 From: Cliff Click Date: Fri, 2 Oct 2026 13:04:34 -0700 Subject: First pass README updates --- chapter05/README.md | 37 +-- chapter05/docs/05-graph1.json | 25 ++ chapter05/docs/05-graph1.svg | 348 ++++++++---------------- chapter05/docs/05-graph2.json | 27 ++ chapter05/docs/05-graph2.svg | 354 +++++++++--------------- chapter05/docs/05-graph3.json | 28 ++ chapter05/docs/05-graph3.svg | 343 +++++++++-------------- chapter05/docs/05-graph4.json | 28 ++ chapter05/docs/05-graph4.svg | 343 +++++++++-------------- chapter05/docs/05-graph5.json | 27 ++ chapter05/docs/05-graph5.svg | 318 +++++++++------------- chapter05/docs/05-graph6.json | 26 ++ chapter05/docs/05-graph6.svg | 293 ++++++++------------ chapter05/docs/05-graph7.json | 31 +++ chapter05/docs/05-graph7.svg | 409 ++++++++++------------------ chapter05/docs/05-graph8.json | 45 +++ chapter05/docs/05-graph8.svg | 618 +++++++++++++----------------------------- chapter05/docs/05-graph9.json | 26 ++ chapter05/docs/05-graph9.svg | 291 ++++++++------------ chapter05/docs/Makefile | 13 +- 20 files changed, 1466 insertions(+), 2164 deletions(-) create mode 100644 chapter05/docs/05-graph1.json create mode 100644 chapter05/docs/05-graph2.json create mode 100644 chapter05/docs/05-graph3.json create mode 100644 chapter05/docs/05-graph4.json create mode 100644 chapter05/docs/05-graph5.json create mode 100644 chapter05/docs/05-graph6.json create mode 100644 chapter05/docs/05-graph7.json create mode 100644 chapter05/docs/05-graph8.json create mode 100644 chapter05/docs/05-graph9.json (limited to 'chapter05') diff --git a/chapter05/README.md b/chapter05/README.md index 2732066e..f7ff382c 100644 --- a/chapter05/README.md +++ b/chapter05/README.md @@ -1,11 +1,14 @@ # Chapter 5: If Statement, Phi, and Region +[Previous: Chapter 4](../chapter04/README.md) | +[Next: Chapter 6](../chapter06/README.md) + # Table of Contents 1. [Recap](#recap) 2. [New Nodes](#new-nodes) 3. [`IfNode`](#ifnode) -4. [`PhiNode` ](#phinode) +4. [`PhiNode`](#phinode) 5. [`RegionNode`](#regionnode) 6. [Pinned data nodes](#we-do-not-associate-a-control-edge-on-every-data-node-in-the-graph) 7. [`Stop` Nodes](#stop-nodes) @@ -19,9 +22,7 @@ 15. [Finally](#finally) 16. [Example 2](#example-2) 17. [Example 3](#example-3) -18. [Example 3](#example-3) -19. [More Examples](#more-examples) - +18. [More Examples](#more-examples) You can also read [this chapter](https://github.com/SeaOfNodes/Simple/tree/linear-chapter05) in a linear Git revision history on the [linear](https://github.com/SeaOfNodes/Simple/tree/linear) branch and [compare](https://github.com/SeaOfNodes/Simple/compare/linear-chapter04...linear-chapter05) it to the previous chapter. @@ -50,7 +51,7 @@ Here is a recap of the nodes introduced in previous chapters: | Sub | Data | 2 | Subtract a value from another | Two data nodes, the first one is subtracted by the second one | Result of the subtraction | | Mul | Data | 2 | Multiply two values | Two data nodes without restrictions on the order | Result of the multiplication | | Div | Data | 2 | Divide a value by another | Two data nodes, the first one is divided by the second one | Result of the division | -| Minus | Data | 2 | Negate a value | One data node which value is negated | Result of the negation | +| Minus | Data | 2 | Negate a value | One data node that value is negated | Result of the negation | | Scope | Symbol Table | 3 | Represents scopes in the graph | Nodes that represent the current value of variables | None | > A `Proj` is a control node when it projects a control slot: `Proj#0` off `Start`, @@ -92,7 +93,7 @@ Integer arithmetic likewise retains an integer result type when it cannot fold. In this Sea of Nodes, there is an embedded Control Flow Graph - and like a normal CFG there are merge points where two basic blocks flow into one. The `Region` node takes control from each predecessor control (block) as input and -produces a merged control as an output.[^2] +produces a merged control as an output.[^2] Both `Return` and `If` take control in slot 0. `PhiNode`s need their corresponding `RegionNode` to know when to merge data values, so again slot 0 @@ -125,7 +126,7 @@ When we parse an `if` statement, the control flow splits at that point. We must track the names being updated in each part of the `if` statement, and then merge them at the end. The implementation follows the description in *Combining Analyses, Combining Optimizations*[^4]. -This involves following: +This involves the following: 1. We create an `IfNode` with the current control token, i.e. the node mapped to `$ctrl`, and the `if` predicate expression as inputs. @@ -154,7 +155,7 @@ Implementation is in [`parseIf` method in `Parser`](https://github.com/SeaOfNode ## Operations on ScopeNodes As explained above, we duplicate ScopeNodes and merge them at a later point. There are some -subtleties in how this is implemented that is worth going over. +subtleties in how this is implemented that are worth going over. ### Duplicating a ScopeNode @@ -175,7 +176,7 @@ At the merge point we merge two ScopeNodes. The goals are: 2) A new Region node is created representing the merged control flow. The phis have this region node as the first input. 3) After the merge is completed, the duplicate is discarded, and its use of each of the nodes is also deleted. -The merging logic takes advantage of that fact that the two ScopeNodes have the bound nodes in the same order in the list of inputs. This was ensured during duplicating the ScopeNode. +The merging logic takes advantage of the fact that the two ScopeNodes have the bound nodes in the same order in the list of inputs. This was ensured during duplicating the ScopeNode. Although only the innermost occurrence of a name can have its binding changed, we scan all the nodes in our input list, and simply ignore ones where the binding has not changed. For implementation [see `ScopeNode.mergeScopes()`](https://github.com/SeaOfNodes/Simple/blob/main/chapter05/src/main/java/com/seaofnodes/simple/node/ScopeNode.java#L164-L173) @@ -195,7 +196,7 @@ return a; ### Before Merging -Following shows the graph just before we merge the two branches of the `if` statement in a `Region` node. +The following shows the graph just before we merge the two branches of the `if` statement in a `Region` node. ![Graph1](./docs/05-graph1.svg) @@ -225,7 +226,7 @@ Here is the graph after the `return` statement was parsed and processed. ## Example #2 Consider the following code snippet: -```java +```java int b = 0; int c = 0; if (arg == 1) { @@ -241,16 +242,16 @@ return b; The value of `b` depends on which path the control flow took. To resolve this, a Φ (Phi) function is inserted. -``` +``` b = Phi(Region,2, 1); // values vary -c = Phi(Region,1, 0); // valuse vary, but dead +c = Phi(Region,1, 0); // values vary, but dead ``` The `Phi` for `c` will die when the scope where `c` is defined dies. This does not happen when merging but after the `return`. `return` is using `b` so `b` stays alive. -Before, we go ahead and parse down the if statement we duplicate the scope: +Before we go ahead and parse down the if statement we duplicate the scope: ```java ScopeNode fScope = _scope.dup(); /* Scope[$ctrl:$ctrl, arg:arg][b:0, c:0]*/ @@ -270,7 +271,7 @@ Notice, this branch modified and set a new value for both symbols currently exis Now, we set the scope back to where we started (without the modifications that `ifT` made) ```java -_scope = fScope; +_scope = fScope; ``` We then will proceed and parse down the second branch of the if statement: @@ -278,12 +279,12 @@ We then will proceed and parse down the second branch of the if statement: if (matchx("else")) { parseStatement(); fScope = _scope; - + /* Scope[$ctrl:False, arg:arg][b:1, c:0]*/ } ``` -This branch modified the values of `b` and `c`. Since the branch arms are also +The two branches modified `b`; only the true branch modified `c`. Since the branch arms are also lexical scopes, they cannot introduce new symbols in the current (outer) scope. This means that the order of the name bindings stayed the same. Excluding the first control node, we loop through and compare the nodes corresponding to the @@ -303,7 +304,7 @@ representing this conflict: ## Example #3 -Phi's implement a peephole illustrated in the example: +Phis implement a peephole illustrated in the example: ```java int a=arg==2; diff --git a/chapter05/docs/05-graph1.json b/chapter05/docs/05-graph1.json new file mode 100644 index 00000000..a2b4a7bd --- /dev/null +++ b/chapter05/docs/05-graph1.json @@ -0,0 +1,25 @@ +{ + "ver": 1, + "comp": "chapter05/docs/05-graph1.svg", + "step": 1, + "roots": [], + "scope": 0, + "nodes": [ + {"id": 1, "label": "Scope", "type": null, "kind": "SCOPE", "edges": [{"idx": 0, "def": 11, "role": "ASSOC", "label": "0: $ctrl"}, {"idx": 1, "def": 10, "role": "ASSOC", "label": "0: arg"}, {"idx": 2, "def": 14, "role": "ASSOC", "label": "1: a"}], "proj": null}, + {"id": 2, "label": "Start", "type": null, "kind": "CTRL", "edges": [], "proj": null}, + {"id": 4, "label": "Scope", "type": null, "kind": "SCOPE", "edges": [{"idx": 0, "def": 12, "role": "ASSOC", "label": "0: $ctrl"}, {"idx": 1, "def": 10, "role": "ASSOC", "label": "0: arg"}, {"idx": 2, "def": 16, "role": "ASSOC", "label": "1: a"}], "proj": null}, + {"id": 6, "label": "$ctrl", "type": null, "kind": "CTRL", "edges": [{"idx": 0, "def": 2, "role": "CTRL", "label": null}], "proj": {"par": 2, "idx": 0}}, + {"id": 7, "label": "#1", "type": null, "kind": "DATA", "edges": [], "proj": null}, + {"id": 8, "label": "==", "type": null, "kind": "DATA", "edges": [{"idx": 0, "def": 0, "role": "DATA", "label": null}, {"idx": 1, "def": 10, "role": "DATA", "label": null}, {"idx": 2, "def": 7, "role": "DATA", "label": null}], "proj": null}, + {"id": 9, "label": "If", "type": null, "kind": "CTRL", "edges": [{"idx": 0, "def": 6, "role": "CTRL", "label": null}, {"idx": 1, "def": 8, "role": "DATA", "label": null}], "proj": null}, + {"id": 10, "label": "arg", "type": null, "kind": "DATA", "edges": [{"idx": 0, "def": 2, "role": "DATA", "label": null}], "proj": {"par": 2, "idx": 1}}, + {"id": 11, "label": "True", "type": null, "kind": "CTRL", "edges": [{"idx": 0, "def": 9, "role": "CTRL", "label": null}], "proj": {"par": 9, "idx": 0}}, + {"id": 12, "label": "False", "type": null, "kind": "CTRL", "edges": [{"idx": 0, "def": 9, "role": "CTRL", "label": null}], "proj": {"par": 9, "idx": 1}}, + {"id": 13, "label": "#2", "type": null, "kind": "DATA", "edges": [], "proj": null}, + {"id": 14, "label": "+", "type": null, "kind": "DATA", "edges": [{"idx": 0, "def": 0, "role": "DATA", "label": null}, {"idx": 1, "def": 10, "role": "DATA", "label": null}, {"idx": 2, "def": 13, "role": "DATA", "label": null}], "proj": null}, + {"id": 15, "label": "#3", "type": null, "kind": "DATA", "edges": [], "proj": null}, + {"id": 16, "label": "-", "type": null, "kind": "DATA", "edges": [{"idx": 0, "def": 0, "role": "DATA", "label": null}, {"idx": 1, "def": 10, "role": "DATA", "label": null}, {"idx": 2, "def": 15, "role": "DATA", "label": null}], "proj": null} + ], + "groups": [ + ] +} diff --git a/chapter05/docs/05-graph1.svg b/chapter05/docs/05-graph1.svg index efe0a0e8..97813974 100644 --- a/chapter05/docs/05-graph1.svg +++ b/chapter05/docs/05-graph1.svg @@ -1,228 +1,120 @@ - - - - - - -chapter05 - - -cluster_Nodes - - - -cluster_Scope1_0 - - - -cluster_Scope1_1 - - - -cluster_Scope12_0 - - - -cluster_Scope12_1 - - - - -Start2 - - -Start - - - -$ctrl - -arg - - - -Con_7 - -#1 - - - -EQNode8 - -== - - - -EQNode8->Start2:p1 - - -1 - - - -EQNode8->Con_7 - - -2 - - - -If9 - - -If - - - -True - - -False - - - -If9->Start2:p0 - - -0 - - - -If9->EQNode8 - - -1 - - - -Con_13 - -#2 - - - -Add14 - -+ - - - -Add14->Start2:p1 - - -1 - - - -Add14->Con_13 - - -2 - - - -Con_15 - -#3 - - - -Sub16 - -- - - - -Sub16->Start2:p1 - - -1 - - - -Sub16->Con_15 - - -2 - - - -Scope1_0 - - -0 - -$ctrl - -arg - - - -Scope1_0:Scope1_0_arg->Start2:p1 - - - - - -Scope1_0:Scope1_0_$ctrl->If9:p0 - - - - - -Scope1_1 - - -1 - -a - - - -Scope1_1:Scope1_1_a->Add14 - - - - - -Scope12_0 - - -0 - -$ctrl - -arg - - - -Scope12_0:Scope12_0_arg->Start2:p1 - - - - - -Scope12_0:Scope12_0_$ctrl->If9:p1 - - - - - -Scope12_1 - - -1 - -a - - - -Scope12_1:Scope12_1_a->Sub16 - - - - - +#1[0] → #11 · ASSOC · 0: $ctrl#1[1] → #10 · ASSOC · 0: arg#1[2] → #14 · ASSOC · 1: a#4[0] → #12 · ASSOC · 0: $ctrl#4[1] → #10 · ASSOC · 0: arg#4[2] → #16 · ASSOC · 1: a#8[1] → #10 · DATA#8[2] → #7 · DATA#9[0] → #6 · CTRL#9[1] → #8 · DATA#14[1] → #10 · DATA#14[2] → #13 · DATA#16[1] → #10 · DATA#16[2] → #15 · DATAScope  #1#1 Scope +Type not computed + +[0] → #11 ASSOC 0: $ctrl +[1] → #10 ASSOC 0: arg +[2] → #14 ASSOC 1: a0: $ctrl0: arg1: a012Start  #2#2 Start +Type not computed + +Scope  #4#4 Scope +Type not computed + +[0] → #12 ASSOC 0: $ctrl +[1] → #10 ASSOC 0: arg +[2] → #16 ASSOC 1: a0: $ctrl0: arg1: a012$ctrl  #6/0#6 $ctrl +Projection 0 of #2 +Type not computed + +[0] → #2 CTRL#1  #7#7 #1 +Type not computed + +==  #8#8 == +Type not computed + +[0] → — DATA +[1] → #10 DATA +[2] → #7 DATA012If  #9#9 If +Type not computed + +[0] → #6 CTRL +[1] → #8 DATA01arg  #10/1#10 arg +Projection 1 of #2 +Type not computed + +[0] → #2 DATATrue  #11/0#11 True +Projection 0 of #9 +Type not computed + +[0] → #9 CTRLFalse  #12/1#12 False +Projection 1 of #9 +Type not computed + +[0] → #9 CTRL#2  #13#13 #2 +Type not computed + ++  #14#14 + +Type not computed + +[0] → — DATA +[1] → #10 DATA +[2] → #13 DATA012#3  #15#15 #3 +Type not computed + +-  #16#16 - +Type not computed + +[0] → — DATA +[1] → #10 DATA +[2] → #15 DATA012 diff --git a/chapter05/docs/05-graph2.json b/chapter05/docs/05-graph2.json new file mode 100644 index 00000000..5980da2b --- /dev/null +++ b/chapter05/docs/05-graph2.json @@ -0,0 +1,27 @@ +{ + "ver": 1, + "comp": "chapter05/docs/05-graph2.svg", + "step": 1, + "roots": [], + "scope": 0, + "nodes": [ + {"id": 1, "label": "Scope", "type": null, "kind": "SCOPE", "edges": [{"idx": 0, "def": 17, "role": "ASSOC", "label": "0: $ctrl"}, {"idx": 1, "def": 5, "role": "ASSOC", "label": "0: arg"}, {"idx": 2, "def": 18, "role": "ASSOC", "label": "1: a"}], "proj": null}, + {"id": 2, "label": "Start", "type": null, "kind": "CTRL", "edges": [], "proj": null}, + {"id": 4, "label": "$ctrl", "type": null, "kind": "CTRL", "edges": [{"idx": 0, "def": 2, "role": "CTRL", "label": null}], "proj": {"par": 2, "idx": 0}}, + {"id": 5, "label": "arg", "type": null, "kind": "DATA", "edges": [{"idx": 0, "def": 2, "role": "DATA", "label": null}], "proj": {"par": 2, "idx": 1}}, + {"id": 6, "label": "True", "type": null, "kind": "CTRL", "edges": [{"idx": 0, "def": 9, "role": "CTRL", "label": null}], "proj": {"par": 9, "idx": 0}}, + {"id": 7, "label": "#1", "type": null, "kind": "DATA", "edges": [], "proj": null}, + {"id": 8, "label": "==", "type": null, "kind": "DATA", "edges": [{"idx": 0, "def": 0, "role": "DATA", "label": null}, {"idx": 1, "def": 5, "role": "DATA", "label": null}, {"idx": 2, "def": 7, "role": "DATA", "label": null}], "proj": null}, + {"id": 9, "label": "If", "type": null, "kind": "CTRL", "edges": [{"idx": 0, "def": 4, "role": "CTRL", "label": null}, {"idx": 1, "def": 8, "role": "DATA", "label": null}], "proj": null}, + {"id": 10, "label": "False", "type": null, "kind": "CTRL", "edges": [{"idx": 0, "def": 9, "role": "CTRL", "label": null}], "proj": {"par": 9, "idx": 1}}, + {"id": 13, "label": "#2", "type": null, "kind": "DATA", "edges": [], "proj": null}, + {"id": 14, "label": "+", "type": null, "kind": "DATA", "edges": [{"idx": 0, "def": 0, "role": "DATA", "label": null}, {"idx": 1, "def": 5, "role": "DATA", "label": null}, {"idx": 2, "def": 13, "role": "DATA", "label": null}], "proj": null}, + {"id": 15, "label": "#3", "type": null, "kind": "DATA", "edges": [], "proj": null}, + {"id": 16, "label": "-", "type": null, "kind": "DATA", "edges": [{"idx": 0, "def": 0, "role": "DATA", "label": null}, {"idx": 1, "def": 5, "role": "DATA", "label": null}, {"idx": 2, "def": 15, "role": "DATA", "label": null}], "proj": null}, + {"id": 17, "label": "Region", "type": null, "kind": "REGION", "edges": [{"idx": 0, "def": 0, "role": "DATA", "label": null}, {"idx": 1, "def": 6, "role": "CTRL", "label": null}, {"idx": 2, "def": 10, "role": "CTRL", "label": null}], "proj": null}, + {"id": 18, "label": "φ_a", "type": null, "kind": "PHI", "edges": [{"idx": 0, "def": 17, "role": "ASSOC", "label": null}, {"idx": 1, "def": 14, "role": "DATA", "label": null}, {"idx": 2, "def": 16, "role": "DATA", "label": null}], "proj": null} + ], + "groups": [ + {"id": 9, "par": 0, "nodes": [6, 8, 9, 10, 14, 16, 17, 18]} + ] +} diff --git a/chapter05/docs/05-graph2.svg b/chapter05/docs/05-graph2.svg index d5e48a9e..bd06978a 100644 --- a/chapter05/docs/05-graph2.svg +++ b/chapter05/docs/05-graph2.svg @@ -1,229 +1,125 @@ - - - - - - -chapter05 - - -cluster_Nodes - - - -cluster_Scope1_0 - - - -cluster_Scope1_1 - - - - -Start2 - - -Start - - - -$ctrl - -arg - - - -Con_7 - -#1 - - - -EQNode8 - -== - - - -EQNode8->Start2:p1 - - -1 - - - -EQNode8->Con_7 - - -2 - - - -If9 - - -If - - - -True - - -False - - - -If9->Start2:p0 - - -0 - - - -If9->EQNode8 - - -1 - - - -Con_13 - -#2 - - - -Add14 - -+ - - - -Add14->Start2:p1 - - -1 - - - -Add14->Con_13 - - -2 - - - -Con_15 - -#3 - - - -Sub16 - -- - - - -Sub16->Start2:p1 - - -1 - - - -Sub16->Con_15 - - -2 - - - -Region17 - -Region - - - -Region17->If9:p0 - - -1 - - - -Region17->If9:p1 - - -2 - - - -Phi_a18 - -φ_a - - - -Phi_a18->Add14 - - -1 - - - -Phi_a18->Sub16 - - -2 - - - -Phi_a18->Region17 - - -0 - - - -Scope1_0 - - -0 - -$ctrl - -arg - - - -Scope1_0:Scope1_0_arg->Start2:p1 - - - - - -Scope1_0:Scope1_0_$ctrl->Region17 - - - - - -Scope1_1 - - -1 - -a - - - -Scope1_1:Scope1_1_a->Phi_a18 - - - - - +#1[0] → #17 · ASSOC · 0: $ctrl#1[1] → #5 · ASSOC · 0: arg#1[2] → #18 · ASSOC · 1: a#8[1] → #5 · DATA#8[2] → #7 · DATA#9[0] → #4 · CTRL#9[1] → #8 · DATA#14[1] → #5 · DATA#14[2] → #13 · DATA#16[1] → #5 · DATA#16[2] → #15 · DATA#17[1] → #6 · CTRL#17[2] → #10 · CTRL#18[1] → #14 · DATA#18[2] → #16 · DATAScope  #1#1 Scope +Type not computed + +[0] → #17 ASSOC 0: $ctrl +[1] → #5 ASSOC 0: arg +[2] → #18 ASSOC 1: a0: $ctrl0: arg1: a012Start  #2#2 Start +Type not computed + +$ctrl  #4/0#4 $ctrl +Projection 0 of #2 +Type not computed + +[0] → #2 CTRLarg  #5/1#5 arg +Projection 1 of #2 +Type not computed + +[0] → #2 DATATrue  #6/0#6 True +Projection 0 of #9 +Type not computed + +[0] → #9 CTRL#1  #7#7 #1 +Type not computed + +==  #8#8 == +Type not computed + +[0] → — DATA +[1] → #5 DATA +[2] → #7 DATA012If  #9#9 If +Type not computed + +[0] → #4 CTRL +[1] → #8 DATA01False  #10/1#10 False +Projection 1 of #9 +Type not computed + +[0] → #9 CTRL#2  #13#13 #2 +Type not computed + ++  #14#14 + +Type not computed + +[0] → — DATA +[1] → #5 DATA +[2] → #13 DATA012#3  #15#15 #3 +Type not computed + +-  #16#16 - +Type not computed + +[0] → — DATA +[1] → #5 DATA +[2] → #15 DATA012Region  #17#17 Region +Type not computed + +[0] → — DATA +[1] → #6 CTRL +[2] → #10 CTRL012φ_a  #18#18 φ_a +Type not computed + +[0] → #17 ASSOC +[1] → #14 DATA +[2] → #16 DATA[0] → #17012If  #9If · 8 nodes−Fold region diff --git a/chapter05/docs/05-graph3.json b/chapter05/docs/05-graph3.json new file mode 100644 index 00000000..16d74821 --- /dev/null +++ b/chapter05/docs/05-graph3.json @@ -0,0 +1,28 @@ +{ + "ver": 1, + "comp": "chapter05/docs/05-graph3.svg", + "step": 1, + "roots": [], + "scope": 0, + "nodes": [ + {"id": 1, "label": "$ctrl", "type": null, "kind": "CTRL", "edges": [{"idx": 0, "def": 2, "role": "CTRL", "label": null}], "proj": {"par": 2, "idx": 0}}, + {"id": 2, "label": "Start", "type": null, "kind": "CTRL", "edges": [], "proj": null}, + {"id": 3, "label": "Stop", "type": null, "kind": "STOP", "edges": [{"idx": 0, "def": 19, "role": "CTRL", "label": null}], "proj": null}, + {"id": 4, "label": "arg", "type": null, "kind": "DATA", "edges": [{"idx": 0, "def": 2, "role": "DATA", "label": null}], "proj": {"par": 2, "idx": 1}}, + {"id": 5, "label": "True", "type": null, "kind": "CTRL", "edges": [{"idx": 0, "def": 9, "role": "CTRL", "label": null}], "proj": {"par": 9, "idx": 0}}, + {"id": 6, "label": "False", "type": null, "kind": "CTRL", "edges": [{"idx": 0, "def": 9, "role": "CTRL", "label": null}], "proj": {"par": 9, "idx": 1}}, + {"id": 7, "label": "#1", "type": null, "kind": "DATA", "edges": [], "proj": null}, + {"id": 8, "label": "==", "type": null, "kind": "DATA", "edges": [{"idx": 0, "def": 0, "role": "DATA", "label": null}, {"idx": 1, "def": 4, "role": "DATA", "label": null}, {"idx": 2, "def": 7, "role": "DATA", "label": null}], "proj": null}, + {"id": 9, "label": "If", "type": null, "kind": "CTRL", "edges": [{"idx": 0, "def": 1, "role": "CTRL", "label": null}, {"idx": 1, "def": 8, "role": "DATA", "label": null}], "proj": null}, + {"id": 13, "label": "#2", "type": null, "kind": "DATA", "edges": [], "proj": null}, + {"id": 14, "label": "+", "type": null, "kind": "DATA", "edges": [{"idx": 0, "def": 0, "role": "DATA", "label": null}, {"idx": 1, "def": 4, "role": "DATA", "label": null}, {"idx": 2, "def": 13, "role": "DATA", "label": null}], "proj": null}, + {"id": 15, "label": "#3", "type": null, "kind": "DATA", "edges": [], "proj": null}, + {"id": 16, "label": "-", "type": null, "kind": "DATA", "edges": [{"idx": 0, "def": 0, "role": "DATA", "label": null}, {"idx": 1, "def": 4, "role": "DATA", "label": null}, {"idx": 2, "def": 15, "role": "DATA", "label": null}], "proj": null}, + {"id": 17, "label": "Region", "type": null, "kind": "REGION", "edges": [{"idx": 0, "def": 0, "role": "DATA", "label": null}, {"idx": 1, "def": 5, "role": "CTRL", "label": null}, {"idx": 2, "def": 6, "role": "CTRL", "label": null}], "proj": null}, + {"id": 18, "label": "φ_a", "type": null, "kind": "PHI", "edges": [{"idx": 0, "def": 17, "role": "ASSOC", "label": null}, {"idx": 1, "def": 14, "role": "DATA", "label": null}, {"idx": 2, "def": 16, "role": "DATA", "label": null}], "proj": null}, + {"id": 19, "label": "Return", "type": null, "kind": "CTRL", "edges": [{"idx": 0, "def": 17, "role": "CTRL", "label": null}, {"idx": 1, "def": 18, "role": "DATA", "label": null}], "proj": null} + ], + "groups": [ + {"id": 9, "par": 0, "nodes": [5, 6, 8, 9, 14, 16, 17, 18]} + ] +} diff --git a/chapter05/docs/05-graph3.svg b/chapter05/docs/05-graph3.svg index 855fdc2c..50255072 100644 --- a/chapter05/docs/05-graph3.svg +++ b/chapter05/docs/05-graph3.svg @@ -1,216 +1,127 @@ - - - - - - -chapter05 - - -cluster_Nodes - - - - -Start2 - - -Start - - - -$ctrl - -arg - - - -Stop3 - -Stop - - - -Return19 - -Return - - - -Stop3->Return19 - - -0 - - - -Con_7 - -#1 - - - -EQNode8 - -== - - - -EQNode8->Start2:p1 - - -1 - - - -EQNode8->Con_7 - - -2 - - - -If9 - - -If - - - -True - - -False - - - -If9->Start2:p0 - - -0 - - - -If9->EQNode8 - - -1 - - - -Con_13 - -#2 - - - -Add14 - -+ - - - -Add14->Start2:p1 - - -1 - - - -Add14->Con_13 - - -2 - - - -Con_15 - -#3 - - - -Sub16 - -- - - - -Sub16->Start2:p1 - - -1 - - - -Sub16->Con_15 - - -2 - - - -Region17 - -Region - - - -Region17->If9:p0 - - -1 - - - -Region17->If9:p1 - - -2 - - - -Phi_a18 - -φ_a - - - -Phi_a18->Add14 - - -1 - - - -Phi_a18->Sub16 - - -2 - - - -Phi_a18->Region17 - - -0 - - - -Return19->Region17 - - -0 - - - -Return19->Phi_a18 - - -1 - - - +#3[0] → #19 · CTRL#8[1] → #4 · DATA#8[2] → #7 · DATA#9[0] → #1 · CTRL#9[1] → #8 · DATA#14[1] → #4 · DATA#14[2] → #13 · DATA#16[1] → #4 · DATA#16[2] → #15 · DATA#17[1] → #5 · CTRL#17[2] → #6 · CTRL#18[1] → #14 · DATA#18[2] → #16 · DATA#19[0] → #17 · CTRL#19[1] → #18 · DATA$ctrl  #1/0#1 $ctrl +Projection 0 of #2 +Type not computed + +[0] → #2 CTRLStart  #2#2 Start +Type not computed + +Stop  #3#3 Stop +Type not computed + +[0] → #19 CTRL0arg  #4/1#4 arg +Projection 1 of #2 +Type not computed + +[0] → #2 DATATrue  #5/0#5 True +Projection 0 of #9 +Type not computed + +[0] → #9 CTRLFalse  #6/1#6 False +Projection 1 of #9 +Type not computed + +[0] → #9 CTRL#1  #7#7 #1 +Type not computed + +==  #8#8 == +Type not computed + +[0] → — DATA +[1] → #4 DATA +[2] → #7 DATA012If  #9#9 If +Type not computed + +[0] → #1 CTRL +[1] → #8 DATA01#2  #13#13 #2 +Type not computed + ++  #14#14 + +Type not computed + +[0] → — DATA +[1] → #4 DATA +[2] → #13 DATA012#3  #15#15 #3 +Type not computed + +-  #16#16 - +Type not computed + +[0] → — DATA +[1] → #4 DATA +[2] → #15 DATA012Region  #17#17 Region +Type not computed + +[0] → — DATA +[1] → #5 CTRL +[2] → #6 CTRL012φ_a  #18#18 φ_a +Type not computed + +[0] → #17 ASSOC +[1] → #14 DATA +[2] → #16 DATA[0] → #17012Return  #19#19 Return +Type not computed + +[0] → #17 CTRL +[1] → #18 DATA01If  #9If · 8 nodes−Fold region diff --git a/chapter05/docs/05-graph4.json b/chapter05/docs/05-graph4.json new file mode 100644 index 00000000..36527f8d --- /dev/null +++ b/chapter05/docs/05-graph4.json @@ -0,0 +1,28 @@ +{ + "ver": 1, + "comp": "chapter05/docs/05-graph4.svg", + "step": 1, + "roots": [], + "scope": 0, + "nodes": [ + {"id": 1, "label": "$ctrl", "type": null, "kind": "CTRL", "edges": [{"idx": 0, "def": 2, "role": "CTRL", "label": null}], "proj": {"par": 2, "idx": 0}}, + {"id": 2, "label": "Start", "type": null, "kind": "CTRL", "edges": [], "proj": null}, + {"id": 3, "label": "Stop", "type": null, "kind": "STOP", "edges": [{"idx": 0, "def": 18, "role": "CTRL", "label": null}], "proj": null}, + {"id": 4, "label": "arg", "type": null, "kind": "DATA", "edges": [{"idx": 0, "def": 2, "role": "DATA", "label": null}], "proj": {"par": 2, "idx": 1}}, + {"id": 5, "label": "True", "type": null, "kind": "CTRL", "edges": [{"idx": 0, "def": 10, "role": "CTRL", "label": null}], "proj": {"par": 10, "idx": 0}}, + {"id": 6, "label": "#2", "type": null, "kind": "DATA", "edges": [], "proj": null}, + {"id": 7, "label": "==", "type": null, "kind": "DATA", "edges": [{"idx": 0, "def": 0, "role": "DATA", "label": null}, {"idx": 1, "def": 4, "role": "DATA", "label": null}, {"idx": 2, "def": 6, "role": "DATA", "label": null}], "proj": null}, + {"id": 8, "label": "#1", "type": null, "kind": "DATA", "edges": [], "proj": null}, + {"id": 9, "label": "==", "type": null, "kind": "DATA", "edges": [{"idx": 0, "def": 0, "role": "DATA", "label": null}, {"idx": 1, "def": 4, "role": "DATA", "label": null}, {"idx": 2, "def": 8, "role": "DATA", "label": null}], "proj": null}, + {"id": 10, "label": "If", "type": null, "kind": "CTRL", "edges": [{"idx": 0, "def": 1, "role": "CTRL", "label": null}, {"idx": 1, "def": 9, "role": "DATA", "label": null}], "proj": null}, + {"id": 11, "label": "False", "type": null, "kind": "CTRL", "edges": [{"idx": 0, "def": 10, "role": "CTRL", "label": null}], "proj": {"par": 10, "idx": 1}}, + {"id": 14, "label": "#3", "type": null, "kind": "DATA", "edges": [], "proj": null}, + {"id": 15, "label": "==", "type": null, "kind": "DATA", "edges": [{"idx": 0, "def": 0, "role": "DATA", "label": null}, {"idx": 1, "def": 4, "role": "DATA", "label": null}, {"idx": 2, "def": 14, "role": "DATA", "label": null}], "proj": null}, + {"id": 16, "label": "Region", "type": null, "kind": "REGION", "edges": [{"idx": 0, "def": 0, "role": "DATA", "label": null}, {"idx": 1, "def": 5, "role": "CTRL", "label": null}, {"idx": 2, "def": 11, "role": "CTRL", "label": null}], "proj": null}, + {"id": 17, "label": "φ_a", "type": null, "kind": "PHI", "edges": [{"idx": 0, "def": 16, "role": "ASSOC", "label": null}, {"idx": 1, "def": 15, "role": "DATA", "label": null}, {"idx": 2, "def": 7, "role": "DATA", "label": null}], "proj": null}, + {"id": 18, "label": "Return", "type": null, "kind": "CTRL", "edges": [{"idx": 0, "def": 16, "role": "CTRL", "label": null}, {"idx": 1, "def": 17, "role": "DATA", "label": null}], "proj": null} + ], + "groups": [ + {"id": 10, "par": 0, "nodes": [5, 7, 9, 10, 11, 15, 16, 17]} + ] +} diff --git a/chapter05/docs/05-graph4.svg b/chapter05/docs/05-graph4.svg index 3fcee500..58f0cb18 100644 --- a/chapter05/docs/05-graph4.svg +++ b/chapter05/docs/05-graph4.svg @@ -1,216 +1,127 @@ - - - - - - -chapter05 - - -cluster_Nodes - - - - -Start2 - - -Start - - - -$ctrl - -arg - - - -Stop3 - -Stop - - - -Return18 - -Return - - - -Stop3->Return18 - - -0 - - - -Con_6 - -#2 - - - -EQNode7 - -== - - - -EQNode7->Start2:p1 - - -1 - - - -EQNode7->Con_6 - - -2 - - - -Con_8 - -#1 - - - -EQNode9 - -== - - - -EQNode9->Start2:p1 - - -1 - - - -EQNode9->Con_8 - - -2 - - - -If10 - - -If - - - -True - - -False - - - -If10->Start2:p0 - - -0 - - - -If10->EQNode9 - - -1 - - - -Con_14 - -#3 - - - -EQNode15 - -== - - - -EQNode15->Start2:p1 - - -1 - - - -EQNode15->Con_14 - - -2 - - - -Region16 - -Region - - - -Region16->If10:p0 - - -1 - - - -Region16->If10:p1 - - -2 - - - -Phi_a17 - -φ_a - - - -Phi_a17->EQNode7 - - -2 - - - -Phi_a17->EQNode15 - - -1 - - - -Phi_a17->Region16 - - -0 - - - -Return18->Region16 - - -0 - - - -Return18->Phi_a17 - - -1 - - - +#3[0] → #18 · CTRL#7[1] → #4 · DATA#7[2] → #6 · DATA#9[1] → #4 · DATA#9[2] → #8 · DATA#10[0] → #1 · CTRL#10[1] → #9 · DATA#15[1] → #4 · DATA#15[2] → #14 · DATA#16[1] → #5 · CTRL#16[2] → #11 · CTRL#17[1] → #15 · DATA#17[2] → #7 · DATA#18[0] → #16 · CTRL#18[1] → #17 · DATA$ctrl  #1/0#1 $ctrl +Projection 0 of #2 +Type not computed + +[0] → #2 CTRLStart  #2#2 Start +Type not computed + +Stop  #3#3 Stop +Type not computed + +[0] → #18 CTRL0arg  #4/1#4 arg +Projection 1 of #2 +Type not computed + +[0] → #2 DATATrue  #5/0#5 True +Projection 0 of #10 +Type not computed + +[0] → #10 CTRL#2  #6#6 #2 +Type not computed + +==  #7#7 == +Type not computed + +[0] → — DATA +[1] → #4 DATA +[2] → #6 DATA012#1  #8#8 #1 +Type not computed + +==  #9#9 == +Type not computed + +[0] → — DATA +[1] → #4 DATA +[2] → #8 DATA012If  #10#10 If +Type not computed + +[0] → #1 CTRL +[1] → #9 DATA01False  #11/1#11 False +Projection 1 of #10 +Type not computed + +[0] → #10 CTRL#3  #14#14 #3 +Type not computed + +==  #15#15 == +Type not computed + +[0] → — DATA +[1] → #4 DATA +[2] → #14 DATA012Region  #16#16 Region +Type not computed + +[0] → — DATA +[1] → #5 CTRL +[2] → #11 CTRL012φ_a  #17#17 φ_a +Type not computed + +[0] → #16 ASSOC +[1] → #15 DATA +[2] → #7 DATA[0] → #16012Return  #18#18 Return +Type not computed + +[0] → #16 CTRL +[1] → #17 DATA01If  #10If · 8 nodes−Fold region diff --git a/chapter05/docs/05-graph5.json b/chapter05/docs/05-graph5.json new file mode 100644 index 00000000..b9dc070b --- /dev/null +++ b/chapter05/docs/05-graph5.json @@ -0,0 +1,27 @@ +{ + "ver": 1, + "comp": "chapter05/docs/05-graph5.svg", + "step": 1, + "roots": [], + "scope": 0, + "nodes": [ + {"id": 1, "label": "$ctrl", "type": null, "kind": "CTRL", "edges": [{"idx": 0, "def": 2, "role": "CTRL", "label": null}], "proj": {"par": 2, "idx": 0}}, + {"id": 2, "label": "Start", "type": null, "kind": "CTRL", "edges": [], "proj": null}, + {"id": 3, "label": "Stop", "type": null, "kind": "STOP", "edges": [{"idx": 0, "def": 21, "role": "CTRL", "label": null}], "proj": null}, + {"id": 4, "label": "arg", "type": null, "kind": "DATA", "edges": [{"idx": 0, "def": 2, "role": "DATA", "label": null}], "proj": {"par": 2, "idx": 1}}, + {"id": 5, "label": "True", "type": null, "kind": "CTRL", "edges": [{"idx": 0, "def": 10, "role": "CTRL", "label": null}], "proj": {"par": 10, "idx": 0}}, + {"id": 6, "label": "#2", "type": null, "kind": "DATA", "edges": [], "proj": null}, + {"id": 7, "label": "False", "type": null, "kind": "CTRL", "edges": [{"idx": 0, "def": 10, "role": "CTRL", "label": null}], "proj": {"par": 10, "idx": 1}}, + {"id": 8, "label": "#1", "type": null, "kind": "DATA", "edges": [], "proj": null}, + {"id": 9, "label": "==", "type": null, "kind": "DATA", "edges": [{"idx": 0, "def": 0, "role": "DATA", "label": null}, {"idx": 1, "def": 4, "role": "DATA", "label": null}, {"idx": 2, "def": 8, "role": "DATA", "label": null}], "proj": null}, + {"id": 10, "label": "If", "type": null, "kind": "CTRL", "edges": [{"idx": 0, "def": 1, "role": "CTRL", "label": null}, {"idx": 1, "def": 9, "role": "DATA", "label": null}], "proj": null}, + {"id": 14, "label": "#3", "type": null, "kind": "DATA", "edges": [], "proj": null}, + {"id": 16, "label": "Region", "type": null, "kind": "REGION", "edges": [{"idx": 0, "def": 0, "role": "DATA", "label": null}, {"idx": 1, "def": 5, "role": "CTRL", "label": null}, {"idx": 2, "def": 7, "role": "CTRL", "label": null}], "proj": null}, + {"id": 19, "label": "φ_a", "type": null, "kind": "PHI", "edges": [{"idx": 0, "def": 16, "role": "ASSOC", "label": null}, {"idx": 1, "def": 14, "role": "DATA", "label": null}, {"idx": 2, "def": 6, "role": "DATA", "label": null}], "proj": null}, + {"id": 20, "label": "==", "type": null, "kind": "DATA", "edges": [{"idx": 0, "def": 0, "role": "DATA", "label": null}, {"idx": 1, "def": 4, "role": "DATA", "label": null}, {"idx": 2, "def": 19, "role": "DATA", "label": null}], "proj": null}, + {"id": 21, "label": "Return", "type": null, "kind": "CTRL", "edges": [{"idx": 0, "def": 16, "role": "CTRL", "label": null}, {"idx": 1, "def": 20, "role": "DATA", "label": null}], "proj": null} + ], + "groups": [ + {"id": 10, "par": 0, "nodes": [5, 7, 9, 10, 16, 19]} + ] +} diff --git a/chapter05/docs/05-graph5.svg b/chapter05/docs/05-graph5.svg index 4f6fa4bd..4d137bda 100644 --- a/chapter05/docs/05-graph5.svg +++ b/chapter05/docs/05-graph5.svg @@ -1,196 +1,122 @@ - - - - - - -chapter05 - - -cluster_Nodes - - - - -Start2 - - -Start - - - -$ctrl - -arg - - - -Stop3 - -Stop - - - -Return21 - -Return - - - -Stop3->Return21 - - -0 - - - -Con_6 - -#2 - - - -Con_8 - -#1 - - - -EQNode9 - -== - - - -EQNode9->Start2:p1 - - -1 - - - -EQNode9->Con_8 - - -2 - - - -If10 - - -If - - - -True - - -False - - - -If10->Start2:p0 - - -0 - - - -If10->EQNode9 - - -1 - - - -Con_14 - -#3 - - - -Region16 - -Region - - - -Region16->If10:p0 - - -1 - - - -Region16->If10:p1 - - -2 - - - -Phi_a19 - -φ_a - - - -Phi_a19->Con_6 - - -2 - - - -Phi_a19->Con_14 - - -1 - - - -Phi_a19->Region16 - - -0 - - - -EQNode20 - -== - - - -EQNode20->Start2:p1 - - -1 - - - -EQNode20->Phi_a19 - - -2 - - - -Return21->Region16 - - -0 - - - -Return21->EQNode20 - - -1 - - - +#3[0] → #21 · CTRL#9[1] → #4 · DATA#9[2] → #8 · DATA#10[0] → #1 · CTRL#10[1] → #9 · DATA#16[1] → #5 · CTRL#16[2] → #7 · CTRL#19[1] → #14 · DATA#19[2] → #6 · DATA#20[1] → #4 · DATA#20[2] → #19 · DATA#21[0] → #16 · CTRL#21[1] → #20 · DATA$ctrl  #1/0#1 $ctrl +Projection 0 of #2 +Type not computed + +[0] → #2 CTRLStart  #2#2 Start +Type not computed + +Stop  #3#3 Stop +Type not computed + +[0] → #21 CTRL0arg  #4/1#4 arg +Projection 1 of #2 +Type not computed + +[0] → #2 DATATrue  #5/0#5 True +Projection 0 of #10 +Type not computed + +[0] → #10 CTRL#2  #6#6 #2 +Type not computed + +False  #7/1#7 False +Projection 1 of #10 +Type not computed + +[0] → #10 CTRL#1  #8#8 #1 +Type not computed + +==  #9#9 == +Type not computed + +[0] → — DATA +[1] → #4 DATA +[2] → #8 DATA012If  #10#10 If +Type not computed + +[0] → #1 CTRL +[1] → #9 DATA01#3  #14#14 #3 +Type not computed + +Region  #16#16 Region +Type not computed + +[0] → — DATA +[1] → #5 CTRL +[2] → #7 CTRL012φ_a  #19#19 φ_a +Type not computed + +[0] → #16 ASSOC +[1] → #14 DATA +[2] → #6 DATA[0] → #16012==  #20#20 == +Type not computed + +[0] → — DATA +[1] → #4 DATA +[2] → #19 DATA012Return  #21#21 Return +Type not computed + +[0] → #16 CTRL +[1] → #20 DATA01If  #10If · 6 nodes−Fold region diff --git a/chapter05/docs/05-graph6.json b/chapter05/docs/05-graph6.json new file mode 100644 index 00000000..1039bb08 --- /dev/null +++ b/chapter05/docs/05-graph6.json @@ -0,0 +1,26 @@ +{ + "ver": 1, + "comp": "chapter05/docs/05-graph6.svg", + "step": 1, + "roots": [], + "scope": 0, + "nodes": [ + {"id": 1, "label": "$ctrl", "type": null, "kind": "CTRL", "edges": [{"idx": 0, "def": 2, "role": "CTRL", "label": null}], "proj": {"par": 2, "idx": 0}}, + {"id": 2, "label": "Start", "type": null, "kind": "CTRL", "edges": [], "proj": null}, + {"id": 3, "label": "Stop", "type": null, "kind": "STOP", "edges": [{"idx": 0, "def": 19, "role": "CTRL", "label": null}], "proj": null}, + {"id": 4, "label": "arg", "type": null, "kind": "DATA", "edges": [{"idx": 0, "def": 2, "role": "DATA", "label": null}], "proj": {"par": 2, "idx": 1}}, + {"id": 5, "label": "True", "type": null, "kind": "CTRL", "edges": [{"idx": 0, "def": 10, "role": "CTRL", "label": null}], "proj": {"par": 10, "idx": 0}}, + {"id": 6, "label": "#3", "type": null, "kind": "DATA", "edges": [], "proj": null}, + {"id": 7, "label": "False", "type": null, "kind": "CTRL", "edges": [{"idx": 0, "def": 10, "role": "CTRL", "label": null}], "proj": {"par": 10, "idx": 1}}, + {"id": 8, "label": "#1", "type": null, "kind": "DATA", "edges": [], "proj": null}, + {"id": 9, "label": "==", "type": null, "kind": "DATA", "edges": [{"idx": 0, "def": 0, "role": "DATA", "label": null}, {"idx": 1, "def": 4, "role": "DATA", "label": null}, {"idx": 2, "def": 8, "role": "DATA", "label": null}], "proj": null}, + {"id": 10, "label": "If", "type": null, "kind": "CTRL", "edges": [{"idx": 0, "def": 1, "role": "CTRL", "label": null}, {"idx": 1, "def": 9, "role": "DATA", "label": null}], "proj": null}, + {"id": 15, "label": "#4", "type": null, "kind": "DATA", "edges": [], "proj": null}, + {"id": 16, "label": "Region", "type": null, "kind": "REGION", "edges": [{"idx": 0, "def": 0, "role": "DATA", "label": null}, {"idx": 1, "def": 5, "role": "CTRL", "label": null}, {"idx": 2, "def": 7, "role": "CTRL", "label": null}], "proj": null}, + {"id": 17, "label": "φ_c", "type": null, "kind": "PHI", "edges": [{"idx": 0, "def": 16, "role": "ASSOC", "label": null}, {"idx": 1, "def": 15, "role": "DATA", "label": null}, {"idx": 2, "def": 6, "role": "DATA", "label": null}], "proj": null}, + {"id": 19, "label": "Return", "type": null, "kind": "CTRL", "edges": [{"idx": 0, "def": 16, "role": "CTRL", "label": null}, {"idx": 1, "def": 17, "role": "DATA", "label": null}], "proj": null} + ], + "groups": [ + {"id": 10, "par": 0, "nodes": [5, 7, 9, 10, 16, 17]} + ] +} diff --git a/chapter05/docs/05-graph6.svg b/chapter05/docs/05-graph6.svg index 71527d7f..831a6a07 100644 --- a/chapter05/docs/05-graph6.svg +++ b/chapter05/docs/05-graph6.svg @@ -1,176 +1,117 @@ - - - - - - -chapter05 - - -cluster_Nodes - - - - -Start2 - - -Start - - - -$ctrl - -arg - - - -Stop3 - -Stop - - - -Return19 - -Return - - - -Stop3->Return19 - - -0 - - - -Con_6 - -#3 - - - -Con_8 - -#1 - - - -EQNode9 - -== - - - -EQNode9->Start2:p1 - - -1 - - - -EQNode9->Con_8 - - -2 - - - -If10 - - -If - - - -True - - -False - - - -If10->Start2:p0 - - -0 - - - -If10->EQNode9 - - -1 - - - -Con_15 - -#4 - - - -Region16 - -Region - - - -Region16->If10:p0 - - -1 - - - -Region16->If10:p1 - - -2 - - - -Phi_c17 - -φ_c - - - -Phi_c17->Con_6 - - -2 - - - -Phi_c17->Con_15 - - -1 - - - -Phi_c17->Region16 - - -0 - - - -Return19->Region16 - - -0 - - - -Return19->Phi_c17 - - -1 - - - +#3[0] → #19 · CTRL#9[1] → #4 · DATA#9[2] → #8 · DATA#10[0] → #1 · CTRL#10[1] → #9 · DATA#16[1] → #5 · CTRL#16[2] → #7 · CTRL#17[1] → #15 · DATA#17[2] → #6 · DATA#19[0] → #16 · CTRL#19[1] → #17 · DATA$ctrl  #1/0#1 $ctrl +Projection 0 of #2 +Type not computed + +[0] → #2 CTRLStart  #2#2 Start +Type not computed + +Stop  #3#3 Stop +Type not computed + +[0] → #19 CTRL0arg  #4/1#4 arg +Projection 1 of #2 +Type not computed + +[0] → #2 DATATrue  #5/0#5 True +Projection 0 of #10 +Type not computed + +[0] → #10 CTRL#3  #6#6 #3 +Type not computed + +False  #7/1#7 False +Projection 1 of #10 +Type not computed + +[0] → #10 CTRL#1  #8#8 #1 +Type not computed + +==  #9#9 == +Type not computed + +[0] → — DATA +[1] → #4 DATA +[2] → #8 DATA012If  #10#10 If +Type not computed + +[0] → #1 CTRL +[1] → #9 DATA01#4  #15#15 #4 +Type not computed + +Region  #16#16 Region +Type not computed + +[0] → — DATA +[1] → #5 CTRL +[2] → #7 CTRL012φ_c  #17#17 φ_c +Type not computed + +[0] → #16 ASSOC +[1] → #15 DATA +[2] → #6 DATA[0] → #16012Return  #19#19 Return +Type not computed + +[0] → #16 CTRL +[1] → #17 DATA01If  #10If · 6 nodes−Fold region diff --git a/chapter05/docs/05-graph7.json b/chapter05/docs/05-graph7.json new file mode 100644 index 00000000..df6cf547 --- /dev/null +++ b/chapter05/docs/05-graph7.json @@ -0,0 +1,31 @@ +{ + "ver": 1, + "comp": "chapter05/docs/05-graph7.svg", + "step": 1, + "roots": [], + "scope": 0, + "nodes": [ + {"id": 1, "label": "$ctrl", "type": null, "kind": "CTRL", "edges": [{"idx": 0, "def": 2, "role": "CTRL", "label": null}], "proj": {"par": 2, "idx": 0}}, + {"id": 2, "label": "Start", "type": null, "kind": "CTRL", "edges": [], "proj": null}, + {"id": 3, "label": "Stop", "type": null, "kind": "STOP", "edges": [{"idx": 0, "def": 51, "role": "CTRL", "label": null}], "proj": null}, + {"id": 4, "label": "arg", "type": null, "kind": "DATA", "edges": [{"idx": 0, "def": 2, "role": "DATA", "label": null}], "proj": {"par": 2, "idx": 1}}, + {"id": 5, "label": "True", "type": null, "kind": "CTRL", "edges": [{"idx": 0, "def": 12, "role": "CTRL", "label": null}], "proj": {"par": 12, "idx": 0}}, + {"id": 6, "label": "False", "type": null, "kind": "CTRL", "edges": [{"idx": 0, "def": 12, "role": "CTRL", "label": null}], "proj": {"par": 12, "idx": 1}}, + {"id": 10, "label": "#1", "type": null, "kind": "DATA", "edges": [], "proj": null}, + {"id": 11, "label": "==", "type": null, "kind": "DATA", "edges": [{"idx": 0, "def": 0, "role": "DATA", "label": null}, {"idx": 1, "def": 4, "role": "DATA", "label": null}, {"idx": 2, "def": 10, "role": "DATA", "label": null}], "proj": null}, + {"id": 12, "label": "If", "type": null, "kind": "CTRL", "edges": [{"idx": 0, "def": 1, "role": "CTRL", "label": null}, {"idx": 1, "def": 11, "role": "DATA", "label": null}], "proj": null}, + {"id": 19, "label": "#2", "type": null, "kind": "DATA", "edges": [], "proj": null}, + {"id": 20, "label": "*", "type": null, "kind": "DATA", "edges": [{"idx": 0, "def": 0, "role": "DATA", "label": null}, {"idx": 1, "def": 4, "role": "DATA", "label": null}, {"idx": 2, "def": 19, "role": "DATA", "label": null}], "proj": null}, + {"id": 31, "label": "Region", "type": null, "kind": "REGION", "edges": [{"idx": 0, "def": 0, "role": "DATA", "label": null}, {"idx": 1, "def": 5, "role": "CTRL", "label": null}, {"idx": 2, "def": 6, "role": "CTRL", "label": null}], "proj": null}, + {"id": 37, "label": "φ_b", "type": null, "kind": "PHI", "edges": [{"idx": 0, "def": 31, "role": "ASSOC", "label": null}, {"idx": 1, "def": 20, "role": "DATA", "label": null}, {"idx": 2, "def": 4, "role": "DATA", "label": null}], "proj": null}, + {"id": 42, "label": "+", "type": null, "kind": "DATA", "edges": [{"idx": 0, "def": 0, "role": "DATA", "label": null}, {"idx": 1, "def": 37, "role": "DATA", "label": null}, {"idx": 2, "def": 4, "role": "DATA", "label": null}], "proj": null}, + {"id": 46, "label": "#4", "type": null, "kind": "DATA", "edges": [], "proj": null}, + {"id": 48, "label": "#5", "type": null, "kind": "DATA", "edges": [], "proj": null}, + {"id": 49, "label": "φ_ab", "type": null, "kind": "PHI", "edges": [{"idx": 0, "def": 31, "role": "ASSOC", "label": null}, {"idx": 1, "def": 46, "role": "DATA", "label": null}, {"idx": 2, "def": 48, "role": "DATA", "label": null}], "proj": null}, + {"id": 50, "label": "+", "type": null, "kind": "DATA", "edges": [{"idx": 0, "def": 0, "role": "DATA", "label": null}, {"idx": 1, "def": 42, "role": "DATA", "label": null}, {"idx": 2, "def": 49, "role": "DATA", "label": null}], "proj": null}, + {"id": 51, "label": "Return", "type": null, "kind": "CTRL", "edges": [{"idx": 0, "def": 31, "role": "CTRL", "label": null}, {"idx": 1, "def": 50, "role": "DATA", "label": null}], "proj": null} + ], + "groups": [ + {"id": 12, "par": 0, "nodes": [5, 6, 11, 12, 20, 31, 37, 49]} + ] +} diff --git a/chapter05/docs/05-graph7.svg b/chapter05/docs/05-graph7.svg index 8ba5ebd6..4ef44b41 100644 --- a/chapter05/docs/05-graph7.svg +++ b/chapter05/docs/05-graph7.svg @@ -1,269 +1,140 @@ - - - - - - -chapter05 - - -cluster_Nodes - - - - -Start2 - - -Start - - - -$ctrl - -arg - - - -Stop3 - -Stop - - - -Return51 - -Return - - - -Stop3->Return51 - - -0 - - - -Phi_b37 - -φ_b - - - -Phi_b37->Start2:p1 - -2 - - - -Mul20 - -* - - - -Phi_b37->Mul20 - - -1 - - - -Region31 - -Region - - - -Phi_b37->Region31 - - -0 - - - -Con_10 - -#1 - - - -Add42 - -+ - - - -Add42->Start2:p1 - - - - -2 - - - -Add42->Phi_b37 - - -1 - - - -EQNode11 - -== - - - -EQNode11->Start2:p1 - - -1 - - - -EQNode11->Con_10 - - -2 - - - -If12 - - -If - - - -True - - -False - - - -If12->Start2:p0 - - -0 - - - -If12->EQNode11 - - -1 - - - -Con_46 - -#4 - - - -Con_48 - -#5 - - - -Phi_ab49 - -φ_ab - - - -Phi_ab49->Con_46 - - -1 - - - -Phi_ab49->Con_48 - - -2 - - - -Phi_ab49->Region31 - - -0 - - - -Add50 - -+ - - - -Add50->Add42 - - -1 - - - -Add50->Phi_ab49 - - -2 - - - -Con_19 - -#2 - - - -Return51->Add50 - - -1 - - - -Return51->Region31 - - -0 - - - -Mul20->Start2:p1 - -1 - - - -Mul20->Con_19 - - -2 - - - -Region31->If12:p0 - - -1 - - - -Region31->If12:p1 - - -2 - - - +#3[0] → #51 · CTRL#11[1] → #4 · DATA#11[2] → #10 · DATA#12[0] → #1 · CTRL#12[1] → #11 · DATA#20[1] → #4 · DATA#20[2] → #19 · DATA#31[1] → #5 · CTRL#31[2] → #6 · CTRL#37[1] → #20 · DATA#37[2] → #4 · DATA#42[1] → #37 · DATA#42[2] → #4 · DATA#49[1] → #46 · DATA#49[2] → #48 · DATA#50[1] → #42 · DATA#50[2] → #49 · DATA#51[0] → #31 · CTRL#51[1] → #50 · DATA$ctrl  #1/0#1 $ctrl +Projection 0 of #2 +Type not computed + +[0] → #2 CTRLStart  #2#2 Start +Type not computed + +Stop  #3#3 Stop +Type not computed + +[0] → #51 CTRL0arg  #4/1#4 arg +Projection 1 of #2 +Type not computed + +[0] → #2 DATATrue  #5/0#5 True +Projection 0 of #12 +Type not computed + +[0] → #12 CTRLFalse  #6/1#6 False +Projection 1 of #12 +Type not computed + +[0] → #12 CTRL#1  #10#10 #1 +Type not computed + +==  #11#11 == +Type not computed + +[0] → — DATA +[1] → #4 DATA +[2] → #10 DATA012If  #12#12 If +Type not computed + +[0] → #1 CTRL +[1] → #11 DATA01#2  #19#19 #2 +Type not computed + +*  #20#20 * +Type not computed + +[0] → — DATA +[1] → #4 DATA +[2] → #19 DATA012Region  #31#31 Region +Type not computed + +[0] → — DATA +[1] → #5 CTRL +[2] → #6 CTRL012φ_b  #37#37 φ_b +Type not computed + +[0] → #31 ASSOC +[1] → #20 DATA +[2] → #4 DATA[0] → #31012+  #42#42 + +Type not computed + +[0] → — DATA +[1] → #37 DATA +[2] → #4 DATA012#4  #46#46 #4 +Type not computed + +#5  #48#48 #5 +Type not computed + +φ_ab  #49#49 φ_ab +Type not computed + +[0] → #31 ASSOC +[1] → #46 DATA +[2] → #48 DATA[0] → #31012+  #50#50 + +Type not computed + +[0] → — DATA +[1] → #42 DATA +[2] → #49 DATA012Return  #51#51 Return +Type not computed + +[0] → #31 CTRL +[1] → #50 DATA01If  #12If · 8 nodes−Fold region diff --git a/chapter05/docs/05-graph8.json b/chapter05/docs/05-graph8.json new file mode 100644 index 00000000..887d1e8a --- /dev/null +++ b/chapter05/docs/05-graph8.json @@ -0,0 +1,45 @@ +{ + "ver": 1, + "comp": "chapter05/docs/05-graph8.svg", + "step": 1, + "roots": [], + "scope": 0, + "nodes": [ + {"id": 1, "label": "Scope", "type": null, "kind": "SCOPE", "edges": [{"idx": 0, "def": 0, "role": "ASSOC", "label": "0: $ctrl"}, {"idx": 1, "def": 6, "role": "ASSOC", "label": "0: arg"}, {"idx": 2, "def": 34, "role": "ASSOC", "label": "1: a"}], "proj": null}, + {"id": 2, "label": "Start", "type": null, "kind": "CTRL", "edges": [], "proj": null}, + {"id": 3, "label": "Stop", "type": null, "kind": "STOP", "edges": [{"idx": 0, "def": 35, "role": "CTRL", "label": null}], "proj": null}, + {"id": 5, "label": "$ctrl", "type": null, "kind": "CTRL", "edges": [{"idx": 0, "def": 2, "role": "CTRL", "label": null}], "proj": {"par": 2, "idx": 0}}, + {"id": 6, "label": "arg", "type": null, "kind": "DATA", "edges": [{"idx": 0, "def": 2, "role": "DATA", "label": null}], "proj": {"par": 2, "idx": 1}}, + {"id": 7, "label": "#1", "type": null, "kind": "DATA", "edges": [], "proj": null}, + {"id": 8, "label": "==", "type": null, "kind": "DATA", "edges": [{"idx": 0, "def": 0, "role": "DATA", "label": null}, {"idx": 1, "def": 6, "role": "DATA", "label": null}, {"idx": 2, "def": 7, "role": "DATA", "label": null}], "proj": null}, + {"id": 9, "label": "If", "type": null, "kind": "CTRL", "edges": [{"idx": 0, "def": 5, "role": "CTRL", "label": null}, {"idx": 1, "def": 8, "role": "DATA", "label": null}], "proj": null}, + {"id": 10, "label": "True", "type": null, "kind": "CTRL", "edges": [{"idx": 0, "def": 9, "role": "CTRL", "label": null}], "proj": {"par": 9, "idx": 0}}, + {"id": 11, "label": "False", "type": null, "kind": "CTRL", "edges": [{"idx": 0, "def": 9, "role": "CTRL", "label": null}], "proj": {"par": 9, "idx": 1}}, + {"id": 12, "label": "True", "type": null, "kind": "CTRL", "edges": [{"idx": 0, "def": 15, "role": "CTRL", "label": null}], "proj": {"par": 15, "idx": 0}}, + {"id": 13, "label": "#2", "type": null, "kind": "DATA", "edges": [], "proj": null}, + {"id": 14, "label": "==", "type": null, "kind": "DATA", "edges": [{"idx": 0, "def": 0, "role": "DATA", "label": null}, {"idx": 1, "def": 6, "role": "DATA", "label": null}, {"idx": 2, "def": 13, "role": "DATA", "label": null}], "proj": null}, + {"id": 15, "label": "If", "type": null, "kind": "CTRL", "edges": [{"idx": 0, "def": 10, "role": "CTRL", "label": null}, {"idx": 1, "def": 14, "role": "DATA", "label": null}], "proj": null}, + {"id": 16, "label": "False", "type": null, "kind": "CTRL", "edges": [{"idx": 0, "def": 15, "role": "CTRL", "label": null}], "proj": {"par": 15, "idx": 1}}, + {"id": 17, "label": "True", "type": null, "kind": "CTRL", "edges": [{"idx": 0, "def": 25, "role": "CTRL", "label": null}], "proj": {"par": 25, "idx": 0}}, + {"id": 18, "label": "False", "type": null, "kind": "CTRL", "edges": [{"idx": 0, "def": 25, "role": "CTRL", "label": null}], "proj": {"par": 25, "idx": 1}}, + {"id": 19, "label": "#2", "type": null, "kind": "DATA", "edges": [], "proj": null}, + {"id": 20, "label": "#3", "type": null, "kind": "DATA", "edges": [], "proj": null}, + {"id": 21, "label": "Region", "type": null, "kind": "REGION", "edges": [{"idx": 0, "def": 0, "role": "DATA", "label": null}, {"idx": 1, "def": 12, "role": "CTRL", "label": null}, {"idx": 2, "def": 16, "role": "CTRL", "label": null}], "proj": null}, + {"id": 22, "label": "φ_a", "type": null, "kind": "PHI", "edges": [{"idx": 0, "def": 21, "role": "ASSOC", "label": null}, {"idx": 1, "def": 19, "role": "DATA", "label": null}, {"idx": 2, "def": 20, "role": "DATA", "label": null}], "proj": null}, + {"id": 23, "label": "#3", "type": null, "kind": "DATA", "edges": [], "proj": null}, + {"id": 24, "label": "==", "type": null, "kind": "DATA", "edges": [{"idx": 0, "def": 0, "role": "DATA", "label": null}, {"idx": 1, "def": 6, "role": "DATA", "label": null}, {"idx": 2, "def": 23, "role": "DATA", "label": null}], "proj": null}, + {"id": 25, "label": "If", "type": null, "kind": "CTRL", "edges": [{"idx": 0, "def": 11, "role": "CTRL", "label": null}, {"idx": 1, "def": 24, "role": "DATA", "label": null}], "proj": null}, + {"id": 29, "label": "#4", "type": null, "kind": "DATA", "edges": [], "proj": null}, + {"id": 30, "label": "#5", "type": null, "kind": "DATA", "edges": [], "proj": null}, + {"id": 31, "label": "Region", "type": null, "kind": "REGION", "edges": [{"idx": 0, "def": 0, "role": "DATA", "label": null}, {"idx": 1, "def": 17, "role": "CTRL", "label": null}, {"idx": 2, "def": 18, "role": "CTRL", "label": null}], "proj": null}, + {"id": 32, "label": "φ_a", "type": null, "kind": "PHI", "edges": [{"idx": 0, "def": 31, "role": "ASSOC", "label": null}, {"idx": 1, "def": 29, "role": "DATA", "label": null}, {"idx": 2, "def": 30, "role": "DATA", "label": null}], "proj": null}, + {"id": 33, "label": "Region", "type": null, "kind": "REGION", "edges": [{"idx": 0, "def": 0, "role": "DATA", "label": null}, {"idx": 1, "def": 21, "role": "CTRL", "label": null}, {"idx": 2, "def": 31, "role": "CTRL", "label": null}], "proj": null}, + {"id": 34, "label": "φ_a", "type": null, "kind": "PHI", "edges": [{"idx": 0, "def": 33, "role": "ASSOC", "label": null}, {"idx": 1, "def": 22, "role": "DATA", "label": null}, {"idx": 2, "def": 32, "role": "DATA", "label": null}], "proj": null}, + {"id": 35, "label": "Return", "type": null, "kind": "CTRL", "edges": [{"idx": 0, "def": 33, "role": "CTRL", "label": null}, {"idx": 1, "def": 34, "role": "DATA", "label": null}], "proj": null} + ], + "groups": [ + {"id": 9, "par": 0, "nodes": [8, 9, 10, 11, 33, 34]}, + {"id": 15, "par": 9, "nodes": [12, 14, 15, 16, 21, 22]}, + {"id": 25, "par": 9, "nodes": [17, 18, 24, 25, 31, 32]} + ] +} diff --git a/chapter05/docs/05-graph8.svg b/chapter05/docs/05-graph8.svg index e5310db4..bf0f8aa0 100644 --- a/chapter05/docs/05-graph8.svg +++ b/chapter05/docs/05-graph8.svg @@ -1,430 +1,188 @@ - - - - - - -chapter05 - - -cluster_Nodes - - - -cluster_Scope1_0 - - - -cluster_Scope1_1 - - - - -Start2 - - -Start - - - -$ctrl - -arg - - - -Stop3 - -Stop - - - -Return35 - -Return - - - -Stop3->Return35 - - -0 - - - -Con_7 - -#1 - - - -EQNode8 - -== - - - -EQNode8->Start2:p1 - - -1 - - - -EQNode8->Con_7 - - -2 - - - -If9 - - -If - - - -True - - -False - - - -If9->Start2:p0 - - -0 - - - -If9->EQNode8 - - -1 - - - -Con_13 - -#2 - - - -EQNode14 - -== - - - -EQNode14->Start2:p1 - - -1 - - - -EQNode14->Con_13 - - -2 - - - -If15 - - -If - - - -True - - -False - - - -If15->If9:p0 - - -0 - - - -If15->EQNode14 - - -1 - - - -Con_19 - -#2 - - - -Con_20 - -#3 - - - -Region21 - -Region - - - -Region21->If15:p0 - - -1 - - - -Region21->If15:p1 - - -2 - - - -Phi_a22 - -φ_a - - - -Phi_a22->Con_19 - - -1 - - - -Phi_a22->Con_20 - - -2 - - - -Phi_a22->Region21 - - -0 - - - -Con_23 - -#3 - - - -EQNode24 - -== - - - -EQNode24->Start2:p1 - - -1 - - - -EQNode24->Con_23 - - -2 - - - -If25 - - -If - - - -True - - -False - - - -If25->If9:p1 - - -0 - - - -If25->EQNode24 - - -1 - - - -Con_29 - -#4 - - - -Con_30 - -#5 - - - -Region31 - -Region - - - -Region31->If25:p0 - - -1 - - - -Region31->If25:p1 - - -2 - - - -Phi_a32 - -φ_a - - - -Phi_a32->Con_29 - - -1 - - - -Phi_a32->Con_30 - - -2 - - - -Phi_a32->Region31 - - -0 - - - -Region33 - -Region - - - -Region33->Region21 - - -1 - - - -Region33->Region31 - - -2 - - - -Phi_a34 - -φ_a - - - -Phi_a34->Phi_a22 - - -1 - - - -Phi_a34->Phi_a32 - - -2 - - - -Phi_a34->Region33 - - -0 - - - -Return35->Region33 - - -0 - - - -Return35->Phi_a34 - - -1 - - - -Scope1_0 - - -0 - -$ctrl - -arg - - - -Scope1_0:Scope1_0_arg->Start2:p1 - - - - - -Scope1_1 - - -1 - -a - - - -Scope1_1:Scope1_1_a->Phi_a34 - - - - - +#1[1] → #6 · ASSOC · 0: arg#1[2] → #34 · ASSOC · 1: a#3[0] → #35 · CTRL#8[1] → #6 · DATA#8[2] → #7 · DATA#9[0] → #5 · CTRL#9[1] → #8 · DATA#14[1] → #6 · DATA#14[2] → #13 · DATA#15[0] → #10 · CTRL#15[1] → #14 · DATA#21[1] → #12 · CTRL#21[2] → #16 · CTRL#22[1] → #19 · DATA#22[2] → #20 · DATA#24[1] → #6 · DATA#24[2] → #23 · DATA#25[0] → #11 · CTRL#25[1] → #24 · DATA#31[1] → #17 · CTRL#31[2] → #18 · CTRL#32[1] → #29 · DATA#32[2] → #30 · DATA#33[1] → #21 · CTRL#33[2] → #31 · CTRL#34[1] → #22 · DATA#34[2] → #32 · DATA#35[0] → #33 · CTRL#35[1] → #34 · DATAScope  #1#1 Scope +Type not computed + +[0] → — ASSOC 0: $ctrl +[1] → #6 ASSOC 0: arg +[2] → #34 ASSOC 1: a0: $ctrl0: arg1: a012Start  #2#2 Start +Type not computed + +Stop  #3#3 Stop +Type not computed + +[0] → #35 CTRL0$ctrl  #5/0#5 $ctrl +Projection 0 of #2 +Type not computed + +[0] → #2 CTRLarg  #6/1#6 arg +Projection 1 of #2 +Type not computed + +[0] → #2 DATA#1  #7#7 #1 +Type not computed + +==  #8#8 == +Type not computed + +[0] → — DATA +[1] → #6 DATA +[2] → #7 DATA012If  #9#9 If +Type not computed + +[0] → #5 CTRL +[1] → #8 DATA01True  #10/0#10 True +Projection 0 of #9 +Type not computed + +[0] → #9 CTRLFalse  #11/1#11 False +Projection 1 of #9 +Type not computed + +[0] → #9 CTRLTrue  #12/0#12 True +Projection 0 of #15 +Type not computed + +[0] → #15 CTRL#2  #13#13 #2 +Type not computed + +==  #14#14 == +Type not computed + +[0] → — DATA +[1] → #6 DATA +[2] → #13 DATA012If  #15#15 If +Type not computed + +[0] → #10 CTRL +[1] → #14 DATA01False  #16/1#16 False +Projection 1 of #15 +Type not computed + +[0] → #15 CTRLTrue  #17/0#17 True +Projection 0 of #25 +Type not computed + +[0] → #25 CTRLFalse  #18/1#18 False +Projection 1 of #25 +Type not computed + +[0] → #25 CTRL#2  #19#19 #2 +Type not computed + +#3  #20#20 #3 +Type not computed + +Region  #21#21 Region +Type not computed + +[0] → — DATA +[1] → #12 CTRL +[2] → #16 CTRL012φ_a  #22#22 φ_a +Type not computed + +[0] → #21 ASSOC +[1] → #19 DATA +[2] → #20 DATA[0] → #21012#3  #23#23 #3 +Type not computed + +==  #24#24 == +Type not computed + +[0] → — DATA +[1] → #6 DATA +[2] → #23 DATA012If  #25#25 If +Type not computed + +[0] → #11 CTRL +[1] → #24 DATA01#4  #29#29 #4 +Type not computed + +#5  #30#30 #5 +Type not computed + +Region  #31#31 Region +Type not computed + +[0] → — DATA +[1] → #17 CTRL +[2] → #18 CTRL012φ_a  #32#32 φ_a +Type not computed + +[0] → #31 ASSOC +[1] → #29 DATA +[2] → #30 DATA[0] → #31012Region  #33#33 Region +Type not computed + +[0] → — DATA +[1] → #21 CTRL +[2] → #31 CTRL012φ_a  #34#34 φ_a +Type not computed + +[0] → #33 ASSOC +[1] → #22 DATA +[2] → #32 DATA[0] → #33012Return  #35#35 Return +Type not computed + +[0] → #33 CTRL +[1] → #34 DATA01If  #9If · 18 nodes−Fold regionIf  #15If · 6 nodes−Fold regionIf  #25If · 6 nodes−Fold region diff --git a/chapter05/docs/05-graph9.json b/chapter05/docs/05-graph9.json new file mode 100644 index 00000000..deb1b540 --- /dev/null +++ b/chapter05/docs/05-graph9.json @@ -0,0 +1,26 @@ +{ + "ver": 1, + "comp": "chapter05/docs/05-graph9.svg", + "step": 1, + "roots": [], + "scope": 0, + "nodes": [ + {"id": 1, "label": "$ctrl", "type": null, "kind": "CTRL", "edges": [{"idx": 0, "def": 2, "role": "CTRL", "label": null}], "proj": {"par": 2, "idx": 0}}, + {"id": 2, "label": "Start", "type": null, "kind": "CTRL", "edges": [], "proj": null}, + {"id": 3, "label": "Stop", "type": null, "kind": "STOP", "edges": [{"idx": 0, "def": 20, "role": "CTRL", "label": null}], "proj": null}, + {"id": 4, "label": "arg", "type": null, "kind": "DATA", "edges": [{"idx": 0, "def": 2, "role": "DATA", "label": null}], "proj": {"par": 2, "idx": 1}}, + {"id": 5, "label": "True", "type": null, "kind": "CTRL", "edges": [{"idx": 0, "def": 10, "role": "CTRL", "label": null}], "proj": {"par": 10, "idx": 0}}, + {"id": 6, "label": "False", "type": null, "kind": "CTRL", "edges": [{"idx": 0, "def": 10, "role": "CTRL", "label": null}], "proj": {"par": 10, "idx": 1}}, + {"id": 8, "label": "1", "type": null, "kind": "DATA", "edges": [], "proj": null}, + {"id": 9, "label": "==", "type": null, "kind": "DATA", "edges": [{"idx": 0, "def": 0, "role": "DATA", "label": null}, {"idx": 1, "def": 4, "role": "DATA", "label": null}, {"idx": 2, "def": 8, "role": "DATA", "label": null}], "proj": null}, + {"id": 10, "label": "If", "type": null, "kind": "CTRL", "edges": [{"idx": 0, "def": 1, "role": "CTRL", "label": null}, {"idx": 1, "def": 9, "role": "DATA", "label": null}], "proj": null}, + {"id": 14, "label": "2", "type": null, "kind": "DATA", "edges": [], "proj": null}, + {"id": 16, "label": "1", "type": null, "kind": "DATA", "edges": [], "proj": null}, + {"id": 17, "label": "Region", "type": null, "kind": "REGION", "edges": [{"idx": 0, "def": 0, "role": "DATA", "label": null}, {"idx": 1, "def": 5, "role": "CTRL", "label": null}, {"idx": 2, "def": 6, "role": "CTRL", "label": null}], "proj": null}, + {"id": 18, "label": "φ_b", "type": null, "kind": "PHI", "edges": [{"idx": 0, "def": 17, "role": "ASSOC", "label": null}, {"idx": 1, "def": 14, "role": "DATA", "label": null}, {"idx": 2, "def": 16, "role": "DATA", "label": null}], "proj": null}, + {"id": 20, "label": "Return", "type": null, "kind": "CTRL", "edges": [{"idx": 0, "def": 17, "role": "CTRL", "label": null}, {"idx": 1, "def": 18, "role": "DATA", "label": null}], "proj": null} + ], + "groups": [ + {"id": 10, "par": 0, "nodes": [5, 6, 9, 10, 17, 18]} + ] +} diff --git a/chapter05/docs/05-graph9.svg b/chapter05/docs/05-graph9.svg index dff4d63f..cc52c5bd 100644 --- a/chapter05/docs/05-graph9.svg +++ b/chapter05/docs/05-graph9.svg @@ -1,174 +1,117 @@ - - - - - - -chapter05 - - -cluster_Nodes - - - - -Start2 - - -Start - - - -$ctrl - -arg - - - -Stop3 - -Stop - - - -Return20 - -Return - - - -Stop3->Return20 - - -0 - - - -Con_8 - -1 - - - -EQ9 - -== - - - -EQ9->Start2:p1 - - -1 - - - -EQ9->Con_8 - - -2 - - - -If10 - - -If - - - -True - - -False - - - -If10->Start2:p0 - - -0 - - - -If10->EQ9 - - -1 - - - -Con_14 - -2 - - - -Con_16 - -1 - - - -Region17 - -Region - - - -Region17->If10:p0 - - -1 - - - -Region17->If10:p1 - - -2 - - - -Phi_b18 - -φ_b - - - -Phi_b18->Con_14 - - -1 - - - -Phi_b18->Con_16 - - -2 - - - -Phi_b18->Region17 - - -0 - - - -Return20->Region17 - - -0 - - - -Return20->Phi_b18 - - -1 - - - \ No newline at end of file +#3[0] → #20 · CTRL#9[1] → #4 · DATA#9[2] → #8 · DATA#10[0] → #1 · CTRL#10[1] → #9 · DATA#17[1] → #5 · CTRL#17[2] → #6 · CTRL#18[1] → #14 · DATA#18[2] → #16 · DATA#20[0] → #17 · CTRL#20[1] → #18 · DATA$ctrl  #1/0#1 $ctrl +Projection 0 of #2 +Type not computed + +[0] → #2 CTRLStart  #2#2 Start +Type not computed + +Stop  #3#3 Stop +Type not computed + +[0] → #20 CTRL0arg  #4/1#4 arg +Projection 1 of #2 +Type not computed + +[0] → #2 DATATrue  #5/0#5 True +Projection 0 of #10 +Type not computed + +[0] → #10 CTRLFalse  #6/1#6 False +Projection 1 of #10 +Type not computed + +[0] → #10 CTRL1  #8#8 1 +Type not computed + +==  #9#9 == +Type not computed + +[0] → — DATA +[1] → #4 DATA +[2] → #8 DATA012If  #10#10 If +Type not computed + +[0] → #1 CTRL +[1] → #9 DATA012  #14#14 2 +Type not computed + +1  #16#16 1 +Type not computed + +Region  #17#17 Region +Type not computed + +[0] → — DATA +[1] → #5 CTRL +[2] → #6 CTRL012φ_b  #18#18 φ_b +Type not computed + +[0] → #17 ASSOC +[1] → #14 DATA +[2] → #16 DATA[0] → #17012Return  #20#20 Return +Type not computed + +[0] → #17 CTRL +[1] → #18 DATA01If  #10If · 6 nodes−Fold region diff --git a/chapter05/docs/Makefile b/chapter05/docs/Makefile index 12659b8f..6fa0f057 100644 --- a/chapter05/docs/Makefile +++ b/chapter05/docs/Makefile @@ -1,12 +1 @@ -GV := $(wildcard *.gv) -SVG := $(patsubst %.gv,%.svg,$(GV)) - -.PHONY: all -all: $(SVG) - -%.svg: %.gv - dot -Tsvg $< > $@ - -.PHONY: clean -clean: - @rm -f $(SVG) +include ../../graph/docs.mk -- cgit v1.2.3