(SETF OGET) AND (SETF OGET*)
authorDavid Vázquez <davazp@gmail.com>
Thu, 6 Jun 2013 12:25:18 +0000 (13:25 +0100)
committerDavid Vázquez <davazp@gmail.com>
Thu, 6 Jun 2013 12:31:08 +0000 (13:31 +0100)
src/ffi.lisp

index 32b9f21..da1ce27 100644 (file)
 (setq *intern-hook* #'ffi-intern-hook)
 
 (defvar *root* (%js-vref "window"))
+
+(define-setf-expander oget (object key &rest keys)
+  (let* ((keys (cons key keys))
+         (g!object (gensym))
+         (g!keys (mapcar (lambda (s)
+                           (declare (ignore s))
+                           (gensym))
+                         keys))
+         (g!value (gensym)))
+    (values `(,g!object ,@g!keys)
+            `(,object ,@keys)
+            `(,g!value)
+            `(oset ,g!value ,g!object ,@g!keys)
+            `(oget ,g!object ,@g!keys))))
+
+(define-setf-expander oget* (object key &rest keys)
+  (let* ((keys (cons key keys))
+         (g!object (gensym))
+         (g!keys (mapcar (lambda (s)
+                           (declare (ignore s))
+                           (gensym))
+                         keys))
+         (g!value (gensym)))
+    (values `(,g!object ,@g!keys)
+            `(,object ,@keys)
+            `(,g!value)
+            `(oset* ,g!value ,g!object ,@g!keys)
+            `(oget* ,g!object ,@g!keys))))
+
+
+