cemerick / austin

The ClojureScript browser-REPL rebuilt stronger, faster, easier.
510 stars 31 forks source link

multiple (prn "something") produces a NPE #48

Open geraldodev opened 10 years ago

geraldodev commented 10 years ago

I have discovered that when my onchange handler on an input elementet that uses prn to debug, was fired many times.

That will raise an exception

java.lang.RuntimeException: Agent is failed, needs restart
    at clojure.lang.Util.runtimeException(Util.java:223)
    at clojure.lang.Agent.dispatch(Agent.java:238)
    at clojure.core$send_via.doInvoke(core.clj:1915)
    at clojure.lang.RestFn.applyTo(RestFn.java:146)
    at clojure.core$apply.invoke(core.clj:623)
    at clojure.core$send_off.doInvoke(core.clj:1937)
    at clojure.lang.RestFn.invoke(RestFn.java:464)
    at cemerick.austin$constrain_order.invoke(austin.clj:238)
    at cemerick.austin$eval3275$fn__3277.invoke(austin.clj:244)
    at clojure.lang.MultiFn.invoke(MultiFn.java:227)
    at cemerick.austin$handle_request.invoke(austin.clj:282)
    at cemerick.austin$create_server$reify__3178.handle(austin.clj:25)
    at com.sun.net.httpserver.Filter$Chain.doFilter(Filter.java:77)
    at sun.net.httpserver.AuthFilter.doFilter(AuthFilter.java:83)
    at com.sun.net.httpserver.Filter$Chain.doFilter(Filter.java:80)
    at sun.net.httpserver.ServerImpl$Exchange$LinkHandler.handle(ServerImpl.java:677)
    at com.sun.net.httpserver.Filter$Chain.doFilter(Filter.java:77)
    at sun.net.httpserver.ServerImpl$Exchange.run(ServerImpl.java:649)
    at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1145)
    at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:615)
    at java.lang.Thread.run(Thread.java:744)
Caused by: java.lang.NullPointerException
    at clojure.core$fn__5420.invoke(core_print.clj:187)
    at clojure.lang.MultiFn.invoke(MultiFn.java:231)
    at clojure.core$pr_on.invoke(core.clj:3322)
    at clojure.core$pr.invoke(core.clj:3334)
    at clojure.lang.AFn.applyToHelper(AFn.java:161)
    at clojure.lang.RestFn.applyTo(RestFn.java:132)
    at clojure.core$apply.invoke(core.clj:617)
    at clojure.core$print.doInvoke(core.clj:3379)
    at clojure.lang.RestFn.invoke(RestFn.java:408)
    at cemerick.austin$eval3275$fn__3277$fn__3279$fn__3280.invoke(austin.clj:247)
    at cemerick.austin$eval3275$fn__3277$fn__3279.invoke(austin.clj:246)
    at cemerick.austin$run_in_order.invoke(austin.clj:230)
    at clojure.core$binding_conveyor_fn$fn__4107.invoke(core.clj:1839)
    at clojure.lang.AFn.applyToHelper(AFn.java:161)
    at clojure.lang.RestFn.applyTo(RestFn.java:132)
    at clojure.lang.Agent$Action.doRun(Agent.java:114)
    at clojure.lang.Agent$Action.run(Agent.java:163)
cemerick commented 10 years ago

The failure is that the :print dispatch for handle-post is attempting to read the content that was printed; this is yielding some value that print on the Clojure side is apparently unable to handle.

That part of Austin is largely unchanged from its roots in the stock ClojureScript browser REPL implementation. I'll need to re-familiarize myself with what the objectives are there, because I can't think of why we'd be wanting to read what was printed browser-side.