Skip to content

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

Description

@torgeir

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

Activity

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Metadata

Metadata

Assignees

No one assigned

    Type

    No type

    Projects

    No projects

      Milestone

      No milestone

      Relationships

      None yet

      Development

      No branches or pull requests

      Issue actions