@abaplint/transpiler 2.10.47 → 2.10.49
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,7 +5,8 @@ import { IExpressionTranspiler } from "./_expression_transpiler";
|
|
|
5
5
|
export declare class ConstantTranspiler implements IExpressionTranspiler {
|
|
6
6
|
private readonly addGet;
|
|
7
7
|
constructor(addGet?: boolean);
|
|
8
|
+
private handleInteger;
|
|
8
9
|
transpile(node: Nodes.ExpressionNode, traversal: Traversal): Chunk;
|
|
9
|
-
private
|
|
10
|
+
private handleCharacter;
|
|
10
11
|
static escape(str: string): string;
|
|
11
12
|
}
|
|
@@ -7,30 +7,33 @@ class ConstantTranspiler {
|
|
|
7
7
|
constructor(addGet = false) {
|
|
8
8
|
this.addGet = addGet;
|
|
9
9
|
}
|
|
10
|
+
handleInteger(int, traversal) {
|
|
11
|
+
const concat = int.concatTokens().trim();
|
|
12
|
+
const parsed = Number.parseInt(concat, 10);
|
|
13
|
+
let code = "";
|
|
14
|
+
if (concat.length > 18) {
|
|
15
|
+
// its potentially larger than Number.MAX_SAFE_INTEGER
|
|
16
|
+
// https://stackoverflow.com/questions/1379934/large-numbers-erroneously-rounded-in-javascript
|
|
17
|
+
code = `new abap.types.Integer8().set("${concat}")`;
|
|
18
|
+
}
|
|
19
|
+
else if (parsed > 2147483647 || parsed < -2147483648) {
|
|
20
|
+
code = `new abap.types.Integer8().set("${concat}")`;
|
|
21
|
+
}
|
|
22
|
+
else if (parsed >= -10 && parsed <= 200) {
|
|
23
|
+
code = `abap.IntegerFactory.get(${concat})`;
|
|
24
|
+
}
|
|
25
|
+
else {
|
|
26
|
+
code = `new abap.types.Integer().set(${concat})`;
|
|
27
|
+
}
|
|
28
|
+
if (this.addGet === true) {
|
|
29
|
+
code += ".get()";
|
|
30
|
+
}
|
|
31
|
+
return new chunk_1.Chunk().append(code, int, traversal);
|
|
32
|
+
}
|
|
10
33
|
transpile(node, traversal) {
|
|
11
34
|
const int = node.findFirstExpression(core_1.Expressions.Integer);
|
|
12
35
|
if (int) {
|
|
13
|
-
|
|
14
|
-
const parsed = Number.parseInt(concat, 10);
|
|
15
|
-
let code = "";
|
|
16
|
-
if (concat.length > 18) {
|
|
17
|
-
// its potentially larger than Number.MAX_SAFE_INTEGER
|
|
18
|
-
// https://stackoverflow.com/questions/1379934/large-numbers-erroneously-rounded-in-javascript
|
|
19
|
-
code = `new abap.types.Integer8().set("${concat}")`;
|
|
20
|
-
}
|
|
21
|
-
else if (parsed > 2147483647 || parsed < -2147483648) {
|
|
22
|
-
code = `new abap.types.Integer8().set("${concat}")`;
|
|
23
|
-
}
|
|
24
|
-
else if (parsed >= -10 && parsed <= 200) {
|
|
25
|
-
code = `abap.IntegerFactory.get(${concat})`;
|
|
26
|
-
}
|
|
27
|
-
else {
|
|
28
|
-
code = `new abap.types.Integer().set(${concat})`;
|
|
29
|
-
}
|
|
30
|
-
if (this.addGet === true) {
|
|
31
|
-
code += ".get()";
|
|
32
|
-
}
|
|
33
|
-
return new chunk_1.Chunk().append(code, node, traversal);
|
|
36
|
+
return this.handleInteger(int, traversal);
|
|
34
37
|
}
|
|
35
38
|
let str = node.findDirectExpression(core_1.Expressions.ConstantString);
|
|
36
39
|
if (str === undefined) {
|
|
@@ -39,7 +42,7 @@ class ConstantTranspiler {
|
|
|
39
42
|
if (str) {
|
|
40
43
|
let res = str.getFirstToken().getStr();
|
|
41
44
|
if (res.startsWith("'") && this.addGet === false) {
|
|
42
|
-
const code = this.
|
|
45
|
+
const code = this.handleCharacter(res);
|
|
43
46
|
return new chunk_1.Chunk().append(code, node, traversal);
|
|
44
47
|
}
|
|
45
48
|
else if (res.startsWith("`") && this.addGet === false) {
|
|
@@ -67,7 +70,7 @@ class ConstantTranspiler {
|
|
|
67
70
|
chunk.appendString(",");
|
|
68
71
|
}
|
|
69
72
|
if (res.startsWith("'") && this.addGet === false) {
|
|
70
|
-
const code = this.
|
|
73
|
+
const code = this.handleCharacter(res);
|
|
71
74
|
chunk.append(code, node, traversal);
|
|
72
75
|
}
|
|
73
76
|
else if (res.startsWith("`") && this.addGet === false) {
|
|
@@ -80,14 +83,15 @@ class ConstantTranspiler {
|
|
|
80
83
|
}
|
|
81
84
|
return new chunk_1.Chunk(`todo, Constant`);
|
|
82
85
|
}
|
|
83
|
-
|
|
86
|
+
handleCharacter(res) {
|
|
84
87
|
const foo = res.replace(/''/g, "'");
|
|
85
88
|
let length = foo.length - 2;
|
|
86
89
|
if (length <= 0) {
|
|
87
90
|
// note: Characters cannot have length = zero, 1 is minimum
|
|
88
91
|
length = 1;
|
|
89
92
|
}
|
|
90
|
-
const code = "
|
|
93
|
+
const code = "abap.CharacterFactory.get(" + length + ", " + ConstantTranspiler.escape(res) + ")";
|
|
94
|
+
// const code = "new abap.types.Character(" + length + ").set(" + ConstantTranspiler.escape(res) + ")";
|
|
91
95
|
return code;
|
|
92
96
|
}
|
|
93
97
|
static escape(str) {
|
|
@@ -7,9 +7,8 @@ class ClearTranspiler {
|
|
|
7
7
|
transpile(node, traversal) {
|
|
8
8
|
const target = traversal.traverse(node.findDirectExpression(abaplint.Expressions.Target));
|
|
9
9
|
const ret = new chunk_1.Chunk();
|
|
10
|
-
ret.append("abap.statements.clear(", node, traversal);
|
|
11
10
|
ret.appendChunk(target);
|
|
12
|
-
ret.append(");", node.getLastToken(), traversal);
|
|
11
|
+
ret.append(".clear();", node.getLastToken(), traversal);
|
|
13
12
|
return ret;
|
|
14
13
|
}
|
|
15
14
|
}
|
|
@@ -1,16 +1,10 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
3
|
exports.RefreshTranspiler = void 0;
|
|
4
|
-
const
|
|
5
|
-
const chunk_1 = require("../chunk");
|
|
4
|
+
const clear_1 = require("./clear");
|
|
6
5
|
class RefreshTranspiler {
|
|
7
6
|
transpile(node, traversal) {
|
|
8
|
-
|
|
9
|
-
const ret = new chunk_1.Chunk();
|
|
10
|
-
ret.append("abap.statements.clear(", node, traversal);
|
|
11
|
-
ret.appendChunk(target);
|
|
12
|
-
ret.append(");", node.getLastToken(), traversal);
|
|
13
|
-
return ret;
|
|
7
|
+
return new clear_1.ClearTranspiler().transpile(node, traversal);
|
|
14
8
|
}
|
|
15
9
|
}
|
|
16
10
|
exports.RefreshTranspiler = RefreshTranspiler;
|
|
@@ -100,7 +100,7 @@ class SelectTranspiler {
|
|
|
100
100
|
throw new Error("FAE, todo, empty table");
|
|
101
101
|
} else {
|
|
102
102
|
const ${unique2} = ${faeTranspiled}.array();
|
|
103
|
-
|
|
103
|
+
${target}.clear();
|
|
104
104
|
for await (const ${unique} of ${unique2}) {
|
|
105
105
|
await abap.statements.select(${target}, {select: "${select.trim()}"${extra}}, {appending: true});
|
|
106
106
|
}
|