add stuff for dumping code from memory into files

This commit is contained in:
Pekka Laiho 2020-12-08 20:51:25 +07:00
parent cc1709f30a
commit 648e5a9554

24
mad/dump.mad Normal file
View File

@ -0,0 +1,24 @@
;;
;; Tools for dumping code from memory into files.
;;
;; Example usage:
;; > (dumpEnv (env) "funcs.mad")
;;
;; This will write all function definitions from the current environment into file "funcs.mad".
;;
;; Return the string for defining the given function
(defn funcToStr (f name)
(str (if (macro? f) "(defmacro " "(defn ")
name " " (pstr (meta f "args")) " "
(pstr (meta f "body")) ")"))
;; Write a hash-map of functions into a file
(defn dumpFuncs (funcs filename)
(let (fnStrings (map2 (fn (f name) (funcToStr f name)) (values funcs) (keys funcs)))
(fput filename (apply join (str EOL EOL) fnStrings))))
;; Write all functions in the given environment to file
(defn dumpEnv (e filename)
(dumpFuncs (filterh fn? e) filename))