aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorLudovic Court`es2006-09-27 15:40:46 +0000
committerLudovic Court`es2006-09-27 15:40:46 +0000
commit72fcb722a8ea8959edf160a676ca05df1665b64c (patch)
tree1c92cbd40551fdb77a1014ef91c8e4094a077f00
parent0fe4342c25a3db2f077f0fe9f90abc4394e358c1 (diff)
downloadskribilo-72fcb722a8ea8959edf160a676ca05df1665b64c.tar.gz
skribilo-72fcb722a8ea8959edf160a676ca05df1665b64c.tar.lz
skribilo-72fcb722a8ea8959edf160a676ca05df1665b64c.zip
Tolerate engine instances in `lookup-engine-class'.
* src/guile/skribilo/engine.scm (copy-engine): Make a whole copy of the engine customs. (lookup-engine-class): Tolerate engine instances (while actually expecting classes. git-archimport-id: lcourtes@laas.fr--2005-libre/skribilo--engine-classes--1.2--patch-3
-rw-r--r--src/guile/skribilo/engine.scm17
1 files changed, 11 insertions, 6 deletions
diff --git a/src/guile/skribilo/engine.scm b/src/guile/skribilo/engine.scm
index 163fe06..b1e4235 100644
--- a/src/guile/skribilo/engine.scm
+++ b/src/guile/skribilo/engine.scm
@@ -186,6 +186,7 @@
engine)))
(define (make-engine engine-class)
+ ;; Instantiate ENGINE-CLASS.
(make engine-class))
@@ -193,7 +194,6 @@
(define (engine-ident obj) (engine-class-ident (engine-class obj)))
(define (engine-format obj) (engine-class-format (engine-class obj)))
-;;(define (engine-customs obj) (engine-class-customs (engine-class obj)))
(define (engine-filter obj) (engine-class-filter (engine-class obj)))
(define (engine-symbol-table obj)
(engine-class-symbol-table (engine-class obj)))
@@ -275,8 +275,7 @@
;;;
(define (copy-engine e)
(let ((new (shallow-clone e)))
- (slot-set! new 'class (engine-class e))
- (slot-set! new 'customs (list-copy (slot-ref e 'customs)))
+ (slot-set! new 'customs (map list-copy (slot-ref e 'customs)))
new))
(define* (copy-engine-class ident e :key (version 'unspecified)
@@ -365,9 +364,15 @@ otherwise the requested engine is returned."
(let* ((engine (symbol-append id '-engine))
(m (resolve-module (engine-id->module-name id))))
(if (module-bound? m engine)
- (let ((e (module-ref m engine)))
- (if e (consume-load-hook! id))
- e)
+ (let* ((e (module-ref m engine))
+ ;; We have to have this thin compatibility layer here.
+ (c (cond ((engine-class? e) e)
+ ((engine? e) (engine-class e))
+ (else
+ (skribe-error 'lookup-engine-class
+ "not an engine class" e)))))
+ (if c (consume-load-hook! id))
+ c)
(error "no such engine" id)))))