@abaplint/core 2.111.1 → 2.112.0

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.
Files changed (214) hide show
  1. package/build/abaplint.d.ts +17 -8
  2. package/build/src/abap/5_syntax/_builtin.js +2 -2
  3. package/build/src/abap/5_syntax/_current_scope.js +2 -0
  4. package/build/src/abap/5_syntax/_procedural.js +6 -2
  5. package/build/src/abap/5_syntax/_syntax_input.js +11 -0
  6. package/build/src/abap/5_syntax/assert_error.js +7 -0
  7. package/build/src/abap/5_syntax/basic_types.js +78 -79
  8. package/build/src/abap/5_syntax/expressions/attribute_chain.js +15 -8
  9. package/build/src/abap/5_syntax/expressions/attribute_name.js +24 -11
  10. package/build/src/abap/5_syntax/expressions/cast.js +24 -13
  11. package/build/src/abap/5_syntax/expressions/compare.js +4 -4
  12. package/build/src/abap/5_syntax/expressions/component_chain.js +26 -11
  13. package/build/src/abap/5_syntax/expressions/component_compare.js +7 -4
  14. package/build/src/abap/5_syntax/expressions/component_compare_simple.js +11 -6
  15. package/build/src/abap/5_syntax/expressions/component_cond.js +3 -3
  16. package/build/src/abap/5_syntax/expressions/component_name.js +10 -5
  17. package/build/src/abap/5_syntax/expressions/cond.js +3 -6
  18. package/build/src/abap/5_syntax/expressions/cond_body.js +6 -6
  19. package/build/src/abap/5_syntax/expressions/conv_body.js +9 -8
  20. package/build/src/abap/5_syntax/expressions/corresponding_body.js +3 -3
  21. package/build/src/abap/5_syntax/expressions/data_definition.js +7 -7
  22. package/build/src/abap/5_syntax/expressions/database_table.js +9 -7
  23. package/build/src/abap/5_syntax/expressions/default.js +2 -2
  24. package/build/src/abap/5_syntax/expressions/dereference.js +5 -2
  25. package/build/src/abap/5_syntax/expressions/dynamic.js +2 -2
  26. package/build/src/abap/5_syntax/expressions/field_assignment.js +12 -5
  27. package/build/src/abap/5_syntax/expressions/field_chain.js +40 -25
  28. package/build/src/abap/5_syntax/expressions/field_length.js +2 -2
  29. package/build/src/abap/5_syntax/expressions/field_offset.js +2 -2
  30. package/build/src/abap/5_syntax/expressions/filter_body.js +3 -3
  31. package/build/src/abap/5_syntax/expressions/for.js +11 -11
  32. package/build/src/abap/5_syntax/expressions/form_param.js +10 -9
  33. package/build/src/abap/5_syntax/expressions/fstarget.js +8 -5
  34. package/build/src/abap/5_syntax/expressions/inline_data.js +11 -8
  35. package/build/src/abap/5_syntax/expressions/inline_field_definition.js +12 -8
  36. package/build/src/abap/5_syntax/expressions/inline_fs.js +7 -7
  37. package/build/src/abap/5_syntax/expressions/inline_loop_definition.js +16 -11
  38. package/build/src/abap/5_syntax/expressions/let.js +3 -3
  39. package/build/src/abap/5_syntax/expressions/loop_group_by.js +5 -15
  40. package/build/src/abap/5_syntax/expressions/message_source.js +4 -4
  41. package/build/src/abap/5_syntax/expressions/method_call_body.js +4 -4
  42. package/build/src/abap/5_syntax/expressions/method_call_chain.js +34 -25
  43. package/build/src/abap/5_syntax/expressions/method_call_param.js +33 -14
  44. package/build/src/abap/5_syntax/expressions/method_def_returning.js +7 -6
  45. package/build/src/abap/5_syntax/expressions/method_param.js +11 -10
  46. package/build/src/abap/5_syntax/expressions/method_parameters.js +76 -49
  47. package/build/src/abap/5_syntax/expressions/method_source.js +47 -38
  48. package/build/src/abap/5_syntax/expressions/new_object.js +48 -28
  49. package/build/src/abap/5_syntax/expressions/raise_with.js +2 -2
  50. package/build/src/abap/5_syntax/expressions/reduce_body.js +10 -10
  51. package/build/src/abap/5_syntax/expressions/reduce_next.js +3 -3
  52. package/build/src/abap/5_syntax/expressions/select.js +48 -33
  53. package/build/src/abap/5_syntax/expressions/select_loop.js +2 -2
  54. package/build/src/abap/5_syntax/expressions/source.js +74 -64
  55. package/build/src/abap/5_syntax/expressions/source_field.js +12 -6
  56. package/build/src/abap/5_syntax/expressions/source_field_symbol.js +8 -4
  57. package/build/src/abap/5_syntax/expressions/sql_compare.js +11 -19
  58. package/build/src/abap/5_syntax/expressions/sql_for_all_entries.js +7 -4
  59. package/build/src/abap/5_syntax/expressions/sql_from.js +3 -3
  60. package/build/src/abap/5_syntax/expressions/sql_in.js +34 -0
  61. package/build/src/abap/5_syntax/expressions/sql_order_by.js +2 -2
  62. package/build/src/abap/5_syntax/expressions/sql_source.js +3 -3
  63. package/build/src/abap/5_syntax/expressions/string_template.js +16 -8
  64. package/build/src/abap/5_syntax/expressions/switch_body.js +8 -4
  65. package/build/src/abap/5_syntax/expressions/table_expression.js +2 -2
  66. package/build/src/abap/5_syntax/expressions/target.js +50 -29
  67. package/build/src/abap/5_syntax/expressions/type_table.js +7 -7
  68. package/build/src/abap/5_syntax/expressions/value_body.js +17 -12
  69. package/build/src/abap/5_syntax/global_definitions/find_global_definitions.js +19 -6
  70. package/build/src/abap/5_syntax/spaghetti_scope.js +2 -1
  71. package/build/src/abap/5_syntax/statements/add.js +3 -3
  72. package/build/src/abap/5_syntax/statements/add_corresponding.js +3 -3
  73. package/build/src/abap/5_syntax/statements/append.js +25 -14
  74. package/build/src/abap/5_syntax/statements/assert.js +2 -2
  75. package/build/src/abap/5_syntax/statements/assign.js +17 -12
  76. package/build/src/abap/5_syntax/statements/authority_check.js +2 -2
  77. package/build/src/abap/5_syntax/statements/call.js +8 -5
  78. package/build/src/abap/5_syntax/statements/call_badi.js +4 -4
  79. package/build/src/abap/5_syntax/statements/call_function.js +12 -9
  80. package/build/src/abap/5_syntax/statements/call_kernel.js +2 -2
  81. package/build/src/abap/5_syntax/statements/call_transaction.js +3 -3
  82. package/build/src/abap/5_syntax/statements/call_transformation.js +5 -5
  83. package/build/src/abap/5_syntax/statements/case.js +2 -2
  84. package/build/src/abap/5_syntax/statements/case_type.js +2 -2
  85. package/build/src/abap/5_syntax/statements/catch.js +24 -19
  86. package/build/src/abap/5_syntax/statements/check.js +2 -2
  87. package/build/src/abap/5_syntax/statements/class_data.js +9 -5
  88. package/build/src/abap/5_syntax/statements/class_deferred.js +2 -2
  89. package/build/src/abap/5_syntax/statements/class_implementation.js +16 -13
  90. package/build/src/abap/5_syntax/statements/class_local_friends.js +16 -9
  91. package/build/src/abap/5_syntax/statements/clear.js +3 -3
  92. package/build/src/abap/5_syntax/statements/close_dataset.js +2 -2
  93. package/build/src/abap/5_syntax/statements/collect.js +4 -4
  94. package/build/src/abap/5_syntax/statements/commit_entities.js +4 -4
  95. package/build/src/abap/5_syntax/statements/concatenate.js +18 -11
  96. package/build/src/abap/5_syntax/statements/condense.js +2 -2
  97. package/build/src/abap/5_syntax/statements/constant.js +6 -5
  98. package/build/src/abap/5_syntax/statements/controls.js +5 -5
  99. package/build/src/abap/5_syntax/statements/convert.js +8 -8
  100. package/build/src/abap/5_syntax/statements/create_data.js +11 -11
  101. package/build/src/abap/5_syntax/statements/create_object.js +49 -26
  102. package/build/src/abap/5_syntax/statements/data.js +8 -4
  103. package/build/src/abap/5_syntax/statements/delete_cluster.js +4 -4
  104. package/build/src/abap/5_syntax/statements/delete_database.js +5 -5
  105. package/build/src/abap/5_syntax/statements/delete_internal.js +7 -7
  106. package/build/src/abap/5_syntax/statements/delete_report.js +2 -2
  107. package/build/src/abap/5_syntax/statements/describe.js +13 -13
  108. package/build/src/abap/5_syntax/statements/divide.js +3 -3
  109. package/build/src/abap/5_syntax/statements/do.js +8 -5
  110. package/build/src/abap/5_syntax/statements/editor_call.js +3 -3
  111. package/build/src/abap/5_syntax/statements/else_if.js +2 -2
  112. package/build/src/abap/5_syntax/statements/export.js +5 -5
  113. package/build/src/abap/5_syntax/statements/fieldsymbol.js +4 -4
  114. package/build/src/abap/5_syntax/statements/find.js +13 -13
  115. package/build/src/abap/5_syntax/statements/form.js +10 -7
  116. package/build/src/abap/5_syntax/statements/format.js +2 -2
  117. package/build/src/abap/5_syntax/statements/get_badi.js +4 -4
  118. package/build/src/abap/5_syntax/statements/get_bit.js +9 -6
  119. package/build/src/abap/5_syntax/statements/get_cursor.js +2 -2
  120. package/build/src/abap/5_syntax/statements/get_locale.js +3 -3
  121. package/build/src/abap/5_syntax/statements/get_parameter.js +4 -4
  122. package/build/src/abap/5_syntax/statements/get_reference.js +8 -5
  123. package/build/src/abap/5_syntax/statements/get_run_time.js +3 -3
  124. package/build/src/abap/5_syntax/statements/get_time.js +3 -3
  125. package/build/src/abap/5_syntax/statements/if.js +2 -2
  126. package/build/src/abap/5_syntax/statements/import.js +5 -5
  127. package/build/src/abap/5_syntax/statements/import_dynpro.js +3 -3
  128. package/build/src/abap/5_syntax/statements/include_type.js +9 -5
  129. package/build/src/abap/5_syntax/statements/insert_database.js +5 -5
  130. package/build/src/abap/5_syntax/statements/insert_field_group.js +4 -4
  131. package/build/src/abap/5_syntax/statements/insert_internal.js +22 -13
  132. package/build/src/abap/5_syntax/statements/insert_report.js +2 -2
  133. package/build/src/abap/5_syntax/statements/insert_textpool.js +2 -2
  134. package/build/src/abap/5_syntax/statements/interface_deferred.js +2 -2
  135. package/build/src/abap/5_syntax/statements/log_point.js +2 -2
  136. package/build/src/abap/5_syntax/statements/loop.js +29 -16
  137. package/build/src/abap/5_syntax/statements/loop_at_screen.js +3 -3
  138. package/build/src/abap/5_syntax/statements/message.js +6 -6
  139. package/build/src/abap/5_syntax/statements/method_implementation.js +18 -13
  140. package/build/src/abap/5_syntax/statements/modify_database.js +8 -8
  141. package/build/src/abap/5_syntax/statements/modify_entities.js +4 -4
  142. package/build/src/abap/5_syntax/statements/modify_internal.js +15 -8
  143. package/build/src/abap/5_syntax/statements/modify_screen.js +2 -2
  144. package/build/src/abap/5_syntax/statements/move.js +17 -10
  145. package/build/src/abap/5_syntax/statements/move_corresponding.js +14 -7
  146. package/build/src/abap/5_syntax/statements/multiply.js +3 -3
  147. package/build/src/abap/5_syntax/statements/open_dataset.js +3 -3
  148. package/build/src/abap/5_syntax/statements/pack.js +3 -3
  149. package/build/src/abap/5_syntax/statements/parameter.js +11 -6
  150. package/build/src/abap/5_syntax/statements/perform.js +12 -8
  151. package/build/src/abap/5_syntax/statements/raise.js +23 -18
  152. package/build/src/abap/5_syntax/statements/raise_event.js +4 -4
  153. package/build/src/abap/5_syntax/statements/ranges.js +6 -5
  154. package/build/src/abap/5_syntax/statements/read_entities.js +4 -4
  155. package/build/src/abap/5_syntax/statements/read_report.js +3 -3
  156. package/build/src/abap/5_syntax/statements/read_table.js +40 -21
  157. package/build/src/abap/5_syntax/statements/read_textpool.js +3 -3
  158. package/build/src/abap/5_syntax/statements/receive.js +3 -3
  159. package/build/src/abap/5_syntax/statements/replace.js +3 -3
  160. package/build/src/abap/5_syntax/statements/scan.js +3 -3
  161. package/build/src/abap/5_syntax/statements/search.js +2 -2
  162. package/build/src/abap/5_syntax/statements/select.js +2 -2
  163. package/build/src/abap/5_syntax/statements/select_loop.js +2 -2
  164. package/build/src/abap/5_syntax/statements/selection_screen.js +4 -4
  165. package/build/src/abap/5_syntax/statements/selectoption.js +9 -6
  166. package/build/src/abap/5_syntax/statements/set_bit.js +8 -5
  167. package/build/src/abap/5_syntax/statements/set_handler.js +3 -3
  168. package/build/src/abap/5_syntax/statements/set_locale.js +3 -3
  169. package/build/src/abap/5_syntax/statements/set_parameter.js +2 -2
  170. package/build/src/abap/5_syntax/statements/set_pf_status.js +2 -2
  171. package/build/src/abap/5_syntax/statements/set_titlebar.js +2 -2
  172. package/build/src/abap/5_syntax/statements/shift.js +15 -8
  173. package/build/src/abap/5_syntax/statements/sort.js +16 -7
  174. package/build/src/abap/5_syntax/statements/split.js +12 -7
  175. package/build/src/abap/5_syntax/statements/static.js +4 -4
  176. package/build/src/abap/5_syntax/statements/submit.js +4 -4
  177. package/build/src/abap/5_syntax/statements/subtract.js +3 -3
  178. package/build/src/abap/5_syntax/statements/subtract_corresponding.js +3 -3
  179. package/build/src/abap/5_syntax/statements/syntax_check.js +3 -3
  180. package/build/src/abap/5_syntax/statements/system_call.js +2 -2
  181. package/build/src/abap/5_syntax/statements/tables.js +7 -7
  182. package/build/src/abap/5_syntax/statements/transfer.js +3 -3
  183. package/build/src/abap/5_syntax/statements/translate.js +3 -3
  184. package/build/src/abap/5_syntax/statements/truncate_dataset.js +2 -2
  185. package/build/src/abap/5_syntax/statements/type.js +12 -7
  186. package/build/src/abap/5_syntax/statements/unassign.js +7 -4
  187. package/build/src/abap/5_syntax/statements/unpack.js +3 -3
  188. package/build/src/abap/5_syntax/statements/update_database.js +11 -11
  189. package/build/src/abap/5_syntax/statements/wait.js +3 -3
  190. package/build/src/abap/5_syntax/statements/when.js +2 -2
  191. package/build/src/abap/5_syntax/statements/when_type.js +9 -6
  192. package/build/src/abap/5_syntax/statements/while.js +4 -4
  193. package/build/src/abap/5_syntax/statements/with.js +3 -3
  194. package/build/src/abap/5_syntax/statements/with_loop.js +3 -3
  195. package/build/src/abap/5_syntax/statements/write.js +14 -10
  196. package/build/src/abap/5_syntax/structures/class_data.js +3 -3
  197. package/build/src/abap/5_syntax/structures/constants.js +6 -5
  198. package/build/src/abap/5_syntax/structures/data.js +17 -13
  199. package/build/src/abap/5_syntax/structures/statics.js +16 -11
  200. package/build/src/abap/5_syntax/structures/type_enum.js +15 -13
  201. package/build/src/abap/5_syntax/structures/types.js +9 -9
  202. package/build/src/abap/5_syntax/syntax.js +32 -16
  203. package/build/src/abap/types/class_attributes.js +30 -30
  204. package/build/src/abap/types/class_definition.js +29 -29
  205. package/build/src/abap/types/event_definition.js +5 -5
  206. package/build/src/abap/types/form_definition.js +13 -13
  207. package/build/src/abap/types/interface_definition.js +19 -19
  208. package/build/src/abap/types/method_definition.js +10 -10
  209. package/build/src/abap/types/method_definitions.js +9 -10
  210. package/build/src/abap/types/method_parameters.js +29 -29
  211. package/build/src/issue.js +12 -0
  212. package/build/src/registry.js +1 -1
  213. package/build/src/rules/check_syntax.js +2 -1
  214. package/package.json +3 -3
