@abaplint/transpiler 2.11.10 → 2.11.12

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.
@@ -5,6 +5,7 @@ const core_1 = require("@abaplint/core");
5
5
  const _1 = require(".");
6
6
  const constant_1 = require("./constant");
7
7
  const chunk_1 = require("../chunk");
8
+ const transpile_types_1 = require("../transpile_types");
8
9
  class SourceTranspiler {
9
10
  addGet;
10
11
  constructor(addGet = false) {
@@ -69,6 +70,9 @@ class SourceTranspiler {
69
70
  else if (c.get() instanceof core_1.Expressions.TextElement) {
70
71
  ret = new chunk_1.Chunk().appendString(`new abap.types.String().set("${c.concatTokens()}")`);
71
72
  }
73
+ else if (c.get() instanceof core_1.Expressions.TypeNameOrInfer) {
74
+ continue;
75
+ }
72
76
  else if (c.get() instanceof core_1.Expressions.ConvBody) {
73
77
  const typ = node.findFirstExpression(core_1.Expressions.TypeNameOrInfer);
74
78
  if (typ === undefined) {
@@ -95,6 +99,23 @@ class SourceTranspiler {
95
99
  ret.append("abap.builtin.boolc(", c, traversal);
96
100
  post.append(")", c, traversal);
97
101
  }
102
+ else if (c instanceof core_1.Nodes.TokenNode && c.getFirstToken().getStr().toUpperCase() === "REF") {
103
+ const infer = node.findDirectExpression(core_1.Expressions.TypeNameOrInfer);
104
+ if (infer?.concatTokens() !== "#") {
105
+ throw new Error("transpiler: REF # todo1");
106
+ }
107
+ const scope = traversal.findCurrentScopeByToken(infer.getFirstToken());
108
+ const inferType = traversal.lookupInferred(infer, scope);
109
+ if (inferType === undefined) {
110
+ throw new Error("transpiler: REF # todo, lookupInferred, " + node.concatTokens());
111
+ }
112
+ const typ = new transpile_types_1.TranspileTypes().toType(inferType);
113
+ if (typ.startsWith("new abap.types.DataReference(") === false) {
114
+ throw new Error("transpiler: REF # unexpected type");
115
+ }
116
+ ret.append(`${typ}.assign(`, c, traversal);
117
+ post.append(")", c, traversal);
118
+ }
98
119
  else if (c instanceof core_1.Nodes.TokenNode && c.getFirstToken().getStr().toUpperCase() === "BIT") { // todo, this will not work in the general case
99
120
  ret.append("abap.operators.bitnot(", c, traversal);
100
121
  post.append(")", c, traversal);
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@abaplint/transpiler",
3
- "version": "2.11.10",
3
+ "version": "2.11.12",
4
4
  "description": "Transpiler",
5
5
  "main": "build/src/index.js",
6
6
  "typings": "build/src/index.d.ts",
@@ -29,7 +29,7 @@
29
29
  "author": "abaplint",
30
30
  "license": "MIT",
31
31
  "dependencies": {
32
- "@abaplint/core": "^2.113.155",
32
+ "@abaplint/core": "^2.113.159",
33
33
  "source-map": "^0.7.6"
34
34
  },
35
35
  "devDependencies": {