4bc2798a55800967ffb3c3ed4c0a4bf20ec91730
1 (in-package "PARENSCRIPT")
3 ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
4 ;;; ParenScript namespace system
7 (defvar *obfuscated-packages
* (make-hash-table))
9 (defun obfuscate-package (package-designator &optional
(symbol-map (make-hash-table)))
10 "symbol-map can either be a hash table or a closure that takes a symbol as its only argument."
11 (setf (gethash (find-package package-designator
) *obfuscated-packages
*) symbol-map
))
13 (defun unobfuscate-package (package-designator)
14 (remhash (find-package package-designator
) *obfuscated-packages
*))
16 (defun maybe-obfuscate-symbol (symbol)
17 (ctypecase (gethash (symbol-package symbol
) *obfuscated-packages
*)
18 (hash-table (let ((symbol-map (gethash (symbol-package symbol
) *obfuscated-packages
*)))
19 (or (gethash symbol symbol-map
) (setf (gethash symbol symbol-map
) (ps-gensym "G")))))
20 (function (funcall (gethash (symbol-package symbol
) *obfuscated-packages
*) symbol
))
23 ;;; Interface for printing identifiers
25 (defvar *package-prefix-table
* (make-hash-table))
27 (defmacro ps-package-prefix
(package)
28 "Place for storing a string to be prefixed to any symbols in the
29 designated package when translating ParenScript code."
30 `(gethash (find-package ,package
) *package-prefix-table
*))
32 (defun symbol-to-js-string (symbol)
33 (let ((symbol-name (symbol-name-to-js-string (maybe-obfuscate-symbol symbol
))))
34 (aif (ps-package-prefix (symbol-package symbol
))
35 (format nil
"~A~A" it symbol-name
)