* debug.scm (frame-number->index): Optionally take stack as
[bpt/guile.git] / ice-9 / emacs.scm
index 7cc94f0..7dc0ebd 100644 (file)
@@ -32,7 +32,8 @@
 (define-module (ice-9 emacs)
   :use-module (ice-9 debug)
   :use-module (ice-9 threads)
-  :use-module (ice-9 session))
+  :use-module (ice-9 session)
+  :no-backtrace)
 
 (define emacs-escape-character #\sub)
 
              (lambda ()
                (let loop ((endp (flush-whitespace %%load-port)))
                  (if (not endp)
-                     (let ((result
-                            (start-stack read-and-eval!
-                                         (read-and-eval! %%load-port))))
-                       (if interactivep
-                           (result-to-emacs result))
+                     (begin
+                       (save-module-excursion
+                        (lambda ()
+                          (if module
+                              (set-current-module (resolve-module module #f)))
+                          (let ((result
+                                 (start-stack read-and-eval!
+                                              (read-and-eval! %%load-port))))
+                            (if interactivep
+                                (result-to-emacs result)))))
                        (loop (flush-whitespace %%load-port)))
                      (begin
-                       (load-acknowledge))))
-               )
+                       (load-acknowledge)))
+                 (set-port-filename! %%load-port #f))) ;reset port filename
              (lambda (key . args)
+               (set-port-filename! %%load-port #f)
                (cond ((eq? key 'end-of-chunk)
-                      (set! the-last-stack #f)
+                      (fluid-set! the-last-stack #f)
                       (set! stack-saved? #t)
                       (scm-error 'misc-error
                                  #f
 
 ;;*fixme* Not necessary to use flags no-stack and no-source
 (define (get-frame-source frame)
-  (if (or (not the-last-stack)
-         (>= frame (stack-length the-last-stack)))
+  (if (or (not (fluid-ref the-last-stack))
+         (>= frame (stack-length (fluid-ref the-last-stack))))
       (begin
        (no-stack)
        #f)
-      (let* ((frame (stack-ref the-last-stack (frame-number->index frame)))
+      (let* ((frame (stack-ref (fluid-ref the-last-stack)
+                              (frame-number->index frame)))
             (source (frame-source frame)))
        (or source
            (begin (no-source)
 
 (define (format template . rest)
   (let loop ((chars (string->list template))
-            (result '()))
+            (result '())
+            (rest rest))
     (cond ((null? chars) (list->string (reverse result)))
          ((char=? (car chars) #\%)
           (loop (cddr chars)
                           (case (cadr chars)
                             ((#\S) (object->string (car rest)))
                             ((#\s) (object->string (car rest) display)))))
-                        result)))
-         (else (loop (cdr chars) (cons (car chars) result))))))
+                        result)
+                (cdr rest)))
+         (else (loop (cdr chars) (cons (car chars) result) rest)))))
 
 (define (error-args->string args)
   (let ((msg (apply format (caddr args) (cadddr args))))