@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.
@@ -111,6 +111,7 @@ class Source {
111
111
  else {
112
112
  this.addIfInferred(node, input, foundType);
113
113
  }
114
+ this.traverseRemainingChildren(children, input);
114
115
  return foundType ? foundType : bodyType;
115
116
  }
116
117
  case "SWITCH":
@@ -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);
@@ -75,7 +75,7 @@ class Registry {
75
75
  }
76
76
  static abaplintVersion() {
77
77
  // magic, see build script "version.js"
78
- return "2.120.1";
78
+ return "2.120.2";
79
79
  }
80
80
  getDDICReferences() {
81
81
  return this.ddicReferences;
@@ -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 = pos;
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.position.getStart(), obj);
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(pos, obj) {
241
- for (const file of obj.getABAPFiles()) {
242
- for (const statement of file.getStatements()) {
243
- const start = statement.getStart();
244
- const end = statement.getEnd();
245
- if (pos.equals(start) || (pos.isAfter(start) && pos.isBefore(end))) {
246
- return start;
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;
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@abaplint/core",
3
- "version": "2.120.1",
3
+ "version": "2.120.2",
4
4
  "description": "abaplint - Core API",
5
5
  "main": "build/src/index.js",
6
6
  "typings": "build/abaplint.d.ts",