emacs-elpa-diffs
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

[nongnu] elpa/geiser-racket eafee8d 142/191: racket: new , geiser-load c


From: Philip Kaludercic
Subject: [nongnu] elpa/geiser-racket eafee8d 142/191: racket: new , geiser-load command in REPL
Date: Sun, 1 Aug 2021 18:32:17 -0400 (EDT)

branch: elpa/geiser-racket
commit eafee8d908228636e9eac99197a9aff26a03326e
Author: Jose Antonio Ortega Ruiz <jao@gnu.org>
Commit: Jose Antonio Ortega Ruiz <jao@gnu.org>

    racket: new ,geiser-load command in REPL
    
    ... and used also internally for C-c C-k, although it doesn't yet work
    as well as i wanted when it comes to load modules.  The reason is
    probably in geiser/enter, where we don't record modification times per
    submodule but per path, which is not correct in the presence of submodules.
---
 geiser/eval.rkt |  8 ++++----
 geiser/user.rkt | 34 ++++++++++++++++++++++++----------
 2 files changed, 28 insertions(+), 14 deletions(-)

diff --git a/geiser/eval.rkt b/geiser/eval.rkt
index 9b510cf..752a405 100644
--- a/geiser/eval.rkt
+++ b/geiser/eval.rkt
@@ -1,6 +1,6 @@
 ;;; eval.rkt -- evaluation
 
-;; Copyright (C) 2009, 2010, 2011, 2012 Jose Antonio Ortega Ruiz
+;; Copyright (C) 2009, 2010, 2011, 2012, 2013 Jose Antonio Ortega Ruiz
 
 ;; This program is free software; you can redistribute it and/or
 ;; modify it under the terms of the Modified BSD License. You should
@@ -15,8 +15,8 @@
          load-file
          macroexpand
          add-to-load-path
-         make-repl-reader)
-
+         make-repl-reader
+         call-with-result)
 
 (require geiser/enter geiser/modules geiser/images)
 (require errortrace/errortrace-lib)
@@ -50,7 +50,7 @@
              (parameterize ([current-error-port (current-output-port)])
                (with-handlers ([exn? set-last-error])
                  (call-with-values thunk set-last-result)))))])
-    (append last-result `((output . ,output)))))
+    (append last-result `(,(cons 'output output)))))
 
 (define (eval-in form spec lang)
   (write (call-with-result
diff --git a/geiser/user.rkt b/geiser/user.rkt
index 5ce003d..cd3fea6 100644
--- a/geiser/user.rkt
+++ b/geiser/user.rkt
@@ -48,6 +48,9 @@
                [(symbol? parent) mod]
                [else #f]))))
 
+(define (module-error stx mod)
+  (raise-syntax-error #f "Invalid module path" stx mod))
+
 (define (enter! mod stx)
   (cond [(not mod)
          (current-namespace top-namespace)
@@ -56,7 +59,7 @@
         [(path-string? mod) (do-enter `(file ,mod) mod)]
         [(file-mod? mod) (do-enter mod (cadr mod))]
         [(submod-path mod) => (lambda (m) (do-enter m m))]
-        [else (raise-syntax-error #f "Invalid module path" stx mod)]))
+        [else (module-error stx mod)]))
 
 (define orig-loader (current-load/use-compiled))
 (define geiser-loader (module-loader orig-loader))
@@ -66,15 +69,25 @@
   (define (eval-here form) (eval form geiser-main))
   (let* ([mod (read)]
          [lang (read)]
-         [form (read)])
-    (datum->syntax #f
-                   (list 'quote
-                         (cond [(equal? form '(unquote apply))
-                                (let* ([proc (eval-here (read))]
-                                       [args (map eval-here (read))]
-                                       [ev (lambda () (apply proc args))])
-                                  (eval-in `(,ev) mod lang))]
-                               [else ((geiser:eval lang) form mod)])))))
+         [form (read)]
+         [res (cond [(equal? form '(unquote apply))
+                     (let* ([proc (eval-here (read))]
+                            [args (map eval-here (read))]
+                            [ev (lambda () (apply proc args))])
+                       (eval-in `(,ev) mod lang))]
+                    [else ((geiser:eval lang) form mod)])])
+    (datum->syntax #f (list 'quote res))))
+
+(define (geiser-load stx)
+  (let* ([mod (read)]
+         [res (call-with-result
+               (lambda ()
+                 (enter-module (cond [(file-mod? mod) mod]
+                                     [(path-string? mod) `(file ,mod)]
+                                     [(submod-path mod)]
+                                     [else (module-error stx mod)]))
+                 (void)))])
+    (datum->syntax stx (list 'quote res))))
 
 (define ((geiser-read prompt))
   (prompt)
@@ -88,6 +101,7 @@
          [(start-geiser) (datum->syntax #f `(list 'port ,(start-geiser)))]
          [(enter) (enter! (read) #'cmd)]
          [(geiser-eval) (geiser-eval)]
+         [(geiser-load) (geiser-load #'cmd)]
          [(geiser-no-values) (datum->syntax #f (void))]
          [(add-to-load-path) (add-to-load-path (read))]
          [(set-image-cache) (image-cache (read))]



reply via email to

[Prev in Thread] Current Thread [Next in Thread]