defprotocol fails oddly in repl *only*

96 views
Skip to first unread message

Christopher Genovese

unread,
May 29, 2016, 12:22:26 PM5/29/16
to ClojureScript
Whenever I do a defprotocol in the clojurescript repl, even a trivial one like

(defprotocol IFoo
(foo [this]))

it fails with an error `Can't change/establish root binding of: *unchecked-if* with set at line 1 <cljs repl>'. Everything else seems to work as expected.

When compiled outside the repl, such as in a running project, defprotocol works fine.

This happens even in the bare bones cljs repl from following the Quickstart recipe on the cljs wiki exactly, using the latest cljs.jar. The complete stacktrace is below for reference.

This seems like a repl bug, but I'm open to other possibilities. Any thoughts would be appreciated.


cljs.user=> (defprotocol IFoo (foo [this]))
clojure.lang.ExceptionInfo: Can't change/establish root binding of: *unchecked-if* with set at line 1 <cljs repl> {:file "<cljs repl>", :line 1, :column 1, :tag :cljs/analysis-error}
at clojure.core$ex_info.invokeStatic(core.clj:4617)
at cljs.analyzer$error.invokeStatic(analyzer.cljc:576)
at cljs.analyzer$analyze_seq_STAR__wrap.invokeStatic(analyzer.cljc:2420)
at cljs.analyzer$analyze_seq.invokeStatic(analyzer.cljc:2441)
at cljs.analyzer$analyze_form.invokeStatic(analyzer.cljc:2555)
at cljs.analyzer$analyze_STAR_.invokeStatic(analyzer.cljc:2600)
at cljs.analyzer$analyze.invokeStatic(analyzer.cljc:2617)
at cljs.analyzer$analyze.invoke(analyzer.cljc:2605)
at cljs.analyzer$analyze.invokeStatic(analyzer.cljc:2613)
at cljs.analyzer$analyze.invoke(analyzer.cljc:2605)
at cljs.analyzer$analyze.invokeStatic(analyzer.cljc:2612)
at cljs.analyzer$analyze.invoke(analyzer.cljc:2605)
at cljs.analyzer$analyze_do_statements_STAR_$fn__1249.invoke(analyzer.cljc:1406)
at clojure.core$map$fn__4785.invoke(core.clj:2644)
at clojure.lang.LazySeq.sval(LazySeq.java:40)
at clojure.lang.LazySeq.seq(LazySeq.java:49)
at clojure.lang.RT.seq(RT.java:521)
at clojure.core$seq__4357.invokeStatic(core.clj:137)
at cljs.analyzer$analyze_do_statements_STAR_.invokeStatic(analyzer.cljc:1405)
at cljs.analyzer$analyze_do_statements.invokeStatic(analyzer.cljc:1408)
at cljs.analyzer$fn__1254.invokeStatic(analyzer.cljc:1411)
at cljs.analyzer$fn__1254.invoke(analyzer.cljc:1411)
at clojure.lang.MultiFn.invoke(MultiFn.java:251)
at cljs.analyzer$analyze_seq_STAR_.invokeStatic(analyzer.cljc:2416)
at cljs.analyzer$analyze_seq_STAR__wrap.invokeStatic(analyzer.cljc:2419)
at cljs.analyzer$analyze_seq.invokeStatic(analyzer.cljc:2441)
at cljs.analyzer$analyze_form.invokeStatic(analyzer.cljc:2555)
at cljs.analyzer$analyze_STAR_.invokeStatic(analyzer.cljc:2600)
at cljs.analyzer$analyze.invokeStatic(analyzer.cljc:2617)
at cljs.analyzer$analyze.invoke(analyzer.cljc:2605)
at cljs.analyzer$analyze_seq.invokeStatic(analyzer.cljc:2443)
at cljs.analyzer$analyze_form.invokeStatic(analyzer.cljc:2555)
at cljs.analyzer$analyze_STAR_.invokeStatic(analyzer.cljc:2600)
at cljs.analyzer$analyze.invokeStatic(analyzer.cljc:2617)
at cljs.repl$evaluate_form.invokeStatic(repl.cljc:440)
at cljs.repl$eval_cljs.invokeStatic(repl.cljc:576)
at cljs.repl$eval_cljs.invoke(repl.cljc:563)
at cljs.repl$repl_STAR_$read_eval_print__4908.invoke(repl.cljc:875)
at cljs.repl$repl_STAR_$fn__4914$fn__4923.invoke(repl.cljc:914)
at cljs.repl$repl_STAR_$fn__4914.invoke(repl.cljc:913)
at cljs.compiler$with_core_cljs.invokeStatic(compiler.cljc:1154)
at cljs.repl$repl_STAR_.invokeStatic(repl.cljc:851)
at cljs.repl$repl.invokeStatic(repl.cljc:993)
at cljs.repl$repl.doInvoke(repl.cljc:925)
at clojure.lang.RestFn.invoke(RestFn.java:486)
at user$eval220.invokeStatic(repl.clj:10)
at user$eval220.invoke(repl.clj:10)
at clojure.lang.Compiler.eval(Compiler.java:6927)
at clojure.lang.Compiler.load(Compiler.java:7379)
at clojure.lang.Compiler.loadFile(Compiler.java:7317)
at clojure.main$load_script.invokeStatic(main.clj:275)
at clojure.main$script_opt.invokeStatic(main.clj:335)
at clojure.main$script_opt.invoke(main.clj:330)
at clojure.main$main.invokeStatic(main.clj:421)
at clojure.main$main.doInvoke(main.clj:384)
at clojure.lang.RestFn.invoke(RestFn.java:408)
at clojure.lang.Var.invoke(Var.java:379)
at clojure.lang.AFn.applyToHelper(AFn.java:154)
at clojure.lang.Var.applyTo(Var.java:700)
at clojure.main.main(main.java:37)
Caused by: java.lang.IllegalStateException: Can't change/establish root binding of: *unchecked-if* with set
at clojure.lang.Var.set(Var.java:221)
at cljs.analyzer$fn__1299.invokeStatic(analyzer.cljc:1589)
at cljs.analyzer$fn__1299.invoke(analyzer.cljc:1578)
at clojure.lang.MultiFn.invoke(MultiFn.java:251)
at cljs.analyzer$analyze_seq_STAR_.invokeStatic(analyzer.cljc:2416)
at cljs.analyzer$analyze_seq_STAR__wrap.invokeStatic(analyzer.cljc:2419)
... 57 more


David Nolen

unread,
May 29, 2016, 1:17:02 PM5/29/16
to clojur...@googlegroups.com

On Sun, May 29, 2016 at 11:51 AM, Christopher Genovese <genov...@gmail.com> wrote:
(defprotocol IFoo (foo [this]))

Good catch, this is fixed in master now.

David
Reply all
Reply to author
Forward
0 new messages