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

Last change on this file was 21516, checked in by Moritz Heidkamp, 10 years ago

vandusen: replace environments with sandbox in vandusen-eval (thanks Mario Goulart for the suggestion)

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