UNPKG

@abaplint/core

Version:
54 lines 2.73 kB
"use strict"; Object.defineProperty(exports, "__esModule", { value: true }); exports.FunctionParameters = void 0; const Expressions = require("../../2_statements/expressions"); const source_1 = require("./source"); const target_1 = require("./target"); const field_chain_1 = require("./field_chain"); const _reference_1 = require("../_reference"); const _syntax_input_1 = require("../_syntax_input"); class FunctionParameters { static runSyntax(node, input) { // EXPORTING: process sources in each FunctionExportingParameter for (const param of node.findAllExpressions(Expressions.FunctionExportingParameter)) { const s = param.findDirectExpression(Expressions.Source); if (s) { source_1.Source.runSyntax(s, input); } const s3 = param.findDirectExpression(Expressions.SimpleSource3); if (s3) { source_1.Source.runSyntax(s3, input); } } // IMPORTING / CHANGING / TABLES: process targets in each ParameterT const changingList = node.findExpressionAfterToken("CHANGING"); for (const paramList of node.findDirectExpressions(Expressions.ParameterListT)) { for (const param of paramList.findDirectExpressions(Expressions.ParameterT)) { const t = param.findDirectExpression(Expressions.Target); if (t) { target_1.Target.runSyntax(t, input); } if (paramList === changingList && t !== undefined) { // hmm, does this do the scoping correctly? handle constants etc? todo const found = input.scope.findVariable(t.concatTokens()); if (found && found.getMeta().includes("read_only" /* IdentifierMeta.ReadOnly */)) { const message = `"${t.concatTokens()}" cannot be modified, it is readonly`; input.issues.push((0, _syntax_input_1.syntaxIssue)(input, t.getFirstToken(), message)); } } } } // EXCEPTIONS: process field chains and optional MESSAGE targets for (const exc of node.findAllExpressions(Expressions.ParameterException)) { for (const s of exc.findDirectExpressions(Expressions.SimpleFieldChain)) { field_chain_1.FieldChain.runSyntax(s, input, _reference_1.ReferenceType.DataReadReference); } const t = exc.findDirectExpression(Expressions.Target); if (t) { target_1.Target.runSyntax(t, input); } } } } exports.FunctionParameters = FunctionParameters; //# sourceMappingURL=function_parameters.js.map