@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.
- package/cli/common/scripts-info.d.ts +1 -1
- package/package.json +1 -1
- package/benchmark/benchmark-slicer.js +0 -223
- package/core/pipeline-executor.js +0 -221
- package/core/stepping-slicer.js +0 -160
- package/core/steps/all/00-parse.js +0 -19
- package/core/steps/all/10-normalize.js +0 -21
- package/core/steps/all/20-dataflow.js +0 -21
- package/core/steps/all/30-slice.js +0 -16
- package/core/steps/all/40-reconstruct.js +0 -16
- package/core/steps/all/core/00-parse.js +0 -24
- package/core/steps/all/core/10-normalize.js +0 -46
- package/core/steps/all/core/20-dataflow.js +0 -39
- package/core/steps/all/static-slicing/00-slice.js +0 -21
- package/core/steps/all/static-slicing/10-reconstruct.js +0 -21
- package/core/steps/index.js +0 -21
- package/core/steps/input.js +0 -3
- package/core/steps/output.js +0 -3
- package/core/steps/pipeline/create.js +0 -130
- package/core/steps/pipeline/default.js +0 -15
- package/core/steps/pipeline/dependency-checker.js +0 -76
- package/core/steps/pipeline/index.js +0 -20
- package/core/steps/pipeline/invalid-pipeline-error.js +0 -14
- package/core/steps/pipeline/pipeline.js +0 -28
- package/core/steps/step.js +0 -8
- package/core/steps/steps-provider.js +0 -3
- package/core/steps/steps.js +0 -35
- package/dataflow/common/environments/append.js +0 -48
- package/dataflow/common/environments/environment.js +0 -165
- package/dataflow/common/environments/index.js +0 -23
- package/dataflow/common/environments/overwrite.js +0 -82
- package/dataflow/common/environments/register.js +0 -49
- package/dataflow/common/environments/resolve-by-name.js +0 -35
- package/dataflow/common/environments/scopes.js +0 -6
- package/dataflow/common/environments/scoping.js +0 -27
- package/dataflow/graph/equal.js +0 -127
- package/dataflow/v1/extractor.js +0 -60
- package/dataflow/v1/graph/diff.js +0 -206
- package/dataflow/v1/graph/edge.js +0 -32
- package/dataflow/v1/graph/graph.js +0 -298
- package/dataflow/v1/graph/index.js +0 -21
- package/dataflow/v1/graph/quads.js +0 -27
- package/dataflow/v1/graph/vertex.js +0 -3
- package/dataflow/v1/index.js +0 -24
- package/dataflow/v1/internal/info.js +0 -16
- package/dataflow/v1/internal/linker.js +0 -255
- package/dataflow/v1/internal/process/access.js +0 -54
- package/dataflow/v1/internal/process/expression-list.js +0 -154
- package/dataflow/v1/internal/process/functions/argument.js +0 -46
- package/dataflow/v1/internal/process/functions/exit-points.js +0 -125
- package/dataflow/v1/internal/process/functions/function-call.js +0 -99
- package/dataflow/v1/internal/process/functions/function-definition.js +0 -176
- package/dataflow/v1/internal/process/functions/parameter.js +0 -47
- package/dataflow/v1/internal/process/if-then-else.js +0 -57
- package/dataflow/v1/internal/process/loops/for-loop.js +0 -54
- package/dataflow/v1/internal/process/loops/repeat-loop.js +0 -21
- package/dataflow/v1/internal/process/loops/while-loop.js +0 -31
- package/dataflow/v1/internal/process/operators/assignment.js +0 -129
- package/dataflow/v1/internal/process/operators/non-assignment-binary-op.js +0 -25
- package/dataflow/v1/internal/process/operators/pipe.js +0 -46
- package/dataflow/v1/internal/process/operators/unary-op.js +0 -10
- package/dataflow/v1/internal/process/symbol.js +0 -21
- package/dataflow/v1/internal/process/uninteresting-leaf.js +0 -9
- package/dataflow/v1/processor.js +0 -20
- package/dataflow/v2/entry.js +0 -11
- package/flowr-1.3.7.tgz +0 -0
- package/r-bridge/lang-4.x/ast/parser/xml/common/config.js +0 -16
- package/r-bridge/lang-4.x/ast/parser/xml/common/input-format.js +0 -42
- package/r-bridge/lang-4.x/ast/parser/xml/common/meta.js +0 -118
- package/r-bridge/lang-4.x/ast/parser/xml/common/xml-to-json.js +0 -58
- package/r-bridge/lang-4.x/ast/parser/xml/v1/data.js +0 -3
- package/r-bridge/lang-4.x/ast/parser/xml/v1/hooks.js +0 -136
- package/r-bridge/lang-4.x/ast/parser/xml/v1/index.js +0 -22
- package/r-bridge/lang-4.x/ast/parser/xml/v1/internal/access.js +0 -107
- package/r-bridge/lang-4.x/ast/parser/xml/v1/internal/control/if-then-else.js +0 -32
- package/r-bridge/lang-4.x/ast/parser/xml/v1/internal/control/if-then.js +0 -46
- package/r-bridge/lang-4.x/ast/parser/xml/v1/internal/control/index.js +0 -19
- package/r-bridge/lang-4.x/ast/parser/xml/v1/internal/expression/expression.js +0 -65
- package/r-bridge/lang-4.x/ast/parser/xml/v1/internal/expression/index.js +0 -18
- package/r-bridge/lang-4.x/ast/parser/xml/v1/internal/functions/argument.js +0 -74
- package/r-bridge/lang-4.x/ast/parser/xml/v1/internal/functions/call.js +0 -149
- package/r-bridge/lang-4.x/ast/parser/xml/v1/internal/functions/definition.js +0 -60
- package/r-bridge/lang-4.x/ast/parser/xml/v1/internal/functions/index.js +0 -20
- package/r-bridge/lang-4.x/ast/parser/xml/v1/internal/functions/parameter.js +0 -64
- package/r-bridge/lang-4.x/ast/parser/xml/v1/internal/index.js +0 -27
- package/r-bridge/lang-4.x/ast/parser/xml/v1/internal/loops/break.js +0 -24
- package/r-bridge/lang-4.x/ast/parser/xml/v1/internal/loops/for.js +0 -72
- package/r-bridge/lang-4.x/ast/parser/xml/v1/internal/loops/index.js +0 -22
- package/r-bridge/lang-4.x/ast/parser/xml/v1/internal/loops/next.js +0 -24
- package/r-bridge/lang-4.x/ast/parser/xml/v1/internal/loops/repeat.js +0 -42
- package/r-bridge/lang-4.x/ast/parser/xml/v1/internal/loops/while.js +0 -45
- package/r-bridge/lang-4.x/ast/parser/xml/v1/internal/operators/binary.js +0 -162
- package/r-bridge/lang-4.x/ast/parser/xml/v1/internal/operators/index.js +0 -20
- package/r-bridge/lang-4.x/ast/parser/xml/v1/internal/operators/special.js +0 -24
- package/r-bridge/lang-4.x/ast/parser/xml/v1/internal/operators/unary.js +0 -59
- package/r-bridge/lang-4.x/ast/parser/xml/v1/internal/other/comment.js +0 -34
- package/r-bridge/lang-4.x/ast/parser/xml/v1/internal/other/index.js +0 -18
- package/r-bridge/lang-4.x/ast/parser/xml/v1/internal/other/line-directive.js +0 -55
- package/r-bridge/lang-4.x/ast/parser/xml/v1/internal/structure/elements.js +0 -159
- package/r-bridge/lang-4.x/ast/parser/xml/v1/internal/structure/index.js +0 -20
- package/r-bridge/lang-4.x/ast/parser/xml/v1/internal/structure/root.js +0 -34
- package/r-bridge/lang-4.x/ast/parser/xml/v1/internal/structure/single-element.js +0 -64
- package/r-bridge/lang-4.x/ast/parser/xml/v1/internal/values/index.js +0 -20
- package/r-bridge/lang-4.x/ast/parser/xml/v1/internal/values/number.js +0 -56
- package/r-bridge/lang-4.x/ast/parser/xml/v1/internal/values/string.js +0 -41
- package/r-bridge/lang-4.x/ast/parser/xml/v1/internal/values/symbol.js +0 -56
- package/r-bridge/lang-4.x/ast/parser/xml/v1/normalize.js +0 -30
- package/r-bridge/lang-4.x/ast/parser/xml/v2/data.js +0 -3
- package/r-bridge/lang-4.x/ast/parser/xml/v2/internal/access.js +0 -95
- package/r-bridge/lang-4.x/ast/parser/xml/v2/internal/expression.js +0 -99
- package/r-bridge/lang-4.x/ast/parser/xml/v2/internal/functions/argument.js +0 -71
- package/r-bridge/lang-4.x/ast/parser/xml/v2/internal/operators/binary.js +0 -30
- package/r-bridge/lang-4.x/ast/parser/xml/v2/internal/operators/index.js +0 -19
- package/r-bridge/lang-4.x/ast/parser/xml/v2/internal/operators/unary.js +0 -35
- package/r-bridge/lang-4.x/ast/parser/xml/v2/internal/other/comment.js +0 -25
- package/r-bridge/lang-4.x/ast/parser/xml/v2/internal/other/index.js +0 -18
- package/r-bridge/lang-4.x/ast/parser/xml/v2/internal/other/line-directive.js +0 -38
- package/r-bridge/lang-4.x/ast/parser/xml/v2/internal/root.js +0 -26
- package/r-bridge/lang-4.x/ast/parser/xml/v2/internal/single-element.js +0 -63
- package/r-bridge/lang-4.x/ast/parser/xml/v2/internal/values/index.js +0 -18
- package/r-bridge/lang-4.x/ast/parser/xml/v2/internal/values/number.js +0 -46
- package/r-bridge/lang-4.x/ast/parser/xml/v2/internal/values/string.js +0 -33
- package/r-bridge/lang-4.x/ast/parser/xml/v2/internal/values/symbol.js +0 -63
- package/r-bridge/lang-4.x/ast/parser/xml/v2/normalize.js +0 -25
- 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
|