Initial compund symbol (foo.bar syntax) splitting function
authorClinton Ebadi <clinton@unknownlamer.org>
Tue, 6 Oct 2009 18:49:58 +0000 (14:49 -0400)
committerClinton Ebadi <clinton@unknownlamer.org>
Tue, 6 Oct 2009 18:49:58 +0000 (14:49 -0400)
parenscript.asd
src/compiler.lisp

index a4857e3..d057b0a 100755 (executable)
@@ -36,7 +36,7 @@
                (:module :runtime
                         :components ((:file "ps-runtime-lib"))
                         :depends-on (:src)))
-  :depends-on (:cl-ppcre :anaphora))
+  :depends-on (:cl-ppcre :anaphora :split-sequence))
 
 (defmethod asdf:perform :after ((op asdf:load-op) (system (eql (asdf:find-system :parenscript)))) 
   (pushnew :parenscript cl:*features*))
index 8a98dda..4e16ba8 100644 (file)
@@ -199,6 +199,22 @@ the form cannot be compiled to a symbol."
 (defmethod ps-compile ((form character))
   (ps-compile (string form)))
 
+(defun compound-symbol-p (symbol)
+  (let ((split (split-sequence:split-sequence #\. (symbol-name symbol))))
+    (break "~A = ~A" symbol split)
+    (if (cdr split)
+       (reduce
+        (lambda (&optional slot-name object-exp)
+          `(js:slot-value ,object-exp ,(make-symbol slot-name)))
+        (reverse (cddr split))
+        :initial-value `(slot-value
+                         (js:variable ,(ps-macroexpand
+                                        (intern (car split)
+                                                (symbol-package symbol))))
+                         ,(make-symbol (cadr split)))
+        :from-end t)
+       nil)))
+
 (defmethod ps-compile ((symbol symbol))
   (multiple-value-bind (expansion expanded?)
       (ps-macroexpand symbol)