   ;3. zsym is defined and bound, returns :bound
   ;4. zsym is an expression ie. #() or (list 1 2 3), throws exception
   ;5. zsym is a special symbol ie. def   test this via (special-symbol? 'def) , returns :special
-  ;6. zsym is a macro ie. defn, returns :macro
+  ;6. zsym is a macro ie. defn, returns :macro
+  ;7. FIXME: handle this: (#(sym-state %) prn2) ;CompilerException java.lang.RuntimeException: Unable to resolve symbol: prn2 in this context, compiling:(NO_SOURCE_PATH:1:1) 
+
   `(try 
      (let [qsym# (quote ~zsym)]
            (if (not (symbol? qsym#)) ;ie. #() or (list 1 2 3)

  nil
  )

(defn attachTimes [varfunc]
  {:pre [(assumedTrue (var? varfunc) )] }
  (add-hook varfunc #'incTimes_hook)
  )

(attachTimes #'dummy1)


(deftest a-test2  

(defmacro sym-info [zsym]
  `(let [ss# (sym-state ~zsym)] 
     (if (not= :bound ss#)
       {:state ss# :value ~zsym};nil} ; works: ~zsym};not-works: (encast ~zsym) -> when (#(sym-info %) prn) , CompilerException java.lang.RuntimeException: Unable to resolve symbol: p1__5531# in this context, compiling:(NO_SOURCE_PATH:1:1) 
       {:state ss# :value (encast ~zsym)}
       )
     )
  )




#_(defmacro get-as-var [sym-or-var]
  `(let [qsym# (quote sym-or-var)]
