diff options
author | Andy Wingo <wingo@pobox.com> | 2013-01-23 16:53:54 +0100 |
---|---|---|
committer | Andy Wingo <wingo@pobox.com> | 2013-01-23 16:53:54 +0100 |
commit | a3df9ad9e6be7d5fbc566a10bc9ba035a2e38f31 (patch) | |
tree | 1f2445195770b9ee1c70b38277bd0f7c510d9dde /module/oop/goops | |
parent | a20eb9a39be78909b3447aebee9a326de5042d19 (diff) | |
download | guile-a3df9ad9e6be7d5fbc566a10bc9ba035a2e38f31.tar.gz |
oop goops save: fix compile-time availability of write-component
* module/oop/goops/save.scm (write-component)
(write-component-procedure): Move definitions up so that syntax
definition is available when compiling the rest of the file.
Diffstat (limited to 'module/oop/goops')
-rw-r--r-- | module/oop/goops/save.scm | 41 |
1 files changed, 23 insertions, 18 deletions
diff --git a/module/oop/goops/save.scm b/module/oop/goops/save.scm index 05362e077..dda2aea4e 100644 --- a/module/oop/goops/save.scm +++ b/module/oop/goops/save.scm @@ -128,6 +128,29 @@ (hashq-ref readables obj)) ;;; +;;; Writer helpers +;;; + +(define (write-component-procedure o file env) + "Return #f if circular reference" + (cond ((immediate? o) (write o file) #t) + ((readable? o) (write (readable-expression o) file) #t) + ((excluded? o env) (display #f file) #t) + (else + (let ((info (object-info o env))) + (cond ((not (binding? info)) (write-readably o file env) #t) + ((not (eq? (visiting info) #:defined)) #f) ;forward reference + (else (display (binding info) file) #t)))))) + +;;; write-component OBJECT PATCHER FILE ENV +;;; +(define-macro (write-component object patcher file env) + `(or (write-component-procedure ,object ,file ,env) + (begin + (display #f ,file) + (add-patcher! ,patcher ,env)))) + +;;; ;;; Strings ;;; @@ -603,24 +626,6 @@ (pop-ref! env) (set! (objects env) (cons o (objects env))))))) -(define (write-component-procedure o file env) - "Return #f if circular reference" - (cond ((immediate? o) (write o file) #t) - ((readable? o) (write (readable-expression o) file) #t) - ((excluded? o env) (display #f file) #t) - (else - (let ((info (object-info o env))) - (cond ((not (binding? info)) (write-readably o file env) #t) - ((not (eq? (visiting info) #:defined)) #f) ;forward reference - (else (display (binding info) file) #t)))))) - -;;; write-component OBJECT PATCHER FILE ENV -;;; -(define-macro (write-component object patcher file env) - `(or (write-component-procedure ,object ,file ,env) - (begin - (display #f ,file) - (add-patcher! ,patcher ,env)))) ;;; ;;; Main engine |