Skip to content

Instantly share code, notes, and snippets.

@lrenn
Created November 3, 2010 16:36
Show Gist options
  • Save lrenn/661323 to your computer and use it in GitHub Desktop.
Save lrenn/661323 to your computer and use it in GitHub Desktop.
(defn baked* [loader ns-forms bindings body]
(with-classloader loader
(let [body `(~'let ~(quote-if odd? bindings) ~@body)
clj (.loadClass loader "clojure.main")
signature (into-array Class [(class (into-array String []))])
method (.getDeclaredMethod clj "main" signature)
args (into-array Object [(into-array String ["-e" (pr-str [ns-forms body])])])]
(.invoke method clj args))))
(defmacro baked
[loader & forms]
(let [[ns-forms [bindings & body]] (split-with (complement vector?) forms)]
`(baked* ~loader '~ns-forms ~(quote-if even? bindings) '~body)))
; (baked loader
; [path (.getAbsolutePath file)]
; (load-file path)))))
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment