@abaplint/transpiler-cli 2.10.9 → 2.10.10

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 (2) hide show
  1. package/build/bundle.js +341 -119
  2. package/package.json +5 -5
package/build/bundle.js CHANGED
@@ -4781,6 +4781,7 @@ __exportStar(__webpack_require__(/*! ./kernel_id */ "./node_modules/@abaplint/co
4781
4781
  __exportStar(__webpack_require__(/*! ./language */ "./node_modules/@abaplint/core/build/src/abap/2_statements/expressions/language.js"), exports);
4782
4782
  __exportStar(__webpack_require__(/*! ./length */ "./node_modules/@abaplint/core/build/src/abap/2_statements/expressions/length.js"), exports);
4783
4783
  __exportStar(__webpack_require__(/*! ./let */ "./node_modules/@abaplint/core/build/src/abap/2_statements/expressions/let.js"), exports);
4784
+ __exportStar(__webpack_require__(/*! ./lob_handle */ "./node_modules/@abaplint/core/build/src/abap/2_statements/expressions/lob_handle.js"), exports);
4784
4785
  __exportStar(__webpack_require__(/*! ./loop_group_by_component */ "./node_modules/@abaplint/core/build/src/abap/2_statements/expressions/loop_group_by_component.js"), exports);
4785
4786
  __exportStar(__webpack_require__(/*! ./loop_group_by_target */ "./node_modules/@abaplint/core/build/src/abap/2_statements/expressions/loop_group_by_target.js"), exports);
4786
4787
  __exportStar(__webpack_require__(/*! ./loop_group_by */ "./node_modules/@abaplint/core/build/src/abap/2_statements/expressions/loop_group_by.js"), exports);
@@ -4874,16 +4875,15 @@ __exportStar(__webpack_require__(/*! ./sql_into_table */ "./node_modules/@abapli
4874
4875
  __exportStar(__webpack_require__(/*! ./sql_join */ "./node_modules/@abaplint/core/build/src/abap/2_statements/expressions/sql_join.js"), exports);
4875
4876
  __exportStar(__webpack_require__(/*! ./sql_order_by */ "./node_modules/@abaplint/core/build/src/abap/2_statements/expressions/sql_order_by.js"), exports);
4876
4877
  __exportStar(__webpack_require__(/*! ./sql_path */ "./node_modules/@abaplint/core/build/src/abap/2_statements/expressions/sql_path.js"), exports);
4878
+ __exportStar(__webpack_require__(/*! ./sql_source_no_space */ "./node_modules/@abaplint/core/build/src/abap/2_statements/expressions/sql_source_no_space.js"), exports);
4877
4879
  __exportStar(__webpack_require__(/*! ./sql_source_simple */ "./node_modules/@abaplint/core/build/src/abap/2_statements/expressions/sql_source_simple.js"), exports);
4878
4880
  __exportStar(__webpack_require__(/*! ./sql_source */ "./node_modules/@abaplint/core/build/src/abap/2_statements/expressions/sql_source.js"), exports);
4879
- __exportStar(__webpack_require__(/*! ./sql_source_no_space */ "./node_modules/@abaplint/core/build/src/abap/2_statements/expressions/sql_source_no_space.js"), exports);
4880
4881
  __exportStar(__webpack_require__(/*! ./sql_target */ "./node_modules/@abaplint/core/build/src/abap/2_statements/expressions/sql_target.js"), exports);
4881
4882
  __exportStar(__webpack_require__(/*! ./sql_up_to */ "./node_modules/@abaplint/core/build/src/abap/2_statements/expressions/sql_up_to.js"), exports);
4882
4883
  __exportStar(__webpack_require__(/*! ./string_template_formatting */ "./node_modules/@abaplint/core/build/src/abap/2_statements/expressions/string_template_formatting.js"), exports);
4883
4884
  __exportStar(__webpack_require__(/*! ./string_template_source */ "./node_modules/@abaplint/core/build/src/abap/2_statements/expressions/string_template_source.js"), exports);
4884
4885
  __exportStar(__webpack_require__(/*! ./string_template */ "./node_modules/@abaplint/core/build/src/abap/2_statements/expressions/string_template.js"), exports);
4885
4886
  __exportStar(__webpack_require__(/*! ./super_class_name */ "./node_modules/@abaplint/core/build/src/abap/2_statements/expressions/super_class_name.js"), exports);
4886
- __exportStar(__webpack_require__(/*! ./type_structure */ "./node_modules/@abaplint/core/build/src/abap/2_statements/expressions/type_structure.js"), exports);
4887
4887
  __exportStar(__webpack_require__(/*! ./switch_body */ "./node_modules/@abaplint/core/build/src/abap/2_statements/expressions/switch_body.js"), exports);
4888
4888
  __exportStar(__webpack_require__(/*! ./table_body */ "./node_modules/@abaplint/core/build/src/abap/2_statements/expressions/table_body.js"), exports);
4889
4889
  __exportStar(__webpack_require__(/*! ./table_expression */ "./node_modules/@abaplint/core/build/src/abap/2_statements/expressions/table_expression.js"), exports);
@@ -4899,6 +4899,7 @@ __exportStar(__webpack_require__(/*! ./transporting_fields */ "./node_modules/@a
4899
4899
  __exportStar(__webpack_require__(/*! ./type_name_or_infer */ "./node_modules/@abaplint/core/build/src/abap/2_statements/expressions/type_name_or_infer.js"), exports);
4900
4900
  __exportStar(__webpack_require__(/*! ./type_name */ "./node_modules/@abaplint/core/build/src/abap/2_statements/expressions/type_name.js"), exports);
4901
4901
  __exportStar(__webpack_require__(/*! ./type_param */ "./node_modules/@abaplint/core/build/src/abap/2_statements/expressions/type_param.js"), exports);
4902
+ __exportStar(__webpack_require__(/*! ./type_structure */ "./node_modules/@abaplint/core/build/src/abap/2_statements/expressions/type_structure.js"), exports);
4902
4903
  __exportStar(__webpack_require__(/*! ./type_table_key */ "./node_modules/@abaplint/core/build/src/abap/2_statements/expressions/type_table_key.js"), exports);
4903
4904
  __exportStar(__webpack_require__(/*! ./type_table */ "./node_modules/@abaplint/core/build/src/abap/2_statements/expressions/type_table.js"), exports);
4904
4905
  __exportStar(__webpack_require__(/*! ./type */ "./node_modules/@abaplint/core/build/src/abap/2_statements/expressions/type.js"), exports);
@@ -5167,6 +5168,28 @@ exports.Let = Let;
5167
5168
 
5168
5169
  /***/ }),
5169
5170
 
5171
+ /***/ "./node_modules/@abaplint/core/build/src/abap/2_statements/expressions/lob_handle.js":
5172
+ /*!*******************************************************************************************!*\
5173
+ !*** ./node_modules/@abaplint/core/build/src/abap/2_statements/expressions/lob_handle.js ***!
5174
+ \*******************************************************************************************/
5175
+ /***/ ((__unused_webpack_module, exports, __webpack_require__) => {
5176
+
5177
+ "use strict";
5178
+
5179
+ Object.defineProperty(exports, "__esModule", ({ value: true }));
5180
+ exports.LOBHandle = void 0;
5181
+ const combi_1 = __webpack_require__(/*! ../combi */ "./node_modules/@abaplint/core/build/src/abap/2_statements/combi.js");
5182
+ const Expressions = __webpack_require__(/*! . */ "./node_modules/@abaplint/core/build/src/abap/2_statements/expressions/index.js");
5183
+ class LOBHandle extends combi_1.Expression {
5184
+ getRunnable() {
5185
+ return (0, combi_1.seq)("WRITER FOR COLUMNS", Expressions.Field);
5186
+ }
5187
+ }
5188
+ exports.LOBHandle = LOBHandle;
5189
+ //# sourceMappingURL=lob_handle.js.map
5190
+
5191
+ /***/ }),
5192
+
5170
5193
  /***/ "./node_modules/@abaplint/core/build/src/abap/2_statements/expressions/loop_group_by.js":
5171
5194
  /*!**********************************************************************************************!*\
5172
5195
  !*** ./node_modules/@abaplint/core/build/src/abap/2_statements/expressions/loop_group_by.js ***!
@@ -5307,7 +5330,7 @@ const combi_1 = __webpack_require__(/*! ../combi */ "./node_modules/@abaplint/co
5307
5330
  class MessageClass extends combi_1.Expression {
5308
5331
  getRunnable() {
5309
5332
  // "&1" can be used for almost anything(field names, method names etc.) in macros
5310
- return (0, combi_1.regex)(/^>?(\/\w+\/)?\w+#?@?\/?!?&?>?\$?$/);
5333
+ return (0, combi_1.regex)(/^>?[\w\/]+#?@?\/?!?&?>?\$?$/);
5311
5334
  }
5312
5335
  }
5313
5336
  exports.MessageClass = MessageClass;
@@ -8089,7 +8112,7 @@ class Type extends combi_1.Expression {
8089
8112
  getRunnable() {
8090
8113
  const typeType = (0, combi_1.seq)(_1.TypeName, (0, combi_1.optPrio)(_1.Default));
8091
8114
  const like = (0, combi_1.altPrio)((0, combi_1.seq)("LINE OF", _1.FieldChain), (0, combi_1.seq)("REF TO", _1.FieldChain), _1.FieldChain);
8092
- const type = (0, combi_1.altPrio)((0, combi_1.seq)("LINE OF", typeType), (0, combi_1.seq)("REF TO", typeType), typeType);
8115
+ const type = (0, combi_1.altPrio)((0, combi_1.seq)("LINE OF", typeType), (0, combi_1.seq)("REF TO", typeType), (0, combi_1.seq)(typeType, (0, combi_1.optPrio)(_1.LOBHandle)));
8093
8116
  const ret = (0, combi_1.altPrio)((0, combi_1.seq)("LIKE", like), (0, combi_1.seq)("TYPE", type));
8094
8117
  return ret;
8095
8118
  }
@@ -14358,7 +14381,7 @@ const version_1 = __webpack_require__(/*! ../../../version */ "./node_modules/@a
14358
14381
  class Ranges {
14359
14382
  getMatcher() {
14360
14383
  const occurs = (0, combi_1.seq)("OCCURS", expressions_1.Source);
14361
- const ret = (0, combi_1.seq)("RANGES", expressions_1.SimpleName, "FOR", expressions_1.FieldSub, (0, combi_1.opt)(occurs));
14384
+ const ret = (0, combi_1.seq)("RANGES", expressions_1.SimpleName, "FOR", expressions_1.SimpleFieldChain2, (0, combi_1.opt)(occurs));
14362
14385
  return (0, combi_1.verNot)(version_1.Version.Cloud, ret);
14363
14386
  }
14364
14387
  }
@@ -17511,7 +17534,7 @@ const protected_section_1 = __webpack_require__(/*! ./protected_section */ "./no
17511
17534
  const public_section_1 = __webpack_require__(/*! ./public_section */ "./node_modules/@abaplint/core/build/src/abap/3_structures/structures/public_section.js");
17512
17535
  class ClassDefinition {
17513
17536
  getMatcher() {
17514
- const body = (0, _combi_1.seq)((0, _combi_1.opt)((0, _combi_1.sta)(Statements.SetExtendedCheck)), (0, _combi_1.star)((0, _combi_1.sta)(Statements.TypePools)), (0, _combi_1.opt)((0, _combi_1.sub)(public_section_1.PublicSection)), (0, _combi_1.star)((0, _combi_1.sta)(Statements.Include)), (0, _combi_1.opt)((0, _combi_1.sub)(protected_section_1.ProtectedSection)), (0, _combi_1.opt)((0, _combi_1.sub)(private_section_1.PrivateSection)), (0, _combi_1.opt)((0, _combi_1.sta)(Statements.SetExtendedCheck)));
17537
+ const body = (0, _combi_1.seq)((0, _combi_1.opt)((0, _combi_1.sta)(Statements.SetExtendedCheck)), (0, _combi_1.star)((0, _combi_1.sta)(Statements.TypePools)), (0, _combi_1.opt)((0, _combi_1.sub)(public_section_1.PublicSection)), (0, _combi_1.opt)((0, _combi_1.sub)(protected_section_1.ProtectedSection)), (0, _combi_1.opt)((0, _combi_1.sub)(private_section_1.PrivateSection)), (0, _combi_1.opt)((0, _combi_1.sta)(Statements.SetExtendedCheck)));
17515
17538
  return (0, _combi_1.beginEnd)((0, _combi_1.sta)(Statements.ClassDefinition), body, (0, _combi_1.sta)(Statements.EndClass));
17516
17539
  }
17517
17540
  }
@@ -17939,7 +17962,7 @@ __exportStar(__webpack_require__(/*! ./private_section */ "./node_modules/@abapl
17939
17962
  __exportStar(__webpack_require__(/*! ./protected_section */ "./node_modules/@abaplint/core/build/src/abap/3_structures/structures/protected_section.js"), exports);
17940
17963
  __exportStar(__webpack_require__(/*! ./provide */ "./node_modules/@abaplint/core/build/src/abap/3_structures/structures/provide.js"), exports);
17941
17964
  __exportStar(__webpack_require__(/*! ./public_section */ "./node_modules/@abaplint/core/build/src/abap/3_structures/structures/public_section.js"), exports);
17942
- __exportStar(__webpack_require__(/*! ./section_section */ "./node_modules/@abaplint/core/build/src/abap/3_structures/structures/section_section.js"), exports);
17965
+ __exportStar(__webpack_require__(/*! ./section_contents */ "./node_modules/@abaplint/core/build/src/abap/3_structures/structures/section_contents.js"), exports);
17943
17966
  __exportStar(__webpack_require__(/*! ./select */ "./node_modules/@abaplint/core/build/src/abap/3_structures/structures/select.js"), exports);
17944
17967
  __exportStar(__webpack_require__(/*! ./statics */ "./node_modules/@abaplint/core/build/src/abap/3_structures/structures/statics.js"), exports);
17945
17968
  __exportStar(__webpack_require__(/*! ./test_injection */ "./node_modules/@abaplint/core/build/src/abap/3_structures/structures/test_injection.js"), exports);
@@ -17967,10 +17990,10 @@ Object.defineProperty(exports, "__esModule", ({ value: true }));
17967
17990
  exports.Interface = void 0;
17968
17991
  const Statements = __webpack_require__(/*! ../../2_statements/statements */ "./node_modules/@abaplint/core/build/src/abap/2_statements/statements/index.js");
17969
17992
  const _combi_1 = __webpack_require__(/*! ./_combi */ "./node_modules/@abaplint/core/build/src/abap/3_structures/structures/_combi.js");
17970
- const section_section_1 = __webpack_require__(/*! ./section_section */ "./node_modules/@abaplint/core/build/src/abap/3_structures/structures/section_section.js");
17993
+ const section_contents_1 = __webpack_require__(/*! ./section_contents */ "./node_modules/@abaplint/core/build/src/abap/3_structures/structures/section_contents.js");
17971
17994
  class Interface {
17972
17995
  getMatcher() {
17973
- const intf = (0, _combi_1.beginEnd)((0, _combi_1.sta)(Statements.Interface), (0, _combi_1.star)((0, _combi_1.sub)(section_section_1.SectionContents)), (0, _combi_1.sta)(Statements.EndInterface));
17996
+ const intf = (0, _combi_1.beginEnd)((0, _combi_1.sta)(Statements.Interface), (0, _combi_1.star)((0, _combi_1.sub)(section_contents_1.SectionContents)), (0, _combi_1.sta)(Statements.EndInterface));
17974
17997
  return intf;
17975
17998
  }
17976
17999
  }
@@ -18017,8 +18040,7 @@ const _combi_1 = __webpack_require__(/*! ./_combi */ "./node_modules/@abaplint/c
18017
18040
  const _1 = __webpack_require__(/*! . */ "./node_modules/@abaplint/core/build/src/abap/3_structures/structures/index.js");
18018
18041
  class Loop {
18019
18042
  getMatcher() {
18020
- const body = (0, _combi_1.alt)((0, _combi_1.sub)(_1.Body), (0, _combi_1.sub)(_1.OnChange));
18021
- return (0, _combi_1.beginEnd)((0, _combi_1.sta)(Statements.Loop), (0, _combi_1.star)(body), (0, _combi_1.sta)(Statements.EndLoop));
18043
+ return (0, _combi_1.beginEnd)((0, _combi_1.sta)(Statements.Loop), (0, _combi_1.star)((0, _combi_1.sub)(_1.Body)), (0, _combi_1.sta)(Statements.EndLoop));
18022
18044
  }
18023
18045
  }
18024
18046
  exports.Loop = Loop;
@@ -18113,7 +18135,7 @@ const _statement_1 = __webpack_require__(/*! ../../2_statements/statements/_stat
18113
18135
  class Normal {
18114
18136
  getMatcher() {
18115
18137
  // note that the sequence of alternatives here influences performance
18116
- return (0, _combi_1.alt)((0, _combi_1.sta)(Statements.Move), (0, _combi_1.sta)(Statements.Call), (0, _combi_1.sta)(Statements.Data), (0, _combi_1.sub)(Structures.If), (0, _combi_1.sta)(Statements.Clear), (0, _combi_1.sta)(Statements.FieldSymbol), (0, _combi_1.sta)(Statements.CreateObject), (0, _combi_1.sta)(Statements.CallFunction), (0, _combi_1.sta)(_statement_1.MacroCall), (0, _combi_1.sub)(Structures.LoopAtScreen), (0, _combi_1.sub)(Structures.Loop), (0, _combi_1.sta)(Statements.Append), (0, _combi_1.sub)(Structures.Try), (0, _combi_1.sta)(Statements.ReadTable), (0, _combi_1.sta)(Statements.Assert), (0, _combi_1.sta)(Statements.Return), (0, _combi_1.sta)(Statements.Select), (0, _combi_1.sta)(Statements.Assign), (0, _combi_1.sta)(Statements.InsertInternal), (0, _combi_1.sta)(Statements.DeleteInternal), (0, _combi_1.sta)(Statements.Concatenate), (0, _combi_1.sub)(Structures.Case), (0, _combi_1.sub)(Structures.CaseType), (0, _combi_1.sub)(Structures.Enhancement), (0, _combi_1.sub)(Structures.EnhancementSection), (0, _combi_1.sta)(Statements.AddCorresponding), (0, _combi_1.sta)(Statements.Add), (0, _combi_1.sta)(Statements.AssignLocalCopy), (0, _combi_1.sta)(Statements.AuthorityCheck), (0, _combi_1.sta)(Statements.Back), (0, _combi_1.sta)(Statements.Break), (0, _combi_1.sta)(Statements.BreakId), (0, _combi_1.sta)(Statements.CallDatabase), (0, _combi_1.sta)(Statements.CallDialog), (0, _combi_1.sta)(Statements.CallKernel), (0, _combi_1.sta)(Statements.CallOLE), (0, _combi_1.sta)(Statements.CallScreen), (0, _combi_1.sta)(Statements.ModifyScreen), (0, _combi_1.sta)(Statements.CallSelectionScreen), (0, _combi_1.sta)(Statements.CallTransaction), (0, _combi_1.sta)(Statements.CallTransformation), (0, _combi_1.sta)(Statements.Check), (0, _combi_1.sta)(Statements.ClassDefinitionLoad), (0, _combi_1.sta)(Statements.CloseCursor), (0, _combi_1.sta)(Statements.CloseDataset), (0, _combi_1.sta)(Statements.Collect), (0, _combi_1.sta)(Statements.Commit), (0, _combi_1.sta)(Statements.Communication), (0, _combi_1.sta)(Statements.Compute), (0, _combi_1.sta)(Statements.CallBadi), (0, _combi_1.sta)(Statements.Condense), (0, _combi_1.sta)(Statements.Constant), (0, _combi_1.sta)(Statements.Contexts), (0, _combi_1.sta)(Statements.Continue), (0, _combi_1.sta)(Statements.ConvertText), (0, _combi_1.sta)(Statements.Convert), (0, _combi_1.sta)(Statements.CreateData), (0, _combi_1.sta)(Statements.CreateOLE), (0, _combi_1.sta)(Statements.DeleteCluster), (0, _combi_1.sta)(Statements.DeleteDatabase), (0, _combi_1.sta)(Statements.DeleteDataset), (0, _combi_1.sta)(Statements.DeleteDynpro), (0, _combi_1.sta)(Statements.DeleteMemory), (0, _combi_1.sta)(Statements.DeleteReport), (0, _combi_1.sta)(Statements.DeleteTextpool), (0, _combi_1.sta)(Statements.Demand), (0, _combi_1.sta)(Statements.Describe), (0, _combi_1.sta)(Statements.Detail), (0, _combi_1.sta)(Statements.Divide), (0, _combi_1.sta)(Statements.EditorCall), (0, _combi_1.sta)(Statements.EnhancementPoint), (0, _combi_1.sta)(Statements.Exit), (0, _combi_1.sta)(Statements.ExportDynpro), (0, _combi_1.sta)(Statements.Export), (0, _combi_1.sta)(Statements.Extract), (0, _combi_1.sta)(Statements.FetchNextCursor), (0, _combi_1.sta)(Statements.FieldGroup), (0, _combi_1.sta)(Statements.Fields), (0, _combi_1.sta)(Statements.Find), (0, _combi_1.sta)(Statements.Format), (0, _combi_1.sta)(Statements.FreeMemory), (0, _combi_1.sta)(Statements.FreeObject), (0, _combi_1.sta)(Statements.Free), (0, _combi_1.sta)(Statements.GenerateDynpro), (0, _combi_1.sta)(Statements.GenerateReport), (0, _combi_1.sta)(Statements.GenerateSubroutine), (0, _combi_1.sta)(Statements.GetBadi), (0, _combi_1.sta)(Statements.GetBit), (0, _combi_1.sta)(Statements.GetCursor), (0, _combi_1.sta)(Statements.GetDataset), (0, _combi_1.sta)(Statements.GetLocale), (0, _combi_1.sta)(Statements.GetParameter), (0, _combi_1.sta)(Statements.GetPFStatus), (0, _combi_1.sta)(Statements.GetProperty), (0, _combi_1.sta)(Statements.GetReference), (0, _combi_1.sta)(Statements.GetRunTime), (0, _combi_1.sta)(Statements.GetTime), (0, _combi_1.sta)(Statements.Hide), (0, _combi_1.sta)(Statements.Nodes), (0, _combi_1.sta)(Statements.ImportDynpro), (0, _combi_1.sta)(Statements.ImportNametab), (0, _combi_1.sta)(Statements.MoveCorresponding), (0, _combi_1.sta)(Statements.Import), (0, _combi_1.sta)(Statements.Infotypes), (0, _combi_1.sta)(Statements.Include), // include does not have to be at top level
18138
+ return (0, _combi_1.alt)((0, _combi_1.sta)(Statements.Move), (0, _combi_1.sta)(Statements.Call), (0, _combi_1.sta)(Statements.Data), (0, _combi_1.sub)(Structures.If), (0, _combi_1.sta)(Statements.Clear), (0, _combi_1.sta)(Statements.FieldSymbol), (0, _combi_1.sta)(Statements.CreateObject), (0, _combi_1.sta)(Statements.CallFunction), (0, _combi_1.sta)(_statement_1.MacroCall), (0, _combi_1.sub)(Structures.LoopAtScreen), (0, _combi_1.sub)(Structures.Loop), (0, _combi_1.sta)(Statements.Append), (0, _combi_1.sub)(Structures.Try), (0, _combi_1.sub)(Structures.OnChange), (0, _combi_1.sta)(Statements.ReadTable), (0, _combi_1.sta)(Statements.Assert), (0, _combi_1.sta)(Statements.Return), (0, _combi_1.sta)(Statements.Select), (0, _combi_1.sta)(Statements.Assign), (0, _combi_1.sta)(Statements.InsertInternal), (0, _combi_1.sta)(Statements.DeleteInternal), (0, _combi_1.sta)(Statements.Concatenate), (0, _combi_1.sub)(Structures.Case), (0, _combi_1.sub)(Structures.CaseType), (0, _combi_1.sub)(Structures.Enhancement), (0, _combi_1.sub)(Structures.EnhancementSection), (0, _combi_1.sta)(Statements.AddCorresponding), (0, _combi_1.sta)(Statements.Add), (0, _combi_1.sta)(Statements.AssignLocalCopy), (0, _combi_1.sta)(Statements.AuthorityCheck), (0, _combi_1.sta)(Statements.Back), (0, _combi_1.sta)(Statements.Break), (0, _combi_1.sta)(Statements.BreakId), (0, _combi_1.sta)(Statements.CallDatabase), (0, _combi_1.sta)(Statements.CallDialog), (0, _combi_1.sta)(Statements.CallKernel), (0, _combi_1.sta)(Statements.CallOLE), (0, _combi_1.sta)(Statements.CallScreen), (0, _combi_1.sta)(Statements.ModifyScreen), (0, _combi_1.sta)(Statements.CallSelectionScreen), (0, _combi_1.sta)(Statements.CallTransaction), (0, _combi_1.sta)(Statements.CallTransformation), (0, _combi_1.sta)(Statements.Check), (0, _combi_1.sta)(Statements.ClassDefinitionLoad), (0, _combi_1.sta)(Statements.CloseCursor), (0, _combi_1.sta)(Statements.CloseDataset), (0, _combi_1.sta)(Statements.Collect), (0, _combi_1.sta)(Statements.Commit), (0, _combi_1.sta)(Statements.Communication), (0, _combi_1.sta)(Statements.Compute), (0, _combi_1.sta)(Statements.CallBadi), (0, _combi_1.sta)(Statements.Condense), (0, _combi_1.sta)(Statements.Constant), (0, _combi_1.sta)(Statements.Contexts), (0, _combi_1.sta)(Statements.Continue), (0, _combi_1.sta)(Statements.ConvertText), (0, _combi_1.sta)(Statements.Convert), (0, _combi_1.sta)(Statements.CreateData), (0, _combi_1.sta)(Statements.CreateOLE), (0, _combi_1.sta)(Statements.DeleteCluster), (0, _combi_1.sta)(Statements.DeleteDatabase), (0, _combi_1.sta)(Statements.DeleteDataset), (0, _combi_1.sta)(Statements.DeleteDynpro), (0, _combi_1.sta)(Statements.DeleteMemory), (0, _combi_1.sta)(Statements.DeleteReport), (0, _combi_1.sta)(Statements.DeleteTextpool), (0, _combi_1.sta)(Statements.Demand), (0, _combi_1.sta)(Statements.Describe), (0, _combi_1.sta)(Statements.Detail), (0, _combi_1.sta)(Statements.Divide), (0, _combi_1.sta)(Statements.EditorCall), (0, _combi_1.sta)(Statements.EnhancementPoint), (0, _combi_1.sta)(Statements.Exit), (0, _combi_1.sta)(Statements.ExportDynpro), (0, _combi_1.sta)(Statements.Export), (0, _combi_1.sta)(Statements.Extract), (0, _combi_1.sta)(Statements.FetchNextCursor), (0, _combi_1.sta)(Statements.FieldGroup), (0, _combi_1.sta)(Statements.Fields), (0, _combi_1.sta)(Statements.Find), (0, _combi_1.sta)(Statements.Format), (0, _combi_1.sta)(Statements.FreeMemory), (0, _combi_1.sta)(Statements.FreeObject), (0, _combi_1.sta)(Statements.Free), (0, _combi_1.sta)(Statements.GenerateDynpro), (0, _combi_1.sta)(Statements.GenerateReport), (0, _combi_1.sta)(Statements.GenerateSubroutine), (0, _combi_1.sta)(Statements.GetBadi), (0, _combi_1.sta)(Statements.GetBit), (0, _combi_1.sta)(Statements.GetCursor), (0, _combi_1.sta)(Statements.GetDataset), (0, _combi_1.sta)(Statements.GetLocale), (0, _combi_1.sta)(Statements.GetParameter), (0, _combi_1.sta)(Statements.GetPFStatus), (0, _combi_1.sta)(Statements.GetProperty), (0, _combi_1.sta)(Statements.GetReference), (0, _combi_1.sta)(Statements.GetRunTime), (0, _combi_1.sta)(Statements.GetTime), (0, _combi_1.sta)(Statements.Hide), (0, _combi_1.sta)(Statements.Nodes), (0, _combi_1.sta)(Statements.ImportDynpro), (0, _combi_1.sta)(Statements.ImportNametab), (0, _combi_1.sta)(Statements.MoveCorresponding), (0, _combi_1.sta)(Statements.Import), (0, _combi_1.sta)(Statements.Infotypes), (0, _combi_1.sta)(Statements.Include), // include does not have to be at top level
18117
18139
  (0, _combi_1.sta)(Statements.InsertDatabase), (0, _combi_1.sta)(Statements.InsertReport), (0, _combi_1.sta)(Statements.InsertTextpool), (0, _combi_1.sta)(Statements.InsertFieldGroup), (0, _combi_1.sta)(Statements.InterfaceLoad), (0, _combi_1.sta)(Statements.Leave), (0, _combi_1.sta)(Statements.LoadReport), (0, _combi_1.sta)(Statements.Local), (0, _combi_1.sta)(Statements.With), (0, _combi_1.sta)(Statements.LogPoint), (0, _combi_1.sta)(Statements.Message), (0, _combi_1.sta)(Statements.ModifyLine), (0, _combi_1.sta)(Statements.ModifyDatabase), (0, _combi_1.sta)(Statements.ModifyInternal), (0, _combi_1.sta)(Statements.Multiply), (0, _combi_1.sta)(Statements.NewLine), (0, _combi_1.sta)(Statements.NewPage), (0, _combi_1.sta)(Statements.OpenCursor), (0, _combi_1.sta)(Statements.OpenDataset), (0, _combi_1.sta)(Statements.Overlay), (0, _combi_1.sta)(Statements.Pack), (0, _combi_1.sta)(Statements.Perform), (0, _combi_1.sta)(Statements.FormDefinition), (0, _combi_1.sta)(Statements.Position), (0, _combi_1.sta)(Statements.Put), (0, _combi_1.sta)(Statements.PrintControl), (0, _combi_1.sta)(Statements.RaiseEvent), (0, _combi_1.sta)(Statements.RaiseEntityEvent), (0, _combi_1.sta)(Statements.Raise), (0, _combi_1.sta)(Statements.Ranges), (0, _combi_1.sta)(Statements.ReadDataset), (0, _combi_1.sta)(Statements.ReadLine), (0, _combi_1.sta)(Statements.ReadReport), (0, _combi_1.sta)(Statements.ReadTextpool), (0, _combi_1.sta)(Statements.Receive), (0, _combi_1.sta)(Statements.RefreshControl), (0, _combi_1.sta)(Statements.Refresh), (0, _combi_1.sta)(Statements.Reject), (0, _combi_1.sta)(Statements.Replace), (0, _combi_1.sta)(Statements.Reserve), (0, _combi_1.sta)(Statements.Resume), (0, _combi_1.sta)(Statements.Retry), (0, _combi_1.sta)(Statements.Rollback), (0, _combi_1.sta)(Statements.Scan), (0, _combi_1.sta)(Statements.ScrollList), (0, _combi_1.sta)(Statements.Search), (0, _combi_1.sta)(Statements.SetBit), (0, _combi_1.sta)(Statements.SetBlank), (0, _combi_1.sta)(Statements.SetCountry), (0, _combi_1.sta)(Statements.SetCursor), (0, _combi_1.sta)(Statements.SetDataset), (0, _combi_1.sta)(Statements.SetExtendedCheck), (0, _combi_1.sta)(Statements.SetHandler), (0, _combi_1.sta)(Statements.SetLanguage), (0, _combi_1.sta)(Statements.SetLeft), (0, _combi_1.sta)(Statements.SetLocale), (0, _combi_1.sta)(Statements.SetMargin), (0, _combi_1.sta)(Statements.SetParameter), (0, _combi_1.sta)(Statements.SetPFStatus), (0, _combi_1.sta)(Statements.SetProperty), (0, _combi_1.sta)(Statements.SetRunTime), (0, _combi_1.sta)(Statements.SetScreen), (0, _combi_1.sta)(Statements.SetTitlebar), (0, _combi_1.sta)(Statements.SetUserCommand), (0, _combi_1.sta)(Statements.SetUpdateTask), (0, _combi_1.sta)(Statements.Shift), (0, _combi_1.sta)(Statements.Skip), (0, _combi_1.sta)(Statements.SortDataset), (0, _combi_1.sta)(Statements.Sort), (0, _combi_1.sta)(Statements.Static), (0, _combi_1.sta)(Statements.Split), (0, _combi_1.sta)(Statements.Stop), (0, _combi_1.sta)(Statements.Submit), (0, _combi_1.sta)(Statements.Summary), (0, _combi_1.sta)(Statements.SubtractCorresponding), (0, _combi_1.sta)(Statements.Subtract), (0, _combi_1.sta)(Statements.SuppressDialog), (0, _combi_1.sta)(Statements.Supply), (0, _combi_1.sta)(Statements.Sum), (0, _combi_1.sta)(Statements.SyntaxCheck), (0, _combi_1.sta)(Statements.SystemCall), (0, _combi_1.sta)(Statements.Tables), (0, _combi_1.sta)(Statements.Transfer), (0, _combi_1.sta)(Statements.Translate), (0, _combi_1.sta)(Statements.Type), (0, _combi_1.sta)(Statements.TypePools), (0, _combi_1.sta)(Statements.Uline), (0, _combi_1.sta)(Statements.Unassign), (0, _combi_1.sta)(Statements.Unpack), (0, _combi_1.sta)(Statements.UpdateDatabase), (0, _combi_1.sta)(Statements.Wait), (0, _combi_1.sta)(Statements.Window), (0, _combi_1.sta)(Statements.Write), (0, _combi_1.sta)(Statements.CommitEntities), (0, _combi_1.sta)(Statements.GetPermissions), (0, _combi_1.sta)(Statements.SetLocks), (0, _combi_1.sta)(Statements.ModifyEntities), (0, _combi_1.sta)(Statements.ReadEntities), (0, _combi_1.sta)(Statements.RollbackEntities), (0, _combi_1.sub)(Structures.Define), (0, _combi_1.sub)(Structures.TestInjection), (0, _combi_1.sub)(Structures.TestSeam), (0, _combi_1.sub)(Structures.TypeMesh), (0, _combi_1.sub)(Structures.Provide), (0, _combi_1.sub)(Structures.CatchSystemExceptions), (0, _combi_1.sub)(Structures.At), (0, _combi_1.sub)(Structures.AtFirst), (0, _combi_1.sub)(Structures.AtLast), (0, _combi_1.sub)(Structures.Constants), (0, _combi_1.sub)(Structures.Types), (0, _combi_1.sub)(Structures.Statics), (0, _combi_1.sub)(Structures.Select), (0, _combi_1.sub)(Structures.Data), (0, _combi_1.sub)(Structures.TypeEnum), (0, _combi_1.sub)(Structures.While), (0, _combi_1.sub)(Structures.With), (0, _combi_1.sub)(Structures.Do), (0, _combi_1.sub)(Structures.ExecSQL));
18118
18140
  }
18119
18141
  }
@@ -18157,10 +18179,10 @@ Object.defineProperty(exports, "__esModule", ({ value: true }));
18157
18179
  exports.PrivateSection = void 0;
18158
18180
  const Statements = __webpack_require__(/*! ../../2_statements/statements */ "./node_modules/@abaplint/core/build/src/abap/2_statements/statements/index.js");
18159
18181
  const _combi_1 = __webpack_require__(/*! ./_combi */ "./node_modules/@abaplint/core/build/src/abap/3_structures/structures/_combi.js");
18160
- const section_section_1 = __webpack_require__(/*! ./section_section */ "./node_modules/@abaplint/core/build/src/abap/3_structures/structures/section_section.js");
18182
+ const section_contents_1 = __webpack_require__(/*! ./section_contents */ "./node_modules/@abaplint/core/build/src/abap/3_structures/structures/section_contents.js");
18161
18183
  class PrivateSection {
18162
18184
  getMatcher() {
18163
- return (0, _combi_1.seq)((0, _combi_1.sta)(Statements.Private), (0, _combi_1.opt)((0, _combi_1.sub)(section_section_1.SectionContents)));
18185
+ return (0, _combi_1.seq)((0, _combi_1.sta)(Statements.Private), (0, _combi_1.opt)((0, _combi_1.sub)(section_contents_1.SectionContents)));
18164
18186
  }
18165
18187
  }
18166
18188
  exports.PrivateSection = PrivateSection;
@@ -18180,10 +18202,10 @@ Object.defineProperty(exports, "__esModule", ({ value: true }));
18180
18202
  exports.ProtectedSection = void 0;
18181
18203
  const Statements = __webpack_require__(/*! ../../2_statements/statements */ "./node_modules/@abaplint/core/build/src/abap/2_statements/statements/index.js");
18182
18204
  const _combi_1 = __webpack_require__(/*! ./_combi */ "./node_modules/@abaplint/core/build/src/abap/3_structures/structures/_combi.js");
18183
- const section_section_1 = __webpack_require__(/*! ./section_section */ "./node_modules/@abaplint/core/build/src/abap/3_structures/structures/section_section.js");
18205
+ const section_contents_1 = __webpack_require__(/*! ./section_contents */ "./node_modules/@abaplint/core/build/src/abap/3_structures/structures/section_contents.js");
18184
18206
  class ProtectedSection {
18185
18207
  getMatcher() {
18186
- return (0, _combi_1.seq)((0, _combi_1.sta)(Statements.Protected), (0, _combi_1.opt)((0, _combi_1.sub)(section_section_1.SectionContents)));
18208
+ return (0, _combi_1.seq)((0, _combi_1.sta)(Statements.Protected), (0, _combi_1.opt)((0, _combi_1.sub)(section_contents_1.SectionContents)));
18187
18209
  }
18188
18210
  }
18189
18211
  exports.ProtectedSection = ProtectedSection;
@@ -18226,10 +18248,10 @@ Object.defineProperty(exports, "__esModule", ({ value: true }));
18226
18248
  exports.PublicSection = void 0;
18227
18249
  const Statements = __webpack_require__(/*! ../../2_statements/statements */ "./node_modules/@abaplint/core/build/src/abap/2_statements/statements/index.js");
18228
18250
  const _combi_1 = __webpack_require__(/*! ./_combi */ "./node_modules/@abaplint/core/build/src/abap/3_structures/structures/_combi.js");
18229
- const section_section_1 = __webpack_require__(/*! ./section_section */ "./node_modules/@abaplint/core/build/src/abap/3_structures/structures/section_section.js");
18251
+ const section_contents_1 = __webpack_require__(/*! ./section_contents */ "./node_modules/@abaplint/core/build/src/abap/3_structures/structures/section_contents.js");
18230
18252
  class PublicSection {
18231
18253
  getMatcher() {
18232
- return (0, _combi_1.seq)((0, _combi_1.sta)(Statements.Public), (0, _combi_1.opt)((0, _combi_1.sub)(section_section_1.SectionContents)));
18254
+ return (0, _combi_1.seq)((0, _combi_1.sta)(Statements.Public), (0, _combi_1.opt)((0, _combi_1.sub)(section_contents_1.SectionContents)));
18233
18255
  }
18234
18256
  }
18235
18257
  exports.PublicSection = PublicSection;
@@ -18237,10 +18259,10 @@ exports.PublicSection = PublicSection;
18237
18259
 
18238
18260
  /***/ }),
18239
18261
 
18240
- /***/ "./node_modules/@abaplint/core/build/src/abap/3_structures/structures/section_section.js":
18241
- /*!***********************************************************************************************!*\
18242
- !*** ./node_modules/@abaplint/core/build/src/abap/3_structures/structures/section_section.js ***!
18243
- \***********************************************************************************************/
18262
+ /***/ "./node_modules/@abaplint/core/build/src/abap/3_structures/structures/section_contents.js":
18263
+ /*!************************************************************************************************!*\
18264
+ !*** ./node_modules/@abaplint/core/build/src/abap/3_structures/structures/section_contents.js ***!
18265
+ \************************************************************************************************/
18244
18266
  /***/ ((__unused_webpack_module, exports, __webpack_require__) => {
18245
18267
 
18246
18268
  "use strict";
@@ -18257,11 +18279,11 @@ const data_1 = __webpack_require__(/*! ./data */ "./node_modules/@abaplint/core/
18257
18279
  const _1 = __webpack_require__(/*! . */ "./node_modules/@abaplint/core/build/src/abap/3_structures/structures/index.js");
18258
18280
  class SectionContents {
18259
18281
  getMatcher() {
18260
- return (0, _combi_1.star)((0, _combi_1.alt)((0, _combi_1.sta)(Statements.MethodDef), (0, _combi_1.sta)(Statements.InterfaceDef), (0, _combi_1.sta)(Statements.Data), (0, _combi_1.sta)(Statements.ClassData), (0, _combi_1.sta)(Statements.Events), (0, _combi_1.sta)(Statements.Constant), (0, _combi_1.sta)(Statements.Aliases), (0, _combi_1.sta)(Statements.TypePools), (0, _combi_1.sta)(Statements.InterfaceLoad), (0, _combi_1.sta)(Statements.ClassDefinitionLoad), (0, _combi_1.sub)(types_1.Types), (0, _combi_1.sub)(constants_1.Constants), (0, _combi_1.sub)(type_enum_1.TypeEnum), (0, _combi_1.sub)(_1.TypeMesh), (0, _combi_1.sub)(data_1.Data), (0, _combi_1.sub)(class_data_1.ClassData), (0, _combi_1.sta)(Statements.Type)));
18282
+ return (0, _combi_1.star)((0, _combi_1.alt)((0, _combi_1.sta)(Statements.MethodDef), (0, _combi_1.sta)(Statements.InterfaceDef), (0, _combi_1.sta)(Statements.Data), (0, _combi_1.sta)(Statements.ClassData), (0, _combi_1.sta)(Statements.Events), (0, _combi_1.sta)(Statements.Constant), (0, _combi_1.sta)(Statements.Aliases), (0, _combi_1.sta)(Statements.TypePools), (0, _combi_1.sta)(Statements.InterfaceLoad), (0, _combi_1.sta)(Statements.ClassDefinitionLoad), (0, _combi_1.sta)(Statements.Include), (0, _combi_1.sub)(types_1.Types), (0, _combi_1.sub)(constants_1.Constants), (0, _combi_1.sub)(type_enum_1.TypeEnum), (0, _combi_1.sub)(_1.TypeMesh), (0, _combi_1.sub)(data_1.Data), (0, _combi_1.sub)(class_data_1.ClassData), (0, _combi_1.sta)(Statements.Type)));
18261
18283
  }
18262
18284
  }
18263
18285
  exports.SectionContents = SectionContents;
18264
- //# sourceMappingURL=section_section.js.map
18286
+ //# sourceMappingURL=section_contents.js.map
18265
18287
 
18266
18288
  /***/ }),
18267
18289
 
@@ -19044,7 +19066,6 @@ var Visibility;
19044
19066
 
19045
19067
  Object.defineProperty(exports, "__esModule", ({ value: true }));
19046
19068
  exports.BuiltIn = exports.BuiltInMethod = void 0;
19047
- /* eslint-disable max-len */
19048
19069
  const _typed_identifier_1 = __webpack_require__(/*! ../types/_typed_identifier */ "./node_modules/@abaplint/core/build/src/abap/types/_typed_identifier.js");
19049
19070
  const basic_1 = __webpack_require__(/*! ../types/basic */ "./node_modules/@abaplint/core/build/src/abap/types/basic/index.js");
19050
19071
  const tokens_1 = __webpack_require__(/*! ../1_lexer/tokens */ "./node_modules/@abaplint/core/build/src/abap/1_lexer/tokens/index.js");
@@ -20367,7 +20388,7 @@ class CurrentScope {
20367
20388
  }
20368
20389
  const upper = name.toUpperCase();
20369
20390
  if (this.current.getData().vars[upper] !== undefined) {
20370
- // console.dir(new Error().stack);
20391
+ // console.dir(new Error().stack);
20371
20392
  throw new Error(`Variable name "${name}" already defined`);
20372
20393
  }
20373
20394
  else if (this.isOO() && this.current.getData().types[upper] !== undefined) {
@@ -20385,6 +20406,7 @@ class CurrentScope {
20385
20406
  }
20386
20407
  const upper = name.toUpperCase();
20387
20408
  if (parent.getData().vars[upper] !== undefined) {
20409
+ // console.dir(new Error().stack);
20388
20410
  throw new Error(`Variable name "${name}" already defined`);
20389
20411
  }
20390
20412
  else if (this.isOO() && parent.getData().types[upper] !== undefined) {
@@ -20876,7 +20898,7 @@ class ObjectOriented {
20876
20898
  }
20877
20899
  if (name.includes("~")) {
20878
20900
  const interfaceName = upper.split("~")[0];
20879
- if (def.getImplementing().some((a) => a.name.toUpperCase() === interfaceName)) {
20901
+ if (this.listInterfacesRecursive(def).includes(interfaceName)) {
20880
20902
  return this.searchAttributeName(this.scope.findInterfaceDefinition(interfaceName), name.split("~")[1]);
20881
20903
  }
20882
20904
  }
@@ -21038,7 +21060,19 @@ class ObjectOriented {
21038
21060
  }
21039
21061
  return ignore;
21040
21062
  }
21041
- // returns list of interfaces implemented
21063
+ /** returns list of interfaces implemented, recursive */
21064
+ listInterfacesRecursive(definition) {
21065
+ const list = [];
21066
+ for (const i of definition.getImplementing()) {
21067
+ const upper = i.name.toUpperCase();
21068
+ list.push(upper);
21069
+ const def = this.scope.findInterfaceDefinition(upper);
21070
+ if (def) {
21071
+ list.push(...this.listInterfacesRecursive(def));
21072
+ }
21073
+ }
21074
+ return [...new Set(list)];
21075
+ }
21042
21076
  fromInterfaces(definition, skip) {
21043
21077
  const ignore = [];
21044
21078
  for (const i of definition.getImplementing()) {
@@ -21880,7 +21914,6 @@ exports.AssertError = AssertError;
21880
21914
 
21881
21915
  Object.defineProperty(exports, "__esModule", ({ value: true }));
21882
21916
  exports.BasicTypes = void 0;
21883
- /* eslint-disable default-case */
21884
21917
  const _typed_identifier_1 = __webpack_require__(/*! ../types/_typed_identifier */ "./node_modules/@abaplint/core/build/src/abap/types/_typed_identifier.js");
21885
21918
  const Expressions = __webpack_require__(/*! ../2_statements/expressions */ "./node_modules/@abaplint/core/build/src/abap/2_statements/expressions/index.js");
21886
21919
  const Statements = __webpack_require__(/*! ../2_statements/statements */ "./node_modules/@abaplint/core/build/src/abap/2_statements/statements/index.js");
@@ -26682,7 +26715,7 @@ class StringTemplate {
26682
26715
  && !(type instanceof basic_1.NumericGenericType)
26683
26716
  && !(type instanceof basic_1.NumericType)
26684
26717
  && !(type instanceof basic_1.AnyType)) {
26685
- const message = "Cannot apply ALPHA to this type";
26718
+ const message = `Cannot apply ALPHA to this type (${type.constructor.name})`;
26686
26719
  input.issues.push((0, _syntax_input_1.syntaxIssue)(input, format.getFirstToken(), message));
26687
26720
  return new basic_1.VoidType(_syntax_input_1.CheckSyntaxKey);
26688
26721
  }
@@ -30343,8 +30376,11 @@ class Loop {
30343
30376
  let rowType = undefined;
30344
30377
  const concat = node.concatTokens().toUpperCase();
30345
30378
  if (sourceType === undefined) {
30346
- const message = "No source type determined";
30347
- input.issues.push((0, _syntax_input_1.syntaxIssue)(input, node.getFirstToken(), message));
30379
+ // if its a dynpro table control loop, then dont issue error
30380
+ if (concat !== "LOOP.") {
30381
+ const message = "No source type determined";
30382
+ input.issues.push((0, _syntax_input_1.syntaxIssue)(input, node.getFirstToken(), message));
30383
+ }
30348
30384
  return;
30349
30385
  }
30350
30386
  else if (sourceType instanceof basic_1.UnknownType) {
@@ -31197,7 +31233,7 @@ class Ranges {
31197
31233
  runSyntax(node, input) {
31198
31234
  var _a;
31199
31235
  const nameToken = (_a = node.findFirstExpression(Expressions.SimpleName)) === null || _a === void 0 ? void 0 : _a.getFirstToken();
31200
- const typeExpression = node.findFirstExpression(Expressions.FieldSub);
31236
+ const typeExpression = node.findFirstExpression(Expressions.SimpleFieldChain2);
31201
31237
  if (typeExpression === undefined) {
31202
31238
  throw new assert_error_1.AssertError("Ranges, unexpected node");
31203
31239
  }
@@ -33937,7 +33973,13 @@ exports.ArtifactsABAP = ArtifactsABAP;
33937
33973
  "use strict";
33938
33974
 
33939
33975
  Object.defineProperty(exports, "__esModule", ({ value: true }));
33940
- exports.FlowGraph = void 0;
33976
+ exports.FlowGraph = exports.FLOW_EDGE_TYPE = void 0;
33977
+ var FLOW_EDGE_TYPE;
33978
+ (function (FLOW_EDGE_TYPE) {
33979
+ FLOW_EDGE_TYPE["true"] = "true";
33980
+ FLOW_EDGE_TYPE["false"] = "false";
33981
+ FLOW_EDGE_TYPE["undefined"] = "undefined";
33982
+ })(FLOW_EDGE_TYPE || (exports.FLOW_EDGE_TYPE = FLOW_EDGE_TYPE = {}));
33941
33983
  class FlowGraph {
33942
33984
  constructor(counter) {
33943
33985
  this.edges = {};
@@ -33948,14 +33990,17 @@ class FlowGraph {
33948
33990
  getStart() {
33949
33991
  return this.startNode;
33950
33992
  }
33993
+ getLabel() {
33994
+ return this.label;
33995
+ }
33951
33996
  getEnd() {
33952
33997
  return this.endNode;
33953
33998
  }
33954
- addEdge(from, to) {
33999
+ addEdge(from, to, type) {
33955
34000
  if (this.edges[from] === undefined) {
33956
34001
  this.edges[from] = {};
33957
34002
  }
33958
- this.edges[from][to] = true;
34003
+ this.edges[from][to] = type;
33959
34004
  }
33960
34005
  removeEdge(from, to) {
33961
34006
  if (this.edges[from] === undefined) {
@@ -33970,7 +34015,7 @@ class FlowGraph {
33970
34015
  const list = [];
33971
34016
  for (const from of Object.keys(this.edges)) {
33972
34017
  for (const to of Object.keys(this.edges[from])) {
33973
- list.push({ from, to });
34018
+ list.push({ from, to, type: this.edges[from][to] });
33974
34019
  }
33975
34020
  }
33976
34021
  return list;
@@ -33999,12 +34044,12 @@ class FlowGraph {
33999
34044
  return Object.keys(this.edges).length > 0;
34000
34045
  }
34001
34046
  /** return value: end node of to graph */
34002
- addGraph(from, to) {
34047
+ addGraph(from, to, type) {
34003
34048
  if (to.hasEdges() === false) {
34004
34049
  return from;
34005
34050
  }
34006
- this.addEdge(from, to.getStart());
34007
- to.listEdges().forEach(e => this.addEdge(e.from, e.to));
34051
+ this.addEdge(from, to.getStart(), type);
34052
+ to.listEdges().forEach(e => this.addEdge(e.from, e.to, e.type));
34008
34053
  return to.getEnd();
34009
34054
  }
34010
34055
  toJSON() {
@@ -34013,7 +34058,8 @@ class FlowGraph {
34013
34058
  toTextEdges() {
34014
34059
  let graph = "";
34015
34060
  for (const l of this.listEdges()) {
34016
- graph += `"${l.from}" -> "${l.to}";\n`;
34061
+ const label = l.type === FLOW_EDGE_TYPE.undefined ? "" : ` [label="${l.type}"]`;
34062
+ graph += `"${l.from}" -> "${l.to}"${label};\n`;
34017
34063
  }
34018
34064
  return graph.trim();
34019
34065
  }
@@ -34031,22 +34077,22 @@ ${this.toTextEdges()}
34031
34077
  }`;
34032
34078
  }
34033
34079
  listSources(node) {
34034
- const set = new Set();
34080
+ const set = [];
34035
34081
  for (const l of this.listEdges()) {
34036
34082
  if (node === l.to) {
34037
- set.add(l.from);
34083
+ set.push({ name: l.from, type: l.type });
34038
34084
  }
34039
34085
  }
34040
- return Array.from(set.values());
34086
+ return set;
34041
34087
  }
34042
34088
  listTargets(node) {
34043
- const set = new Set();
34089
+ const set = [];
34044
34090
  for (const l of this.listEdges()) {
34045
34091
  if (node === l.from) {
34046
- set.add(l.to);
34092
+ set.push({ name: l.to, type: l.type });
34047
34093
  }
34048
34094
  }
34049
- return Array.from(set.values());
34095
+ return set;
34050
34096
  }
34051
34097
  /** removes all nodes containing "#" that have one in-going and one out-going edge */
34052
34098
  reduce() {
@@ -34059,20 +34105,30 @@ ${this.toTextEdges()}
34059
34105
  if (sources.length > 0 && targets.length > 0) {
34060
34106
  // hash node in the middle of the graph
34061
34107
  for (const s of sources) {
34062
- this.removeEdge(s, node);
34108
+ this.removeEdge(s.name, node);
34063
34109
  }
34064
34110
  for (const t of targets) {
34065
- this.removeEdge(node, t);
34111
+ this.removeEdge(node, t.name);
34066
34112
  }
34067
34113
  for (const s of sources) {
34068
34114
  for (const t of targets) {
34069
- this.addEdge(s, t);
34115
+ let type = FLOW_EDGE_TYPE.undefined;
34116
+ if (s.type !== FLOW_EDGE_TYPE.undefined) {
34117
+ type = s.type;
34118
+ }
34119
+ if (t.type !== FLOW_EDGE_TYPE.undefined) {
34120
+ if (type !== FLOW_EDGE_TYPE.undefined) {
34121
+ throw new Error("reduce: cannot merge, different edge types");
34122
+ }
34123
+ type = t.type;
34124
+ }
34125
+ this.addEdge(s.name, t.name, type);
34070
34126
  }
34071
34127
  }
34072
34128
  }
34073
34129
  if (node.startsWith("end#") && sources.length === 0) {
34074
34130
  for (const t of targets) {
34075
- this.removeEdge(node, t);
34131
+ this.removeEdge(node, t.name);
34076
34132
  }
34077
34133
  }
34078
34134
  }
@@ -34099,32 +34155,105 @@ const Structures = __webpack_require__(/*! ../3_structures/structures */ "./node
34099
34155
  const Statements = __webpack_require__(/*! ../2_statements/statements */ "./node_modules/@abaplint/core/build/src/abap/2_statements/statements/index.js");
34100
34156
  const Expressions = __webpack_require__(/*! ../2_statements/expressions */ "./node_modules/@abaplint/core/build/src/abap/2_statements/expressions/index.js");
34101
34157
  const flow_graph_1 = __webpack_require__(/*! ./flow_graph */ "./node_modules/@abaplint/core/build/src/abap/flow/flow_graph.js");
34158
+ // Levels: top, FORM, METHOD, FUNCTION-MODULE, (MODULE, AT, END-OF-*, GET, START-OF-SELECTION, TOP-OF-PAGE)
34159
+ //
34160
+ // Loop branching: LOOP, DO, WHILE, SELECT(loop), WITH, PROVIDE
34161
+ //
34162
+ // Branching: IF, CASE, CASE TYPE OF, TRY, ON, CATCH SYSTEM-EXCEPTIONS, AT
34163
+ //
34164
+ // Conditional exits: CHECK, ASSERT
34165
+ //
34166
+ // Exits: RETURN, EXIT, RAISE(not RESUMABLE), MESSAGE(type E and A?), CONTINUE, REJECT, RESUME, STOP
34167
+ //
34168
+ // Not handled? INCLUDE + malplaced macro calls
34169
+ /////////////////////////////////////
34170
+ // TODO: handling static exceptions(only static), refactor some logic from UncaughtException to common file
34171
+ // TODO: RAISE
34172
+ const FLOW_EVENTS = [
34173
+ Statements.StartOfSelection,
34174
+ Statements.AtSelectionScreen,
34175
+ Statements.AtLineSelection,
34176
+ Statements.AtUserCommand,
34177
+ Statements.EndOfSelection,
34178
+ Statements.Initialization,
34179
+ Statements.TopOfPage,
34180
+ Statements.EndOfPage,
34181
+ ];
34102
34182
  class StatementFlow {
34103
34183
  constructor() {
34104
34184
  this.counter = 0;
34105
34185
  }
34106
34186
  build(stru) {
34107
- var _a, _b;
34187
+ var _a, _b, _c, _d;
34108
34188
  const ret = [];
34109
- const forms = stru.findAllStructures(Structures.Form);
34110
- for (const f of forms) {
34111
- const formName = "FORM " + ((_a = f.findFirstExpression(Expressions.FormName)) === null || _a === void 0 ? void 0 : _a.concatTokens());
34112
- this.counter = 1;
34113
- const graph = this.traverseBody(this.findBody(f), { procedureEnd: "end#1" });
34114
- graph.setLabel(formName);
34115
- ret.push(graph);
34116
- }
34117
- const methods = stru.findAllStructures(Structures.Method);
34118
- for (const f of methods) {
34119
- const methodName = "METHOD " + ((_b = f.findFirstExpression(Expressions.MethodName)) === null || _b === void 0 ? void 0 : _b.concatTokens());
34120
- this.counter = 1;
34121
- const graph = this.traverseBody(this.findBody(f), { procedureEnd: "end#1" });
34122
- graph.setLabel(methodName);
34123
- ret.push(graph);
34189
+ let name = "";
34190
+ const structures = stru.findAllStructuresMulti([Structures.Form, Structures.ClassImplementation, Structures.FunctionModule]);
34191
+ for (const s of structures) {
34192
+ if (s.get() instanceof Structures.Form) {
34193
+ name = "FORM " + ((_a = s.findFirstExpression(Expressions.FormName)) === null || _a === void 0 ? void 0 : _a.concatTokens());
34194
+ ret.push(this.run(s, name));
34195
+ }
34196
+ else if (s.get() instanceof Structures.ClassImplementation) {
34197
+ const className = (_b = s.findFirstExpression(Expressions.ClassName)) === null || _b === void 0 ? void 0 : _b.concatTokens();
34198
+ for (const method of s.findDirectStructures(Structures.Method)) {
34199
+ const methodName = (_c = method.findFirstExpression(Expressions.MethodName)) === null || _c === void 0 ? void 0 : _c.concatTokens();
34200
+ name = "METHOD " + methodName + ", CLASS " + className;
34201
+ ret.push(this.run(method, name));
34202
+ }
34203
+ }
34204
+ else if (s.get() instanceof Structures.FunctionModule) {
34205
+ name = "FUNCTION " + ((_d = s.findFirstExpression(Expressions.Field)) === null || _d === void 0 ? void 0 : _d.concatTokens());
34206
+ ret.push(this.run(s, name));
34207
+ }
34208
+ else {
34209
+ throw new Error("StatementFlow, unknown structure");
34210
+ }
34211
+ }
34212
+ // find the top level events
34213
+ let inFlow = false;
34214
+ let collected = [];
34215
+ for (const s of stru.getChildren() || []) {
34216
+ if (FLOW_EVENTS.some(f => s.get() instanceof f)) {
34217
+ if (inFlow === true) {
34218
+ ret.push(this.runEvent(collected, name));
34219
+ }
34220
+ collected = [];
34221
+ inFlow = true;
34222
+ name = s.concatTokens();
34223
+ }
34224
+ else if (s.get() instanceof Structures.Normal) {
34225
+ collected.push(s);
34226
+ }
34227
+ else {
34228
+ if (inFlow === true) {
34229
+ ret.push(this.runEvent(collected, name));
34230
+ inFlow = false;
34231
+ }
34232
+ collected = [];
34233
+ }
34234
+ }
34235
+ if (inFlow === true) {
34236
+ ret.push(this.runEvent(collected, name));
34237
+ }
34238
+ else if (collected.length > 0) {
34239
+ // implicit START-OF-SELECTION
34240
+ ret.push(this.runEvent(collected, "START-OF-SELECTION."));
34124
34241
  }
34125
34242
  return ret.map(f => f.reduce());
34126
34243
  }
34127
34244
  ////////////////////
34245
+ runEvent(s, name) {
34246
+ this.counter = 1;
34247
+ const graph = this.traverseBody(s, { procedureEnd: "end#1" });
34248
+ graph.setLabel(name);
34249
+ return graph;
34250
+ }
34251
+ run(s, name) {
34252
+ this.counter = 1;
34253
+ const graph = this.traverseBody(this.findBody(s), { procedureEnd: "end#1" });
34254
+ graph.setLabel(name);
34255
+ return graph;
34256
+ }
34128
34257
  findBody(f) {
34129
34258
  var _a;
34130
34259
  return ((_a = f.findDirectStructure(Structures.Body)) === null || _a === void 0 ? void 0 : _a.getChildren()) || [];
@@ -34153,7 +34282,7 @@ class StatementFlow {
34153
34282
  traverseBody(children, context) {
34154
34283
  const graph = new flow_graph_1.FlowGraph(this.counter++);
34155
34284
  if (children.length === 0) {
34156
- graph.addEdge(graph.getStart(), graph.getEnd());
34285
+ graph.addEdge(graph.getStart(), graph.getEnd(), flow_graph_1.FLOW_EDGE_TYPE.undefined);
34157
34286
  return graph;
34158
34287
  }
34159
34288
  let current = graph.getStart();
@@ -34162,44 +34291,44 @@ class StatementFlow {
34162
34291
  const firstChild = c.getFirstChild(); // "Normal" only has one child
34163
34292
  if (firstChild instanceof nodes_1.StatementNode) {
34164
34293
  const name = this.buildName(firstChild);
34165
- graph.addEdge(current, name);
34294
+ graph.addEdge(current, name, flow_graph_1.FLOW_EDGE_TYPE.undefined);
34166
34295
  current = name;
34167
34296
  if (firstChild.get() instanceof Statements.Check) {
34168
34297
  if (context.loopStart) {
34169
- graph.addEdge(name, context.loopStart);
34298
+ graph.addEdge(name, context.loopStart, flow_graph_1.FLOW_EDGE_TYPE.false);
34170
34299
  }
34171
34300
  else {
34172
- graph.addEdge(name, context.procedureEnd);
34301
+ graph.addEdge(name, context.procedureEnd, flow_graph_1.FLOW_EDGE_TYPE.false);
34173
34302
  }
34174
34303
  }
34175
34304
  else if (firstChild.get() instanceof Statements.Assert) {
34176
- graph.addEdge(name, context.procedureEnd);
34305
+ graph.addEdge(name, context.procedureEnd, flow_graph_1.FLOW_EDGE_TYPE.false);
34177
34306
  }
34178
34307
  else if (firstChild.get() instanceof Statements.Continue && context.loopStart) {
34179
- graph.addEdge(name, context.loopStart);
34308
+ graph.addEdge(name, context.loopStart, flow_graph_1.FLOW_EDGE_TYPE.undefined);
34180
34309
  return graph;
34181
34310
  }
34182
34311
  else if (firstChild.get() instanceof Statements.Exit) {
34183
34312
  if (context.loopEnd) {
34184
- graph.addEdge(name, context.loopEnd);
34313
+ graph.addEdge(name, context.loopEnd, flow_graph_1.FLOW_EDGE_TYPE.undefined);
34185
34314
  }
34186
34315
  else {
34187
- graph.addEdge(name, context.procedureEnd);
34316
+ graph.addEdge(name, context.procedureEnd, flow_graph_1.FLOW_EDGE_TYPE.undefined);
34188
34317
  }
34189
34318
  return graph;
34190
34319
  }
34191
34320
  else if (firstChild.get() instanceof Statements.Return) {
34192
- graph.addEdge(name, context.procedureEnd);
34321
+ graph.addEdge(name, context.procedureEnd, flow_graph_1.FLOW_EDGE_TYPE.undefined);
34193
34322
  return graph;
34194
34323
  }
34195
34324
  }
34196
34325
  else if (firstChild instanceof nodes_1.StructureNode) {
34197
34326
  const sub = this.traverseStructure(firstChild, context);
34198
- current = graph.addGraph(current, sub);
34327
+ current = graph.addGraph(current, sub, flow_graph_1.FLOW_EDGE_TYPE.undefined);
34199
34328
  }
34200
34329
  }
34201
34330
  }
34202
- graph.addEdge(current, graph.getEnd());
34331
+ graph.addEdge(current, graph.getEnd(), flow_graph_1.FLOW_EDGE_TYPE.undefined);
34203
34332
  return graph;
34204
34333
  }
34205
34334
  traverseStructure(n, context) {
@@ -34212,9 +34341,9 @@ class StatementFlow {
34212
34341
  if (type instanceof Structures.If) {
34213
34342
  const ifName = this.buildName(n.findDirectStatement(Statements.If));
34214
34343
  const sub = this.traverseBody(this.findBody(n), context);
34215
- graph.addEdge(current, ifName);
34216
- graph.addGraph(ifName, sub);
34217
- graph.addEdge(sub.getEnd(), graph.getEnd());
34344
+ graph.addEdge(current, ifName, flow_graph_1.FLOW_EDGE_TYPE.undefined);
34345
+ graph.addGraph(ifName, sub, flow_graph_1.FLOW_EDGE_TYPE.true);
34346
+ graph.addEdge(sub.getEnd(), graph.getEnd(), flow_graph_1.FLOW_EDGE_TYPE.undefined);
34218
34347
  current = ifName;
34219
34348
  for (const e of n.findDirectStructures(Structures.ElseIf)) {
34220
34349
  const elseifst = e.findDirectStatement(Statements.ElseIf);
@@ -34223,9 +34352,9 @@ class StatementFlow {
34223
34352
  }
34224
34353
  const elseIfName = this.buildName(elseifst);
34225
34354
  const sub = this.traverseBody(this.findBody(e), context);
34226
- graph.addEdge(current, elseIfName);
34227
- graph.addGraph(elseIfName, sub);
34228
- graph.addEdge(sub.getEnd(), graph.getEnd());
34355
+ graph.addEdge(current, elseIfName, flow_graph_1.FLOW_EDGE_TYPE.false);
34356
+ graph.addGraph(elseIfName, sub, flow_graph_1.FLOW_EDGE_TYPE.true);
34357
+ graph.addEdge(sub.getEnd(), graph.getEnd(), flow_graph_1.FLOW_EDGE_TYPE.undefined);
34229
34358
  current = elseIfName;
34230
34359
  }
34231
34360
  const els = n.findDirectStructure(Structures.Else);
@@ -34233,12 +34362,12 @@ class StatementFlow {
34233
34362
  if (els && elsest) {
34234
34363
  const elseName = this.buildName(elsest);
34235
34364
  const sub = this.traverseBody(this.findBody(els), context);
34236
- graph.addEdge(current, elseName);
34237
- graph.addGraph(elseName, sub);
34238
- graph.addEdge(sub.getEnd(), graph.getEnd());
34365
+ graph.addEdge(current, elseName, flow_graph_1.FLOW_EDGE_TYPE.false);
34366
+ graph.addGraph(elseName, sub, flow_graph_1.FLOW_EDGE_TYPE.undefined);
34367
+ graph.addEdge(sub.getEnd(), graph.getEnd(), flow_graph_1.FLOW_EDGE_TYPE.undefined);
34239
34368
  }
34240
34369
  else {
34241
- graph.addEdge(ifName, graph.getEnd());
34370
+ graph.addEdge(ifName, graph.getEnd(), flow_graph_1.FLOW_EDGE_TYPE.false);
34242
34371
  }
34243
34372
  }
34244
34373
  else if (type instanceof Structures.Loop
@@ -34246,33 +34375,53 @@ class StatementFlow {
34246
34375
  || type instanceof Structures.With
34247
34376
  || type instanceof Structures.Provide
34248
34377
  || type instanceof Structures.Select
34378
+ || type instanceof Structures.LoopAtScreen
34249
34379
  || type instanceof Structures.Do) {
34250
34380
  const loopName = this.buildName(n.getFirstStatement());
34251
34381
  const sub = this.traverseBody(this.findBody(n), Object.assign(Object.assign({}, context), { loopStart: loopName, loopEnd: graph.getEnd() }));
34252
- graph.addEdge(current, loopName);
34253
- graph.addGraph(loopName, sub);
34254
- graph.addEdge(sub.getEnd(), loopName);
34255
- graph.addEdge(loopName, graph.getEnd());
34382
+ graph.addEdge(current, loopName, flow_graph_1.FLOW_EDGE_TYPE.undefined);
34383
+ graph.addGraph(loopName, sub, flow_graph_1.FLOW_EDGE_TYPE.true);
34384
+ graph.addEdge(sub.getEnd(), loopName, flow_graph_1.FLOW_EDGE_TYPE.undefined);
34385
+ graph.addEdge(loopName, graph.getEnd(), flow_graph_1.FLOW_EDGE_TYPE.false);
34386
+ }
34387
+ else if (type instanceof Structures.Data
34388
+ || type instanceof Structures.Types) {
34389
+ // these doesnt affect control flow, so just take the first statement
34390
+ const statement = n.getFirstStatement();
34391
+ const name = this.buildName(statement);
34392
+ graph.addEdge(current, name, flow_graph_1.FLOW_EDGE_TYPE.undefined);
34393
+ graph.addEdge(name, graph.getEnd(), flow_graph_1.FLOW_EDGE_TYPE.undefined);
34394
+ }
34395
+ else if (type instanceof Structures.AtFirst
34396
+ || type instanceof Structures.AtLast
34397
+ || type instanceof Structures.At
34398
+ || type instanceof Structures.OnChange) {
34399
+ const name = this.buildName(n.getFirstStatement());
34400
+ const body = this.traverseBody(this.findBody(n), context);
34401
+ graph.addEdge(current, name, flow_graph_1.FLOW_EDGE_TYPE.undefined);
34402
+ graph.addGraph(name, body, flow_graph_1.FLOW_EDGE_TYPE.undefined);
34403
+ graph.addEdge(body.getEnd(), graph.getEnd(), flow_graph_1.FLOW_EDGE_TYPE.undefined);
34404
+ graph.addEdge(current, graph.getEnd(), flow_graph_1.FLOW_EDGE_TYPE.undefined);
34256
34405
  }
34257
34406
  else if (type instanceof Structures.Try) {
34258
34407
  const tryName = this.buildName(n.getFirstStatement());
34259
34408
  const body = this.traverseBody(this.findBody(n), context);
34260
- graph.addEdge(current, tryName);
34261
- graph.addGraph(tryName, body);
34262
- graph.addEdge(body.getEnd(), graph.getEnd());
34409
+ graph.addEdge(current, tryName, flow_graph_1.FLOW_EDGE_TYPE.undefined);
34410
+ graph.addGraph(tryName, body, flow_graph_1.FLOW_EDGE_TYPE.undefined);
34411
+ graph.addEdge(body.getEnd(), graph.getEnd(), flow_graph_1.FLOW_EDGE_TYPE.undefined);
34263
34412
  for (const c of n.findDirectStructures(Structures.Catch)) {
34264
34413
  const catchName = this.buildName(c.getFirstStatement());
34265
34414
  const catchBody = this.traverseBody(this.findBody(c), context);
34266
34415
  // TODO: this does not take exceptions into account
34267
- graph.addEdge(body.getEnd(), catchName);
34268
- graph.addGraph(catchName, catchBody);
34269
- graph.addEdge(catchBody.getEnd(), graph.getEnd());
34416
+ graph.addEdge(body.getEnd(), catchName, flow_graph_1.FLOW_EDGE_TYPE.undefined);
34417
+ graph.addGraph(catchName, catchBody, flow_graph_1.FLOW_EDGE_TYPE.undefined);
34418
+ graph.addEdge(catchBody.getEnd(), graph.getEnd(), flow_graph_1.FLOW_EDGE_TYPE.undefined);
34270
34419
  }
34271
34420
  // TODO, handle CLEANUP
34272
34421
  }
34273
34422
  else if (type instanceof Structures.Case) {
34274
34423
  const caseName = this.buildName(n.getFirstStatement());
34275
- graph.addEdge(current, caseName);
34424
+ graph.addEdge(current, caseName, flow_graph_1.FLOW_EDGE_TYPE.undefined);
34276
34425
  let othersFound = false;
34277
34426
  for (const w of n.findDirectStructures(Structures.When)) {
34278
34427
  const first = w.getFirstStatement();
@@ -34284,17 +34433,17 @@ class StatementFlow {
34284
34433
  }
34285
34434
  const firstName = this.buildName(first);
34286
34435
  const sub = this.traverseBody(this.findBody(w), context);
34287
- graph.addEdge(caseName, firstName);
34288
- graph.addGraph(firstName, sub);
34289
- graph.addEdge(sub.getEnd(), graph.getEnd());
34436
+ graph.addEdge(caseName, firstName, flow_graph_1.FLOW_EDGE_TYPE.undefined);
34437
+ graph.addGraph(firstName, sub, flow_graph_1.FLOW_EDGE_TYPE.undefined);
34438
+ graph.addEdge(sub.getEnd(), graph.getEnd(), flow_graph_1.FLOW_EDGE_TYPE.undefined);
34290
34439
  }
34291
34440
  if (othersFound === false) {
34292
- graph.addEdge(caseName, graph.getEnd());
34441
+ graph.addEdge(caseName, graph.getEnd(), flow_graph_1.FLOW_EDGE_TYPE.undefined);
34293
34442
  }
34294
34443
  }
34295
34444
  else if (type instanceof Structures.CaseType) {
34296
34445
  const caseName = this.buildName(n.getFirstStatement());
34297
- graph.addEdge(current, caseName);
34446
+ graph.addEdge(current, caseName, flow_graph_1.FLOW_EDGE_TYPE.undefined);
34298
34447
  let othersFound = false;
34299
34448
  for (const w of n.findDirectStructures(Structures.WhenType)) {
34300
34449
  const first = w.getFirstStatement();
@@ -34306,12 +34455,12 @@ class StatementFlow {
34306
34455
  }
34307
34456
  const firstName = this.buildName(first);
34308
34457
  const sub = this.traverseBody(this.findBody(w), context);
34309
- graph.addEdge(caseName, firstName);
34310
- graph.addGraph(firstName, sub);
34311
- graph.addEdge(sub.getEnd(), graph.getEnd());
34458
+ graph.addEdge(caseName, firstName, flow_graph_1.FLOW_EDGE_TYPE.undefined);
34459
+ graph.addGraph(firstName, sub, flow_graph_1.FLOW_EDGE_TYPE.undefined);
34460
+ graph.addEdge(sub.getEnd(), graph.getEnd(), flow_graph_1.FLOW_EDGE_TYPE.undefined);
34312
34461
  }
34313
34462
  if (othersFound === false) {
34314
- graph.addEdge(caseName, graph.getEnd());
34463
+ graph.addEdge(caseName, graph.getEnd(), flow_graph_1.FLOW_EDGE_TYPE.undefined);
34315
34464
  }
34316
34465
  }
34317
34466
  else {
@@ -35550,7 +35699,7 @@ class CharacterType extends _abstract_type_1.AbstractType {
35550
35699
  this.length = length;
35551
35700
  }
35552
35701
  cloneType(input) {
35553
- const clone = Object.assign({}, this.getAbstractTypeData()) || {};
35702
+ const clone = Object.assign({}, this.getAbstractTypeData());
35554
35703
  if (input.qualifiedName) {
35555
35704
  clone.qualifiedName = input.qualifiedName;
35556
35705
  }
@@ -40045,6 +40194,7 @@ class DDIC {
40045
40194
  switch (text) {
40046
40195
  case "DEC": // 1 <= len <= 31
40047
40196
  case "D16F": // 1 <= len <= 31
40197
+ case "D16D":
40048
40198
  case "D34F": // 1 <= len <= 31
40049
40199
  case "DF16_DEC": // 1 <= len <= 31
40050
40200
  case "DF34_DEC": // 1 <= len <= 31
@@ -40897,8 +41047,8 @@ exports.MemoryFile = MemoryFile;
40897
41047
  "use strict";
40898
41048
 
40899
41049
  Object.defineProperty(exports, "__esModule", ({ value: true }));
40900
- exports.PrettyPrinter = exports.Position = exports.CurrentScope = exports.ABAPFile = exports.RulesRunner = exports.SpaghettiScope = exports.SyntaxLogic = exports.ABAPObject = exports.Tokens = exports.ExpressionsCDS = exports.CDSParser = exports.LanguageServerTypes = exports.DDLParser = exports.NativeSQL = exports.MacroContent = exports.MacroCall = exports.applyEditList = exports.applyEditSingle = exports.SpaghettiScopeNode = exports.AbstractFile = exports.Token = exports.ScopeType = exports.BasicTypes = exports.TypedIdentifier = exports.AbstractType = exports.VirtualPosition = exports.Comment = exports.Unknown = exports.Empty = exports.Identifier = exports.Nodes = exports.Types = exports.Expressions = exports.Statements = exports.Structures = exports.SkipLogic = exports.Objects = exports.ArtifactsRules = exports.ArtifactsObjects = exports.ArtifactsABAP = exports.BuiltIn = exports.MethodLengthStats = exports.LanguageServer = exports.Registry = exports.CyclomaticComplexityStats = exports.ReferenceType = exports.Version = exports.Config = exports.Issue = exports.MemoryFile = void 0;
40901
- exports.LSPEdit = exports.RuleTag = exports.Severity = exports.Visibility = exports.Info = exports.Diagnostics = exports.Rename = void 0;
41050
+ exports.ABAPFile = exports.RulesRunner = exports.SpaghettiScope = exports.SyntaxLogic = exports.ABAPObject = exports.Tokens = exports.ExpressionsCDS = exports.CDSParser = exports.LanguageServerTypes = exports.DDLParser = exports.FLOW_EDGE_TYPE = exports.FlowGraph = exports.StatementFlow = exports.NativeSQL = exports.MacroContent = exports.MacroCall = exports.applyEditList = exports.applyEditSingle = exports.SpaghettiScopeNode = exports.AbstractFile = exports.Token = exports.ScopeType = exports.BasicTypes = exports.TypedIdentifier = exports.AbstractType = exports.VirtualPosition = exports.Comment = exports.Unknown = exports.Empty = exports.Identifier = exports.Nodes = exports.Types = exports.Expressions = exports.Statements = exports.Structures = exports.SkipLogic = exports.Objects = exports.ArtifactsRules = exports.ArtifactsObjects = exports.ArtifactsABAP = exports.BuiltIn = exports.MethodLengthStats = exports.LanguageServer = exports.Registry = exports.CyclomaticComplexityStats = exports.ReferenceType = exports.Version = exports.Config = exports.Issue = exports.MemoryFile = void 0;
41051
+ exports.LSPEdit = exports.RuleTag = exports.Severity = exports.Visibility = exports.Info = exports.Diagnostics = exports.Rename = exports.PrettyPrinter = exports.Position = exports.CurrentScope = void 0;
40902
41052
  const issue_1 = __webpack_require__(/*! ./issue */ "./node_modules/@abaplint/core/build/src/issue.js");
40903
41053
  Object.defineProperty(exports, "Issue", ({ enumerable: true, get: function () { return issue_1.Issue; } }));
40904
41054
  const config_1 = __webpack_require__(/*! ./config */ "./node_modules/@abaplint/core/build/src/config.js");
@@ -41006,6 +41156,11 @@ const diagnostics_1 = __webpack_require__(/*! ./lsp/diagnostics */ "./node_modul
41006
41156
  Object.defineProperty(exports, "Diagnostics", ({ enumerable: true, get: function () { return diagnostics_1.Diagnostics; } }));
41007
41157
  const _edit_1 = __webpack_require__(/*! ./lsp/_edit */ "./node_modules/@abaplint/core/build/src/lsp/_edit.js");
41008
41158
  Object.defineProperty(exports, "LSPEdit", ({ enumerable: true, get: function () { return _edit_1.LSPEdit; } }));
41159
+ const statement_flow_1 = __webpack_require__(/*! ./abap/flow/statement_flow */ "./node_modules/@abaplint/core/build/src/abap/flow/statement_flow.js");
41160
+ Object.defineProperty(exports, "StatementFlow", ({ enumerable: true, get: function () { return statement_flow_1.StatementFlow; } }));
41161
+ const flow_graph_1 = __webpack_require__(/*! ./abap/flow/flow_graph */ "./node_modules/@abaplint/core/build/src/abap/flow/flow_graph.js");
41162
+ Object.defineProperty(exports, "FlowGraph", ({ enumerable: true, get: function () { return flow_graph_1.FlowGraph; } }));
41163
+ Object.defineProperty(exports, "FLOW_EDGE_TYPE", ({ enumerable: true, get: function () { return flow_graph_1.FLOW_EDGE_TYPE; } }));
41009
41164
  //# sourceMappingURL=index.js.map
41010
41165
 
41011
41166
  /***/ }),
@@ -43703,6 +43858,68 @@ exports.UnknownObject = UnknownObject;
43703
43858
 
43704
43859
  /***/ }),
43705
43860
 
43861
+ /***/ "./node_modules/@abaplint/core/build/src/objects/abap_query_functional_area.js":
43862
+ /*!*************************************************************************************!*\
43863
+ !*** ./node_modules/@abaplint/core/build/src/objects/abap_query_functional_area.js ***!
43864
+ \*************************************************************************************/
43865
+ /***/ ((__unused_webpack_module, exports, __webpack_require__) => {
43866
+
43867
+ "use strict";
43868
+
43869
+ Object.defineProperty(exports, "__esModule", ({ value: true }));
43870
+ exports.ABAPQueryFunctionalArea = void 0;
43871
+ const _abstract_object_1 = __webpack_require__(/*! ./_abstract_object */ "./node_modules/@abaplint/core/build/src/objects/_abstract_object.js");
43872
+ class ABAPQueryFunctionalArea extends _abstract_object_1.AbstractObject {
43873
+ getType() {
43874
+ return "AQSG";
43875
+ }
43876
+ getAllowedNaming() {
43877
+ return {
43878
+ maxLength: 60, // todo
43879
+ allowNamespace: true,
43880
+ };
43881
+ }
43882
+ getDescription() {
43883
+ // todo
43884
+ return undefined;
43885
+ }
43886
+ }
43887
+ exports.ABAPQueryFunctionalArea = ABAPQueryFunctionalArea;
43888
+ //# sourceMappingURL=abap_query_functional_area.js.map
43889
+
43890
+ /***/ }),
43891
+
43892
+ /***/ "./node_modules/@abaplint/core/build/src/objects/abap_query_query.js":
43893
+ /*!***************************************************************************!*\
43894
+ !*** ./node_modules/@abaplint/core/build/src/objects/abap_query_query.js ***!
43895
+ \***************************************************************************/
43896
+ /***/ ((__unused_webpack_module, exports, __webpack_require__) => {
43897
+
43898
+ "use strict";
43899
+
43900
+ Object.defineProperty(exports, "__esModule", ({ value: true }));
43901
+ exports.ABAPQueryQuery = void 0;
43902
+ const _abstract_object_1 = __webpack_require__(/*! ./_abstract_object */ "./node_modules/@abaplint/core/build/src/objects/_abstract_object.js");
43903
+ class ABAPQueryQuery extends _abstract_object_1.AbstractObject {
43904
+ getType() {
43905
+ return "AQQU";
43906
+ }
43907
+ getAllowedNaming() {
43908
+ return {
43909
+ maxLength: 60, // todo
43910
+ allowNamespace: true,
43911
+ };
43912
+ }
43913
+ getDescription() {
43914
+ // todo
43915
+ return undefined;
43916
+ }
43917
+ }
43918
+ exports.ABAPQueryQuery = ABAPQueryQuery;
43919
+ //# sourceMappingURL=abap_query_query.js.map
43920
+
43921
+ /***/ }),
43922
+
43706
43923
  /***/ "./node_modules/@abaplint/core/build/src/objects/activation_variant.js":
43707
43924
  /*!*****************************************************************************!*\
43708
43925
  !*** ./node_modules/@abaplint/core/build/src/objects/activation_variant.js ***!
@@ -46810,6 +47027,8 @@ var __exportStar = (this && this.__exportStar) || function(m, exports) {
46810
47027
  for (var p in m) if (p !== "default" && !Object.prototype.hasOwnProperty.call(exports, p)) __createBinding(exports, m, p);
46811
47028
  };
46812
47029
  Object.defineProperty(exports, "__esModule", ({ value: true }));
47030
+ __exportStar(__webpack_require__(/*! ./abap_query_functional_area */ "./node_modules/@abaplint/core/build/src/objects/abap_query_functional_area.js"), exports);
47031
+ __exportStar(__webpack_require__(/*! ./abap_query_query */ "./node_modules/@abaplint/core/build/src/objects/abap_query_query.js"), exports);
46813
47032
  __exportStar(__webpack_require__(/*! ./activation_variant */ "./node_modules/@abaplint/core/build/src/objects/activation_variant.js"), exports);
46814
47033
  __exportStar(__webpack_require__(/*! ./api_release_state */ "./node_modules/@abaplint/core/build/src/objects/api_release_state.js"), exports);
46815
47034
  __exportStar(__webpack_require__(/*! ./application_job_catalog_entry */ "./node_modules/@abaplint/core/build/src/objects/application_job_catalog_entry.js"), exports);
@@ -49807,8 +50026,11 @@ class Table extends _abstract_object_1.AbstractObject {
49807
50026
  return "TABL";
49808
50027
  }
49809
50028
  getDescription() {
49810
- // todo
49811
- return undefined;
50029
+ var _a;
50030
+ if (this.parsedData === undefined) {
50031
+ this.parseXML();
50032
+ }
50033
+ return (_a = this.parsedData) === null || _a === void 0 ? void 0 : _a.description;
49812
50034
  }
49813
50035
  getAllowedNaming() {
49814
50036
  let length = 30;
@@ -50036,7 +50258,7 @@ class Table extends _abstract_object_1.AbstractObject {
50036
50258
  }
50037
50259
  ///////////////
50038
50260
  parseXML() {
50039
- var _a, _b, _c, _d, _e, _f, _g, _h, _j;
50261
+ var _a, _b, _c, _d, _e, _f, _g, _h, _j, _k, _l;
50040
50262
  const parsed = super.parseRaw2();
50041
50263
  if (parsed === undefined) {
50042
50264
  return;
@@ -50054,9 +50276,10 @@ class Table extends _abstract_object_1.AbstractObject {
50054
50276
  }
50055
50277
  // table category
50056
50278
  this.parsedData.tableCategory = (_f = (_e = parsed.abapGit["asx:abap"]["asx:values"]) === null || _e === void 0 ? void 0 : _e.DD02V) === null || _f === void 0 ? void 0 : _f.TABCLASS;
50057
- this.parsedData.dataClass = (_h = (_g = parsed.abapGit["asx:abap"]["asx:values"]) === null || _g === void 0 ? void 0 : _g.DD09L) === null || _h === void 0 ? void 0 : _h.TABART;
50279
+ this.parsedData.description = (_h = (_g = parsed.abapGit["asx:abap"]["asx:values"]) === null || _g === void 0 ? void 0 : _g.DD02V) === null || _h === void 0 ? void 0 : _h.DDTEXT;
50280
+ this.parsedData.dataClass = (_k = (_j = parsed.abapGit["asx:abap"]["asx:values"]) === null || _j === void 0 ? void 0 : _j.DD09L) === null || _k === void 0 ? void 0 : _k.TABART;
50058
50281
  // fields
50059
- const fields = (_j = parsed.abapGit["asx:abap"]["asx:values"]) === null || _j === void 0 ? void 0 : _j.DD03P_TABLE;
50282
+ const fields = (_l = parsed.abapGit["asx:abap"]["asx:values"]) === null || _l === void 0 ? void 0 : _l.DD03P_TABLE;
50060
50283
  for (const field of (0, xml_utils_1.xmlToArray)(fields === null || fields === void 0 ? void 0 : fields.DD03P)) {
50061
50284
  this.parsedData.fields.push({
50062
50285
  FIELDNAME: field.FIELDNAME,
@@ -51341,7 +51564,7 @@ class Registry {
51341
51564
  }
51342
51565
  static abaplintVersion() {
51343
51566
  // magic, see build script "version.sh"
51344
- return "2.112.10";
51567
+ return "2.112.22";
51345
51568
  }
51346
51569
  getDDICReferences() {
51347
51570
  return this.ddicReferences;
@@ -53389,7 +53612,6 @@ class CDSLegacyView {
53389
53612
  key: "cds_legacy_view",
53390
53613
  title: "CDS Legacy View",
53391
53614
  shortDescription: `Identify CDS Legacy Views`,
53392
- // eslint-disable-next-line max-len
53393
53615
  extendedInformation: `Use DEFINE VIEW ENTITY instead of DEFINE VIEW
53394
53616
 
53395
53617
  https://blogs.sap.com/2021/10/16/a-new-generation-of-cds-views-how-to-migrate-your-cds-views-to-cds-view-entities/
@@ -74420,7 +74642,7 @@ function xmlToArray(data) {
74420
74642
  if (data === undefined) {
74421
74643
  return [];
74422
74644
  }
74423
- else if (data.length) { // input data is an Array
74645
+ else if (Array.isArray(data)) {
74424
74646
  return data;
74425
74647
  }
74426
74648
  else {
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@abaplint/transpiler-cli",
3
- "version": "2.10.9",
3
+ "version": "2.10.10",
4
4
  "description": "Transpiler - Command Line Interface",
5
5
  "funding": "https://github.com/sponsors/larshp",
6
6
  "bin": {
@@ -26,14 +26,14 @@
26
26
  "author": "abaplint",
27
27
  "license": "MIT",
28
28
  "devDependencies": {
29
- "@abaplint/transpiler": "^2.10.8",
29
+ "@abaplint/transpiler": "^2.10.10",
30
30
  "@types/glob": "^8.1.0",
31
31
  "glob": "=7.2.0",
32
32
  "@types/progress": "^2.0.7",
33
- "@types/node": "^22.1.0",
34
- "@abaplint/core": "^2.112.10",
33
+ "@types/node": "^22.5.1",
34
+ "@abaplint/core": "^2.112.22",
35
35
  "progress": "^2.0.3",
36
- "webpack": "^5.93.0",
36
+ "webpack": "^5.94.0",
37
37
  "webpack-cli": "^5.1.4",
38
38
  "typescript": "^5.5.4"
39
39
  }