@abaplint/transpiler
Version:
35 lines • 1.86 kB
JavaScript
;
Object.defineProperty(exports, "__esModule", { value: true });
exports.RaiseTranspiler = void 0;
const abaplint = require("@abaplint/core");
const chunk_1 = require("../chunk");
const expressions_1 = require("../expressions");
const unique_identifier_1 = require("../unique_identifier");
class RaiseTranspiler {
transpile(node, traversal) {
const classNameToken = node.findFirstExpression(abaplint.Expressions.ClassName)?.getFirstToken();
const className = classNameToken?.getStr();
if (className === undefined) {
const s = node.findFirstExpression(abaplint.Expressions.SimpleSource2);
if (s === undefined) {
const name = node.findFirstExpression(abaplint.Expressions.ExceptionName)?.concatTokens().toLowerCase();
return new chunk_1.Chunk().append(`throw new abap.ClassicError({classic: "${name}"});`, node, traversal);
}
const sCode = new expressions_1.SourceTranspiler(true).transpile(s, traversal).getCode();
return new chunk_1.Chunk().append(`throw ${sCode};`, node, traversal);
}
let p = "";
const parameters = node.findFirstExpression(abaplint.Expressions.ParameterListS);
if (parameters) {
p = traversal.traverse(parameters).getCode();
}
const extra = `{"INTERNAL_FILENAME": "${traversal.getFilename()}","INTERNAL_LINE": ${node.getStart().getRow()}}`;
const lookup = traversal.lookupClassOrInterface(classNameToken?.getStr(), classNameToken);
const id = unique_identifier_1.UniqueIdentifier.get();
return new chunk_1.Chunk().append(`const ${id} = await (new ${lookup}()).constructor_(${p});
${id}.EXTRA_CX = ${extra};
throw ${id};`, node, traversal);
}
}
exports.RaiseTranspiler = RaiseTranspiler;
//# sourceMappingURL=raise.js.map