@abaplint/core 2.111.1 → 2.112.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (214) hide show
  1. package/build/abaplint.d.ts +17 -8
  2. package/build/src/abap/5_syntax/_builtin.js +2 -2
  3. package/build/src/abap/5_syntax/_current_scope.js +2 -0
  4. package/build/src/abap/5_syntax/_procedural.js +6 -2
  5. package/build/src/abap/5_syntax/_syntax_input.js +11 -0
  6. package/build/src/abap/5_syntax/assert_error.js +7 -0
  7. package/build/src/abap/5_syntax/basic_types.js +78 -79
  8. package/build/src/abap/5_syntax/expressions/attribute_chain.js +15 -8
  9. package/build/src/abap/5_syntax/expressions/attribute_name.js +24 -11
  10. package/build/src/abap/5_syntax/expressions/cast.js +24 -13
  11. package/build/src/abap/5_syntax/expressions/compare.js +4 -4
  12. package/build/src/abap/5_syntax/expressions/component_chain.js +26 -11
  13. package/build/src/abap/5_syntax/expressions/component_compare.js +7 -4
  14. package/build/src/abap/5_syntax/expressions/component_compare_simple.js +11 -6
  15. package/build/src/abap/5_syntax/expressions/component_cond.js +3 -3
  16. package/build/src/abap/5_syntax/expressions/component_name.js +10 -5
  17. package/build/src/abap/5_syntax/expressions/cond.js +3 -6
  18. package/build/src/abap/5_syntax/expressions/cond_body.js +6 -6
  19. package/build/src/abap/5_syntax/expressions/conv_body.js +9 -8
  20. package/build/src/abap/5_syntax/expressions/corresponding_body.js +3 -3
  21. package/build/src/abap/5_syntax/expressions/data_definition.js +7 -7
  22. package/build/src/abap/5_syntax/expressions/database_table.js +9 -7
  23. package/build/src/abap/5_syntax/expressions/default.js +2 -2
  24. package/build/src/abap/5_syntax/expressions/dereference.js +5 -2
  25. package/build/src/abap/5_syntax/expressions/dynamic.js +2 -2
  26. package/build/src/abap/5_syntax/expressions/field_assignment.js +12 -5
  27. package/build/src/abap/5_syntax/expressions/field_chain.js +40 -25
  28. package/build/src/abap/5_syntax/expressions/field_length.js +2 -2
  29. package/build/src/abap/5_syntax/expressions/field_offset.js +2 -2
  30. package/build/src/abap/5_syntax/expressions/filter_body.js +3 -3
  31. package/build/src/abap/5_syntax/expressions/for.js +11 -11
  32. package/build/src/abap/5_syntax/expressions/form_param.js +10 -9
  33. package/build/src/abap/5_syntax/expressions/fstarget.js +8 -5
  34. package/build/src/abap/5_syntax/expressions/inline_data.js +11 -8
  35. package/build/src/abap/5_syntax/expressions/inline_field_definition.js +12 -8
  36. package/build/src/abap/5_syntax/expressions/inline_fs.js +7 -7
  37. package/build/src/abap/5_syntax/expressions/inline_loop_definition.js +16 -11
  38. package/build/src/abap/5_syntax/expressions/let.js +3 -3
  39. package/build/src/abap/5_syntax/expressions/loop_group_by.js +5 -15
  40. package/build/src/abap/5_syntax/expressions/message_source.js +4 -4
  41. package/build/src/abap/5_syntax/expressions/method_call_body.js +4 -4
  42. package/build/src/abap/5_syntax/expressions/method_call_chain.js +34 -25
  43. package/build/src/abap/5_syntax/expressions/method_call_param.js +33 -14
  44. package/build/src/abap/5_syntax/expressions/method_def_returning.js +7 -6
  45. package/build/src/abap/5_syntax/expressions/method_param.js +11 -10
  46. package/build/src/abap/5_syntax/expressions/method_parameters.js +76 -49
  47. package/build/src/abap/5_syntax/expressions/method_source.js +47 -38
  48. package/build/src/abap/5_syntax/expressions/new_object.js +48 -28
  49. package/build/src/abap/5_syntax/expressions/raise_with.js +2 -2
  50. package/build/src/abap/5_syntax/expressions/reduce_body.js +10 -10
  51. package/build/src/abap/5_syntax/expressions/reduce_next.js +3 -3
  52. package/build/src/abap/5_syntax/expressions/select.js +48 -33
  53. package/build/src/abap/5_syntax/expressions/select_loop.js +2 -2
  54. package/build/src/abap/5_syntax/expressions/source.js +74 -64
  55. package/build/src/abap/5_syntax/expressions/source_field.js +12 -6
  56. package/build/src/abap/5_syntax/expressions/source_field_symbol.js +8 -4
  57. package/build/src/abap/5_syntax/expressions/sql_compare.js +11 -19
  58. package/build/src/abap/5_syntax/expressions/sql_for_all_entries.js +7 -4
  59. package/build/src/abap/5_syntax/expressions/sql_from.js +3 -3
  60. package/build/src/abap/5_syntax/expressions/sql_in.js +34 -0
  61. package/build/src/abap/5_syntax/expressions/sql_order_by.js +2 -2
  62. package/build/src/abap/5_syntax/expressions/sql_source.js +3 -3
  63. package/build/src/abap/5_syntax/expressions/string_template.js +16 -8
  64. package/build/src/abap/5_syntax/expressions/switch_body.js +8 -4
  65. package/build/src/abap/5_syntax/expressions/table_expression.js +2 -2
  66. package/build/src/abap/5_syntax/expressions/target.js +50 -29
  67. package/build/src/abap/5_syntax/expressions/type_table.js +7 -7
  68. package/build/src/abap/5_syntax/expressions/value_body.js +17 -12
  69. package/build/src/abap/5_syntax/global_definitions/find_global_definitions.js +19 -6
  70. package/build/src/abap/5_syntax/spaghetti_scope.js +2 -1
  71. package/build/src/abap/5_syntax/statements/add.js +3 -3
  72. package/build/src/abap/5_syntax/statements/add_corresponding.js +3 -3
  73. package/build/src/abap/5_syntax/statements/append.js +25 -14
  74. package/build/src/abap/5_syntax/statements/assert.js +2 -2
  75. package/build/src/abap/5_syntax/statements/assign.js +17 -12
  76. package/build/src/abap/5_syntax/statements/authority_check.js +2 -2
  77. package/build/src/abap/5_syntax/statements/call.js +8 -5
  78. package/build/src/abap/5_syntax/statements/call_badi.js +4 -4
  79. package/build/src/abap/5_syntax/statements/call_function.js +12 -9
  80. package/build/src/abap/5_syntax/statements/call_kernel.js +2 -2
  81. package/build/src/abap/5_syntax/statements/call_transaction.js +3 -3
  82. package/build/src/abap/5_syntax/statements/call_transformation.js +5 -5
  83. package/build/src/abap/5_syntax/statements/case.js +2 -2
  84. package/build/src/abap/5_syntax/statements/case_type.js +2 -2
  85. package/build/src/abap/5_syntax/statements/catch.js +24 -19
  86. package/build/src/abap/5_syntax/statements/check.js +2 -2
  87. package/build/src/abap/5_syntax/statements/class_data.js +9 -5
  88. package/build/src/abap/5_syntax/statements/class_deferred.js +2 -2
  89. package/build/src/abap/5_syntax/statements/class_implementation.js +16 -13
  90. package/build/src/abap/5_syntax/statements/class_local_friends.js +16 -9
  91. package/build/src/abap/5_syntax/statements/clear.js +3 -3
  92. package/build/src/abap/5_syntax/statements/close_dataset.js +2 -2
  93. package/build/src/abap/5_syntax/statements/collect.js +4 -4
  94. package/build/src/abap/5_syntax/statements/commit_entities.js +4 -4
  95. package/build/src/abap/5_syntax/statements/concatenate.js +18 -11
  96. package/build/src/abap/5_syntax/statements/condense.js +2 -2
  97. package/build/src/abap/5_syntax/statements/constant.js +6 -5
  98. package/build/src/abap/5_syntax/statements/controls.js +5 -5
  99. package/build/src/abap/5_syntax/statements/convert.js +8 -8
  100. package/build/src/abap/5_syntax/statements/create_data.js +11 -11
  101. package/build/src/abap/5_syntax/statements/create_object.js +49 -26
  102. package/build/src/abap/5_syntax/statements/data.js +8 -4
  103. package/build/src/abap/5_syntax/statements/delete_cluster.js +4 -4
  104. package/build/src/abap/5_syntax/statements/delete_database.js +5 -5
  105. package/build/src/abap/5_syntax/statements/delete_internal.js +7 -7
  106. package/build/src/abap/5_syntax/statements/delete_report.js +2 -2
  107. package/build/src/abap/5_syntax/statements/describe.js +13 -13
  108. package/build/src/abap/5_syntax/statements/divide.js +3 -3
  109. package/build/src/abap/5_syntax/statements/do.js +8 -5
  110. package/build/src/abap/5_syntax/statements/editor_call.js +3 -3
  111. package/build/src/abap/5_syntax/statements/else_if.js +2 -2
  112. package/build/src/abap/5_syntax/statements/export.js +5 -5
  113. package/build/src/abap/5_syntax/statements/fieldsymbol.js +4 -4
  114. package/build/src/abap/5_syntax/statements/find.js +13 -13
  115. package/build/src/abap/5_syntax/statements/form.js +10 -7
  116. package/build/src/abap/5_syntax/statements/format.js +2 -2
  117. package/build/src/abap/5_syntax/statements/get_badi.js +4 -4
  118. package/build/src/abap/5_syntax/statements/get_bit.js +9 -6
  119. package/build/src/abap/5_syntax/statements/get_cursor.js +2 -2
  120. package/build/src/abap/5_syntax/statements/get_locale.js +3 -3
  121. package/build/src/abap/5_syntax/statements/get_parameter.js +4 -4
  122. package/build/src/abap/5_syntax/statements/get_reference.js +8 -5
  123. package/build/src/abap/5_syntax/statements/get_run_time.js +3 -3
  124. package/build/src/abap/5_syntax/statements/get_time.js +3 -3
  125. package/build/src/abap/5_syntax/statements/if.js +2 -2
  126. package/build/src/abap/5_syntax/statements/import.js +5 -5
  127. package/build/src/abap/5_syntax/statements/import_dynpro.js +3 -3
  128. package/build/src/abap/5_syntax/statements/include_type.js +9 -5
  129. package/build/src/abap/5_syntax/statements/insert_database.js +5 -5
  130. package/build/src/abap/5_syntax/statements/insert_field_group.js +4 -4
  131. package/build/src/abap/5_syntax/statements/insert_internal.js +22 -13
  132. package/build/src/abap/5_syntax/statements/insert_report.js +2 -2
  133. package/build/src/abap/5_syntax/statements/insert_textpool.js +2 -2
  134. package/build/src/abap/5_syntax/statements/interface_deferred.js +2 -2
  135. package/build/src/abap/5_syntax/statements/log_point.js +2 -2
  136. package/build/src/abap/5_syntax/statements/loop.js +29 -16
  137. package/build/src/abap/5_syntax/statements/loop_at_screen.js +3 -3
  138. package/build/src/abap/5_syntax/statements/message.js +6 -6
  139. package/build/src/abap/5_syntax/statements/method_implementation.js +18 -13
  140. package/build/src/abap/5_syntax/statements/modify_database.js +8 -8
  141. package/build/src/abap/5_syntax/statements/modify_entities.js +4 -4
  142. package/build/src/abap/5_syntax/statements/modify_internal.js +15 -8
  143. package/build/src/abap/5_syntax/statements/modify_screen.js +2 -2
  144. package/build/src/abap/5_syntax/statements/move.js +17 -10
  145. package/build/src/abap/5_syntax/statements/move_corresponding.js +14 -7
  146. package/build/src/abap/5_syntax/statements/multiply.js +3 -3
  147. package/build/src/abap/5_syntax/statements/open_dataset.js +3 -3
  148. package/build/src/abap/5_syntax/statements/pack.js +3 -3
  149. package/build/src/abap/5_syntax/statements/parameter.js +11 -6
  150. package/build/src/abap/5_syntax/statements/perform.js +12 -8
  151. package/build/src/abap/5_syntax/statements/raise.js +23 -18
  152. package/build/src/abap/5_syntax/statements/raise_event.js +4 -4
  153. package/build/src/abap/5_syntax/statements/ranges.js +6 -5
  154. package/build/src/abap/5_syntax/statements/read_entities.js +4 -4
  155. package/build/src/abap/5_syntax/statements/read_report.js +3 -3
  156. package/build/src/abap/5_syntax/statements/read_table.js +40 -21
  157. package/build/src/abap/5_syntax/statements/read_textpool.js +3 -3
  158. package/build/src/abap/5_syntax/statements/receive.js +3 -3
  159. package/build/src/abap/5_syntax/statements/replace.js +3 -3
  160. package/build/src/abap/5_syntax/statements/scan.js +3 -3
  161. package/build/src/abap/5_syntax/statements/search.js +2 -2
  162. package/build/src/abap/5_syntax/statements/select.js +2 -2
  163. package/build/src/abap/5_syntax/statements/select_loop.js +2 -2
  164. package/build/src/abap/5_syntax/statements/selection_screen.js +4 -4
  165. package/build/src/abap/5_syntax/statements/selectoption.js +9 -6
  166. package/build/src/abap/5_syntax/statements/set_bit.js +8 -5
  167. package/build/src/abap/5_syntax/statements/set_handler.js +3 -3
  168. package/build/src/abap/5_syntax/statements/set_locale.js +3 -3
  169. package/build/src/abap/5_syntax/statements/set_parameter.js +2 -2
  170. package/build/src/abap/5_syntax/statements/set_pf_status.js +2 -2
  171. package/build/src/abap/5_syntax/statements/set_titlebar.js +2 -2
  172. package/build/src/abap/5_syntax/statements/shift.js +15 -8
  173. package/build/src/abap/5_syntax/statements/sort.js +16 -7
  174. package/build/src/abap/5_syntax/statements/split.js +12 -7
  175. package/build/src/abap/5_syntax/statements/static.js +4 -4
  176. package/build/src/abap/5_syntax/statements/submit.js +4 -4
  177. package/build/src/abap/5_syntax/statements/subtract.js +3 -3
  178. package/build/src/abap/5_syntax/statements/subtract_corresponding.js +3 -3
  179. package/build/src/abap/5_syntax/statements/syntax_check.js +3 -3
  180. package/build/src/abap/5_syntax/statements/system_call.js +2 -2
  181. package/build/src/abap/5_syntax/statements/tables.js +7 -7
  182. package/build/src/abap/5_syntax/statements/transfer.js +3 -3
  183. package/build/src/abap/5_syntax/statements/translate.js +3 -3
  184. package/build/src/abap/5_syntax/statements/truncate_dataset.js +2 -2
  185. package/build/src/abap/5_syntax/statements/type.js +12 -7
  186. package/build/src/abap/5_syntax/statements/unassign.js +7 -4
  187. package/build/src/abap/5_syntax/statements/unpack.js +3 -3
  188. package/build/src/abap/5_syntax/statements/update_database.js +11 -11
  189. package/build/src/abap/5_syntax/statements/wait.js +3 -3
  190. package/build/src/abap/5_syntax/statements/when.js +2 -2
  191. package/build/src/abap/5_syntax/statements/when_type.js +9 -6
  192. package/build/src/abap/5_syntax/statements/while.js +4 -4
  193. package/build/src/abap/5_syntax/statements/with.js +3 -3
  194. package/build/src/abap/5_syntax/statements/with_loop.js +3 -3
  195. package/build/src/abap/5_syntax/statements/write.js +14 -10
  196. package/build/src/abap/5_syntax/structures/class_data.js +3 -3
  197. package/build/src/abap/5_syntax/structures/constants.js +6 -5
  198. package/build/src/abap/5_syntax/structures/data.js +17 -13
  199. package/build/src/abap/5_syntax/structures/statics.js +16 -11
  200. package/build/src/abap/5_syntax/structures/type_enum.js +15 -13
  201. package/build/src/abap/5_syntax/structures/types.js +9 -9
  202. package/build/src/abap/5_syntax/syntax.js +32 -16
  203. package/build/src/abap/types/class_attributes.js +30 -30
  204. package/build/src/abap/types/class_definition.js +29 -29
  205. package/build/src/abap/types/event_definition.js +5 -5
  206. package/build/src/abap/types/form_definition.js +13 -13
  207. package/build/src/abap/types/interface_definition.js +19 -19
  208. package/build/src/abap/types/method_definition.js +10 -10
  209. package/build/src/abap/types/method_definitions.js +9 -10
  210. package/build/src/abap/types/method_parameters.js +29 -29
  211. package/build/src/issue.js +12 -0
  212. package/build/src/registry.js +1 -1
  213. package/build/src/rules/check_syntax.js +2 -1
  214. package/package.json +3 -3
