@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
@@ -7,22 +7,25 @@ const target_1 = require("../expressions/target");
7
7
  const basic_1 = require("../../types/basic");
8
8
  const inline_data_1 = require("../expressions/inline_data");
9
9
  const _type_utils_1 = require("../_type_utils");
10
+ const _syntax_input_1 = require("../_syntax_input");
10
11
  class GetBit {
11
- runSyntax(node, scope, filename) {
12
+ runSyntax(node, input) {
12
13
  let lastType = undefined;
13
14
  for (const s of node.findDirectExpressions(Expressions.Source)) {
14
- lastType = new source_1.Source().runSyntax(s, scope, filename);
15
+ lastType = new source_1.Source().runSyntax(s, input);
15
16
  }
16
- if (lastType && new _type_utils_1.TypeUtils(scope).isHexLike(lastType) === false) {
17
- throw new Error("Input must be byte-like");
17
+ if (lastType && new _type_utils_1.TypeUtils(input.scope).isHexLike(lastType) === false) {
18
+ const message = "Input must be byte-like";
19
+ input.issues.push((0, _syntax_input_1.syntaxIssue)(input, node.getFirstToken(), message));
20
+ return;
18
21
  }
19
22
  for (const t of node.findDirectExpressions(Expressions.Target)) {
20
23
  const inline = t === null || t === void 0 ? void 0 : t.findDirectExpression(Expressions.InlineData);
21
24
  if (inline) {
22
- new inline_data_1.InlineData().runSyntax(t, scope, filename, basic_1.IntegerType.get());
25
+ new inline_data_1.InlineData().runSyntax(t, input, basic_1.IntegerType.get());
23
26
  }
24
27
  else {
25
- new target_1.Target().runSyntax(t, scope, filename);
28
+ new target_1.Target().runSyntax(t, input);
26
29
  }
27
30
  }
28
31
  }
@@ -4,9 +4,9 @@ exports.GetCursor = void 0;
4
4
  const Expressions = require("../../2_statements/expressions");
5
5
  const target_1 = require("../expressions/target");
6
6
  class GetCursor {
7
- runSyntax(node, scope, filename) {
7
+ runSyntax(node, input) {
8
8
  for (const t of node.findAllExpressions(Expressions.Target)) {
9
- new target_1.Target().runSyntax(t, scope, filename);
9
+ new target_1.Target().runSyntax(t, input);
10
10
  }
11
11
  }
12
12
  }
@@ -5,12 +5,12 @@ const Expressions = require("../../2_statements/expressions");
5
5
  const target_1 = require("../expressions/target");
6
6
  const source_1 = require("../expressions/source");
7
7
  class GetLocale {
8
- runSyntax(node, scope, filename) {
8
+ runSyntax(node, input) {
9
9
  for (const s of node.findDirectExpressions(Expressions.Source)) {
10
- new source_1.Source().runSyntax(s, scope, filename);
10
+ new source_1.Source().runSyntax(s, input);
11
11
  }
12
12
  for (const t of node.findDirectExpressions(Expressions.Target)) {
13
- new target_1.Target().runSyntax(t, scope, filename);
13
+ new target_1.Target().runSyntax(t, input);
14
14
  }
15
15
  }
16
16
  }
@@ -7,17 +7,17 @@ const basic_1 = require("../../types/basic");
7
7
  const target_1 = require("../expressions/target");
8
8
  const source_1 = require("../expressions/source");
9
9
  class GetParameter {
10
- runSyntax(node, scope, filename) {
10
+ runSyntax(node, input) {
11
11
  const target = node.findDirectExpression(Expressions.Target);
12
12
  const inline = target === null || target === void 0 ? void 0 : target.findDirectExpression(Expressions.InlineData);
13
13
  if (inline) {
14
- new inline_data_1.InlineData().runSyntax(inline, scope, filename, new basic_1.CharacterType(40));
14
+ new inline_data_1.InlineData().runSyntax(inline, input, new basic_1.CharacterType(40));
15
15
  }
16
16
  else if (target) {
17
- new target_1.Target().runSyntax(target, scope, filename);
17
+ new target_1.Target().runSyntax(target, input);
18
18
  }
19
19
  for (const s of node.findDirectExpressions(Expressions.Source)) {
20
- new source_1.Source().runSyntax(s, scope, filename);
20
+ new source_1.Source().runSyntax(s, input);
21
21
  }
22
22
  }
23
23
  }
@@ -6,21 +6,24 @@ const source_1 = require("../expressions/source");
6
6
  const target_1 = require("../expressions/target");
7
7
  const inline_data_1 = require("../expressions/inline_data");
8
8
  const basic_1 = require("../../types/basic");
9
+ const _syntax_input_1 = require("../_syntax_input");
9
10
  class GetReference {
10
- runSyntax(node, scope, filename) {
11
+ runSyntax(node, input) {
11
12
  const s = node.findDirectExpression(Expressions.Source);
12
- const type = new source_1.Source().runSyntax(s, scope, filename);
13
+ const type = new source_1.Source().runSyntax(s, input);
13
14
  const target = node.findDirectExpression(Expressions.Target);
14
15
  const inline = target === null || target === void 0 ? void 0 : target.findDirectExpression(Expressions.InlineData);
15
16
  // todo: error if inline field symbol
16
17
  if (inline) {
17
18
  if (type instanceof basic_1.AnyType) {
18
- throw new Error("GET REFERENCE generic and inline declaration not possible");
19
+ const message = "GET REFERENCE generic and inline declaration not possible";
20
+ input.issues.push((0, _syntax_input_1.syntaxIssue)(input, node.getFirstToken(), message));
21
+ return;
19
22
  }
20
- new inline_data_1.InlineData().runSyntax(inline, scope, filename, type ? new basic_1.DataReference(type) : undefined);
23
+ new inline_data_1.InlineData().runSyntax(inline, input, type ? new basic_1.DataReference(type) : undefined);
21
24
  }
22
25
  else if (target) {
23
- new target_1.Target().runSyntax(target, scope, filename);
26
+ new target_1.Target().runSyntax(target, input);
24
27
  }
25
28
  }
26
29
  }
@@ -6,14 +6,14 @@ const inline_data_1 = require("../expressions/inline_data");
6
6
  const basic_1 = require("../../types/basic");
7
7
  const target_1 = require("../expressions/target");
8
8
  class GetRunTime {
9
- runSyntax(node, scope, filename) {
9
+ runSyntax(node, input) {
10
10
  const target = node.findDirectExpression(Expressions.Target);
11
11
  const inline = target === null || target === void 0 ? void 0 : target.findDirectExpression(Expressions.InlineData);
12
12
  if (inline) {
13
- new inline_data_1.InlineData().runSyntax(inline, scope, filename, basic_1.IntegerType.get());
13
+ new inline_data_1.InlineData().runSyntax(inline, input, basic_1.IntegerType.get());
14
14
  }
15
15
  else if (target) {
16
- new target_1.Target().runSyntax(target, scope, filename);
16
+ new target_1.Target().runSyntax(target, input);
17
17
  }
18
18
  }
19
19
  }
@@ -6,14 +6,14 @@ const inline_data_1 = require("../expressions/inline_data");
6
6
  const basic_1 = require("../../types/basic");
7
7
  const target_1 = require("../expressions/target");
8
8
  class GetTime {
9
- runSyntax(node, scope, filename) {
9
+ runSyntax(node, input) {
10
10
  const target = node.findDirectExpression(Expressions.Target);
11
11
  const inline = target === null || target === void 0 ? void 0 : target.findDirectExpression(Expressions.InlineData);
12
12
  if (inline) {
13
- new inline_data_1.InlineData().runSyntax(inline, scope, filename, new basic_1.PackedType(8, 0));
13
+ new inline_data_1.InlineData().runSyntax(inline, input, new basic_1.PackedType(8, 0));
14
14
  }
15
15
  else if (target) {
16
- new target_1.Target().runSyntax(target, scope, filename);
16
+ new target_1.Target().runSyntax(target, input);
17
17
  }
18
18
  }
19
19
  }
@@ -4,9 +4,9 @@ exports.If = void 0;
4
4
  const Expressions = require("../../2_statements/expressions");
5
5
  const cond_1 = require("../expressions/cond");
6
6
  class If {
7
- runSyntax(node, scope, filename) {
7
+ runSyntax(node, input) {
8
8
  for (const s of node.findDirectExpressions(Expressions.Cond)) {
9
- new cond_1.Cond().runSyntax(s, scope, filename);
9
+ new cond_1.Cond().runSyntax(s, input);
10
10
  }
11
11
  }
12
12
  }
@@ -5,19 +5,19 @@ const Expressions = require("../../2_statements/expressions");
5
5
  const source_1 = require("../expressions/source");
6
6
  const target_1 = require("../expressions/target");
7
7
  class Import {
8
- runSyntax(node, scope, filename) {
8
+ runSyntax(node, input) {
9
9
  var _a;
10
10
  for (const s of node.findDirectExpressions(Expressions.Source)) {
11
- new source_1.Source().runSyntax(s, scope, filename);
11
+ new source_1.Source().runSyntax(s, input);
12
12
  }
13
13
  for (const t of node.findDirectExpressions(Expressions.Target)) {
14
- new target_1.Target().runSyntax(t, scope, filename);
14
+ new target_1.Target().runSyntax(t, input);
15
15
  }
16
16
  const databaseName = node.findExpressionAfterToken("DATABASE");
17
17
  if (databaseName) {
18
- const found = (_a = scope.getDDIC()) === null || _a === void 0 ? void 0 : _a.lookupTableOrView(databaseName.concatTokens());
18
+ const found = (_a = input.scope.getDDIC()) === null || _a === void 0 ? void 0 : _a.lookupTableOrView(databaseName.concatTokens());
19
19
  if (found) {
20
- scope.getDDICReferences().addUsing(scope.getParentObj(), { object: found.object });
20
+ input.scope.getDDICReferences().addUsing(input.scope.getParentObj(), { object: found.object });
21
21
  }
22
22
  }
23
23
  }
@@ -5,12 +5,12 @@ const Expressions = require("../../2_statements/expressions");
5
5
  const source_1 = require("../expressions/source");
6
6
  const target_1 = require("../expressions/target");
7
7
  class ImportDynpro {
8
- runSyntax(node, scope, filename) {
8
+ runSyntax(node, input) {
9
9
  for (const s of node.findDirectExpressions(Expressions.Source)) {
10
- new source_1.Source().runSyntax(s, scope, filename);
10
+ new source_1.Source().runSyntax(s, input);
11
11
  }
12
12
  for (const t of node.findDirectExpressions(Expressions.Target)) {
13
- new target_1.Target().runSyntax(t, scope, filename);
13
+ new target_1.Target().runSyntax(t, input);
14
14
  }
15
15
  }
16
16
  }
@@ -5,16 +5,18 @@ const Expressions = require("../../2_statements/expressions");
5
5
  const basic_1 = require("../../types/basic");
6
6
  const basic_types_1 = require("../basic_types");
7
7
  const _typed_identifier_1 = require("../../types/_typed_identifier");
8
+ const _syntax_input_1 = require("../_syntax_input");
9
+ const assert_error_1 = require("../assert_error");
8
10
  class IncludeType {
9
- runSyntax(node, scope, filename) {
11
+ runSyntax(node, input) {
10
12
  var _a, _b;
11
13
  const components = [];
12
14
  const iname = node.findFirstExpression(Expressions.TypeName);
13
15
  if (iname === undefined) {
14
- throw new Error("IncludeType, unexpected node structure");
16
+ throw new assert_error_1.AssertError("IncludeType, unexpected node structure");
15
17
  }
16
18
  const name = iname.getFirstToken().getStr();
17
- let ityp = new basic_types_1.BasicTypes(filename, scope).parseType(iname);
19
+ let ityp = new basic_types_1.BasicTypes(input).parseType(iname);
18
20
  const as = (_a = node.findExpressionAfterToken("AS")) === null || _a === void 0 ? void 0 : _a.concatTokens();
19
21
  if (as && ityp instanceof basic_1.StructureType) {
20
22
  ityp = new basic_1.StructureType(ityp.getComponents().concat([{
@@ -50,11 +52,13 @@ class IncludeType {
50
52
  else if (ityp && ityp instanceof basic_1.VoidType) {
51
53
  return ityp;
52
54
  }
53
- else if (scope.getDDIC().inErrorNamespace(name) === false) {
55
+ else if (input.scope.getDDIC().inErrorNamespace(name) === false) {
54
56
  return new basic_1.VoidType(name);
55
57
  }
56
58
  else {
57
- throw new Error("IncludeType, type not found \"" + iname.concatTokens() + "\"");
59
+ const message = "IncludeType, type not found \"" + iname.concatTokens() + "\"";
60
+ input.issues.push((0, _syntax_input_1.syntaxIssue)(input, node.getFirstToken(), message));
61
+ return new basic_1.VoidType(_syntax_input_1.CheckSyntaxKey);
58
62
  }
59
63
  return components;
60
64
  }
@@ -6,19 +6,19 @@ const source_1 = require("../expressions/source");
6
6
  const dynamic_1 = require("../expressions/dynamic");
7
7
  const database_table_1 = require("../expressions/database_table");
8
8
  class InsertDatabase {
9
- runSyntax(node, scope, filename) {
9
+ runSyntax(node, input) {
10
10
  for (const s of node.findAllExpressions(Expressions.Source)) {
11
- new source_1.Source().runSyntax(s, scope, filename);
11
+ new source_1.Source().runSyntax(s, input);
12
12
  }
13
13
  for (const s of node.findAllExpressions(Expressions.SimpleSource3)) {
14
- new source_1.Source().runSyntax(s, scope, filename);
14
+ new source_1.Source().runSyntax(s, input);
15
15
  }
16
16
  for (const d of node.findAllExpressions(Expressions.Dynamic)) {
17
- new dynamic_1.Dynamic().runSyntax(d, scope, filename);
17
+ new dynamic_1.Dynamic().runSyntax(d, input);
18
18
  }
19
19
  const dbtab = node.findFirstExpression(Expressions.DatabaseTable);
20
20
  if (dbtab !== undefined) {
21
- new database_table_1.DatabaseTable().runSyntax(dbtab, scope, filename);
21
+ new database_table_1.DatabaseTable().runSyntax(dbtab, input);
22
22
  }
23
23
  }
24
24
  }
@@ -5,15 +5,15 @@ const Expressions = require("../../2_statements/expressions");
5
5
  const source_1 = require("../expressions/source");
6
6
  const target_1 = require("../expressions/target");
7
7
  class InsertFieldGroup {
8
- runSyntax(node, scope, filename) {
8
+ runSyntax(node, input) {
9
9
  for (const s of node.findAllExpressions(Expressions.Source)) {
10
- new source_1.Source().runSyntax(s, scope, filename);
10
+ new source_1.Source().runSyntax(s, input);
11
11
  }
12
12
  for (const s of node.findAllExpressions(Expressions.SimpleSource1)) {
13
- new source_1.Source().runSyntax(s, scope, filename);
13
+ new source_1.Source().runSyntax(s, input);
14
14
  }
15
15
  for (const t of node.findDirectExpressions(Expressions.Target)) {
16
- new target_1.Target().runSyntax(t, scope, filename);
16
+ new target_1.Target().runSyntax(t, input);
17
17
  }
18
18
  }
19
19
  }
@@ -9,19 +9,22 @@ const fstarget_1 = require("../expressions/fstarget");
9
9
  const basic_1 = require("../../types/basic");
10
10
  const inline_data_1 = require("../expressions/inline_data");
11
11
  const _type_utils_1 = require("../_type_utils");
12
+ const _syntax_input_1 = require("../_syntax_input");
12
13
  class InsertInternal {
13
- runSyntax(node, scope, filename) {
14
+ runSyntax(node, input) {
14
15
  let targetType;
15
16
  const t = node.findDirectExpression(Expressions.Target);
16
17
  if (t) {
17
- targetType = new target_1.Target().runSyntax(t, scope, filename);
18
+ targetType = new target_1.Target().runSyntax(t, input);
18
19
  }
19
20
  if (!(targetType instanceof basic_1.TableType)
20
21
  && !(targetType instanceof basic_1.VoidType)
21
22
  && !(targetType instanceof basic_1.AnyType)
22
23
  && !(targetType instanceof basic_1.UnknownType)
23
24
  && targetType !== undefined) {
24
- throw new Error("INSERT target must be a table");
25
+ const message = "INSERT target must be a table";
26
+ input.issues.push((0, _syntax_input_1.syntaxIssue)(input, node.getFirstToken(), message));
27
+ return;
25
28
  }
26
29
  else if (targetType instanceof basic_1.TableType
27
30
  && node.findDirectTokenByText("LINES") === undefined) {
@@ -31,48 +34,54 @@ class InsertInternal {
31
34
  if (source === undefined) {
32
35
  source = node.findDirectExpression(Expressions.Source);
33
36
  }
34
- const sourceType = source ? new source_1.Source().runSyntax(source, scope, filename, targetType) : targetType;
37
+ const sourceType = source ? new source_1.Source().runSyntax(source, input, targetType) : targetType;
35
38
  if (targetType === undefined
36
39
  && !(sourceType instanceof basic_1.TableType)
37
40
  && !(sourceType instanceof basic_1.VoidType)
38
41
  && !(sourceType instanceof basic_1.AnyType)
39
42
  && !(sourceType instanceof basic_1.UnknownType)) {
40
- throw new Error("INSERT target must be a table");
43
+ const message = "INSERT target must be a table";
44
+ input.issues.push((0, _syntax_input_1.syntaxIssue)(input, node.getFirstToken(), message));
45
+ return;
41
46
  }
42
47
  const afterAssigning = node.findExpressionAfterToken("ASSIGNING");
43
48
  if ((afterAssigning === null || afterAssigning === void 0 ? void 0 : afterAssigning.get()) instanceof Expressions.FSTarget) {
44
49
  const inlinefs = afterAssigning === null || afterAssigning === void 0 ? void 0 : afterAssigning.findDirectExpression(Expressions.InlineFS);
45
50
  if (inlinefs) {
46
- new inline_fs_1.InlineFS().runSyntax(inlinefs, scope, filename, sourceType);
51
+ new inline_fs_1.InlineFS().runSyntax(inlinefs, input, sourceType);
47
52
  }
48
53
  else {
49
- new fstarget_1.FSTarget().runSyntax(afterAssigning, scope, filename, sourceType);
54
+ new fstarget_1.FSTarget().runSyntax(afterAssigning, input, sourceType);
50
55
  }
51
56
  }
52
57
  if (node.findDirectTokenByText("INITIAL") === undefined) {
53
- if (new _type_utils_1.TypeUtils(scope).isAssignableStrict(sourceType, targetType) === false) {
54
- throw new Error("Types not compatible");
58
+ if (new _type_utils_1.TypeUtils(input.scope).isAssignableStrict(sourceType, targetType) === false) {
59
+ const message = "Types not compatible";
60
+ input.issues.push((0, _syntax_input_1.syntaxIssue)(input, node.getFirstToken(), message));
61
+ return;
55
62
  }
56
63
  else if (sourceType instanceof basic_1.CharacterType && targetType instanceof basic_1.StringType) {
57
64
  // yea, well, INSERT doesnt convert the values automatically, like everything else?
58
- throw new Error("Types not compatible");
65
+ const message = "Types not compatible";
66
+ input.issues.push((0, _syntax_input_1.syntaxIssue)(input, node.getFirstToken(), message));
67
+ return;
59
68
  }
60
69
  }
61
70
  const afterInto = node.findExpressionAfterToken("INTO");
62
71
  if ((afterInto === null || afterInto === void 0 ? void 0 : afterInto.get()) instanceof Expressions.Target && sourceType) {
63
72
  const inline = afterInto.findDirectExpression(Expressions.InlineData);
64
73
  if (inline) {
65
- new inline_data_1.InlineData().runSyntax(afterInto, scope, filename, new basic_1.DataReference(sourceType));
74
+ new inline_data_1.InlineData().runSyntax(afterInto, input, new basic_1.DataReference(sourceType));
66
75
  }
67
76
  else {
68
- new target_1.Target().runSyntax(afterInto, scope, filename);
77
+ new target_1.Target().runSyntax(afterInto, input);
69
78
  }
70
79
  }
71
80
  for (const s of node.findDirectExpressions(Expressions.Source)) {
72
81
  if (s === source) {
73
82
  continue;
74
83
  }
75
- new source_1.Source().runSyntax(s, scope, filename, targetType);
84
+ new source_1.Source().runSyntax(s, input, targetType);
76
85
  }
77
86
  }
78
87
  }
@@ -4,9 +4,9 @@ exports.InsertReport = void 0;
4
4
  const Expressions = require("../../2_statements/expressions");
5
5
  const source_1 = require("../expressions/source");
6
6
  class InsertReport {
7
- runSyntax(node, scope, filename) {
7
+ runSyntax(node, input) {
8
8
  for (const s of node.findDirectExpressions(Expressions.Source)) {
9
- new source_1.Source().runSyntax(s, scope, filename);
9
+ new source_1.Source().runSyntax(s, input);
10
10
  }
11
11
  }
12
12
  }
@@ -4,9 +4,9 @@ exports.InsertTextpool = void 0;
4
4
  const Expressions = require("../../2_statements/expressions");
5
5
  const source_1 = require("../expressions/source");
6
6
  class InsertTextpool {
7
- runSyntax(node, scope, filename) {
7
+ runSyntax(node, input) {
8
8
  for (const s of node.findDirectExpressions(Expressions.Source)) {
9
- new source_1.Source().runSyntax(s, scope, filename);
9
+ new source_1.Source().runSyntax(s, input);
10
10
  }
11
11
  }
12
12
  }
@@ -3,10 +3,10 @@ Object.defineProperty(exports, "__esModule", { value: true });
3
3
  exports.InterfaceDeferred = void 0;
4
4
  const Expressions = require("../../2_statements/expressions");
5
5
  class InterfaceDeferred {
6
- runSyntax(node, scope, _filename) {
6
+ runSyntax(node, input) {
7
7
  var _a;
8
8
  const name = (_a = node.findFirstExpression(Expressions.InterfaceName)) === null || _a === void 0 ? void 0 : _a.getFirstToken();
9
- scope.addDeferred(name, "INTF");
9
+ input.scope.addDeferred(name, "INTF");
10
10
  }
11
11
  }
12
12
  exports.InterfaceDeferred = InterfaceDeferred;
@@ -4,10 +4,10 @@ exports.LogPoint = void 0;
4
4
  const Expressions = require("../../2_statements/expressions");
5
5
  const source_1 = require("../expressions/source");
6
6
  class LogPoint {
7
- runSyntax(node, scope, filename) {
7
+ runSyntax(node, input) {
8
8
  // just recurse
9
9
  for (const s of node.findDirectExpressions(Expressions.Source)) {
10
- new source_1.Source().runSyntax(s, scope, filename);
10
+ new source_1.Source().runSyntax(s, input);
11
11
  }
12
12
  }
13
13
  }
@@ -11,11 +11,12 @@ const fstarget_1 = require("../expressions/fstarget");
11
11
  const component_cond_1 = require("../expressions/component_cond");
12
12
  const dynamic_1 = require("../expressions/dynamic");
13
13
  const loop_group_by_1 = require("../expressions/loop_group_by");
14
+ const _syntax_input_1 = require("../_syntax_input");
14
15
  class Loop {
15
- runSyntax(node, scope, filename) {
16
+ runSyntax(node, input) {
16
17
  const loopTarget = node.findDirectExpression(Expressions.LoopTarget);
17
18
  let target = loopTarget === null || loopTarget === void 0 ? void 0 : loopTarget.findDirectExpression(Expressions.Target);
18
- const targetType = target ? new target_1.Target().runSyntax(target, scope, filename) : undefined;
19
+ const targetType = target ? new target_1.Target().runSyntax(target, input) : undefined;
19
20
  if (target === undefined) {
20
21
  target = node.findDirectExpression(Expressions.FSTarget);
21
22
  }
@@ -25,32 +26,42 @@ class Loop {
25
26
  if (firstSource === undefined) {
26
27
  firstSource = sources[0];
27
28
  }
28
- let sourceType = firstSource ? new source_1.Source().runSyntax(firstSource, scope, filename, targetType, write) : undefined;
29
+ let sourceType = firstSource ? new source_1.Source().runSyntax(firstSource, input, targetType, write) : undefined;
29
30
  let rowType = undefined;
30
31
  const concat = node.concatTokens().toUpperCase();
31
32
  if (sourceType === undefined) {
32
- throw new Error("No source type determined");
33
+ const message = "No source type determined";
34
+ input.issues.push((0, _syntax_input_1.syntaxIssue)(input, node.getFirstToken(), message));
35
+ return;
33
36
  }
34
37
  else if (sourceType instanceof basic_1.UnknownType) {
35
- throw new Error("Loop, not a table type, " + sourceType.getError());
38
+ const message = "Loop, not a table type, " + sourceType.getError();
39
+ input.issues.push((0, _syntax_input_1.syntaxIssue)(input, node.getFirstToken(), message));
40
+ return;
36
41
  }
37
42
  else if (sourceType instanceof basic_1.TableType
38
43
  && target === undefined
39
44
  && sourceType.isWithHeader() === false
40
45
  && node.getChildren().length === 4) {
41
- throw new Error("Loop, no header line");
46
+ const message = "Loop, no header line";
47
+ input.issues.push((0, _syntax_input_1.syntaxIssue)(input, node.getFirstToken(), message));
48
+ return;
42
49
  }
43
50
  else if (!(sourceType instanceof basic_1.TableType)
44
51
  && !(sourceType instanceof basic_1.AnyType)
45
52
  && !(sourceType instanceof basic_1.DataType)
46
53
  && !(sourceType instanceof basic_1.VoidType)
47
54
  && concat.startsWith("LOOP AT GROUP ") === false) {
48
- throw new Error("Loop, not a table type");
55
+ const message = "Loop, not a table type";
56
+ input.issues.push((0, _syntax_input_1.syntaxIssue)(input, node.getFirstToken(), message));
57
+ return;
49
58
  }
50
59
  else if (loopTarget === undefined
51
60
  && sourceType instanceof basic_1.TableType
52
61
  && sourceType.isWithHeader() === false) {
53
- throw new Error("Loop, no header");
62
+ const message = "Loop, no header";
63
+ input.issues.push((0, _syntax_input_1.syntaxIssue)(input, node.getFirstToken(), message));
64
+ return;
54
65
  }
55
66
  const targetConcat = loopTarget === null || loopTarget === void 0 ? void 0 : loopTarget.concatTokens().toUpperCase();
56
67
  if (sourceType instanceof basic_1.TableType) {
@@ -63,37 +74,39 @@ class Loop {
63
74
  if (targetConcat
64
75
  && targetConcat.startsWith("TRANSPORTING ")
65
76
  && node.findDirectTokenByText("WHERE") === undefined) {
66
- throw new Error("Loop, TRANSPORTING NO FIELDS only with WHERE");
77
+ const message = "Loop, TRANSPORTING NO FIELDS only with WHERE";
78
+ input.issues.push((0, _syntax_input_1.syntaxIssue)(input, node.getFirstToken(), message));
79
+ return;
67
80
  }
68
81
  const inline = target === null || target === void 0 ? void 0 : target.findDirectExpression(Expressions.InlineData);
69
82
  if (inline) {
70
- new inline_data_1.InlineData().runSyntax(inline, scope, filename, sourceType);
83
+ new inline_data_1.InlineData().runSyntax(inline, input, sourceType);
71
84
  }
72
85
  for (const s of sources) {
73
86
  if (s === firstSource) {
74
87
  continue;
75
88
  }
76
- new source_1.Source().runSyntax(s, scope, filename);
89
+ new source_1.Source().runSyntax(s, input);
77
90
  }
78
91
  const inlinefs = target === null || target === void 0 ? void 0 : target.findDirectExpression(Expressions.InlineFS);
79
92
  if (inlinefs) {
80
- new inline_fs_1.InlineFS().runSyntax(inlinefs, scope, filename, sourceType);
93
+ new inline_fs_1.InlineFS().runSyntax(inlinefs, input, sourceType);
81
94
  }
82
95
  else {
83
96
  const fstarget = loopTarget === null || loopTarget === void 0 ? void 0 : loopTarget.findDirectExpression(Expressions.FSTarget);
84
97
  if (fstarget) {
85
- new fstarget_1.FSTarget().runSyntax(fstarget, scope, filename, sourceType);
98
+ new fstarget_1.FSTarget().runSyntax(fstarget, input, sourceType);
86
99
  }
87
100
  }
88
101
  for (const t of node.findDirectExpressions(Expressions.ComponentCond)) {
89
- new component_cond_1.ComponentCond().runSyntax(t, scope, filename, rowType);
102
+ new component_cond_1.ComponentCond().runSyntax(t, input, rowType);
90
103
  }
91
104
  for (const t of node.findDirectExpressions(Expressions.Dynamic)) {
92
- new dynamic_1.Dynamic().runSyntax(t, scope, filename);
105
+ new dynamic_1.Dynamic().runSyntax(t, input);
93
106
  }
94
107
  const group = node.findDirectExpression(Expressions.LoopGroupBy);
95
108
  if (group) {
96
- new loop_group_by_1.LoopGroupBy().runSyntax(group, scope, filename);
109
+ new loop_group_by_1.LoopGroupBy().runSyntax(group, input);
97
110
  }
98
111
  }
99
112
  }
@@ -6,14 +6,14 @@ const target_1 = require("../expressions/target");
6
6
  const inline_data_1 = require("../expressions/inline_data");
7
7
  const basic_1 = require("../../types/basic");
8
8
  class LoopAtScreen {
9
- runSyntax(node, scope, filename) {
9
+ runSyntax(node, input) {
10
10
  const target = node.findDirectExpression(Expressions.Target);
11
11
  if (target) {
12
- new target_1.Target().runSyntax(target, scope, filename);
12
+ new target_1.Target().runSyntax(target, input);
13
13
  }
14
14
  const inline = target === null || target === void 0 ? void 0 : target.findDirectExpression(Expressions.InlineData);
15
15
  if (inline) {
16
- new inline_data_1.InlineData().runSyntax(inline, scope, filename, new basic_1.VoidType("SCREEN"));
16
+ new inline_data_1.InlineData().runSyntax(inline, input, new basic_1.VoidType("SCREEN"));
17
17
  }
18
18
  }
19
19
  }
@@ -8,23 +8,23 @@ const source_1 = require("../expressions/source");
8
8
  const target_1 = require("../expressions/target");
9
9
  const message_source_1 = require("../expressions/message_source");
10
10
  class Message {
11
- runSyntax(node, scope, filename) {
11
+ runSyntax(node, input) {
12
12
  const found = node.findExpressionAfterToken("INTO");
13
13
  const inline = found === null || found === void 0 ? void 0 : found.findDirectExpression(Expressions.InlineData);
14
14
  if (inline) {
15
- new inline_data_1.InlineData().runSyntax(inline, scope, filename, basic_1.StringType.get());
15
+ new inline_data_1.InlineData().runSyntax(inline, input, basic_1.StringType.get());
16
16
  }
17
17
  else if (found) {
18
- new target_1.Target().runSyntax(found, scope, filename);
18
+ new target_1.Target().runSyntax(found, input);
19
19
  }
20
20
  for (const s of node.findDirectExpressions(Expressions.Source)) {
21
- new source_1.Source().runSyntax(s, scope, filename);
21
+ new source_1.Source().runSyntax(s, input);
22
22
  }
23
23
  for (const s of node.findDirectExpressions(Expressions.SimpleSource3)) {
24
- new source_1.Source().runSyntax(s, scope, filename);
24
+ new source_1.Source().runSyntax(s, input);
25
25
  }
26
26
  for (const s of node.findDirectExpressions(Expressions.MessageSource)) {
27
- new message_source_1.MessageSource().runSyntax(s, scope, filename);
27
+ new message_source_1.MessageSource().runSyntax(s, input);
28
28
  }
29
29
  }
30
30
  }