This commit is contained in:
Jan Nieuwenhuizen 2019-11-16 23:59:36 +01:00
parent 26f73a46f8
commit 5256a336c9
No known key found for this signature in database
GPG Key ID: F3C1A0D9C1D65273
2 changed files with 52 additions and 17 deletions

10
boo.scm
View File

@ -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)

View File

@ -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")