occam-languages 3.0.4 → 3.0.8

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -5,94 +5,69 @@ import { nonTerminalNodeQuery, areChildNodesCongruent } from "../utilities/pass"
5
5
 
6
6
  export default class ContinuationZipPass {
7
7
  run(generalNode, specificNode, ...remainingArguments) {
8
- const continuation = remainingArguments.pop();
8
+ const forward = remainingArguments.pop(),
9
+ back = remainingArguments.pop();
9
10
 
10
- return this.visitNode(generalNode, specificNode, ...remainingArguments, continuation);
11
+ return this.visitNode(generalNode, specificNode, ...remainingArguments, back, forward);
11
12
  }
12
13
 
13
14
  descend(generalChildNodes, specificChildNodes, ...remainingArguments) {
14
- const continuation = remainingArguments.pop(),
15
+ const forward = remainingArguments.pop(),
16
+ back = remainingArguments.pop(),
15
17
  childNodesCongruent = areChildNodesCongruent(generalChildNodes, specificChildNodes);
16
18
 
17
19
  if (!childNodesCongruent) {
18
- const descended = false;
19
-
20
- return continuation(descended, ...remainingArguments);
20
+ return back();
21
21
  }
22
22
 
23
23
  return match(generalChildNodes, specificChildNodes, (generalChildNode, specificChildNode, ...remainingArguments) => {
24
- const continuation = remainingArguments.pop(),
24
+ const forward = remainingArguments.pop(),
25
+ back = remainingArguments.pop(),
25
26
  generalNode = generalChildNode, ///
26
27
  specificNode = specificChildNode; ///
27
28
 
28
- return this.visitNode(generalNode, specificNode, ...remainingArguments, continuation);
29
- }, ...remainingArguments, continuation);
29
+ return this.visitNode(generalNode, specificNode, ...remainingArguments, back, forward);
30
+ }, ...remainingArguments, back, forward);
30
31
  }
31
32
 
32
33
  visitNode(generalNode, specificNode, ...remainingArguments) {
33
- const continuation = remainingArguments.pop(),
34
+ const forward = remainingArguments.pop(),
35
+ back = remainingArguments.pop(),
34
36
  generalNodeTerminalNode = generalNode.isTerminalNode(),
35
37
  specificNodeTerminalNode = specificNode.isTerminalNode(),
36
38
  generalNodeNonTerminalNode = generalNode.isNonTerminalNode(),
37
39
  specificNodeNonTerminalNode = specificNode.isNonTerminalNode();
38
-
40
+
39
41
  if (generalNodeTerminalNode && specificNodeTerminalNode) {
40
42
  const generalTerminalNode = generalNode, ///
41
43
  specificTerminalNode = specificNode; ///
42
44
 
43
- return this.visitTerminalNode(generalTerminalNode, specificTerminalNode, ...remainingArguments, continuation);
45
+ return this.visitTerminalNode(generalTerminalNode, specificTerminalNode, ...remainingArguments, back, forward);
44
46
  }
45
47
 
46
48
  if (generalNodeNonTerminalNode && specificNodeNonTerminalNode) {
47
49
  const generalNonTerminalNode = generalNode, ///
48
- specificNonTerminalNode = specificNode; ///
50
+ specificNonTerminalNode = specificNode; ///
49
51
 
50
- return this.visitNonTerminalNode(generalNonTerminalNode, specificNonTerminalNode, ...remainingArguments, continuation);
52
+ return this.visitNonTerminalNode(generalNonTerminalNode, specificNonTerminalNode, ...remainingArguments, back, forward);
51
53
  }
52
54
 
53
- const visited = false;
54
-
55
- return continuation(visited, ...remainingArguments);
55
+ return back();
56
56
  }
57
57
 
58
58
  visitTerminalNode(generalTerminalNode, specificTerminalNode, ...remainingArguments) { ///
59
- const visited = true,
60
- continuation = remainingArguments.pop();
59
+ const forward = remainingArguments.pop(),
60
+ back = remainingArguments.pop();
61
61
 
62
- return continuation(visited, ...remainingArguments);
62
+ return forward(...remainingArguments);
63
63
  }
