1 ;; SPDX-License-Identifier: BSD-3-Clause
3 (in-package #:parenscript
)
4 (in-readtable :parenscript
)
6 (defvar *obfuscated-packages
* (make-hash-table))
8 (defun obfuscate-package (package-designator &optional
10 (let ((symbol-table (make-hash-table)))
12 (or #1=(gethash symbol symbol-table
)
13 (setf #1# (ps-gensym "G")))))))
14 (setf (gethash (find-package package-designator
) *obfuscated-packages
*) symbol-map
))
16 (defun unobfuscate-package (package-designator)
17 (remhash (find-package package-designator
) *obfuscated-packages
*))
19 (defun maybe-obfuscate-symbol (symbol)
20 (if (aand (symbol-package symbol
) (eq :external
(nth-value 1 (find-symbol (symbol-name symbol
) it
))))
22 (aif (gethash (symbol-package symbol
) *obfuscated-packages
*)
26 (defvar *package-prefix-table
* (make-hash-table))
28 (defmacro ps-package-prefix
(package)
29 `(gethash (find-package ,package
) *package-prefix-table
*))
31 (defun symbol-to-js-string (symbol &optional
(mangle-symbol-name? t
))
32 (let* ((symbol-name (symbol-name (maybe-obfuscate-symbol symbol
)))
33 (identifier (if mangle-symbol-name?
34 (encode-js-identifier symbol-name
)
36 (aif (ps-package-prefix (symbol-package symbol
))
37 (concatenate 'string it identifier
)