@abaplint/cli 2.101.14 → 2.101.15

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/cli.js +286 -219
  2. package/package.json +2 -2
package/build/cli.js CHANGED
@@ -893,6 +893,7 @@ async function run(arg) {
893
893
  await reg.parseAsync({ progress, outputPerformance: arg.performanceInformation });
894
894
  if (arg.runFix !== true) {
895
895
  issues = issues.concat(reg.findIssues({ progress, outputPerformance: arg.performanceInformation }));
896
+ // require('v8').writeHeapSnapshot();
896
897
  }
897
898
  }
898
899
  catch (error) {
@@ -19371,14 +19372,14 @@ class BuiltIn {
19371
19372
  ret.push(this.buildConstant("abap_undefined", new basic_1.CharacterType(1, { qualifiedName: "ABAP_BOOL", ddicName: "ABAP_BOOL" }), "'-'"));
19372
19373
  ret.push(this.buildConstant("abap_off", new basic_1.CharacterType(1, { qualifiedName: "ABAP_BOOL", ddicName: "ABAP_BOOL" }), "' '"));
19373
19374
  ret.push(this.buildConstant("abap_on", new basic_1.CharacterType(1, { qualifiedName: "ABAP_BOOL", ddicName: "ABAP_BOOL" }), "'X'"));
19374
- ret.push(this.buildConstant("col_background", new basic_1.IntegerType(), "0"));
19375
- ret.push(this.buildConstant("col_heading", new basic_1.IntegerType(), "1"));
19376
- ret.push(this.buildConstant("col_key", new basic_1.IntegerType(), "4"));
19377
- ret.push(this.buildConstant("col_negative", new basic_1.IntegerType(), "6"));
19378
- ret.push(this.buildConstant("col_group", new basic_1.IntegerType(), "7"));
19379
- ret.push(this.buildConstant("col_normal", new basic_1.IntegerType(), "2"));
19380
- ret.push(this.buildConstant("col_positive", new basic_1.IntegerType(), "5"));
19381
- ret.push(this.buildConstant("col_total", new basic_1.IntegerType(), "3"));
19375
+ ret.push(this.buildConstant("col_background", basic_1.IntegerType.get(), "0"));
19376
+ ret.push(this.buildConstant("col_heading", basic_1.IntegerType.get(), "1"));
19377
+ ret.push(this.buildConstant("col_key", basic_1.IntegerType.get(), "4"));
19378
+ ret.push(this.buildConstant("col_negative", basic_1.IntegerType.get(), "6"));
19379
+ ret.push(this.buildConstant("col_group", basic_1.IntegerType.get(), "7"));
19380
+ ret.push(this.buildConstant("col_normal", basic_1.IntegerType.get(), "2"));
19381
+ ret.push(this.buildConstant("col_positive", basic_1.IntegerType.get(), "5"));
19382
+ ret.push(this.buildConstant("col_total", basic_1.IntegerType.get(), "3"));
19382
19383
  ret.push(this.buildConstant("space", new basic_1.CharacterType(1, { derivedFromConstant: true }), "' '"));
19383
19384
  for (const e of extras) {
19384
19385
  const id = new tokens_1.Identifier(new position_1.Position(this.row++, 1), e);
@@ -19390,50 +19391,50 @@ class BuiltIn {
19390
19391
  buildSY() {
19391
19392
  const components = [];
19392
19393
  // NOTE: fields must be in correct sequence for the syntax check
19393
- components.push({ name: "index", type: new basic_1.IntegerType() });
19394
- components.push({ name: "pagno", type: new basic_1.IntegerType() });
19395
- components.push({ name: "tabix", type: new basic_1.IntegerType() });
19396
- components.push({ name: "tfill", type: new basic_1.IntegerType() });
19397
- components.push({ name: "tlopc", type: new basic_1.IntegerType() });
19398
- components.push({ name: "tmaxl", type: new basic_1.IntegerType() });
19399
- components.push({ name: "toccu", type: new basic_1.IntegerType() });
19400
- components.push({ name: "ttabc", type: new basic_1.IntegerType() });
19401
- components.push({ name: "tstis", type: new basic_1.IntegerType() });
19402
- components.push({ name: "ttabi", type: new basic_1.IntegerType() });
19403
- components.push({ name: "dbcnt", type: new basic_1.IntegerType() });
19404
- components.push({ name: "fdpos", type: new basic_1.IntegerType() });
19405
- components.push({ name: "colno", type: new basic_1.IntegerType() });
19406
- components.push({ name: "linct", type: new basic_1.IntegerType() });
19407
- components.push({ name: "linno", type: new basic_1.IntegerType() });
19408
- components.push({ name: "linsz", type: new basic_1.IntegerType() });
19409
- components.push({ name: "pagct", type: new basic_1.IntegerType() });
19410
- components.push({ name: "macol", type: new basic_1.IntegerType() });
19411
- components.push({ name: "marow", type: new basic_1.IntegerType() });
19412
- components.push({ name: "tleng", type: new basic_1.IntegerType() });
19413
- components.push({ name: "sfoff", type: new basic_1.IntegerType() });
19414
- components.push({ name: "willi", type: new basic_1.IntegerType() });
19415
- components.push({ name: "lilli", type: new basic_1.IntegerType() });
19416
- components.push({ name: "subrc", type: new basic_1.IntegerType() });
19417
- components.push({ name: "fleng", type: new basic_1.IntegerType() });
19418
- components.push({ name: "cucol", type: new basic_1.IntegerType() });
19419
- components.push({ name: "curow", type: new basic_1.IntegerType() });
19420
- components.push({ name: "lsind", type: new basic_1.IntegerType() });
19421
- components.push({ name: "listi", type: new basic_1.IntegerType() });
19422
- components.push({ name: "stepl", type: new basic_1.IntegerType() });
19423
- components.push({ name: "tpagi", type: new basic_1.IntegerType() });
19424
- components.push({ name: "winx1", type: new basic_1.IntegerType() });
19425
- components.push({ name: "winy1", type: new basic_1.IntegerType() });
19426
- components.push({ name: "winx2", type: new basic_1.IntegerType() });
19427
- components.push({ name: "winy2", type: new basic_1.IntegerType() });
19428
- components.push({ name: "winco", type: new basic_1.IntegerType() });
19429
- components.push({ name: "winro", type: new basic_1.IntegerType() });
19430
- components.push({ name: "windi", type: new basic_1.IntegerType() });
19431
- components.push({ name: "srows", type: new basic_1.IntegerType() });
19432
- components.push({ name: "scols", type: new basic_1.IntegerType() });
19433
- components.push({ name: "loopc", type: new basic_1.IntegerType() });
19434
- components.push({ name: "folen", type: new basic_1.IntegerType() });
19435
- components.push({ name: "fodec", type: new basic_1.IntegerType() });
19436
- components.push({ name: "tzone", type: new basic_1.IntegerType() });
19394
+ components.push({ name: "index", type: basic_1.IntegerType.get() });
19395
+ components.push({ name: "pagno", type: basic_1.IntegerType.get() });
19396
+ components.push({ name: "tabix", type: basic_1.IntegerType.get() });
19397
+ components.push({ name: "tfill", type: basic_1.IntegerType.get() });
19398
+ components.push({ name: "tlopc", type: basic_1.IntegerType.get() });
19399
+ components.push({ name: "tmaxl", type: basic_1.IntegerType.get() });
19400
+ components.push({ name: "toccu", type: basic_1.IntegerType.get() });
19401
+ components.push({ name: "ttabc", type: basic_1.IntegerType.get() });
19402
+ components.push({ name: "tstis", type: basic_1.IntegerType.get() });
19403
+ components.push({ name: "ttabi", type: basic_1.IntegerType.get() });
19404
+ components.push({ name: "dbcnt", type: basic_1.IntegerType.get() });
19405
+ components.push({ name: "fdpos", type: basic_1.IntegerType.get() });
19406
+ components.push({ name: "colno", type: basic_1.IntegerType.get() });
19407
+ components.push({ name: "linct", type: basic_1.IntegerType.get() });
19408
+ components.push({ name: "linno", type: basic_1.IntegerType.get() });
19409
+ components.push({ name: "linsz", type: basic_1.IntegerType.get() });
19410
+ components.push({ name: "pagct", type: basic_1.IntegerType.get() });
19411
+ components.push({ name: "macol", type: basic_1.IntegerType.get() });
19412
+ components.push({ name: "marow", type: basic_1.IntegerType.get() });
19413
+ components.push({ name: "tleng", type: basic_1.IntegerType.get() });
19414
+ components.push({ name: "sfoff", type: basic_1.IntegerType.get() });
19415
+ components.push({ name: "willi", type: basic_1.IntegerType.get() });
19416
+ components.push({ name: "lilli", type: basic_1.IntegerType.get() });
19417
+ components.push({ name: "subrc", type: basic_1.IntegerType.get() });
19418
+ components.push({ name: "fleng", type: basic_1.IntegerType.get() });
19419
+ components.push({ name: "cucol", type: basic_1.IntegerType.get() });
19420
+ components.push({ name: "curow", type: basic_1.IntegerType.get() });
19421
+ components.push({ name: "lsind", type: basic_1.IntegerType.get() });
19422
+ components.push({ name: "listi", type: basic_1.IntegerType.get() });
19423
+ components.push({ name: "stepl", type: basic_1.IntegerType.get() });
19424
+ components.push({ name: "tpagi", type: basic_1.IntegerType.get() });
19425
+ components.push({ name: "winx1", type: basic_1.IntegerType.get() });
19426
+ components.push({ name: "winy1", type: basic_1.IntegerType.get() });
19427
+ components.push({ name: "winx2", type: basic_1.IntegerType.get() });
19428
+ components.push({ name: "winy2", type: basic_1.IntegerType.get() });
19429
+ components.push({ name: "winco", type: basic_1.IntegerType.get() });
19430
+ components.push({ name: "winro", type: basic_1.IntegerType.get() });
19431
+ components.push({ name: "windi", type: basic_1.IntegerType.get() });
19432
+ components.push({ name: "srows", type: basic_1.IntegerType.get() });
19433
+ components.push({ name: "scols", type: basic_1.IntegerType.get() });
19434
+ components.push({ name: "loopc", type: basic_1.IntegerType.get() });
19435
+ components.push({ name: "folen", type: basic_1.IntegerType.get() });
19436
+ components.push({ name: "fodec", type: basic_1.IntegerType.get() });
19437
+ components.push({ name: "tzone", type: basic_1.IntegerType.get() });
19437
19438
  components.push({ name: "dayst", type: new basic_1.CharacterType(1) });
19438
19439
  components.push({ name: "ftype", type: new basic_1.CharacterType(1) });
19439
19440
  components.push({ name: "appli", type: new basic_1.HexType(2) });
@@ -19444,7 +19445,7 @@ class BuiltIn {
19444
19445
  components.push({ name: "ctype", type: new basic_1.CharacterType(1) });
19445
19446
  components.push({ name: "input", type: new basic_1.CharacterType(1, { qualifiedName: "sy-input" }) });
19446
19447
  components.push({ name: "langu", type: new basic_1.CharacterType(1, { qualifiedName: "sy-langu", conversionExit: "ISOLA" }) });
19447
- components.push({ name: "modno", type: new basic_1.IntegerType() });
19448
+ components.push({ name: "modno", type: basic_1.IntegerType.get() });
19448
19449
  components.push({ name: "batch", type: new basic_1.CharacterType(1, { qualifiedName: "sy-batch" }) });
19449
19450
  components.push({ name: "binpt", type: new basic_1.CharacterType(1, { qualifiedName: "sy-binpt" }) });
19450
19451
  components.push({ name: "calld", type: new basic_1.CharacterType(1, { qualifiedName: "sy-calld" }) });
@@ -19454,7 +19455,7 @@ class BuiltIn {
19454
19455
  components.push({ name: "pri40", type: new basic_1.CharacterType(1) });
19455
19456
  components.push({ name: "rstrt", type: new basic_1.CharacterType(1) });
19456
19457
  components.push({ name: "wtitl", type: new basic_1.CharacterType(1, { qualifiedName: "sy-wtitl" }) });
19457
- components.push({ name: "cpage", type: new basic_1.IntegerType() });
19458
+ components.push({ name: "cpage", type: basic_1.IntegerType.get() });
19458
19459
  components.push({ name: "dbnam", type: new basic_1.CharacterType(20, { qualifiedName: "sy-dbnam" }) });
19459
19460
  components.push({ name: "mandt", type: new basic_1.CharacterType(3, { qualifiedName: "sy-mandt" }) });
19460
19461
  components.push({ name: "prefx", type: new basic_1.CharacterType(3) });
@@ -19552,8 +19553,8 @@ class BuiltIn {
19552
19553
  components.push({ name: "oncom", type: new basic_1.CharacterType(1) });
19553
19554
  components.push({ name: "vline", type: new basic_1.CharacterType(1, { qualifiedName: "sy-vline" }) });
19554
19555
  components.push({ name: "winsl", type: new basic_1.CharacterType(79) });
19555
- components.push({ name: "staco", type: new basic_1.IntegerType() });
19556
- components.push({ name: "staro", type: new basic_1.IntegerType() });
19556
+ components.push({ name: "staco", type: basic_1.IntegerType.get() });
19557
+ components.push({ name: "staro", type: basic_1.IntegerType.get() });
19557
19558
  components.push({ name: "datar", type: new basic_1.CharacterType(1, { qualifiedName: "sy-datar" }) });
19558
19559
  components.push({ name: "host", type: new basic_1.CharacterType(32, { qualifiedName: "sy-host" }) });
19559
19560
  components.push({ name: "locdb", type: new basic_1.CharacterType(1) });
@@ -19596,7 +19597,7 @@ BuiltIn.methods = [
19596
19597
  mandatory: {
19597
19598
  "val": new basic_1.FloatType(),
19598
19599
  },
19599
- return: new basic_1.IntegerType(),
19600
+ return: basic_1.IntegerType.get(),
19600
19601
  },
19601
19602
  {
19602
19603
  name: "ACOS",
@@ -19622,7 +19623,7 @@ BuiltIn.methods = [
19622
19623
  {
19623
19624
  name: "BIT-SET",
19624
19625
  mandatory: {
19625
- "val": new basic_1.IntegerType(),
19626
+ "val": basic_1.IntegerType.get(),
19626
19627
  },
19627
19628
  return: new basic_1.XStringType(),
19628
19629
  version: version_1.Version.v702,
@@ -19632,7 +19633,7 @@ BuiltIn.methods = [
19632
19633
  mandatory: {
19633
19634
  "val": new basic_1.CLikeType(),
19634
19635
  },
19635
- return: new basic_1.StringType(),
19636
+ return: basic_1.StringType.get(),
19636
19637
  version: version_1.Version.v702,
19637
19638
  },
19638
19639
  {
@@ -19641,7 +19642,7 @@ BuiltIn.methods = [
19641
19642
  "bool": new basic_1.CLikeType(),
19642
19643
  },
19643
19644
  optional: {
19644
- "bit": new basic_1.IntegerType(),
19645
+ "bit": basic_1.IntegerType.get(),
19645
19646
  },
19646
19647
  return: new basic_1.XStringType(),
19647
19648
  version: version_1.Version.v702,
@@ -19651,18 +19652,18 @@ BuiltIn.methods = [
19651
19652
  mandatory: {
19652
19653
  "val": new basic_1.FloatType(),
19653
19654
  },
19654
- return: new basic_1.IntegerType(),
19655
+ return: basic_1.IntegerType.get(),
19655
19656
  },
19656
19657
  {
19657
19658
  name: "CHAR_OFF",
19658
19659
  mandatory: {
19659
19660
  "val": new basic_1.CLikeType(),
19660
- "add": new basic_1.IntegerType(),
19661
+ "add": basic_1.IntegerType.get(),
19661
19662
  },
19662
19663
  optional: {
19663
- "off": new basic_1.IntegerType(),
19664
+ "off": basic_1.IntegerType.get(),
19664
19665
  },
19665
- return: new basic_1.IntegerType(),
19666
+ return: basic_1.IntegerType.get(),
19666
19667
  version: version_1.Version.v702,
19667
19668
  },
19668
19669
  {
@@ -19670,7 +19671,7 @@ BuiltIn.methods = [
19670
19671
  mandatory: {
19671
19672
  "val": new basic_1.CLikeType(),
19672
19673
  },
19673
- return: new basic_1.IntegerType(),
19674
+ return: basic_1.IntegerType.get(),
19674
19675
  },
19675
19676
  {
19676
19677
  name: "CMAX",
@@ -19686,7 +19687,7 @@ BuiltIn.methods = [
19686
19687
  "val7": new basic_1.CLikeType(),
19687
19688
  "val9": new basic_1.CLikeType(),
19688
19689
  },
19689
- return: new basic_1.StringType(),
19690
+ return: basic_1.StringType.get(),
19690
19691
  version: version_1.Version.v702,
19691
19692
  },
19692
19693
  {
@@ -19703,7 +19704,7 @@ BuiltIn.methods = [
19703
19704
  "val7": new basic_1.CLikeType(),
19704
19705
  "val9": new basic_1.CLikeType(),
19705
19706
  },
19706
- return: new basic_1.StringType(),
19707
+ return: basic_1.StringType.get(),
19707
19708
  version: version_1.Version.v702,
19708
19709
  },
19709
19710
  {
@@ -19714,7 +19715,7 @@ BuiltIn.methods = [
19714
19715
  optional: {
19715
19716
  "sep": new basic_1.CLikeType(),
19716
19717
  },
19717
- return: new basic_1.StringType(),
19718
+ return: basic_1.StringType.get(),
19718
19719
  version: version_1.Version.v702,
19719
19720
  },
19720
19721
  {
@@ -19727,7 +19728,7 @@ BuiltIn.methods = [
19727
19728
  "from": new basic_1.CLikeType(),
19728
19729
  "to": new basic_1.CLikeType(),
19729
19730
  },
19730
- return: new basic_1.StringType(),
19731
+ return: basic_1.StringType.get(),
19731
19732
  version: version_1.Version.v702,
19732
19733
  },
19733
19734
  {
@@ -19742,9 +19743,9 @@ BuiltIn.methods = [
19742
19743
  "regex": new basic_1.CLikeType(),
19743
19744
  "pcre": new basic_1.CLikeType(),
19744
19745
  "case": new basic_1.CharacterType(1),
19745
- "off": new basic_1.IntegerType(),
19746
- "len": new basic_1.IntegerType(),
19747
- "occ": new basic_1.IntegerType(),
19746
+ "off": basic_1.IntegerType.get(),
19747
+ "len": basic_1.IntegerType.get(),
19748
+ "occ": basic_1.IntegerType.get(),
19748
19749
  },
19749
19750
  return: new basic_1.CharacterType(1),
19750
19751
  predicate: true,
@@ -19759,9 +19760,9 @@ BuiltIn.methods = [
19759
19760
  "sub": new basic_1.CLikeType(),
19760
19761
  "start": new basic_1.CLikeType(),
19761
19762
  "end": new basic_1.CLikeType(),
19762
- "off": new basic_1.IntegerType(),
19763
- "len": new basic_1.IntegerType(),
19764
- "occ": new basic_1.IntegerType(),
19763
+ "off": basic_1.IntegerType.get(),
19764
+ "len": basic_1.IntegerType.get(),
19765
+ "occ": basic_1.IntegerType.get(),
19765
19766
  },
19766
19767
  predicate: true,
19767
19768
  return: new basic_1.CharacterType(1), version: version_1.Version.v702,
@@ -19775,9 +19776,9 @@ BuiltIn.methods = [
19775
19776
  "sub": new basic_1.CLikeType(),
19776
19777
  "start": new basic_1.CLikeType(),
19777
19778
  "end": new basic_1.CLikeType(),
19778
- "off": new basic_1.IntegerType(),
19779
- "len": new basic_1.IntegerType(),
19780
- "occ": new basic_1.IntegerType(),
19779
+ "off": basic_1.IntegerType.get(),
19780
+ "len": basic_1.IntegerType.get(),
19781
+ "occ": basic_1.IntegerType.get(),
19781
19782
  },
19782
19783
  return: new basic_1.CharacterType(1),
19783
19784
  predicate: true,
@@ -19807,10 +19808,10 @@ BuiltIn.methods = [
19807
19808
  "regex": new basic_1.CLikeType(),
19808
19809
  "pcre": new basic_1.CLikeType(),
19809
19810
  "case": new basic_1.CharacterType(1),
19810
- "off": new basic_1.IntegerType(),
19811
- "len": new basic_1.IntegerType(),
19811
+ "off": basic_1.IntegerType.get(),
19812
+ "len": basic_1.IntegerType.get(),
19812
19813
  },
19813
- return: new basic_1.IntegerType(),
19814
+ return: basic_1.IntegerType.get(),
19814
19815
  version: version_1.Version.v702,
19815
19816
  },
19816
19817
  {
@@ -19823,10 +19824,10 @@ BuiltIn.methods = [
19823
19824
  "regex": new basic_1.CLikeType(),
19824
19825
  "pcre": new basic_1.CLikeType(),
19825
19826
  "case": new basic_1.CharacterType(1),
19826
- "off": new basic_1.IntegerType(),
19827
- "len": new basic_1.IntegerType(),
19827
+ "off": basic_1.IntegerType.get(),
19828
+ "len": basic_1.IntegerType.get(),
19828
19829
  },
19829
- return: new basic_1.IntegerType(),
19830
+ return: basic_1.IntegerType.get(),
19830
19831
  version: version_1.Version.v702,
19831
19832
  },
19832
19833
  {
@@ -19839,10 +19840,10 @@ BuiltIn.methods = [
19839
19840
  "regex": new basic_1.CLikeType(),
19840
19841
  "pcre": new basic_1.CLikeType(),
19841
19842
  "case": new basic_1.CharacterType(1),
19842
- "off": new basic_1.IntegerType(),
19843
- "len": new basic_1.IntegerType(),
19843
+ "off": basic_1.IntegerType.get(),
19844
+ "len": basic_1.IntegerType.get(),
19844
19845
  },
19845
- return: new basic_1.IntegerType(),
19846
+ return: basic_1.IntegerType.get(),
19846
19847
  version: version_1.Version.v702,
19847
19848
  },
19848
19849
  {
@@ -19850,7 +19851,7 @@ BuiltIn.methods = [
19850
19851
  mandatory: {
19851
19852
  "val": new basic_1.CLikeType(),
19852
19853
  },
19853
- return: new basic_1.IntegerType(),
19854
+ return: basic_1.IntegerType.get(),
19854
19855
  },
19855
19856
  {
19856
19857
  name: "DISTANCE",
@@ -19858,7 +19859,7 @@ BuiltIn.methods = [
19858
19859
  "val1": new basic_1.CLikeType(),
19859
19860
  "val2": new basic_1.CLikeType(),
19860
19861
  },
19861
- return: new basic_1.IntegerType(),
19862
+ return: basic_1.IntegerType.get(),
19862
19863
  version: version_1.Version.v702,
19863
19864
  },
19864
19865
  {
@@ -19867,7 +19868,7 @@ BuiltIn.methods = [
19867
19868
  "val": new basic_1.CLikeType(),
19868
19869
  "format": new basic_1.CLikeType(),
19869
19870
  },
19870
- return: new basic_1.StringType(),
19871
+ return: basic_1.StringType.get(),
19871
19872
  version: version_1.Version.v702,
19872
19873
  },
19873
19874
  {
@@ -19887,11 +19888,11 @@ BuiltIn.methods = [
19887
19888
  "regex": new basic_1.CLikeType(),
19888
19889
  "pcre": new basic_1.CLikeType(),
19889
19890
  "case": new basic_1.CharacterType(1),
19890
- "off": new basic_1.IntegerType(),
19891
- "len": new basic_1.IntegerType(),
19892
- "occ": new basic_1.IntegerType(),
19891
+ "off": basic_1.IntegerType.get(),
19892
+ "len": basic_1.IntegerType.get(),
19893
+ "occ": basic_1.IntegerType.get(),
19893
19894
  },
19894
- return: new basic_1.IntegerType(),
19895
+ return: basic_1.IntegerType.get(),
19895
19896
  version: version_1.Version.v702,
19896
19897
  },
19897
19898
  {
@@ -19901,11 +19902,11 @@ BuiltIn.methods = [
19901
19902
  },
19902
19903
  optional: {
19903
19904
  "sub": new basic_1.CLikeType(),
19904
- "off": new basic_1.IntegerType(),
19905
- "len": new basic_1.IntegerType(),
19906
- "occ": new basic_1.IntegerType(),
19905
+ "off": basic_1.IntegerType.get(),
19906
+ "len": basic_1.IntegerType.get(),
19907
+ "occ": basic_1.IntegerType.get(),
19907
19908
  },
19908
- return: new basic_1.IntegerType(),
19909
+ return: basic_1.IntegerType.get(),
19909
19910
  version: version_1.Version.v702,
19910
19911
  },
19911
19912
  {
@@ -19915,11 +19916,11 @@ BuiltIn.methods = [
19915
19916
  },
19916
19917
  optional: {
19917
19918
  "sub": new basic_1.CLikeType(),
19918
- "off": new basic_1.IntegerType(),
19919
- "len": new basic_1.IntegerType(),
19920
- "occ": new basic_1.IntegerType(),
19919
+ "off": basic_1.IntegerType.get(),
19920
+ "len": basic_1.IntegerType.get(),
19921
+ "occ": basic_1.IntegerType.get(),
19921
19922
  },
19922
- return: new basic_1.IntegerType(),
19923
+ return: basic_1.IntegerType.get(),
19923
19924
  version: version_1.Version.v702,
19924
19925
  },
19925
19926
  {
@@ -19932,11 +19933,11 @@ BuiltIn.methods = [
19932
19933
  "regex": new basic_1.CLikeType(),
19933
19934
  "pcre": new basic_1.CLikeType(),
19934
19935
  "case": new basic_1.CharacterType(1),
19935
- "off": new basic_1.IntegerType(),
19936
- "len": new basic_1.IntegerType(),
19937
- "occ": new basic_1.IntegerType(),
19936
+ "off": basic_1.IntegerType.get(),
19937
+ "len": basic_1.IntegerType.get(),
19938
+ "occ": basic_1.IntegerType.get(),
19938
19939
  },
19939
- return: new basic_1.IntegerType(),
19940
+ return: basic_1.IntegerType.get(),
19940
19941
  version: version_1.Version.v702,
19941
19942
  },
19942
19943
  {
@@ -19944,14 +19945,14 @@ BuiltIn.methods = [
19944
19945
  mandatory: {
19945
19946
  "val": new basic_1.FloatType(),
19946
19947
  },
19947
- return: new basic_1.IntegerType(),
19948
+ return: basic_1.IntegerType.get(),
19948
19949
  },
19949
19950
  {
19950
19951
  name: "FRAC",
19951
19952
  mandatory: {
19952
19953
  "val": new basic_1.FloatType(),
19953
19954
  },
19954
- return: new basic_1.IntegerType(),
19955
+ return: basic_1.IntegerType.get(),
19955
19956
  },
19956
19957
  {
19957
19958
  name: "FROM_MIXED",
@@ -19960,10 +19961,10 @@ BuiltIn.methods = [
19960
19961
  },
19961
19962
  optional: {
19962
19963
  "case": new basic_1.CharacterType(1),
19963
- "sep": new basic_1.IntegerType(),
19964
- "min": new basic_1.IntegerType(),
19964
+ "sep": basic_1.IntegerType.get(),
19965
+ "min": basic_1.IntegerType.get(),
19965
19966
  },
19966
- return: new basic_1.StringType(),
19967
+ return: basic_1.StringType.get(),
19967
19968
  version: version_1.Version.v702,
19968
19969
  },
19969
19970
  {
@@ -19973,9 +19974,9 @@ BuiltIn.methods = [
19973
19974
  "sub": new basic_1.CLikeType(),
19974
19975
  },
19975
19976
  optional: {
19976
- "off": new basic_1.IntegerType(),
19977
+ "off": basic_1.IntegerType.get(),
19977
19978
  },
19978
- return: new basic_1.StringType(),
19979
+ return: basic_1.StringType.get(),
19979
19980
  version: version_1.Version.v702,
19980
19981
  },
19981
19982
  {
@@ -19984,7 +19985,7 @@ BuiltIn.methods = [
19984
19985
  "base": new basic_1.FloatType(),
19985
19986
  "exp": new basic_1.FloatType(),
19986
19987
  },
19987
- return: new basic_1.IntegerType(),
19988
+ return: basic_1.IntegerType.get(),
19988
19989
  version: version_1.Version.v740sp02,
19989
19990
  },
19990
19991
  {
@@ -20001,7 +20002,7 @@ BuiltIn.methods = [
20001
20002
  mandatory: {
20002
20003
  "val": new basic_1.CLikeType(),
20003
20004
  },
20004
- return: new basic_1.IntegerType(),
20005
+ return: basic_1.IntegerType.get(),
20005
20006
  version: version_1.Version.v740sp02,
20006
20007
  },
20007
20008
  {
@@ -20009,7 +20010,7 @@ BuiltIn.methods = [
20009
20010
  mandatory: {
20010
20011
  "val": new basic_1.TableType(new basic_1.AnyType(), { withHeader: false, keyType: basic_1.TableKeyType.default }),
20011
20012
  },
20012
- return: new basic_1.IntegerType(),
20013
+ return: basic_1.IntegerType.get(),
20013
20014
  },
20014
20015
  {
20015
20016
  name: "LOG",
@@ -20033,9 +20034,9 @@ BuiltIn.methods = [
20033
20034
  "case": new basic_1.CharacterType(1),
20034
20035
  "regex": new basic_1.CLikeType(),
20035
20036
  "pcre": new basic_1.CLikeType(),
20036
- "occ": new basic_1.IntegerType(),
20037
+ "occ": basic_1.IntegerType.get(),
20037
20038
  },
20038
- return: new basic_1.StringType(),
20039
+ return: basic_1.StringType.get(),
20039
20040
  version: version_1.Version.v702,
20040
20041
  },
20041
20042
  {
@@ -20047,8 +20048,8 @@ BuiltIn.methods = [
20047
20048
  "case": new basic_1.CharacterType(1),
20048
20049
  "regex": new basic_1.CLikeType(),
20049
20050
  "pcre": new basic_1.CLikeType(),
20050
- "off": new basic_1.IntegerType(),
20051
- "len": new basic_1.IntegerType(),
20051
+ "off": basic_1.IntegerType.get(),
20052
+ "len": basic_1.IntegerType.get(),
20052
20053
  },
20053
20054
  return: new basic_1.CharacterType(1),
20054
20055
  predicate: true,
@@ -20069,7 +20070,7 @@ BuiltIn.methods = [
20069
20070
  "val8": new basic_1.CLikeType(),
20070
20071
  "val9": new basic_1.CLikeType(),
20071
20072
  },
20072
- return: new basic_1.IntegerType(),
20073
+ return: basic_1.IntegerType.get(),
20073
20074
  version: version_1.Version.v702,
20074
20075
  },
20075
20076
  {
@@ -20087,7 +20088,7 @@ BuiltIn.methods = [
20087
20088
  "val8": new basic_1.CLikeType(),
20088
20089
  "val9": new basic_1.CLikeType(),
20089
20090
  },
20090
- return: new basic_1.IntegerType(),
20091
+ return: basic_1.IntegerType.get(),
20091
20092
  version: version_1.Version.v702,
20092
20093
  },
20093
20094
  {
@@ -20095,15 +20096,15 @@ BuiltIn.methods = [
20095
20096
  mandatory: {
20096
20097
  "val": new basic_1.CLikeType(),
20097
20098
  },
20098
- return: new basic_1.IntegerType(),
20099
+ return: basic_1.IntegerType.get(),
20099
20100
  },
20100
20101
  {
20101
20102
  name: "REPEAT",
20102
20103
  mandatory: {
20103
20104
  "val": new basic_1.CLikeType(),
20104
- "occ": new basic_1.IntegerType(),
20105
+ "occ": basic_1.IntegerType.get(),
20105
20106
  },
20106
- return: new basic_1.StringType(),
20107
+ return: basic_1.StringType.get(),
20107
20108
  version: version_1.Version.v702,
20108
20109
  },
20109
20110
  {
@@ -20117,11 +20118,11 @@ BuiltIn.methods = [
20117
20118
  "regex": new basic_1.CLikeType(),
20118
20119
  "pcre": new basic_1.CLikeType(),
20119
20120
  "case": new basic_1.CharacterType(1),
20120
- "off": new basic_1.IntegerType(),
20121
- "len": new basic_1.IntegerType(),
20122
- "occ": new basic_1.IntegerType(),
20121
+ "off": basic_1.IntegerType.get(),
20122
+ "len": basic_1.IntegerType.get(),
20123
+ "occ": basic_1.IntegerType.get(),
20123
20124
  },
20124
- return: new basic_1.StringType(),
20125
+ return: basic_1.StringType.get(),
20125
20126
  version: version_1.Version.v702,
20126
20127
  },
20127
20128
  {
@@ -20130,9 +20131,9 @@ BuiltIn.methods = [
20130
20131
  "val": new basic_1.FloatType(),
20131
20132
  },
20132
20133
  optional: {
20133
- "dec": new basic_1.IntegerType(),
20134
- "prec": new basic_1.IntegerType(),
20135
- "mode": new basic_1.IntegerType(),
20134
+ "dec": basic_1.IntegerType.get(),
20135
+ "prec": basic_1.IntegerType.get(),
20136
+ "mode": basic_1.IntegerType.get(),
20136
20137
  },
20137
20138
  return: new basic_1.FloatType(),
20138
20139
  version: version_1.Version.v702,
@@ -20142,7 +20143,7 @@ BuiltIn.methods = [
20142
20143
  mandatory: {
20143
20144
  "val": new basic_1.CLikeType(),
20144
20145
  },
20145
- return: new basic_1.StringType(),
20146
+ return: basic_1.StringType.get(),
20146
20147
  version: version_1.Version.v702,
20147
20148
  },
20148
20149
  {
@@ -20151,24 +20152,24 @@ BuiltIn.methods = [
20151
20152
  "val": new basic_1.FloatType(),
20152
20153
  },
20153
20154
  optional: {
20154
- "dec": new basic_1.IntegerType(),
20155
- "prec": new basic_1.IntegerType(),
20156
- "mode": new basic_1.IntegerType(),
20155
+ "dec": basic_1.IntegerType.get(),
20156
+ "prec": basic_1.IntegerType.get(),
20157
+ "mode": basic_1.IntegerType.get(),
20157
20158
  },
20158
- return: new basic_1.IntegerType(),
20159
+ return: basic_1.IntegerType.get(),
20159
20160
  version: version_1.Version.v702,
20160
20161
  },
20161
20162
  {
20162
20163
  name: "SEGMENT",
20163
20164
  mandatory: {
20164
20165
  "val": new basic_1.CLikeType(),
20165
- "index": new basic_1.IntegerType(),
20166
+ "index": basic_1.IntegerType.get(),
20166
20167
  },
20167
20168
  optional: {
20168
20169
  "sep": new basic_1.CLikeType(),
20169
20170
  "space": new basic_1.CLikeType(),
20170
20171
  },
20171
- return: new basic_1.StringType(),
20172
+ return: basic_1.StringType.get(),
20172
20173
  version: version_1.Version.v702,
20173
20174
  },
20174
20175
  {
@@ -20178,10 +20179,10 @@ BuiltIn.methods = [
20178
20179
  },
20179
20180
  optional: {
20180
20181
  "sub": new basic_1.CLikeType(),
20181
- "places": new basic_1.IntegerType(),
20182
- "circular": new basic_1.IntegerType(),
20182
+ "places": basic_1.IntegerType.get(),
20183
+ "circular": basic_1.IntegerType.get(),
20183
20184
  },
20184
- return: new basic_1.StringType(),
20185
+ return: basic_1.StringType.get(),
20185
20186
  version: version_1.Version.v702,
20186
20187
  },
20187
20188
  {
@@ -20191,10 +20192,10 @@ BuiltIn.methods = [
20191
20192
  },
20192
20193
  optional: {
20193
20194
  "sub": new basic_1.CLikeType(),
20194
- "places": new basic_1.IntegerType(),
20195
- "circular": new basic_1.IntegerType(),
20195
+ "places": basic_1.IntegerType.get(),
20196
+ "circular": basic_1.IntegerType.get(),
20196
20197
  },
20197
- return: new basic_1.StringType(),
20198
+ return: basic_1.StringType.get(),
20198
20199
  version: version_1.Version.v702,
20199
20200
  },
20200
20201
  {
@@ -20202,7 +20203,7 @@ BuiltIn.methods = [
20202
20203
  mandatory: {
20203
20204
  "val": new basic_1.FloatType(),
20204
20205
  },
20205
- return: new basic_1.IntegerType(),
20206
+ return: basic_1.IntegerType.get(),
20206
20207
  },
20207
20208
  {
20208
20209
  name: "SIN",
@@ -20230,7 +20231,7 @@ BuiltIn.methods = [
20230
20231
  mandatory: {
20231
20232
  "val": new basic_1.CLikeType(),
20232
20233
  },
20233
- return: new basic_1.IntegerType(),
20234
+ return: basic_1.IntegerType.get(),
20234
20235
  },
20235
20236
  {
20236
20237
  name: "SUBSTRING",
@@ -20238,10 +20239,10 @@ BuiltIn.methods = [
20238
20239
  "val": new basic_1.CLikeType(),
20239
20240
  },
20240
20241
  optional: {
20241
- "off": new basic_1.IntegerType(),
20242
- "len": new basic_1.IntegerType(),
20242
+ "off": basic_1.IntegerType.get(),
20243
+ "len": basic_1.IntegerType.get(),
20243
20244
  },
20244
- return: new basic_1.StringType(),
20245
+ return: basic_1.StringType.get(),
20245
20246
  version: version_1.Version.v702,
20246
20247
  },
20247
20248
  {
@@ -20254,10 +20255,10 @@ BuiltIn.methods = [
20254
20255
  "regex": new basic_1.CLikeType(),
20255
20256
  "pcre": new basic_1.CLikeType(),
20256
20257
  "case": new basic_1.CharacterType(1),
20257
- "len": new basic_1.IntegerType(),
20258
- "occ": new basic_1.IntegerType(),
20258
+ "len": basic_1.IntegerType.get(),
20259
+ "occ": basic_1.IntegerType.get(),
20259
20260
  },
20260
- return: new basic_1.StringType(),
20261
+ return: basic_1.StringType.get(),
20261
20262
  version: version_1.Version.v702,
20262
20263
  },
20263
20264
  {
@@ -20270,10 +20271,10 @@ BuiltIn.methods = [
20270
20271
  "regex": new basic_1.CLikeType(),
20271
20272
  "pcre": new basic_1.CLikeType(),
20272
20273
  "case": new basic_1.CharacterType(1),
20273
- "len": new basic_1.IntegerType(),
20274
- "occ": new basic_1.IntegerType(),
20274
+ "len": basic_1.IntegerType.get(),
20275
+ "occ": basic_1.IntegerType.get(),
20275
20276
  },
20276
- return: new basic_1.StringType(),
20277
+ return: basic_1.StringType.get(),
20277
20278
  version: version_1.Version.v702,
20278
20279
  },
20279
20280
  {
@@ -20286,10 +20287,10 @@ BuiltIn.methods = [
20286
20287
  "regex": new basic_1.CLikeType(),
20287
20288
  "pcre": new basic_1.CLikeType(),
20288
20289
  "case": new basic_1.CharacterType(1),
20289
- "len": new basic_1.IntegerType(),
20290
- "occ": new basic_1.IntegerType(),
20290
+ "len": basic_1.IntegerType.get(),
20291
+ "occ": basic_1.IntegerType.get(),
20291
20292
  },
20292
- return: new basic_1.StringType(),
20293
+ return: basic_1.StringType.get(),
20293
20294
  version: version_1.Version.v702,
20294
20295
  },
20295
20296
  {
@@ -20302,10 +20303,10 @@ BuiltIn.methods = [
20302
20303
  "regex": new basic_1.CLikeType(),
20303
20304
  "pcre": new basic_1.CLikeType(),
20304
20305
  "case": new basic_1.CharacterType(1),
20305
- "len": new basic_1.IntegerType(),
20306
- "occ": new basic_1.IntegerType(),
20306
+ "len": basic_1.IntegerType.get(),
20307
+ "occ": basic_1.IntegerType.get(),
20307
20308
  },
20308
- return: new basic_1.StringType(),
20309
+ return: basic_1.StringType.get(),
20309
20310
  version: version_1.Version.v702,
20310
20311
  },
20311
20312
  {
@@ -20327,7 +20328,7 @@ BuiltIn.methods = [
20327
20328
  mandatory: {
20328
20329
  "val": new basic_1.CLikeType(),
20329
20330
  },
20330
- return: new basic_1.StringType(),
20331
+ return: basic_1.StringType.get(),
20331
20332
  version: version_1.Version.v702,
20332
20333
  },
20333
20334
  {
@@ -20337,16 +20338,16 @@ BuiltIn.methods = [
20337
20338
  },
20338
20339
  optional: {
20339
20340
  "case": new basic_1.CharacterType(1),
20340
- "sep": new basic_1.IntegerType(),
20341
- "min": new basic_1.IntegerType(),
20341
+ "sep": basic_1.IntegerType.get(),
20342
+ "min": basic_1.IntegerType.get(),
20342
20343
  },
20343
- return: new basic_1.StringType(),
20344
+ return: basic_1.StringType.get(),
20344
20345
  version: version_1.Version.v702,
20345
20346
  },
20346
20347
  {
20347
20348
  name: "TO_UPPER",
20348
20349
  mandatory: { "val": new basic_1.CLikeType() },
20349
- return: new basic_1.StringType(),
20350
+ return: basic_1.StringType.get(),
20350
20351
  version: version_1.Version.v702,
20351
20352
  },
20352
20353
  {
@@ -20356,7 +20357,7 @@ BuiltIn.methods = [
20356
20357
  "from": new basic_1.CLikeType(),
20357
20358
  "to": new basic_1.CLikeType(),
20358
20359
  },
20359
- return: new basic_1.StringType(),
20360
+ return: basic_1.StringType.get(),
20360
20361
  version: version_1.Version.v702,
20361
20362
  },
20362
20363
  {
@@ -20364,7 +20365,7 @@ BuiltIn.methods = [
20364
20365
  mandatory: {
20365
20366
  "val": new basic_1.FloatType(),
20366
20367
  },
20367
- return: new basic_1.IntegerType(),
20368
+ return: basic_1.IntegerType.get(),
20368
20369
  },
20369
20370
  {
20370
20371
  name: "UTCLONG_ADD",
@@ -20372,9 +20373,9 @@ BuiltIn.methods = [
20372
20373
  "val": new basic_1.UTCLongType(),
20373
20374
  },
20374
20375
  optional: {
20375
- "days": new basic_1.IntegerType(),
20376
- "hour": new basic_1.IntegerType(),
20377
- "minutes": new basic_1.IntegerType(),
20376
+ "days": basic_1.IntegerType.get(),
20377
+ "hour": basic_1.IntegerType.get(),
20378
+ "minutes": basic_1.IntegerType.get(),
20378
20379
  "seconds": new basic_1.FloatType(),
20379
20380
  },
20380
20381
  return: new basic_1.UTCLongType(),
@@ -20407,7 +20408,7 @@ BuiltIn.methods = [
20407
20408
  mandatory: {
20408
20409
  "val": new basic_1.XSequenceType(),
20409
20410
  },
20410
- return: new basic_1.IntegerType(),
20411
+ return: basic_1.IntegerType.get(),
20411
20412
  },
20412
20413
  ];
20413
20414
  //# sourceMappingURL=_builtin.js.map
@@ -21667,7 +21668,7 @@ class TypeUtils {
21667
21668
  if (target instanceof basic_1.StructureType && this.structureContainsString(target)) {
21668
21669
  return false;
21669
21670
  }
21670
- else if (target instanceof basic_1.XSequenceType) {
21671
+ else if (target instanceof basic_1.XSequenceType || target instanceof basic_1.XStringType) {
21671
21672
  if (((_f = source.getAbstractTypeData()) === null || _f === void 0 ? void 0 : _f.derivedFromConstant) === true) {
21672
21673
  return true;
21673
21674
  }
@@ -23316,8 +23317,9 @@ const basic_1 = __webpack_require__(/*! ../../types/basic */ "./node_modules/@ab
23316
23317
  const expressions_1 = __webpack_require__(/*! ../../2_statements/expressions */ "./node_modules/@abaplint/core/build/src/abap/2_statements/expressions/index.js");
23317
23318
  class Constant {
23318
23319
  runSyntax(node) {
23320
+ // todo: ConcatenatedConstant is not used?
23319
23321
  if (node.findDirectExpression(expressions_1.Integer)) {
23320
- return new basic_1.IntegerType({ qualifiedName: "I" });
23322
+ return basic_1.IntegerType.get();
23321
23323
  }
23322
23324
  else if (node.getFirstToken().getStr().startsWith("'")) {
23323
23325
  let len = node.getFirstToken().getStr().length - 2;
@@ -23327,10 +23329,10 @@ class Constant {
23327
23329
  return new basic_1.CharacterType(len, { derivedFromConstant: true });
23328
23330
  }
23329
23331
  else if (node.getFirstToken().getStr().startsWith("`")) {
23330
- return new basic_1.StringType({ qualifiedName: "STRING", derivedFromConstant: true });
23332
+ return basic_1.StringType.get({ derivedFromConstant: true });
23331
23333
  }
23332
23334
  else {
23333
- return new basic_1.StringType({ qualifiedName: "STRING" });
23335
+ return basic_1.StringType.get();
23334
23336
  }
23335
23337
  }
23336
23338
  }
@@ -24224,7 +24226,7 @@ class InlineLoopDefinition {
24224
24226
  }
24225
24227
  const index = node.findExpressionAfterToken("INTO");
24226
24228
  if (index && index.get() instanceof Expressions.TargetField) {
24227
- const identifier = new _typed_identifier_1.TypedIdentifier(index.getFirstToken(), filename, new basic_1.IntegerType(), ["inline" /* IdentifierMeta.InlineDefinition */]);
24229
+ const identifier = new _typed_identifier_1.TypedIdentifier(index.getFirstToken(), filename, basic_1.IntegerType.get(), ["inline" /* IdentifierMeta.InlineDefinition */]);
24228
24230
  scope.addReference(index.getFirstToken(), identifier, _reference_1.ReferenceType.DataWriteReference, filename);
24229
24231
  scope.addIdentifier(identifier);
24230
24232
  }
@@ -24589,7 +24591,7 @@ class MethodCallParam {
24589
24591
  else {
24590
24592
  targetType = method;
24591
24593
  }
24592
- let sourceType = new basic_1.StringType();
24594
+ let sourceType = basic_1.StringType.get();
24593
24595
  if (child.get() instanceof Expressions.Source) {
24594
24596
  sourceType = new source_1.Source().runSyntax(child, scope, filename, targetType);
24595
24597
  }
@@ -25516,7 +25518,7 @@ class Source {
25516
25518
  const method = new _builtin_1.BuiltIn().searchBuiltin(tok);
25517
25519
  scope.addReference(token, method, _reference_1.ReferenceType.BuiltinMethodReference, filename);
25518
25520
  new cond_1.Cond().runSyntax(node.findDirectExpression(Expressions.Cond), scope, filename);
25519
- return new basic_1.StringType();
25521
+ return basic_1.StringType.get();
25520
25522
  }
25521
25523
  case "XSDBOOL":
25522
25524
  {
@@ -25659,7 +25661,7 @@ class Source {
25659
25661
  }
25660
25662
  }
25661
25663
  if (node.findDirectTokenByText("&&")) {
25662
- return new basic_1.StringType();
25664
+ return basic_1.StringType.get();
25663
25665
  }
25664
25666
  return context;
25665
25667
  }
@@ -25985,7 +25987,7 @@ class StringTemplate {
25985
25987
  const typeUtils = new _type_utils_1.TypeUtils(scope);
25986
25988
  for (const templateSource of node.findAllExpressions(Expressions.StringTemplateSource)) {
25987
25989
  const s = templateSource.findDirectExpression(Expressions.Source);
25988
- const type = new source_1.Source().runSyntax(s, scope, filename, new basic_1.StringType({ qualifiedName: "STRING" }));
25990
+ const type = new source_1.Source().runSyntax(s, scope, filename, basic_1.StringType.get());
25989
25991
  if (type === undefined) {
25990
25992
  throw new Error("No target type determined");
25991
25993
  }
@@ -26009,7 +26011,7 @@ class StringTemplate {
26009
26011
  throw new Error("Cannot apply ALPHA to this type");
26010
26012
  }
26011
26013
  }
26012
- return new basic_1.StringType({ qualifiedName: "STRING" });
26014
+ return basic_1.StringType.get();
26013
26015
  }
26014
26016
  }
26015
26017
  exports.StringTemplate = StringTemplate;
@@ -27698,19 +27700,41 @@ const source_1 = __webpack_require__(/*! ../expressions/source */ "./node_module
27698
27700
  const target_1 = __webpack_require__(/*! ../expressions/target */ "./node_modules/@abaplint/core/build/src/abap/5_syntax/expressions/target.js");
27699
27701
  const basic_1 = __webpack_require__(/*! ../../types/basic */ "./node_modules/@abaplint/core/build/src/abap/types/basic/index.js");
27700
27702
  const inline_data_1 = __webpack_require__(/*! ../expressions/inline_data */ "./node_modules/@abaplint/core/build/src/abap/5_syntax/expressions/inline_data.js");
27703
+ const _type_utils_1 = __webpack_require__(/*! ../_type_utils */ "./node_modules/@abaplint/core/build/src/abap/5_syntax/_type_utils.js");
27701
27704
  class Concatenate {
27702
27705
  runSyntax(node, scope, filename) {
27706
+ const byteMode = node.findDirectTokenByText("BYTE") !== undefined;
27707
+ let linesMode = node.findDirectTokenByText("LINES") !== undefined;
27703
27708
  const target = node.findFirstExpression(Expressions.Target);
27704
27709
  const inline = target === null || target === void 0 ? void 0 : target.findDirectExpression(Expressions.InlineData);
27705
27710
  if (inline) {
27706
- // todo, does this give XSTRING in BYTE MODE?
27707
- new inline_data_1.InlineData().runSyntax(inline, scope, filename, new basic_1.StringType());
27711
+ if (byteMode) {
27712
+ new inline_data_1.InlineData().runSyntax(inline, scope, filename, new basic_1.XStringType());
27713
+ }
27714
+ else {
27715
+ new inline_data_1.InlineData().runSyntax(inline, scope, filename, basic_1.StringType.get());
27716
+ }
27708
27717
  }
27709
27718
  else if (target) {
27710
- new target_1.Target().runSyntax(target, scope, filename);
27719
+ const type = new target_1.Target().runSyntax(target, scope, filename);
27720
+ const compatible = byteMode ? new _type_utils_1.TypeUtils(scope).isHexLike(type) : new _type_utils_1.TypeUtils(scope).isCharLike(type);
27721
+ if (compatible === false) {
27722
+ throw new Error("Target type not compatible");
27723
+ }
27711
27724
  }
27712
27725
  for (const s of node.findDirectExpressions(Expressions.Source)) {
27713
- new source_1.Source().runSyntax(s, scope, filename);
27726
+ const type = new source_1.Source().runSyntax(s, scope, filename);
27727
+ if (linesMode) {
27728
+ if (!(type instanceof basic_1.UnknownType) && !(type instanceof basic_1.VoidType) && !(type instanceof basic_1.TableType)) {
27729
+ throw new Error("Source must be an internal table");
27730
+ }
27731
+ linesMode = false;
27732
+ continue;
27733
+ }
27734
+ const compatible = byteMode ? new _type_utils_1.TypeUtils(scope).isHexLike(type) : new _type_utils_1.TypeUtils(scope).isCharLike(type);
27735
+ if (compatible === false) {
27736
+ throw new Error("Source type not compatible");
27737
+ }
27714
27738
  }
27715
27739
  }
27716
27740
  }
@@ -27803,17 +27827,17 @@ class Controls {
27803
27827
  if (node.findDirectTokenByText("TABLEVIEW") && token) {
27804
27828
  const cols = new basic_1.StructureType([
27805
27829
  { name: "SCREEN", type: new basic_1.CharacterType(1) },
27806
- { name: "INDEX", type: new basic_1.IntegerType() },
27830
+ { name: "INDEX", type: basic_1.IntegerType.get() },
27807
27831
  { name: "SELECTED", type: new basic_1.CharacterType(1) },
27808
- { name: "VISLENGTH", type: new basic_1.IntegerType() },
27832
+ { name: "VISLENGTH", type: basic_1.IntegerType.get() },
27809
27833
  { name: "INVISIBLE", type: new basic_1.CharacterType(1) },
27810
27834
  ]);
27811
27835
  const type = new basic_1.StructureType([
27812
27836
  { name: "FIXED_COLS", type: new basic_1.CharacterType(132) },
27813
- { name: "LINES", type: new basic_1.IntegerType() },
27814
- { name: "TOP_LINE", type: new basic_1.IntegerType() },
27815
- { name: "CURRENT_LINE", type: new basic_1.IntegerType() },
27816
- { name: "LEFT_COL", type: new basic_1.IntegerType() },
27837
+ { name: "LINES", type: basic_1.IntegerType.get() },
27838
+ { name: "TOP_LINE", type: basic_1.IntegerType.get() },
27839
+ { name: "CURRENT_LINE", type: basic_1.IntegerType.get() },
27840
+ { name: "LEFT_COL", type: basic_1.IntegerType.get() },
27817
27841
  { name: "LINE_SEL_MODE", type: new basic_1.CharacterType(1) },
27818
27842
  { name: "COL_SEL_MODE", type: new basic_1.CharacterType(1) },
27819
27843
  { name: "LINE_SELECTOR", type: new basic_1.CharacterType(1) },
@@ -28255,7 +28279,7 @@ class Describe {
28255
28279
  if ((linesTarget === null || linesTarget === void 0 ? void 0 : linesTarget.get()) instanceof Expressions.Target) {
28256
28280
  const inline = linesTarget === null || linesTarget === void 0 ? void 0 : linesTarget.findDirectExpression(Expressions.InlineData);
28257
28281
  if (inline) {
28258
- new inline_data_1.InlineData().runSyntax(inline, scope, filename, new basic_1.IntegerType());
28282
+ new inline_data_1.InlineData().runSyntax(inline, scope, filename, basic_1.IntegerType.get());
28259
28283
  }
28260
28284
  else {
28261
28285
  new target_1.Target().runSyntax(linesTarget, scope, filename);
@@ -28275,7 +28299,7 @@ class Describe {
28275
28299
  if ((lengthTarget === null || lengthTarget === void 0 ? void 0 : lengthTarget.get()) instanceof Expressions.Target) {
28276
28300
  const inline = lengthTarget === null || lengthTarget === void 0 ? void 0 : lengthTarget.findDirectExpression(Expressions.InlineData);
28277
28301
  if (inline) {
28278
- new inline_data_1.InlineData().runSyntax(inline, scope, filename, new basic_1.IntegerType());
28302
+ new inline_data_1.InlineData().runSyntax(inline, scope, filename, basic_1.IntegerType.get());
28279
28303
  }
28280
28304
  else {
28281
28305
  new target_1.Target().runSyntax(lengthTarget, scope, filename);
@@ -28285,7 +28309,7 @@ class Describe {
28285
28309
  if ((componentsTarget === null || componentsTarget === void 0 ? void 0 : componentsTarget.get()) instanceof Expressions.Target) {
28286
28310
  const inline = componentsTarget === null || componentsTarget === void 0 ? void 0 : componentsTarget.findDirectExpression(Expressions.InlineData);
28287
28311
  if (inline) {
28288
- new inline_data_1.InlineData().runSyntax(inline, scope, filename, new basic_1.IntegerType());
28312
+ new inline_data_1.InlineData().runSyntax(inline, scope, filename, basic_1.IntegerType.get());
28289
28313
  }
28290
28314
  else {
28291
28315
  new target_1.Target().runSyntax(componentsTarget, scope, filename);
@@ -28467,13 +28491,13 @@ class Find {
28467
28491
  const rfound = node.findExpressionAfterToken("RESULTS");
28468
28492
  if (rfound && rfound.get() instanceof Expressions.Target) {
28469
28493
  const sub = new basic_1.StructureType([
28470
- { name: "OFFSET", type: new basic_1.IntegerType() },
28471
- { name: "LENGTH", type: new basic_1.IntegerType() }
28494
+ { name: "OFFSET", type: basic_1.IntegerType.get() },
28495
+ { name: "LENGTH", type: basic_1.IntegerType.get() }
28472
28496
  ], "SUBMATCH_RESULT", "SUBMATCH_RESULT");
28473
28497
  const type = new basic_1.StructureType([
28474
- { name: "LINE", type: new basic_1.IntegerType() },
28475
- { name: "OFFSET", type: new basic_1.IntegerType() },
28476
- { name: "LENGTH", type: new basic_1.IntegerType() },
28498
+ { name: "LINE", type: basic_1.IntegerType.get() },
28499
+ { name: "OFFSET", type: basic_1.IntegerType.get() },
28500
+ { name: "LENGTH", type: basic_1.IntegerType.get() },
28477
28501
  { name: "SUBMATCHES", type: new basic_1.TableType(sub, { withHeader: false, keyType: basic_1.TableKeyType.default }) },
28478
28502
  ], "MATCH_RESULT", "MATCH_RESULT");
28479
28503
  if (node.concatTokens().toUpperCase().startsWith("FIND FIRST")) {
@@ -28486,20 +28510,20 @@ class Find {
28486
28510
  const ofound = node.findExpressionsAfterToken("OFFSET");
28487
28511
  for (const o of ofound) {
28488
28512
  if (o.get() instanceof Expressions.Target) {
28489
- this.inline(o, scope, filename, new basic_1.IntegerType());
28513
+ this.inline(o, scope, filename, basic_1.IntegerType.get());
28490
28514
  }
28491
28515
  }
28492
28516
  const lfound = node.findExpressionAfterToken("LINE");
28493
28517
  if (lfound && lfound.get() instanceof Expressions.Target) {
28494
- this.inline(lfound, scope, filename, new basic_1.IntegerType());
28518
+ this.inline(lfound, scope, filename, basic_1.IntegerType.get());
28495
28519
  }
28496
28520
  const cfound = node.findExpressionAfterToken("COUNT");
28497
28521
  if (cfound && cfound.get() instanceof Expressions.Target) {
28498
- this.inline(cfound, scope, filename, new basic_1.IntegerType());
28522
+ this.inline(cfound, scope, filename, basic_1.IntegerType.get());
28499
28523
  }
28500
28524
  const lnfound = node.findExpressionAfterToken("LENGTH");
28501
28525
  if (lnfound && lnfound.get() instanceof Expressions.Target) {
28502
- this.inline(lnfound, scope, filename, new basic_1.IntegerType());
28526
+ this.inline(lnfound, scope, filename, basic_1.IntegerType.get());
28503
28527
  }
28504
28528
  if (node.findDirectTokenByText("SUBMATCHES")) {
28505
28529
  for (const t of node.findDirectExpressions(Expressions.Target)) {
@@ -28511,7 +28535,7 @@ class Find {
28511
28535
  }
28512
28536
  const inline = t === null || t === void 0 ? void 0 : t.findDirectExpression(Expressions.InlineData);
28513
28537
  if (inline) {
28514
- new inline_data_1.InlineData().runSyntax(inline, scope, filename, new basic_1.StringType());
28538
+ new inline_data_1.InlineData().runSyntax(inline, scope, filename, basic_1.StringType.get());
28515
28539
  }
28516
28540
  else {
28517
28541
  new target_1.Target().runSyntax(t, scope, filename);
@@ -28651,7 +28675,7 @@ class GetBit {
28651
28675
  for (const t of node.findDirectExpressions(Expressions.Target)) {
28652
28676
  const inline = t === null || t === void 0 ? void 0 : t.findDirectExpression(Expressions.InlineData);
28653
28677
  if (inline) {
28654
- new inline_data_1.InlineData().runSyntax(t, scope, filename, new basic_1.IntegerType());
28678
+ new inline_data_1.InlineData().runSyntax(t, scope, filename, basic_1.IntegerType.get());
28655
28679
  }
28656
28680
  else {
28657
28681
  new target_1.Target().runSyntax(t, scope, filename);
@@ -28804,7 +28828,7 @@ class GetRunTime {
28804
28828
  const target = node.findDirectExpression(Expressions.Target);
28805
28829
  const inline = target === null || target === void 0 ? void 0 : target.findDirectExpression(Expressions.InlineData);
28806
28830
  if (inline) {
28807
- new inline_data_1.InlineData().runSyntax(inline, scope, filename, new basic_1.IntegerType());
28831
+ new inline_data_1.InlineData().runSyntax(inline, scope, filename, basic_1.IntegerType.get());
28808
28832
  }
28809
28833
  else if (target) {
28810
28834
  new target_1.Target().runSyntax(target, scope, filename);
@@ -29384,7 +29408,7 @@ class Message {
29384
29408
  const found = node.findExpressionAfterToken("INTO");
29385
29409
  const inline = found === null || found === void 0 ? void 0 : found.findDirectExpression(Expressions.InlineData);
29386
29410
  if (inline) {
29387
- new inline_data_1.InlineData().runSyntax(inline, scope, filename, new basic_1.StringType());
29411
+ new inline_data_1.InlineData().runSyntax(inline, scope, filename, basic_1.StringType.get());
29388
29412
  }
29389
29413
  else if (found) {
29390
29414
  new target_1.Target().runSyntax(found, scope, filename);
@@ -30154,14 +30178,14 @@ class ReadTable {
30154
30178
  const indexSource = node.findExpressionAfterToken("INDEX");
30155
30179
  if (indexSource) {
30156
30180
  const indexType = new source_1.Source().runSyntax(indexSource, scope, filename);
30157
- if (new _type_utils_1.TypeUtils(scope).isAssignable(indexType, new basic_1.IntegerType()) === false) {
30181
+ if (new _type_utils_1.TypeUtils(scope).isAssignable(indexType, basic_1.IntegerType.get()) === false) {
30158
30182
  throw new Error("READ TABLE, INDEX must be simple");
30159
30183
  }
30160
30184
  }
30161
30185
  const fromSource = node.findExpressionAfterToken("FROM");
30162
30186
  if (fromSource) {
30163
30187
  const fromType = new source_1.Source().runSyntax(fromSource, scope, filename);
30164
- if (new _type_utils_1.TypeUtils(scope).isAssignable(fromType, new basic_1.IntegerType()) === false) {
30188
+ if (new _type_utils_1.TypeUtils(scope).isAssignable(fromType, basic_1.IntegerType.get()) === false) {
30165
30189
  throw new Error("READ TABLE, FROM must be simple");
30166
30190
  }
30167
30191
  }
@@ -30786,7 +30810,7 @@ const _type_utils_1 = __webpack_require__(/*! ../_type_utils */ "./node_modules/
30786
30810
  class Split {
30787
30811
  runSyntax(node, scope, filename) {
30788
30812
  const intoTable = node.findTokenSequencePosition("INTO", "TABLE") !== undefined;
30789
- const type = intoTable ? new basic_1.TableType(new basic_1.StringType(), { withHeader: false, keyType: basic_1.TableKeyType.default }) : new basic_1.StringType();
30813
+ const type = intoTable ? new basic_1.TableType(basic_1.StringType.get(), { withHeader: false, keyType: basic_1.TableKeyType.default }) : basic_1.StringType.get();
30790
30814
  for (const target of node.findAllExpressions(Expressions.Target)) {
30791
30815
  const inline = target.findDirectExpression(Expressions.InlineData);
30792
30816
  if (inline) {
@@ -31819,7 +31843,7 @@ class TypeEnum {
31819
31843
  }
31820
31844
  const token = expr.getFirstToken();
31821
31845
  // integer is default if BASE TYPE is not specified
31822
- values.push(new _typed_identifier_1.TypedIdentifier(token, filename, new basic_1.IntegerType()));
31846
+ values.push(new _typed_identifier_1.TypedIdentifier(token, filename, basic_1.IntegerType.get()));
31823
31847
  }
31824
31848
  for (const type of node.findDirectStatements(Statements.TypeEnum)) {
31825
31849
  const expr = type.findFirstExpression(Expressions.NamespaceSimpleName);
@@ -31828,7 +31852,7 @@ class TypeEnum {
31828
31852
  }
31829
31853
  const token = expr.getFirstToken();
31830
31854
  // integer is default if BASE TYPE is not specified
31831
- values.push(new _typed_identifier_1.TypedIdentifier(token, filename, new basic_1.IntegerType()));
31855
+ values.push(new _typed_identifier_1.TypedIdentifier(token, filename, basic_1.IntegerType.get()));
31832
31856
  }
31833
31857
  const baseType = (_a = begin.findExpressionAfterToken("TYPE")) === null || _a === void 0 ? void 0 : _a.getFirstToken();
31834
31858
  const baseName = baseType === null || baseType === void 0 ? void 0 : baseType.getStr();
@@ -34814,6 +34838,24 @@ Object.defineProperty(exports, "__esModule", ({ value: true }));
34814
34838
  exports.IntegerType = void 0;
34815
34839
  const _abstract_type_1 = __webpack_require__(/*! ./_abstract_type */ "./node_modules/@abaplint/core/build/src/abap/types/basic/_abstract_type.js");
34816
34840
  class IntegerType extends _abstract_type_1.AbstractType {
34841
+ static get(input) {
34842
+ if (input === undefined) {
34843
+ return this.singleton;
34844
+ }
34845
+ return new IntegerType(input);
34846
+ }
34847
+ constructor(input) {
34848
+ super(input);
34849
+ }
34850
+ /** fully qualified symbolic name of the type */
34851
+ getQualifiedName() {
34852
+ var _a;
34853
+ const qual = (_a = this.data) === null || _a === void 0 ? void 0 : _a.qualifiedName;
34854
+ if (qual === undefined) {
34855
+ return "I";
34856
+ }
34857
+ return qual;
34858
+ }
34817
34859
  toText() {
34818
34860
  return "```i```";
34819
34861
  }
@@ -34831,6 +34873,7 @@ class IntegerType extends _abstract_type_1.AbstractType {
34831
34873
  }
34832
34874
  }
34833
34875
  exports.IntegerType = IntegerType;
34876
+ IntegerType.singleton = new IntegerType();
34834
34877
  //# sourceMappingURL=integer_type.js.map
34835
34878
 
34836
34879
  /***/ }),
@@ -35050,6 +35093,24 @@ Object.defineProperty(exports, "__esModule", ({ value: true }));
35050
35093
  exports.StringType = void 0;
35051
35094
  const _abstract_type_1 = __webpack_require__(/*! ./_abstract_type */ "./node_modules/@abaplint/core/build/src/abap/types/basic/_abstract_type.js");
35052
35095
  class StringType extends _abstract_type_1.AbstractType {
35096
+ static get(input) {
35097
+ if (input === undefined) {
35098
+ return this.singleton;
35099
+ }
35100
+ return new StringType(input);
35101
+ }
35102
+ constructor(input) {
35103
+ super(input);
35104
+ }
35105
+ /** fully qualified symbolic name of the type */
35106
+ getQualifiedName() {
35107
+ var _a;
35108
+ const qual = (_a = this.data) === null || _a === void 0 ? void 0 : _a.qualifiedName;
35109
+ if (qual === undefined) {
35110
+ return "STRING";
35111
+ }
35112
+ return qual;
35113
+ }
35053
35114
  toText() {
35054
35115
  return "```string```";
35055
35116
  }
@@ -35067,6 +35128,7 @@ class StringType extends _abstract_type_1.AbstractType {
35067
35128
  }
35068
35129
  }
35069
35130
  exports.StringType = StringType;
35131
+ StringType.singleton = new StringType();
35070
35132
  //# sourceMappingURL=string_type.js.map
35071
35133
 
35072
35134
  /***/ }),
@@ -38227,7 +38289,7 @@ class DDIC {
38227
38289
  lookupBuiltinType(name, length, decimals, qualifiedName) {
38228
38290
  switch (name) {
38229
38291
  case "STRING":
38230
- return new Types.StringType({ qualifiedName: qualifiedName || name });
38292
+ return Types.StringType.get({ qualifiedName: qualifiedName || name });
38231
38293
  case "XSTRING":
38232
38294
  return new Types.XStringType({ qualifiedName: qualifiedName || name });
38233
38295
  case "D":
@@ -38261,7 +38323,7 @@ class DDIC {
38261
38323
  case "CSEQUENCE":
38262
38324
  return new Types.CSequenceType({ qualifiedName: qualifiedName });
38263
38325
  case "I":
38264
- return new Types.IntegerType({ qualifiedName: qualifiedName || name });
38326
+ return Types.IntegerType.get({ qualifiedName: qualifiedName || name });
38265
38327
  case "INT8": // todo, take version into account
38266
38328
  return new Types.Integer8Type({ qualifiedName: qualifiedName || name });
38267
38329
  case "F":
@@ -38551,13 +38613,14 @@ class DDIC {
38551
38613
  case "INT1":
38552
38614
  case "INT2":
38553
38615
  case "INT4":
38616
+ return Types.IntegerType.get({ qualifiedName: qualifiedName });
38554
38617
  case "INT8":
38555
- return new Types.IntegerType({ qualifiedName: qualifiedName });
38618
+ return new Types.Integer8Type({ qualifiedName: qualifiedName });
38556
38619
  case "SSTR": // 1 <= len <= 1333
38557
38620
  case "SSTRING": // 1 <= len <= 1333
38558
38621
  case "STRG": // 256 <= len
38559
38622
  case "STRING": // 256 <= len
38560
- return new Types.StringType({ qualifiedName: qualifiedName || "STRING" });
38623
+ return Types.StringType.get({ qualifiedName: qualifiedName });
38561
38624
  case "RSTR": // 256 <= len
38562
38625
  case "RAWSTRING": // 256 <= len
38563
38626
  case "GEOM_EWKB":
@@ -48289,7 +48352,7 @@ class Registry {
48289
48352
  }
48290
48353
  static abaplintVersion() {
48291
48354
  // magic, see build script "version.sh"
48292
- return "2.101.14";
48355
+ return "2.101.15";
48293
48356
  }
48294
48357
  getDDICReferences() {
48295
48358
  return this.ddicReferences;
@@ -53537,6 +53600,10 @@ Make sure to test the downported code, it might not always be completely correct
53537
53600
  else if (fieldList.concatTokens().toUpperCase() === "COUNT( * )") {
53538
53601
  fieldDefinition = `DATA ${name} TYPE i.`;
53539
53602
  }
53603
+ else if (fieldList.concatTokens().toUpperCase() === "@ABAP_TRUE"
53604
+ || fieldList.concatTokens().toUpperCase() === "@ABAP_FALSE") {
53605
+ fieldDefinition = `DATA ${name} TYPE abap_bool.`;
53606
+ }
53540
53607
  else if (fieldList.getChildren().length === 1 && fieldList.getChildren()[0].get() instanceof Expressions.SQLAggregation) {
53541
53608
  const c = fieldList.getChildren()[0];
53542
53609
  if (c instanceof nodes_1.ExpressionNode) {
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@abaplint/cli",
3
- "version": "2.101.14",
3
+ "version": "2.101.15",
4
4
  "description": "abaplint - Command Line Interface",
5
5
  "funding": "https://github.com/sponsors/larshp",
6
6
  "bin": {
@@ -38,7 +38,7 @@
38
38
  },
39
39
  "homepage": "https://abaplint.org",
40
40
  "devDependencies": {
41
- "@abaplint/core": "^2.101.14",
41
+ "@abaplint/core": "^2.101.15",
42
42
  "@types/chai": "^4.3.5",
43
43
  "@types/glob": "^7.2.0",
44
44
  "@types/minimist": "^1.2.2",