Commit | Line | Data |
---|---|---|
06babcf5 | 1 | ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; |
4a987e2b | 2 | ;;; ParenScript namespace system |
06babcf5 VS |
3 | |
4 | (in-package :parenscript) | |
5 | ||
4a987e2b | 6 | ;;; Symbol obfuscation |
0c542be0 | 7 | (defvar *obfuscation-table* (make-hash-table)) |
06babcf5 | 8 | |
0c542be0 VS |
9 | (defun obfuscate-package (package-designator) |
10 | (setf (gethash (find-package package-designator) *obfuscation-table*) (make-hash-table))) | |
06babcf5 | 11 | |
0c542be0 VS |
12 | (defun unobfuscate-package (package-designator) |
13 | (remhash (find-package package-designator) *obfuscation-table*)) | |
06babcf5 | 14 | |
0c542be0 VS |
15 | (defun maybe-obfuscate-symbol (symbol) |
16 | (let ((obfuscated-symbol-table (gethash (symbol-package symbol) *obfuscation-table*))) | |
17 | (if obfuscated-symbol-table | |
18 | (or (gethash symbol obfuscated-symbol-table) | |
19 | (setf (gethash symbol obfuscated-symbol-table) (ps-gensym "G"))) | |
20 | symbol))) | |
06babcf5 | 21 | |
0c542be0 | 22 | ;;; Interface for printing identifiers |
06babcf5 | 23 | |
4a987e2b VS |
24 | (defvar *package-prefix-table* (make-hash-table)) |
25 | ||
26 | (defmacro ps-package-prefix (package) | |
27 | "Place for storing a string to be prefixed to any symbols in the | |
28 | designated package when translating ParenScript code." | |
29 | `(gethash (find-package ,package) *package-prefix-table*)) | |
06babcf5 | 30 | |
4a987e2b | 31 | (defun js-translate-symbol (symbol) |
0c542be0 VS |
32 | (let ((possibly-obfuscated-symbol (maybe-obfuscate-symbol symbol))) |
33 | (if (ps-package-prefix (symbol-package symbol)) | |
34 | (format nil "~A~A" (ps-package-prefix (symbol-package symbol)) (symbol-to-js possibly-obfuscated-symbol)) | |
35 | (symbol-to-js possibly-obfuscated-symbol)))) |