Commit | Line | Data |
---|---|---|
06babcf5 | 1 | ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; |
4a987e2b | 2 | ;;; ParenScript namespace system |
06babcf5 VS |
3 | |
4 | (in-package :parenscript) | |
5 | ||
675edae3 TC |
6 | (defun ensure-ps-symbol (symbol) |
7 | (if (eq (symbol-package symbol) #.(find-package :parenscript)) | |
8 | symbol | |
9 | (intern (symbol-name symbol) #.(find-package :parenscript)))) | |
10 | ||
4a987e2b | 11 | ;;; Symbol obfuscation |
0c542be0 | 12 | (defvar *obfuscation-table* (make-hash-table)) |
06babcf5 | 13 | |
0c542be0 VS |
14 | (defun obfuscate-package (package-designator) |
15 | (setf (gethash (find-package package-designator) *obfuscation-table*) (make-hash-table))) | |
06babcf5 | 16 | |
0c542be0 VS |
17 | (defun unobfuscate-package (package-designator) |
18 | (remhash (find-package package-designator) *obfuscation-table*)) | |
06babcf5 | 19 | |
0c542be0 VS |
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"))) | |
25 | symbol))) | |
06babcf5 | 26 | |
0c542be0 | 27 | ;;; Interface for printing identifiers |
06babcf5 | 28 | |
4a987e2b VS |
29 | (defvar *package-prefix-table* (make-hash-table)) |
30 | ||
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*)) | |
06babcf5 | 35 | |
4a987e2b | 36 | (defun js-translate-symbol (symbol) |
0c542be0 VS |
37 | (let ((possibly-obfuscated-symbol (maybe-obfuscate-symbol symbol))) |
38 | (if (ps-package-prefix (symbol-package symbol)) | |
6274a448 VS |
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)))) |