UNPKG

@kipper/target-js

Version:

The JavaScript target for the Kipper compiler 🦊

119 lines • 5.77 kB
"use strict"; 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, ignoreParams = false) { return [[signature.identifier, ":", " ", (0, tools_1.createJSFunctionSignature)(signature, ignoreParams), " ", body]]; } exports.genJSFunction = genJSFunction; function genJSVariable(varSpec, value) { if (varSpec.local) { return ["const", " ", target_1.TargetJS.getBuiltInIdentifier(varSpec), " ", "=", " ", value, ";"]; } return [varSpec.identifier, ":", " ", 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(); }`); }); } 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}}\`; }`); }); } voidToStr(funcSpec) { return tslib_1.__awaiter(this, void 0, void 0, function* () { const signature = (0, tools_1.getJSFunctionSignature)(funcSpec); return genJSFunction(signature, `{ return "void"; }`, true); }); } nullToStr(funcSpec) { return tslib_1.__awaiter(this, void 0, void 0, function* () { const signature = (0, tools_1.getJSFunctionSignature)(funcSpec); return genJSFunction(signature, `{ return "null"; }`, true); }); } undefinedToStr(funcSpec) { return tslib_1.__awaiter(this, void 0, void 0, function* () { const signature = (0, tools_1.getJSFunctionSignature)(funcSpec); return genJSFunction(signature, `{ return "undefined"; }`, true); }); } 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}); }`); }); } 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}]; }`); }); } repeatString(funcSpec) { return tslib_1.__awaiter(this, void 0, void 0, function* () { const signature = (0, tools_1.getJSFunctionSignature)(funcSpec); const toRepeatIdentifier = signature.params[0]; const timesIdentifier = signature.params[1]; return genJSFunction(signature, `{ return ${toRepeatIdentifier}.repeat(${timesIdentifier}); }`); }); } 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}"`)]; }); } NaN(varSpec) { return tslib_1.__awaiter(this, void 0, void 0, function* () { return [genJSVariable(varSpec, "NaN")]; }); } } exports.JavaScriptTargetBuiltInGenerator = JavaScriptTargetBuiltInGenerator; //# sourceMappingURL=built-in-generator.js.map