summaryrefslogtreecommitdiff
path: root/module/oop/goops
diff options
context:
space:
mode:
authorAndy Wingo <wingo@pobox.com>2013-01-23 16:53:54 +0100
committerAndy Wingo <wingo@pobox.com>2013-01-23 16:53:54 +0100
commita3df9ad9e6be7d5fbc566a10bc9ba035a2e38f31 (patch)
tree1f2445195770b9ee1c70b38277bd0f7c510d9dde /module/oop/goops
parenta20eb9a39be78909b3447aebee9a326de5042d19 (diff)
downloadguile-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.scm41
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