@abaplint/core 2.111.1 → 2.112.1

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 (215) 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 +23 -22
  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/build/src/rules/double_space.js +6 -3
  215. package/package.json +3 -3
@@ -7,8 +7,9 @@ const source_1 = require("./source");
7
7
  const let_1 = require("./let");
8
8
  const field_assignment_1 = require("./field_assignment");
9
9
  const basic_1 = require("../../types/basic");
10
+ const _syntax_input_1 = require("../_syntax_input");
10
11
  class ValueBody {
11
- runSyntax(node, scope, filename, targetType) {
12
+ runSyntax(node, input, targetType) {
12
13
  var _a;
13
14
  if (node === undefined) {
14
15
  return targetType;
@@ -16,29 +17,31 @@ class ValueBody {
16
17
  let letScoped = false;
17
18
  const letNode = node.findDirectExpression(Expressions.Let);
18
19
  if (letNode) {
19
- letScoped = new let_1.Let().runSyntax(letNode, scope, filename);
20
+ letScoped = new let_1.Let().runSyntax(letNode, input);
20
21
  }
21
22
  let forScopes = 0;
22
23
  for (const forNode of node.findDirectExpressions(Expressions.For) || []) {
23
- const scoped = new for_1.For().runSyntax(forNode, scope, filename);
24
+ const scoped = new for_1.For().runSyntax(forNode, input);
24
25
  if (scoped === true) {
25
26
  forScopes++;
26
27
  }
27
28
  }
28
29
  const fields = new Set();
29
30
  for (const s of node.findDirectExpressions(Expressions.FieldAssignment)) {
30
- new field_assignment_1.FieldAssignment().runSyntax(s, scope, filename, targetType);
31
+ new field_assignment_1.FieldAssignment().runSyntax(s, input, targetType);
31
32
  const fieldname = (_a = s.findDirectExpression(Expressions.FieldSub)) === null || _a === void 0 ? void 0 : _a.concatTokens().toUpperCase();
32
33
  if (fieldname) {
33
34
  if (fields.has(fieldname)) {
34
- throw new Error("Duplicate field assignment");
35
+ const message = "Duplicate field assignment";
36
+ input.issues.push((0, _syntax_input_1.syntaxIssue)(input, s.getFirstToken(), message));
37
+ return new basic_1.VoidType(_syntax_input_1.CheckSyntaxKey);
35
38
  }
36
39
  fields.add(fieldname);
37
40
  }
38
41
  }
39
42
  let type = undefined; // todo, this is only correct if there is a single source in the body
40
43
  for (const s of node.findDirectExpressions(Expressions.Source)) {
41
- type = new source_1.Source().runSyntax(s, scope, filename, type);
44
+ type = new source_1.Source().runSyntax(s, input, type);
42
45
  }
43
46
  for (const foo of node.findDirectExpressions(Expressions.ValueBodyLine)) {
44
47
  if (!(targetType instanceof basic_1.TableType)
@@ -46,7 +49,9 @@ class ValueBody {
46
49
  && !(targetType instanceof basic_1.AnyType)
47
50
  && targetType !== undefined
48
51
  && !(targetType instanceof basic_1.VoidType)) {
49
- throw new Error("Value, not a table type");
52
+ const message = "Value, not a table type";
53
+ input.issues.push((0, _syntax_input_1.syntaxIssue)(input, foo.getFirstToken(), message));
54
+ return new basic_1.VoidType(_syntax_input_1.CheckSyntaxKey);
50
55
  }
51
56
  let rowType = targetType;
52
57
  if (targetType instanceof basic_1.TableType) {
@@ -55,21 +60,21 @@ class ValueBody {
55
60
  for (const l of foo.findDirectExpressions(Expressions.ValueBodyLines)) {
56
61
  for (const s of l.findDirectExpressions(Expressions.Source)) {
57
62
  // LINES OF ?? todo, pass type,
58
- new source_1.Source().runSyntax(s, scope, filename);
63
+ new source_1.Source().runSyntax(s, input);
59
64
  }
60
65
  }
61
66
  for (const s of foo.findDirectExpressions(Expressions.FieldAssignment)) {
62
- new field_assignment_1.FieldAssignment().runSyntax(s, scope, filename, rowType);
67
+ new field_assignment_1.FieldAssignment().runSyntax(s, input, rowType);
63
68
  }
64
69
  for (const s of foo.findDirectExpressions(Expressions.Source)) {
65
- new source_1.Source().runSyntax(s, scope, filename, rowType);
70
+ new source_1.Source().runSyntax(s, input, rowType);
66
71
  }
67
72
  }
68
73
  if (letScoped === true) {
69
- scope.pop(node.getLastToken().getEnd());
74
+ input.scope.pop(node.getLastToken().getEnd());
70
75
  }
71
76
  for (let i = 0; i < forScopes; i++) {
72
- scope.pop(node.getLastToken().getEnd());
77
+ input.scope.pop(node.getLastToken().getEnd());
73
78
  }
74
79
  if ((targetType === null || targetType === void 0 ? void 0 : targetType.isGeneric()) && type) {
75
80
  return type;
@@ -105,12 +105,25 @@ class FindGlobalDefinitions {
105
105
  }
106
106
  update(obj) {
107
107
  const file = obj.getMainABAPFile();
108
+ if (file === undefined) {
109
+ obj.setDefinition(undefined);
110
+ return;
111
+ }
108
112
  const struc = file === null || file === void 0 ? void 0 : file.getStructure();
113
+ if (struc === undefined) {
114
+ obj.setDefinition(undefined);
115
+ return;
116
+ }
117
+ const input = {
118
+ filename: file.getFilename(),
119
+ scope: _current_scope_1.CurrentScope.buildDefault(this.reg, obj),
120
+ issues: [],
121
+ };
109
122
  if (obj instanceof interface_1.Interface) {
110
- const found = struc === null || struc === void 0 ? void 0 : struc.findFirstStructure(Structures.Interface);
111
- if (struc && file && found) {
123
+ const found = struc.findFirstStructure(Structures.Interface);
124
+ if (found) {
112
125
  try {
113
- const def = new interface_definition_1.InterfaceDefinition(found, file.getFilename(), _current_scope_1.CurrentScope.buildDefault(this.reg, obj));
126
+ const def = new interface_definition_1.InterfaceDefinition(found, input);
114
127
  obj.setDefinition(def);
115
128
  }
116
129
  catch (_a) {
@@ -122,10 +135,10 @@ class FindGlobalDefinitions {
122
135
  }
123
136
  }
124
137
  else {
125
- const found = struc === null || struc === void 0 ? void 0 : struc.findFirstStructure(Structures.ClassDefinition);
126
- if (struc && file && found) {
138
+ const found = struc.findFirstStructure(Structures.ClassDefinition);
139
+ if (found) {
127
140
  try {
128
- const def = new class_definition_1.ClassDefinition(found, file.getFilename(), _current_scope_1.CurrentScope.buildDefault(this.reg, obj));
141
+ const def = new class_definition_1.ClassDefinition(found, input);
129
142
  obj.setDefinition(def);
130
143
  }
131
144
  catch (_b) {
@@ -4,6 +4,7 @@ exports.SpaghettiScope = exports.SpaghettiScopeNode = void 0;
4
4
  const _typed_identifier_1 = require("../types/_typed_identifier");
5
5
  const _identifier_1 = require("../4_file_information/_identifier");
6
6
  const _reference_1 = require("./_reference");
7
+ const assert_error_1 = require("./assert_error");
7
8
  class ScopeData {
8
9
  constructor() {
9
10
  this.data = {
@@ -49,7 +50,7 @@ class SpaghettiScopeNode extends ScopeData {
49
50
  }
50
51
  calcCoverage() {
51
52
  if (this.identifier.end === undefined) {
52
- throw new Error("internal error, caclCoverage");
53
+ throw new assert_error_1.AssertError("internal error, caclCoverage");
53
54
  }
54
55
  return { start: this.identifier.start, end: this.identifier.end };
55
56
  }
@@ -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 Add {
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,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 AddCorresponding {
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
  }
@@ -8,29 +8,34 @@ const basic_1 = require("../../types/basic");
8
8
  const fstarget_1 = require("../expressions/fstarget");
9
9
  const inline_data_1 = require("../expressions/inline_data");
10
10
  const _type_utils_1 = require("../_type_utils");
11
+ const _syntax_input_1 = require("../_syntax_input");
11
12
  // todo: issue error for short APPEND if the source is without header line
12
13
  class Append {
13
- runSyntax(node, scope, filename) {
14
+ runSyntax(node, input) {
14
15
  let targetType = undefined;
15
16
  const target = node.findDirectExpression(Expressions.Target);
16
17
  if (target) {
17
- targetType = new target_1.Target().runSyntax(target, scope, filename);
18
+ targetType = new target_1.Target().runSyntax(target, input);
18
19
  }
19
20
  const fsTarget = node.findExpressionAfterToken("ASSIGNING");
20
21
  if (fsTarget && fsTarget.get() instanceof Expressions.FSTarget) {
21
22
  if (!(targetType instanceof basic_1.TableType) && !(targetType instanceof basic_1.VoidType)) {
22
- throw new Error("APPEND to non table type");
23
+ const message = "APPEND to non table type";
24
+ input.issues.push((0, _syntax_input_1.syntaxIssue)(input, node.getFirstToken(), message));
25
+ return;
23
26
  }
24
27
  const rowType = targetType instanceof basic_1.TableType ? targetType.getRowType() : targetType;
25
- new fstarget_1.FSTarget().runSyntax(fsTarget, scope, filename, rowType);
28
+ new fstarget_1.FSTarget().runSyntax(fsTarget, input, rowType);
26
29
  }
27
30
  const dataTarget = node.findExpressionAfterToken("INTO");
28
31
  if (dataTarget && node.concatTokens().toUpperCase().includes(" REFERENCE INTO DATA(")) {
29
32
  if (!(targetType instanceof basic_1.TableType) && !(targetType instanceof basic_1.VoidType)) {
30
- throw new Error("APPEND to non table type");
33
+ const message = "APPEND to non table type";
34
+ input.issues.push((0, _syntax_input_1.syntaxIssue)(input, node.getFirstToken(), message));
35
+ return;
31
36
  }
32
37
  const rowType = targetType instanceof basic_1.TableType ? targetType.getRowType() : targetType;
33
- new inline_data_1.InlineData().runSyntax(dataTarget, scope, filename, new basic_1.DataReference(rowType));
38
+ new inline_data_1.InlineData().runSyntax(dataTarget, input, new basic_1.DataReference(rowType));
34
39
  }
35
40
  let source = node.findDirectExpression(Expressions.SimpleSource4);
36
41
  if (source === undefined) {
@@ -41,7 +46,9 @@ class Append {
41
46
  && !(targetType instanceof basic_1.TableType)
42
47
  && dataTarget !== target
43
48
  && !(targetType instanceof basic_1.VoidType)) {
44
- throw new Error("Append, target not a table type");
49
+ const message = "Append, target not a table type";
50
+ input.issues.push((0, _syntax_input_1.syntaxIssue)(input, node.getFirstToken(), message));
51
+ return;
45
52
  }
46
53
  let rowType = undefined;
47
54
  if (targetType instanceof basic_1.TableType) {
@@ -50,7 +57,7 @@ class Append {
50
57
  else if (targetType instanceof basic_1.VoidType) {
51
58
  rowType = targetType;
52
59
  }
53
- let sourceType = new source_1.Source().runSyntax(source, scope, filename, rowType);
60
+ let sourceType = new source_1.Source().runSyntax(source, input, rowType);
54
61
  if (node.findDirectTokenByText("LINES")) {
55
62
  // hmm, checking only the row types are compatible will not check the table type, e.g. sorted or hashed
56
63
  if (sourceType instanceof basic_1.TableType) {
@@ -59,23 +66,27 @@ class Append {
59
66
  if (targetType instanceof basic_1.TableType) {
60
67
  targetType = targetType.getRowType();
61
68
  }
62
- if (new _type_utils_1.TypeUtils(scope).isAssignable(sourceType, targetType) === false) {
63
- throw new Error("Incompatible types");
69
+ if (new _type_utils_1.TypeUtils(input.scope).isAssignable(sourceType, targetType) === false) {
70
+ const message = "Incompatible types";
71
+ input.issues.push((0, _syntax_input_1.syntaxIssue)(input, node.getFirstToken(), message));
72
+ return;
64
73
  }
65
74
  }
66
75
  else {
67
- if (new _type_utils_1.TypeUtils(scope).isAssignable(sourceType, rowType) === false) {
68
- throw new Error("Incompatible types");
76
+ if (new _type_utils_1.TypeUtils(input.scope).isAssignable(sourceType, rowType) === false) {
77
+ const message = "Incompatible types";
78
+ input.issues.push((0, _syntax_input_1.syntaxIssue)(input, node.getFirstToken(), message));
79
+ return;
69
80
  }
70
81
  }
71
82
  }
72
83
  const from = node.findExpressionAfterToken("FROM");
73
84
  if (from && from.get() instanceof Expressions.Source) {
74
- new source_1.Source().runSyntax(from, scope, filename);
85
+ new source_1.Source().runSyntax(from, input);
75
86
  }
76
87
  const to = node.findExpressionAfterToken("TO");
77
88
  if (to && to.get() instanceof Expressions.Source) {
78
- new source_1.Source().runSyntax(to, scope, filename);
89
+ new source_1.Source().runSyntax(to, input);
79
90
  }
80
91
  }
81
92
  }
@@ -4,9 +4,9 @@ exports.Assert = void 0;
4
4
  const Expressions = require("../../2_statements/expressions");
5
5
  const cond_1 = require("../expressions/cond");
6
6
  class Assert {
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
  }
@@ -7,8 +7,9 @@ const fstarget_1 = require("../expressions/fstarget");
7
7
  const basic_1 = require("../../types/basic");
8
8
  const dynamic_1 = require("../expressions/dynamic");
9
9
  const _type_utils_1 = require("../_type_utils");
10
+ const _syntax_input_1 = require("../_syntax_input");
10
11
  class Assign {
11
- runSyntax(node, scope, filename) {
12
+ runSyntax(node, input) {
12
13
  var _a, _b;
13
14
  const assignSource = node.findDirectExpression(Expressions.AssignSource);
14
15
  const sources = (assignSource === null || assignSource === void 0 ? void 0 : assignSource.findDirectExpressionsMulti([Expressions.Source, Expressions.SimpleSource3])) || [];
@@ -19,43 +20,47 @@ class Assign {
19
20
  const thirdAssign = assignSource === null || assignSource === void 0 ? void 0 : assignSource.getChildren()[2];
20
21
  if ((secondAssign === null || secondAssign === void 0 ? void 0 : secondAssign.concatTokens()) === "=>" && firstAssign && (thirdAssign === null || thirdAssign === void 0 ? void 0 : thirdAssign.get()) instanceof Expressions.Dynamic) {
21
22
  const name = firstAssign.concatTokens();
22
- const found = scope.findClassDefinition(name) || scope.findVariable(name);
23
- if (found === undefined && scope.getDDIC().inErrorNamespace(name) && name.startsWith("(") === false) {
24
- throw new Error(name + " not found, dynamic");
23
+ const found = input.scope.findClassDefinition(name) || input.scope.findVariable(name);
24
+ if (found === undefined && input.scope.getDDIC().inErrorNamespace(name) && name.startsWith("(") === false) {
25
+ const message = name + " not found, dynamic";
26
+ input.issues.push((0, _syntax_input_1.syntaxIssue)(input, node.getFirstToken(), message));
27
+ return;
25
28
  }
26
29
  sourceType = new basic_1.VoidType("Dynamic");
27
30
  }
28
31
  else {
29
- sourceType = new source_1.Source().runSyntax(theSource, scope, filename);
32
+ sourceType = new source_1.Source().runSyntax(theSource, input);
30
33
  }
31
34
  if ((assignSource === null || assignSource === void 0 ? void 0 : assignSource.getChildren().length) === 5
32
35
  && ((_a = assignSource === null || assignSource === void 0 ? void 0 : assignSource.getFirstChild()) === null || _a === void 0 ? void 0 : _a.concatTokens().toUpperCase()) === "COMPONENT") {
33
36
  const componentSource = sources[sources.length - 2];
34
- const componentType = new source_1.Source().runSyntax(componentSource, scope, filename);
35
- if (new _type_utils_1.TypeUtils(scope).isAssignable(componentType, new basic_1.CharacterType(30)) === false) {
36
- throw new Error("component name must be charlike");
37
+ const componentType = new source_1.Source().runSyntax(componentSource, input);
38
+ if (new _type_utils_1.TypeUtils(input.scope).isAssignable(componentType, new basic_1.CharacterType(30)) === false) {
39
+ const message = "component name must be charlike";
40
+ input.issues.push((0, _syntax_input_1.syntaxIssue)(input, node.getFirstToken(), message));
41
+ return;
37
42
  }
38
43
  }
39
44
  if (sourceType === undefined || (assignSource === null || assignSource === void 0 ? void 0 : assignSource.findDirectExpression(Expressions.Dynamic))) {
40
45
  sourceType = new basic_1.AnyType();
41
46
  }
42
47
  for (const d of (assignSource === null || assignSource === void 0 ? void 0 : assignSource.findAllExpressions(Expressions.Dynamic)) || []) {
43
- new dynamic_1.Dynamic().runSyntax(d, scope, filename);
48
+ new dynamic_1.Dynamic().runSyntax(d, input);
44
49
  }
45
50
  const target = node.findDirectExpression(Expressions.FSTarget);
46
51
  if (target) {
47
52
  if (((_b = assignSource === null || assignSource === void 0 ? void 0 : assignSource.getFirstChild()) === null || _b === void 0 ? void 0 : _b.concatTokens().toUpperCase()) === "COMPONENT") {
48
- new fstarget_1.FSTarget().runSyntax(target, scope, filename, new basic_1.AnyType());
53
+ new fstarget_1.FSTarget().runSyntax(target, input, new basic_1.AnyType());
49
54
  }
50
55
  else {
51
- new fstarget_1.FSTarget().runSyntax(target, scope, filename, sourceType);
56
+ new fstarget_1.FSTarget().runSyntax(target, input, sourceType);
52
57
  }
53
58
  }
54
59
  for (const s of node.findAllExpressions(Expressions.Source)) {
55
60
  if (s === theSource) {
56
61
  continue;
57
62
  }
58
- new source_1.Source().runSyntax(s, scope, filename);
63
+ new source_1.Source().runSyntax(s, input);
59
64
  }
60
65
  }
61
66
  }
@@ -4,9 +4,9 @@ exports.AuthorityCheck = void 0;
4
4
  const Expressions = require("../../2_statements/expressions");
5
5
  const source_1 = require("../expressions/source");
6
6
  class AuthorityCheck {
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
  }
@@ -6,23 +6,26 @@ const method_call_chain_1 = require("../expressions/method_call_chain");
6
6
  const method_source_1 = require("../expressions/method_source");
7
7
  const method_call_body_1 = require("../expressions/method_call_body");
8
8
  const void_type_1 = require("../../types/basic/void_type");
9
+ const _syntax_input_1 = require("../_syntax_input");
9
10
  class Call {
10
- runSyntax(node, scope, filename) {
11
+ runSyntax(node, input) {
11
12
  const children = node.getChildren();
12
13
  if (children.length === 2) {
13
14
  const first = children[0];
14
- new method_call_chain_1.MethodCallChain().runSyntax(first, scope, filename);
15
+ new method_call_chain_1.MethodCallChain().runSyntax(first, input);
15
16
  return;
16
17
  }
17
18
  const methodSource = children[2];
18
19
  if (methodSource === undefined) {
19
- throw new Error("Call, child MethodSource not found");
20
+ const message = "Call, child MethodSource not found";
21
+ input.issues.push((0, _syntax_input_1.syntaxIssue)(input, node.getFirstToken(), message));
22
+ return;
20
23
  }
21
- const methodDef = new method_source_1.MethodSource().runSyntax(methodSource, scope, filename);
24
+ const methodDef = new method_source_1.MethodSource().runSyntax(methodSource, input);
22
25
  const body = children[3];
23
26
  if (body instanceof nodes_1.ExpressionNode) {
24
27
  // todo, resolve the method definition above and pass, if possible, in case of dynamic pass void
25
- new method_call_body_1.MethodCallBody().runSyntax(body, scope, filename, methodDef || new void_type_1.VoidType("CallTODO"));
28
+ new method_call_body_1.MethodCallBody().runSyntax(body, input, methodDef || new void_type_1.VoidType("CallTODO"));
26
29
  }
27
30
  }
28
31
  }
@@ -6,15 +6,15 @@ const source_1 = require("../expressions/source");
6
6
  const target_1 = require("../expressions/target");
7
7
  const dynamic_1 = require("../expressions/dynamic");
8
8
  class CallBadi {
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 t of node.findAllExpressions(Expressions.Target)) {
14
- new target_1.Target().runSyntax(t, scope, filename);
14
+ new target_1.Target().runSyntax(t, 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
  }
20
20
  }
@@ -7,33 +7,36 @@ const target_1 = require("../expressions/target");
7
7
  const field_chain_1 = require("../expressions/field_chain");
8
8
  const _reference_1 = require("../_reference");
9
9
  const version_1 = require("../../../version");
10
+ const _syntax_input_1 = require("../_syntax_input");
10
11
  class CallFunction {
11
- runSyntax(node, scope, filename) {
12
+ runSyntax(node, input) {
12
13
  // todo, lots of work here, similar to receive.ts
13
14
  const name = node.findFirstExpression(Expressions.FunctionName);
14
15
  const chain = name === null || name === void 0 ? void 0 : name.findFirstExpression(Expressions.FieldChain);
15
16
  if (chain) {
16
- new field_chain_1.FieldChain().runSyntax(chain, scope, filename, _reference_1.ReferenceType.DataReadReference);
17
+ new field_chain_1.FieldChain().runSyntax(chain, input, _reference_1.ReferenceType.DataReadReference);
17
18
  }
18
- else if (scope.getVersion() === version_1.Version.Cloud
19
+ else if (input.scope.getVersion() === version_1.Version.Cloud
19
20
  && node.findDirectExpression(Expressions.Destination) === undefined) {
20
21
  const functionName = name === null || name === void 0 ? void 0 : name.concatTokens().replace(/'/g, "");
21
- if (scope.findFunctionModule(functionName) === undefined) {
22
- throw new Error(`Function module "${functionName}" not found/released`);
22
+ if (input.scope.findFunctionModule(functionName) === undefined) {
23
+ const message = `Function module "${functionName}" not found/released`;
24
+ input.issues.push((0, _syntax_input_1.syntaxIssue)(input, node.getFirstToken(), message));
25
+ return;
23
26
  }
24
27
  }
25
28
  // just recurse
26
29
  for (const s of node.findAllExpressions(Expressions.Source)) {
27
- new source_1.Source().runSyntax(s, scope, filename);
30
+ new source_1.Source().runSyntax(s, input);
28
31
  }
29
32
  for (const s of node.findAllExpressions(Expressions.SimpleSource3)) {
30
- new source_1.Source().runSyntax(s, scope, filename);
33
+ new source_1.Source().runSyntax(s, input);
31
34
  }
32
35
  for (const t of node.findAllExpressions(Expressions.Target)) {
33
- new target_1.Target().runSyntax(t, scope, filename);
36
+ new target_1.Target().runSyntax(t, input);
34
37
  }
35
38
  for (const s of node.findDirectExpressions(Expressions.SimpleSource2)) {
36
- new source_1.Source().runSyntax(s, scope, filename);
39
+ new source_1.Source().runSyntax(s, input);
37
40
  }
38
41
  }
39
42
  }
@@ -4,9 +4,9 @@ exports.CallKernel = void 0;
4
4
  const Expressions = require("../../2_statements/expressions");
5
5
  const source_1 = require("../expressions/source");
6
6
  class CallKernel {
7
- runSyntax(node, scope, filename) {
7
+ runSyntax(node, input) {
8
8
  for (const s of node.findAllExpressions(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
  }
@@ -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 CallTransaction {
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
  }
@@ -8,20 +8,20 @@ const basic_1 = require("../../types/basic");
8
8
  const inline_data_1 = require("../expressions/inline_data");
9
9
  const dynamic_1 = require("../expressions/dynamic");
10
10
  class CallTransformation {
11
- runSyntax(node, scope, filename) {
11
+ runSyntax(node, input) {
12
12
  for (const s of node.findAllExpressions(Expressions.SimpleSource3)) {
13
- new source_1.Source().runSyntax(s, scope, filename);
13
+ new source_1.Source().runSyntax(s, input);
14
14
  }
15
15
  for (const d of node.findAllExpressions(Expressions.Dynamic)) {
16
- new dynamic_1.Dynamic().runSyntax(d, scope, filename);
16
+ new dynamic_1.Dynamic().runSyntax(d, input);
17
17
  }
18
18
  for (const t of node.findAllExpressions(Expressions.Target)) {
19
19
  const inline = t === null || t === void 0 ? void 0 : t.findDirectExpression(Expressions.InlineData);
20
20
  if (inline) {
21
- new inline_data_1.InlineData().runSyntax(inline, scope, filename, new basic_1.XStringType());
21
+ new inline_data_1.InlineData().runSyntax(inline, input, new basic_1.XStringType());
22
22
  }
23
23
  else {
24
- new target_1.Target().runSyntax(t, scope, filename);
24
+ new target_1.Target().runSyntax(t, input);
25
25
  }
26
26
  }
27
27
  }
@@ -4,10 +4,10 @@ exports.Case = void 0;
4
4
  const Expressions = require("../../2_statements/expressions");
5
5
  const source_1 = require("../expressions/source");
6
6
  class Case {
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
  }
@@ -4,10 +4,10 @@ exports.CaseType = void 0;
4
4
  const Expressions = require("../../2_statements/expressions");
5
5
  const source_1 = require("../expressions/source");
6
6
  class CaseType {
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
  }