   ;TODO: allow invariants functions for each param and throw when any of them fail(obviously)
   ;TODO: ignore optional params that weren't passed on call
   ;TODO: throw when required params aren't passed on call
-  (clojure.pprint/pprint (get_fxn_defBlock));firsta)
+  (clojure.pprint/pprint (list "foocode" (get_fxn_defBlock)));firsta)
   )
 ;)
 

  ;if you want some form to be evaluate then place ~ before it
  ;this is the defblock
  {;:something {:a ~(+ 1 2)}
   ;aliases are supported to allow later renaming the params used within the defblock without worrying that you forgot to rename all instances
   :aliases {;p1 p2 where p1 is parameter name used in here and p2 is the actual name the param has in the function body
             ;all names are keywords to allow evaluating the entire defblock and they are actually symbols inside the function body

;you need not bind this though, unless you really want to name it something
;but it won't clash with others, supposedly - there may be some case when it could clash let within a let
(def ^:dynamic *fxn_defBlock_symbol* (gensym 'fxn_defBlock))
(def ^:dynamic *fxn_defBlockRaw_symbol* (gensym 'fxn_defBlockRaw))


(defmacro get_fxn