@@ -1,22 +1,28 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
3
  exports.SourceField = void 0;
4
+ const basic_1 = require("../../types/basic");
4
5
  const _reference_1 = require("../_reference");
6
+ const _syntax_input_1 = require("../_syntax_input");
5
7
  class SourceField {
6
- runSyntax(node, scope, filename, type) {
8
+ runSyntax(node, input, type, error = true) {
7
9
  const token = node.getFirstToken();
8
10
  const name = token.getStr();
9
- const found = scope.findVariable(name);
11
+ const found = input.scope.findVariable(name);
10
12
  if (found === undefined) {
11
- throw new Error("\"" + name + "\" not found, findTop");
13
+ const message = "\"" + name + "\" not found, findTop";
14
+ if (error === true) {
15
+ input.issues.push((0, _syntax_input_1.syntaxIssue)(input, node.getFirstToken(), message));
16
+ }
17
+ return new basic_1.VoidType(_syntax_input_1.CheckSyntaxKey);
12
18
  }
13
19
  if (type) {
14
- scope.addReference(token, found, type, filename);
20
+ input.scope.addReference(token, found, type, input.filename);
15
21
  }
16
22
  if (name.includes("~")) {
17
- const idef = scope.findInterfaceDefinition(name.split("~")[0]);
23
+ const idef = input.scope.findInterfaceDefinition(name.split("~")[0]);
18
24
  if (idef) {
19
- scope.addReference(token, idef, _reference_1.ReferenceType.ObjectOrientedReference, filename);
25
+ input.scope.addReference(token, idef, _reference_1.ReferenceType.ObjectOrientedReference, input.filename);
20
26
  }
21
27
  }
22
28
  return found.getType();
@@ -1,15 +1,19 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
3
  exports.SourceFieldSymbol = void 0;
4
+ const basic_1 = require("../../types/basic");
4
5
  const _reference_1 = require("../_reference");
6
+ const _syntax_input_1 = require("../_syntax_input");
5
7
  class SourceFieldSymbol {
6
- runSyntax(node, scope, filename) {
8
+ runSyntax(node, input) {
7
9
  const token = node.getFirstToken();
8
- const found = scope.findVariable(token.getStr());
10
+ const found = input.scope.findVariable(token.getStr());
9
11
  if (found === undefined) {
10
- throw new Error("\"" + node.getFirstToken().getStr() + "\" not found, SourceFieldSymbol");
12
+ const message = "\"" + node.getFirstToken().getStr() + "\" not found, SourceFieldSymbol";
13
+ input.issues.push((0, _syntax_input_1.syntaxIssue)(input, node.getFirstToken(), message));
14
+ return new basic_1.VoidType(_syntax_input_1.CheckSyntaxKey);
11
15
  }
12
- scope.addReference(token, found, _reference_1.ReferenceType.DataReadReference, filename);
16
+ input.scope.addReference(token, found, _reference_1.ReferenceType.DataReadReference, input.filename);
13
17
  return found.getType();
14
18
  }
15
19
  }
@@ -6,45 +6,37 @@ const nodes_1 = require("../../nodes");
6
6
  const basic_1 = require("../../types/basic");
7
7
  const dynamic_1 = require("./dynamic");
8
8
  const source_1 = require("./source");
9
+ const sql_in_1 = require("./sql_in");
9
10
  const sql_source_1 = require("./sql_source");
10
11
  class SQLCompare {
11
- runSyntax(node, scope, filename, tables) {
12
+ runSyntax(node, input, tables) {
12
13
  var _a, _b;
13
14
  let sourceType;
14
15
  let token;
15
16
  if (((_a = node.getFirstChild()) === null || _a === void 0 ? void 0 : _a.get()) instanceof Expressions.Dynamic) {
16
- new dynamic_1.Dynamic().runSyntax(node.getFirstChild(), scope, filename);
17
+ new dynamic_1.Dynamic().runSyntax(node.getFirstChild(), input);
17
18
  return;
18
19
  }
19
- for (const s of node.findAllExpressions(Expressions.SimpleSource3)) {
20
- new source_1.Source().runSyntax(s, scope, filename);
20
+ for (const s of node.findDirectExpressions(Expressions.SimpleSource3)) {
21
+ new source_1.Source().runSyntax(s, input);
21
22
  }
22
- for (const s of node.findAllExpressions(Expressions.SQLSource)) {
23
+ for (const s of node.findDirectExpressions(Expressions.SQLSource)) {
23
24
  for (const child of s.getChildren()) {
24
25
  if (child instanceof nodes_1.ExpressionNode) {
25
26
  token = child.getFirstToken();
26
27
  break;
27
28
  }
28
29
  }
29
- sourceType = new sql_source_1.SQLSource().runSyntax(s, scope, filename);
30
+ sourceType = new sql_source_1.SQLSource().runSyntax(s, input);
30
31
  }
31
32
  const sqlin = node.findDirectExpression(Expressions.SQLIn);
32
- if (sqlin && sqlin.getChildren().length === 2) {
33
- const insource = node.findFirstExpression(Expressions.SQLSource);
34
- if (insource) {
35
- const intype = new sql_source_1.SQLSource().runSyntax(insource, scope, filename);
36
- if (intype &&
37
- !(intype instanceof basic_1.VoidType) &&
38
- !(intype instanceof basic_1.UnknownType) &&
39
- !(intype instanceof basic_1.TableType)) {
40
- throw new Error("IN, not a table");
41
- }
42
- }
33
+ if (sqlin) {
34
+ new sql_in_1.SQLIn().runSyntax(sqlin, input);
43
35
  }
44
36
  const fieldName = (_b = node.findDirectExpression(Expressions.SQLFieldName)) === null || _b === void 0 ? void 0 : _b.concatTokens();
45
37
  if (fieldName && sourceType && token) {
46
38
  // check compatibility for rule sql_value_conversion
47
- const targetType = this.findType(fieldName, tables, scope);
39
+ const targetType = this.findType(fieldName, tables, input.scope);
48
40
  let message = "";
49
41
  if (sourceType instanceof basic_1.IntegerType
50
42
  && targetType instanceof basic_1.CharacterType) {
@@ -73,7 +65,7 @@ class SQLCompare {
73
65
  message = "Source field longer than database field, NUMC -> NUMC";
74
66
  }
75
67
  if (message !== "") {
76
- scope.addSQLConversion(fieldName, message, token);
68
+ input.scope.addSQLConversion(fieldName, message, token);
77
69
  }
78
70
  }
79
71
  }
@@ -4,22 +4,25 @@ exports.SQLForAllEntries = void 0;
4
4
  const Expressions = require("../../2_statements/expressions");
5
5
  const source_1 = require("./source");
6
6
  const basic_1 = require("../../types/basic");
7
+ const _syntax_input_1 = require("../_syntax_input");
7
8
  class SQLForAllEntries {
8
- runSyntax(node, scope, filename) {
9
+ runSyntax(node, input) {
9
10
  let s = node.findFirstExpression(Expressions.Source);
10
11
  if (s === undefined) {
11
12
  s = node.findFirstExpression(Expressions.SimpleSource3);
12
13
  }
13
14
  if (s) {
14
- const type = new source_1.Source().runSyntax(s, scope, filename);
15
+ const type = new source_1.Source().runSyntax(s, input);
15
16
  if (type instanceof basic_1.VoidType) {
16
17
  return;
17
18
  }
18
19
  if (!(type instanceof basic_1.TableType)) {
19
- throw new Error("FAE parameter must be table type");
20
+ const message = "FAE parameter must be table type";
21
+ input.issues.push((0, _syntax_input_1.syntaxIssue)(input, node.getFirstToken(), message));
22
+ return;
20
23
  }
21
24
  const name = s.concatTokens().replace("[]", "");
22
- scope.setAllowHeaderUse(name);
25
+ input.scope.setAllowHeaderUse(name);
23
26
  }
24
27
  }
25
28
  }
@@ -5,16 +5,16 @@ const Expressions = require("../../2_statements/expressions");
5
5
  const dynamic_1 = require("./dynamic");
6
6
  const database_table_1 = require("./database_table");
7
7
  class SQLFrom {
8
- runSyntax(node, scope, filename) {
8
+ runSyntax(node, input) {
9
9
  const ret = [];
10
10
  const fromList = node.findAllExpressions(Expressions.SQLFromSource);
11
11
  for (const from of fromList) {
12
12
  for (const d of from.findAllExpressions(Expressions.Dynamic)) {
13
- new dynamic_1.Dynamic().runSyntax(d, scope, filename);
13
+ new dynamic_1.Dynamic().runSyntax(d, input);
14
14
  }
15
15
  const dbtab = from.findFirstExpression(Expressions.DatabaseTable);
16
16
  if (dbtab !== undefined) {
17
- ret.push(new database_table_1.DatabaseTable().runSyntax(dbtab, scope, filename));
17
+ ret.push(new database_table_1.DatabaseTable().runSyntax(dbtab, input));
18
18
  }
19
19
  }
20
20
  return ret;
@@ -0,0 +1,34 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.SQLIn = void 0;
4
+ const Expressions = require("../../2_statements/expressions");
5
+ const basic_1 = require("../../types/basic");
6
+ const _syntax_input_1 = require("../_syntax_input");
7
+ const sql_source_1 = require("./sql_source");
8
+ class SQLIn {
9
+ runSyntax(node, input) {
10
+ if (node.getChildren().length === 2) {
11
+ const insource = node.findFirstExpression(Expressions.SQLSource);
12
+ if (insource) {
13
+ const intype = new sql_source_1.SQLSource().runSyntax(insource, input);
14
+ if (intype &&
15
+ !(intype instanceof basic_1.VoidType) &&
16
+ !(intype instanceof basic_1.UnknownType) &&
17
+ !(intype instanceof basic_1.TableType)) {
18
+ const message = "IN, not a table";
19
+ input.issues.push((0, _syntax_input_1.syntaxIssue)(input, node.getFirstToken(), message));
20
+ return;
21
+ }
22
+ }
23
+ return;
24
+ }
25
+ for (const s of node.findDirectExpressions(Expressions.SQLSource)) {
26
+ new sql_source_1.SQLSource().runSyntax(s, input);
27
+ }
28
+ for (const s of node.findDirectExpressions(Expressions.SQLSourceNoSpace)) {
29
+ new sql_source_1.SQLSource().runSyntax(s, input);
30
+ }
31
+ }
32
+ }
33
+ exports.SQLIn = SQLIn;
34
+ //# sourceMappingURL=sql_in.js.map
@@ -4,10 +4,10 @@ exports.SQLOrderBy = void 0;
4
4
  const Expressions = require("../../2_statements/expressions");
5
5
  const dynamic_1 = require("./dynamic");
6
6
  class SQLOrderBy {
7
- runSyntax(node, scope, filename) {
7
+ runSyntax(node, input) {
8
8
  const dyn = node.findDirectExpression(Expressions.Dynamic);
9
9
  if (dyn) {
10
- new dynamic_1.Dynamic().runSyntax(dyn, scope, filename);
10
+ new dynamic_1.Dynamic().runSyntax(dyn, input);
11
11
  }
12
12
  }
13
13
  }
@@ -4,12 +4,12 @@ exports.SQLSource = void 0;
4
4
  const Expressions = require("../../2_statements/expressions");
5
5
  const source_1 = require("./source");
6
6
  class SQLSource {
7
- runSyntax(node, scope, filename) {
7
+ runSyntax(node, input) {
8
8
  for (const s of node.findAllExpressions(Expressions.Source)) {
9
- return new source_1.Source().runSyntax(s, scope, filename);
9
+ return new source_1.Source().runSyntax(s, input);
10
10
  }
11
11
  for (const s of node.findAllExpressions(Expressions.SimpleSource3)) {
12
- return new source_1.Source().runSyntax(s, scope, filename);
12
+ return new source_1.Source().runSyntax(s, input);
13
13
  }
14
14
  return undefined;
15
15
  }
@@ -5,26 +5,32 @@ const basic_1 = require("../../types/basic");
5
5
  const Expressions = require("../../2_statements/expressions");
6
6
  const source_1 = require("./source");
7
7
  const _type_utils_1 = require("../_type_utils");
8
+ const _syntax_input_1 = require("../_syntax_input");
8
9
  class StringTemplate {
9
- runSyntax(node, scope, filename) {
10
- const typeUtils = new _type_utils_1.TypeUtils(scope);
10
+ runSyntax(node, input) {
11
+ const typeUtils = new _type_utils_1.TypeUtils(input.scope);
11
12
  const ret = basic_1.StringType.get();
12
13
  for (const templateSource of node.findAllExpressions(Expressions.StringTemplateSource)) {
13
14
  const s = templateSource.findDirectExpression(Expressions.Source);
14
- const type = new source_1.Source().runSyntax(s, scope, filename, ret);
15
+ const type = new source_1.Source().runSyntax(s, input, ret);
15
16
  if (type === undefined) {
16
- throw new Error("No target type determined");
17
+ const message = "No target type determined";
18
+ input.issues.push((0, _syntax_input_1.syntaxIssue)(input, node.getFirstToken(), message));
19
+ return new basic_1.VoidType(_syntax_input_1.CheckSyntaxKey);
17
20
  }
18
21
  else if ((typeUtils.isCharLike(type) === false && typeUtils.isHexLike(type) === false)
19
22
  || type instanceof basic_1.StructureType) {
20
- throw new Error("String template, not character like, " + type.constructor.name);
23
+ const message = "String template, not character like, " + type.constructor.name;
24
+ input.issues.push((0, _syntax_input_1.syntaxIssue)(input, node.getFirstToken(), message));
25
+ return new basic_1.VoidType(_syntax_input_1.CheckSyntaxKey);
21
26
  }
22
27
  const format = templateSource.findDirectExpression(Expressions.StringTemplateFormatting);
23
28
  const formatConcat = format === null || format === void 0 ? void 0 : format.concatTokens();
24
29
  for (const formatSource of (format === null || format === void 0 ? void 0 : format.findAllExpressions(Expressions.Source)) || []) {
25
- new source_1.Source().runSyntax(formatSource, scope, filename);
30
+ new source_1.Source().runSyntax(formatSource, input);
26
31
  }
27
- if ((formatConcat === null || formatConcat === void 0 ? void 0 : formatConcat.includes("ALPHA = "))
32
+ if (format
33
+ && (formatConcat === null || formatConcat === void 0 ? void 0 : formatConcat.includes("ALPHA = "))
28
34
  && !(type instanceof basic_1.UnknownType)
29
35
  && !(type instanceof basic_1.VoidType)
30
36
  && !(type instanceof basic_1.StringType)
@@ -33,7 +39,9 @@ class StringTemplate {
33
39
  && !(type instanceof basic_1.NumericGenericType)
34
40
  && !(type instanceof basic_1.NumericType)
35
41
  && !(type instanceof basic_1.AnyType)) {
36
- throw new Error("Cannot apply ALPHA to this type");
42
+ const message = "Cannot apply ALPHA to this type";
43
+ input.issues.push((0, _syntax_input_1.syntaxIssue)(input, format.getFirstToken(), message));
44
+ return new basic_1.VoidType(_syntax_input_1.CheckSyntaxKey);
37
45
  }
38
46
  }
39
47
  return ret;
@@ -3,21 +3,25 @@ Object.defineProperty(exports, "__esModule", { value: true });
3
3
  exports.SwitchBody = void 0;
4
4
  const Expressions = require("../../2_statements/expressions");
5
5
  const source_1 = require("./source");
6
+ const _syntax_input_1 = require("../_syntax_input");
7
+ const basic_1 = require("../../types/basic");
6
8
  class SwitchBody {
7
- runSyntax(node, scope, filename) {
9
+ runSyntax(node, input) {
8
10
  if (node === undefined) {
9
11
  return;
10
12
  }
11
13
  const thenSource = node.findExpressionAfterToken("THEN");
12
14
  if (!((thenSource === null || thenSource === void 0 ? void 0 : thenSource.get()) instanceof Expressions.Source)) {
13
- throw new Error("SwitchBody, unexpected");
15
+ const message = "SwitchBody, unexpected";
16
+ input.issues.push((0, _syntax_input_1.syntaxIssue)(input, node.getFirstToken(), message));
17
+ return new basic_1.VoidType(_syntax_input_1.CheckSyntaxKey);
14
18
  }
15
- const type = new source_1.Source().runSyntax(thenSource, scope, filename);
19
+ const type = new source_1.Source().runSyntax(thenSource, input);
16
20
  for (const s of node.findDirectExpressions(Expressions.Source)) {
17
21
  if (s === thenSource) {
18
22
  continue;
19
23
  }
20
- new source_1.Source().runSyntax(s, scope, filename);
24
+ new source_1.Source().runSyntax(s, input);
21
25
  }
22
26
  return type;
23
27
  }
@@ -4,12 +4,12 @@ exports.TableExpression = void 0;
4
4
  const Expressions = require("../../2_statements/expressions");
5
5
  const source_1 = require("./source");
6
6
  class TableExpression {
7
- runSyntax(node, scope, filename) {
7
+ runSyntax(node, input) {
8
8
  if (node === undefined) {
9
9
  return;
10
10
  }
11
11
  for (const s of node.findDirectExpressions(Expressions.Source)) {
12
- new source_1.Source().runSyntax(s, scope, filename);
12
+ new source_1.Source().runSyntax(s, input);
13
13
  }
14
14
  }
15
15
  }
@@ -14,14 +14,15 @@ const table_expression_1 = require("./table_expression");
14
14
  const expressions_1 = require("../../2_statements/expressions");
15
15
  const field_length_1 = require("./field_length");
16
16
  const cast_1 = require("./cast");
17
+ const _syntax_input_1 = require("../_syntax_input");
17
18
  class Target {
18
- runSyntax(node, scope, filename) {
19
+ runSyntax(node, input) {
19
20
  const concat = node.concatTokens();
20
21
  if (concat.includes("-")) {
21
22
  // workaround for names with dashes
22
- const found = scope.findVariable(concat);
23
+ const found = input.scope.findVariable(concat);
23
24
  if (found) {
24
- scope.addReference(node.getFirstToken(), found, _reference_1.ReferenceType.DataWriteReference, filename);
25
+ input.scope.addReference(node.getFirstToken(), found, _reference_1.ReferenceType.DataWriteReference, input.filename);
25
26
  return found.getType();
26
27
  }
27
28
  }
@@ -30,9 +31,11 @@ class Target {
30
31
  if (first === undefined || !(first instanceof nodes_1.ExpressionNode)) {
31
32
  return undefined;
32
33
  }
33
- let context = this.findTop(first, scope, filename);
34
+ let context = this.findTop(first, input);
34
35
  if (context === undefined) {
35
- throw new Error(`"${first.getFirstToken().getStr()}" not found, Target`);
36
+ const message = `"${first.getFirstToken().getStr()}" not found, Target`;
37
+ input.issues.push((0, _syntax_input_1.syntaxIssue)(input, node.getFirstToken(), message));
38
+ return new basic_1.VoidType(_syntax_input_1.CheckSyntaxKey);
36
39
  }
37
40
  while (children.length > 0) {
38
41
  const current = children.shift();
@@ -41,39 +44,49 @@ class Target {
41
44
  }
42
45
  if (current.get() instanceof tokens_1.Dash) {
43
46
  if (context instanceof unknown_type_1.UnknownType) {
44
- throw new Error("Not a structure, type unknown, target");
47
+ const message = "Not a structure, type unknown, target";
48
+ input.issues.push((0, _syntax_input_1.syntaxIssue)(input, node.getFirstToken(), message));
49
+ return new basic_1.VoidType(_syntax_input_1.CheckSyntaxKey);
45
50
  }
46
51
  else if (!(context instanceof basic_1.StructureType)
47
52
  && !(context instanceof basic_1.TableType && context.isWithHeader() && context.getRowType() instanceof basic_1.StructureType)
48
53
  && !(context instanceof basic_1.TableType && context.isWithHeader() && context.getRowType() instanceof basic_1.VoidType)
49
54
  && !(context instanceof basic_1.VoidType)) {
50
- throw new Error("Not a structure, target");
55
+ const message = "Not a structure, target";
56
+ input.issues.push((0, _syntax_input_1.syntaxIssue)(input, node.getFirstToken(), message));
57
+ return new basic_1.VoidType(_syntax_input_1.CheckSyntaxKey);
51
58
  }
52
59
  }
53
60
  else if (current.get() instanceof tokens_1.InstanceArrow) {
54
61
  if (!(context instanceof basic_1.ObjectReferenceType)
55
62
  && !(context instanceof basic_1.DataReference)
56
63
  && !(context instanceof basic_1.VoidType)) {
57
- throw new Error("Not an object reference, target");
64
+ const message = "Not an object reference, target";
65
+ input.issues.push((0, _syntax_input_1.syntaxIssue)(input, node.getFirstToken(), message));
66
+ return new basic_1.VoidType(_syntax_input_1.CheckSyntaxKey);
58
67
  }
59
68
  }
60
69
  else if (current.get() instanceof expressions_1.Dereference) {
61
70
  if (!(context instanceof basic_1.DataReference) && !(context instanceof basic_1.VoidType)) {
62
- throw new Error("Not an object reference, target");
71
+ const message = "Not an object reference, target";
72
+ input.issues.push((0, _syntax_input_1.syntaxIssue)(input, node.getFirstToken(), message));
73
+ return new basic_1.VoidType(_syntax_input_1.CheckSyntaxKey);
63
74
  }
64
75
  if (!(context instanceof basic_1.VoidType)) {
65
76
  context = context.getType();
66
77
  }
67
78
  }
68
79
  else if (current.get() instanceof Expressions.ComponentName) {
69
- context = new component_name_1.ComponentName().runSyntax(context, current);
80
+ context = new component_name_1.ComponentName().runSyntax(context, current, input);
70
81
  }
71
82
  else if (current.get() instanceof Expressions.TableBody) {
72
83
  if (!(context instanceof basic_1.TableType)
73
84
  && !(context instanceof basic_1.VoidType)
74
85
  && !(context instanceof unknown_type_1.UnknownType)
75
86
  && !(context instanceof unknown_type_1.UnknownType)) {
76
- throw new Error("Not a internal table, \"[]\"");
87
+ const message = "Not a internal table, \"[]\"";
88
+ input.issues.push((0, _syntax_input_1.syntaxIssue)(input, node.getFirstToken(), message));
89
+ return new basic_1.VoidType(_syntax_input_1.CheckSyntaxKey);
77
90
  }
78
91
  if (context instanceof basic_1.TableType && context.isWithHeader()) {
79
92
  context = new basic_1.TableType(context.getRowType(), Object.assign(Object.assign({}, context.getOptions()), { withHeader: false }));
@@ -82,36 +95,42 @@ class Target {
82
95
  else if (current instanceof nodes_1.ExpressionNode
83
96
  && current.get() instanceof Expressions.TableExpression) {
84
97
  if (!(context instanceof basic_1.TableType) && !(context instanceof basic_1.VoidType)) {
85
- throw new Error("Table expression, expected table");
98
+ const message = "Table expression, expected table";
99
+ input.issues.push((0, _syntax_input_1.syntaxIssue)(input, node.getFirstToken(), message));
100
+ return new basic_1.VoidType(_syntax_input_1.CheckSyntaxKey);
86
101
  }
87
- new table_expression_1.TableExpression().runSyntax(current, scope, filename);
102
+ new table_expression_1.TableExpression().runSyntax(current, input);
88
103
  if (!(context instanceof basic_1.VoidType)) {
89
104
  context = context.getRowType();
90
105
  }
91
106
  }
92
107
  else if (current.get() instanceof Expressions.AttributeName) {
93
108
  const type = children.length === 0 ? _reference_1.ReferenceType.DataWriteReference : _reference_1.ReferenceType.DataReadReference;
94
- context = new attribute_name_1.AttributeName().runSyntax(context, current, scope, filename, type);
109
+ context = new attribute_name_1.AttributeName().runSyntax(context, current, input, type);
95
110
  }
96
111
  }
97
112
  const offset = node.findDirectExpression(Expressions.FieldOffset);
98
113
  if (offset) {
99
114
  if (context instanceof basic_1.XStringType || context instanceof basic_1.StringType) {
100
- throw new Error("xstring/string offset/length in writer position not possible");
115
+ const message = "xstring/string offset/length in writer position not possible";
116
+ input.issues.push((0, _syntax_input_1.syntaxIssue)(input, node.getFirstToken(), message));
117
+ return new basic_1.VoidType(_syntax_input_1.CheckSyntaxKey);
101
118
  }
102
- new field_offset_1.FieldOffset().runSyntax(offset, scope, filename);
119
+ new field_offset_1.FieldOffset().runSyntax(offset, input);
103
120
  }
104
121
  const length = node.findDirectExpression(Expressions.FieldLength);
105
122
  if (length) {
106
123
  if (context instanceof basic_1.XStringType || context instanceof basic_1.StringType) {
107
- throw new Error("xstring/string offset/length in writer position not possible");
124
+ const message = "xstring/string offset/length in writer position not possible";
125
+ input.issues.push((0, _syntax_input_1.syntaxIssue)(input, node.getFirstToken(), message));
126
+ return new basic_1.VoidType(_syntax_input_1.CheckSyntaxKey);
108
127
  }
109
- new field_length_1.FieldLength().runSyntax(length, scope, filename);
128
+ new field_length_1.FieldLength().runSyntax(length, input);
110
129
  }
111
130
  return context;
112
131
  }
113
132
  /////////////////////////////////
114
- findTop(node, scope, filename) {
133
+ findTop(node, input) {
115
134
  if (node === undefined) {
116
135
  return undefined;
117
136
  }
@@ -119,26 +138,26 @@ class Target {
119
138
  const name = token.getStr();
120
139
  if (node.get() instanceof Expressions.TargetField
121
140
  || node.get() instanceof Expressions.TargetFieldSymbol) {
122
- const found = scope.findVariable(name);
141
+ const found = input.scope.findVariable(name);
123
142
  if (found) {
124
- scope.addReference(token, found, _reference_1.ReferenceType.DataWriteReference, filename);
143
+ input.scope.addReference(token, found, _reference_1.ReferenceType.DataWriteReference, input.filename);
125
144
  }
126
145
  if (name.includes("~")) {
127
- const idef = scope.findInterfaceDefinition(name.split("~")[0]);
146
+ const idef = input.scope.findInterfaceDefinition(name.split("~")[0]);
128
147
  if (idef) {
129
- scope.addReference(token, idef, _reference_1.ReferenceType.ObjectOrientedReference, filename);
148
+ input.scope.addReference(token, idef, _reference_1.ReferenceType.ObjectOrientedReference, input.filename);
130
149
  }
131
150
  }
132
151
  return found === null || found === void 0 ? void 0 : found.getType();
133
152
  }
134
153
  else if (node.get() instanceof Expressions.ClassName) {
135
- const found = scope.findObjectDefinition(name);
154
+ const found = input.scope.findObjectDefinition(name);
136
155
  if (found) {
137
- scope.addReference(token, found, _reference_1.ReferenceType.ObjectOrientedReference, filename);
156
+ input.scope.addReference(token, found, _reference_1.ReferenceType.ObjectOrientedReference, input.filename);
138
157
  return new basic_1.ObjectReferenceType(found);
139
158
  }
140
- else if (scope.getDDIC().inErrorNamespace(name) === false) {
141
- scope.addReference(token, undefined, _reference_1.ReferenceType.ObjectOrientedVoidReference, filename, { ooName: name, ooType: "CLAS" });
159
+ else if (input.scope.getDDIC().inErrorNamespace(name) === false) {
160
+ input.scope.addReference(token, undefined, _reference_1.ReferenceType.ObjectOrientedVoidReference, input.filename, { ooName: name, ooType: "CLAS" });
142
161
  return new basic_1.VoidType(name);
143
162
  }
144
163
  else {
@@ -146,9 +165,11 @@ class Target {
146
165
  }
147
166
  }
148
167
  else if (node.get() instanceof Expressions.Cast && node instanceof nodes_1.ExpressionNode) {
149
- const ret = new cast_1.Cast().runSyntax(node, scope, undefined, filename);
168
+ const ret = new cast_1.Cast().runSyntax(node, input, undefined);
150
169
  if (ret instanceof unknown_type_1.UnknownType) {
151
- throw new Error("CAST, uknown type");
170
+ const message = "CAST, uknown type";
171
+ input.issues.push((0, _syntax_input_1.syntaxIssue)(input, node.getFirstToken(), message));
172
+ return new basic_1.VoidType(_syntax_input_1.CheckSyntaxKey);
152
173
  }
153
174
  return ret;
154
175
  }
@@ -8,7 +8,7 @@ const basic_1 = require("../../types/basic");
8
8
  const _scope_type_1 = require("../_scope_type");
9
9
  const type_table_key_1 = require("./type_table_key");
10
10
  class TypeTable {
11
- runSyntax(node, scope, filename, qualifiedNamePrefix) {
11
+ runSyntax(node, input, qualifiedNamePrefix) {
12
12
  // todo, input is currently the statement, but should be the expression?
13
13
  let nameExpr = node.findFirstExpression(Expressions.DefinitionName);
14
14
  if (nameExpr === undefined) {
@@ -21,14 +21,14 @@ class TypeTable {
21
21
  let qualifiedName = qualifiedNamePrefix || "";
22
22
  if (node.getFirstToken().getStr().toUpperCase() === "TYPES") {
23
23
  qualifiedName = qualifiedName + name.getStr();
24
- if (scope.getType() === _scope_type_1.ScopeType.ClassDefinition
25
- || scope.getType() === _scope_type_1.ScopeType.Interface) {
26
- qualifiedName = scope.getName() + "=>" + qualifiedName;
24
+ if (input.scope.getType() === _scope_type_1.ScopeType.ClassDefinition
25
+ || input.scope.getType() === _scope_type_1.ScopeType.Interface) {
26
+ qualifiedName = input.scope.getName() + "=>" + qualifiedName;
27
27
  }
28
28
  }
29
- let type = new basic_types_1.BasicTypes(filename, scope).parseTable(node, qualifiedName);
29
+ let type = new basic_types_1.BasicTypes(input).parseTable(node, qualifiedName);
30
30
  if (type === undefined) {
31
- return new _typed_identifier_1.TypedIdentifier(name, filename, new basic_1.UnknownType("TableType, fallback"));
31
+ return new _typed_identifier_1.TypedIdentifier(name, input.filename, new basic_1.UnknownType("TableType, fallback"));
32
32
  }
33
33
  for (const tt of node.findAllExpressions(Expressions.TypeTableKey)) {
34
34
  const error = new type_table_key_1.TypeTableKey().runSyntax(tt, type);
@@ -36,7 +36,7 @@ class TypeTable {
36
36
  type = error;
37
37
  }
38
38
  }
39
- return new _typed_identifier_1.TypedIdentifier(name, filename, type);
39
+ return new _typed_identifier_1.TypedIdentifier(name, input.filename, type);
40
40
  }
41
41
  }
42
42
  exports.TypeTable = TypeTable;