@eagleoutice/flowr 1.3.11 → 1.3.12

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.
Files changed (125) hide show
  1. package/cli/common/scripts-info.d.ts +1 -1
  2. package/package.json +1 -1
  3. package/benchmark/benchmark-slicer.js +0 -223
  4. package/core/pipeline-executor.js +0 -221
  5. package/core/stepping-slicer.js +0 -160
  6. package/core/steps/all/00-parse.js +0 -19
  7. package/core/steps/all/10-normalize.js +0 -21
  8. package/core/steps/all/20-dataflow.js +0 -21
  9. package/core/steps/all/30-slice.js +0 -16
  10. package/core/steps/all/40-reconstruct.js +0 -16
  11. package/core/steps/all/core/00-parse.js +0 -24
  12. package/core/steps/all/core/10-normalize.js +0 -46
  13. package/core/steps/all/core/20-dataflow.js +0 -39
  14. package/core/steps/all/static-slicing/00-slice.js +0 -21
  15. package/core/steps/all/static-slicing/10-reconstruct.js +0 -21
  16. package/core/steps/index.js +0 -21
  17. package/core/steps/input.js +0 -3
  18. package/core/steps/output.js +0 -3
  19. package/core/steps/pipeline/create.js +0 -130
  20. package/core/steps/pipeline/default.js +0 -15
  21. package/core/steps/pipeline/dependency-checker.js +0 -76
  22. package/core/steps/pipeline/index.js +0 -20
  23. package/core/steps/pipeline/invalid-pipeline-error.js +0 -14
  24. package/core/steps/pipeline/pipeline.js +0 -28
  25. package/core/steps/step.js +0 -8
  26. package/core/steps/steps-provider.js +0 -3
  27. package/core/steps/steps.js +0 -35
  28. package/dataflow/common/environments/append.js +0 -48
  29. package/dataflow/common/environments/environment.js +0 -165
  30. package/dataflow/common/environments/index.js +0 -23
  31. package/dataflow/common/environments/overwrite.js +0 -82
  32. package/dataflow/common/environments/register.js +0 -49
  33. package/dataflow/common/environments/resolve-by-name.js +0 -35
  34. package/dataflow/common/environments/scopes.js +0 -6
  35. package/dataflow/common/environments/scoping.js +0 -27
  36. package/dataflow/graph/equal.js +0 -127
  37. package/dataflow/v1/extractor.js +0 -60
  38. package/dataflow/v1/graph/diff.js +0 -206
  39. package/dataflow/v1/graph/edge.js +0 -32
  40. package/dataflow/v1/graph/graph.js +0 -298
  41. package/dataflow/v1/graph/index.js +0 -21
  42. package/dataflow/v1/graph/quads.js +0 -27
  43. package/dataflow/v1/graph/vertex.js +0 -3
  44. package/dataflow/v1/index.js +0 -24
  45. package/dataflow/v1/internal/info.js +0 -16
  46. package/dataflow/v1/internal/linker.js +0 -255
  47. package/dataflow/v1/internal/process/access.js +0 -54
  48. package/dataflow/v1/internal/process/expression-list.js +0 -154
  49. package/dataflow/v1/internal/process/functions/argument.js +0 -46
  50. package/dataflow/v1/internal/process/functions/exit-points.js +0 -125
  51. package/dataflow/v1/internal/process/functions/function-call.js +0 -99
  52. package/dataflow/v1/internal/process/functions/function-definition.js +0 -176
  53. package/dataflow/v1/internal/process/functions/parameter.js +0 -47
  54. package/dataflow/v1/internal/process/if-then-else.js +0 -57
  55. package/dataflow/v1/internal/process/loops/for-loop.js +0 -54
  56. package/dataflow/v1/internal/process/loops/repeat-loop.js +0 -21
  57. package/dataflow/v1/internal/process/loops/while-loop.js +0 -31
  58. package/dataflow/v1/internal/process/operators/assignment.js +0 -129
  59. package/dataflow/v1/internal/process/operators/non-assignment-binary-op.js +0 -25
  60. package/dataflow/v1/internal/process/operators/pipe.js +0 -46
  61. package/dataflow/v1/internal/process/operators/unary-op.js +0 -10
  62. package/dataflow/v1/internal/process/symbol.js +0 -21
  63. package/dataflow/v1/internal/process/uninteresting-leaf.js +0 -9
  64. package/dataflow/v1/processor.js +0 -20
  65. package/dataflow/v2/entry.js +0 -11
  66. package/flowr-1.3.7.tgz +0 -0
  67. package/r-bridge/lang-4.x/ast/parser/xml/common/config.js +0 -16
  68. package/r-bridge/lang-4.x/ast/parser/xml/common/input-format.js +0 -42
  69. package/r-bridge/lang-4.x/ast/parser/xml/common/meta.js +0 -118
  70. package/r-bridge/lang-4.x/ast/parser/xml/common/xml-to-json.js +0 -58
  71. package/r-bridge/lang-4.x/ast/parser/xml/v1/data.js +0 -3
  72. package/r-bridge/lang-4.x/ast/parser/xml/v1/hooks.js +0 -136
  73. package/r-bridge/lang-4.x/ast/parser/xml/v1/index.js +0 -22
  74. package/r-bridge/lang-4.x/ast/parser/xml/v1/internal/access.js +0 -107
  75. package/r-bridge/lang-4.x/ast/parser/xml/v1/internal/control/if-then-else.js +0 -32
  76. package/r-bridge/lang-4.x/ast/parser/xml/v1/internal/control/if-then.js +0 -46
  77. package/r-bridge/lang-4.x/ast/parser/xml/v1/internal/control/index.js +0 -19
  78. package/r-bridge/lang-4.x/ast/parser/xml/v1/internal/expression/expression.js +0 -65
  79. package/r-bridge/lang-4.x/ast/parser/xml/v1/internal/expression/index.js +0 -18
  80. package/r-bridge/lang-4.x/ast/parser/xml/v1/internal/functions/argument.js +0 -74
  81. package/r-bridge/lang-4.x/ast/parser/xml/v1/internal/functions/call.js +0 -149
  82. package/r-bridge/lang-4.x/ast/parser/xml/v1/internal/functions/definition.js +0 -60
  83. package/r-bridge/lang-4.x/ast/parser/xml/v1/internal/functions/index.js +0 -20
  84. package/r-bridge/lang-4.x/ast/parser/xml/v1/internal/functions/parameter.js +0 -64
  85. package/r-bridge/lang-4.x/ast/parser/xml/v1/internal/index.js +0 -27
  86. package/r-bridge/lang-4.x/ast/parser/xml/v1/internal/loops/break.js +0 -24
  87. package/r-bridge/lang-4.x/ast/parser/xml/v1/internal/loops/for.js +0 -72
  88. package/r-bridge/lang-4.x/ast/parser/xml/v1/internal/loops/index.js +0 -22
  89. package/r-bridge/lang-4.x/ast/parser/xml/v1/internal/loops/next.js +0 -24
  90. package/r-bridge/lang-4.x/ast/parser/xml/v1/internal/loops/repeat.js +0 -42
  91. package/r-bridge/lang-4.x/ast/parser/xml/v1/internal/loops/while.js +0 -45
  92. package/r-bridge/lang-4.x/ast/parser/xml/v1/internal/operators/binary.js +0 -162
  93. package/r-bridge/lang-4.x/ast/parser/xml/v1/internal/operators/index.js +0 -20
  94. package/r-bridge/lang-4.x/ast/parser/xml/v1/internal/operators/special.js +0 -24
  95. package/r-bridge/lang-4.x/ast/parser/xml/v1/internal/operators/unary.js +0 -59
  96. package/r-bridge/lang-4.x/ast/parser/xml/v1/internal/other/comment.js +0 -34
  97. package/r-bridge/lang-4.x/ast/parser/xml/v1/internal/other/index.js +0 -18
  98. package/r-bridge/lang-4.x/ast/parser/xml/v1/internal/other/line-directive.js +0 -55
  99. package/r-bridge/lang-4.x/ast/parser/xml/v1/internal/structure/elements.js +0 -159
  100. package/r-bridge/lang-4.x/ast/parser/xml/v1/internal/structure/index.js +0 -20
  101. package/r-bridge/lang-4.x/ast/parser/xml/v1/internal/structure/root.js +0 -34
  102. package/r-bridge/lang-4.x/ast/parser/xml/v1/internal/structure/single-element.js +0 -64
  103. package/r-bridge/lang-4.x/ast/parser/xml/v1/internal/values/index.js +0 -20
  104. package/r-bridge/lang-4.x/ast/parser/xml/v1/internal/values/number.js +0 -56
  105. package/r-bridge/lang-4.x/ast/parser/xml/v1/internal/values/string.js +0 -41
  106. package/r-bridge/lang-4.x/ast/parser/xml/v1/internal/values/symbol.js +0 -56
  107. package/r-bridge/lang-4.x/ast/parser/xml/v1/normalize.js +0 -30
  108. package/r-bridge/lang-4.x/ast/parser/xml/v2/data.js +0 -3
  109. package/r-bridge/lang-4.x/ast/parser/xml/v2/internal/access.js +0 -95
  110. package/r-bridge/lang-4.x/ast/parser/xml/v2/internal/expression.js +0 -99
  111. package/r-bridge/lang-4.x/ast/parser/xml/v2/internal/functions/argument.js +0 -71
  112. package/r-bridge/lang-4.x/ast/parser/xml/v2/internal/operators/binary.js +0 -30
  113. package/r-bridge/lang-4.x/ast/parser/xml/v2/internal/operators/index.js +0 -19
  114. package/r-bridge/lang-4.x/ast/parser/xml/v2/internal/operators/unary.js +0 -35
  115. package/r-bridge/lang-4.x/ast/parser/xml/v2/internal/other/comment.js +0 -25
  116. package/r-bridge/lang-4.x/ast/parser/xml/v2/internal/other/index.js +0 -18
  117. package/r-bridge/lang-4.x/ast/parser/xml/v2/internal/other/line-directive.js +0 -38
  118. package/r-bridge/lang-4.x/ast/parser/xml/v2/internal/root.js +0 -26
  119. package/r-bridge/lang-4.x/ast/parser/xml/v2/internal/single-element.js +0 -63
  120. package/r-bridge/lang-4.x/ast/parser/xml/v2/internal/values/index.js +0 -18
  121. package/r-bridge/lang-4.x/ast/parser/xml/v2/internal/values/number.js +0 -46
  122. package/r-bridge/lang-4.x/ast/parser/xml/v2/internal/values/string.js +0 -33
  123. package/r-bridge/lang-4.x/ast/parser/xml/v2/internal/values/symbol.js +0 -63
  124. package/r-bridge/lang-4.x/ast/parser/xml/v2/normalize.js +0 -25
  125. package/util/summarizer/benchmark/benchmark-summarizer.js +0 -208
