philoskim / debux

A trace-based debugging library for Clojure and ClojureScript.
468 stars 19 forks source link

debux mishandles letfn + try + loop #9

Closed jeaye closed 6 years ago

jeaye commented 6 years ago

Version [philoskim/debux "0.4.10"]

Oddly, it appears to be this particular combination which really upsets debux. The fn doesn't need to be called at all; an exception is thrown when compiling it:

(dbgn
  (defn bar []
    (letfn [(foo []
              (try
                nil
                (catch Exception e
                  nil)))]
      (loop [i 0]
        (recur (inc i))))))

The exception:

Exception in thread "main" java.lang.NullPointerException, compiling:(debux_meta/core.clj:5:1)
    at clojure.lang.Compiler.analyzeSeq(Compiler.java:7010)
    at clojure.lang.Compiler.analyze(Compiler.java:6773)
    at clojure.lang.Compiler.analyze(Compiler.java:6729)
    at clojure.lang.Compiler$IfExpr$Parser.parse(Compiler.java:2822)
    at clojure.lang.Compiler.analyzeSeq(Compiler.java:7003)
    at clojure.lang.Compiler.analyze(Compiler.java:6773)
    at clojure.lang.Compiler.analyze(Compiler.java:6729)
    at clojure.lang.Compiler$BodyExpr$Parser.parse(Compiler.java:6100)
    at clojure.lang.Compiler$FnMethod.parse(Compiler.java:5460)
    at clojure.lang.Compiler$FnExpr.parse(Compiler.java:4022)
    at clojure.lang.Compiler.analyzeSeq(Compiler.java:7001)
    at clojure.lang.Compiler.analyze(Compiler.java:6773)
    at clojure.lang.Compiler.eval(Compiler.java:7059)
    at clojure.lang.Compiler.load(Compiler.java:7514)
    at clojure.lang.RT.loadResourceScript(RT.java:379)
    at clojure.lang.RT.loadResourceScript(RT.java:370)
    at clojure.lang.RT.load(RT.java:460)
    at clojure.lang.RT.load(RT.java:426)
    at clojure.core$load$fn__6548.invoke(core.clj:6046)
    at clojure.core$load.invokeStatic(core.clj:6045)
    at clojure.core$load.doInvoke(core.clj:6029)
    at clojure.lang.RestFn.invoke(RestFn.java:408)
    at clojure.core$load_one.invokeStatic(core.clj:5848)
    at clojure.core$load_one.invoke(core.clj:5843)
    at clojure.core$load_lib$fn__6493.invoke(core.clj:5888)
    at clojure.core$load_lib.invokeStatic(core.clj:5887)
    at clojure.core$load_lib.doInvoke(core.clj:5868)
    at clojure.lang.RestFn.applyTo(RestFn.java:142)
    at clojure.core$apply.invokeStatic(core.clj:659)
    at clojure.core$load_libs.invokeStatic(core.clj:5925)
    at clojure.core$load_libs.doInvoke(core.clj:5909)
    at clojure.lang.RestFn.applyTo(RestFn.java:137)
    at clojure.core$apply.invokeStatic(core.clj:659)
    at clojure.core$require.invokeStatic(core.clj:5947)
    at clojure.core$require.doInvoke(core.clj:5947)
    at clojure.lang.RestFn.invoke(RestFn.java:408)
    at user$eval3111$fn__3115.invoke(form-init8000152408779894085.clj:1)
    at user$eval3111.invokeStatic(form-init8000152408779894085.clj:1)
    at user$eval3111.invoke(form-init8000152408779894085.clj:1)
    at clojure.lang.Compiler.eval(Compiler.java:7062)
    at clojure.lang.Compiler.eval(Compiler.java:7052)
    at clojure.lang.Compiler.load(Compiler.java:7514)
    at clojure.lang.Compiler.loadFile(Compiler.java:7452)
    at clojure.main$load_script.invokeStatic(main.clj:278)
    at clojure.main$init_opt.invokeStatic(main.clj:280)
    at clojure.main$init_opt.invoke(main.clj:280)
    at clojure.main$initialize.invokeStatic(main.clj:311)
    at clojure.main$null_opt.invokeStatic(main.clj:345)
    at clojure.main$null_opt.invoke(main.clj:342)
    at clojure.main$main.invokeStatic(main.clj:424)
    at clojure.main$main.doInvoke(main.clj:387)
    at clojure.lang.RestFn.applyTo(RestFn.java:137)
    at clojure.lang.Var.applyTo(Var.java:702)
    at clojure.main.main(main.java:37)
Caused by: java.lang.NullPointerException
    at java.util.concurrent.ConcurrentHashMap.get(ConcurrentHashMap.java:936)
    at clojure.lang.Namespace.find(Namespace.java:188)
    at clojure.core$find_ns.invokeStatic(core.clj:4096)
    at clojure.core$the_ns.invokeStatic(core.clj:4126)
    at clojure.core$ns_name.invokeStatic(core.clj:4130)
    at clojure.core$ns_name.invoke(core.clj:4130)
    at debux.common.util$var__GT_symbol.invokeStatic(util.cljc:112)
    at debux.common.util$var__GT_symbol.invoke(util.cljc:110)
    at debux.common.util$ns_symbol_for_clj.invokeStatic(util.cljc:119)
    at debux.common.util$ns_symbol_for_clj.invoke(util.cljc:117)
    at debux.common.util$ns_symbol.invokeStatic(util.cljc:140)
    at debux.common.util$ns_symbol.doInvoke(util.cljc:136)
    at clojure.lang.RestFn.invoke(RestFn.java:423)
    at debux.common.skip$insert_o_skip_for_recur.invokeStatic(skip.cljc:190)
    at debux.common.skip$insert_o_skip_for_recur.doInvoke(skip.cljc:180)
    at clojure.lang.RestFn.invoke(RestFn.java:423)
    at debux.dbgn$dbgn.invokeStatic(dbgn.clj:298)
    at debux.dbgn$dbgn.doInvoke(dbgn.clj:286)
    at clojure.lang.RestFn.applyTo(RestFn.java:146)
    at clojure.lang.Var.applyTo(Var.java:702)
    at clojure.lang.Compiler.macroexpand1(Compiler.java:6912)
    at clojure.lang.Compiler.analyzeSeq(Compiler.java:6989)
    ... 53 more
philoskim commented 6 years ago

This error was caused when the form including recur has a java.lang.Class type of symbol (Exception in the above example) as well. It’s now fixed.

Many Thanks!

jeaye commented 6 years ago

Thank you!