source: project/release/4/vandusen/trunk/vandusen-eval.scm @ 21508

Last change on this file since 21508 was 18423, checked in by Moritz Heidkamp, 10 years ago

vandusen-eval: print nicer eval error messages

File size: 904 bytes
Line 
1(module vandusen-eval ()
2
3(import chicken scheme extras ports data-structures)
4(use vandusen environments srfi-18)
5
6(plugin 'eval
7        (lambda ()
8          (let ((env (environment-copy (scheme-report-environment 5) #t)))
9            (define (reply-with-eval-result m expression)
10              (condition-case (reply-to m (format "~S" (eval (with-input-from-string expression read) env)))
11                              (e () (reply-to m (format "Error: ~A~A" 
12                                                        (get-condition-property e 'exn 'message)
13                                                        (let ((args (get-condition-property e 'exn 'arguments)))
14                                                          (if (null? args)
15                                                              ""
16                                                              (apply conc (cons ": " args)))))))))
17
18            (command 'eval
19                     '(: "eval" (+ whitespace) (submatch (+ any)))
20                     (lambda (m expression)
21                       (thread-start! (lambda ()
22                                        (let ((thread (thread-start! (cut reply-with-eval-result m expression))))
23                                          (thread-sleep! 3)
24                                          (thread-terminate! thread))))))))))
25
Note: See TracBrowser for help on using the repository browser.