@abaplint/core 2.120.1 → 2.120.2
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.
|
@@ -42,8 +42,10 @@ const inline_data_1 = require("../expressions/inline_data");
|
|
|
42
42
|
const dynamic_1 = require("../expressions/dynamic");
|
|
43
43
|
class CallTransformation {
|
|
44
44
|
runSyntax(node, input) {
|
|
45
|
+
const resultParameters = node.findExpressionAfterToken("RESULT");
|
|
46
|
+
const resultSources = new Set((resultParameters === null || resultParameters === void 0 ? void 0 : resultParameters.findAllExpressions(Expressions.SimpleSource3)) || []);
|
|
45
47
|
for (const s of node.findAllExpressions(Expressions.SimpleSource3)) {
|
|
46
|
-
source_1.Source.runSyntax(s, input);
|
|
48
|
+
source_1.Source.runSyntax(s, input, undefined, resultSources.has(s));
|
|
47
49
|
}
|
|
48
50
|
for (const d of node.findAllExpressions(Expressions.Dynamic)) {
|
|
49
51
|
dynamic_1.Dynamic.runSyntax(d, input);
|
package/build/src/registry.js
CHANGED
|
@@ -220,8 +220,8 @@ ENDCLASS.`,
|
|
|
220
220
|
}
|
|
221
221
|
}
|
|
222
222
|
else if (reference.referenceType === _reference_1.ReferenceType.DataWriteReference) {
|
|
223
|
-
if (earliestWrite === undefined || pos.isBefore(earliestWrite)) {
|
|
224
|
-
earliestWrite =
|
|
223
|
+
if (earliestWrite === undefined || pos.isBefore(earliestWrite.position.getStart())) {
|
|
224
|
+
earliestWrite = reference;
|
|
225
225
|
}
|
|
226
226
|
}
|
|
227
227
|
}
|
|
@@ -229,7 +229,7 @@ ENDCLASS.`,
|
|
|
229
229
|
return undefined; // never read, no hazard
|
|
230
230
|
}
|
|
231
231
|
// the parameter is safe only if it is written in a statement strictly before the first read
|
|
232
|
-
const readStatement = this.statementStart(firstRead
|
|
232
|
+
const readStatement = this.statementStart(firstRead, obj);
|
|
233
233
|
const writeStatement = earliestWrite === undefined ? undefined : this.statementStart(earliestWrite, obj);
|
|
234
234
|
if (writeStatement !== undefined && readStatement !== undefined && writeStatement.isBefore(readStatement)) {
|
|
235
235
|
return undefined;
|
|
@@ -237,14 +237,14 @@ ENDCLASS.`,
|
|
|
237
237
|
const message = `EXPORTING parameter "${parameter.getName().toLowerCase()}" read before it is cleared or assigned`;
|
|
238
238
|
return issue_1.Issue.atIdentifier(firstRead.position, message, this.getMetadata().key, this.conf.severity);
|
|
239
239
|
}
|
|
240
|
-
statementStart(
|
|
241
|
-
|
|
242
|
-
|
|
243
|
-
|
|
244
|
-
|
|
245
|
-
|
|
246
|
-
|
|
247
|
-
|
|
240
|
+
statementStart(reference, obj) {
|
|
241
|
+
const file = obj.getABAPFileByName(reference.position.getFilename());
|
|
242
|
+
for (const statement of (file === null || file === void 0 ? void 0 : file.getStatements()) || []) {
|
|
243
|
+
const pos = reference.position.getStart();
|
|
244
|
+
const start = statement.getStart();
|
|
245
|
+
const end = statement.getEnd();
|
|
246
|
+
if (pos.equals(start) || (pos.isAfter(start) && pos.isBefore(end))) {
|
|
247
|
+
return start;
|
|
248
248
|
}
|
|
249
249
|
}
|
|
250
250
|
return undefined;
|