@abaplint/runtime
Version:
Transpiler - Runtime
74 lines • 2.79 kB
JavaScript
;
Object.defineProperty(exports, "__esModule", { value: true });
exports.expandDynamic = expandDynamic;
const expand_in_1 = require("./expand_in");
const types_1 = require("./types");
function expandDynamic(code, evaluate) {
// console.dir(code);
if (code === "") {
return "1 = 1";
}
else {
// yea, this is also wrong,
code = code.replace(/ EQ /g, " = ");
// todo more here, this is just one simple case,
let regex = /(\w+) IN @?<(\w+)>-(\w+)/;
while (true) {
const match = code.match(regex);
if (match && match[1] && match[2] && match[3]) {
let name = "fs_" + match[2] + "_";
name = name.toLowerCase();
let found = evaluate(name);
if (found instanceof types_1.FieldSymbol) {
found = found.get()[match[3].toLowerCase()];
if (found === undefined) {
throw new Error(`expandDynamic: Field symbol ${name} does not have field ${match[2]}`);
}
code = code.replace(regex, (0, expand_in_1.expandIN)(match[1].toLowerCase(), found));
}
}
else {
break;
}
}
// todo more here, this is just one simple case,
regex = / @?<(\w+)>-(\w+)/;
while (true) {
const match = code.match(regex);
if (match && match[1] && match[2]) {
let name = "fs_" + match[1] + "_";
name = name.toLowerCase();
let found = evaluate(name);
if (found instanceof types_1.FieldSymbol) {
found = found.get()[match[2].toLowerCase()];
if (found === undefined) {
throw new Error(`expandDynamic: Field symbol ${name} does not have field ${match[2]}`);
}
code = code.replace(regex, " '" + found.get() + "'");
}
}
else {
break;
}
}
// todo more here, this is just one simple case,
regex = / @?<(\w+)>/;
while (true) {
const match = code.match(regex);
if (match && match[1]) {
let name = "fs_" + match[1] + "_";
name = name.toLowerCase();
const found = evaluate(name);
if (found instanceof types_1.FieldSymbol) {
code = code.replace(regex, " '" + found.get() + "'");
}
}
else {
break;
}
}
// console.dir(code);
return code;
}
}
//# sourceMappingURL=expand_dynamic.js.map