@abaplint/transpiler-cli 2.11.7 → 2.11.9

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 +235 -68
  2. package/package.json +3 -3
package/build/bundle.js CHANGED
@@ -4817,10 +4817,12 @@ __exportStar(__webpack_require__(/*! ./lob_handle */ "./node_modules/@abaplint/c
4817
4817
  __exportStar(__webpack_require__(/*! ./loop_group_by_component */ "./node_modules/@abaplint/core/build/src/abap/2_statements/expressions/loop_group_by_component.js"), exports);
4818
4818
  __exportStar(__webpack_require__(/*! ./loop_group_by_target */ "./node_modules/@abaplint/core/build/src/abap/2_statements/expressions/loop_group_by_target.js"), exports);
4819
4819
  __exportStar(__webpack_require__(/*! ./loop_group_by */ "./node_modules/@abaplint/core/build/src/abap/2_statements/expressions/loop_group_by.js"), exports);
4820
+ __exportStar(__webpack_require__(/*! ./loop_source */ "./node_modules/@abaplint/core/build/src/abap/2_statements/expressions/loop_source.js"), exports);
4820
4821
  __exportStar(__webpack_require__(/*! ./loop_target */ "./node_modules/@abaplint/core/build/src/abap/2_statements/expressions/loop_target.js"), exports);
4821
4822
  __exportStar(__webpack_require__(/*! ./macro_name */ "./node_modules/@abaplint/core/build/src/abap/2_statements/expressions/macro_name.js"), exports);
4822
4823
  __exportStar(__webpack_require__(/*! ./message_class */ "./node_modules/@abaplint/core/build/src/abap/2_statements/expressions/message_class.js"), exports);
4823
4824
  __exportStar(__webpack_require__(/*! ./message_number */ "./node_modules/@abaplint/core/build/src/abap/2_statements/expressions/message_number.js"), exports);
4825
+ __exportStar(__webpack_require__(/*! ./message_source_source */ "./node_modules/@abaplint/core/build/src/abap/2_statements/expressions/message_source_source.js"), exports);
4824
4826
  __exportStar(__webpack_require__(/*! ./message_source */ "./node_modules/@abaplint/core/build/src/abap/2_statements/expressions/message_source.js"), exports);
4825
4827
  __exportStar(__webpack_require__(/*! ./message_type_and_number */ "./node_modules/@abaplint/core/build/src/abap/2_statements/expressions/message_type_and_number.js"), exports);
4826
4828
  __exportStar(__webpack_require__(/*! ./method_call_body */ "./node_modules/@abaplint/core/build/src/abap/2_statements/expressions/method_call_body.js"), exports);
@@ -4855,6 +4857,7 @@ __exportStar(__webpack_require__(/*! ./pass_by_value */ "./node_modules/@abaplin
4855
4857
  __exportStar(__webpack_require__(/*! ./perform_changing */ "./node_modules/@abaplint/core/build/src/abap/2_statements/expressions/perform_changing.js"), exports);
4856
4858
  __exportStar(__webpack_require__(/*! ./perform_tables */ "./node_modules/@abaplint/core/build/src/abap/2_statements/expressions/perform_tables.js"), exports);
4857
4859
  __exportStar(__webpack_require__(/*! ./perform_using */ "./node_modules/@abaplint/core/build/src/abap/2_statements/expressions/perform_using.js"), exports);
4860
+ __exportStar(__webpack_require__(/*! ./provide_field_name */ "./node_modules/@abaplint/core/build/src/abap/2_statements/expressions/provide_field_name.js"), exports);
4858
4861
  __exportStar(__webpack_require__(/*! ./radio_group_name */ "./node_modules/@abaplint/core/build/src/abap/2_statements/expressions/radio_group_name.js"), exports);
4859
4862
  __exportStar(__webpack_require__(/*! ./raise_with */ "./node_modules/@abaplint/core/build/src/abap/2_statements/expressions/raise_with.js"), exports);
4860
4863
  __exportStar(__webpack_require__(/*! ./read_table_target */ "./node_modules/@abaplint/core/build/src/abap/2_statements/expressions/read_table_target.js"), exports);
@@ -4898,7 +4901,6 @@ __exportStar(__webpack_require__(/*! ./sql_fields */ "./node_modules/@abaplint/c
4898
4901
  __exportStar(__webpack_require__(/*! ./sql_for_all_entries */ "./node_modules/@abaplint/core/build/src/abap/2_statements/expressions/sql_for_all_entries.js"), exports);
4899
4902
  __exportStar(__webpack_require__(/*! ./sql_from_source */ "./node_modules/@abaplint/core/build/src/abap/2_statements/expressions/sql_from_source.js"), exports);
4900
4903
  __exportStar(__webpack_require__(/*! ./sql_from */ "./node_modules/@abaplint/core/build/src/abap/2_statements/expressions/sql_from.js"), exports);
4901
- __exportStar(__webpack_require__(/*! ./provide_field_name */ "./node_modules/@abaplint/core/build/src/abap/2_statements/expressions/provide_field_name.js"), exports);
4902
4904
  __exportStar(__webpack_require__(/*! ./sql_function_input */ "./node_modules/@abaplint/core/build/src/abap/2_statements/expressions/sql_function_input.js"), exports);
4903
4905
  __exportStar(__webpack_require__(/*! ./sql_function */ "./node_modules/@abaplint/core/build/src/abap/2_statements/expressions/sql_function.js"), exports);
4904
4906
  __exportStar(__webpack_require__(/*! ./sql_group_by */ "./node_modules/@abaplint/core/build/src/abap/2_statements/expressions/sql_group_by.js"), exports);
@@ -5305,6 +5307,29 @@ exports.LoopGroupByTarget = LoopGroupByTarget;
5305
5307
 
5306
5308
  /***/ }),
5307
5309
 
5310
+ /***/ "./node_modules/@abaplint/core/build/src/abap/2_statements/expressions/loop_source.js":
5311
+ /*!********************************************************************************************!*\
5312
+ !*** ./node_modules/@abaplint/core/build/src/abap/2_statements/expressions/loop_source.js ***!
5313
+ \********************************************************************************************/
5314
+ /***/ ((__unused_webpack_module, exports, __webpack_require__) => {
5315
+
5316
+ "use strict";
5317
+
5318
+ Object.defineProperty(exports, "__esModule", ({ value: true }));
5319
+ exports.LoopSource = void 0;
5320
+ const combi_1 = __webpack_require__(/*! ../combi */ "./node_modules/@abaplint/core/build/src/abap/2_statements/combi.js");
5321
+ const _1 = __webpack_require__(/*! . */ "./node_modules/@abaplint/core/build/src/abap/2_statements/expressions/index.js");
5322
+ const version_1 = __webpack_require__(/*! ../../../version */ "./node_modules/@abaplint/core/build/src/version.js");
5323
+ class LoopSource extends combi_1.Expression {
5324
+ getRunnable() {
5325
+ return (0, combi_1.alt)(_1.SimpleSource2, (0, combi_1.ver)(version_1.Version.v740sp02, _1.Source, version_1.Version.OpenABAP));
5326
+ }
5327
+ }
5328
+ exports.LoopSource = LoopSource;
5329
+ //# sourceMappingURL=loop_source.js.map
5330
+
5331
+ /***/ }),
5332
+
5308
5333
  /***/ "./node_modules/@abaplint/core/build/src/abap/2_statements/expressions/loop_target.js":
5309
5334
  /*!********************************************************************************************!*\
5310
5335
  !*** ./node_modules/@abaplint/core/build/src/abap/2_statements/expressions/loop_target.js ***!
@@ -5423,6 +5448,29 @@ exports.MessageSource = MessageSource;
5423
5448
 
5424
5449
  /***/ }),
5425
5450
 
5451
+ /***/ "./node_modules/@abaplint/core/build/src/abap/2_statements/expressions/message_source_source.js":
5452
+ /*!******************************************************************************************************!*\
5453
+ !*** ./node_modules/@abaplint/core/build/src/abap/2_statements/expressions/message_source_source.js ***!
5454
+ \******************************************************************************************************/
5455
+ /***/ ((__unused_webpack_module, exports, __webpack_require__) => {
5456
+
5457
+ "use strict";
5458
+
5459
+ Object.defineProperty(exports, "__esModule", ({ value: true }));
5460
+ exports.MessageSourceSource = void 0;
5461
+ const combi_1 = __webpack_require__(/*! ../combi */ "./node_modules/@abaplint/core/build/src/abap/2_statements/combi.js");
5462
+ const _1 = __webpack_require__(/*! . */ "./node_modules/@abaplint/core/build/src/abap/2_statements/expressions/index.js");
5463
+ const version_1 = __webpack_require__(/*! ../../../version */ "./node_modules/@abaplint/core/build/src/version.js");
5464
+ class MessageSourceSource extends combi_1.Expression {
5465
+ getRunnable() {
5466
+ return (0, combi_1.alt)((0, combi_1.ver)(version_1.Version.v740sp02, _1.Source), _1.SimpleSource3);
5467
+ }
5468
+ }
5469
+ exports.MessageSourceSource = MessageSourceSource;
5470
+ //# sourceMappingURL=message_source_source.js.map
5471
+
5472
+ /***/ }),
5473
+
5426
5474
  /***/ "./node_modules/@abaplint/core/build/src/abap/2_statements/expressions/message_type_and_number.js":
5427
5475
  /*!********************************************************************************************************!*\
5428
5476
  !*** ./node_modules/@abaplint/core/build/src/abap/2_statements/expressions/message_type_and_number.js ***!
@@ -6741,7 +6789,7 @@ class Source extends combi_1.Expression {
6741
6789
  const prefix = (0, combi_1.altPrio)((0, combi_1.tok)(tokens_1.WPlus), "BIT-NOT");
6742
6790
  const old = (0, combi_1.seq)((0, combi_1.optPrio)(prefix), (0, combi_1.altPrio)(_1.Constant, _1.StringTemplate, text_element_1.TextElement, bool, method, (0, combi_1.seq)(_1.FieldChain, deref), paren), (0, combi_1.optPrio)(after));
6743
6791
  const corr = (0, combi_1.ver)(version_1.Version.v740sp05, (0, combi_1.seq)("CORRESPONDING", _1.TypeNameOrInfer, (0, combi_1.tok)(tokens_1.ParenLeftW), _1.CorrespondingBody, rparen, (0, combi_1.optPrio)(after)));
6744
- const conv = (0, combi_1.ver)(version_1.Version.v740sp02, (0, combi_1.seq)("CONV", _1.TypeNameOrInfer, lparenNoSpace, _1.ConvBody, rparenNoSpace, (0, combi_1.optPrio)(after)));
6792
+ const conv = (0, combi_1.ver)(version_1.Version.v740sp02, (0, combi_1.seq)("CONV", _1.TypeNameOrInfer, lparenNoSpace, _1.ConvBody, rparenNoSpace, (0, combi_1.optPrio)(after)), version_1.Version.OpenABAP);
6745
6793
  const swit = (0, combi_1.ver)(version_1.Version.v740sp02, (0, combi_1.seq)("SWITCH", _1.TypeNameOrInfer, (0, combi_1.tok)(tokens_1.ParenLeftW), _1.SwitchBody, rparenNoSpace, (0, combi_1.optPrio)(after)));
6746
6794
  const value = (0, combi_1.ver)(version_1.Version.v740sp02, (0, combi_1.seq)("VALUE", _1.TypeNameOrInfer, (0, combi_1.tok)(tokens_1.ParenLeftW), _1.ValueBody, rparenNoSpace, (0, combi_1.optPrio)(after)));
6747
6795
  const cond = (0, combi_1.ver)(version_1.Version.v740sp02, (0, combi_1.seq)("COND", _1.TypeNameOrInfer, (0, combi_1.tok)(tokens_1.ParenLeftW), _1.CondBody, rparenNoSpace, (0, combi_1.optPrio)(after)));
@@ -8445,7 +8493,7 @@ class TypeTableKey extends combi_1.Expression {
8445
8493
  getRunnable() {
8446
8494
  const uniqueness = (0, combi_1.alt)("NON-UNIQUE", "UNIQUE");
8447
8495
  const defaultKey = "DEFAULT KEY";
8448
- const emptyKey = (0, combi_1.ver)(version_1.Version.v740sp02, "EMPTY KEY");
8496
+ const emptyKey = (0, combi_1.ver)(version_1.Version.v740sp02, "EMPTY KEY", version_1.Version.OpenABAP);
8449
8497
  const components = (0, combi_1.plus)((0, combi_1.alt)((0, combi_1.seq)("WITH", (0, combi_1.failStar)()), _1.FieldSub));
8450
8498
  const further = (0, combi_1.seq)((0, combi_1.alt)("WITHOUT", "WITH"), "FURTHER SECONDARY KEYS");
8451
8499
  const alias = (0, combi_1.seq)("ALIAS", _1.Field);
@@ -13791,7 +13839,6 @@ exports.Loop = void 0;
13791
13839
  const combi_1 = __webpack_require__(/*! ../combi */ "./node_modules/@abaplint/core/build/src/abap/2_statements/combi.js");
13792
13840
  const expressions_1 = __webpack_require__(/*! ../expressions */ "./node_modules/@abaplint/core/build/src/abap/2_statements/expressions/index.js");
13793
13841
  const version_1 = __webpack_require__(/*! ../../../version */ "./node_modules/@abaplint/core/build/src/version.js");
13794
- const simple_source2_1 = __webpack_require__(/*! ../expressions/simple_source2 */ "./node_modules/@abaplint/core/build/src/abap/2_statements/expressions/simple_source2.js");
13795
13842
  const loop_group_by_1 = __webpack_require__(/*! ../expressions/loop_group_by */ "./node_modules/@abaplint/core/build/src/abap/2_statements/expressions/loop_group_by.js");
13796
13843
  class Loop {
13797
13844
  getMatcher() {
@@ -13802,7 +13849,7 @@ class Loop {
13802
13849
  const to = (0, combi_1.seq)("TO", expressions_1.Source);
13803
13850
  const usingKey = (0, combi_1.seq)("USING KEY", (0, combi_1.altPrio)(expressions_1.SimpleName, expressions_1.Dynamic));
13804
13851
  const options = (0, combi_1.per)(expressions_1.LoopTarget, from, to, where, usingKey, group, step);
13805
- const at = (0, combi_1.seq)("AT", (0, combi_1.opt)((0, combi_1.seq)("SCREEN", (0, combi_1.failCombinator)())), (0, combi_1.opt)((0, combi_1.ver)(version_1.Version.v740sp08, "GROUP")), (0, combi_1.alt)(simple_source2_1.SimpleSource2, (0, combi_1.ver)(version_1.Version.v740sp02, expressions_1.Source)), (0, combi_1.opt)(options));
13852
+ const at = (0, combi_1.seq)("AT", (0, combi_1.opt)((0, combi_1.seq)("SCREEN", (0, combi_1.failCombinator)())), (0, combi_1.opt)((0, combi_1.ver)(version_1.Version.v740sp08, "GROUP")), expressions_1.LoopSource, (0, combi_1.opt)(options));
13806
13853
  return (0, combi_1.seq)("LOOP", (0, combi_1.opt)(at));
13807
13854
  }
13808
13855
  }
@@ -13850,17 +13897,16 @@ const expressions_1 = __webpack_require__(/*! ../expressions */ "./node_modules/
13850
13897
  const version_1 = __webpack_require__(/*! ../../../version */ "./node_modules/@abaplint/core/build/src/version.js");
13851
13898
  class Message {
13852
13899
  getMatcher() {
13853
- const s = (0, combi_1.alt)((0, combi_1.ver)(version_1.Version.v740sp02, expressions_1.Source), expressions_1.SimpleSource3);
13854
13900
  const like = (0, combi_1.seq)("DISPLAY LIKE", expressions_1.Source);
13855
13901
  const into = (0, combi_1.seq)("INTO", expressions_1.Target);
13856
13902
  const raising = (0, combi_1.seq)("RAISING", expressions_1.ExceptionName);
13857
13903
  const options = (0, combi_1.per)(like, into, raising);
13858
13904
  const type = (0, combi_1.seq)("TYPE", expressions_1.Source);
13859
- const sou = (0, combi_1.altPrio)(options, s);
13860
- const sourc = (0, combi_1.alt)(sou, (0, combi_1.seq)(s, sou), (0, combi_1.seq)(s, s, sou), (0, combi_1.seq)(s, s, s, options));
13861
- const mwith = (0, combi_1.seq)("WITH", s, (0, combi_1.opt)(sourc));
13905
+ const sou = (0, combi_1.altPrio)(options, expressions_1.MessageSourceSource);
13906
+ const sourc = (0, combi_1.alt)(sou, (0, combi_1.seq)(expressions_1.MessageSourceSource, sou), (0, combi_1.seq)(expressions_1.MessageSourceSource, expressions_1.MessageSourceSource, sou), (0, combi_1.seq)(expressions_1.MessageSourceSource, expressions_1.MessageSourceSource, expressions_1.MessageSourceSource, options));
13907
+ const mwith = (0, combi_1.seq)("WITH", expressions_1.MessageSourceSource, (0, combi_1.opt)(sourc));
13862
13908
  const foo = (0, combi_1.seq)(expressions_1.MessageSource, (0, combi_1.opt)(options), (0, combi_1.opt)(mwith));
13863
- const text = (0, combi_1.seq)(s, type, (0, combi_1.optPrio)(like), (0, combi_1.optPrio)(raising));
13909
+ const text = (0, combi_1.seq)(expressions_1.MessageSourceSource, type, (0, combi_1.optPrio)(like), (0, combi_1.optPrio)(raising));
13864
13910
  const cloud1 = (0, combi_1.seq)((0, combi_1.opt)((0, combi_1.seq)("WITH", expressions_1.Source, (0, combi_1.opt)(expressions_1.Source), (0, combi_1.opt)(expressions_1.Source), (0, combi_1.opt)(expressions_1.Source))), (0, combi_1.altPrio)(into, raising));
13865
13911
  const cloud2 = (0, combi_1.seq)((0, combi_1.altPrio)(into, raising), (0, combi_1.opt)((0, combi_1.seq)("WITH", expressions_1.Source, (0, combi_1.opt)(expressions_1.Source), (0, combi_1.opt)(expressions_1.Source), (0, combi_1.opt)(expressions_1.Source))));
13866
13912
  const cloud = (0, combi_1.seq)(expressions_1.MessageSource, (0, combi_1.alt)(cloud1, cloud2));
@@ -31326,6 +31372,7 @@ const loop_group_by_1 = __webpack_require__(/*! ../expressions/loop_group_by */
31326
31372
  const _syntax_input_1 = __webpack_require__(/*! ../_syntax_input */ "./node_modules/@abaplint/core/build/src/abap/5_syntax/_syntax_input.js");
31327
31373
  class Loop {
31328
31374
  runSyntax(node, input) {
31375
+ var _a;
31329
31376
  const loopTarget = node.findDirectExpression(Expressions.LoopTarget);
31330
31377
  let target = loopTarget === null || loopTarget === void 0 ? void 0 : loopTarget.findDirectExpression(Expressions.Target);
31331
31378
  const targetType = target ? target_1.Target.runSyntax(target, input) : undefined;
@@ -31334,7 +31381,7 @@ class Loop {
31334
31381
  }
31335
31382
  const write = (loopTarget === null || loopTarget === void 0 ? void 0 : loopTarget.findDirectTokenByText("ASSIGNING")) !== undefined;
31336
31383
  const sources = node.findDirectExpressions(Expressions.Source);
31337
- let firstSource = node.findDirectExpression(Expressions.SimpleSource2);
31384
+ let firstSource = (_a = node.findDirectExpression(Expressions.LoopSource)) === null || _a === void 0 ? void 0 : _a.getFirstChild();
31338
31385
  if (firstSource === undefined) {
31339
31386
  firstSource = sources[0];
31340
31387
  }
@@ -31483,6 +31530,14 @@ class Message {
31483
31530
  else if (found) {
31484
31531
  target_1.Target.runSyntax(found, input);
31485
31532
  }
31533
+ for (const mss of node.findDirectExpressions(Expressions.MessageSourceSource)) {
31534
+ for (const s of mss.findDirectExpressions(Expressions.Source)) {
31535
+ source_1.Source.runSyntax(s, input);
31536
+ }
31537
+ for (const s of mss.findDirectExpressions(Expressions.SimpleSource3)) {
31538
+ source_1.Source.runSyntax(s, input);
31539
+ }
31540
+ }
31486
31541
  for (const s of node.findDirectExpressions(Expressions.Source)) {
31487
31542
  source_1.Source.runSyntax(s, input);
31488
31543
  }
@@ -53606,7 +53661,7 @@ class Registry {
53606
53661
  }
53607
53662
  static abaplintVersion() {
53608
53663
  // magic, see build script "version.sh"
53609
- return "2.113.152";
53664
+ return "2.113.154";
53610
53665
  }
53611
53666
  getDDICReferences() {
53612
53667
  return this.ddicReferences;
@@ -59625,11 +59680,14 @@ ${indentation}${uniqueName} = ${source.concatTokens()}.\n${indentation}`);
59625
59680
  return undefined;
59626
59681
  }
59627
59682
  downportMessageSource(high, lowFile, highSyntax) {
59683
+ var _a;
59628
59684
  if (!(high.get() instanceof Statements.Message)) {
59629
59685
  return undefined;
59630
59686
  }
59631
59687
  const source = high.findExpressionAfterToken("MESSAGE");
59632
- if ((source === null || source === void 0 ? void 0 : source.get()) instanceof Expressions.Source) {
59688
+ if ((source === null || source === void 0 ? void 0 : source.get()) instanceof Expressions.MessageSourceSource
59689
+ && ((_a = source.getFirstChild()) === null || _a === void 0 ? void 0 : _a.get()) instanceof Expressions.Source) {
59690
+ ;
59633
59691
  const uniqueName = this.uniqueName(high.getFirstToken().getStart(), lowFile.getFilename(), highSyntax);
59634
59692
  const indentation = " ".repeat(high.getFirstToken().getStart().getCol() - 1);
59635
59693
  const firstToken = high.getFirstToken();
@@ -59944,7 +60002,7 @@ ${indentation}${uniqueName2}->if_t100_message~t100key = ${uniqueName1}.\n`;
59944
60002
  }
59945
60003
  abap += `${indentation}RAISE EXCEPTION ${uniqueName2}.`;
59946
60004
  const fix = edit_helper_1.EditHelper.replaceRange(lowFile, node.getStart(), node.getEnd(), abap);
59947
- return issue_1.Issue.atToken(lowFile, startToken, "Downport RAISE MESSAGE", this.getMetadata().key, this.conf.severity, fix);
60005
+ return issue_1.Issue.atToken(lowFile, startToken, "Downport RAISE EXCEPTION MESSAGE", this.getMetadata().key, this.conf.severity, fix);
59948
60006
  }
59949
60007
  emptyKey(low, node, lowFile) {
59950
60008
  if (!(low.get() instanceof _statement_1.Unknown)) {
@@ -60488,17 +60546,18 @@ ${indentation} output = ${uniqueName}.\n`;
60488
60546
  return undefined;
60489
60547
  }
60490
60548
  outlineLoopInput(low, high, lowFile, highSyntax) {
60549
+ var _a, _b;
60491
60550
  if (!(low.get() instanceof _statement_1.Unknown)) {
60492
60551
  return undefined;
60493
60552
  }
60494
60553
  else if (!(high.get() instanceof Statements.Loop)) {
60495
60554
  return undefined;
60496
60555
  }
60497
- else if (high.findDirectExpression(Expressions.SimpleSource2)) {
60556
+ else if ((_a = high.findDirectExpression(Expressions.LoopSource)) === null || _a === void 0 ? void 0 : _a.findDirectExpression(Expressions.SimpleSource2)) {
60498
60557
  return undefined;
60499
60558
  }
60500
60559
  // the first Source must be outlined
60501
- const s = high.findDirectExpression(Expressions.Source);
60560
+ const s = (_b = high.findDirectExpression(Expressions.LoopSource)) === null || _b === void 0 ? void 0 : _b.findDirectExpression(Expressions.Source);
60502
60561
  if (s === undefined) {
60503
60562
  return undefined;
60504
60563
  }
@@ -60511,12 +60570,12 @@ ${indentation} output = ${uniqueName}.\n`;
60511
60570
  return issue_1.Issue.atToken(lowFile, high.getFirstToken(), "Outline LOOP input", this.getMetadata().key, this.conf.severity, fix);
60512
60571
  }
60513
60572
  outlineLoopTarget(node, lowFile, highSyntax) {
60514
- var _a, _b, _c, _d, _e, _f;
60573
+ var _a, _b, _c, _d, _e, _f, _g;
60515
60574
  // also allows outlining of voided types
60516
60575
  if (!(node.get() instanceof Statements.Loop)) {
60517
60576
  return undefined;
60518
60577
  }
60519
- const source = node.findDirectExpression(Expressions.SimpleSource2);
60578
+ const source = (_a = node.findDirectExpression(Expressions.LoopSource)) === null || _a === void 0 ? void 0 : _a.findDirectExpression(Expressions.SimpleSource2);
60520
60579
  if (source === undefined) {
60521
60580
  return undefined;
60522
60581
  }
@@ -60535,9 +60594,9 @@ ${indentation} output = ${uniqueName}.\n`;
60535
60594
  }
60536
60595
  const isReference = concat.includes(" REFERENCE INTO ");
60537
60596
  const indentation = " ".repeat(node.getFirstToken().getStart().getCol() - 1);
60538
- const dataTarget = (_b = (_a = node.findDirectExpression(Expressions.LoopTarget)) === null || _a === void 0 ? void 0 : _a.findDirectExpression(Expressions.Target)) === null || _b === void 0 ? void 0 : _b.findDirectExpression(Expressions.InlineData);
60597
+ const dataTarget = (_c = (_b = node.findDirectExpression(Expressions.LoopTarget)) === null || _b === void 0 ? void 0 : _b.findDirectExpression(Expressions.Target)) === null || _c === void 0 ? void 0 : _c.findDirectExpression(Expressions.InlineData);
60539
60598
  if (dataTarget) {
60540
- const targetName = ((_c = dataTarget.findDirectExpression(Expressions.TargetField)) === null || _c === void 0 ? void 0 : _c.concatTokens()) || "DOWNPORT_ERROR";
60599
+ const targetName = ((_d = dataTarget.findDirectExpression(Expressions.TargetField)) === null || _d === void 0 ? void 0 : _d.concatTokens()) || "DOWNPORT_ERROR";
60541
60600
  let code = `DATA ${targetName} LIKE LINE OF ${sourceName}.\n${indentation}`;
60542
60601
  if (isReference) {
60543
60602
  const likeName = this.uniqueName(node.getFirstToken().getStart(), lowFile.getFilename(), highSyntax);
@@ -60548,9 +60607,9 @@ ${indentation} output = ${uniqueName}.\n`;
60548
60607
  const fix = edit_helper_1.EditHelper.merge(fix2, fix1);
60549
60608
  return issue_1.Issue.atToken(lowFile, node.getFirstToken(), "Outline LOOP data target", this.getMetadata().key, this.conf.severity, fix);
60550
60609
  }
60551
- const fsTarget = (_e = (_d = node.findDirectExpression(Expressions.LoopTarget)) === null || _d === void 0 ? void 0 : _d.findDirectExpression(Expressions.FSTarget)) === null || _e === void 0 ? void 0 : _e.findDirectExpression(Expressions.InlineFS);
60610
+ const fsTarget = (_f = (_e = node.findDirectExpression(Expressions.LoopTarget)) === null || _e === void 0 ? void 0 : _e.findDirectExpression(Expressions.FSTarget)) === null || _f === void 0 ? void 0 : _f.findDirectExpression(Expressions.InlineFS);
60552
60611
  if (fsTarget) {
60553
- const targetName = ((_f = fsTarget.findDirectExpression(Expressions.TargetFieldSymbol)) === null || _f === void 0 ? void 0 : _f.concatTokens()) || "DOWNPORT_ERROR";
60612
+ const targetName = ((_g = fsTarget.findDirectExpression(Expressions.TargetFieldSymbol)) === null || _g === void 0 ? void 0 : _g.concatTokens()) || "DOWNPORT_ERROR";
60554
60613
  let type = `LIKE LINE OF ${sourceName}`;
60555
60614
  const f = foundType === null || foundType === void 0 ? void 0 : foundType.getType();
60556
60615
  if (f instanceof basic_1.TableType && f.getRowType() instanceof basic_1.AnyType) {
@@ -77445,9 +77504,9 @@ class Chunk {
77445
77504
  return this;
77446
77505
  }
77447
77506
  getMap(generatedFilename) {
77448
- const generator = new sourceMap.SourceMapGenerator();
77449
- this.mappings.forEach(m => generator.addMapping(m));
77450
- const json = generator.toJSON();
77507
+ const sourceMapGenerator = new sourceMap.SourceMapGenerator();
77508
+ this.mappings.forEach(m => sourceMapGenerator.addMapping(m));
77509
+ const json = sourceMapGenerator.toJSON();
77451
77510
  json.file = generatedFilename;
77452
77511
  json.sourceRoot = "";
77453
77512
  return JSON.stringify(json, null, 2);
@@ -79142,6 +79201,7 @@ __exportStar(__webpack_require__(/*! ./field_offset */ "./node_modules/@abaplint
79142
79201
  __exportStar(__webpack_require__(/*! ./field_symbol */ "./node_modules/@abaplint/transpiler/build/src/expressions/field_symbol.js"), exports);
79143
79202
  __exportStar(__webpack_require__(/*! ./function_exporting */ "./node_modules/@abaplint/transpiler/build/src/expressions/function_exporting.js"), exports);
79144
79203
  __exportStar(__webpack_require__(/*! ./source_field_symbol_chain */ "./node_modules/@abaplint/transpiler/build/src/expressions/source_field_symbol_chain.js"), exports);
79204
+ __exportStar(__webpack_require__(/*! ./type_name_or_infer */ "./node_modules/@abaplint/transpiler/build/src/expressions/type_name_or_infer.js"), exports);
79145
79205
  __exportStar(__webpack_require__(/*! ./function_parameters */ "./node_modules/@abaplint/transpiler/build/src/expressions/function_parameters.js"), exports);
79146
79206
  __exportStar(__webpack_require__(/*! ./message_number */ "./node_modules/@abaplint/transpiler/build/src/expressions/message_number.js"), exports);
79147
79207
  __exportStar(__webpack_require__(/*! ./method_call_body */ "./node_modules/@abaplint/transpiler/build/src/expressions/method_call_body.js"), exports);
@@ -79894,7 +79954,7 @@ class SourceTranspiler {
79894
79954
  const children = node.getChildren();
79895
79955
  for (let i = 0; i < children.length; i++) {
79896
79956
  const c = children[i];
79897
- const last = i === children.length - 1;
79957
+ const isLast = i === children.length - 1;
79898
79958
  if (c instanceof core_1.Nodes.ExpressionNode) {
79899
79959
  if (c.get() instanceof core_1.Expressions.FieldChain) {
79900
79960
  ret.appendChunk(new _1.FieldChainTranspiler(this.addGet).transpile(c, traversal));
@@ -79921,7 +79981,7 @@ class SourceTranspiler {
79921
79981
  if (code.includes("await")) {
79922
79982
  ret = new chunk_1.Chunk().appendString("(").appendChunk(ret).appendString(")");
79923
79983
  }
79924
- if (this.addGet && last === true) {
79984
+ if (this.addGet && isLast === true) {
79925
79985
  ret.append(".get()", c, traversal);
79926
79986
  }
79927
79987
  }
@@ -79937,7 +79997,7 @@ class SourceTranspiler {
79937
79997
  else if (c.get() instanceof core_1.Expressions.ComponentChain) {
79938
79998
  ret = new chunk_1.Chunk().appendString("(").appendChunk(ret).appendString(").get().");
79939
79999
  ret.appendChunk(new _1.ComponentChainTranspiler().transpile(c, traversal));
79940
- if (this.addGet && last === true) {
80000
+ if (this.addGet && isLast === true) {
79941
80001
  ret.append(".get()", c, traversal);
79942
80002
  }
79943
80003
  }
@@ -79947,6 +80007,17 @@ class SourceTranspiler {
79947
80007
  else if (c.get() instanceof core_1.Expressions.TextElement) {
79948
80008
  ret = new chunk_1.Chunk().appendString(`new abap.types.String().set("${c.concatTokens()}")`);
79949
80009
  }
80010
+ else if (c.get() instanceof core_1.Expressions.ConvBody) {
80011
+ const typ = node.findFirstExpression(core_1.Expressions.TypeNameOrInfer);
80012
+ if (typ === undefined) {
80013
+ throw new Error("TypeNameOrInfer not found in ConvBody");
80014
+ }
80015
+ ret = new chunk_1.Chunk().appendString(new _1.TypeNameOrInfer().transpile(typ, traversal).getCode());
80016
+ ret.appendString(".set(");
80017
+ // todo: handle LET
80018
+ ret.appendString(traversal.traverse(c.getFirstChild()).getCode());
80019
+ ret.appendString(")");
80020
+ }
79950
80021
  else {
79951
80022
  ret.appendString("SourceUnknown-" + c.get().constructor.name);
79952
80023
  }
@@ -80911,6 +80982,41 @@ exports.TargetTranspiler = TargetTranspiler;
80911
80982
 
80912
80983
  /***/ }),
80913
80984
 
80985
+ /***/ "./node_modules/@abaplint/transpiler/build/src/expressions/type_name_or_infer.js":
80986
+ /*!***************************************************************************************!*\
80987
+ !*** ./node_modules/@abaplint/transpiler/build/src/expressions/type_name_or_infer.js ***!
80988
+ \***************************************************************************************/
80989
+ /***/ ((__unused_webpack_module, exports, __webpack_require__) => {
80990
+
80991
+ "use strict";
80992
+
80993
+ Object.defineProperty(exports, "__esModule", ({ value: true }));
80994
+ exports.TypeNameOrInfer = void 0;
80995
+ const chunk_1 = __webpack_require__(/*! ../chunk */ "./node_modules/@abaplint/transpiler/build/src/chunk.js");
80996
+ const transpile_types_1 = __webpack_require__(/*! ../transpile_types */ "./node_modules/@abaplint/transpiler/build/src/transpile_types.js");
80997
+ class TypeNameOrInfer {
80998
+ transpile(node, traversal) {
80999
+ let type;
81000
+ const scope = traversal.findCurrentScopeByToken(node.getFirstToken());
81001
+ if (node.concatTokens() === "#") {
81002
+ type = traversal.lookupInferred(node, scope);
81003
+ }
81004
+ else {
81005
+ type = traversal.lookupType(node.getFirstChild(), scope);
81006
+ }
81007
+ if (type === undefined) {
81008
+ throw new Error("TypeNameOrInfer, type not found: " + node.concatTokens());
81009
+ }
81010
+ const ret = new chunk_1.Chunk();
81011
+ ret.appendString(new transpile_types_1.TranspileTypes().toType(type));
81012
+ return ret;
81013
+ }
81014
+ }
81015
+ exports.TypeNameOrInfer = TypeNameOrInfer;
81016
+ //# sourceMappingURL=type_name_or_infer.js.map
81017
+
81018
+ /***/ }),
81019
+
80914
81020
  /***/ "./node_modules/@abaplint/transpiler/build/src/feature_flags.js":
80915
81021
  /*!**********************************************************************!*\
80916
81022
  !*** ./node_modules/@abaplint/transpiler/build/src/feature_flags.js ***!
@@ -81877,7 +81983,7 @@ exports.Initialization = Initialization;
81877
81983
  Object.defineProperty(exports, "__esModule", ({ value: true }));
81878
81984
  exports.DEFAULT_KEYWORDS = void 0;
81879
81985
  // https://www.w3schools.com/js/js_reserved.asp
81880
- exports.DEFAULT_KEYWORDS = [
81986
+ exports.DEFAULT_KEYWORDS = new Set([
81881
81987
  "abstract", "arguments", "await",
81882
81988
  "break", "byte", "catch",
81883
81989
  // "char",
@@ -81896,7 +82002,7 @@ exports.DEFAULT_KEYWORDS = [
81896
82002
  "try", "typeof", "var", "void",
81897
82003
  "delete",
81898
82004
  "volatile", "while", "yield"
81899
- ];
82005
+ ]);
81900
82006
  // "with"
81901
82007
  //# sourceMappingURL=keywords.js.map
81902
82008
 
@@ -85339,7 +85445,8 @@ class LoopTranspiler {
85339
85445
  if (!(node.get() instanceof abaplint.Statements.Loop)) {
85340
85446
  throw new Error("LoopTranspiler, unexpected node");
85341
85447
  }
85342
- const source = traversal.traverse(node.findDirectExpression(abaplint.Expressions.SimpleSource2)).getCode();
85448
+ const loopSource = node.findDirectExpression(abaplint.Expressions.LoopSource)?.getFirstChild();
85449
+ const source = traversal.traverse(loopSource).getCode();
85343
85450
  this.unique = unique_identifier_1.UniqueIdentifier.get();
85344
85451
  let target = "";
85345
85452
  const into = node.findDirectExpression(abaplint.Expressions.LoopTarget)?.findDirectExpression(abaplint.Expressions.Target);
@@ -85543,7 +85650,7 @@ class MessageTranspiler {
85543
85650
  }
85544
85651
  else {
85545
85652
  // exception or constant based
85546
- const exception = node.findDirectExpression(abaplint.Expressions.SimpleSource3);
85653
+ const exception = node.findDirectExpression(abaplint.Expressions.MessageSourceSource)?.findDirectExpression(abaplint.Expressions.SimpleSource3);
85547
85654
  const str = exception?.findFirstExpression(abaplint.Expressions.Constant);
85548
85655
  if (str) {
85549
85656
  options.push("text: " + traversal.traverse(str).getCode());
@@ -85566,11 +85673,10 @@ class MessageTranspiler {
85566
85673
  if (c.getFirstToken().getStr().toUpperCase() === "WITH") {
85567
85674
  withs = true;
85568
85675
  }
85569
- else if (withs === true && c.get() instanceof abaplint.Expressions.Source) {
85570
- w.push(traversal.traverse(c).getCode());
85571
- }
85572
- else if (withs === true && c.get() instanceof abaplint.Expressions.SimpleSource3) {
85573
- w.push(traversal.traverse(c).getCode());
85676
+ else if (withs === true
85677
+ && c.get() instanceof abaplint.Expressions.MessageSourceSource
85678
+ && c instanceof abaplint.Nodes.ExpressionNode) {
85679
+ w.push(traversal.traverse(c.getFirstChild()).getCode());
85574
85680
  }
85575
85681
  else if (withs === true) {
85576
85682
  break;
@@ -89372,24 +89478,8 @@ class TranspileTypes {
89372
89478
  const list = [];
89373
89479
  const suffix = {};
89374
89480
  const asInclude = {};
89375
- /*
89376
- const skipFields: Set<string> = new Set();
89377
-
89378
- for (const c of type.getComponents()) {
89379
- if (c.type instanceof abaplint.BasicTypes.StructureType) {
89380
- for (const f of c.type.getComponents()) {
89381
- skipFields.add(f.name.toLowerCase());
89382
- }
89383
- }
89384
- }
89385
- */
89386
89481
  for (const c of type.getComponents()) {
89387
89482
  const lower = c.name.toLowerCase();
89388
- /*
89389
- if (skipFields.has(lower)) {
89390
- continue; // skip fields from nested structures
89391
- }
89392
- */
89393
89483
  list.push(`"` + lower + `": ` + this.toType(c.type));
89394
89484
  if (c.suffix) {
89395
89485
  suffix[lower] = c.suffix;
@@ -89544,8 +89634,7 @@ class Traversal {
89544
89634
  return name?.replace(/\//g, "$");
89545
89635
  }
89546
89636
  static prefixVariable(name) {
89547
- // TODO: performace, make this a hash lookup?,
89548
- if (keywords_1.DEFAULT_KEYWORDS.some(k => k === name)) {
89637
+ if (name && keywords_1.DEFAULT_KEYWORDS.has(name)) {
89549
89638
  return "$" + name;
89550
89639
  }
89551
89640
  return name + "";
@@ -89920,6 +90009,36 @@ class Traversal {
89920
90009
  }
89921
90010
  return undefined;
89922
90011
  }
90012
+ findInferredTypeReference(token) {
90013
+ const scope = this.findCurrentScopeByToken(token);
90014
+ if (scope === undefined) {
90015
+ return undefined;
90016
+ }
90017
+ for (const r of scope.getData().references) {
90018
+ if (r.referenceType === abaplint.ReferenceType.InferredType
90019
+ && r.position.getStart().equals(token.getStart())) {
90020
+ if (r.resolved instanceof abaplint.TypedIdentifier) {
90021
+ return r.resolved.getType();
90022
+ }
90023
+ }
90024
+ }
90025
+ return undefined;
90026
+ }
90027
+ findTypeReference(token) {
90028
+ const scope = this.findCurrentScopeByToken(token);
90029
+ if (scope === undefined) {
90030
+ return undefined;
90031
+ }
90032
+ for (const r of scope.getData().references) {
90033
+ if (r.referenceType === abaplint.ReferenceType.TypeReference
90034
+ && r.position.getStart().equals(token.getStart())) {
90035
+ if (r.resolved instanceof abaplint.TypedIdentifier) {
90036
+ return r.resolved.getType();
90037
+ }
90038
+ }
90039
+ }
90040
+ return undefined;
90041
+ }
89923
90042
  buildThisAttributes(def, cName) {
89924
90043
  let ret = "";
89925
90044
  for (const a of def.getAttributes()?.getAll() || []) {
@@ -90092,6 +90211,50 @@ this.INTERNAL_ID = abap.internalIdCounter++;\n`;
90092
90211
  }
90093
90212
  return ret;
90094
90213
  }
90214
+ lookupType(node, scope) {
90215
+ if (scope === undefined) {
90216
+ return undefined;
90217
+ }
90218
+ else if (!(node.get() instanceof abaplint.Expressions.TypeName)) {
90219
+ throw new Error("lookupType, node is not a TypeName, " + node.get());
90220
+ }
90221
+ const name = node.concatTokens().toLowerCase();
90222
+ switch (name) {
90223
+ case "i":
90224
+ return abaplint.BasicTypes.IntegerType.get();
90225
+ case "f":
90226
+ return new abaplint.BasicTypes.FloatType();
90227
+ case "string":
90228
+ return abaplint.BasicTypes.StringType.get();
90229
+ case "xstring":
90230
+ return abaplint.BasicTypes.XStringType.get();
90231
+ case "d":
90232
+ return new abaplint.BasicTypes.DateType();
90233
+ case "t":
90234
+ return new abaplint.BasicTypes.TimeType();
90235
+ default:
90236
+ break;
90237
+ }
90238
+ const found = this.findTypeReference(node.getFirstToken());
90239
+ if (found !== undefined) {
90240
+ return found;
90241
+ }
90242
+ const dtel = this.reg.getObject("DTEL", name);
90243
+ if (dtel) {
90244
+ return dtel.parseType(this.reg);
90245
+ }
90246
+ // todo: yea, well, yea
90247
+ throw new Error("lookupType, type not found, " + node.concatTokens());
90248
+ }
90249
+ lookupInferred(node, scope) {
90250
+ if (scope === undefined) {
90251
+ return undefined;
90252
+ }
90253
+ else if (node.concatTokens() !== "#") {
90254
+ throw new Error("lookupInferred, unexpected, " + node.get());
90255
+ }
90256
+ return this.findInferredTypeReference(node.getFirstToken());
90257
+ }
90095
90258
  determineType(node, scope) {
90096
90259
  if (scope === undefined) {
90097
90260
  return undefined;
@@ -90702,6 +90865,13 @@ class Validation {
90702
90865
  // this is not a constant, just a regex that happens to not match anything
90703
90866
  exports.config.syntax.errorNamespace = "VOID_EVERYTHING";
90704
90867
  }
90868
+ if (this.options?.skipVersionCheck === true) {
90869
+ // todo, set it to abaplint default version
90870
+ exports.config.syntax.version = core_1.Version.v758;
90871
+ }
90872
+ else {
90873
+ exports.config.syntax.version = core_1.Version.OpenABAP;
90874
+ }
90705
90875
  const conf = new core_1.Config(JSON.stringify(exports.config));
90706
90876
  reg.setConfig(conf);
90707
90877
  const issues = reg.findIssues();
@@ -101690,21 +101860,18 @@ async function loadLib(config) {
101690
101860
  }
101691
101861
  return files;
101692
101862
  }
101693
- function writeObjects(objects, config, outputFolder, files) {
101863
+ function writeObjects(outputFiles, config, outputFolder, files) {
101694
101864
  const writeSourceMaps = config.write_source_map || false;
101695
- for (const o of objects) {
101696
- let contents = o.chunk.getCode();
101865
+ for (const output of outputFiles) {
101866
+ let contents = output.chunk.getCode();
101697
101867
  if (writeSourceMaps === true
101698
- && o.object.type.toUpperCase() !== "TABL"
101699
- && o.object.type.toUpperCase() !== "DTEL"
101700
- && o.object.type.toUpperCase() !== "W3MI"
101701
- && o.object.type.toUpperCase() !== "SMIM"
101702
- && o.object.type.toUpperCase() !== "ENQU"
101703
- && o.object.type.toUpperCase() !== "TTYP") {
101704
- const name = o.filename + ".map";
101868
+ && output.object.type.toUpperCase() === "PROG"
101869
+ && output.object.type.toUpperCase() === "FUGR"
101870
+ && output.object.type.toUpperCase() === "CLAS") {
101871
+ const name = output.filename + ".map";
101705
101872
  // SourceMappingUrl needs to be percent-encoded, ref https://github.com/microsoft/TypeScript/issues/40951
101706
101873
  contents = contents + `\n//# sourceMappingURL=` + name.replace(/#/g, "%23");
101707
- let map = o.chunk.getMap(o.filename);
101874
+ let map = output.chunk.getMap(output.filename);
101708
101875
  for (const f of files) { // hack the paths to the original files
101709
101876
  if (f.relative === undefined) {
101710
101877
  continue;
@@ -101717,11 +101884,11 @@ function writeObjects(objects, config, outputFolder, files) {
101717
101884
  }
101718
101885
  fs.writeFileSync(outputFolder + path.sep + name, map);
101719
101886
  }
101720
- if (o.object.type.toUpperCase() === "PROG") {
101887
+ if (output.object.type.toUpperCase() === "PROG") {
101721
101888
  // hmm, will this work for INCLUDEs ?
101722
101889
  contents = `if (!globalThis.abap) await import("./_init.mjs");\n` + contents;
101723
101890
  }
101724
- fs.writeFileSync(outputFolder + path.sep + o.filename, contents);
101891
+ fs.writeFileSync(outputFolder + path.sep + output.filename, contents);
101725
101892
  }
101726
101893
  }
101727
101894
  async function run() {
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@abaplint/transpiler-cli",
3
- "version": "2.11.7",
3
+ "version": "2.11.9",
4
4
  "description": "Transpiler - Command Line Interface",
5
5
  "funding": "https://github.com/sponsors/larshp",
6
6
  "bin": {
@@ -27,8 +27,8 @@
27
27
  "author": "abaplint",
28
28
  "license": "MIT",
29
29
  "devDependencies": {
30
- "@abaplint/core": "^2.113.152",
31
- "@abaplint/transpiler": "^2.11.7",
30
+ "@abaplint/core": "^2.113.154",
31
+ "@abaplint/transpiler": "^2.11.9",
32
32
  "@types/glob": "^8.1.0",
33
33
  "@types/node": "^24.2.0",
34
34
  "@types/progress": "^2.0.7",