@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
@@ -8,14 +8,16 @@ const inline_data_1 = require("./inline_data");
8
8
  const target_1 = require("./target");
9
9
  const source_1 = require("./source");
10
10
  const _type_utils_1 = require("../_type_utils");
11
+ const _syntax_input_1 = require("../_syntax_input");
12
+ const assert_error_1 = require("../assert_error");
11
13
  class MethodParameters {
12
14
  constructor() {
13
15
  this.requiredParameters = undefined;
14
16
  }
15
- runSyntax(node, scope, method, filename) {
17
+ runSyntax(node, input, method) {
16
18
  var _a;
17
19
  if (!(node.get() instanceof Expressions.MethodParameters)) {
18
- throw new Error("MethodParameters, unexpected input");
20
+ throw new assert_error_1.AssertError("MethodParameters, unexpected input");
19
21
  }
20
22
  const children = node.getChildren().slice();
21
23
  if (method instanceof basic_1.VoidType) {
@@ -28,50 +30,56 @@ class MethodParameters {
28
30
  const name = (_a = children.shift()) === null || _a === void 0 ? void 0 : _a.getFirstToken().getStr().toUpperCase();
29
31
  switch (name) {
30
32
  case "EXPORTING":
31
- this.checkExporting(children.shift(), scope, method, filename, false);
33
+ this.checkExporting(children.shift(), input, method, false);
32
34
  break;
33
35
  case "IMPORTING":
34
- this.checkImporting(children.shift(), scope, method, filename);
36
+ this.checkImporting(children.shift(), input, method);
35
37
  break;
36
38
  case "CHANGING":
37
- this.checkChanging(children.shift(), scope, method, filename);
39
+ this.checkChanging(children.shift(), input, method);
38
40
  break;
39
41
  case "RECEIVING":
40
- this.checkReceiving(children.shift(), scope, method, filename);
42
+ this.checkReceiving(children.shift(), input, method);
41
43
  break;
42
44
  case "EXCEPTIONS":
43
45
  children.shift(); // todo, old style exceptions
44
46
  break;
45
47
  default:
46
- throw new Error("MethodParameters, unexpected token, " + name);
48
+ throw new assert_error_1.AssertError("MethodParameters, unexpected token, " + name);
47
49
  }
48
50
  }
49
- this.reportErrors();
51
+ this.reportErrors(node, input);
50
52
  }
51
53
  ///////////////////////
52
- checkReceiving(node, scope, method, filename) {
54
+ checkReceiving(node, input, method) {
53
55
  var _a;
54
56
  const type = method instanceof basic_1.VoidType ? method : (_a = method.getParameters().getReturning()) === null || _a === void 0 ? void 0 : _a.getType();
55
57
  if (type === undefined) {
56
- throw new Error("Method does not have a returning parameter");
58
+ const message = "Method does not have a returning parameter";
59
+ input.issues.push((0, _syntax_input_1.syntaxIssue)(input, node.getFirstToken(), message));
60
+ return;
57
61
  }
58
62
  else if (!(node instanceof nodes_1.ExpressionNode)) {
59
- throw new Error("checkReceiving, not an expression node");
63
+ const message = "checkReceiving, not an expression node";
64
+ input.issues.push((0, _syntax_input_1.syntaxIssue)(input, node.getFirstToken(), message));
65
+ return;
60
66
  }
61
67
  const target = node.findDirectExpression(Expressions.Target);
62
68
  const inline = target === null || target === void 0 ? void 0 : target.findDirectExpression(Expressions.InlineData);
63
69
  if (inline) {
64
- new inline_data_1.InlineData().runSyntax(inline, scope, filename, type);
70
+ new inline_data_1.InlineData().runSyntax(inline, input, type);
65
71
  }
66
72
  else if (target) {
67
- const targetType = new target_1.Target().runSyntax(target, scope, filename);
68
- if (targetType && new _type_utils_1.TypeUtils(scope).isAssignable(type, targetType) === false) {
69
- throw new Error("Method returning value not type compatible");
73
+ const targetType = new target_1.Target().runSyntax(target, input);
74
+ if (targetType && new _type_utils_1.TypeUtils(input.scope).isAssignable(type, targetType) === false) {
75
+ const message = "Method returning value not type compatible";
76
+ input.issues.push((0, _syntax_input_1.syntaxIssue)(input, node.getFirstToken(), message));
77
+ return;
70
78
  }
71
79
  }
72
80
  }
73
- checkImporting(node, scope, method, filename) {
74
- for (const item of this.parameterListT(node, scope, filename)) {
81
+ checkImporting(node, input, method) {
82
+ for (const item of this.parameterListT(node, input)) {
75
83
  let parameterType = undefined;
76
84
  if (method instanceof basic_1.VoidType) {
77
85
  parameterType = method;
@@ -79,27 +87,35 @@ class MethodParameters {
79
87
  else {
80
88
  const parameter = method.getParameters().getExporting().find(p => p.getName().toUpperCase() === item.name);
81
89
  if (parameter === undefined) {
82
- throw new Error("Method exporting parameter \"" + item.name + "\" does not exist");
90
+ const message = "Method exporting parameter \"" + item.name + "\" does not exist";
91
+ input.issues.push((0, _syntax_input_1.syntaxIssue)(input, node.getFirstToken(), message));
92
+ return;
83
93
  }
84
94
  parameterType = parameter.getType();
85
95
  }
86
96
  const inline = item.target.findDirectExpression(Expressions.InlineData);
87
97
  if (inline) {
88
- new inline_data_1.InlineData().runSyntax(inline, scope, filename, parameterType);
98
+ new inline_data_1.InlineData().runSyntax(inline, input, parameterType);
89
99
  }
90
100
  else if (item.targetType === undefined) {
91
- throw new Error("Could not determine target type");
101
+ const message = "Could not determine target type";
102
+ input.issues.push((0, _syntax_input_1.syntaxIssue)(input, node.getFirstToken(), message));
103
+ return;
92
104
  }
93
- else if (item.targetType && new _type_utils_1.TypeUtils(scope).isAssignable(parameterType, item.targetType) === false) {
94
- throw new Error("Method parameter type not compatible, " + item.name);
105
+ else if (item.targetType && new _type_utils_1.TypeUtils(input.scope).isAssignable(parameterType, item.targetType) === false) {
106
+ const message = "Method parameter type not compatible, " + item.name;
107
+ input.issues.push((0, _syntax_input_1.syntaxIssue)(input, node.getFirstToken(), message));
108
+ return;
95
109
  }
96
110
  }
97
111
  }
98
- checkChanging(node, scope, method, filename) {
112
+ checkChanging(node, input, method) {
99
113
  var _a;
100
- for (const item of this.parameterListT(node, scope, filename)) {
114
+ for (const item of this.parameterListT(node, input)) {
101
115
  if (item.target.findFirstExpression(Expressions.InlineData) !== undefined) {
102
- throw new Error("CHANGING cannot be inlined");
116
+ const message = "CHANGING cannot be inlined";
117
+ input.issues.push((0, _syntax_input_1.syntaxIssue)(input, node.getFirstToken(), message));
118
+ return;
103
119
  }
104
120
  let parameterType = undefined;
105
121
  if (method instanceof basic_1.VoidType) {
@@ -108,18 +124,22 @@ class MethodParameters {
108
124
  else {
109
125
  const parameter = method.getParameters().getChanging().find(p => p.getName().toUpperCase() === item.name);
110
126
  if (parameter === undefined) {
111
- throw new Error("Method changing parameter \"" + item.name + "\" does not exist");
127
+ const message = "Method changing parameter \"" + item.name + "\" does not exist";
128
+ input.issues.push((0, _syntax_input_1.syntaxIssue)(input, node.getFirstToken(), message));
129
+ return;
112
130
  }
113
131
  parameterType = parameter.getType();
114
132
  }
115
- if (item.targetType && new _type_utils_1.TypeUtils(scope).isAssignable(parameterType, item.targetType) === false) {
116
- throw new Error("Method parameter type not compatible, " + item.name);
133
+ if (item.targetType && new _type_utils_1.TypeUtils(input.scope).isAssignable(parameterType, item.targetType) === false) {
134
+ const message = "Method parameter type not compatible, " + item.name;
135
+ input.issues.push((0, _syntax_input_1.syntaxIssue)(input, node.getFirstToken(), message));
136
+ return;
117
137
  }
118
138
  (_a = this.requiredParameters) === null || _a === void 0 ? void 0 : _a.delete(item.name);
119
139
  }
120
140
  }
121
- checkExporting(node, scope, method, filename, errors = true) {
122
- const items = this.parameterListS(node, scope, filename, method);
141
+ checkExporting(node, input, method, errors = true) {
142
+ const items = this.parameterListS(node, input, method);
123
143
  if (method instanceof basic_1.VoidType) {
124
144
  return;
125
145
  }
@@ -133,43 +153,48 @@ class MethodParameters {
133
153
  || item.source.findFirstExpression(Expressions.StringTemplate) !== undefined
134
154
  || item.source.findFirstExpression(Expressions.ArithOperator) !== undefined;
135
155
  if (parameter === undefined) {
136
- throw new Error("Method importing parameter \"" + item.name + "\" does not exist");
156
+ const message = "Method importing parameter \"" + item.name + "\" does not exist";
157
+ input.issues.push((0, _syntax_input_1.syntaxIssue)(input, node.getFirstToken(), message));
158
+ return;
137
159
  }
138
- else if (new _type_utils_1.TypeUtils(scope).isAssignableStrict(item.sourceType, parameter.getType(), calculated) === false) {
139
- throw new Error("Method parameter type not compatible, " + item.name);
160
+ else if (new _type_utils_1.TypeUtils(input.scope).isAssignableStrict(item.sourceType, parameter.getType(), calculated) === false) {
161
+ const message = "Method parameter type not compatible, " + item.name;
162
+ input.issues.push((0, _syntax_input_1.syntaxIssue)(input, node.getFirstToken(), message));
163
+ return;
140
164
  }
141
165
  this.requiredParameters.delete(item.name);
142
166
  }
143
167
  if (errors === true) {
144
- this.reportErrors();
168
+ this.reportErrors(node, input);
145
169
  }
146
170
  }
147
- reportErrors() {
171
+ reportErrors(node, input) {
148
172
  var _a;
149
173
  for (const r of ((_a = this.requiredParameters) === null || _a === void 0 ? void 0 : _a.values()) || []) {
150
- throw new Error(`method parameter "${r}" must be supplied`);
174
+ const message = `method parameter "${r}" must be supplied`;
175
+ input.issues.push((0, _syntax_input_1.syntaxIssue)(input, node.getFirstToken(), message));
151
176
  }
152
177
  }
153
- parameterListS(node, scope, filename, method) {
178
+ parameterListS(node, input, method) {
154
179
  var _a;
155
180
  if (node === undefined) {
156
181
  return [];
157
182
  }
158
183
  else if (!(node.get() instanceof Expressions.ParameterListS)) {
159
- throw new Error("parameterListS, unexpected node");
184
+ throw new assert_error_1.AssertError("parameterListS, unexpected node");
160
185
  }
161
186
  const ret = [];
162
187
  for (const c of node.getChildren()) {
163
188
  if (!(c.get() instanceof Expressions.ParameterS) || !(c instanceof nodes_1.ExpressionNode)) {
164
- throw new Error("parameterListS, unexpected node, child");
189
+ throw new assert_error_1.AssertError("parameterListS, unexpected node, child");
165
190
  }
166
191
  const name = (_a = c.findDirectExpression(Expressions.ParameterName)) === null || _a === void 0 ? void 0 : _a.getFirstToken().getStr().toUpperCase();
167
192
  if (name === undefined) {
168
- throw new Error("parameterListS, no name determined");
193
+ throw new assert_error_1.AssertError("parameterListS, no name determined");
169
194
  }
170
195
  const source = c.findDirectExpression(Expressions.Source);
171
196
  if (source === undefined) {
172
- throw new Error("parameterListS, no source found");
197
+ throw new assert_error_1.AssertError("parameterListS, no source found");
173
198
  }
174
199
  let targetType = undefined;
175
200
  if (!(method instanceof basic_1.VoidType)) {
@@ -179,41 +204,43 @@ class MethodParameters {
179
204
  }
180
205
  }
181
206
  }
182
- let sourceType = new source_1.Source().runSyntax(source, scope, filename, targetType);
207
+ let sourceType = new source_1.Source().runSyntax(source, input, targetType);
183
208
  if (sourceType === undefined) {
184
209
  if (method instanceof basic_1.VoidType) {
185
210
  sourceType = method;
186
211
  }
187
212
  else {
188
- throw new Error("No source type determined for parameter " + name + " input");
213
+ const message = "No source type determined for parameter " + name + " input";
214
+ input.issues.push((0, _syntax_input_1.syntaxIssue)(input, node.getFirstToken(), message));
215
+ sourceType = new basic_1.VoidType(_syntax_input_1.CheckSyntaxKey);
189
216
  }
190
217
  }
191
218
  ret.push({ name, source, sourceType });
192
219
  }
193
220
  return ret;
194
221
  }
195
- parameterListT(node, scope, filename) {
222
+ parameterListT(node, input) {
196
223
  var _a;
197
224
  if (node === undefined) {
198
225
  return [];
199
226
  }
200
227
  else if (!(node.get() instanceof Expressions.ParameterListT)) {
201
- throw new Error("parameterListT, unexpected node");
228
+ throw new assert_error_1.AssertError("parameterListT, unexpected node");
202
229
  }
203
230
  const ret = [];
204
231
  for (const c of node.getChildren()) {
205
232
  if (!(c.get() instanceof Expressions.ParameterT) || !(c instanceof nodes_1.ExpressionNode)) {
206
- throw new Error("parameterListT, unexpected node, child");
233
+ throw new assert_error_1.AssertError("parameterListT, unexpected node, child");
207
234
  }
208
235
  const name = (_a = c.findDirectExpression(Expressions.ParameterName)) === null || _a === void 0 ? void 0 : _a.getFirstToken().getStr().toUpperCase();
209
236
  if (name === undefined) {
210
- throw new Error("parameterListT, no name determined");
237
+ throw new assert_error_1.AssertError("parameterListT, no name determined");
211
238
  }
212
239
  const target = c.findDirectExpression(Expressions.Target);
213
240
  if (target === undefined) {
214
- throw new Error("parameterListT, no target found");
241
+ throw new assert_error_1.AssertError("parameterListT, no target found");
215
242
  }
216
- const targetType = new target_1.Target().runSyntax(target, scope, filename);
243
+ const targetType = new target_1.Target().runSyntax(target, input);
217
244
  ret.push({ name, target, targetType });
218
245
  }
219
246
  return ret;
@@ -15,27 +15,31 @@ const attribute_name_1 = require("./attribute_name");
15
15
  const component_name_1 = require("./component_name");
16
16
  const types_1 = require("../../types");
17
17
  const version_1 = require("../../../version");
18
+ const _syntax_input_1 = require("../_syntax_input");
19
+ const assert_error_1 = require("../assert_error");
18
20
  class MethodSource {
19
- runSyntax(node, scope, filename) {
21
+ runSyntax(node, input) {
20
22
  var _a, _b, _c;
21
- const helper = new _object_oriented_1.ObjectOriented(scope);
23
+ const helper = new _object_oriented_1.ObjectOriented(input.scope);
22
24
  const children = node.getChildren().slice();
23
25
  const first = children.shift();
24
26
  if (first === undefined) {
25
- throw new Error("MethodSource, first child expected");
27
+ throw new assert_error_1.AssertError("MethodSource, first child expected");
26
28
  }
27
- let context = this.findTop(first, scope, filename);
29
+ let context = this.findTop(first, input, children);
28
30
  if (context === undefined) {
29
- context = (_a = scope.findVariable("me")) === null || _a === void 0 ? void 0 : _a.getType();
31
+ context = (_a = input.scope.findVariable("me")) === null || _a === void 0 ? void 0 : _a.getType();
30
32
  children.unshift(first);
31
33
  }
32
- if (scope.getVersion() === version_1.Version.Cloud
34
+ if (input.scope.getVersion() === version_1.Version.Cloud
33
35
  && first.get() instanceof Expressions.Dynamic
34
36
  && first instanceof nodes_1.ExpressionNode
35
37
  && ((_b = children[0]) === null || _b === void 0 ? void 0 : _b.concatTokens()) === "=>") {
36
38
  const name = (_c = first.findDirectExpression(Expressions.Constant)) === null || _c === void 0 ? void 0 : _c.concatTokens().replace(/'/g, "").replace(/`/g, "");
37
- if (name !== undefined && scope.findClassDefinition(name) === undefined) {
38
- throw new Error(`Class "${name}" not found/released`);
39
+ if (name !== undefined && input.scope.findClassDefinition(name) === undefined) {
40
+ const message = `Class "${name}" not found/released`;
41
+ input.issues.push((0, _syntax_input_1.syntaxIssue)(input, node.getFirstToken(), message));
42
+ return new basic_1.VoidType(_syntax_input_1.CheckSyntaxKey);
39
43
  }
40
44
  }
41
45
  if (context instanceof basic_1.VoidType) {
@@ -49,10 +53,14 @@ class MethodSource {
49
53
  }
50
54
  if (current.get() instanceof tokens_1.Dash) {
51
55
  if (context instanceof basic_1.UnknownType) {
52
- throw new Error("Not a structure, type unknown, MethodSource");
56
+ const message = "Not a structure, type unknown, MethodSource";
57
+ input.issues.push((0, _syntax_input_1.syntaxIssue)(input, node.getFirstToken(), message));
58
+ return new basic_1.VoidType(_syntax_input_1.CheckSyntaxKey);
53
59
  }
54
60
  else if (!(context instanceof basic_1.StructureType)) {
55
- throw new Error("Not a structure, MethodSource");
61
+ const message = "Not a structure, MethodSource";
62
+ input.issues.push((0, _syntax_input_1.syntaxIssue)(input, node.getFirstToken(), message));
63
+ return new basic_1.VoidType(_syntax_input_1.CheckSyntaxKey);
56
64
  }
57
65
  }
58
66
  else if (current.get() instanceof tokens_1.InstanceArrow
@@ -61,35 +69,35 @@ class MethodSource {
61
69
  }
62
70
  else if (current.get() instanceof Expressions.AttributeName
63
71
  || current.get() instanceof Expressions.SourceField) {
64
- try {
65
- if (context instanceof _abstract_type_1.AbstractType) {
66
- const attr = new attribute_name_1.AttributeName().runSyntax(context, current, scope, filename, _reference_1.ReferenceType.DataReadReference);
72
+ if (context instanceof _abstract_type_1.AbstractType) {
73
+ const attr = new attribute_name_1.AttributeName().runSyntax(context, current, input, _reference_1.ReferenceType.DataReadReference, false);
74
+ const isSyntaxError = attr instanceof basic_1.VoidType && attr.getVoided() === _syntax_input_1.CheckSyntaxKey;
75
+ if (isSyntaxError === false) {
67
76
  context = attr;
68
77
  continue;
69
78
  }
70
79
  }
71
- catch (_d) {
72
- // ignore
73
- }
74
80
  // try looking for method name
75
81
  const className = context instanceof basic_1.ObjectReferenceType ? context.getIdentifierName() : undefined;
76
82
  const methodToken = current.getFirstToken();
77
83
  const methodName = methodToken === null || methodToken === void 0 ? void 0 : methodToken.getStr();
78
- const def = scope.findObjectDefinition(className);
84
+ const def = input.scope.findObjectDefinition(className);
79
85
  // eslint-disable-next-line prefer-const
80
86
  let { method, def: foundDef } = helper.searchMethodName(def, methodName);
81
87
  if (method === undefined && (methodName === null || methodName === void 0 ? void 0 : methodName.toUpperCase()) === "CONSTRUCTOR") {
82
88
  context = new basic_1.VoidType("CONSTRUCTOR"); // todo, this is a workaround, constructors always exists
83
89
  }
84
90
  else if (method === undefined && !(context instanceof basic_1.VoidType)) {
85
- throw new Error("Method or attribute \"" + methodName + "\" not found, MethodSource");
91
+ const message = "Method or attribute \"" + methodName + "\" not found, MethodSource";
92
+ input.issues.push((0, _syntax_input_1.syntaxIssue)(input, node.getFirstToken(), message));
93
+ return new basic_1.VoidType(_syntax_input_1.CheckSyntaxKey);
86
94
  }
87
95
  else if (method) {
88
96
  const extra = {
89
97
  ooName: foundDef === null || foundDef === void 0 ? void 0 : foundDef.getName(),
90
98
  ooType: foundDef instanceof types_1.ClassDefinition ? "CLAS" : "INTF"
91
99
  };
92
- scope.addReference(methodToken, method, _reference_1.ReferenceType.MethodReference, filename, extra);
100
+ input.scope.addReference(methodToken, method, _reference_1.ReferenceType.MethodReference, input.filename, extra);
93
101
  context = method;
94
102
  }
95
103
  }
@@ -97,52 +105,53 @@ class MethodSource {
97
105
  if (context instanceof basic_1.TableType && context.isWithHeader()) {
98
106
  context = context.getRowType();
99
107
  }
100
- context = new component_name_1.ComponentName().runSyntax(context, current);
108
+ context = new component_name_1.ComponentName().runSyntax(context, current, input);
101
109
  }
102
110
  else if (current instanceof nodes_1.ExpressionNode && current.get() instanceof Expressions.Dynamic) {
103
- new dynamic_1.Dynamic().runSyntax(current, scope, filename);
111
+ new dynamic_1.Dynamic().runSyntax(current, input);
104
112
  context = new basic_1.VoidType("Dynamic");
105
113
  }
106
114
  }
107
115
  if (context instanceof _abstract_type_1.AbstractType && !(context instanceof basic_1.VoidType)) {
108
- throw new Error("Not a method, MethodSource");
116
+ const message = "Not a method, MethodSource";
117
+ input.issues.push((0, _syntax_input_1.syntaxIssue)(input, node.getFirstToken(), message));
118
+ return new basic_1.VoidType(_syntax_input_1.CheckSyntaxKey);
109
119
  }
110
120
  else if (context === undefined) {
111
- throw new Error("Not found, MethodSource");
121
+ const message = "Not found, MethodSource";
122
+ input.issues.push((0, _syntax_input_1.syntaxIssue)(input, node.getFirstToken(), message));
123
+ return new basic_1.VoidType(_syntax_input_1.CheckSyntaxKey);
112
124
  }
113
125
  return context;
114
126
  }
115
127
  //////////////////////////////////////
116
- findTop(first, scope, filename) {
128
+ findTop(first, input, children) {
117
129
  if (first.get() instanceof Expressions.ClassName) {
118
130
  // todo, refactor this part to new expression handler,
119
131
  const token = first.getFirstToken();
120
132
  const className = token.getStr();
121
- const classDefinition = scope.findObjectDefinition(className);
122
- if (classDefinition === undefined && scope.getDDIC().inErrorNamespace(className) === false) {
133
+ const classDefinition = input.scope.findObjectDefinition(className);
134
+ if (classDefinition === undefined && input.scope.getDDIC().inErrorNamespace(className) === false) {
123
135
  const extra = { ooName: className, ooType: "Void" };
124
- scope.addReference(token, undefined, _reference_1.ReferenceType.ObjectOrientedVoidReference, filename, extra);
136
+ input.scope.addReference(token, undefined, _reference_1.ReferenceType.ObjectOrientedVoidReference, input.filename, extra);
125
137
  return new basic_1.VoidType(className);
126
138
  }
127
139
  else if (classDefinition === undefined) {
128
- throw new Error("Class " + className + " not found");
140
+ const message = "Class " + className + " not found";
141
+ input.issues.push((0, _syntax_input_1.syntaxIssue)(input, first.getFirstToken(), message));
142
+ return new basic_1.VoidType(_syntax_input_1.CheckSyntaxKey);
129
143
  }
130
- scope.addReference(first.getFirstToken(), classDefinition, _reference_1.ReferenceType.ObjectOrientedReference, filename);
144
+ input.scope.addReference(first.getFirstToken(), classDefinition, _reference_1.ReferenceType.ObjectOrientedReference, input.filename);
131
145
  return new basic_1.ObjectReferenceType(classDefinition);
132
146
  }
133
- else if (first instanceof nodes_1.ExpressionNode && first.get() instanceof Expressions.SourceField) {
134
- try {
135
- return new source_field_1.SourceField().runSyntax(first, scope, filename, _reference_1.ReferenceType.DataReadReference);
136
- }
137
- catch (_a) {
138
- return undefined;
139
- }
147
+ else if (first instanceof nodes_1.ExpressionNode && first.get() instanceof Expressions.SourceField && children.length > 0) {
148
+ return new source_field_1.SourceField().runSyntax(first, input, _reference_1.ReferenceType.DataReadReference);
140
149
  }
141
150
  else if (first instanceof nodes_1.ExpressionNode && first.get() instanceof Expressions.SourceFieldSymbol) {
142
- return new source_field_symbol_1.SourceFieldSymbol().runSyntax(first, scope, filename);
151
+ return new source_field_symbol_1.SourceFieldSymbol().runSyntax(first, input);
143
152
  }
144
153
  else if (first instanceof nodes_1.ExpressionNode && first.get() instanceof Expressions.Dynamic) {
145
- new dynamic_1.Dynamic().runSyntax(first, scope, filename);
154
+ new dynamic_1.Dynamic().runSyntax(first, input);
146
155
  return new basic_1.VoidType("Dynamic");
147
156
  }
148
157
  return undefined;
@@ -9,51 +9,59 @@ const _object_oriented_1 = require("../_object_oriented");
9
9
  const method_parameters_1 = require("./method_parameters");
10
10
  const basic_types_1 = require("../basic_types");
11
11
  const _type_utils_1 = require("../_type_utils");
12
+ const _syntax_input_1 = require("../_syntax_input");
13
+ const assert_error_1 = require("../assert_error");
12
14
  class NewObject {
13
- runSyntax(node, scope, targetType, filename) {
15
+ runSyntax(node, input, targetType) {
14
16
  let ret = undefined;
15
17
  const typeExpr = node.findDirectExpression(Expressions.TypeNameOrInfer);
16
18
  const typeToken = typeExpr === null || typeExpr === void 0 ? void 0 : typeExpr.getFirstToken();
17
19
  const typeName = typeExpr === null || typeExpr === void 0 ? void 0 : typeExpr.concatTokens();
18
20
  if (typeName === undefined) {
19
- throw new Error("NewObject, child TypeNameOrInfer not found");
21
+ throw new assert_error_1.AssertError("NewObject, child TypeNameOrInfer not found");
20
22
  }
21
23
  else if (typeName === "#" && targetType && targetType instanceof basic_1.ObjectReferenceType) {
22
- const clas = scope.findClassDefinition(targetType.getIdentifierName());
24
+ const clas = input.scope.findClassDefinition(targetType.getIdentifierName());
23
25
  if (clas) {
24
- scope.addReference(typeToken, clas, _reference_1.ReferenceType.InferredType, filename);
26
+ input.scope.addReference(typeToken, clas, _reference_1.ReferenceType.InferredType, input.filename);
25
27
  }
26
28
  else {
27
- const intf = scope.findInterfaceDefinition(targetType.getIdentifierName());
29
+ const intf = input.scope.findInterfaceDefinition(targetType.getIdentifierName());
28
30
  if (intf) {
29
- throw new Error(intf.getName() + " is an interface, cannot be instantiated");
31
+ const message = intf.getName() + " is an interface, cannot be instantiated";
32
+ input.issues.push((0, _syntax_input_1.syntaxIssue)(input, node.getFirstToken(), message));
33
+ return new basic_1.VoidType(_syntax_input_1.CheckSyntaxKey);
30
34
  }
31
35
  }
32
36
  ret = targetType;
33
37
  if ((clas === null || clas === void 0 ? void 0 : clas.isAbstract()) === true) {
34
- throw new Error(clas.getName() + " is abstract, cannot be instantiated");
38
+ const message = clas.getName() + " is abstract, cannot be instantiated";
39
+ input.issues.push((0, _syntax_input_1.syntaxIssue)(input, node.getFirstToken(), message));
40
+ return new basic_1.VoidType(_syntax_input_1.CheckSyntaxKey);
35
41
  }
36
42
  }
37
43
  else if (typeName === "#" && targetType) {
38
44
  ret = targetType;
39
45
  }
40
46
  else if (typeName === "#") {
41
- throw new Error("NewObject, todo, infer type");
47
+ throw new assert_error_1.AssertError("NewObject, todo, infer type");
42
48
  }
43
49
  if (ret === undefined) {
44
- const objDefinition = scope.findObjectDefinition(typeName);
50
+ const objDefinition = input.scope.findObjectDefinition(typeName);
45
51
  if (objDefinition) {
46
- scope.addReference(typeToken, objDefinition, _reference_1.ReferenceType.ObjectOrientedReference, filename);
52
+ input.scope.addReference(typeToken, objDefinition, _reference_1.ReferenceType.ObjectOrientedReference, input.filename);
47
53
  const objref = new basic_1.ObjectReferenceType(objDefinition);
48
- const clas = scope.findClassDefinition(objref.getIdentifierName());
54
+ const clas = input.scope.findClassDefinition(objref.getIdentifierName());
49
55
  if ((clas === null || clas === void 0 ? void 0 : clas.isAbstract()) === true) {
50
- throw new Error(clas.getName() + " is abstract, cannot be instantiated");
56
+ const message = clas.getName() + " is abstract, cannot be instantiated";
57
+ input.issues.push((0, _syntax_input_1.syntaxIssue)(input, node.getFirstToken(), message));
58
+ return new basic_1.VoidType(_syntax_input_1.CheckSyntaxKey);
51
59
  }
52
60
  ret = objref;
53
61
  }
54
62
  }
55
63
  if (ret === undefined) {
56
- const basic = new basic_types_1.BasicTypes(filename, scope);
64
+ const basic = new basic_types_1.BasicTypes(input);
57
65
  const type = basic.resolveTypeName(typeExpr);
58
66
  if (type instanceof basic_1.UnknownType) {
59
67
  ret = type;
@@ -65,26 +73,30 @@ class NewObject {
65
73
  ret = type;
66
74
  }
67
75
  else {
68
- throw new Error("Type \"" + typeName + "\" not found in scope, NewObject");
76
+ const message = "Type \"" + typeName + "\" not found in scope, NewObject";
77
+ input.issues.push((0, _syntax_input_1.syntaxIssue)(input, node.getFirstToken(), message));
78
+ return new basic_1.VoidType(_syntax_input_1.CheckSyntaxKey);
69
79
  }
70
80
  }
71
81
  if (ret instanceof basic_1.ObjectReferenceType) {
72
- this.parameters(node, ret, scope, filename);
82
+ this.parameters(node, ret, input);
73
83
  }
74
84
  else {
75
85
  for (const s of node.findAllExpressions(Expressions.Source)) {
76
- new source_1.Source().runSyntax(s, scope, filename, ret);
86
+ new source_1.Source().runSyntax(s, input, ret);
77
87
  }
78
88
  }
79
- if (ret instanceof basic_1.UnknownType && scope.getDDIC().inErrorNamespace(typeName) === true) {
80
- throw new Error("Class or type \"" + typeName + "\" not found");
89
+ if (ret instanceof basic_1.UnknownType && input.scope.getDDIC().inErrorNamespace(typeName) === true) {
90
+ const message = "Class or type \"" + typeName + "\" not found";
91
+ input.issues.push((0, _syntax_input_1.syntaxIssue)(input, node.getFirstToken(), message));
92
+ return new basic_1.VoidType(_syntax_input_1.CheckSyntaxKey);
81
93
  }
82
94
  return ret;
83
95
  }
84
- parameters(node, obj, scope, filename) {
96
+ parameters(node, obj, input) {
85
97
  const name = obj.getIdentifier().getName();
86
- const def = scope.findObjectDefinition(name);
87
- const helper = new _object_oriented_1.ObjectOriented(scope);
98
+ const def = input.scope.findObjectDefinition(name);
99
+ const helper = new _object_oriented_1.ObjectOriented(input.scope);
88
100
  // eslint-disable-next-line prefer-const
89
101
  let { method } = helper.searchMethodName(def, "CONSTRUCTOR");
90
102
  const requiredParameters = (method === null || method === void 0 ? void 0 : method.getParameters().getRequiredParameters()) || [];
@@ -94,22 +106,30 @@ class NewObject {
94
106
  // single unnamed parameter
95
107
  const type = this.defaultImportingType(method);
96
108
  if (type === undefined) {
97
- throw new Error("NewObject, no default importing parameter found for constructor, " + name);
109
+ const message = "NewObject, no default importing parameter found for constructor, " + name;
110
+ input.issues.push((0, _syntax_input_1.syntaxIssue)(input, node.getFirstToken(), message));
111
+ return;
98
112
  }
99
- const sourceType = new source_1.Source().runSyntax(source, scope, filename, type);
100
- if (new _type_utils_1.TypeUtils(scope).isAssignableStrict(sourceType, type) === false) {
101
- throw new Error(`NEW parameter type not compatible`);
113
+ const sourceType = new source_1.Source().runSyntax(source, input, type);
114
+ if (new _type_utils_1.TypeUtils(input.scope).isAssignableStrict(sourceType, type) === false) {
115
+ const message = `NEW parameter type not compatible`;
116
+ input.issues.push((0, _syntax_input_1.syntaxIssue)(input, node.getFirstToken(), message));
117
+ return;
102
118
  }
103
119
  }
104
120
  else if (parameters) {
105
121
  // parameters with names
106
122
  if (method === undefined) {
107
- throw new Error("NewObject, no parameters for constructor found, " + name);
123
+ const message = "NewObject, no parameters for constructor found, " + name;
124
+ input.issues.push((0, _syntax_input_1.syntaxIssue)(input, node.getFirstToken(), message));
125
+ return;
108
126
  }
109
- new method_parameters_1.MethodParameters().checkExporting(parameters, scope, method, filename);
127
+ new method_parameters_1.MethodParameters().checkExporting(parameters, input, method);
110
128
  }
111
129
  else if (requiredParameters.length > 0) {
112
- throw new Error(`constructor parameter "${requiredParameters[0].getName()}" must be supplied, ` + name);
130
+ const message = `constructor parameter "${requiredParameters[0].getName()}" must be supplied, ` + name;
131
+ input.issues.push((0, _syntax_input_1.syntaxIssue)(input, node.getFirstToken(), message));
132
+ return;
113
133
  }
114
134
  }
115
135
  defaultImportingType(method) {
@@ -4,9 +4,9 @@ exports.RaiseWith = void 0;
4
4
  const Expressions = require("../../2_statements/expressions");
5
5
  const source_1 = require("./source");
6
6
  class RaiseWith {
7
- runSyntax(node, scope, filename) {
7
+ runSyntax(node, input) {
8
8
  for (const f of node.findDirectExpressions(Expressions.SimpleSource1)) {
9
- new source_1.Source().runSyntax(f, scope, filename);
9
+ new source_1.Source().runSyntax(f, input);
10
10
  }
11
11
  }
12
12
  }