Clarified that the license is BSD 3-clause. Added SPDX identifiers
[parenscript.git] / src / namespace.lisp
blobb1c6ae818de5626b46bce8c60bad71f6cf771da7
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
9 (symbol-map
10 (let ((symbol-table (make-hash-table)))
11 (lambda (symbol)
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))))
21 symbol
22 (aif (gethash (symbol-package symbol) *obfuscated-packages*)
23 (funcall it symbol)
24 symbol)))
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)
35 symbol-name)))
36 (aif (ps-package-prefix (symbol-package symbol))
37 (concatenate 'string it identifier)
38 identifier)))