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