diff --git a/boo.scm b/boo.scm index c4bb84b1..66592690 100644 --- a/boo.scm +++ b/boo.scm @@ -1,10 +1,12 @@ (define-module (boo) #:use-module (ijs-9 receive) #:export (ZEE-MODULE - bah)) + ;;bah + )) (define *************************en-deze-dan************************ 42) (define (*************************of-deze************************) 42) +(export bah) (define bah "Bah!") (display "*ZZZZEEE* module boo\n") 'ZZZEEE-MODULE @@ -17,3 +19,9 @@ ;; (define (make-fluid x) ;; (display "HAHA\n")) 33 + +(define-public (foo-bar) + "foo-bar\n") + +(display (foo-bar)) +;;(export foo-bar) diff --git a/mes/module/mes/boot-module.scm b/mes/module/mes/boot-module.scm index b21b1e23..8995817b 100644 --- a/mes/module/mes/boot-module.scm +++ b/mes/module/mes/boot-module.scm @@ -32,6 +32,8 @@ ;;; Code: +(mes-use-module (mes simple-format)) + (define (module? x) (display "core:module?\n")) @@ -2359,22 +2361,22 @@ ;; as soon as guile supports hygienic macros. ;;;;;;(define define-private define) -(defmacro define-public args - (define (syntax) - (error "bad syntax" (list 'define-public args))) - (define (defined-name n) - (cond - ((symbol? n) n) - ((pair? n) (defined-name (car n))) - (else (syntax)))) - (cond - ((null? args) - (syntax)) - (#t - (let ((name (defined-name (car args)))) - `(begin - (define-private ,@args) - (eval-case ((load-toplevel) (export ,name)))))))) +;; (defmacro define-public args +;; (define (syntax) +;; (error "bad syntax" (list 'define-public args))) +;; (define (defined-name n) +;; (cond +;; ((symbol? n) n) +;; ((pair? n) (defined-name (car n))) +;; (else (syntax)))) +;; (cond +;; ((null? args) +;; (syntax)) +;; (#t +;; (let ((name (defined-name (car args)))) +;; `(begin +;; (define-private ,@args) +;; (eval-case ((load-toplevel) (export ,name)))))))) ;; (defmacro defmacro-public args ;; (define (syntax) @@ -2392,6 +2394,24 @@ ;; (eval-case ((load-toplevel) (export-syntax ,name))) ;; (defmacro ,@args)))))) +(define-macro (define-public . args) + (define (syntax) + (error "bad syntax" (list 'define-public args))) + (define (defined-name n) + (define (syntax) + (error "bad syntax" (list 'define-public args))) + (cond + ((symbol? n) n) + ((pair? n) (defined-name (car n))) + (else (syntax)))) + (cond + ((null? args) + (syntax)) + (#t + ;;`(export ,(defined-name (car args))) + (module-export! (guile:current-module) (list (defined-name (car args)))) + `(define ,@args)))) + ;; Export a local variable ;; This function is called from "modules.c". If you change it, be @@ -2435,6 +2455,9 @@ ;; (else ;; (error "export can only be used at the top level")))) +(define-macro (export . names) + `(module-export! (guile:current-module) ',names)) + ;; (defmacro re-export names ;; `(eval-case ;; ((load-toplevel) @@ -2751,3 +2774,7 @@ (display "===> (ZEE)\n") (display (ZEE-MODULE)) (display "\n") + +(display "===> (foo-bar)\n") +(display (foo-bar)) +(display "\n")