guile-devel
[Top][All Lists]
Advanced

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

guile-vm: module support


From: Keisuke Nishida
Subject: guile-vm: module support
Date: Wed, 11 Apr 2001 20:29:24 -0400
User-agent: Wanderlust/2.4.0 (Rio) SEMI/1.13.7 (Awazu) FLIM/1.13.2 (Kasanui) Emacs/21.0.102 (i686-pc-linux-gnu) MULE/5.0 (SAKAKI)

I have added a preliminary module support in my compiler.
After the below patch is applied to boot-9.scm, Guile compiles
"*.gs" files and executes them using my VM:

  % cat fib.gs
  (define-module (fib)
    :export (fib))

  (define (fib n) (if (< n 2) 1 (+ (fib (- n 1)) (fib (- n 2)))))

  % guile
  guile> (use-modules (fib))
  guile> fib
  $1 = #<program fib>
  guile> (fib 20)
  $2 = 10946

Currently, `define-module', `use-modules', and `export' are supported.
Actually, I can compile my repl and get it working.  Some standard
module files, such as format.scm and psyntax.pp, can be compiled, but
it seems there are bugs.  I'll fix them in this weekend.

Keisuke

------------------------------------------------------------------------
--- guile-core/ice-9/boot-9.scm.~1.232.~        Wed Apr 11 14:27:53 2001
+++ guile-core/ice-9/boot-9.scm Wed Apr 11 19:37:08 2001
@@ -1556,6 +1556,7 @@
 
 (define (try-load-module name)
   (or (try-module-linked name)
+      (try-module-compile name)
       (try-module-autoload name)
       (try-module-dynamic-link name)))
 
@@ -1923,6 +1924,22 @@
   (and (find-and-link-dynamic-module module-name)
        (init-dynamic-module module-name)))
 
+(define (try-module-compile module-name)
+  (let* ((reverse-name (reverse module-name))
+        (name (symbol->string (car reverse-name)))
+        (dir-hint-module-name (reverse (cdr reverse-name)))
+        (dir-hint (apply string-append
+                         (map (lambda (elt)
+                                (string-append (symbol->string elt) "/"))
+                              dir-hint-module-name)))
+        (full (%search-load-path (in-vicinity dir-hint
+                                              (string-append name ".gs")))))
+    (if full
+       (let ((load/compile (module-ref (resolve-module '(system vm load))
+                                       'load/compile)))
+         (load/compile full)
+         #t)
+       #f)))
 
 
 (define autoloads-done '((guile . guile)))




reply via email to

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