summary refs log tree commit diff
diff options
context:
space:
mode:
-rw-r--r--ChangeLog24
-rw-r--r--src/guile/skribilo/output.scm2
-rw-r--r--src/guile/skribilo/resolve.scm27
3 files changed, 39 insertions, 14 deletions
diff --git a/ChangeLog b/ChangeLog
index e200d2a..6d86a2e 100644
--- a/ChangeLog
+++ b/ChangeLog
@@ -2,6 +2,30 @@
 # arch-tag: automatic-ChangeLog--lcourtes@laas.fr--2005-mobile/skribilo--devel--1.2
 #
 
+2005-12-03 16:44:38 GMT	Ludovic Courtes <ludovic.courtes@laas.fr>	patch-15
+
+    Summary:
+      Fixed the resolution mechanism and converted it to SRFI-39.
+    Revision:
+      skribilo--devel--1.2--patch-15
+
+    * src/guile/skribilo/output.scm: Cosmetic changes.
+    
+    * src/guile/skribilo/resolve.scm: Use SRFI-39.
+      (*unresolved*): Became an SRFI-39 parameter object.
+      (resolve!): Use `parameterize' over `*unresolved*'.
+      (do-resolve!): For `<container>', resolve the body of NODE even if
+      PARENT is not unspecified.  A similar fix had gone into the Bigloo
+      implementation of Skribe (the patch was never actually integrated as it
+      seems).  This makes it possible to use `numref'.
+      For `<unresolved>', to not invoke `do-resolve!' on the result of PROC's
+      invocation.  Similarly, this had gone into Skribe.
+
+    modified files:
+     ChangeLog src/guile/skribilo/output.scm
+     src/guile/skribilo/resolve.scm
+
+
 2005-12-03 11:35:47 GMT	Ludovic Courtes <ludovic.courtes@laas.fr>	patch-14
 
     Summary:
diff --git a/src/guile/skribilo/output.scm b/src/guile/skribilo/output.scm
index 8110418..28e99a8 100644
--- a/src/guile/skribilo/output.scm
+++ b/src/guile/skribilo/output.scm
@@ -151,7 +151,7 @@
 
 
 (define-method (out (n <unresolved>) e)
-  (skribe-error 'output "Orphan unresolved" n))
+  (skribe-error 'output "orphan unresolved" n))
 
 
 (define-method (out (node <markup>) e)
diff --git a/src/guile/skribilo/resolve.scm b/src/guile/skribilo/resolve.scm
index cc1b14f..9ddbc32 100644
--- a/src/guile/skribilo/resolve.scm
+++ b/src/guile/skribilo/resolve.scm
@@ -26,6 +26,7 @@
   :use-module (skribilo utils syntax)
 
   :use-module (oop goops)
+  :use-module (srfi srfi-39)
 
   :export (resolve! resolve-search-parent resolve-children resolve-children*
 	   find1 resolve-counter resolve-parent resolve-ident))
@@ -33,7 +34,7 @@
 (set-current-reader %skribilo-module-reader)
 
 
-(define *unresolved* #f)
+(define *unresolved* (make-parameter #f))
 (define-generic do-resolve!)
 
 
@@ -48,14 +49,14 @@
 (define (resolve! ast engine env)
   (with-debug 3 'resolve
      (debug-item "ast=" ast)
-     (let ((*unresolved* (make-fluid)))
-       (fluid-set! *unresolved* #f)
-
+     (parameterize ((*unresolved* #f))
        (let Loop ((ast ast))
-	 (fluid-set! *unresolved* #f)
+	 (*unresolved* #f)
 	 (let ((ast (do-resolve! ast engine env)))
-	   (if (fluid-ref *unresolved*)
-	       (Loop ast)
+	   (if (*unresolved*)
+	       (begin
+		 (debug-item "iterating over ast " ast)
+		 (Loop ast))
 	       ast))))))
 
 ;;;; ======================================================================
@@ -75,7 +76,7 @@
        (set-car! n* (do-resolve! (car n*) engine env))
        (Loop (cdr n*)))
       ((not (null? n*))
-       (error 'do-resolve "Illegal argument" n*))
+       (error 'do-resolve "illegal argument" n*))
       (else
        ast))))
 
@@ -121,9 +122,9 @@
 			   (set-car! (cdr o)
 				     (do-resolve! (cadr o) engine e)))
 			 options)
-	       (debug-item "resolved options=" options)))
-	   (let ((e `((parent ,node) ,@env ,@env0)))
-	     (slot-set! node 'body (do-resolve! body engine e)))))
+	       (debug-item "resolved options=" options)))))
+       (let ((e `((parent ,node) ,@env ,@env0)))
+	 (slot-set! node 'body (do-resolve! body engine e)))
        node)))
 
 
@@ -147,12 +148,12 @@
        (slot-set! node 'parent (and (pair? p) (pair? (cdr p)) (cadr p))))
 
      (let* ((proc (slot-ref node 'proc))
-	    (res  (resolve! (proc node engine env) engine env))
+	    (res  (proc node engine env))
 	    (loc  (ast-loc node)))
        (when (ast? res)
 	 (ast-loc-set! res loc))
        (debug-item "res=" res)
-       (set! *unresolved* #t)
+       (*unresolved* #t)
        res)))