UNPKG

@abaplint/core

Version:
60 lines 2.82 kB
"use strict"; 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