From d9612b615af3cb55d98503a1a553a070f75149f2 Mon Sep 17 00:00:00 2001
From: Peter <craven@gmx.net>
Date: Tue, 26 Apr 2016 22:31:09 +0200
Subject: Add preliminary support for Chibi Scheme

---
 scheme/chibi/geiser/geiser.scm | 49 ++++++++++++++++++++++++++++++++++++++++++
 scheme/chibi/geiser/geiser.sld |  9 ++++++++
 2 files changed, 58 insertions(+)
 create mode 100644 scheme/chibi/geiser/geiser.scm
 create mode 100644 scheme/chibi/geiser/geiser.sld

(limited to 'scheme/chibi')

diff --git a/scheme/chibi/geiser/geiser.scm b/scheme/chibi/geiser/geiser.scm
new file mode 100644
index 0000000..a6b37f3
--- /dev/null
+++ b/scheme/chibi/geiser/geiser.scm
@@ -0,0 +1,49 @@
+(define (all-environment-exports environment prefix)
+  (if environment
+      (append (filter (lambda (identifier)
+                        (if (string=? prefix "")
+                            #t
+                            (string-contains identifier prefix)))
+                      (map symbol->string (env-exports environment)))
+              (all-environment-exports (env-parent environment) prefix))
+      '()))
+
+(define (geiser:completions prefix . rest)
+  rest
+  (sort (all-environment-exports (current-environment) prefix)
+        string-ci<?))
+
+(define (write-to-string form)
+  (let ((out (open-output-string)))
+    (write form out)
+    (get-output-string out)))
+
+(define (geiser:eval module form . rest)
+  rest
+  (let ((output (open-output-string))
+        (result (if module
+                    (let ((mod (module-env (find-module module))))
+                      (eval form mod))
+                    (eval form))))
+    (write `((result ,(write-to-string result))
+             (output . ,(get-output-string output))))
+    (values)))
+
+(define (geiser:module-completions prefix . rest)
+  (let ((modules (map car (available-modules))))
+    (map write-to-string
+         (delete-duplicates
+          (filter (lambda (module)
+                    (if (string=? "" prefix)
+                        #t
+                        (string-contains prefix (write-to-string module))))
+                  modules)))))
+
+(define (geiser:autodoc ids . rest)
+  '())
+
+(define (geiser:no-values)
+  #f)
+
+(define (geiser:newline)
+  #f)
diff --git a/scheme/chibi/geiser/geiser.sld b/scheme/chibi/geiser/geiser.sld
new file mode 100644
index 0000000..a6e2704
--- /dev/null
+++ b/scheme/chibi/geiser/geiser.sld
@@ -0,0 +1,9 @@
+(define-library (geiser)
+  (export geiser:completions
+          geiser:eval
+          geiser:autodoc
+          geiser:module-completions
+          geiser:no-values
+          geiser:newline)
+  (import (scheme small) (chibi modules) (chibi) (meta) (chibi string) (srfi 1) (srfi 95))
+  (include "geiser.scm"))
-- 
cgit v1.2.3