64
64
 
65
65
  visitNonTerminalNode(generalNonTerminalNode, specificNonTerminalNode, ...remainingArguments) {
66
- const continuation = remainingArguments.pop();
66
+ const forward = remainingArguments.pop(),
67
+ back = remainingArguments.pop();
67
68
 
68
69
  let { maps } = this.constructor;
69
70
 
70
- maps = [ ///
71
- ...maps,
72
- {
73
- generalNodeQuery: nonTerminalNodeQuery,
74
- specificNodeQuery: nonTerminalNodeQuery,
75
- run: (generalNonTerminalNode, specificNonTerminalNode, ...remainingArguments) => {
76
- const continuation = remainingArguments.pop(),
77
- generalNonTerminalNodeRuleName = generalNonTerminalNode.getRuleName(), ///
78
- specificNonTerminalNodeRuleName = specificNonTerminalNode.getRuleName(); ///
79
-
80
- if (generalNonTerminalNodeRuleName !== specificNonTerminalNodeRuleName) {
81
- const visited = false;
82
-
83
- return continuation(visited, ...remainingArguments);
84
- }
85
-
86
- const generalNonTerminalNodeChildNodes = generalNonTerminalNode.getChildNodes(),
87
- specificNonTerminalNodeChildNodes = specificNonTerminalNode.getChildNodes(),
88
- generalChildNodes = generalNonTerminalNodeChildNodes, ///
89
- specificChildNodes = specificNonTerminalNodeChildNodes; ///
90
-
91
- return this.descend(generalChildNodes, specificChildNodes, ...remainingArguments, continuation);
92
- }
93
- }
94
- ];
95
-
96
71
  let generalNode,
97
72
  specificNode;
98
73
 
@@ -107,14 +82,32 @@ export default class ContinuationZipPass {
107
82
  }
108
83
  }) || null;
109
84
 
110
- if (map === null) {
111
- const visited = false;
85
+ if (map !== null) {
86
+ const { run } = map;
87
+
88
+ return run(generalNode, specificNode, ...remainingArguments, back, forward);
89
+ }
90
+
91
+ generalNode = generalNonTerminalNode; ///
92
+ specificNode = specificNonTerminalNode; ///
93
+
94
+ generalNonTerminalNode = nonTerminalNodeQuery(generalNode);
95
+ specificNonTerminalNode = nonTerminalNodeQuery(specificNode);
96
+
97
+ if ((generalNonTerminalNode === null) || (specificNonTerminalNode === null)) {
98
+ return back();
99
+ }
100
+
101
+ const generalNonTerminalNodeRuleName = generalNonTerminalNode.getRuleName(), ///
102
+ specificNonTerminalNodeRuleName = specificNonTerminalNode.getRuleName(); ///
112
103
 
113
- return continuation(visited, ...remainingArguments);
104
+ if (generalNonTerminalNodeRuleName !== specificNonTerminalNodeRuleName) {
105
+ return back();
114
106
  }
115
107
 
116
- const { run } = map;
108
+ const generalChildNodes = generalNonTerminalNode.getChildNodes(), ///
109
+ specificChildNodes = specificNonTerminalNode.getChildNodes(); ///
117
110
 
118
- return run(generalNode, specificNode, ...remainingArguments, continuation);
111
+ return this.descend(generalChildNodes, specificChildNodes, ...remainingArguments, back, forward);
119
112
  }
120
- }
113
+ }
@@ -4,12 +4,13 @@ import BreakPoint from "../breakPoint";
4
4
 
5
5
  export function breakable(innerFunction) {
6
6
  return function(...remainingArguments) {
7
- const continuation = remainingArguments.pop(),
7
+ const forward = remainingArguments.pop(),
8
+ back = remainingArguments.pop(),
8
9
  context = remainingArguments.pop();
9
10
 
10
- return this.break(context, () => {
11
+ return this.break(context, back, () => {
11
12
  setImmediate(() => {
12
- return innerFunction.call(this, ...remainingArguments, context, continuation);
13
+ return innerFunction.call(this, ...remainingArguments, context, back, forward);
13
14
  });
14
15
  });
15
16
  };