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.
- package/lib/context/file.js +10 -15
- package/lib/context/release.js +10 -14
- package/lib/element.js +3 -3
- package/lib/pass/continuation.js +23 -28
- package/lib/pass/continuationZip.js +31 -38
- package/lib/utilities/breakPoint.js +4 -4
- package/lib/utilities/continuation.js +68 -115
- package/lib/utilities/verification.js +69 -67
- package/lib/utilities/verify.js +5 -5
- package/package.json +2 -3
- package/src/context/file.js +9 -17
- package/src/context/release.js +9 -15
- package/src/element.js +2 -2
- package/src/pass/continuation.js +31 -31
- package/src/pass/continuationZip.js +46 -53
- package/src/utilities/breakPoint.js +4 -3
- package/src/utilities/continuation.js +88 -164
- package/src/utilities/verification.js +84 -77
- package/src/utilities/verify.js +4 -4
- package/lib/utilities/async.js +0 -66
- package/src/utilities/async.js +0 -61
|
@@ -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
|
|
8
|
+
const forward = remainingArguments.pop(),
|
|
9
|
+
back = remainingArguments.pop();
|
|
9
10
|
|
|
10
|
-
return this.visitNode(generalNode, specificNode, ...remainingArguments,
|
|
11
|
+
return this.visitNode(generalNode, specificNode, ...remainingArguments, back, forward);
|
|
11
12
|
}
|
|
12
13
|
|
|
13
14
|
descend(generalChildNodes, specificChildNodes, ...remainingArguments) {
|
|
14
|
-
const
|
|
15
|
+
const forward = remainingArguments.pop(),
|
|
16
|
+
back = remainingArguments.pop(),
|
|
15
17
|
childNodesCongruent = areChildNodesCongruent(generalChildNodes, specificChildNodes);
|
|
16
18
|
|
|
17
19
|
if (!childNodesCongruent) {
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
return continuation(descended, ...remainingArguments);
|
|
20
|
+
return back();
|
|
21
21
|
}
|
|
22
22
|
|
|
23
23
|
return match(generalChildNodes, specificChildNodes, (generalChildNode, specificChildNode, ...remainingArguments) => {
|
|
24
|
-
const
|
|
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,
|
|
29
|
-
}, ...remainingArguments,
|
|
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
|
|
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,
|
|
45
|
+
return this.visitTerminalNode(generalTerminalNode, specificTerminalNode, ...remainingArguments, back, forward);
|
|
44
46
|
}
|
|
45
47
|
|
|
46
48
|
if (generalNodeNonTerminalNode && specificNodeNonTerminalNode) {
|
|
47
49
|
const generalNonTerminalNode = generalNode, ///
|
|
48
|
-
|
|
50
|
+
specificNonTerminalNode = specificNode; ///
|
|
49
51
|
|
|
50
|
-
return this.visitNonTerminalNode(generalNonTerminalNode, specificNonTerminalNode, ...remainingArguments,
|
|
52
|
+
return this.visitNonTerminalNode(generalNonTerminalNode, specificNonTerminalNode, ...remainingArguments, back, forward);
|
|
51
53
|
}
|
|
52
54
|
|
|
53
|
-
|
|
54
|
-
|
|
55
|
-
return continuation(visited, ...remainingArguments);
|
|
55
|
+
return back();
|
|
56
56
|
}
|
|
57
57
|
|
|
58
58
|
visitTerminalNode(generalTerminalNode, specificTerminalNode, ...remainingArguments) { ///
|
|
59
|
-
const
|
|
60
|
-
|
|
59
|
+
const forward = remainingArguments.pop(),
|
|
60
|
+
back = remainingArguments.pop();
|
|
61
61
|
|
|
62
|
-
return
|
|
62
|
+
return forward(...remainingArguments);
|
|
63
63
|
}
|
|
64
64
|
|
|
65
65
|
visitNonTerminalNode(generalNonTerminalNode, specificNonTerminalNode, ...remainingArguments) {
|
|
66
|
-
const
|
|
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
|
|
111
|
-
const
|
|
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
|
-
|
|
104
|
+
if (generalNonTerminalNodeRuleName !== specificNonTerminalNodeRuleName) {
|
|
105
|
+
return back();
|
|
114
106
|
}
|
|
115
107
|
|
|
116
|
-
const
|
|
108
|
+
const generalChildNodes = generalNonTerminalNode.getChildNodes(), ///
|
|
109
|
+
specificChildNodes = specificNonTerminalNode.getChildNodes(); ///
|
|
117
110
|
|
|
118
|
-
return
|
|
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
|
|
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,
|
|
13
|
+
return innerFunction.call(this, ...remainingArguments, context, back, forward);
|
|
13
14
|
});
|
|
14
15
|
});
|
|
15
16
|
};
|