binaryage / dirac

A Chrome DevTools fork for ClojureScript developers
Other
769 stars 30 forks source link

dirac + cljs-repl max call stack exceeded? #75

Open torgeir opened 6 years ago

torgeir commented 6 years ago

Do feel free to shoot this down if this is not an issue with dirac, rather some of the other dependencies, a combination, or a too complex setup to dig into 😄

In an attempt to see how good of a cljs stack I could come up with, I was trying out dirac in combination with a few other tools along with boot; dirac, boot-cljs-devtools, boot-cljs-repl, boot-cljs, boot-http, boot-reload

This branch holds a repro https://github.com/torgeir/gen-cljs/tree/dirac-start-browser-repl-max-call-stack-exceeded.

What I'm seeing is by running boot dev (after adding (dirac)) to fire everything up, and connecting to it in another terminal window with boot repl -c - it connects nicely

➜  gen git:(dirac-start-browser-repl-max-call-stack-exceeded) boot repl -c
SLF4J: Failed to load class "org.slf4j.impl.StaticLoggerBinder".
SLF4J: Defaulting to no-operation (NOP) logger implementation
SLF4J: See http://www.slf4j.org/codes.html#StaticLoggerBinder for further details.
REPL-y 0.3.7, nREPL 0.2.13
Clojure 1.9.0
Java HotSpot(TM) 64-Bit Server VM 9+181
        Exit: Control+D or (exit) or (quit)
    Commands: (user/help)
        Docs: (doc function-name-here)
              (find-doc "part-of-name-here")
Find by Name: (find-name "part-of-name-here")
      Source: (source function-name-here)
     Javadoc: (javadoc java-object-or-class-here)
    Examples from clojuredocs.org: [clojuredocs or cdoc]
              (user/clojuredocs name-here)
              (user/clojuredocs "ns-here" "name-here")
boot.user=>

but running (start-repl)

boot.user=> (start-repl)
<< started Weasel server on ws://127.0.0.1:63421 >>
<< waiting for client to connect ... Connection is ws://localhost:63421
Writing boot_cljs_repl.cljs...

and reloading the web page at http://localhost:3000 in chrome canary

 connected! >>
#object[RangeError RangeError: Maximum call stack size exceeded]