@@ -1,46 +0,0 @@
1
- "use strict";
2
- Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.tryNormalizeIfThen = void 0;
4
- const input_format_1 = require("../../../common/input-format");
5
- const structure_1 = require("../structure");
6
- const meta_1 = require("../../../common/meta");
7
- const normalize_1 = require("../../normalize");
8
- const hooks_1 = require("../../hooks");
9
- /**
10
- * Try to parse the construct as a {@link RIfThenElse}.
11
- */
12
- function tryNormalizeIfThen(data, tokens) {
13
- normalize_1.parseLog.trace('trying to parse if-then structure');
14
- if (tokens[0].name !== "IF" /* RawRType.If */) {
15
- normalize_1.parseLog.debug('encountered non-if token for supposed if-then structure');
16
- return (0, hooks_1.executeUnknownHook)(data.hooks.control.onIfThen.unknown, data, tokens);
17
- }
18
- else if (tokens[1].name !== "(" /* RawRType.ParenLeft */) {
19
- throw new input_format_1.XmlParseError(`expected left-parenthesis for if but found ${JSON.stringify(tokens[1])}`);
20
- }
21
- else if (tokens[3].name !== ")" /* RawRType.ParenRight */) {
22
- throw new input_format_1.XmlParseError(`expected right-parenthesis for if but found ${JSON.stringify(tokens[3])}`);
23
- }
24
- tokens = (0, hooks_1.executeHook)(data.hooks.control.onIfThen.before, data, tokens);
25
- const parsedCondition = (0, structure_1.tryNormalizeSingleNode)(data, tokens[2]);
26
- const parsedThen = (0, structure_1.tryNormalizeSingleNode)(data, tokens[4]);
27
- if (parsedCondition.type === "RDelimiter" /* RType.Delimiter */ || parsedThen.type === "RDelimiter" /* RType.Delimiter */) {
28
- throw new input_format_1.XmlParseError(`unexpected missing parts of if, received ${JSON.stringify([parsedCondition, parsedThen])} for ${JSON.stringify(tokens)}`);
29
- }
30
- const { location, content } = (0, meta_1.retrieveMetaStructure)(data.config, tokens[0].content);
31
- const result = {
32
- type: "RIfThenElse" /* RType.IfThenElse */,
33
- condition: parsedCondition,
34
- then: (0, meta_1.ensureExpressionList)(parsedThen),
35
- location,
36
- lexeme: content,
37
- info: {
38
- fullRange: data.currentRange,
39
- additionalTokens: [],
40
- fullLexeme: data.currentLexeme
41
- }
42
- };
43
- return (0, hooks_1.executeHook)(data.hooks.control.onIfThen.after, data, result);
44
- }
45
- exports.tryNormalizeIfThen = tryNormalizeIfThen;
46
- //# sourceMappingURL=if-then.js.map
@@ -1,19 +0,0 @@
1
- "use strict";
2
- var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
3
- if (k2 === undefined) k2 = k;
4
- var desc = Object.getOwnPropertyDescriptor(m, k);
5
- if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
6
- desc = { enumerable: true, get: function() { return m[k]; } };
7
- }
8
- Object.defineProperty(o, k2, desc);
9
- }) : (function(o, m, k, k2) {
10
- if (k2 === undefined) k2 = k;
11
- o[k2] = m[k];
12
- }));
13
- var __exportStar = (this && this.__exportStar) || function(m, exports) {
14
- for (var p in m) if (p !== "default" && !Object.prototype.hasOwnProperty.call(exports, p)) __createBinding(exports, m, p);
15
- };
16
- Object.defineProperty(exports, "__esModule", { value: true });
17
- __exportStar(require("./if-then"), exports);
18
- __exportStar(require("./if-then-else"), exports);
19
- //# sourceMappingURL=index.js.map
@@ -1,65 +0,0 @@
1
- "use strict";
2
- Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.normalizeExpression = void 0;
4
- const input_format_1 = require("../../../common/input-format");
5
- const meta_1 = require("../../../common/meta");
6
- const normalize_1 = require("../../normalize");
7
- const structure_1 = require("../structure");
8
- const functions_1 = require("../functions");
9
- const hooks_1 = require("../../hooks");
10
- const access_1 = require("../access");
11
- const other_1 = require("../other");
12
- const arrays_1 = require("../../../../../../../../util/arrays");
13
- /**
14
- * Returns an expression list if there are multiple children, otherwise returns the single child directly with no expr wrapper
15
- *
16
- * @param data - The data used by the parser (see {@link ParserData})
17
- * @param obj - The json object to extract the meta-information from
18
- */
19
- function normalizeExpression(data, obj) {
20
- normalize_1.parseLog.debug('Parsing expr');
21
- obj = (0, hooks_1.executeHook)(data.hooks.expression.onExpression.before, data, obj);
22
- const { unwrappedObj, content, location } = (0, meta_1.retrieveMetaStructure)(data.config, obj);
23
- const childrenSource = (0, input_format_1.getKeyGuarded)(unwrappedObj, data.config.children);
24
- const typed = (0, meta_1.getWithTokenType)(data.config.tokenMap, childrenSource);
25
- const { others, comments } = (0, structure_1.splitComments)(typed);
26
- const childData = { ...data, currentRange: location, currentLexeme: content };
27
- const maybeFunctionCall = (0, functions_1.tryNormalizeFunctionCall)(childData, others);
28
- if (maybeFunctionCall !== undefined) {
29
- maybeFunctionCall.info.additionalTokens = [...maybeFunctionCall.info.additionalTokens ?? [], ...comments.map(x => (0, other_1.normalizeComment)(data, x.content))];
30
- return maybeFunctionCall;
31
- }
32
- const maybeAccess = (0, access_1.tryNormalizeAccess)(childData, others);
33
- if (maybeAccess !== undefined) {
34
- maybeAccess.info.additionalTokens = [...maybeAccess.info.additionalTokens ?? [], ...comments.map(x => (0, other_1.normalizeComment)(data, x.content))];
35
- return maybeAccess;
36
- }
37
- const maybeFunctionDefinition = (0, functions_1.tryNormalizeFunctionDefinition)(childData, others);
38
- if (maybeFunctionDefinition !== undefined) {
39
- maybeFunctionDefinition.info.additionalTokens = [...maybeFunctionDefinition.info.additionalTokens ?? [], ...comments.map(x => (0, other_1.normalizeComment)(data, x.content))];
40
- return maybeFunctionDefinition;
41
- }
42
- const children = (0, structure_1.normalizeBasedOnType)(childData, childrenSource);
43
- const [delimiters, nodes] = (0, arrays_1.partition)(children, x => x.type === "RDelimiter" /* RType.Delimiter */);
44
- let result;
45
- if (nodes.length === 1) {
46
- result = nodes[0];
47
- result.info.additionalTokens = [...result.info.additionalTokens ?? [], ...delimiters];
48
- }
49
- else {
50
- result = {
51
- type: "RExpressionList" /* RType.ExpressionList */,
52
- location,
53
- children: nodes,
54
- lexeme: content,
55
- info: {
56
- fullRange: childData.currentRange,
57
- additionalTokens: delimiters,
58
- fullLexeme: childData.currentLexeme
59
- }
60
- };
61
- }
62
- return (0, hooks_1.executeHook)(data.hooks.expression.onExpression.after, data, result);
63
- }
64
- exports.normalizeExpression = normalizeExpression;
65
- //# sourceMappingURL=expression.js.map
@@ -1,18 +0,0 @@
1
- "use strict";
2
- var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
3
- if (k2 === undefined) k2 = k;
4
- var desc = Object.getOwnPropertyDescriptor(m, k);
5
- if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
6
- desc = { enumerable: true, get: function() { return m[k]; } };
7
- }
8
- Object.defineProperty(o, k2, desc);
9
- }) : (function(o, m, k, k2) {
10
- if (k2 === undefined) k2 = k;
11
- o[k2] = m[k];
12
- }));
13
- var __exportStar = (this && this.__exportStar) || function(m, exports) {
14
- for (var p in m) if (p !== "default" && !Object.prototype.hasOwnProperty.call(exports, p)) __createBinding(exports, m, p);
15
- };
16
- Object.defineProperty(exports, "__esModule", { value: true });
17
- __exportStar(require("./expression"), exports);
18
- //# sourceMappingURL=index.js.map
@@ -1,74 +0,0 @@
1
- "use strict";
2
- Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.tryToNormalizeArgument = void 0;
4
- const normalize_1 = require("../../normalize");
5
- const meta_1 = require("../../../common/meta");
6
- const hooks_1 = require("../../hooks");
7
- const log_1 = require("../../../../../../../../util/log");
8
- const assert_1 = require("../../../../../../../../util/assert");
9
- const structure_1 = require("../structure");
10
- /**
11
- * Either parses `[expr]` or `[SYMBOL_SUB, EQ_SUB, expr]` as an argument of a function call in R.
12
- * Probably directly called by the function call parser as otherwise, we do not expect to find arguments.
13
- *
14
- * @param data - The data used by the parser (see {@link ParserData})
15
- * @param objs - Either `[expr]` or `[SYMBOL_FORMALS, EQ_FORMALS, expr]`
16
- *
17
- * @returns The parsed argument or `undefined` if the given object is not an argument.
18
- */
19
- function tryToNormalizeArgument(data, objs) {
20
- normalize_1.parseLog.debug('[argument]');
21
- objs = (0, hooks_1.executeHook)(data.hooks.functions.onArgument.before, data, objs);
22
- if (objs.length < 1 || objs.length > 3) {
23
- log_1.log.warn(`Either [expr|value], [SYMBOL_SUB, EQ_SUB], or [SYMBOL_SUB, EQ_SUB, expr], but got: ${objs.map(o => o.name).join(', ')}`);
24
- return (0, hooks_1.executeUnknownHook)(data.hooks.functions.onArgument.unknown, data, objs);
25
- }
26
- const symbolOrExpr = objs[0];
27
- const { location, content } = (0, meta_1.retrieveMetaStructure)(data.config, symbolOrExpr.content);
28
- let parsedValue;
29
- let name;
30
- if (symbolOrExpr.name === "expr" /* RawRType.Expression */) {
31
- name = undefined;
32
- parsedValue = (0, structure_1.tryNormalizeSingleNode)(data, symbolOrExpr);
33
- }
34
- else if (symbolOrExpr.name === "SYMBOL_SUB" /* RawRType.SymbolSub */ || symbolOrExpr.name === "STR_CONST" /* RawRType.StringConst */) {
35
- name = {
36
- type: "RSymbol" /* RType.Symbol */,
37
- location,
38
- content: symbolOrExpr.name === "STR_CONST" /* RawRType.StringConst */ ? content.slice(1, -1) : content,
39
- namespace: undefined,
40
- lexeme: content,
41
- info: {
42
- fullRange: location,
43
- additionalTokens: [],
44
- fullLexeme: content
45
- }
46
- };
47
- parsedValue = parseWithValue(data, objs);
48
- }
49
- else {
50
- log_1.log.warn(`expected symbol or expr for argument, yet received ${objs.map(o => o.name).join(',')}`);
51
- return (0, hooks_1.executeUnknownHook)(data.hooks.functions.onArgument.unknown, data, objs);
52
- }
53
- (0, assert_1.guard)(parsedValue !== undefined && parsedValue?.type !== "RDelimiter" /* RType.Delimiter */, () => `[argument] parsed value must not be undefined, yet: ${JSON.stringify(objs)}`);
54
- const result = {
55
- type: "RArgument" /* RType.Argument */,
56
- location,
57
- lexeme: content,
58
- name,
59
- value: parsedValue ?? undefined,
60
- info: {
61
- fullRange: location,
62
- fullLexeme: content,
63
- additionalTokens: []
64
- }
65
- };
66
- return (0, hooks_1.executeHook)(data.hooks.functions.onArgument.after, data, result);
67
- }
68
- exports.tryToNormalizeArgument = tryToNormalizeArgument;
69
- function parseWithValue(data, objs) {
70
- (0, assert_1.guard)(objs[1].name === "EQ_SUB" /* RawRType.EqualSub */, () => `[arg-default] second element of parameter must be ${"EQ_FORMALS" /* RawRType.EqualFormals */}, but: ${JSON.stringify(objs)}`);
71
- (0, assert_1.guard)(objs.length === 2 || objs[2].name === "expr" /* RawRType.Expression */, () => `[arg-default] third element of parameter must be an Expression or undefined (for 'x=') but: ${JSON.stringify(objs)}`);
72
- return objs[2] ? (0, structure_1.tryNormalizeSingleNode)(data, objs[2]) : null;
73
- }
74
- //# sourceMappingURL=argument.js.map
@@ -1,149 +0,0 @@
1
- "use strict";
2
- Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.tryNormalizeFunctionCall = void 0;
4
- const input_format_1 = require("../../../common/input-format");
5
- const assert_1 = require("../../../../../../../../util/assert");
6
- const meta_1 = require("../../../common/meta");
7
- const arrays_1 = require("../../../../../../../../util/arrays");
8
- const normalize_1 = require("../../normalize");
9
- const values_1 = require("../values");
10
- const hooks_1 = require("../../hooks");
11
- const argument_1 = require("./argument");
12
- const expression_1 = require("../expression");
13
- /**
14
- * Tries to parse the given data as a function call.
15
- *
16
- * @param data - The data used by the parser (see {@link ParserData})
17
- * @param mappedWithName - The json object to extract the meta-information from
18
- *
19
- * @returns The parsed {@link RFunctionCall} (either named or unnamed) or `undefined` if the given construct is not a function call
20
- * May return a {@link RNext} or {@link RBreak} as `next()` and `break()` work as such.
21
- */
22
- function tryNormalizeFunctionCall(data, mappedWithName) {
23
- const fnBase = mappedWithName[0];
24
- if (fnBase.name !== "expr" /* RawRType.Expression */ && fnBase.name !== "expr_or_assign_or_help" /* RawRType.ExprOfAssignOrHelp */) {
25
- normalize_1.parseLog.trace(`expected function call name to be wrapped an expression, yet received ${fnBase.name}`);
26
- return (0, hooks_1.executeUnknownHook)(data.hooks.functions.onFunctionCall.unknown, data, mappedWithName);
27
- }
28
- if (mappedWithName.length < 3 || mappedWithName[1].name !== "(" /* RawRType.ParenLeft */ || mappedWithName[mappedWithName.length - 1].name !== ")" /* RawRType.ParenRight */) {
29
- normalize_1.parseLog.trace('expected function call to have parenthesis for a call, but was not');
30
- return undefined;
31
- }
32
- normalize_1.parseLog.trace('trying to parse function call');
33
- mappedWithName = (0, hooks_1.executeHook)(data.hooks.functions.onFunctionCall.before, data, mappedWithName);
34
- const { unwrappedObj, content, location } = (0, meta_1.retrieveMetaStructure)(data.config, fnBase.content);
35
- const symbolContent = (0, input_format_1.getKeyGuarded)(unwrappedObj, data.config.children);
36
- let result;
37
- const namedSymbolContent = (0, meta_1.getWithTokenType)(data.config.tokenMap, symbolContent);
38
- if (namedSymbolContent.length === 1 && namedSymbolContent[0].name === "STR_CONST" /* RawRType.StringConst */) {
39
- // special handling when someone calls a function by string
40
- result = parseNamedFunctionCall(data, namedSymbolContent, mappedWithName, location, content);
41
- }
42
- else if (namedSymbolContent.findIndex(x => x.name === "SYMBOL_FUNCTION_CALL" /* RawRType.SymbolFunctionCall */) < 0) {
43
- normalize_1.parseLog.trace(`is not named function call, as the name is not of type ${"RFunctionCall" /* RType.FunctionCall */}, but: ${namedSymbolContent.map(n => n.name).join(',')}`);
44
- const mayResult = tryParseUnnamedFunctionCall(data, mappedWithName, location, content);
45
- if (mayResult === undefined) {
46
- return (0, hooks_1.executeUnknownHook)(data.hooks.functions.onFunctionCall.unknown, data, mappedWithName);
47
- }
48
- result = mayResult;
49
- }
50
- else {
51
- result = parseNamedFunctionCall(data, namedSymbolContent, mappedWithName, location, content);
52
- }
53
- return (0, hooks_1.executeHook)(data.hooks.functions.onFunctionCall.after, data, result);
54
- }
55
- exports.tryNormalizeFunctionCall = tryNormalizeFunctionCall;
56
- function parseArguments(mappedWithName, data) {
57
- const argContainer = mappedWithName.slice(1);
58
- (0, assert_1.guard)(argContainer.length > 1 && argContainer[0].name === "(" /* RawRType.ParenLeft */ && argContainer[argContainer.length - 1].name === ")" /* RawRType.ParenRight */, 'expected args in parenthesis');
59
- const splitArgumentsOnComma = (0, arrays_1.splitArrayOn)(argContainer.slice(1, argContainer.length - 1), x => x.name === "," /* RawRType.Comma */);
60
- return splitArgumentsOnComma.map(x => {
61
- normalize_1.parseLog.trace('trying to parse argument');
62
- return (0, argument_1.tryToNormalizeArgument)(data, x);
63
- });
64
- }
65
- function tryParseUnnamedFunctionCall(data, mappedWithName, location, content) {
66
- // maybe remove symbol-content again because I just use the root expr of mapped with name
67
- if (mappedWithName.length < 3) {
68
- normalize_1.parseLog.trace('expected unnamed function call to have 3 elements [like (<func>)], but was not');
69
- return undefined;
70
- }
71
- normalize_1.parseLog.trace('Assuming structure to be a function call');
72
- // we parse an expression to allow function calls
73
- const calledFunction = (0, expression_1.normalizeExpression)(data, mappedWithName[0].content);
74
- const parsedArguments = parseArguments(mappedWithName, data);
75
- if (parsedArguments.length === 0) {
76
- // sadly, next() and break() work
77
- if (calledFunction.type === "RNext" /* RType.Next */) {
78
- return {
79
- type: "RNext" /* RType.Next */,
80
- lexeme: content,
81
- location,
82
- info: {
83
- fullRange: data.currentRange,
84
- additionalTokens: [],
85
- fullLexeme: data.currentLexeme
86
- }
87
- };
88
- }
89
- else if (calledFunction.type === "RBreak" /* RType.Break */) {
90
- return {
91
- type: "RBreak" /* RType.Break */,
92
- lexeme: content,
93
- location,
94
- info: {
95
- fullRange: data.currentRange,
96
- additionalTokens: [],
97
- fullLexeme: data.currentLexeme
98
- }
99
- };
100
- }
101
- }
102
- return {
103
- type: "RFunctionCall" /* RType.FunctionCall */,
104
- flavor: 'unnamed',
105
- location,
106
- lexeme: content,
107
- calledFunction: calledFunction,
108
- arguments: parsedArguments,
109
- info: {
110
- fullRange: data.currentRange,
111
- additionalTokens: [],
112
- fullLexeme: data.currentLexeme
113
- }
114
- };
115
- }
116
- function parseNamedFunctionCall(data, symbolContent, mappedWithName, location, content) {
117
- let functionName;
118
- if (symbolContent.length === 1 && symbolContent[0].name === "STR_CONST" /* RawRType.StringConst */) {
119
- const stringBase = (0, values_1.normalizeString)(data, symbolContent[0].content);
120
- functionName = {
121
- type: "RSymbol" /* RType.Symbol */,
122
- namespace: undefined,
123
- lexeme: stringBase.lexeme,
124
- info: stringBase.info,
125
- location: stringBase.location,
126
- content: stringBase.content.str
127
- };
128
- }
129
- else {
130
- functionName = (0, values_1.tryNormalizeSymbol)(data, symbolContent);
131
- }
132
- (0, assert_1.guard)(functionName !== undefined, 'expected function name to be a symbol, yet received none');
133
- (0, assert_1.guard)(functionName.type === "RSymbol" /* RType.Symbol */, () => `expected function name to be a symbol, yet received ${JSON.stringify(functionName)}`);
134
- const parsedArguments = parseArguments(mappedWithName, data);
135
- return {
136
- type: "RFunctionCall" /* RType.FunctionCall */,
137
- flavor: 'named',
138
- location,
139
- lexeme: content,
140
- functionName,
141
- arguments: parsedArguments,
142
- info: {
143
- fullRange: data.currentRange,
144
- additionalTokens: [],
145
- fullLexeme: data.currentLexeme
146
- }
147
- };
148
- }
149
- //# sourceMappingURL=call.js.map
@@ -1,60 +0,0 @@
1
- "use strict";
2
- Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.tryNormalizeFunctionDefinition = void 0;
4
- const normalize_1 = require("../../normalize");
5
- const hooks_1 = require("../../hooks");
6
- const meta_1 = require("../../../common/meta");
7
- const assert_1 = require("../../../../../../../../util/assert");
8
- const arrays_1 = require("../../../../../../../../util/arrays");
9
- const structure_1 = require("../structure");
10
- const parameter_1 = require("./parameter");
11
- const log_1 = require("../../../../../../../../util/log");
12
- /**
13
- * Tries to parse the given data as a function definition.
14
- *
15
- * @param data - The data used by the parser (see {@link ParserData})
16
- * @param mappedWithName - The json object to extract the meta-information from
17
- *
18
- * @returns The parsed {@link RFunctionDefinition} or `undefined` if the given construct is not a function definition
19
- */
20
- function tryNormalizeFunctionDefinition(data, mappedWithName) {
21
- const fnBase = mappedWithName[0];
22
- if (fnBase.name !== "FUNCTION" /* RawRType.Function */ && fnBase.name !== "\\\\" /* RawRType.Lambda */) {
23
- normalize_1.parseLog.trace(`expected function definition to be identified by keyword, yet received ${fnBase.name}`);
24
- return (0, hooks_1.executeUnknownHook)(data.hooks.functions.onFunctionDefinition.unknown, data, mappedWithName);
25
- }
26
- normalize_1.parseLog.trace('trying to parse function definition');
27
- mappedWithName = (0, hooks_1.executeHook)(data.hooks.functions.onFunctionDefinition.before, data, mappedWithName);
28
- const { content, location } = (0, meta_1.retrieveMetaStructure)(data.config, fnBase.content);
29
- const openParen = mappedWithName[1];
30
- (0, assert_1.guard)(openParen.name === "(" /* RawRType.ParenLeft */, () => `expected opening parenthesis, yet received ${openParen.name}`);
31
- const closingParenIndex = mappedWithName.findIndex(x => x.name === ")" /* RawRType.ParenRight */);
32
- (0, assert_1.guard)(closingParenIndex !== -1, () => `expected closing parenthesis, yet received ${JSON.stringify(mappedWithName)}`);
33
- const splitParameters = (0, arrays_1.splitArrayOn)(mappedWithName.slice(2, closingParenIndex), x => x.name === "," /* RawRType.Comma */);
34
- normalize_1.parseLog.trace(`function definition has ${splitParameters.length} parameters (by comma split)`);
35
- const parameters = splitParameters.map(x => (0, parameter_1.tryNormalizeParameter)(data, x));
36
- if (parameters.some(p => p === undefined)) {
37
- log_1.log.error(`function had unexpected unknown parameters: ${JSON.stringify(parameters.filter(assert_1.isNotUndefined))}, aborting.`);
38
- return (0, hooks_1.executeUnknownHook)(data.hooks.functions.onFunctionDefinition.unknown, data, mappedWithName);
39
- }
40
- normalize_1.parseLog.trace(`function definition retained ${parameters.length} parameters after parsing, moving to body.`);
41
- const bodyStructure = mappedWithName.slice(closingParenIndex + 1);
42
- (0, assert_1.guard)(bodyStructure.length === 1, () => `expected function body to be unique, yet received ${bodyStructure.length}`);
43
- const body = (0, structure_1.normalizeBasedOnType)(data, bodyStructure);
44
- (0, assert_1.guard)(body.length === 1 && body[0].type !== "RDelimiter" /* RType.Delimiter */, () => `expected function body to yield one normalized expression, but ${body.length}`);
45
- const result = {
46
- type: "RFunctionDefinition" /* RType.FunctionDefinition */,
47
- location,
48
- lexeme: content,
49
- parameters: parameters,
50
- body: (0, meta_1.ensureExpressionList)(body[0]),
51
- info: {
52
- fullRange: data.currentRange,
53
- additionalTokens: [],
54
- fullLexeme: data.currentLexeme
55
- }
56
- };
57
- return (0, hooks_1.executeHook)(data.hooks.functions.onFunctionDefinition.after, data, result);
58
- }
59
- exports.tryNormalizeFunctionDefinition = tryNormalizeFunctionDefinition;
60
- //# sourceMappingURL=definition.js.map
@@ -1,20 +0,0 @@
1
- "use strict";
2
- var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
3
- if (k2 === undefined) k2 = k;
4
- var desc = Object.getOwnPropertyDescriptor(m, k);
5
- if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
6
- desc = { enumerable: true, get: function() { return m[k]; } };
7
- }
8
- Object.defineProperty(o, k2, desc);
9
- }) : (function(o, m, k, k2) {
10
- if (k2 === undefined) k2 = k;
11
- o[k2] = m[k];
12
- }));
13
- var __exportStar = (this && this.__exportStar) || function(m, exports) {
14
- for (var p in m) if (p !== "default" && !Object.prototype.hasOwnProperty.call(exports, p)) __createBinding(exports, m, p);
15
- };
16
- Object.defineProperty(exports, "__esModule", { value: true });
17
- __exportStar(require("./call"), exports);
18
- __exportStar(require("./definition"), exports);
19
- /* will not expose argument as we know when to expect arguments and only call them during parsing call/definition */
20
- //# sourceMappingURL=index.js.map
@@ -1,64 +0,0 @@
1
- "use strict";
2
- Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.tryNormalizeParameter = void 0;
4
- const normalize_1 = require("../../normalize");
5
- const meta_1 = require("../../../common/meta");
6
- const hooks_1 = require("../../hooks");
7
- const log_1 = require("../../../../../../../../util/log");
8
- const assert_1 = require("../../../../../../../../util/assert");
9
- const structure_1 = require("../structure");
10
- /**
11
- * Either parses `[SYMBOL_FORMALS]` or `[SYMBOL_FORMALS, EQ_FORMALS, expr]` as a parameter of a function definition in R.
12
- * Probably directly called by the function definition parser as otherwise, we do not expect to find parameters.
13
- *
14
- * @param data - The data used by the parser (see {@link ParserData})
15
- * @param objs - Either `[SYMBOL_FORMALS]` or `[SYMBOL_FORMALS, EQ_FORMALS, expr]`
16
- *
17
- * @returns The parsed parameter or `undefined` if the given object is not a parameter.
18
- */
19
- function tryNormalizeParameter(data, objs) {
20
- normalize_1.parseLog.debug('[parameter]');
21
- objs = (0, hooks_1.executeHook)(data.hooks.functions.onParameter.before, data, objs);
22
- if (objs.length !== 1 && objs.length !== 3) {
23
- log_1.log.warn(`Either [SYMBOL_FORMALS] or [SYMBOL_FORMALS, EQ_FORMALS, expr], but got: ${JSON.stringify(objs)}`);
24
- return (0, hooks_1.executeUnknownHook)(data.hooks.functions.onParameter.unknown, data, objs);
25
- }
26
- const symbol = objs[0];
27
- if (symbol.name !== "SYMBOL_FORMALS" /* RawRType.SymbolFormals */) {
28
- log_1.log.warn(`expected symbol for parameter, yet received ${JSON.stringify(objs)}`);
29
- return (0, hooks_1.executeUnknownHook)(data.hooks.functions.onParameter.unknown, data, objs);
30
- }
31
- const defaultValue = objs.length === 3 ? parseWithDefaultValue(data, objs) : undefined;
32
- const { location, content } = (0, meta_1.retrieveMetaStructure)(data.config, symbol.content);
33
- const result = {
34
- type: "RParameter" /* RType.Parameter */,
35
- location,
36
- special: content === '...',
37
- lexeme: content,
38
- name: {
39
- type: "RSymbol" /* RType.Symbol */,
40
- location, content,
41
- namespace: undefined,
42
- lexeme: content,
43
- info: {
44
- fullRange: location,
45
- additionalTokens: [],
46
- fullLexeme: content
47
- }
48
- },
49
- defaultValue: defaultValue?.type === "RDelimiter" /* RType.Delimiter */ ? undefined : defaultValue,
50
- info: {
51
- fullRange: location,
52
- fullLexeme: content,
53
- additionalTokens: defaultValue?.type === "RDelimiter" /* RType.Delimiter */ ? [defaultValue] : []
54
- }
55
- };
56
- return (0, hooks_1.executeHook)(data.hooks.functions.onParameter.after, data, result);
57
- }
58
- exports.tryNormalizeParameter = tryNormalizeParameter;
59
- function parseWithDefaultValue(data, objs) {
60
- (0, assert_1.guard)(objs[1].name === "EQ_FORMALS" /* RawRType.EqualFormals */, () => `[arg-default] second element of parameter must be ${"EQ_FORMALS" /* RawRType.EqualFormals */}, but: ${JSON.stringify(objs)}`);
61
- (0, assert_1.guard)(objs[2].name === "expr" /* RawRType.Expression */, () => `[arg-default] third element of parameter must be an Expression but: ${JSON.stringify(objs)}`);
62
- return (0, structure_1.tryNormalizeSingleNode)(data, objs[2]);
63
- }
64
- //# sourceMappingURL=parameter.js.map
@@ -1,27 +0,0 @@
1
- "use strict";
2
- var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
3
- if (k2 === undefined) k2 = k;
4
- var desc = Object.getOwnPropertyDescriptor(m, k);
5
- if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
6
- desc = { enumerable: true, get: function() { return m[k]; } };
7
- }
8
- Object.defineProperty(o, k2, desc);
9
- }) : (function(o, m, k, k2) {
10
- if (k2 === undefined) k2 = k;
11
- o[k2] = m[k];
12
- }));
13
- var __exportStar = (this && this.__exportStar) || function(m, exports) {
14
- for (var p in m) if (p !== "default" && !Object.prototype.hasOwnProperty.call(exports, p)) __createBinding(exports, m, p);
15
- };
16
- Object.defineProperty(exports, "__esModule", { value: true });
17
- __exportStar(require("./loops"), exports);
18
- __exportStar(require("./other"), exports);
19
- __exportStar(require("./values"), exports);
20
- __exportStar(require("./control"), exports);
21
- __exportStar(require("./functions"), exports);
22
- __exportStar(require("./operators"), exports);
23
- __exportStar(require("./structure"), exports);
24
- __exportStar(require("./expression"), exports);
25
- __exportStar(require("../../common/meta"), exports);
26
- __exportStar(require("../../common/xml-to-json"), exports);
27
- //# sourceMappingURL=index.js.map
@@ -1,24 +0,0 @@
1
- "use strict";
2
- Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.normalizeBreak = void 0;
4
- const normalize_1 = require("../../normalize");
5
- const hooks_1 = require("../../hooks");
6
- const meta_1 = require("../../../common/meta");
7
- function normalizeBreak(data, obj) {
8
- normalize_1.parseLog.debug(`[break] try: ${JSON.stringify(obj)}`);
9
- obj = (0, hooks_1.executeHook)(data.hooks.loops.onBreak.before, data, obj);
10
- const { location, content } = (0, meta_1.retrieveMetaStructure)(data.config, obj);
11
- const result = {
12
- type: "RBreak" /* RType.Break */,
13
- location,
14
- lexeme: content,
15
- info: {
16
- fullRange: location,
17
- additionalTokens: [],
18
- fullLexeme: content
19
- }
20
- };
21
- return (0, hooks_1.executeHook)(data.hooks.loops.onBreak.after, data, result);
22
- }
23
- exports.normalizeBreak = normalizeBreak;
24
- //# sourceMappingURL=break.js.map
@@ -1,72 +0,0 @@
1
- "use strict";
2
- Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.tryNormalizeFor = void 0;
4
- const input_format_1 = require("../../../common/input-format");
5
- const meta_1 = require("../../../common/meta");
6
- const normalize_1 = require("../../normalize");
7
- const assert_1 = require("../../../../../../../../util/assert");
8
- const values_1 = require("../values");
9
- const structure_1 = require("../structure");
10
- const hooks_1 = require("../../hooks");
11
- const other_1 = require("../other");
12
- function tryNormalizeFor(data, forToken, head, body) {
13
- // funny, for does not use top-level parenthesis
14
- if (forToken.name !== "FOR" /* RawRType.For */) {
15
- normalize_1.parseLog.debug('encountered non-for token for supposed for-loop structure');
16
- return (0, hooks_1.executeUnknownHook)(data.hooks.loops.onForLoop.unknown, data, { forToken, condition: head, body });
17
- }
18
- else if (head.name !== "forcond" /* RawRType.ForCondition */) {
19
- throw new input_format_1.XmlParseError(`expected condition for for-loop but found ${JSON.stringify(head)}`);
20
- }
21
- else if (body.name !== "expr" /* RawRType.Expression */ && body.name !== "expr_or_assign_or_help" /* RawRType.ExprOfAssignOrHelp */) {
22
- throw new input_format_1.XmlParseError(`expected expr body for for-loop but found ${JSON.stringify(body)}`);
23
- }
24
- normalize_1.parseLog.debug('trying to parse for-loop');
25
- const newParseData = { ...data, data, currentRange: undefined, currentLexeme: undefined };
26
- ({ forToken, condition: head, body } = (0, hooks_1.executeHook)(data.hooks.loops.onForLoop.before, data, { forToken, condition: head, body }));
27
- const { variable: parsedVariable, vector: parsedVector, comments } = normalizeForHead(newParseData, head.content);
28
- const parseBody = (0, structure_1.tryNormalizeSingleNode)(newParseData, body);
29
- if (parsedVariable === undefined ||
30
- parsedVector === undefined ||
31
- parseBody.type === "RDelimiter" /* RType.Delimiter */) {
32
- throw new input_format_1.XmlParseError(`unexpected under-sided for-loop, received ${JSON.stringify([
33
- parsedVariable,
34
- parsedVariable,
35
- parseBody,
36
- ])}`);
37
- }
38
- const { location, content } = (0, meta_1.retrieveMetaStructure)(data.config, forToken.content);
39
- const result = {
40
- type: "RForLoop" /* RType.ForLoop */,
41
- variable: parsedVariable,
42
- vector: parsedVector,
43
- body: (0, meta_1.ensureExpressionList)(parseBody),
44
- lexeme: content,
45
- info: {
46
- fullRange: data.currentRange,
47
- additionalTokens: comments,
48
- fullLexeme: data.currentLexeme,
49
- },
50
- location
51
- };
52
- return (0, hooks_1.executeHook)(data.hooks.loops.onForLoop.after, data, result);
53
- }
54
- exports.tryNormalizeFor = tryNormalizeFor;
55
- function normalizeForHead(data, forCondition) {
56
- // must have a child which is `in`, a variable on the left, and a vector on the right
57
- const children = (0, input_format_1.getKeyGuarded)(forCondition, data.config.children).map(content => ({
58
- name: (0, meta_1.getTokenType)(data.config.tokenMap, content),
59
- content
60
- }));
61
- const { comments, others } = (0, structure_1.splitComments)(children);
62
- const inPosition = others.findIndex(elem => elem.name === "IN" /* RawRType.ForIn */);
63
- (0, assert_1.guard)(inPosition > 0 && inPosition < others.length - 1, () => `for loop searched in and found at ${inPosition}, but this is not in legal bounds for ${JSON.stringify(children)}`);
64
- const variable = (0, values_1.tryNormalizeSymbol)(data, [others[inPosition - 1]]);
65
- (0, assert_1.guard)(variable !== undefined, () => `for loop variable should have been parsed to a symbol but was ${JSON.stringify(variable)}`);
66
- (0, assert_1.guard)(variable.type === "RSymbol" /* RType.Symbol */, () => `for loop variable should have been parsed to a symbol but was ${JSON.stringify(variable)}`);
67
- const vector = (0, structure_1.normalizeBasedOnType)(data, [others[inPosition + 1]]);
68
- (0, assert_1.guard)(vector.length === 1 && vector[0].type !== "RDelimiter" /* RType.Delimiter */, () => `for loop vector should have been parsed to a single element but was ${JSON.stringify(vector)}`);
69
- const parsedComments = comments.map(c => (0, other_1.normalizeComment)(data, c.content));
70
- return { variable, vector: vector[0], comments: parsedComments };
71
- }
72
- //# sourceMappingURL=for.js.map