UNPKG

@abaplint/transpiler

Version:
35 lines 1.86 kB
"use strict"; 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