@abaplint/transpiler 2.11.68 → 2.11.70

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.
@@ -6,7 +6,7 @@ const chunk_1 = require("../chunk");
6
6
  class CompareTranspiler {
7
7
  transpile(node, traversal) {
8
8
  // todo, this is not correct
9
- const concat = node.concatTokens().toUpperCase();
9
+ let concat = node.concatTokens().toUpperCase();
10
10
  let pre = concat.startsWith("NOT ") ? "!" : "";
11
11
  const sources = node.findDirectExpressionsMulti([core_1.Expressions.Source, core_1.Expressions.SourceFieldSymbolChain, core_1.Expressions.SourceFieldSymbol]);
12
12
  if (sources.length === 1) {
@@ -36,7 +36,10 @@ class CompareTranspiler {
36
36
  return new chunk_1.Chunk().appendString("abap.compare.assigned(").appendChunk(s0).appendString(")");
37
37
  }
38
38
  if (concat.endsWith(" IS SUPPLIED")) {
39
- return new chunk_1.Chunk().appendString(pre + "INPUT && INPUT." + concat.replace(" IS SUPPLIED", "").toLowerCase());
39
+ if (concat.startsWith("NOT ")) {
40
+ concat = concat.replace("NOT ", "");
41
+ }
42
+ return new chunk_1.Chunk().appendString(pre + "(INPUT && INPUT." + concat.replace(" IS SUPPLIED", "" + ")").toLowerCase());
40
43
  }
41
44
  else if (concat.endsWith(" IS NOT SUPPLIED")) {
42
45
  return new chunk_1.Chunk().appendString(pre + "INPUT && INPUT." + concat.replace(" IS NOT SUPPLIED", "").toLowerCase() + " === undefined");
@@ -5,6 +5,8 @@ const core_1 = require("@abaplint/core");
5
5
  const chunk_1 = require("../chunk");
6
6
  const type_name_or_infer_1 = require("./type_name_or_infer");
7
7
  const transpile_types_1 = require("../transpile_types");
8
+ const component_chain_1 = require("./component_chain");
9
+ const unique_identifier_1 = require("../unique_identifier");
8
10
  class CorrespondingBodyTranspiler {
9
11
  transpile(typ, body, traversal) {
10
12
  if (!(typ.get() instanceof core_1.Expressions.TypeNameOrInfer)) {
@@ -13,6 +15,8 @@ class CorrespondingBodyTranspiler {
13
15
  const type = new type_name_or_infer_1.TypeNameOrInfer().findType(typ, traversal);
14
16
  let target = transpile_types_1.TranspileTypes.toType(type);
15
17
  let source;
18
+ const mapping = [];
19
+ const mappingRow = { componentName: undefined, componentChain: undefined };
16
20
  for (const child of body.getChildren()) {
17
21
  const c = child.get();
18
22
  if (c instanceof core_1.Expressions.Source && child instanceof core_1.Nodes.ExpressionNode) {
@@ -22,12 +26,33 @@ class CorrespondingBodyTranspiler {
22
26
  source = traversal.traverse(child?.findDirectExpression(core_1.Expressions.Source));
23
27
  target = `abap.statements.moveCorresponding(${source.getCode()}, ${target})`;
24
28
  }
29
+ else if (c instanceof core_1.Expressions.CorrespondingBodyMapping && child instanceof core_1.Nodes.ExpressionNode) {
30
+ for (const cc of child.getChildren()) {
31
+ if (cc.get() instanceof core_1.Expressions.ComponentName) {
32
+ mappingRow.componentName = cc;
33
+ }
34
+ else if (cc.get() instanceof core_1.Expressions.ComponentChain) {
35
+ mappingRow.componentChain = cc;
36
+ mapping.push(mappingRow);
37
+ }
38
+ }
39
+ }
25
40
  else {
26
- throw new Error("CorrespondingBodyTranspiler, todo, " + c.constructor.name);
41
+ throw new Error("CorrespondingBodyTranspiler, todo, " + c.constructor.name + ", " + body.concatTokens());
27
42
  }
28
43
  }
29
44
  const ret = new chunk_1.Chunk();
30
- ret.appendString(`abap.statements.moveCorresponding(${source.getCode()}, ${target})`);
45
+ const id = unique_identifier_1.UniqueIdentifier.get();
46
+ ret.appendString("(await (async () => {\n");
47
+ ret.appendString(`const ${id} = ${target};\n`);
48
+ ret.appendString(`abap.statements.moveCorresponding(${source.getCode()}, ${id});\n`);
49
+ for (const map of mapping) {
50
+ const componentName = map.componentName.concatTokens().toLowerCase();
51
+ const chain = new component_chain_1.ComponentChainTranspiler().transpile(map.componentChain, traversal).getCode();
52
+ ret.appendString(`${id}.get().${componentName}.set(${source.getCode()}.get().${chain});\n`);
53
+ }
54
+ ret.appendString("return " + id + ";\n");
55
+ ret.appendString("})())");
31
56
  return ret;
32
57
  }
33
58
  }
@@ -0,0 +1,6 @@
1
+ import { Nodes } from "@abaplint/core";
2
+ import { Traversal } from "../traversal";
3
+ import { Chunk } from "../chunk";
4
+ export declare class FilterBodyTranspiler {
5
+ transpile(typ: Nodes.ExpressionNode, body: Nodes.ExpressionNode, traversal: Traversal): Chunk;
6
+ }
@@ -0,0 +1,40 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.FilterBodyTranspiler = void 0;
4
+ const core_1 = require("@abaplint/core");
5
+ const chunk_1 = require("../chunk");
6
+ const type_name_or_infer_1 = require("./type_name_or_infer");
7
+ const transpile_types_1 = require("../transpile_types");
8
+ const unique_identifier_1 = require("../unique_identifier");
9
+ class FilterBodyTranspiler {
10
+ transpile(typ, body, traversal) {
11
+ if (!(typ.get() instanceof core_1.Expressions.TypeNameOrInfer)) {
12
+ throw new Error("FilterBodyTranspiler, Expected TypeNameOrInfer");
13
+ }
14
+ else if (body.findDirectTokenByText("EXCEPT")) {
15
+ return new chunk_1.Chunk(`(() => { throw new Error("FilterBodyTranspiler EXCEPT in, not supported, transpiler"); })()`);
16
+ }
17
+ const source = traversal.traverse(body.findDirectExpression(core_1.Expressions.Source)).getCode();
18
+ const type = new type_name_or_infer_1.TypeNameOrInfer().findType(typ, traversal);
19
+ const target = transpile_types_1.TranspileTypes.toType(type);
20
+ const ret = new chunk_1.Chunk();
21
+ ret.appendString("(await (async () => {\n");
22
+ let loopWhere = "";
23
+ const whereNode = body.findDirectExpression(core_1.Expressions.ComponentCond);
24
+ if (whereNode) {
25
+ const where = traversal.traverse(whereNode).getCode();
26
+ loopWhere = `, {"where": async ` + where + `}`;
27
+ }
28
+ const id = unique_identifier_1.UniqueIdentifier.get();
29
+ const loop = unique_identifier_1.UniqueIdentifier.get();
30
+ ret.appendString(`const ${id} = ${target};\n`);
31
+ ret.appendString(`for await (const ${loop} of abap.statements.loop(${source}${loopWhere})) {\n`);
32
+ ret.appendString(`abap.statements.insertInternal({"table": ${id}, "data": ${loop}});\n`);
33
+ ret.appendString(`}\n`);
34
+ ret.appendString(`return ${id};\n`);
35
+ ret.appendString("})())");
36
+ return ret;
37
+ }
38
+ }
39
+ exports.FilterBodyTranspiler = FilterBodyTranspiler;
40
+ //# sourceMappingURL=filter_body.js.map
@@ -8,6 +8,7 @@ const chunk_1 = require("../chunk");
8
8
  const transpile_types_1 = require("../transpile_types");
9
9
  const value_body_1 = require("./value_body");
10
10
  const corresponding_body_1 = require("./corresponding_body");
11
+ const filter_body_1 = require("./filter_body");
11
12
  class SourceTranspiler {
12
13
  addGet;
13
14
  constructor(addGet = false) {
@@ -99,6 +100,9 @@ class SourceTranspiler {
99
100
  else if (c.get() instanceof core_1.Expressions.SwitchBody) {
100
101
  continue;
101
102
  }
103
+ else if (c.get() instanceof core_1.Expressions.FilterBody) {
104
+ continue;
105
+ }
102
106
  else {
103
107
  ret.appendString("SourceUnknown$" + c.get().constructor.name);
104
108
  }
@@ -165,6 +169,17 @@ class SourceTranspiler {
165
169
  }
166
170
  ret.appendChunk(new _1.SwitchBodyTranspiler().transpile(typ, switchBody, traversal));
167
171
  }
172
+ else if (c instanceof core_1.Nodes.TokenNode && c.getFirstToken().getStr().toUpperCase() === "FILTER") {
173
+ const typ = node.findDirectExpression(core_1.Expressions.TypeNameOrInfer);
174
+ if (typ === undefined) {
175
+ throw new Error("TypeNameOrInfer not found in FilterBody");
176
+ }
177
+ const filterBody = node.findDirectExpression(core_1.Expressions.FilterBody);
178
+ if (filterBody === undefined) {
179
+ throw new Error("FilterBody not found");
180
+ }
181
+ ret.appendChunk(new filter_body_1.FilterBodyTranspiler().transpile(typ, filterBody, traversal));
182
+ }
168
183
  else if (c instanceof core_1.Nodes.TokenNode && c.getFirstToken().getStr().toUpperCase() === "REF") {
169
184
  const infer = node.findDirectExpression(core_1.Expressions.TypeNameOrInfer);
170
185
  if (infer?.concatTokens() !== "#") {
@@ -20,6 +20,7 @@ export * from "./class_definition_load";
20
20
  export * from "./class_implementation";
21
21
  export * from "./class_local_friends";
22
22
  export * from "./clear";
23
+ export * from "./static";
23
24
  export * from "./close_cursor";
24
25
  export * from "./close_dataset";
25
26
  export * from "./collect";
@@ -36,6 +36,7 @@ __exportStar(require("./class_definition_load"), exports);
36
36
  __exportStar(require("./class_implementation"), exports);
37
37
  __exportStar(require("./class_local_friends"), exports);
38
38
  __exportStar(require("./clear"), exports);
39
+ __exportStar(require("./static"), exports);
39
40
  __exportStar(require("./close_cursor"), exports);
40
41
  __exportStar(require("./close_dataset"), exports);
41
42
  __exportStar(require("./collect"), exports);
@@ -0,0 +1,7 @@
1
+ import * as abaplint from "@abaplint/core";
2
+ import { IStatementTranspiler } from "./_statement_transpiler";
3
+ import { Traversal } from "../traversal";
4
+ import { Chunk } from "../chunk";
5
+ export declare class StaticTranspiler implements IStatementTranspiler {
6
+ transpile(_node: abaplint.Nodes.StatementNode, _traversal: Traversal): Chunk;
7
+ }
@@ -0,0 +1,11 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.StaticTranspiler = void 0;
4
+ const chunk_1 = require("../chunk");
5
+ class StaticTranspiler {
6
+ transpile(_node, _traversal) {
7
+ return new chunk_1.Chunk(`throw new Error("Statics, not supported, transpiler");`);
8
+ }
9
+ }
10
+ exports.StaticTranspiler = StaticTranspiler;
11
+ //# sourceMappingURL=static.js.map
@@ -19,7 +19,7 @@ exports.config = {
19
19
  "communication": true,
20
20
  "systemCall": true,
21
21
  "break": false,
22
- "statics": true,
22
+ "statics": false,
23
23
  "endselect": false,
24
24
  "defaultKey": false,
25
25
  },
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@abaplint/transpiler",
3
- "version": "2.11.68",
3
+ "version": "2.11.70",
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.193",
32
+ "@abaplint/core": "^2.113.195",
33
33
  "source-map": "^0.7.6"
34
34
  },
35
35
  "devDependencies": {