@abaplint/core
Version:
abaplint - Core API
54 lines • 2.73 kB
JavaScript
;
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