// V_COMMIT_HASH 8a24d7d // V_CURRENT_COMMIT_HASH 123d788 // Generated by the V compiler "use strict"; /** @namespace builtin */ const builtin = (function () { /** * @function * @param {any} s * @returns {void} */ function println(s) { console.log(s); } /** * @function * @param {any} s * @returns {void} */ function print(s) { process.stdout.write(s); } /* module exports */ return { println, print }; })(); /** @namespace main */ const main = (function () { /** * @function * @param {string} s1 * @param {string} s2 * @returns {void} */ function test_fn(s1, s2) { builtin.print((s1 === s2 ? "true" : "false")); builtin.print("\t=> "); builtin.println(`"${s1}", "${s2}"`); } /** * @function * @returns {void} */ function simple_string_interpolation() { /** @type {string} */ const a = "Hello"; /** @type {string} */ const b = "World"; /** @type {string} */ const res = `${a} ${b}`; test_fn(res, "Hello World"); } /** * @function * @returns {void} */ function mixed_string_interpolation() { /** @type {number} */ const num = 7; /** @type {string} */ const str = "abc"; /** @type {string} */ const s1 = `number=${num}`; test_fn(s1, "number=7"); /** @type {string} */ const s2 = `string=${str}`; test_fn(s2, "string=abc"); /** @type {string} */ const s3 = `a: ${num} | b: ${str}`; test_fn(s3, "a: 7 | b: abc"); } /** * @function * @returns {void} */ function formatted_string_interpolation() { /** @type {string} */ const x = "abc"; /** @type {string} */ const axb = `a:${x}:b`; test_fn(axb, "a:abc:b"); /** @type {string} */ const x_10 = `a:${x}:b`; /** @type {string} */ const x10_ = `a:${x}:b`; test_fn(x_10, "a: abc:b"); test_fn(x10_, "a:abc :b"); /** @type {number} */ const i = 23; /** @type {string} */ const si_right = `${i}`; /** @type {string} */ const si__left = `${i}`; test_fn(si_right, " 23"); test_fn(si__left, "23 "); } /** * @function * @returns {void} */ function implicit_str() { /** @type {number} */ const i = 42; test_fn(`int ${i}`, "int 42"); test_fn(`${i}`, "42"); /** @type {boolean} */ const check = `${i}` === "42"; /** @type {string} */ const text = `${i}` + "42"; test_fn(text, "4242"); } /** * @function * @returns {void} */ function string_interpolation_percent_escaping() { /** @type {string} */ const test = "hello"; /** @type {string} */ const hello = "world"; /** @type {string} */ const x = `%.*s${hello}${test} |${hello}|`; test_fn(x, "%.*sworldhello |world |"); } /** * @function * @returns {void} */ function string_interpolation_string_prefix() { /** @type {string} */ const r = "r"; /** @type {string} */ const rr = `${r}${r}`; test_fn(rr, "rr"); /** @type {string} */ const c = "c"; /** @type {string} */ const cc = `${c}${c}`; test_fn(cc, "cc"); /** @type {string} */ const js = "js"; /** @type {string} */ const jsjs = `${js}${js}`; test_fn(jsjs, "jsjs"); } /** * @function * @returns {void} */ function interpolation_string_prefix_expr() { /** @type {number} */ const r = 1; /** @type {number} */ const c = 2; /** @type {number} */ const js = 1; test_fn(`>${3 + r}<`, ">4<"); test_fn(`${r === js} ${js}`, "true 1"); test_fn(`>${js + c} ${js + r === c}<`, ">3 true<"); } /** * @function * @returns {void} */ function utf8_string_interpolation() { /** @type {string} */ const a = "à-côté"; /** @type {string} */ const st = "Sträßle"; /** @type {string} */ const m = "10€"; test_fn(`${a} ${st} ${m}`, "à-côté Sträßle 10€"); /** @type {string} */ const zz = `>${a}< >${st}< >${m}<-`; /** @type {string} */ const zz_expected = "> à-côté< >Sträßle < > 10€<-"; test_fn(zz, zz_expected); /** @type {string} */ const e = "€"; test_fn(`100.00 ${e}`, "100.00 €"); /** @type {string} */ const m2 = "Москва́"; /** @type {string} */ const d = "Antonín Dvořák"; test_fn(`:${m2}:${d}:`, ": Москва́:Antonín Dvořák :"); /** @type {string} */ const g = "Πελοπόννησος"; test_fn(`>${g}<`, ">Πελοπόννησος <"); } /** * @constructor * @param {{v1?: number, v2?: number}} init */ function Sss({ v1 = 0, v2 = 0 }) { this.v1 = v1 this.v2 = v2 }; Sss.prototype = { /** @type {number} */ v1: 0, /** @type {number} */ v2: 0, /** * @function * @returns {string} */ str() { const s = this; return `[${s.v1}, ${s.v2}]`; } }; /** * @function * @returns {void} */ function string_interpolation_str_evaluation() { /** @type {Sss} */ let x = new Sss({ v1: 17, v2: 13.455893 }); test_fn(`${x.str()}`, "[17, 13.456]"); } /* program entry point */ (function() { simple_string_interpolation(); mixed_string_interpolation(); formatted_string_interpolation(); implicit_str(); string_interpolation_percent_escaping(); string_interpolation_string_prefix(); interpolation_string_prefix_expr(); utf8_string_interpolation(); string_interpolation_str_evaluation(); })(); /* module exports */ return {}; })();