guile-commits
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

[Guile-commits] 59/99: Implement built-in string procedures.


From: Christopher Allan Webber
Subject: [Guile-commits] 59/99: Implement built-in string procedures.
Date: Sun, 10 Oct 2021 21:51:01 -0400 (EDT)

cwebber pushed a commit to branch compile-to-js-merge
in repository guile.

commit 2273eb4d061d6c2d17675ef773b0568f2482ee58
Author: Ian Price <ianprice90@googlemail.com>
AuthorDate: Wed Aug 2 21:17:22 2017 +0100

    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 1107282..c6d70cb 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



reply via email to

[Prev in Thread] Current Thread [Next in Thread]