@abaplint/core 2.111.0 → 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 +8 -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 +52 -64
  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
@@ -5,15 +5,15 @@ const Expressions = require("../../2_statements/expressions");
5
5
  const inline_field_definition_1 = require("./inline_field_definition");
6
6
  const _scope_type_1 = require("../_scope_type");
7
7
  class Let {
8
- runSyntax(node, scope, filename, skipScope = false) {
8
+ runSyntax(node, input, skipScope = false) {
9
9
  if (node === undefined) {
10
10
  return false;
11
11
  }
12
12
  if (skipScope !== true) {
13
- scope.push(_scope_type_1.ScopeType.Let, "LET", node.getFirstToken().getStart(), filename);
13
+ input.scope.push(_scope_type_1.ScopeType.Let, "LET", node.getFirstToken().getStart(), input.filename);
14
14
  }
15
15
  for (const f of node.findDirectExpressions(Expressions.InlineFieldDefinition)) {
16
- new inline_field_definition_1.InlineFieldDefinition().runSyntax(f, scope, filename);
16
+ new inline_field_definition_1.InlineFieldDefinition().runSyntax(f, input);
17
17
  }
18
18
  return true;
19
19
  }
@@ -8,32 +8,22 @@ const inline_data_1 = require("./inline_data");
8
8
  const fstarget_1 = require("./fstarget");
9
9
  const target_1 = require("./target");
10
10
  class LoopGroupBy {
11
- runSyntax(node, scope, filename) {
11
+ runSyntax(node, input) {
12
12
  for (const t of node.findAllExpressions(Expressions.Target)) {
13
13
  const inline = t.findDirectExpression(Expressions.InlineData);
14
14
  if (inline) {
15
- new inline_data_1.InlineData().runSyntax(inline, scope, filename, new basic_1.VoidType("todoGroupBy"));
15
+ new inline_data_1.InlineData().runSyntax(inline, input, new basic_1.VoidType("todoGroupBy"));
16
16
  }
17
17
  else {
18
- new target_1.Target().runSyntax(t, scope, filename);
18
+ new target_1.Target().runSyntax(t, input);
19
19
  }
20
20
  }
21
21
  for (const t of node.findAllExpressions(Expressions.FSTarget)) {
22
- new fstarget_1.FSTarget().runSyntax(t, scope, filename, new basic_1.VoidType("todoGroupBy"));
22
+ new fstarget_1.FSTarget().runSyntax(t, input, new basic_1.VoidType("todoGroupBy"));
23
23
  }
24
- /*
25
- const components: IStructureComponent[] = [];
26
- for (const c of node.findDirectExpressions(Expressions.LoopGroupByComponent)) {
27
- components.push({name: c.getFirstToken().getStr(), type: new VoidType("todoGroupBy")});
28
- }
29
- if (components.length === 0) {
30
- return;
31
- }
32
- */
33
- // const sourceType = new StructureType(components);
34
24
  for (const c of node.findDirectExpressions(Expressions.LoopGroupByComponent)) {
35
25
  for (const t of c.findDirectExpressions(Expressions.ComponentCompareSingle)) {
36
- new component_compare_1.ComponentCompare().runSyntax(t, scope, filename);
26
+ new component_compare_1.ComponentCompare().runSyntax(t, input);
37
27
  }
38
28
  }
39
29
  }
@@ -4,10 +4,10 @@ exports.MessageSource = void 0;
4
4
  const Expressions = require("../../2_statements/expressions");
5
5
  const source_1 = require("./source");
6
6
  class MessageSource {
7
- runSyntax(node, scope, filename) {
7
+ runSyntax(node, input) {
8
8
  var _a, _b, _c, _d, _e;
9
9
  for (const f of node.findDirectExpressions(Expressions.Source)) {
10
- new source_1.Source().runSyntax(f, scope, filename);
10
+ new source_1.Source().runSyntax(f, input);
11
11
  }
12
12
  if (node.getFirstToken().getStr().toUpperCase() === "ID") {
13
13
  const id = (_a = node.findExpressionAfterToken("ID")) === null || _a === void 0 ? void 0 : _a.concatTokens();
@@ -20,7 +20,7 @@ class MessageSource {
20
20
  }
21
21
  if ((id === null || id === void 0 ? void 0 : id.startsWith("'")) && number) {
22
22
  const messageClass = id.substring(1, id.length - 1).toUpperCase();
23
- scope.getMSAGReferences().addUsing(filename, node.getFirstToken(), messageClass, number);
23
+ input.scope.getMSAGReferences().addUsing(input.filename, node.getFirstToken(), messageClass, number);
24
24
  }
25
25
  }
26
26
  else {
@@ -28,7 +28,7 @@ class MessageSource {
28
28
  const messageNumber = typeAndNumber === null || typeAndNumber === void 0 ? void 0 : typeAndNumber.substring(1);
29
29
  const messageClass = (_e = node.findDirectExpression(Expressions.MessageClass)) === null || _e === void 0 ? void 0 : _e.concatTokens().toUpperCase();
30
30
  if (messageNumber && messageClass) {
31
- scope.getMSAGReferences().addUsing(filename, node.getFirstToken(), messageClass, messageNumber);
31
+ input.scope.getMSAGReferences().addUsing(input.filename, node.getFirstToken(), messageClass, messageNumber);
32
32
  }
33
33
  }
34
34
  }
@@ -6,18 +6,18 @@ const method_parameters_1 = require("./method_parameters");
6
6
  const source_1 = require("./source");
7
7
  const method_call_param_1 = require("./method_call_param");
8
8
  class MethodCallBody {
9
- runSyntax(node, scope, filename, method) {
9
+ runSyntax(node, input, method) {
10
10
  const parameters = node.findDirectExpression(Expressions.MethodParameters);
11
11
  if (parameters) {
12
- new method_parameters_1.MethodParameters().runSyntax(parameters, scope, method, filename);
12
+ new method_parameters_1.MethodParameters().runSyntax(parameters, input, method);
13
13
  }
14
14
  const param = node.findDirectExpression(Expressions.MethodCallParam);
15
15
  if (param) {
16
- new method_call_param_1.MethodCallParam().runSyntax(param, scope, method, filename);
16
+ new method_call_param_1.MethodCallParam().runSyntax(param, input, method);
17
17
  }
18
18
  // for PARAMETER-TABLE and EXCEPTION-TABLE
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
  }
@@ -14,16 +14,19 @@ const _reference_1 = require("../_reference");
14
14
  const component_name_1 = require("./component_name");
15
15
  const attribute_name_1 = require("./attribute_name");
16
16
  const class_definition_1 = require("../../types/class_definition");
17
+ const _syntax_input_1 = require("../_syntax_input");
17
18
  class MethodCallChain {
18
- runSyntax(node, scope, filename, targetType) {
19
+ runSyntax(node, input, targetType) {
19
20
  var _a, _b;
20
- const helper = new _object_oriented_1.ObjectOriented(scope);
21
+ const helper = new _object_oriented_1.ObjectOriented(input.scope);
21
22
  const children = node.getChildren().slice();
22
23
  const first = children.shift();
23
24
  if (first === undefined) {
24
- throw new Error("MethodCallChain, first child expected");
25
+ const message = "MethodCallChain, first child expected";
26
+ input.issues.push((0, _syntax_input_1.syntaxIssue)(input, node.getFirstToken(), message));
27
+ return new basic_1.VoidType(_syntax_input_1.CheckSyntaxKey);
25
28
  }
26
- let context = this.findTop(first, scope, targetType, filename);
29
+ let context = this.findTop(first, input, targetType);
27
30
  if (first.get() instanceof Expressions.MethodCall) {
28
31
  children.unshift(first);
29
32
  }
@@ -38,37 +41,41 @@ class MethodCallChain {
38
41
  const className = context instanceof basic_1.ObjectReferenceType ? context.getIdentifierName() : undefined;
39
42
  const methodToken = (_a = current.findDirectExpression(Expressions.MethodName)) === null || _a === void 0 ? void 0 : _a.getFirstToken();
40
43
  const methodName = methodToken === null || methodToken === void 0 ? void 0 : methodToken.getStr();
41
- const def = scope.findObjectDefinition(className);
44
+ const def = input.scope.findObjectDefinition(className);
42
45
  // eslint-disable-next-line prefer-const
43
46
  let { method, def: foundDef } = helper.searchMethodName(def, methodName);
44
47
  if (method === undefined && current === first) {
45
48
  method = new _builtin_1.BuiltIn().searchBuiltin(methodName === null || methodName === void 0 ? void 0 : methodName.toUpperCase());
46
49
  if (method) {
47
- scope.addReference(methodToken, method, _reference_1.ReferenceType.BuiltinMethodReference, filename);
50
+ input.scope.addReference(methodToken, method, _reference_1.ReferenceType.BuiltinMethodReference, input.filename);
48
51
  }
49
52
  }
50
53
  else {
51
54
  if (previous && previous.getFirstToken().getStr() === "=>" && (method === null || method === void 0 ? void 0 : method.isStatic()) === false) {
52
- throw new Error("Method \"" + methodName + "\" not static");
55
+ const message = "Method \"" + methodName + "\" not static";
56
+ input.issues.push((0, _syntax_input_1.syntaxIssue)(input, node.getFirstToken(), message));
57
+ return new basic_1.VoidType(_syntax_input_1.CheckSyntaxKey);
53
58
  }
54
59
  const extra = {
55
60
  ooName: foundDef === null || foundDef === void 0 ? void 0 : foundDef.getName(),
56
61
  ooType: foundDef instanceof class_definition_1.ClassDefinition ? "CLAS" : "INTF"
57
62
  };
58
- scope.addReference(methodToken, method, _reference_1.ReferenceType.MethodReference, filename, extra);
63
+ input.scope.addReference(methodToken, method, _reference_1.ReferenceType.MethodReference, input.filename, extra);
59
64
  }
60
65
  if (methodName === null || methodName === void 0 ? void 0 : methodName.includes("~")) {
61
66
  const name = methodName.split("~")[0];
62
- const idef = scope.findInterfaceDefinition(name);
67
+ const idef = input.scope.findInterfaceDefinition(name);
63
68
  if (idef) {
64
- scope.addReference(methodToken, idef, _reference_1.ReferenceType.ObjectOrientedReference, filename);
69
+ input.scope.addReference(methodToken, idef, _reference_1.ReferenceType.ObjectOrientedReference, input.filename);
65
70
  }
66
71
  }
67
72
  if (method === undefined && (methodName === null || methodName === void 0 ? void 0 : methodName.toUpperCase()) === "CONSTRUCTOR") {
68
73
  context = undefined; // todo, this is a workaround, constructors always exists
69
74
  }
70
75
  else if (method === undefined && !(context instanceof basic_1.VoidType)) {
71
- throw new Error("Method \"" + methodName + "\" not found, methodCallChain");
76
+ const message = "Method \"" + methodName + "\" not found, methodCallChain";
77
+ input.issues.push((0, _syntax_input_1.syntaxIssue)(input, node.getFirstToken(), message));
78
+ return new basic_1.VoidType(_syntax_input_1.CheckSyntaxKey);
72
79
  }
73
80
  else if (method) {
74
81
  const ret = (_b = method.getParameters().getReturning()) === null || _b === void 0 ? void 0 : _b.getType();
@@ -76,51 +83,53 @@ class MethodCallChain {
76
83
  }
77
84
  const param = current.findDirectExpression(Expressions.MethodCallParam);
78
85
  if (param && method) {
79
- new method_call_param_1.MethodCallParam().runSyntax(param, scope, method, filename);
86
+ new method_call_param_1.MethodCallParam().runSyntax(param, input, method);
80
87
  }
81
88
  else if (param && context instanceof basic_1.VoidType) {
82
- new method_call_param_1.MethodCallParam().runSyntax(param, scope, context, filename);
89
+ new method_call_param_1.MethodCallParam().runSyntax(param, input, context);
83
90
  }
84
91
  }
85
92
  else if (current instanceof nodes_1.ExpressionNode && current.get() instanceof Expressions.ComponentName) {
86
- context = new component_name_1.ComponentName().runSyntax(context, current);
93
+ context = new component_name_1.ComponentName().runSyntax(context, current, input);
87
94
  }
88
95
  else if (current instanceof nodes_1.ExpressionNode && current.get() instanceof Expressions.AttributeName) {
89
- context = new attribute_name_1.AttributeName().runSyntax(context, current, scope, filename);
96
+ context = new attribute_name_1.AttributeName().runSyntax(context, current, input);
90
97
  }
91
98
  previous = current;
92
99
  }
93
100
  return context;
94
101
  }
95
102
  //////////////////////////////////////
96
- findTop(first, scope, targetType, filename) {
103
+ findTop(first, input, targetType) {
97
104
  var _a;
98
105
  if (first.get() instanceof Expressions.ClassName) {
99
106
  const token = first.getFirstToken();
100
107
  const className = token.getStr();
101
- const classDefinition = scope.findObjectDefinition(className);
102
- if (classDefinition === undefined && scope.getDDIC().inErrorNamespace(className) === false) {
108
+ const classDefinition = input.scope.findObjectDefinition(className);
109
+ if (classDefinition === undefined && input.scope.getDDIC().inErrorNamespace(className) === false) {
103
110
  const extra = { ooName: className, ooType: "Void" };
104
- scope.addReference(token, undefined, _reference_1.ReferenceType.ObjectOrientedVoidReference, filename, extra);
111
+ input.scope.addReference(token, undefined, _reference_1.ReferenceType.ObjectOrientedVoidReference, input.filename, extra);
105
112
  return new basic_1.VoidType(className);
106
113
  }
107
114
  else if (classDefinition === undefined) {
108
- throw new Error("Class " + className + " not found");
115
+ const message = "Class " + className + " not found";
116
+ input.issues.push((0, _syntax_input_1.syntaxIssue)(input, first.getFirstToken(), message));
117
+ return new basic_1.VoidType(_syntax_input_1.CheckSyntaxKey);
109
118
  }
110
- scope.addReference(first.getFirstToken(), classDefinition, _reference_1.ReferenceType.ObjectOrientedReference, filename);
119
+ input.scope.addReference(first.getFirstToken(), classDefinition, _reference_1.ReferenceType.ObjectOrientedReference, input.filename);
111
120
  return new basic_1.ObjectReferenceType(classDefinition);
112
121
  }
113
122
  else if (first instanceof nodes_1.ExpressionNode && first.get() instanceof Expressions.FieldChain) {
114
- return new field_chain_1.FieldChain().runSyntax(first, scope, filename, _reference_1.ReferenceType.DataReadReference);
123
+ return new field_chain_1.FieldChain().runSyntax(first, input, _reference_1.ReferenceType.DataReadReference);
115
124
  }
116
125
  else if (first instanceof nodes_1.ExpressionNode && first.get() instanceof Expressions.NewObject) {
117
- return new new_object_1.NewObject().runSyntax(first, scope, targetType, filename);
126
+ return new new_object_1.NewObject().runSyntax(first, input, targetType);
118
127
  }
119
128
  else if (first instanceof nodes_1.ExpressionNode && first.get() instanceof Expressions.Cast) {
120
- return new cast_1.Cast().runSyntax(first, scope, targetType, filename);
129
+ return new cast_1.Cast().runSyntax(first, input, targetType);
121
130
  }
122
131
  else {
123
- const meType = (_a = scope.findVariable("me")) === null || _a === void 0 ? void 0 : _a.getType();
132
+ const meType = (_a = input.scope.findVariable("me")) === null || _a === void 0 ? void 0 : _a.getType();
124
133
  if (meType) {
125
134
  return meType;
126
135
  }
@@ -8,21 +8,28 @@ const method_parameters_1 = require("./method_parameters");
8
8
  const tokens_1 = require("../../1_lexer/tokens");
9
9
  const source_1 = require("./source");
10
10
  const _type_utils_1 = require("../_type_utils");
11
+ const _syntax_input_1 = require("../_syntax_input");
11
12
  class MethodCallParam {
12
- runSyntax(node, scope, method, filename) {
13
+ runSyntax(node, input, method) {
13
14
  if (!(node.get() instanceof Expressions.MethodCallParam)) {
14
- throw new Error("MethodCallParam, unexpected input");
15
+ const message = "MethodCallParam, unexpected input";
16
+ input.issues.push((0, _syntax_input_1.syntaxIssue)(input, node.getFirstToken(), message));
17
+ return;
15
18
  }
16
19
  const children = node.getChildren();
17
20
  if (children.length < 2 || children.length > 3) {
18
- throw new Error("MethodCallParam, unexpected child length");
21
+ const message = "MethodCallParam, unexpected child length";
22
+ input.issues.push((0, _syntax_input_1.syntaxIssue)(input, node.getFirstToken(), message));
23
+ return;
19
24
  }
20
25
  const child = children[1];
21
26
  if (child.get() instanceof tokens_1.WParenRight || child.get() instanceof tokens_1.WParenRightW) {
22
27
  if (!(method instanceof basic_1.VoidType)) {
23
28
  const required = method.getParameters().getRequiredParameters();
24
29
  if (required.length > 0) {
25
- throw new Error("Parameter \"" + required[0].getName() + "\" must be supplied");
30
+ const message = "Parameter \"" + required[0].getName() + "\" must be supplied";
31
+ input.issues.push((0, _syntax_input_1.syntaxIssue)(input, node.getFirstToken(), message));
32
+ return;
26
33
  }
27
34
  }
28
35
  }
@@ -31,17 +38,23 @@ class MethodCallParam {
31
38
  || child.get() instanceof Expressions.ConstantString)) {
32
39
  if (!(method instanceof basic_1.VoidType)) {
33
40
  if (method.getParameters().getImporting().length === 0) {
34
- throw new Error("Method \"" + method.getName() + "\" has no importing parameters");
41
+ const message = "Method \"" + method.getName() + "\" has no importing parameters";
42
+ input.issues.push((0, _syntax_input_1.syntaxIssue)(input, node.getFirstToken(), message));
43
+ return;
35
44
  }
36
45
  else if (method.getParameters().getRequiredParameters().length > 1) {
37
- throw new Error("Method \"" + method.getName() + "\" has more than one importing or changing parameter");
46
+ const message = "Method \"" + method.getName() + "\" has more than one importing or changing parameter";
47
+ input.issues.push((0, _syntax_input_1.syntaxIssue)(input, node.getFirstToken(), message));
48
+ return;
38
49
  }
39
50
  }
40
51
  let targetType = undefined;
41
52
  if (!(method instanceof basic_1.VoidType)) {
42
53
  const name = method.getParameters().getDefaultImporting();
43
54
  if (name === undefined) {
44
- throw new Error("No default importing parameter");
55
+ const message = "No default importing parameter";
56
+ input.issues.push((0, _syntax_input_1.syntaxIssue)(input, node.getFirstToken(), message));
57
+ return;
45
58
  }
46
59
  for (const i of method.getParameters().getImporting()) {
47
60
  if (i.getName().toUpperCase() === name) {
@@ -55,27 +68,33 @@ class MethodCallParam {
55
68
  }
56
69
  let sourceType = basic_1.StringType.get();
57
70
  if (child.get() instanceof Expressions.Source) {
58
- sourceType = new source_1.Source().runSyntax(child, scope, filename, targetType);
71
+ sourceType = new source_1.Source().runSyntax(child, input, targetType);
59
72
  }
60
73
  const calculated = child.findFirstExpression(Expressions.MethodCallChain) !== undefined
61
74
  || child.findFirstExpression(Expressions.StringTemplate) !== undefined
62
75
  || child.findFirstExpression(Expressions.ArithOperator) !== undefined;
63
76
  if (sourceType === undefined) {
64
- throw new Error("No source type determined, method source");
77
+ const message = "No source type determined, method source";
78
+ input.issues.push((0, _syntax_input_1.syntaxIssue)(input, node.getFirstToken(), message));
79
+ return;
65
80
  }
66
- else if (new _type_utils_1.TypeUtils(scope).isAssignableStrict(sourceType, targetType, calculated) === false) {
67
- throw new Error("Method parameter type not compatible");
81
+ else if (new _type_utils_1.TypeUtils(input.scope).isAssignableStrict(sourceType, targetType, calculated) === false) {
82
+ const message = "Method parameter type not compatible";
83
+ input.issues.push((0, _syntax_input_1.syntaxIssue)(input, node.getFirstToken(), message));
84
+ return;
68
85
  }
69
86
  }
70
87
  else if (child instanceof nodes_1.ExpressionNode && child.get() instanceof Expressions.ParameterListS) {
71
- new method_parameters_1.MethodParameters().checkExporting(child, scope, method, filename);
88
+ new method_parameters_1.MethodParameters().checkExporting(child, input, method);
72
89
  }
73
90
  else if (child.get() instanceof Expressions.MethodParameters) {
74
- new method_parameters_1.MethodParameters().runSyntax(child, scope, method, filename);
91
+ new method_parameters_1.MethodParameters().runSyntax(child, input, method);
75
92
  }
76
93
  else {
77
94
  // console.dir(child);
78
- throw new Error("MethodCallParam, unexpected child");
95
+ const message = "MethodCallParam, unexpected child";
96
+ input.issues.push((0, _syntax_input_1.syntaxIssue)(input, node.getFirstToken(), message));
97
+ return;
79
98
  }
80
99
  }
81
100
  }
@@ -5,25 +5,26 @@ const Expressions = require("../../2_statements/expressions");
5
5
  const _typed_identifier_1 = require("../../types/_typed_identifier");
6
6
  const basic_1 = require("../../types/basic");
7
7
  const basic_types_1 = require("../basic_types");
8
+ const assert_error_1 = require("../assert_error");
8
9
  class MethodDefReturning {
9
- runSyntax(node, scope, filename, meta) {
10
+ runSyntax(node, input, meta) {
10
11
  const name = node.findDirectExpression(Expressions.MethodParamName);
11
12
  if (name === undefined) {
12
- throw new Error("method_parameter.ts, todo, handle pass by value and reference");
13
+ throw new assert_error_1.AssertError("method_parameter.ts, todo, handle pass by value and reference");
13
14
  }
14
15
  const type = node.findDirectExpression(Expressions.TypeParam);
15
16
  if (type === undefined) {
16
- throw new Error("method_parameter.ts, unexpected structure");
17
+ throw new assert_error_1.AssertError("method_parameter.ts, unexpected structure");
17
18
  }
18
- let found = new basic_types_1.BasicTypes(filename, scope).parseType(type);
19
+ let found = new basic_types_1.BasicTypes(input).parseType(type);
19
20
  if ((found === null || found === void 0 ? void 0 : found.isGeneric()) === true) {
20
21
  found = new basic_1.UnknownType("RETURNING parameter must be fully specified");
21
22
  }
22
23
  if (found) {
23
- return new _typed_identifier_1.TypedIdentifier(name.getFirstToken(), filename, found, meta);
24
+ return new _typed_identifier_1.TypedIdentifier(name.getFirstToken(), input.filename, found, meta);
24
25
  }
25
26
  else {
26
- return new _typed_identifier_1.TypedIdentifier(name.getFirstToken(), filename, new basic_1.UnknownType("method param, todo"), meta);
27
+ return new _typed_identifier_1.TypedIdentifier(name.getFirstToken(), input.filename, new basic_1.UnknownType("method param, todo"), meta);
27
28
  }
28
29
  }
29
30
  }
@@ -7,38 +7,39 @@ const basic_types_1 = require("../basic_types");
7
7
  const Expressions = require("../../2_statements/expressions");
8
8
  const default_1 = require("./default");
9
9
  const cgeneric_type_1 = require("../../types/basic/cgeneric_type");
10
+ const assert_error_1 = require("../assert_error");
10
11
  class MethodParam {
11
- runSyntax(node, scope, filename, meta) {
12
+ runSyntax(node, input, meta) {
12
13
  const name = node.findDirectExpression(Expressions.MethodParamName);
13
14
  if (name === undefined) {
14
- throw new Error("MethodParam, todo, handle pass by value and reference");
15
+ throw new assert_error_1.AssertError("MethodParam, todo, handle pass by value and reference");
15
16
  }
16
17
  const type = node.findDirectExpression(Expressions.TypeParam);
17
18
  if (type === undefined) {
18
- throw new Error("MethodParam, unexpected structure");
19
+ throw new assert_error_1.AssertError("MethodParam, unexpected structure");
19
20
  }
20
21
  const def = type.findDirectExpression(Expressions.Default);
21
22
  if (def) {
22
23
  try {
23
- new default_1.Default().runSyntax(def, scope, filename);
24
+ new default_1.Default().runSyntax(def, input);
24
25
  }
25
26
  catch (e) {
26
- return new _typed_identifier_1.TypedIdentifier(name.getFirstToken(), filename, new basic_1.UnknownType(e.toString()), meta);
27
+ return new _typed_identifier_1.TypedIdentifier(name.getFirstToken(), input.filename, new basic_1.UnknownType(e.toString()), meta);
27
28
  }
28
29
  }
29
30
  const concat = type.concatTokens().toUpperCase();
30
31
  if (concat === "TYPE C" || concat.startsWith("TYPE C ")) {
31
- return new _typed_identifier_1.TypedIdentifier(name.getFirstToken(), filename, new cgeneric_type_1.CGenericType(), meta);
32
+ return new _typed_identifier_1.TypedIdentifier(name.getFirstToken(), input.filename, new cgeneric_type_1.CGenericType(), meta);
32
33
  }
33
34
  else if (concat === "TYPE X" || concat.startsWith("TYPE X ")) {
34
- return new _typed_identifier_1.TypedIdentifier(name.getFirstToken(), filename, new basic_1.XGenericType(), meta);
35
+ return new _typed_identifier_1.TypedIdentifier(name.getFirstToken(), input.filename, new basic_1.XGenericType(), meta);
35
36
  }
36
- const found = new basic_types_1.BasicTypes(filename, scope).parseType(type);
37
+ const found = new basic_types_1.BasicTypes(input).parseType(type);
37
38
  if (found) {
38
- return new _typed_identifier_1.TypedIdentifier(name.getFirstToken(), filename, found, meta);
39
+ return new _typed_identifier_1.TypedIdentifier(name.getFirstToken(), input.filename, found, meta);
39
40
  }
40
41
  else {
41
- return new _typed_identifier_1.TypedIdentifier(name.getFirstToken(), filename, new basic_1.UnknownType("method param, todo"), meta);
42
+ return new _typed_identifier_1.TypedIdentifier(name.getFirstToken(), input.filename, new basic_1.UnknownType("method param, todo"), meta);
42
43
  }
43
44
  }
44
45
  }