@abaplint/core
Version:
abaplint - Core API
60 lines • 2.82 kB
JavaScript
;
Object.defineProperty(exports, "__esModule", { value: true });
exports.For = void 0;
const Expressions = require("../../2_statements/expressions");
const inline_field_definition_1 = require("./inline_field_definition");
const source_1 = require("./source");
const inline_loop_definition_1 = require("./inline_loop_definition");
const _scope_type_1 = require("../_scope_type");
const component_cond_1 = require("./component_cond");
const cond_1 = require("./cond");
const basic_1 = require("../../types/basic");
const _typed_identifier_1 = require("../../types/_typed_identifier");
const _reference_1 = require("../_reference");
const let_1 = require("./let");
class For {
static runSyntax(node, input) {
var _a;
let scoped = false;
const inlineLoop = node.findDirectExpressions(Expressions.InlineLoopDefinition);
const inlineField = node.findDirectExpressions(Expressions.InlineFieldDefinition);
const groupsToken = (_a = node.findExpressionAfterToken("GROUPS")) === null || _a === void 0 ? void 0 : _a.getFirstToken();
const lett = node.findDirectExpression(Expressions.Let);
const addScope = inlineLoop.length > 0
|| inlineField.length > 0
|| lett !== undefined
|| groupsToken !== undefined;
if (addScope) {
// this scope is popped in parent expressions
input.scope.push(_scope_type_1.ScopeType.For, "FOR", node.getFirstToken().getStart(), input.filename);
scoped = true;
}
for (const s of inlineLoop) {
inline_loop_definition_1.InlineLoopDefinition.runSyntax(s, input);
}
for (const f of inlineField) {
inline_field_definition_1.InlineFieldDefinition.runSyntax(f, input);
}
if (groupsToken !== undefined) {
const type = basic_1.VoidType.get("todoGroupBy");
const identifier = new _typed_identifier_1.TypedIdentifier(groupsToken, input.filename, type, ["inline" /* IdentifierMeta.InlineDefinition */]);
input.scope.addIdentifier(identifier);
input.scope.addReference(groupsToken, identifier, _reference_1.ReferenceType.DataWriteReference, input.filename);
}
for (const s of node.findDirectExpressions(Expressions.Source)) {
source_1.Source.runSyntax(s, input);
}
for (const s of node.findDirectExpressions(Expressions.ComponentCond)) {
component_cond_1.ComponentCond.runSyntax(s, input);
}
for (const s of node.findDirectExpressions(Expressions.Cond)) {
cond_1.Cond.runSyntax(s, input);
}
if (lett) {
let_1.Let.runSyntax(lett, input, true);
}
return scoped;
}
}
exports.For = For;
//# sourceMappingURL=for.js.map