@kipper/target-js
Version:
The JavaScript target for the Kipper compiler 🦊
96 lines • 4.46 kB
JavaScript
;
Object.defineProperty(exports, "__esModule", { value: true });
exports.JavaScriptTargetBuiltInGenerator = exports.genJSVariable = exports.genJSFunction = void 0;
const tslib_1 = require("tslib");
const core_1 = require("@kipper/core");
const tools_1 = require("./tools");
const target_1 = require("./target");
function genJSFunction(signature, body) {
return [
[
target_1.TargetJS.getBuiltInIdentifier(signature.identifier),
" ",
"=",
" ",
(0, tools_1.createJSFunctionSignature)(signature),
" ",
body,
";",
],
];
}
exports.genJSFunction = genJSFunction;
function genJSVariable(varSpec, value) {
return [...(varSpec.local ? ["const", " "] : []), target_1.TargetJS.getBuiltInIdentifier(varSpec), " ", "=", " ", value, ";"];
}
exports.genJSVariable = genJSVariable;
class JavaScriptTargetBuiltInGenerator extends core_1.KipperTargetBuiltInGenerator {
numToStr(funcSpec) {
return tslib_1.__awaiter(this, void 0, void 0, function* () {
const signature = (0, tools_1.getJSFunctionSignature)(funcSpec);
const convArgIdentifier = signature.params[0];
return genJSFunction(signature, `{ return (${convArgIdentifier}).toString(); }`);
});
}
strToNum(funcSpec) {
return tslib_1.__awaiter(this, void 0, void 0, function* () {
const signature = (0, tools_1.getJSFunctionSignature)(funcSpec);
const convArgIdentifier = signature.params[0];
return genJSFunction(signature, `{ return parseInt(${convArgIdentifier}); }`);
});
}
boolToStr(funcSpec) {
return tslib_1.__awaiter(this, void 0, void 0, function* () {
const signature = (0, tools_1.getJSFunctionSignature)(funcSpec);
const convArgIdentifier = signature.params[0];
return genJSFunction(signature, `{ return \`\${${convArgIdentifier}}\`; }`);
});
}
boolToNum(funcSpec) {
return tslib_1.__awaiter(this, void 0, void 0, function* () {
const signature = (0, tools_1.getJSFunctionSignature)(funcSpec);
const convArgIdentifier = signature.params[0];
return genJSFunction(signature, `{ return ${convArgIdentifier} ? 1 : 0; }`);
});
}
slice(funcSpec) {
return tslib_1.__awaiter(this, void 0, void 0, function* () {
const signature = (0, tools_1.getJSFunctionSignature)(funcSpec);
const objLikeIdentifier = signature.params[0];
const startIdentifier = signature.params[1];
const endIdentifier = signature.params[2];
return genJSFunction(signature, `{ return ${objLikeIdentifier} ? ${objLikeIdentifier}.slice(${startIdentifier}, ${endIdentifier}) : ${objLikeIdentifier}; }`);
});
}
index(funcSpec) {
return tslib_1.__awaiter(this, void 0, void 0, function* () {
const signature = (0, tools_1.getJSFunctionSignature)(funcSpec);
const arrayLikeIdentifier = signature.params[0];
const indexIdentifier = signature.params[1];
return genJSFunction(signature, `{ if (${indexIdentifier} >= ${arrayLikeIdentifier}.length) ` +
`throw new __kipper.IndexError(\`Index '\${${indexIdentifier}}' out of bonds of array-like.\`); ` +
`return ${arrayLikeIdentifier}[${indexIdentifier}]; }`);
});
}
print(funcSpec) {
return tslib_1.__awaiter(this, void 0, void 0, function* () {
const signature = (0, tools_1.getJSFunctionSignature)(funcSpec);
const printArgIdentifier = signature.params[0];
return genJSFunction(signature, `{ console.log(${printArgIdentifier}); }`);
});
}
len(funcSpec) {
return tslib_1.__awaiter(this, void 0, void 0, function* () {
const signature = (0, tools_1.getJSFunctionSignature)(funcSpec);
const lenArgIdentifier = signature.params[0];
return genJSFunction(signature, `{ return ${lenArgIdentifier}.length; }`);
});
}
__name__(varSpec, programCtx) {
return tslib_1.__awaiter(this, void 0, void 0, function* () {
return [genJSVariable(varSpec, `"${programCtx.fileName}"`)];
});
}
}
exports.JavaScriptTargetBuiltInGenerator = JavaScriptTargetBuiltInGenerator;
//# sourceMappingURL=built-in-generator.js.map