RangeError: Maximum call stack size exceeded
    at cljs$core$_EQ_ (http://localhost:3000/js/gen.out/cljs/core.js:4484:42)
    at Object.clojure.browser.repl.bootstrap.goog.require [as require__] (http://localhost:3000/js/gen.out/clojure/browser/repl.js:273:19)
    at Object.clojure.browser.repl.bootstrap.goog.require [as require__] (http://localhost:3000/js/gen.out/clojure/browser/repl.js:295:16)
    at Object.clojure.browser.repl.bootstrap.goog.require [as require__] (http://localhost:3000/js/gen.out/clojure/browser/repl.js:295:16)
    at Object.clojure.browser.repl.bootstrap.goog.require [as require__] (http://localhost:3000/js/gen.out/clojure/browser/repl.js:295:16)
    at Object.clojure.browser.repl.bootstrap.goog.require [as require__] (http://localhost:3000/js/gen.out/clojure/browser/repl.js:295:16)
    at Object.clojure.browser.repl.bootstrap.goog.require [as require__] (http://localhost:3000/js/gen.out/clojure/browser/repl.js:295:16)
    at Object.clojure.browser.repl.bootstrap.goog.require [as require__] (http://localhost:3000/js/gen.out/clojure/browser/repl.js:295:16)
    at Object.clojure.browser.repl.bootstrap.goog.require [as require__] (http://localhost:3000/js/gen.out/clojure/browser/repl.js:295:16)
    at Object.clojure.browser.repl.bootstrap.goog.require [as require__] (http://localhost:3000/js/gen.out/clojure/browser/repl.js:295:16)
To quit, type: :cljs/quit
cljs.user=>

The repl still seems to be working

cljs.user=> (+ 1 2)
3

but the dirac console also complains

VM824:1 Dirac encountered an internal eval problem (:dirac.implant.eval/eval-exception).
RangeError: Maximum call stack size exceeded
    at Object.clojure.browser.repl.bootstrap.goog.require [as require__] (http://localhost:3000/js/gen.out/clojure/browser/repl.js:272:33)
    at Object.clojure.browser.repl.bootstrap.goog.require [as require__] (http://localhost:3000/js/gen.out/clojure/browser/repl.js:295:16)
    at Object.clojure.browser.repl.bootstrap.goog.require [as require__] (http://localhost:3000/js/gen.out/clojure/browser/repl.js:295:16)
    at Object.clojure.browser.repl.bootstrap.goog.require [as require__] (http://localhost:3000/js/gen.out/clojure/browser/repl.js:295:16)
    at Object.clojure.browser.repl.bootstrap.goog.require [as require__] (http://localhost:3000/js/gen.out/clojure/browser/repl.js:295:16)
    at Object.clojure.browser.repl.bootstrap.goog.require [as require__] (http://localhost:3000/js/gen.out/clojure/browser/repl.js:295:16)
    at Object.clojure.browser.repl.bootstrap.goog.require [as require__] (http://localhost:3000/js/gen.out/clojure/browser/repl.js:295:16)
    at Object.clojure.browser.repl.bootstrap.goog.require [as require__] (http://localhost:3000/js/gen.out/clojure/browser/repl.js:295:16)
    at Object.clojure.browser.repl.bootstrap.goog.require [as require__] (http://localhost:3000/js/gen.out/clojure/browser/repl.js:295:16)
    at Object.clojure.browser.repl.bootstrap.goog.require [as require__] (http://localhost:3000/js/gen.out/clojure/browser/repl.js:295:16)
While evaluating:
goog.provide('cljs.user');
goog.require('cljs.core');
goog.require('cljs.repl');
goog.require('cljs.pprint');

//# sourceURL=repl://dirac-repl/dirac/228de5b1-1/init.js
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicmVwbDpcL1wvZGlyYWMtcmVwbFwvZGlyYWNcLzIyOGRlNWIxLTFcL2luaXQuanMiLCJzb3VyY2VzIjpbImluaXQuY2xqcyJdLCJsaW5lQ291bnQiOjcsIm1hcHBpbmdzIjoiQUFBQSIsIm5hbWVzIjpbXSwic291cmNlc0NvbnRlbnQiOlsiKG5zIGNsanMudXNlciAoOnJlcXVpcmUgW2NsanMucmVwbCA6cmVmZXItbWFjcm9zIFtzb3VyY2UgZG9jIGZpbmQtZG9jIGFwcm9wb3MgZGlyIHBzdF1dIFtjbGpzLnBwcmludCA6cmVmZXIgW3BwcmludF0gOnJlZmVyLW1hY3JvcyBbcHBdXSkpIl19

Is this a problem? I don't know. The issue I am having with it is that my emacs instance is no longer able to run cider-connect followed by (start-repl) and have a working repl inside emacs to evaluate cljs code on the go.


I am running boot with the following ~/.boot/profile.boot in place to have things working inside emacs.

(def v-tools-nrepl "0.2.13")
(def v-cider-nrepl "0.17.0-SNAPSHOT")
(def v-refactor-nrepl "2.4.0-SNAPSHOT")

(deftask cider "CIDER profile"
  []
  (require 'boot.repl)
  (swap! @(resolve 'boot.repl/*default-dependencies*)
         concat `[[org.clojure/tools.nrepl ~v-tools-nrepl]
                  [cider/cider-nrepl ~v-cider-nrepl]
                  [~'refactor-nrepl ~v-refactor-nrepl]
                  ])
  (swap! @(resolve 'boot.repl/*default-middleware*)
         concat '[cider.nrepl/cider-middleware
                  refactor-nrepl.middleware/wrap-refactor
                  ])
  identity)

Without (dirac) in place in the boot dev task, substituting the boot dev mentioned above with boot cider dev and running cider-connect followed by (start-repl) seems to be working nicely and allows me to eval cljs from the emacs instance.

Edit: With these versions of boot and clojure, on java 9

cat ~/.boot/boot.properties

http://boot-clj.com

Fri Jan 26 21:08:58 CET 2018

BOOT_VERSION=2.8.0-SNAPSHOT BOOT_CLOJURE_VERSION=1.9.0 BOOT_CLOJURE_NAME=org.clojure/clojure

darwin commented 6 years ago

I tried to reproduce it on my macOS 10.13 machine and it works for me.

Used java9, all your files including ~/.boot/profile.boot, but my boot is 2.7.2:

cat ~/.boot/boot.properties
#http://boot-clj.com
#Sat Jan 27 22:38:14 CET 2018
BOOT_CLOJURE_NAME=org.clojure/clojure
BOOT_CLOJURE_VERSION=1.9.0
BOOT_VERSION=2.7.2

Have you tried to remove whole ~/.boot and start from scratch? Yesterday I had quite weird issues with boot until doing that. Details in the #dirac slack channel.

theronic commented 6 years ago

I'm seeing this error too running Clojure 1.9.0 and boot 2.8.1.