     (object   . ,(lambda (token obj)
                    (let ((fields (nth 1 obj)))
                      (if (stringp fields)
-                         (list 'list)
-                       (cons 'list fields)))))
+                         '(list (quote object))
+                       `(list 'object ,@fields)))))
     (if       . ,(lambda (token expr)
                    (destructuring-bind (if cond then expra else exprb) expr
                      `(if ,cond ,expra ,exprb))))

                        (destructuring-bind (obj field) lhs
                          (let ((obj-sym (gensym)))
                            `(let ((,obj-sym (copy-alist ,obj)))
                               (setcdr (assq ,field ,obj-sym) ,expr)
                               ,obj-sym)))))))
    (+         . ,(lambda (token op) (psl--apply 'psl-+ (nth 1 op))))
    (-         . ,(lambda (token op) (psl--apply 'psl-- (nth 1 op))))

    (==        . ,(lambda (token op) (psl--apply 'psl-== (nth 1 op))))
    (print     . ,(lambda (token op) (psl--apply 'psl-print (nth 1 op))))
    (index     . ,(lambda (token index)
                    `(cdr (assq ,(nth 1 index) (cdr,(nth 0 index))))))
    (index=    . ,(lambda (token index) index))
    (message   . ,(lambda (token msg)
                    (destructuring-bind (obj at f args) msg
                      `(funcall (cdr (assq ,f (cdr ,obj)))
                                ,@(psl--apply obj args)))))
    (field     . ,(lambda (token field) `(quote ,field)))
    (index-str . ,(lambda (token index) `(intern ,(nth 1 index))))
