1 ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
2 ;;; ParenScript namespace system
4 (in-package :parenscript
)
6 (defun ensure-ps-symbol (symbol)
7 (if (eq (symbol-package symbol
) #.
(find-package :parenscript
))
9 (intern (symbol-name symbol
) #.
(find-package :parenscript
))))
11 ;;; Symbol obfuscation
12 (defvar *obfuscation-table
* (make-hash-table))
14 (defun obfuscate-package (package-designator)
15 (setf (gethash (find-package package-designator
) *obfuscation-table
*) (make-hash-table)))
17 (defun unobfuscate-package (package-designator)
18 (remhash (find-package package-designator
) *obfuscation-table
*))
20 (defun maybe-obfuscate-symbol (symbol)
21 (let ((obfuscated-symbol-table (gethash (symbol-package symbol
) *obfuscation-table
*)))
22 (if obfuscated-symbol-table
23 (or (gethash symbol obfuscated-symbol-table
)
24 (setf (gethash symbol obfuscated-symbol-table
) (ps-gensym "G")))
27 ;;; Interface for printing identifiers
29 (defvar *package-prefix-table
* (make-hash-table))
31 (defmacro ps-package-prefix
(package)
32 "Place for storing a string to be prefixed to any symbols in the
33 designated package when translating ParenScript code."
34 `(gethash (find-package ,package
) *package-prefix-table
*))
36 (defun js-translate-symbol (symbol)
37 (let ((possibly-obfuscated-symbol (maybe-obfuscate-symbol symbol
)))
38 (if (ps-package-prefix (symbol-package symbol
))
39 (format nil
"~A~A" (ps-package-prefix (symbol-package symbol
)) (symbol-to-js-string possibly-obfuscated-symbol
))
40 (symbol-to-js-string possibly-obfuscated-symbol
))))