Closed jeaye closed 6 years ago
I examined what you had issued and concluded that it's not the problem of debux.
dbgn
wraps the given form in let
like this after macro-expansion.
(dbgn
(defn glug []))
;; after macroexpand-all the above form
(if (ut/debug-enabled? "debux.core")
(let*
[+debux-dbg-opts+ {:evals (atom {})} condition__14749__auto__ nil]
(try
(if (let*
[or__4469__auto__ (nil? condition__14749__auto__)]
(if or__4469__auto__
or__4469__auto__
condition__14749__auto__))
(let*
[title__14750__auto__
(str
"\ndbgn: "
(ut/truncate (pr-str '(def glug (fn* ([])))))
" =>")]
(println title__14750__auto__)
(def glug
(fn*
([]
(try
(reset! (:evals +debux-dbg-opts+) {})
(swap! ut/config* update :indent-level inc)
(ut/insert-blank-line)
(catch java.lang.Exception e (throw e))
(finally
(swap! ut/config* update :indent-level dec)))))))
(def glug (fn* ([]))))
(catch java.lang.Exception e (throw e))))
(def glug (fn* ([]))))
It is inevitable to wrap the given form in let
to debug its form in dbgn
.
And then, look at the following code.
(let [a 10]
(defn glug [] a))
;; => #'debux.core/glug
(defmacro bar [data]
`(do
~(get data ::key glug)))
;; => #'debux.core/bar
(defn main []
(bar {}))
;; 3. Unhandled clojure.lang.Compiler$CompilerException
;; Error compiling form-init8224604637773231031.clj at (51:1)
;;
;; Compiler.java: 464 clojure.lang.Compiler$DefExpr/eval
;; Compiler.java: 6932 clojure.lang.Compiler/eval
;; Compiler.java: 6890 clojure.lang.Compiler/eval
;; core.clj: 3105 clojure.core/eval
;; core.clj: 3101 clojure.core/eval
;; main.clj: 240 clojure.main/repl/read-eval-print/fn
;; main.clj: 240 clojure.main/repl/read-eval-print
;; main.clj: 258 clojure.main/repl/fn
;; main.clj: 258 clojure.main/repl
;; main.clj: 174 clojure.main/repl
;; RestFn.java: 1523 clojure.lang.RestFn/invoke
;; interruptible_eval.clj: 87 clojure.tools.nrepl.middleware.interruptible-eval/evaluate/fn
;; AFn.java: 152 clojure.lang.AFn/applyToHelper
;; AFn.java: 144 clojure.lang.AFn/applyTo
;; core.clj: 646 clojure.core/apply
;; core.clj: 1881 clojure.core/with-bindings*
;; core.clj: 1881 clojure.core/with-bindings*
;; RestFn.java: 425 clojure.lang.RestFn/invoke
;; interruptible_eval.clj: 85 clojure.tools.nrepl.middleware.interruptible-eval/evaluate
;; interruptible_eval.clj: 55 clojure.tools.nrepl.middleware.interruptible-eval/evaluate
;; interruptible_eval.clj: 222 clojure.tools.nrepl.middleware.interruptible-eval/interruptible-eval/fn/fn
;; interruptible_eval.clj: 190 clojure.tools.nrepl.middleware.interruptible-eval/run-next/fn
;; AFn.java: 22 clojure.lang.AFn/run
;; ThreadPoolExecutor.java: 1149 java.util.concurrent.ThreadPoolExecutor/runWorker
;; ThreadPoolExecutor.java: 624 java.util.concurrent.ThreadPoolExecutor$Worker/run
;; Thread.java: 748 java.lang.Thread/run
;;
;; 2. Caused by java.lang.ExceptionInInitializerError
;; (No message)
;;
;; NativeConstructorAccessorImpl.java: -2 sun.reflect.NativeConstructorAccessorImpl/newInstance0
;; NativeConstructorAccessorImpl.java: 62 sun.reflect.NativeConstructorAccessorImpl/newInstance
;; DelegatingConstructorAccessorImpl.java: 45 sun.reflect.DelegatingConstructorAccessorImpl/newInstance
;; Constructor.java: 423 java.lang.reflect.Constructor/newInstance
;; Class.java: 442 java.lang.Class/newInstance
;; Compiler.java: 4913 clojure.lang.Compiler$ObjExpr/eval
;; Compiler.java: 451 clojure.lang.Compiler$DefExpr/eval
;; Compiler.java: 6932 clojure.lang.Compiler/eval
;; Compiler.java: 6890 clojure.lang.Compiler/eval
;; core.clj: 3105 clojure.core/eval
;; core.clj: 3101 clojure.core/eval
;; main.clj: 240 clojure.main/repl/read-eval-print/fn
;; main.clj: 240 clojure.main/repl/read-eval-print
;; main.clj: 258 clojure.main/repl/fn
;; main.clj: 258 clojure.main/repl
;; main.clj: 174 clojure.main/repl
;; RestFn.java: 1523 clojure.lang.RestFn/invoke
;; interruptible_eval.clj: 87 clojure.tools.nrepl.middleware.interruptible-eval/evaluate/fn
;; AFn.java: 152 clojure.lang.AFn/applyToHelper
;; AFn.java: 144 clojure.lang.AFn/applyTo
;; core.clj: 646 clojure.core/apply
;; core.clj: 1881 clojure.core/with-bindings*
;; core.clj: 1881 clojure.core/with-bindings*
;; RestFn.java: 425 clojure.lang.RestFn/invoke
;; interruptible_eval.clj: 85 clojure.tools.nrepl.middleware.interruptible-eval/evaluate
;; interruptible_eval.clj: 55 clojure.tools.nrepl.middleware.interruptible-eval/evaluate
;; interruptible_eval.clj: 222 clojure.tools.nrepl.middleware.interruptible-eval/interruptible-eval/fn/fn
;; interruptible_eval.clj: 190 clojure.tools.nrepl.middleware.interruptible-eval/run-next/fn
;; AFn.java: 22 clojure.lang.AFn/run
;; ThreadPoolExecutor.java: 1149 java.util.concurrent.ThreadPoolExecutor/runWorker
;; ThreadPoolExecutor.java: 624 java.util.concurrent.ThreadPoolExecutor$Worker/run
;; Thread.java: 748 java.lang.Thread/run
;;
;; 1. Caused by java.lang.IllegalArgumentException
;; No matching ctor found for class debux.core$eval15315$glug__15316
;;
;; Reflector.java: 163 clojure.lang.Reflector/invokeConstructor
;; LispReader.java: 1120 clojure.lang.LispReader$EvalReader/invoke
;; LispReader.java: 691 clojure.lang.LispReader$DispatchReader/invoke
;; LispReader.java: 263 clojure.lang.LispReader/read
;; LispReader.java: 196 clojure.lang.LispReader/read
;; LispReader.java: 185 clojure.lang.LispReader/read
;; RT.java: 1835 clojure.lang.RT/readString
;; RT.java: 1830 clojure.lang.RT/readString
;; REPL: 51 debux.core/main
;; NativeConstructorAccessorImpl.java: -2 sun.reflect.NativeConstructorAccessorImpl/newInstance0
;; NativeConstructorAccessorImpl.java: 62 sun.reflect.NativeConstructorAccessorImpl/newInstance
;; DelegatingConstructorAccessorImpl.java: 45 sun.reflect.DelegatingConstructorAccessorImpl/newInstance
;; Constructor.java: 423 java.lang.reflect.Constructor/newInstance
;; Class.java: 442 java.lang.Class/newInstance
;; Compiler.java: 4913 clojure.lang.Compiler$ObjExpr/eval
;; Compiler.java: 451 clojure.lang.Compiler$DefExpr/eval
;; Compiler.java: 6932 clojure.lang.Compiler/eval
;; Compiler.java: 6890 clojure.lang.Compiler/eval
;; core.clj: 3105 clojure.core/eval
;; core.clj: 3101 clojure.core/eval
;; main.clj: 240 clojure.main/repl/read-eval-print/fn
;; main.clj: 240 clojure.main/repl/read-eval-print
;; main.clj: 258 clojure.main/repl/fn
;; main.clj: 258 clojure.main/repl
;; main.clj: 174 clojure.main/repl
;; RestFn.java: 1523 clojure.lang.RestFn/invoke
;; interruptible_eval.clj: 87 clojure.tools.nrepl.middleware.interruptible-eval/evaluate/fn
;; AFn.java: 152 clojure.lang.AFn/applyToHelper
;; AFn.java: 144 clojure.lang.AFn/applyTo
;; core.clj: 646 clojure.core/apply
;; core.clj: 1881 clojure.core/with-bindings*
;; core.clj: 1881 clojure.core/with-bindings*
;; RestFn.java: 425 clojure.lang.RestFn/invoke
;; interruptible_eval.clj: 85 clojure.tools.nrepl.middleware.interruptible-eval/evaluate
;; interruptible_eval.clj: 55 clojure.tools.nrepl.middleware.interruptible-eval/evaluate
;; interruptible_eval.clj: 222 clojure.tools.nrepl.middleware.interruptible-eval/interruptible-eval/fn/fn
;; interruptible_eval.clj: 190 clojure.tools.nrepl.middleware.interruptible-eval/run-next/fn
;; AFn.java: 22 clojure.lang.AFn/run
;; ThreadPoolExecutor.java: 1149 java.util.concurrent.ThreadPoolExecutor/runWorker
;; ThreadPoolExecutor.java: 624 java.util.concurrent.ThreadPoolExecutor$Worker/run
;; Thread.java: 748 java.lang.Thread/run
The same exception occurs without dbgn
macro.
In my opinion, when a defined function is wrapped in let
and refers some bindings in
let
within the function, the same execption occurs. However, I don't know exactly why this occurs.
And refer to the following discussions as well.
https://groups.google.com/forum/#!msg/clojure/VVbKdvlnEG4/xIc5xqFPBgAJ
If I am wrong, please let me know about it.
Lastly, I recommend that you should do it like this, if you want to achieve what you want.
(dbgn
(defn glug []))
;; => #'debux.core/glug
(defmacro bar [data]
`(do
~(get data ::key 'glug)))
;; => #'debux.core/bar
(defn main []
(bar {}))
; => #'debux.core/main
(main)
; => #function[debux.core/eval14809/glug--14810]
Lastly, I recommend that you should do it like this, if you want to achieve what you want.
Thanks so much for looking into this and providing such a complete response! Your suggested change did the trick and now debux seems to be working well.
Version:
[philoskim/debux "0.4.11"]
Here's the simplest example:
The error: