@eagleoutice/flowr 2.2.0 → 2.2.2
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/cli/flowr.js +2 -1
- package/cli/repl/commands/repl-cfg.js +30 -7
- package/cli/repl/commands/repl-dataflow.js +22 -2
- package/cli/repl/commands/repl-normalize.js +22 -2
- package/cli/repl/commands/repl-parse.js +8 -2
- package/cli/repl/core.js +4 -0
- package/cli/repl/server/connection.js +1 -1
- package/cli/script-core/statistics-helper-core.js +1 -1
- package/config.js +8 -1
- package/dataflow/environments/resolve-by-name.js +5 -4
- package/dataflow/extractor.js +1 -1
- package/dataflow/graph/dataflowgraph-builder.d.ts +11 -10
- package/dataflow/graph/dataflowgraph-builder.js +11 -10
- package/dataflow/graph/edge.d.ts +1 -1
- package/dataflow/graph/edge.js +2 -2
- package/dataflow/graph/vertex.d.ts +6 -6
- package/dataflow/graph/vertex.js +5 -5
- package/dataflow/internal/process/functions/call/built-in/built-in-access.js +9 -5
- package/dataflow/internal/process/functions/call/built-in/built-in-source.js +2 -2
- package/documentation/doc-util/doc-cfg.js +2 -2
- package/documentation/doc-util/doc-types.js +3 -3
- package/documentation/print-interface-wiki.js +0 -2
- package/documentation/print-query-wiki.js +54 -0
- package/package.json +8 -6
- package/queries/catalog/call-context-query/call-context-query-executor.js +1 -1
- package/queries/catalog/happens-before-query/happens-before-query-executor.d.ts +3 -0
- package/queries/catalog/happens-before-query/happens-before-query-executor.js +36 -0
- package/queries/catalog/happens-before-query/happens-before-query-format.d.ts +71 -0
- package/queries/catalog/happens-before-query/happens-before-query-format.js +27 -0
- package/queries/catalog/resolve-value-query/resolve-value-query-executor.d.ts +4 -0
- package/queries/catalog/resolve-value-query/resolve-value-query-executor.js +34 -0
- package/queries/catalog/resolve-value-query/resolve-value-query-format.d.ts +72 -0
- package/queries/catalog/resolve-value-query/resolve-value-query-format.js +49 -0
- package/queries/catalog/search-query/search-query-executor.js +0 -4
- package/queries/query.d.ts +119 -1
- package/queries/query.js +5 -1
- package/r-bridge/data/data.d.ts +2 -2
- package/r-bridge/data/data.js +2 -2
- package/r-bridge/lang-4.x/tree-sitter/tree-sitter-normalize.js +46 -29
- package/r-bridge/lang-4.x/tree-sitter/tree-sitter-types.d.ts +4 -1
- package/r-bridge/lang-4.x/tree-sitter/tree-sitter-types.js +3 -0
- package/util/cfg/cfg.d.ts +12 -1
- package/util/cfg/cfg.js +64 -10
- package/util/cfg/happens-before.d.ts +7 -0
- package/util/cfg/happens-before.js +32 -0
- package/util/logic.d.ts +4 -4
- package/util/logic.js +8 -0
- package/util/range.d.ts +21 -0
- package/util/range.js +3 -0
- package/util/version.js +1 -1
|
@@ -0,0 +1,32 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.happensBefore = happensBefore;
|
|
4
|
+
const logic_1 = require("../logic");
|
|
5
|
+
/**
|
|
6
|
+
* Determines if node `a` happens before node `b` in the control flow graph.
|
|
7
|
+
*/
|
|
8
|
+
function happensBefore(cfg, a, b) {
|
|
9
|
+
const visited = new Set();
|
|
10
|
+
/* the first is the id we are currently at, the second one the exit marker of the current largest cd scope */
|
|
11
|
+
const stack = [[b, undefined]];
|
|
12
|
+
while (stack.length > 0) {
|
|
13
|
+
const [current, cd] = stack.pop();
|
|
14
|
+
let useCd = cd;
|
|
15
|
+
if (current === a) {
|
|
16
|
+
return cd ? logic_1.Ternary.Maybe : logic_1.Ternary.Always;
|
|
17
|
+
}
|
|
18
|
+
else if (visited.has(current)) {
|
|
19
|
+
continue;
|
|
20
|
+
}
|
|
21
|
+
else if (cd && (current === cd || visited.has(cd))) {
|
|
22
|
+
useCd = undefined;
|
|
23
|
+
}
|
|
24
|
+
visited.add(current);
|
|
25
|
+
for (const [id, t] of cfg.outgoing(current) ?? []) {
|
|
26
|
+
const marker = t.label === 'CD' ? `${t.caused}-exit` : useCd;
|
|
27
|
+
stack.push([id, useCd ?? marker]);
|
|
28
|
+
}
|
|
29
|
+
}
|
|
30
|
+
return logic_1.Ternary.Never;
|
|
31
|
+
}
|
|
32
|
+
//# sourceMappingURL=happens-before.js.map
|
package/util/logic.d.ts
CHANGED
|
@@ -1,5 +1,5 @@
|
|
|
1
|
-
export declare
|
|
2
|
-
Always =
|
|
3
|
-
Maybe =
|
|
4
|
-
Never =
|
|
1
|
+
export declare enum Ternary {
|
|
2
|
+
Always = "always",
|
|
3
|
+
Maybe = "maybe",
|
|
4
|
+
Never = "never"
|
|
5
5
|
}
|
package/util/logic.js
CHANGED
|
@@ -1,3 +1,11 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.Ternary = void 0;
|
|
4
|
+
// diverging from boolean | maybe requires explicit handling
|
|
5
|
+
var Ternary;
|
|
6
|
+
(function (Ternary) {
|
|
7
|
+
Ternary["Always"] = "always";
|
|
8
|
+
Ternary["Maybe"] = "maybe";
|
|
9
|
+
Ternary["Never"] = "never";
|
|
10
|
+
})(Ternary || (exports.Ternary = Ternary = {}));
|
|
3
11
|
//# sourceMappingURL=logic.js.map
|
package/util/range.d.ts
CHANGED
|
@@ -1,9 +1,27 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* A source position in a file.
|
|
3
|
+
*
|
|
4
|
+
* Please note that some packages like `xmlparsedata` use their own start and end only to break ties
|
|
5
|
+
* (e.g., `xmlparsedata` calculates them on a max col width approximation)
|
|
6
|
+
*/
|
|
1
7
|
export type SourcePosition = [
|
|
2
8
|
/** starts with 1 */
|
|
3
9
|
line: number,
|
|
4
10
|
/** starts with 1 */
|
|
5
11
|
column: number
|
|
6
12
|
];
|
|
13
|
+
/**
|
|
14
|
+
* Describe the start and end {@link SourcePosition|source position} of an element.
|
|
15
|
+
*
|
|
16
|
+
* @see {@link rangeFrom} - to create a range
|
|
17
|
+
* @see {@link mergeRanges} - to merge multiple ranges
|
|
18
|
+
* @see {@link getRangeStart} - to get the start of a range
|
|
19
|
+
* @see {@link getRangeEnd} - to get the end of a range
|
|
20
|
+
* @see {@link rangeStartsCompletelyBefore} - to check if one range starts before another
|
|
21
|
+
* @see {@link rangesOverlap} - to check if two ranges overlap
|
|
22
|
+
* @see {@link addRanges} - to add two ranges
|
|
23
|
+
* @see {@link rangeCompare} - to compare two ranges
|
|
24
|
+
*/
|
|
7
25
|
export type SourceRange = [
|
|
8
26
|
/** inclusive start position */
|
|
9
27
|
startLine: number,
|
|
@@ -36,6 +54,9 @@ export declare function rangeStartsCompletelyBefore([, , r1el, r1ec]: SourceRang
|
|
|
36
54
|
* Checks if the two ranges overlap.
|
|
37
55
|
*/
|
|
38
56
|
export declare function rangesOverlap([r1sl, r1sc, r1el, r1ec]: SourceRange, [r2sl, r2sc, r2el, r2ec]: SourceRange): boolean;
|
|
57
|
+
/**
|
|
58
|
+
* Calculate the component-wise sum of two ranges
|
|
59
|
+
*/
|
|
39
60
|
export declare function addRanges([r1sl, r1sc, r1el, r1ec]: SourceRange, [r2sl, r2sc, r2el, r2ec]: SourceRange): SourceRange;
|
|
40
61
|
/**
|
|
41
62
|
* Provides a comparator for {@link SourceRange}s that sorts them in ascending order.
|
package/util/range.js
CHANGED
|
@@ -45,6 +45,9 @@ function rangeStartsCompletelyBefore([, , r1el, r1ec], [r2sl, r2sc, ,]) {
|
|
|
45
45
|
function rangesOverlap([r1sl, r1sc, r1el, r1ec], [r2sl, r2sc, r2el, r2ec]) {
|
|
46
46
|
return r1sl <= r2el && r2sl <= r1el && r1sc <= r2ec && r2sc <= r1ec;
|
|
47
47
|
}
|
|
48
|
+
/**
|
|
49
|
+
* Calculate the component-wise sum of two ranges
|
|
50
|
+
*/
|
|
48
51
|
function addRanges([r1sl, r1sc, r1el, r1ec], [r2sl, r2sc, r2el, r2ec]) {
|
|
49
52
|
return [r1sl + r2sl, r1sc + r2sc, r1el + r2el, r1ec + r2ec];
|
|
50
53
|
}
|
package/util/version.js
CHANGED
|
@@ -3,7 +3,7 @@ Object.defineProperty(exports, "__esModule", { value: true });
|
|
|
3
3
|
exports.flowrVersion = flowrVersion;
|
|
4
4
|
const semver_1 = require("semver");
|
|
5
5
|
// this is automatically replaced with the current version by release-it
|
|
6
|
-
const version = '2.2.
|
|
6
|
+
const version = '2.2.2';
|
|
7
7
|
function flowrVersion() {
|
|
8
8
|
return new semver_1.SemVer(version);
|
|
9
9
|
}
|