This commit is contained in:
Jan Nieuwenhuizen 2019-11-16 23:59:36 +01:00 committed by Jan (janneke) Nieuwenhuizen
parent 9455ac149f
commit d80bb83328
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) (define-module (boo)
#:use-module (ijs-9 receive) #:use-module (ijs-9 receive)
#:export (ZEE-MODULE #:export (ZEE-MODULE
bah)) ;;bah
))
(define *************************en-deze-dan************************ 42) (define *************************en-deze-dan************************ 42)
(define (*************************of-deze************************) 42) (define (*************************of-deze************************) 42)
(export bah)
(define bah "Bah!") (define bah "Bah!")
(display "*ZZZZEEE* module boo\n") (display "*ZZZZEEE* module boo\n")
'ZZZEEE-MODULE 'ZZZEEE-MODULE
@ -17,3 +19,9 @@
;; (define (make-fluid x) ;; (define (make-fluid x)
;; (display "HAHA\n")) ;; (display "HAHA\n"))
33 33
(define-public (foo-bar)
"foo-bar\n")
(display (foo-bar))
;;(export foo-bar)

View File

@ -32,6 +32,8 @@
;;; Code: ;;; Code:
(mes-use-module (mes simple-format))
(define (module? x) (define (module? x)
(display "core:module?\n")) (display "core:module?\n"))
@ -2359,22 +2361,22 @@
;; as soon as guile supports hygienic macros. ;; as soon as guile supports hygienic macros.
;;;;;;(define define-private define) ;;;;;;(define define-private define)
(defmacro define-public args ;; (defmacro define-public args
(define (syntax) ;; (define (syntax)
(error "bad syntax" (list 'define-public args))) ;; (error "bad syntax" (list 'define-public args)))
(define (defined-name n) ;; (define (defined-name n)
(cond ;; (cond
((symbol? n) n) ;; ((symbol? n) n)
((pair? n) (defined-name (car n))) ;; ((pair? n) (defined-name (car n)))
(else (syntax)))) ;; (else (syntax))))
(cond ;; (cond
((null? args) ;; ((null? args)
(syntax)) ;; (syntax))
(#t ;; (#t
(let ((name (defined-name (car args)))) ;; (let ((name (defined-name (car args))))
`(begin ;; `(begin
(define-private ,@args) ;; (define-private ,@args)
(eval-case ((load-toplevel) (export ,name)))))))) ;; (eval-case ((load-toplevel) (export ,name))))))))
;; (defmacro defmacro-public args ;; (defmacro defmacro-public args
;; (define (syntax) ;; (define (syntax)
@ -2392,6 +2394,24 @@
;; (eval-case ((load-toplevel) (export-syntax ,name))) ;; (eval-case ((load-toplevel) (export-syntax ,name)))
;; (defmacro ,@args)))))) ;; (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 ;; Export a local variable
;; This function is called from "modules.c". If you change it, be ;; This function is called from "modules.c". If you change it, be
@ -2435,6 +2455,9 @@
;; (else ;; (else
;; (error "export can only be used at the top level")))) ;; (error "export can only be used at the top level"))))
(define-macro (export . names)
`(module-export! (guile:current-module) ',names))
;; (defmacro re-export names ;; (defmacro re-export names
;; `(eval-case ;; `(eval-case
;; ((load-toplevel) ;; ((load-toplevel)
@ -2751,3 +2774,7 @@
(display "===> (ZEE)\n") (display "===> (ZEE)\n")
(display (ZEE-MODULE)) (display (ZEE-MODULE))
(display "\n") (display "\n")
(display "===> (foo-bar)\n")
(display (foo-bar))
(display "\n")