5 (format nil
"What is this \"~A\" of which you speak?~%" arg
))
7 (defgeneric expr-parse
(expr))
9 (defmethod expr-parse ((expr list
))
10 (unless (boundp (car expr
))
11 (throw 'wtfvar
(fail (symbol-name (car expr
)))))
14 :collect
(expr-parse x
) :into to-eval
15 :finally
(return (cons (symbol-value (car expr
))
18 (defmethod expr-parse ((expr symbol
))
19 (if (boundp expr
) (symbol-value expr
)
20 (throw 'wtfvar
(fail (symbol-name expr
)))))
22 (defmethod expr-parse ((expr number
)) expr
)
23 (defmethod expr-parse ((expr string
)) expr
)
25 (defun eval-parsed (s-exprs)
27 (catch 'over-ex
(eval s-exprs
))
29 (declare (ignore conditn
))
30 (format nil
"Something went wrong during eval, ~
31 you probably used a function with bad parameters."))))
33 (defun process-prefix-from-stream (strm)
34 (let ((*readtable
* (copy-readtable)))
35 (setf (readtable-case *readtable
*) :preserve
)
42 (find-package :lineal.client-vars
)))
43 (setq expr
(read strm nil nil
)))
44 (unless expr
(return result
))
45 (setq result
(eval-parsed (expr-parse expr
)))))
47 (declare (ignore conditn
))
48 "You probably forgot to add a closing parenthesis."))))