@abaplint/transpiler
Version:
34 lines • 1.49 kB
JavaScript
;
Object.defineProperty(exports, "__esModule", { value: true });
exports.LetTranspiler = void 0;
const core_1 = require("@abaplint/core");
const chunk_1 = require("../chunk");
const transpile_types_1 = require("../transpile_types");
class LetTranspiler {
transpile(node, traversal) {
if (!(node.get() instanceof core_1.Expressions.Let)) {
throw new Error("LetTranspiler, Expected Let");
}
const ret = new chunk_1.Chunk();
for (const def of node.findAllExpressions(core_1.Expressions.InlineFieldDefinition)) {
const nameToken = def.findDirectExpression(core_1.Expressions.Field);
if (nameToken === undefined) {
throw new Error("LetTranspiler, Expected Field");
}
const name = nameToken?.concatTokens();
const scope = traversal.findCurrentScopeByToken(node.getFirstToken());
const variable = scope?.findVariable(name);
if (variable === undefined) {
throw new Error("LetTranspiler, Expected Variable");
}
ret.appendString(transpile_types_1.TranspileTypes.declare(variable));
const source = def.findDirectExpression(core_1.Expressions.Source);
if (source) {
ret.appendString(name + `.set(${traversal.traverse(source).getCode()});`);
}
}
return ret;
}
}
exports.LetTranspiler = LetTranspiler;
//# sourceMappingURL=let.js.map