@abaplint/core 2.101.3 → 2.101.4

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.
@@ -8,45 +8,50 @@ const _reference_1 = require("../_reference");
8
8
  const basic_1 = require("../../types/basic");
9
9
  const message_source_1 = require("../expressions/message_source");
10
10
  const raise_with_1 = require("../expressions/raise_with");
11
+ const _object_oriented_1 = require("../_object_oriented");
12
+ const method_parameters_1 = require("../expressions/method_parameters");
11
13
  class Raise {
12
14
  runSyntax(node, scope, filename) {
13
15
  // todo
14
- var _a, _b, _c;
16
+ var _a, _b, _c, _d, _e;
17
+ const helper = new _object_oriented_1.ObjectOriented(scope);
18
+ let method;
15
19
  const classTok = (_a = node.findDirectExpression(Expressions.ClassName)) === null || _a === void 0 ? void 0 : _a.getFirstToken();
16
- const classNam = classTok === null || classTok === void 0 ? void 0 : classTok.getStr();
17
- if (classNam) {
18
- const found = scope.existsObject(classNam);
20
+ const className = classTok === null || classTok === void 0 ? void 0 : classTok.getStr();
21
+ if (className) {
22
+ const found = scope.existsObject(className);
19
23
  if (found.found === true && found.id) {
20
24
  scope.addReference(classTok, found.id, found.type, filename);
25
+ const def = scope.findObjectDefinition(className);
26
+ method = (_b = helper.searchMethodName(def, "CONSTRUCTOR")) === null || _b === void 0 ? void 0 : _b.method;
21
27
  }
22
- else if (scope.getDDIC().inErrorNamespace(classNam) === false) {
23
- const extra = { ooName: classNam, ooType: "Void" };
28
+ else if (scope.getDDIC().inErrorNamespace(className) === false) {
29
+ const extra = { ooName: className, ooType: "Void" };
24
30
  scope.addReference(classTok, undefined, _reference_1.ReferenceType.ObjectOrientedVoidReference, filename, extra);
31
+ method = new basic_1.VoidType(className);
25
32
  }
26
33
  else {
27
- throw new Error("RAISE, unknown class " + classNam);
34
+ throw new Error("RAISE, unknown class " + className);
28
35
  }
29
36
  }
30
- let prev = "";
31
- for (const c of node.getChildren()) {
32
- if (c instanceof nodes_1.ExpressionNode
33
- && (c.get() instanceof Expressions.SimpleSource2 || c.get() instanceof Expressions.Source)) {
34
- const type = new source_1.Source().runSyntax(c, scope, filename);
35
- if (prev === "EXCEPTION"
36
- && type
37
- && !(type instanceof basic_1.VoidType)
38
- && !(type instanceof basic_1.ObjectReferenceType)) {
39
- throw new Error("RAISE EXCEPTION, must be object reference, got " + type.constructor.name);
40
- }
37
+ const c = node.findExpressionAfterToken("EXCEPTION");
38
+ if (c instanceof nodes_1.ExpressionNode && (c.get() instanceof Expressions.SimpleSource2 || c.get() instanceof Expressions.Source)) {
39
+ const type = new source_1.Source().runSyntax(c, scope, filename);
40
+ if (type instanceof basic_1.VoidType) {
41
+ method = type;
42
+ }
43
+ else if (type instanceof basic_1.ObjectReferenceType) {
44
+ const def = scope.findObjectDefinition(type.getIdentifierName());
45
+ method = (_c = helper.searchMethodName(def, "CONSTRUCTOR")) === null || _c === void 0 ? void 0 : _c.method;
46
+ }
47
+ else if (type !== undefined) {
48
+ throw new Error("RAISE EXCEPTION, must be object reference, got " + type.constructor.name);
41
49
  }
42
- prev = c.concatTokens().toUpperCase();
43
50
  }
44
- // todo, check parameters vs constructor
51
+ // check parameters vs constructor
45
52
  const param = node.findDirectExpression(Expressions.ParameterListS);
46
53
  if (param) {
47
- for (const s of param.findAllExpressions(Expressions.Source)) {
48
- new source_1.Source().runSyntax(s, scope, filename);
49
- }
54
+ new method_parameters_1.MethodParameters().checkExporting(param, scope, method, filename, true);
50
55
  }
51
56
  for (const s of node.findDirectExpressions(Expressions.RaiseWith)) {
52
57
  new raise_with_1.RaiseWith().runSyntax(s, scope, filename);
@@ -60,8 +65,8 @@ class Raise {
60
65
  for (const s of node.findDirectExpressions(Expressions.MessageSource)) {
61
66
  new message_source_1.MessageSource().runSyntax(s, scope, filename);
62
67
  }
63
- const id = (_b = node.findExpressionAfterToken("ID")) === null || _b === void 0 ? void 0 : _b.concatTokens();
64
- const number = (_c = node.findDirectExpression(Expressions.MessageNumber)) === null || _c === void 0 ? void 0 : _c.concatTokens();
68
+ const id = (_d = node.findExpressionAfterToken("ID")) === null || _d === void 0 ? void 0 : _d.concatTokens();
69
+ const number = (_e = node.findDirectExpression(Expressions.MessageNumber)) === null || _e === void 0 ? void 0 : _e.concatTokens();
65
70
  if ((id === null || id === void 0 ? void 0 : id.startsWith("'")) && number) {
66
71
  const messageClass = id.substring(1, id.length - 1).toUpperCase();
67
72
  scope.getMSAGReferences().addUsing(filename, node.getFirstToken(), messageClass, number);
@@ -65,7 +65,7 @@ class Registry {
65
65
  }
66
66
  static abaplintVersion() {
67
67
  // magic, see build script "version.sh"
68
- return "2.101.3";
68
+ return "2.101.4";
69
69
  }
70
70
  getDDICReferences() {
71
71
  return this.ddicReferences;
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@abaplint/core",
3
- "version": "2.101.3",
3
+ "version": "2.101.4",
4
4
  "description": "abaplint - Core API",
5
5
  "main": "build/src/index.js",
6
6
  "typings": "build/abaplint.d.ts",