@abaplint/core 2.99.1 → 2.99.3

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.
@@ -817,7 +817,11 @@ declare class ChapterOfBookStructure extends AbstractObject {
817
817
  declare class CharacterType extends AbstractType {
818
818
  private readonly length;
819
819
  constructor(length: number, extra?: AbstractTypeData);
820
- cloneType(qualifiedName?: string, ddicName?: string): CharacterType;
820
+ cloneType(input: {
821
+ qualifiedName?: string;
822
+ ddicName?: string;
823
+ derivedFromConstant?: boolean;
824
+ }): CharacterType;
821
825
  getLength(): number;
822
826
  toText(): string;
823
827
  toABAP(): string;
@@ -239,6 +239,9 @@ class CurrentScope {
239
239
  return undefined;
240
240
  }
241
241
  const typePoolName = name.split("_")[0];
242
+ if (typePoolName.length !== 4) {
243
+ return undefined;
244
+ }
242
245
  const typePool = this.reg.getObject("TYPE", typePoolName);
243
246
  if (typePool === undefined) {
244
247
  return undefined;
@@ -253,6 +256,11 @@ class CurrentScope {
253
256
  return undefined;
254
257
  }
255
258
  const typePoolName = name.split("_")[0];
259
+ if (typePoolName.length !== 4 || new ddic_1.DDIC(this.reg).lookupNoVoid(name) !== undefined) {
260
+ // this is tricky, it should not do recursion when parsing the type pool itself,
261
+ // think about DTEL ABAP_ENCOD vs TYPE ABAP
262
+ return undefined;
263
+ }
256
264
  const typePool = this.reg.getObject("TYPE", typePoolName);
257
265
  if (typePool === undefined) {
258
266
  return undefined;
@@ -208,7 +208,7 @@ class TypeUtils {
208
208
  return false;
209
209
  }
210
210
  isAssignableStrict(source, target) {
211
- var _a, _b;
211
+ var _a, _b, _c, _d;
212
212
  /*
213
213
  console.dir(source);
214
214
  console.dir(target);
@@ -227,6 +227,20 @@ class TypeUtils {
227
227
  return false;
228
228
  }
229
229
  }
230
+ else if (source instanceof basic_1.HexType) {
231
+ if (target instanceof basic_1.HexType) {
232
+ if (((_c = source.getAbstractTypeData()) === null || _c === void 0 ? void 0 : _c.derivedFromConstant) === true) {
233
+ return source.getLength() <= target.getLength();
234
+ }
235
+ return source.getLength() === target.getLength();
236
+ }
237
+ else if (target instanceof basic_1.IntegerType) {
238
+ if (((_d = source.getAbstractTypeData()) === null || _d === void 0 ? void 0 : _d.derivedFromConstant) === true) {
239
+ return true;
240
+ }
241
+ return false;
242
+ }
243
+ }
230
244
  else if (source instanceof basic_1.StringType && target instanceof basic_1.StructureType) {
231
245
  if (this.structureContainsString(target)) {
232
246
  return false;
@@ -190,7 +190,7 @@ class BasicTypes {
190
190
  if (type instanceof basic_1.CharacterType
191
191
  && qualifiedName
192
192
  && qualifiedName.includes("-") === false) {
193
- type = type.cloneType(qualifiedName);
193
+ type = type.cloneType({ qualifiedName });
194
194
  }
195
195
  return type;
196
196
  }
@@ -94,10 +94,26 @@ class FieldChain {
94
94
  context = new attribute_name_1.AttributeName().runSyntax(context, current, scope, filename, refType);
95
95
  }
96
96
  else if (current.get() instanceof Expressions.FieldOffset && current instanceof nodes_1.ExpressionNode) {
97
- new field_offset_1.FieldOffset().runSyntax(current, scope, filename);
97
+ const offset = new field_offset_1.FieldOffset().runSyntax(current, scope, filename);
98
+ if (offset) {
99
+ if (context instanceof basic_1.CharacterType) {
100
+ context = new basic_1.CharacterType(context.getLength() - offset);
101
+ }
102
+ else if (context instanceof basic_1.HexType) {
103
+ context = new basic_1.HexType(context.getLength() - offset);
104
+ }
105
+ }
98
106
  }
99
107
  else if (current.get() instanceof Expressions.FieldLength && current instanceof nodes_1.ExpressionNode) {
100
- new field_length_1.FieldLength().runSyntax(current, scope, filename);
108
+ const length = new field_length_1.FieldLength().runSyntax(current, scope, filename);
109
+ if (length) {
110
+ if (context instanceof basic_1.CharacterType) {
111
+ context = new basic_1.CharacterType(length);
112
+ }
113
+ else if (context instanceof basic_1.HexType) {
114
+ context = new basic_1.HexType(length);
115
+ }
116
+ }
101
117
  }
102
118
  }
103
119
  return context;
@@ -9,6 +9,15 @@ class FieldLength {
9
9
  const field = node.findDirectExpression(Expressions.SimpleFieldChain2);
10
10
  if (field) {
11
11
  new field_chain_1.FieldChain().runSyntax(field, scope, filename, _reference_1.ReferenceType.DataReadReference);
12
+ return undefined;
13
+ }
14
+ else {
15
+ const children = node.getChildren();
16
+ const num = children[children.length - 2];
17
+ if (num.getLastToken().getStr() === "*") {
18
+ return undefined;
19
+ }
20
+ return parseInt(num.getLastToken().getStr(), 10);
12
21
  }
13
22
  }
14
23
  }
@@ -9,6 +9,10 @@ class FieldOffset {
9
9
  const field = node.findDirectExpression(Expressions.SimpleFieldChain2);
10
10
  if (field) {
11
11
  new field_chain_1.FieldChain().runSyntax(field, scope, filename, _reference_1.ReferenceType.DataReadReference);
12
+ return undefined;
13
+ }
14
+ else {
15
+ return parseInt(node.getLastToken().getStr(), 10);
12
16
  }
13
17
  }
14
18
  }
@@ -10,13 +10,16 @@ class CharacterType extends _abstract_type_1.AbstractType {
10
10
  }
11
11
  this.length = length;
12
12
  }
13
- cloneType(qualifiedName, ddicName) {
13
+ cloneType(input) {
14
14
  const clone = Object.assign({}, this.getAbstractTypeData()) || {};
15
- if (qualifiedName) {
16
- clone.qualifiedName = qualifiedName;
15
+ if (input.qualifiedName) {
16
+ clone.qualifiedName = input.qualifiedName;
17
17
  }
18
- if (ddicName) {
19
- clone.ddicName = ddicName;
18
+ if (input.ddicName) {
19
+ clone.ddicName = input.ddicName;
20
+ }
21
+ if (input.derivedFromConstant) {
22
+ clone.derivedFromConstant = input.derivedFromConstant;
20
23
  }
21
24
  return new CharacterType(this.length, clone);
22
25
  }
@@ -63,7 +63,7 @@ class Registry {
63
63
  }
64
64
  static abaplintVersion() {
65
65
  // magic, see build script "version.sh"
66
- return "2.99.1";
66
+ return "2.99.3";
67
67
  }
68
68
  getDDICReferences() {
69
69
  return this.references;
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@abaplint/core",
3
- "version": "2.99.1",
3
+ "version": "2.99.3",
4
4
  "description": "abaplint - Core API",
5
5
  "main": "build/src/index.js",
6
6
  "typings": "build/abaplint.d.ts",
@@ -47,10 +47,10 @@
47
47
  },
48
48
  "homepage": "https://abaplint.org",
49
49
  "devDependencies": {
50
- "@microsoft/api-extractor": "^7.34.5",
51
- "@types/chai": "^4.3.4",
50
+ "@microsoft/api-extractor": "^7.34.7",
51
+ "@types/chai": "^4.3.5",
52
52
  "@types/mocha": "^10.0.1",
53
- "@types/node": "^18.16.2",
53
+ "@types/node": "^18.16.3",
54
54
  "chai": "^4.3.7",
55
55
  "eslint": "^8.39.0",
56
56
  "mocha": "^10.2.0",