@@ -7,26 +7,31 @@ const unknown_type_1 = require("../../types/basic/unknown_type");
7
7
  const basic_1 = require("../../types/basic");
8
8
  const target_1 = require("../expressions/target");
9
9
  const _reference_1 = require("../_reference");
10
+ const _syntax_input_1 = require("../_syntax_input");
10
11
  class Catch {
11
- runSyntax(node, scope, filename) {
12
+ runSyntax(node, input) {
12
13
  var _a, _b;
13
14
  const names = new Set();
14
15
  for (const c of node.findDirectExpressions(Expressions.ClassName)) {
15
16
  const token = c.getFirstToken();
16
17
  const className = token.getStr().toUpperCase();
17
- const found = scope.existsObject(className);
18
+ const found = input.scope.existsObject(className);
18
19
  if (found === null || found === void 0 ? void 0 : found.id) {
19
- scope.addReference(token, found.id, _reference_1.ReferenceType.ObjectOrientedReference, filename);
20
+ input.scope.addReference(token, found.id, _reference_1.ReferenceType.ObjectOrientedReference, input.filename);
20
21
  }
21
- else if (scope.getDDIC().inErrorNamespace(className) === false) {
22
+ else if (input.scope.getDDIC().inErrorNamespace(className) === false) {
22
23
  const extra = { ooName: className, ooType: "Void" };
23
- scope.addReference(token, undefined, _reference_1.ReferenceType.ObjectOrientedVoidReference, filename, extra);
24
+ input.scope.addReference(token, undefined, _reference_1.ReferenceType.ObjectOrientedVoidReference, input.filename, extra);
24
25
  }
25
26
  else {
26
- throw new Error("CATCH, unknown class " + className);
27
+ const message = "CATCH, unknown class " + className;
28
+ input.issues.push((0, _syntax_input_1.syntaxIssue)(input, token, message));
29
+ return;
27
30
  }
28
31
  if (names.has(className)) {
29
- throw new Error("Duplicate class name in CATCH: " + className);
32
+ const message = "Duplicate class name in CATCH: " + className;
33
+ input.issues.push((0, _syntax_input_1.syntaxIssue)(input, node.getFirstToken(), message));
34
+ return;
30
35
  }
31
36
  names.add(className);
32
37
  }
@@ -34,26 +39,26 @@ class Catch {
34
39
  const firstClassName = (_a = node.findDirectExpression(Expressions.ClassName)) === null || _a === void 0 ? void 0 : _a.getFirstToken().getStr();
35
40
  if (target === null || target === void 0 ? void 0 : target.findDirectExpression(Expressions.InlineData)) {
36
41
  const token = (_b = target.findFirstExpression(Expressions.TargetField)) === null || _b === void 0 ? void 0 : _b.getFirstToken();
37
- const found = scope.existsObject(firstClassName);
42
+ const found = input.scope.existsObject(firstClassName);
38
43
  if (token && firstClassName && (found === null || found === void 0 ? void 0 : found.id)) {
39
- const identifier = new _typed_identifier_1.TypedIdentifier(token, filename, new basic_1.ObjectReferenceType(found.id), ["inline" /* IdentifierMeta.InlineDefinition */]);
40
- scope.addIdentifier(identifier);
41
- scope.addReference(token, identifier, _reference_1.ReferenceType.DataWriteReference, filename);
44
+ const identifier = new _typed_identifier_1.TypedIdentifier(token, input.filename, new basic_1.ObjectReferenceType(found.id), ["inline" /* IdentifierMeta.InlineDefinition */]);
45
+ input.scope.addIdentifier(identifier);
46
+ input.scope.addReference(token, identifier, _reference_1.ReferenceType.DataWriteReference, input.filename);
42
47
  }
43
- else if (token && scope.getDDIC().inErrorNamespace(firstClassName) === false) {
44
- const identifier = new _typed_identifier_1.TypedIdentifier(token, filename, new basic_1.VoidType(firstClassName), ["inline" /* IdentifierMeta.InlineDefinition */]);
45
- scope.addIdentifier(identifier);
46
- scope.addReference(token, identifier, _reference_1.ReferenceType.DataWriteReference, filename);
48
+ else if (token && input.scope.getDDIC().inErrorNamespace(firstClassName) === false) {
49
+ const identifier = new _typed_identifier_1.TypedIdentifier(token, input.filename, new basic_1.VoidType(firstClassName), ["inline" /* IdentifierMeta.InlineDefinition */]);
50
+ input.scope.addIdentifier(identifier);
51
+ input.scope.addReference(token, identifier, _reference_1.ReferenceType.DataWriteReference, input.filename);
47
52
  }
48
53
  else if (token) {
49
54
  const message = "Catch, could not determine type for \"" + token.getStr() + "\"";
50
- const identifier = new _typed_identifier_1.TypedIdentifier(token, filename, new unknown_type_1.UnknownType(message), ["inline" /* IdentifierMeta.InlineDefinition */]);
51
- scope.addIdentifier(identifier);
52
- scope.addReference(token, identifier, _reference_1.ReferenceType.DataWriteReference, filename);
55
+ const identifier = new _typed_identifier_1.TypedIdentifier(token, input.filename, new unknown_type_1.UnknownType(message), ["inline" /* IdentifierMeta.InlineDefinition */]);
56
+ input.scope.addIdentifier(identifier);
57
+ input.scope.addReference(token, identifier, _reference_1.ReferenceType.DataWriteReference, input.filename);
53
58
  }
54
59
  }
55
60
  else if (target) {
56
- new target_1.Target().runSyntax(target, scope, filename);
61
+ new target_1.Target().runSyntax(target, input);
57
62
  }
58
63
  }
59
64
  }
@@ -4,9 +4,9 @@ exports.Check = void 0;
4
4
  const Expressions = require("../../2_statements/expressions");
5
5
  const cond_1 = require("../expressions/cond");
6
6
  class Check {
7
- runSyntax(node, scope, filename) {
7
+ runSyntax(node, input) {
8
8
  for (const s of node.findDirectExpressions(Expressions.Cond)) {
9
- new cond_1.Cond().runSyntax(s, scope, filename);
9
+ new cond_1.Cond().runSyntax(s, input);
10
10
  }
11
11
  }
12
12
  }
@@ -5,24 +5,28 @@ const Expressions = require("../../2_statements/expressions");
5
5
  const _typed_identifier_1 = require("../../types/_typed_identifier");
6
6
  const data_definition_1 = require("../expressions/data_definition");
7
7
  const unknown_type_1 = require("../../types/basic/unknown_type");
8
+ const _syntax_input_1 = require("../_syntax_input");
9
+ const basic_1 = require("../../types/basic");
8
10
  class ClassData {
9
- runSyntax(node, scope, filename) {
11
+ runSyntax(node, input) {
10
12
  const dd = node.findFirstExpression(Expressions.DataDefinition);
11
13
  if (dd) {
12
- const found = new data_definition_1.DataDefinition().runSyntax(dd, scope, filename);
14
+ const found = new data_definition_1.DataDefinition().runSyntax(dd, input);
13
15
  if (found === undefined) {
14
16
  return undefined;
15
17
  }
16
18
  if ((found === null || found === void 0 ? void 0 : found.getType().isGeneric()) === true
17
19
  && (found === null || found === void 0 ? void 0 : found.getType().containsVoid()) === false) {
18
- throw new Error("DATA definition cannot be generic, " + found.getName());
20
+ const message = "DATA definition cannot be generic, " + found.getName();
21
+ input.issues.push((0, _syntax_input_1.syntaxIssue)(input, node.getFirstToken(), message));
22
+ return new _typed_identifier_1.TypedIdentifier(found.getToken(), input.filename, new basic_1.VoidType(_syntax_input_1.CheckSyntaxKey));
19
23
  }
20
24
  const meta = [...found.getMeta(), "static" /* IdentifierMeta.Static */];
21
- return new _typed_identifier_1.TypedIdentifier(found.getToken(), filename, found.getType(), meta, found.getValue());
25
+ return new _typed_identifier_1.TypedIdentifier(found.getToken(), input.filename, found.getType(), meta, found.getValue());
22
26
  }
23
27
  const fallback = node.findFirstExpression(Expressions.NamespaceSimpleName);
24
28
  if (fallback) {
25
- return new _typed_identifier_1.TypedIdentifier(fallback.getFirstToken(), filename, new unknown_type_1.UnknownType("class data, fallback"));
29
+ return new _typed_identifier_1.TypedIdentifier(fallback.getFirstToken(), input.filename, new unknown_type_1.UnknownType("class data, fallback"));
26
30
  }
27
31
  return undefined;
28
32
  }
@@ -3,10 +3,10 @@ Object.defineProperty(exports, "__esModule", { value: true });
3
3
  exports.ClassDeferred = void 0;
4
4
  const Expressions = require("../../2_statements/expressions");
5
5
  class ClassDeferred {
6
- runSyntax(node, scope, _filename) {
6
+ runSyntax(node, input) {
7
7
  var _a;
8
8
  const name = (_a = node.findFirstExpression(Expressions.ClassName)) === null || _a === void 0 ? void 0 : _a.getFirstToken();
9
- scope.addDeferred(name, "CLAS");
9
+ input.scope.addDeferred(name, "CLAS");
10
10
  }
11
11
  }
12
12
  exports.ClassDeferred = ClassDeferred;
@@ -8,33 +8,36 @@ const _typed_identifier_1 = require("../../types/_typed_identifier");
8
8
  const position_1 = require("../../../position");
9
9
  const _builtin_1 = require("../_builtin");
10
10
  const _scope_type_1 = require("../_scope_type");
11
+ const _syntax_input_1 = require("../_syntax_input");
11
12
  class ClassImplementation {
12
- runSyntax(node, scope, filename) {
13
- const helper = new _object_oriented_1.ObjectOriented(scope);
13
+ runSyntax(node, input) {
14
+ const helper = new _object_oriented_1.ObjectOriented(input.scope);
14
15
  const className = helper.findClassName(node);
15
- scope.push(_scope_type_1.ScopeType.ClassImplementation, className, node.getFirstToken().getStart(), filename);
16
- const classDefinition = scope.findClassDefinition(className);
16
+ input.scope.push(_scope_type_1.ScopeType.ClassImplementation, className, node.getFirstToken().getStart(), input.filename);
17
+ const classDefinition = input.scope.findClassDefinition(className);
17
18
  if (classDefinition === undefined) {
18
- throw new Error("Class definition for \"" + className + "\" not found");
19
+ const message = "Class definition for \"" + className + "\" not found";
20
+ input.issues.push((0, _syntax_input_1.syntaxIssue)(input, node.getFirstToken(), message));
21
+ return;
19
22
  }
20
23
  for (const t of classDefinition.getTypeDefinitions().getAll()) {
21
- scope.addType(t.type);
24
+ input.scope.addType(t.type);
22
25
  }
23
- const sup = scope.findClassDefinition(classDefinition.getSuperClass());
26
+ const sup = input.scope.findClassDefinition(classDefinition.getSuperClass());
24
27
  if (sup) {
25
- scope.addIdentifier(new _typed_identifier_1.TypedIdentifier(new tokens_1.Identifier(new position_1.Position(1, 1), "super"), _builtin_1.BuiltIn.filename, new basic_1.ObjectReferenceType(sup)));
28
+ input.scope.addIdentifier(new _typed_identifier_1.TypedIdentifier(new tokens_1.Identifier(new position_1.Position(1, 1), "super"), _builtin_1.BuiltIn.filename, new basic_1.ObjectReferenceType(sup)));
26
29
  }
27
30
  else {
28
31
  // todo: instead of the void type, do proper typing, ie. only empty constructor method
29
- scope.addIdentifier(new _typed_identifier_1.TypedIdentifier(new tokens_1.Identifier(new position_1.Position(1, 1), "super"), _builtin_1.BuiltIn.filename, new basic_1.VoidType("noSuper")));
32
+ input.scope.addIdentifier(new _typed_identifier_1.TypedIdentifier(new tokens_1.Identifier(new position_1.Position(1, 1), "super"), _builtin_1.BuiltIn.filename, new basic_1.VoidType("noSuper")));
30
33
  }
31
- scope.addIdentifier(new _typed_identifier_1.TypedIdentifier(new tokens_1.Identifier(new position_1.Position(1, 1), "me"), _builtin_1.BuiltIn.filename, new basic_1.ObjectReferenceType(classDefinition)));
34
+ input.scope.addIdentifier(new _typed_identifier_1.TypedIdentifier(new tokens_1.Identifier(new position_1.Position(1, 1), "me"), _builtin_1.BuiltIn.filename, new basic_1.ObjectReferenceType(classDefinition)));
32
35
  helper.addAliasedAttributes(classDefinition); // todo, this is not correct, take care of instance vs static
33
36
  const classAttributes = classDefinition.getAttributes();
34
- scope.addList(classAttributes.getConstants());
35
- scope.addList(classAttributes.getStatic());
37
+ input.scope.addList(classAttributes.getConstants());
38
+ input.scope.addList(classAttributes.getStatic());
36
39
  for (const i of classAttributes.getInstance()) {
37
- scope.addExtraLikeType(i);
40
+ input.scope.addExtraLikeType(i);
38
41
  }
39
42
  helper.fromSuperClassesAndInterfaces(classDefinition);
40
43
  }
@@ -3,31 +3,38 @@ Object.defineProperty(exports, "__esModule", { value: true });
3
3
  exports.ClassLocalFriends = void 0;
4
4
  const Expressions = require("../../2_statements/expressions");
5
5
  const _reference_1 = require("../_reference");
6
+ const _syntax_input_1 = require("../_syntax_input");
6
7
  class ClassLocalFriends {
7
- runSyntax(node, scope, filename) {
8
+ runSyntax(node, input) {
8
9
  const classNames = node.findAllExpressions(Expressions.ClassName);
9
10
  const found = classNames[0];
10
11
  if (found) {
11
12
  const token = found.getFirstToken();
12
13
  const name = token.getStr();
13
- if (scope.getParentObj().getType() === "CLAS"
14
- && name.toUpperCase() !== scope.getParentObj().getName().toUpperCase()) {
15
- throw new Error(`Befriending must be ` + scope.getParentObj().getName().toUpperCase());
14
+ if (input.scope.getParentObj().getType() === "CLAS"
15
+ && name.toUpperCase() !== input.scope.getParentObj().getName().toUpperCase()) {
16
+ const message = `Befriending must be ` + input.scope.getParentObj().getName().toUpperCase();
17
+ input.issues.push((0, _syntax_input_1.syntaxIssue)(input, node.getFirstToken(), message));
18
+ return;
16
19
  }
17
- const def = scope.findClassDefinition(name);
20
+ const def = input.scope.findClassDefinition(name);
18
21
  if (def) {
19
- scope.addReference(token, def, _reference_1.ReferenceType.ObjectOrientedReference, filename);
22
+ input.scope.addReference(token, def, _reference_1.ReferenceType.ObjectOrientedReference, input.filename);
20
23
  }
21
24
  else {
22
- throw new Error(`Class ${name.toUpperCase()} not found`);
25
+ const message = `Class ${name.toUpperCase()} not found`;
26
+ input.issues.push((0, _syntax_input_1.syntaxIssue)(input, node.getFirstToken(), message));
27
+ return;
23
28
  }
24
29
  }
25
30
  for (let i = 1; i < classNames.length; i++) {
26
31
  const className = classNames[i].concatTokens();
27
32
  // make sure to check also DEFINITION DEFERRED
28
- const found = scope.existsObject(className);
33
+ const found = input.scope.existsObject(className);
29
34
  if (found === undefined) {
30
- throw new Error(`Class ${className.toUpperCase()} not found`);
35
+ const message = `Class ${className.toUpperCase()} not found`;
36
+ input.issues.push((0, _syntax_input_1.syntaxIssue)(input, node.getFirstToken(), message));
37
+ return;
31
38
  }
32
39
  }
33
40
  }
@@ -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 Clear {
8
- runSyntax(node, scope, filename) {
8
+ runSyntax(node, input) {
9
9
  for (const t of node.findDirectExpressions(Expressions.Target)) {
10
- new target_1.Target().runSyntax(t, scope, filename);
10
+ new target_1.Target().runSyntax(t, input);
11
11
  }
12
12
  for (const s of node.findDirectExpressions(Expressions.Source)) {
13
- new source_1.Source().runSyntax(s, scope, filename);
13
+ new source_1.Source().runSyntax(s, input);
14
14
  }
15
15
  }
16
16
  }
@@ -4,9 +4,9 @@ exports.CloseDataset = void 0;
4
4
  const Expressions = require("../../2_statements/expressions");
5
5
  const source_1 = require("../expressions/source");
6
6
  class CloseDataset {
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,18 +6,18 @@ const source_1 = require("../expressions/source");
6
6
  const fstarget_1 = require("../expressions/fstarget");
7
7
  const target_1 = require("../expressions/target");
8
8
  class Collect {
9
- runSyntax(node, scope, filename) {
9
+ runSyntax(node, input) {
10
10
  const source = node.findDirectExpression(Expressions.Source);
11
11
  if (source) {
12
- new source_1.Source().runSyntax(source, scope, filename);
12
+ new source_1.Source().runSyntax(source, input);
13
13
  }
14
14
  const target = node.findDirectExpression(Expressions.Target);
15
15
  if (target) {
16
- new target_1.Target().runSyntax(target, scope, filename);
16
+ new target_1.Target().runSyntax(target, input);
17
17
  }
18
18
  const fs = node.findDirectExpression(Expressions.FSTarget);
19
19
  if (fs) {
20
- new fstarget_1.FSTarget().runSyntax(fs, scope, filename, undefined);
20
+ new fstarget_1.FSTarget().runSyntax(fs, input, undefined);
21
21
  }
22
22
  }
23
23
  }
@@ -7,17 +7,17 @@ const target_1 = require("../expressions/target");
7
7
  const inline_data_1 = require("../expressions/inline_data");
8
8
  const basic_1 = require("../../types/basic");
9
9
  class CommitEntities {
10
- runSyntax(node, scope, filename) {
10
+ runSyntax(node, input) {
11
11
  for (const s of node.findDirectExpressions(Expressions.Source)) {
12
- new source_1.Source().runSyntax(s, scope, filename);
12
+ new source_1.Source().runSyntax(s, input);
13
13
  }
14
14
  for (const t of node.findDirectExpressions(Expressions.Target)) {
15
15
  const inline = t === null || t === void 0 ? void 0 : t.findDirectExpression(Expressions.InlineData);
16
16
  if (inline) {
17
- new inline_data_1.InlineData().runSyntax(inline, scope, filename, new basic_1.VoidType("CommitEntities"));
17
+ new inline_data_1.InlineData().runSyntax(inline, input, new basic_1.VoidType("CommitEntities"));
18
18
  }
19
19
  else {
20
- new target_1.Target().runSyntax(t, scope, filename);
20
+ new target_1.Target().runSyntax(t, input);
21
21
  }
22
22
  }
23
23
  }
@@ -7,40 +7,47 @@ const target_1 = require("../expressions/target");
7
7
  const basic_1 = require("../../types/basic");
8
8
  const inline_data_1 = require("../expressions/inline_data");
9
9
  const _type_utils_1 = require("../_type_utils");
10
+ const _syntax_input_1 = require("../_syntax_input");
10
11
  class Concatenate {
11
- runSyntax(node, scope, filename) {
12
+ runSyntax(node, input) {
12
13
  const byteMode = node.findDirectTokenByText("BYTE") !== undefined;
13
14
  const linesMode = node.findDirectTokenByText("LINES") !== undefined;
14
15
  const target = node.findFirstExpression(Expressions.Target);
15
16
  const inline = target === null || target === void 0 ? void 0 : target.findDirectExpression(Expressions.InlineData);
16
17
  if (inline) {
17
18
  if (byteMode) {
18
- new inline_data_1.InlineData().runSyntax(inline, scope, filename, new basic_1.XStringType());
19
+ new inline_data_1.InlineData().runSyntax(inline, input, new basic_1.XStringType());
19
20
  }
20
21
  else {
21
- new inline_data_1.InlineData().runSyntax(inline, scope, filename, basic_1.StringType.get());
22
+ new inline_data_1.InlineData().runSyntax(inline, input, basic_1.StringType.get());
22
23
  }
23
24
  }
24
25
  else if (target) {
25
- const type = new target_1.Target().runSyntax(target, scope, filename);
26
- const compatible = byteMode ? new _type_utils_1.TypeUtils(scope).isHexLike(type) : new _type_utils_1.TypeUtils(scope).isCharLikeStrict(type);
26
+ const type = new target_1.Target().runSyntax(target, input);
27
+ const compatible = byteMode ? new _type_utils_1.TypeUtils(input.scope).isHexLike(type) : new _type_utils_1.TypeUtils(input.scope).isCharLikeStrict(type);
27
28
  if (compatible === false) {
28
- throw new Error("Target type not compatible");
29
+ const message = "Target type not compatible";
30
+ input.issues.push((0, _syntax_input_1.syntaxIssue)(input, node.getFirstToken(), message));
31
+ return;
29
32
  }
30
33
  }
31
34
  if (linesMode) {
32
35
  for (const s of node.findDirectExpressions(Expressions.Source)) {
33
- const type = new source_1.Source().runSyntax(s, scope, filename);
36
+ const type = new source_1.Source().runSyntax(s, input);
34
37
  if (!(type instanceof basic_1.UnknownType) && !(type instanceof basic_1.VoidType) && !(type instanceof basic_1.TableType)) {
35
- throw new Error("Source must be an internal table");
38
+ const message = "Source must be an internal table";
39
+ input.issues.push((0, _syntax_input_1.syntaxIssue)(input, node.getFirstToken(), message));
40
+ return;
36
41
  }
37
42
  }
38
43
  }
39
44
  for (const s of node.findDirectExpressions(Expressions.SimpleSource3)) {
40
- const type = new source_1.Source().runSyntax(s, scope, filename);
41
- const compatible = byteMode ? new _type_utils_1.TypeUtils(scope).isHexLike(type) : new _type_utils_1.TypeUtils(scope).isCharLikeStrict(type);
45
+ const type = new source_1.Source().runSyntax(s, input);
46
+ const compatible = byteMode ? new _type_utils_1.TypeUtils(input.scope).isHexLike(type) : new _type_utils_1.TypeUtils(input.scope).isCharLikeStrict(type);
42
47
  if (compatible === false) {
43
- throw new Error("Source type not compatible");
48
+ const message = "Source type not compatible";
49
+ input.issues.push((0, _syntax_input_1.syntaxIssue)(input, node.getFirstToken(), message));
50
+ return;
44
51
  }
45
52
  }
46
53
  }
@@ -4,9 +4,9 @@ exports.Condense = void 0;
4
4
  const Expressions = require("../../2_statements/expressions");
5
5
  const target_1 = require("../expressions/target");
6
6
  class Condense {
7
- runSyntax(node, scope, filename) {
7
+ runSyntax(node, input) {
8
8
  for (const t of node.findDirectExpressions(Expressions.Target)) {
9
- new target_1.Target().runSyntax(t, scope, filename);
9
+ new target_1.Target().runSyntax(t, input);
10
10
  }
11
11
  }
12
12
  }
@@ -5,20 +5,21 @@ const Expressions = require("../../2_statements/expressions");
5
5
  const basic_types_1 = require("../basic_types");
6
6
  const _typed_identifier_1 = require("../../types/_typed_identifier");
7
7
  const basic_1 = require("../../types/basic");
8
+ const assert_error_1 = require("../assert_error");
8
9
  class Constant {
9
- runSyntax(node, scope, filename) {
10
- const basic = new basic_types_1.BasicTypes(filename, scope);
10
+ runSyntax(node, input) {
11
+ const basic = new basic_types_1.BasicTypes(input);
11
12
  const found = basic.simpleType(node);
12
13
  if (found) {
13
14
  const val = basic.findValue(node);
14
15
  const meta = ["read_only" /* IdentifierMeta.ReadOnly */, "static" /* IdentifierMeta.Static */];
15
- return new _typed_identifier_1.TypedIdentifier(found.getToken(), filename, found.getType(), meta, val);
16
+ return new _typed_identifier_1.TypedIdentifier(found.getToken(), input.filename, found.getType(), meta, val);
16
17
  }
17
18
  const fallback = node.findFirstExpression(Expressions.DefinitionName);
18
19
  if (fallback) {
19
- return new _typed_identifier_1.TypedIdentifier(fallback.getFirstToken(), filename, new basic_1.UnknownType("constant, fallback"));
20
+ return new _typed_identifier_1.TypedIdentifier(fallback.getFirstToken(), input.filename, new basic_1.UnknownType("constant, fallback"));
20
21
  }
21
- throw new Error("Statement Constant: unexpected structure");
22
+ throw new assert_error_1.AssertError("Statement Constant: unexpected structure");
22
23
  }
23
24
  }
24
25
  exports.Constant = Constant;
@@ -5,13 +5,13 @@ 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
  class Controls {
8
- runSyntax(node, scope, filename) {
8
+ runSyntax(node, input) {
9
9
  const name = node.findDirectExpression(Expressions.NamespaceSimpleName);
10
10
  const token = name === null || name === void 0 ? void 0 : name.getFirstToken();
11
11
  if (node.findDirectTokenByText("TABSTRIP") && token) {
12
12
  const type = new basic_1.StructureType([{ name: "ACTIVETAB", type: new basic_1.CharacterType(132) }]);
13
- const id = new _typed_identifier_1.TypedIdentifier(token, filename, type);
14
- scope.addIdentifier(id);
13
+ const id = new _typed_identifier_1.TypedIdentifier(token, input.filename, type);
14
+ input.scope.addIdentifier(id);
15
15
  }
16
16
  if (node.findDirectTokenByText("TABLEVIEW") && token) {
17
17
  const cols = new basic_1.StructureType([
@@ -35,8 +35,8 @@ class Controls {
35
35
  { name: "COLS", type: new basic_1.TableType(cols, { withHeader: false, keyType: basic_1.TableKeyType.default }) },
36
36
  { name: "INVISIBLE", type: new basic_1.CharacterType(1) },
37
37
  ]);
38
- const id = new _typed_identifier_1.TypedIdentifier(token, filename, type);
39
- scope.addIdentifier(id);
38
+ const id = new _typed_identifier_1.TypedIdentifier(token, input.filename, type);
39
+ input.scope.addIdentifier(id);
40
40
  }
41
41
  }
42
42
  }
@@ -7,39 +7,39 @@ const basic_1 = require("../../types/basic");
7
7
  const source_1 = require("../expressions/source");
8
8
  const target_1 = require("../expressions/target");
9
9
  class Convert {
10
- runSyntax(node, scope, filename) {
10
+ runSyntax(node, input) {
11
11
  // todo, the source must be of a specific type
12
12
  for (const s of node.findDirectExpressions(Expressions.Source)) {
13
- new source_1.Source().runSyntax(s, scope, filename);
13
+ new source_1.Source().runSyntax(s, input);
14
14
  }
15
15
  const timeTarget = node.findExpressionAfterToken("TIME");
16
16
  if ((timeTarget === null || timeTarget === void 0 ? void 0 : timeTarget.get()) instanceof Expressions.Target) {
17
17
  const inline = timeTarget === null || timeTarget === void 0 ? void 0 : timeTarget.findDirectExpression(Expressions.InlineData);
18
18
  if (inline) {
19
- new inline_data_1.InlineData().runSyntax(inline, scope, filename, new basic_1.TimeType());
19
+ new inline_data_1.InlineData().runSyntax(inline, input, new basic_1.TimeType());
20
20
  }
21
21
  else {
22
- new target_1.Target().runSyntax(timeTarget, scope, filename);
22
+ new target_1.Target().runSyntax(timeTarget, input);
23
23
  }
24
24
  }
25
25
  const dateTarget = node.findExpressionAfterToken("DATE");
26
26
  if ((dateTarget === null || dateTarget === void 0 ? void 0 : dateTarget.get()) instanceof Expressions.Target) {
27
27
  const inline = dateTarget === null || dateTarget === void 0 ? void 0 : dateTarget.findDirectExpression(Expressions.InlineData);
28
28
  if (inline) {
29
- new inline_data_1.InlineData().runSyntax(inline, scope, filename, new basic_1.DateType());
29
+ new inline_data_1.InlineData().runSyntax(inline, input, new basic_1.DateType());
30
30
  }
31
31
  else {
32
- new target_1.Target().runSyntax(dateTarget, scope, filename);
32
+ new target_1.Target().runSyntax(dateTarget, input);
33
33
  }
34
34
  }
35
35
  const stampTarget = node.findExpressionAfterToken("STAMP");
36
36
  if ((stampTarget === null || stampTarget === void 0 ? void 0 : stampTarget.get()) instanceof Expressions.Target) {
37
37
  const inline = stampTarget === null || stampTarget === void 0 ? void 0 : stampTarget.findDirectExpression(Expressions.InlineData);
38
38
  if (inline) {
39
- new inline_data_1.InlineData().runSyntax(inline, scope, filename, new basic_1.PackedType(8, 4));
39
+ new inline_data_1.InlineData().runSyntax(inline, input, new basic_1.PackedType(8, 4));
40
40
  }
41
41
  else {
42
- new target_1.Target().runSyntax(stampTarget, scope, filename);
42
+ new target_1.Target().runSyntax(stampTarget, input);
43
43
  }
44
44
  }
45
45
  }
@@ -10,33 +10,33 @@ const basic_1 = require("../../types/basic");
10
10
  const _typed_identifier_1 = require("../../types/_typed_identifier");
11
11
  const _reference_1 = require("../_reference");
12
12
  class CreateData {
13
- runSyntax(node, scope, filename) {
13
+ runSyntax(node, input) {
14
14
  for (const s of node.findDirectExpressions(Expressions.Source)) {
15
- new source_1.Source().runSyntax(s, scope, filename);
15
+ new source_1.Source().runSyntax(s, input);
16
16
  }
17
17
  for (const t of node.findDirectExpressions(Expressions.Target)) {
18
- new target_1.Target().runSyntax(t, scope, filename);
18
+ new target_1.Target().runSyntax(t, input);
19
19
  }
20
20
  for (const t of node.findDirectExpressions(Expressions.Dynamic)) {
21
- new dynamic_1.Dynamic().runSyntax(t, scope, filename);
21
+ new dynamic_1.Dynamic().runSyntax(t, input);
22
22
  }
23
23
  const type = node.findDirectExpression(Expressions.TypeName);
24
24
  if (type) {
25
- const found = new basic_types_1.BasicTypes(filename, scope).resolveTypeName(type);
25
+ const found = new basic_types_1.BasicTypes(input).resolveTypeName(type);
26
26
  if (found instanceof basic_1.UnknownType) {
27
27
  if (node.concatTokens().toUpperCase().includes(" REF TO ")) {
28
- const def = scope.findObjectDefinition(type.concatTokens());
28
+ const def = input.scope.findObjectDefinition(type.concatTokens());
29
29
  if (def) {
30
- scope.addReference(type.getFirstToken(), def, _reference_1.ReferenceType.TypeReference, filename);
30
+ input.scope.addReference(type.getFirstToken(), def, _reference_1.ReferenceType.TypeReference, input.filename);
31
31
  }
32
32
  else {
33
- const identifier = new _typed_identifier_1.TypedIdentifier(type.getFirstToken(), filename, found);
34
- scope.addReference(type.getFirstToken(), identifier, _reference_1.ReferenceType.TypeReference, filename);
33
+ const identifier = new _typed_identifier_1.TypedIdentifier(type.getFirstToken(), input.filename, found);
34
+ input.scope.addReference(type.getFirstToken(), identifier, _reference_1.ReferenceType.TypeReference, input.filename);
35
35
  }
36
36
  }
37
37
  else {
38
- const identifier = new _typed_identifier_1.TypedIdentifier(type.getFirstToken(), filename, found);
39
- scope.addReference(type.getFirstToken(), identifier, _reference_1.ReferenceType.TypeReference, filename);
38
+ const identifier = new _typed_identifier_1.TypedIdentifier(type.getFirstToken(), input.filename, found);
39
+ input.scope.addReference(type.getFirstToken(), identifier, _reference_1.ReferenceType.TypeReference, input.filename);
40
40
  }
41
41
  }
42
42
  }