From 2273eb4d061d6c2d17675ef773b0568f2482ee58 Mon Sep 17 00:00:00 2001 From: Ian Price Date: Wed, 2 Aug 2017 21:17:22 +0100 Subject: [PATCH] Implement built-in string procedures. * module/language/js-il/runtime.js (string-append): Extend to more than 2 arguments. (string-join): New procedure. --- module/language/js-il/runtime.js | 28 ++++++++++++++++++++++++++-- 1 file changed, 26 insertions(+), 2 deletions(-) diff --git a/module/language/js-il/runtime.js b/module/language/js-il/runtime.js index 11072829c..c6d70cb80 100644 --- a/module/language/js-il/runtime.js +++ b/module/language/js-il/runtime.js @@ -797,8 +797,32 @@ def_guile0("string=?", function (self, cont, s1, s2) { }); def_guile0("string-append", function (self, cont, s1, s2) { - var s = new scheme.String(s1.s + s2.s); - return cont(s); + var s = ""; + + for (var i = 2; i < arguments.length; i++) { + s += arguments[i].s; + } + + //console.log("sap", s1, s2, arguments.length); + return cont(new scheme.String(s)); +}); + +def_guile0("string-join", function (self, cont, strings) { + var s = ""; + + while (!scheme.is_true(scheme.primitives["null?"](strings))) { + if (scheme.is_true(scheme.primitives["pair?"](strings))) { + s += strings.car.s; + strings = strings.cdr; + } else { + console.log("string-join bad"); + not_implemented_yet(); + } + } + + return cont(new scheme.String(s)); +}); + }); // Structs