x
:source-symbol source-symbol))))
-(eval-when (:compile-toplevel :load-toplevel :execute)
-(defparameter *saved-readtable* (copy-readtable))
-(defparameter *meta-readtable* (copy-readtable)))
-
(defun meta-reader (s c)
(make-meta :char c :form (read s)))
(defun meta-curly-bracket (s c)
(defun meta-square-bracket (s c)
(make-meta :char c :form (read-delimited-list #\] s t)))
-(mapc #'(lambda (c) (set-macro-character c #'meta-reader nil *meta-readtable*)) '(#\@ #\$ #\!))
-
-(set-macro-character #\{ #'meta-curly-bracket nil *meta-readtable*)
-(set-macro-character #\[ #'meta-square-bracket nil *meta-readtable*)
-(mapc #'(lambda (c) (set-macro-character c (get-macro-character #\)) nil *meta-readtable*))
- '(#\] #\}))
-
(defreadtable :meta-mixin
(:macro-char #\[ #'meta-square-bracket)
+ (:macro-char #\{ #'meta-curly-bracket)
(:syntax-from :standard #\) #\])
- (:macro-char #\[ #'meta-curly-bracket)
(:syntax-from :standard #\) #\})
(:macro-char #\@ #'meta-reader)
(:macro-char #\$ #'meta-reader)
(:macro-char #\! #'meta-reader))
(defreadtable :meta
- (:fuze :standard :meta))
+ (:fuze :standard :meta-mixin))
+
+(defparameter *saved-readtable* (find-readtable :standard))
+(defparameter *meta-readtable* (find-readtable :meta))
(defmacro with-stream-meta ((source-symbol stream) &body body)
`(let ((,source-symbol ,stream))
(defun enable-meta-syntax ()
(setf *readtable* *meta-readtable*))
-(defun disable-meta-syntax()
+(defun disable-meta-syntax ()
(setf *readtable* *saved-readtable*))
-
(provide 'meta)
#|