From: Clinton Ebadi Date: Tue, 6 Oct 2009 18:49:58 +0000 (-0400) Subject: Initial compund symbol (foo.bar syntax) splitting function X-Git-Url: http://git.hcoop.net/clinton/parenscript.git/commitdiff_plain/0c804d25793393928cc48368045091b37e1d39e8 Initial compund symbol (foo.bar syntax) splitting function --- diff --git a/parenscript.asd b/parenscript.asd index a4857e3..d057b0a 100755 --- a/parenscript.asd +++ b/parenscript.asd @@ -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*)) diff --git a/src/compiler.lisp b/src/compiler.lisp index 8a98dda..4e16ba8 100644 --- a/src/compiler.lisp +++ b/src/compiler.lisp @@ -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)