remove useless <glil-vars> helper type, serialize GHIL more strictly
[bpt/guile.git] / module / language / ghil.scm
index 336cd95..728c696 100644 (file)
   (let ((loc (location exp))
         (retrans (lambda (x) (parse-ghil env x))))
     (pmatch exp
-     (,exp (guard (symbol? exp))
-           (make-ghil-ref env #f (ghil-var-for-ref! env exp)))
-
-     (,exp (guard (not (pair? exp)))
-           (make-ghil-quote #:env env #:loc #f #:obj exp))
+     ((ref ,sym) (guard (symbol? sym))
+      (make-ghil-ref env #f (ghil-var-for-ref! env sym)))
 
      (('quote ,exp) (make-ghil-quote #:env env #:loc loc #:obj exp))
 
           (let ((vals (map (lambda (exp) (parse-ghil env exp)) exprs)))
             (make-ghil-bind env loc vars vals (retrans `(begin ,@body)))))))
 
-     ((set! ,sym ,val)
+     ((set ,sym ,val)
       (make-ghil-set env loc (ghil-var-for-set! env sym) (retrans val)))
 
      ((define ,sym ,val)
     ((<ghil-void> env loc)
      '(void))
     ((<ghil-quote> env loc obj)
-     (if (symbol? obj)
-         `(,'quote ,obj)
-         obj))
+     `(,'quote ,obj))
     ((<ghil-quasiquote> env loc exp)
      `(,'quasiquote ,(map unparse-ghil exp)))
     ((<ghil-unquote> env loc exp)
      `(,'unquote-splicing ,(unparse-ghil exp)))
   ;; Variables
     ((<ghil-ref> env loc var)
-     (ghil-var-name var))
+     `(ref ,(ghil-var-name var)))
     ((<ghil-set> env loc var val)
-     `(set! ,(ghil-var-name var) ,(unparse-ghil val)))
+     `(set ,(ghil-var-name var) ,(unparse-ghil val)))
     ((<ghil-define> env loc var val)
      `(define ,(ghil-var-name var) ,(unparse-ghil val)))
   ;; Controls