<< Back to previous view

[CLJS-1382] Macros time and case use unqualified core/str in syntax quote (breaks bootstrap) Created: 30/Jul/15  Updated: 30/Jul/15  Resolved: 30/Jul/15

Status: Closed
Project: ClojureScript
Component/s: None
Affects Version/s: None
Fix Version/s: None

Type: Defect Priority: Minor
Reporter: Joel Martin Assignee: Unassigned
Resolution: Completed Votes: 0
Labels: bootstrap
Environment:

cljs-bootstrap


Attachments: Text File time-case-fix.patch    
Patch: Code

 Description   

The following are broken in bootstrapped clojurescript because they call unqualified versions of core/str within syntax quote:

(time (reduce #(+ %1 %2) 0 (range 1000000)))

(case :constant false "nope")


 Comments   
Comment by David Nolen [ 30/Jul/15 11:36 AM ]

fixed https://github.com/clojure/clojurescript/commit/cf0374cfe9e85ae77f26c062190241f09caa5544





[CLJS-1370] cljs.js: Path for goog off Created: 27/Jul/15  Updated: 30/Jul/15  Resolved: 30/Jul/15

Status: Closed
Project: ClojureScript
Component/s: None
Affects Version/s: None
Fix Version/s: None

Type: Defect Priority: Major
Reporter: Mike Fikes Assignee: Unassigned
Resolution: Declined Votes: 0
Labels: bootstrap


 Description   

I have a namespace that indirectly uses goog.

(ns foo.bar
  (:require clojure.string))

(def a 4)

When I use cljs.js to require this source, ultimately the path "goog/string" is passed to *load-fn*. The transcript here shows the argument sequence passed to *load-fn*.

cljs.user=> (require 'foo.bar)
{:name foo.bar, :macros nil, :path "foo/bar"}
{:name clojure.string, :macros nil, :path "clojure/string"}
{:name goog.string, :macros nil, :path "goog/string"}

My *load-fn* implementation successfully loads clojure/string.cljs which contains

(:require [goog.string :as gstring])

as one of its namespace specs, which triggers the last path "goog/string".

On disk, there is actually "goog/string/string.js" that could be loaded, but before trying any hacking surrounding that, figured I'd submit a ticket regarding this case.



 Comments   
Comment by David Nolen [ 30/Jul/15 3:24 PM ]

We're not going to address this one at all. REPLs will have to provide their own Google Closure Library index to make this work.





[CLJS-1369] eval-str should support compilation output caching Created: 27/Jul/15  Updated: 27/Jul/15  Resolved: 27/Jul/15

Status: Closed
Project: ClojureScript
Component/s: None
Affects Version/s: 0.0-3308
Fix Version/s: None

Type: Defect Priority: Major
Reporter: David Nolen Assignee: David Nolen
Resolution: Completed Votes: 0
Labels: bootstrap


 Description   

This is the only place for people to run side effects (like writing compilation output to disk).



 Comments   
Comment by David Nolen [ 27/Jul/15 9:12 AM ]

fixed https://github.com/clojure/clojurescript/commit/de8bc1c4cce44e9c6de07bbf79411463138939ee





[CLJS-1366] Warnings from bootstrap use of defrecord Created: 24/Jul/15  Updated: 24/Jul/15  Resolved: 24/Jul/15

Status: Closed
Project: ClojureScript
Component/s: None
Affects Version/s: 1.7.28
Fix Version/s: None

Type: Defect Priority: Minor
Reporter: Joel Martin Assignee: David Nolen
Resolution: Completed Votes: 0
Labels: bootstrap
Environment:

cljs-bootstrap


Attachments: Text File 1366.patch    

 Description   

Currently, use of defrecord with a value field generates non-fatal warnings because core/list is not fully qualified:

cljs.user> (defprotocol IFoo (foo [this]))
nil
cljs.user> (defrecord Baz [b] IFoo (foo [this] (prn "some baz:" b)))
WARNING: No such namespace: core, could not locate core.cljs, core.cljc, or Closure namespace ""
WARNING: Use of undeclared Var core/list
cljs.user/Baz


 Comments   
Comment by David Nolen [ 24/Jul/15 7:15 PM ]

fixed https://github.com/clojure/clojurescript/commit/0a15c1b829712939f29913cbbaf8f16fe144d8d9





[CLJS-1365] cljs.js: :context :expr propagates down into ns loading Created: 23/Jul/15  Updated: 27/Jul/15  Resolved: 27/Jul/15

Status: Closed
Project: ClojureScript
Component/s: None
Affects Version/s: None
Fix Version/s: None

Type: Defect Priority: Major
Reporter: Mike Fikes Assignee: Unassigned
Resolution: Completed Votes: 0
Labels: bootstrap
Environment:

Master, with downstream Planck



 Description   

Planck sets :context :expr to evaluate a form in the REPL (via this feature http://dev.clojure.org/jira/browse/CLJS-1357)

If it turns out that the expression being evaluated in the REPL is actually an ns form that causes another namespace to be :require d (and loaded via *load-fn*) then only the first form after the ns form in that namespace is loaded. This doesn't occur if I omit the :context :expr opt.



 Comments   
Comment by Mike Fikes [ 23/Jul/15 8:40 PM ]

I'll work on a repro for cljs-bootstrap.

Comment by David Nolen [ 27/Jul/15 7:54 AM ]

fixed https://github.com/clojure/clojurescript/commit/478eb80c3f1bd9aa896bf925b535f9a52bf7b8d4





[CLJS-1362] cljs.js: eval-str: Some core fns not aliased Created: 23/Jul/15  Updated: 25/Jul/15  Resolved: 25/Jul/15

Status: Closed
Project: ClojureScript
Component/s: None
Affects Version/s: None
Fix Version/s: None

Type: Defect Priority: Major
Reporter: Mike Fikes Assignee: David Nolen
Resolution: Completed Votes: 0
Labels: bootstrap
Environment:

Master clojurescript-version "0.0-3620", downstream Planck



 Description   

If I eval-str inc I'll get back the core fn, but not so with "map" unless I fully qualify it.

So (inc 1) works but not (map inc [1 2 3]) but, (cljs.core/map inc [1 2 3]) works just fine.

Will see if I can repo with cljs-bootstrap.



 Comments   
Comment by David Nolen [ 24/Jul/15 7:07 PM ]

I see this as well thanks for the report.

Comment by David Nolen [ 25/Jul/15 1:39 PM ]

So I believe this is happening only because the analysis cache for core has not yet been loaded.

Comment by David Nolen [ 25/Jul/15 1:56 PM ]

Closing this one. This only happens when cljs.core has not been analyzed. I do not currently see an easy to solve this problem for users as it either means analyzing cljs.core before doing anything (very slow) or I/O to load a cached analysis. I think this should be just covered by good documentation when we get there.

Comment by David Nolen [ 25/Jul/15 3:26 PM ]

needs fixing

Comment by David Nolen [ 25/Jul/15 3:26 PM ]

fixed https://github.com/clojure/clojurescript/commit/72e01962bfeae9c24b37d6c27a86fd12412e7f07

Comment by Mike Fikes [ 25/Jul/15 8:51 PM ]

Confirmed fixed in master (0.0-3632) with downstream Planck.

I did time ./planck -e '(map inc [1 2 3])' with the cljs.js and previous non-cljs.js versions of Planck and it is slower than I think we expected. Here is what I get:

$ time ./planck -e '(map inc [1 2 3])'
(2 3 4)

real	0m6.883s
user	0m5.168s
sys	0m2.038s

vs.

$ time ./planck -e '(map inc [1 2 3])'
(2 3 4)

real	0m0.956s
user	0m0.964s
sys	0m0.196s

To eliminate any potential noise introduced by the subsequent commits related to source map stuff, I checked out the commit with this fix and got similar numbers:

$ time ./planck -e '(map inc [1 2 3])'
(2 3 4)

real	0m6.884s
user	0m5.135s
sys	0m2.058s

And, to see what this commit alone does to the timings I went to the commit immediately prior and got

$ time ./planck -e '(map inc [1 2 3])'
undefined is not an object (evaluating 'cljs.user.map') 
 
real	0m6.125s
user	0m4.517s
sys	0m1.855s

Summary conclusion: This commit fixes the issue by only adding about 0.75 seconds to startup!

There is obviously something else I'll want to dig into in order to isolate where the 6-second numbers are coming from relative to the 1-second numbers (perhaps it's a Planck thing; I promise to get back with that info, but wanted to at least record what I measured here.)

Comment by Mike Fikes [ 25/Jul/15 9:36 PM ]

Isolated it: With cljs.js, something related to defn is very slow the first time called. Planck has a couple of those in it during startup. If I eliminate those, then very comparable numbers result:

$ time ./planck -e '(map inc [1 2 3])'
(2 3 4)

real	0m1.220s
user	0m1.118s
sys	0m0.252s

Whatever it is with defn perf is clearly not related to this ticket. Just wanted to comment so this ticket is not "left hanging", and whatever it is with defn perf can be pursued separately.





[CLJS-1356] cljs.js/*load-fn* should take the original library name Created: 20/Jul/15  Updated: 21/Jul/15  Resolved: 21/Jul/15

Status: Closed
Project: ClojureScript
Component/s: None
Affects Version/s: 0.0-3308
Fix Version/s: 1.7.28

Type: Task Priority: Major
Reporter: David Nolen Assignee: David Nolen
Resolution: Completed Votes: 0
Labels: bootstrap


 Description   

More information the better.



 Comments   
Comment by David Nolen [ 21/Jul/15 5:26 AM ]

fixed https://github.com/clojure/clojurescript/commit/8e484959fbb5e6f8184b9183e096aaddc271005d





[CLJS-1355] cljs.js/*eval-fn* should take cljs.js/*load-fn*'s return value, a map Created: 20/Jul/15  Updated: 21/Jul/15  Resolved: 21/Jul/15

Status: Closed
Project: ClojureScript
Component/s: None
Affects Version/s: 0.0-3308
Fix Version/s: 0.0-3308

Type: Task Priority: Major
Reporter: David Nolen Assignee: David Nolen
Resolution: Completed Votes: 0
Labels: bootstrap


 Description   

Rhino, Nashorn, JavaScriptCore, and Node.js all have good support for evaluating an arbitrary string as source and associating it with a file name. For this reason we should just pass the map with :source, :name, and :lang received from cljs.js/load-fn.



 Comments   
Comment by David Nolen [ 21/Jul/15 5:26 AM ]

fixed https://github.com/clojure/clojurescript/commit/8e484959fbb5e6f8184b9183e096aaddc271005d





[CLJS-1354] bootstrapped ClojureScript should support inline source maps Created: 20/Jul/15  Updated: 21/Jul/15  Resolved: 21/Jul/15

Status: Closed
Project: ClojureScript
Component/s: None
Affects Version/s: 0.0-3308
Fix Version/s: 1.7.28

Type: Task Priority: Major
Reporter: David Nolen Assignee: David Nolen
Resolution: Completed Votes: 0
Labels: bootstrap


 Comments   
Comment by David Nolen [ 21/Jul/15 5:29 PM ]

fixed https://github.com/clojure/clojurescript/commit/6235833cb398510bd62bfc33da1345dc6316259e





[CLJS-1338] NPE in confirm-var-exists if suffix is ".." Created: 12/Jul/15  Updated: 12/Jul/15  Resolved: 12/Jul/15

Status: Closed
Project: ClojureScript
Component/s: None
Affects Version/s: None
Fix Version/s: None

Type: Defect Priority: Major
Reporter: Mike Fikes Assignee: Unassigned
Resolution: Completed Votes: 0
Labels: bootstrap
Environment:

Master, :clj mode



 Description   

When compiling out/cljs/core.cljc for bootstrap purposes (with ClojureScript JVM), `cljs.analyzer/confirm-var-exists` ends up being called with prefix of "cljs.core$macros" and suffix of "..". This causes suffix-str to take on the value nil which is passed to `symbol`, causing an NPE.

This regression occurred with this commit: https://github.com/clojure/clojurescript/commit/8bb3b1ddc28bb773dcd3acd74f6e35c50015246b



 Comments   
Comment by David Nolen [ 12/Jul/15 3:07 PM ]

fixed https://github.com/clojure/clojurescript/commit/8600c7cb88414ec91faf5cb22e3c4ee3be649b0d





[CLJS-1337] Move parse ns side-effects into a separate compiler pass Created: 12/Jul/15  Updated: 15/Jul/15  Resolved: 15/Jul/15

Status: Closed
Project: ClojureScript
Component/s: None
Affects Version/s: 0.0-3308
Fix Version/s: 1.7.28

Type: Enhancement Priority: Major
Reporter: David Nolen Assignee: David Nolen
Resolution: Completed Votes: 0
Labels: bootstrap


 Description   

Originally suggested by Thomas Heller there's now an immediate need to pursue this - bootstrapping. Currently the ns side-effects assume I/O can happen synchronously. This assumption falls apart in many JS environments.



 Comments   
Comment by David Nolen [ 15/Jul/15 5:47 PM ]

fixed https://github.com/clojure/clojurescript/commit/ae39482364227076a86e786e2c2bca5996f6893d





[CLJS-1335] resolve-macro-var: information missing for macros Created: 12/Jul/15  Updated: 12/Jul/15

Status: Open
Project: ClojureScript
Component/s: None
Affects Version/s: None
Fix Version/s: None

Type: Defect Priority: Major
Reporter: Mike Fikes Assignee: Unassigned
Resolution: Unresolved Votes: 0
Labels: bootstrap
Environment:

https://github.com/swannodette/cljs-bootstrap



 Description   

In bootstrapped ClojureScript, if you resolve-var on a function, you get lots of information, but resolve-macro-var doesn't work for macros. (The only reason I have any expectation for this to work is that it appears to do so in ClojureScript JVM).

cljs-bootstrap.core=> (with-compiler-env cenv (ana/resolve-macro-var (ana/empty-env) 'or)))
nil

But:

cljs-bootstrap.core=> (with-compiler-env cenv (ana/resolve-var (ana/empty-env) 'map)))
{:protocol-inline nil, :meta {:file "cljs/core.cljs", :end-column 10, :top-fn {:variadic true, :method-params ([f] [f coll] [f c1 c2] [f c1 c2 c3]), :arglists-meta (nil nil nil nil nil), :max-fixed-arity 4, :arglists ([f] [f coll] [f c1 c2] [f c1 c2 c3] [f c1 c2 c3 & colls])}, :column 7, :line 4128, :end-line 4128, :arglists (quote ([f] [f coll] [f c1 c2] [f c1 c2 c3] [f c1 c2 c3 & colls])), :doc "Returns a lazy sequence consisting of the result of applying f to\n  the set of first items of each coll, followed by applying f to the\n  set of second items in each coll, until any one of the colls is\n  exhausted.  Any remaining items in other colls are ignored. Function\n  f should accept number-of-colls arguments. Returns a transducer when\n  no collection is provided."}, :ns cljs.core, :name cljs.core/map, :variadic true, :file "cljs/core.cljs", :end-column 10, :top-fn {:variadic true, :method-params ([f] [f coll] [f c1 c2] [f c1 c2 c3]), :arglists-meta (nil nil nil nil nil), :max-fixed-arity 4, :arglists ([f] [f coll] [f c1 c2] [f c1 c2 c3] [f c1 c2 c3 & colls])}, :method-params ([f] [f coll] [f c1 c2] [f c1 c2 c3]), :protocol-impl nil, :arglists-meta (nil nil nil nil nil), :column 1, :line 4128, :end-line 4128, :max-fixed-arity 4, :fn-var true, :arglists ([f] [f coll] [f c1 c2] [f c1 c2 c3] [f c1 c2 c3 & colls]), :doc "Returns a lazy sequence consisting of the result of applying f to\n  the set of first items of each coll, followed by applying f to the\n  set of second items in each coll, until any one of the colls is\n  exhausted.  Any remaining items in other colls are ignored. Function\n  f should accept number-of-colls arguments. Returns a transducer when\n  no collection is provided."}

As an aside:

cljs-bootstrap.core=> (with-compiler-env cenv (ana/resolve-var (ana/empty-env) 'or)))
{:name cljs.core/or, :ns cljs.core}





[CLJS-1334] Bootstrap 2-binding for can't recur here Created: 11/Jul/15  Updated: 15/Jul/15  Resolved: 15/Jul/15

Status: Closed
Project: ClojureScript
Component/s: None
Affects Version/s: None
Fix Version/s: None

Type: Defect Priority: Major
Reporter: Mike Fikes Assignee: Unassigned
Resolution: Completed Votes: 0
Labels: bootstrap

Attachments: Text File cljs-1334-for-macro-v2.patch    

 Description   

A form like {{(for [x [1] y [2]] y)}} causes a Can't recur here error diagnostic.

With https://github.com/swannodette/cljs-bootstrap

cljs-bootstrap.core=> *clojurescript-version*
"0.0-3464"
cljs-bootstrap.core=> (for [x [1] y [2]] y)
(2)
cljs-bootstrap.core=> (with-out-str
      (c/emit
        (ensure
          (ana/analyze
            (assoc (ana/empty-env) :context :expr)
             '(for [x [1] y [2]] y))))))
Error: Can't recur here
    at new cljs$core$ExceptionInfo (/Users/mfikes/Projects/cljs-bootstrap/.cljs_node_repl/cljs/core.cljs:9688:9)
    at Function.cljs.core.ex_info.cljs$core$IFn$_invoke$arity$3 (/Users/mfikes/Projects/cljs-bootstrap/.cljs_node_repl/cljs/core.cljs:9720:14)
    at Function.cljs.analyzer.error.cljs$core$IFn$_invoke$arity$3 (/Users/mfikes/Projects/cljs-bootstrap/.cljs_node_repl/cljs/analyzer.cljc:514:5)
    at Function.cljs.analyzer.error.cljs$core$IFn$_invoke$arity$2 (/Users/mfikes/Projects/cljs-bootstrap/.cljs_node_repl/cljs/analyzer.cljc:512:13)
    at /Users/mfikes/Projects/cljs-bootstrap/.cljs_node_repl/cljs/analyzer.cljc:1364:15
    at [object Object].cljs.core.MultiFn.cljs$core$IFn$_invoke$arity$5 (/Users/mfikes/Projects/cljs-bootstrap/.cljs_node_repl/cljs/core.cljs:9445:8)
    at Object.cljs$analyzer$analyze_seq_STAR_ [as analyze_seq_STAR_] (/Users/mfikes/Projects/cljs-bootstrap/.cljs_node_repl/cljs/analyzer.cljc:2174:6)
    at Object.cljs$analyzer$analyze_seq_STAR__wrap [as analyze_seq_STAR__wrap] (/Users/mfikes/Projects/cljs-bootstrap/.cljs_node_repl/cljs/analyzer.cljc:2179:6)
    at Function.cljs.analyzer.analyze_seq.cljs$core$IFn$_invoke$arity$4 (/Users/mfikes/Projects/cljs-bootstrap/.cljs_node_repl/cljs/analyzer.cljc:2196:15)
    at Object.cljs$analyzer$analyze_form [as analyze_form] (/Users/mfikes/Projects/cljs-bootstrap/.cljs_node_repl/cljs/analyzer.cljc:2294:43)


 Comments   
Comment by Andy Sheldon [ 12/Jul/15 8:43 PM ]

The cljs-1334-for-macro.patch did not fix the issue, so I deleted it. Maybe a problem with recur-frames is more likely.

Comment by Mike Fikes [ 12/Jul/15 9:25 PM ]

I tested with Andy's cljs-1334-for-macro.patch and the issue went away.

I got a different slew of errors that perhaps warrant separate tickets:

cljs-bootstrap.core=> (with-out-str
      (c/emit
        (ensure
          (ana/analyze
            (assoc (ana/empty-env) :context :expr)
             '(for [x [1] y [2]] y))))))

repl:42
throw e__4257__auto__;
      ^
Error: Cannot read property 'cljs$core$IFn$_invoke$arity$2' of undefined
    at new cljs$core$ExceptionInfo (/Users/mfikes/Projects/cljs-bootstrap/.cljs_node_repl/cljs/core.cljs:9688:9)
    at Function.cljs.core.ex_info.cljs$core$IFn$_invoke$arity$3 (/Users/mfikes/Projects/cljs-bootstrap/.cljs_node_repl/cljs/core.cljs:9720:14)
    at Function.cljs.analyzer.error.cljs$core$IFn$_invoke$arity$3 (/Users/mfikes/Projects/cljs-bootstrap/.cljs_node_repl/cljs/analyzer.cljc:514:5)
    at Object.cljs$analyzer$macroexpand_1 [as macroexpand_1] (/Users/mfikes/Projects/cljs-bootstrap/.cljs_node_repl/cljs/analyzer.cljc:2355:52)
    at Function.cljs.analyzer.analyze_seq.cljs$core$IFn$_invoke$arity$4 (/Users/mfikes/Projects/cljs-bootstrap/.cljs_node_repl/cljs/analyzer.cljc:2381:23)
    at Object.cljs$analyzer$analyze_form [as analyze_form] (/Users/mfikes/Projects/cljs-bootstrap/.cljs_node_repl/cljs/analyzer.cljc:2481:43)
    at Object.cljs$analyzer$analyze_STAR_ [as analyze_STAR_] (/Users/mfikes/Projects/cljs-bootstrap/.cljs_node_repl/cljs/analyzer.cljc:2504:17)
    at Function.cljs.analyzer.analyze.cljs$core$IFn$_invoke$arity$4 (/Users/mfikes/Projects/cljs-bootstrap/.cljs_node_repl/cljs/analyzer.cljc:2520:11)
    at Function.cljs.analyzer.analyze.cljs$core$IFn$_invoke$arity$3 (/Users/mfikes/Projects/cljs-bootstrap/.cljs_node_repl/cljs/analyzer.cljc:2515:21)
    at Function.cljs.analyzer.analyze.cljs$core$IFn$_invoke$arity$2 (/Users/mfikes/Projects/cljs-bootstrap/.cljs_node_repl/cljs/analyzer.cljc:2514:16)
Comment by David Nolen [ 13/Jul/15 5:50 AM ]

The ticket and patch needs more information. Currently there's no rationale at all for the change.

Comment by Andy Sheldon [ 15/Jul/15 7:00 AM ]

If you look at a macro expansion in the bootstrap node repl, for the multi-binding for in the bootstrap, you see a

clojure.core/when-first
reference, instead of
cljs.core/when-first
.

Copying the core.cljc as-is and running a modified '(for) test generates the error:

cljs-bootstrap.core=>   (js/eval
    (with-out-str
      (ensure
        (c/emit
          (no-warn
            (ana/analyze
              (assoc (ana/empty-env) :context :expr)
              `(for [x# [1 2 3] y# [2 3 4]] 1)))))))

repl:48
throw e__4275__auto__;
      ^
Error: Can't recur here

Modifying the copied resources/cljs/core.cljc file, changing

defmacro for
to generate
(when-first [~bind ~gxs])
instead of
(core/when-first [~bind ~gxs])
, I can get a result:

cljs-bootstrap.core=>   (js/eval
    (with-out-str
      (ensure
        (c/emit
          (no-warn
            (ana/analyze
              (assoc (ana/empty-env) :context :expr)
              `(for [x# [1 2 3] y# [2 3 4]] x#)))))))
(1 1 1 2 2 2 3 3 3)
Comment by Andy Sheldon [ 15/Jul/15 7:02 AM ]

Attaching patch for core.cljc defmacro for

Comment by Mike Fikes [ 15/Jul/15 7:17 AM ]

I can confirm that cljs-1334-for-macro-v2.patch works for me downstream for ClojureScript JS (via Replete) and ClojureScript JVM (via Ambly) for the form (for [x [1] y [2]] y).

I can also confirm that the ClojureScript unit tests pass for me for V8, SpiderMonkey and JavaScriptCore (I don't have Nashorn configured).

Comment by David Nolen [ 15/Jul/15 11:29 AM ]

fixed https://github.com/clojure/clojurescript/commit/da2e53800fb3aa4a7bf937843035e8ff1dfbbaf5





[CLJS-1331] Regex literal emits invalid JS Created: 08/Jul/15  Updated: 13/Jul/15  Resolved: 13/Jul/15

Status: Closed
Project: ClojureScript
Component/s: None
Affects Version/s: None
Fix Version/s: None

Type: Defect Priority: Major
Reporter: Mike Fikes Assignee: Mike Fikes
Resolution: Completed Votes: 0
Labels: bootstrap
Environment:

https://github.com/swannodette/cljs-bootstrap


Attachments: Text File CLJS-1331.patch    

 Description   
(with-out-str
  (c/emit
    (ensure
      (ana/analyze
        (assoc (ana/empty-env) :context :expr)
        '#"foo"))))) 
"/\\\\/foo\\\\//"

Non-bootstrap, for this case, using :repo-verbose emits \foo.

If you take this JS and eval it in Node you'll get

> /\\\\/foo\\\\//
SyntaxError: Unexpected token ILLEGAL
    at Object.exports.createScript (vm.js:44:10)
    at REPLServer.defaultEval (repl.js:117:23)
    at bound (domain.js:254:14)
    at REPLServer.runBound [as eval] (domain.js:267:12)
    at REPLServer.<anonymous> (repl.js:279:12)
    at REPLServer.emit (events.js:107:17)
    at REPLServer.Interface._onLine (readline.js:214:10)
    at REPLServer.Interface._line (readline.js:553:8)
    at REPLServer.Interface._ttyWrite (readline.js:830:14)
    at ReadStream.onkeypress (readline.js:109:10)

and in JSC

>>> /\\\\/foo\\\\//
Invalid escape in identifier: '\':1


 Comments   
Comment by Mike Fikes [ 12/Jul/15 7:03 PM ]

The attached patch passes manually-run regex tests taken from the test suite plus some additional tests I found online for JavaScript regexs (in particular, those involving the backslash character).

Comment by David Nolen [ 13/Jul/15 5:58 AM ]

fixed https://github.com/clojure/clojurescript/commit/6920b62be188809fcab97a593415cf0a72a39baa





[CLJS-1330] .toString on int needs parens and has dollar-sign Created: 08/Jul/15  Updated: 08/Jul/15

Status: Open
Project: ClojureScript
Component/s: None
Affects Version/s: None
Fix Version/s: None

Type: Defect Priority: Major
Reporter: Mike Fikes Assignee: Unassigned
Resolution: Unresolved Votes: 0
Labels: bootstrap
Environment:

https://github.com/swannodette/cljs-bootstrap



 Description   
cljs-bootstrap.core=> (with-out-str
      (c/emit
        (ensure
          (ana/analyze
            (assoc (ana/empty-env) :context :expr)
            '(.toString 1)))))) 
"1.toString$()"





[CLJS-1329] Support for reading #js tagged literals in bootstrap Created: 07/Jul/15  Updated: 08/Jul/15  Resolved: 08/Jul/15

Status: Closed
Project: ClojureScript
Component/s: None
Affects Version/s: None
Fix Version/s: None

Type: Defect Priority: Major
Reporter: Mike Fikes Assignee: Unassigned
Resolution: Completed Votes: 0
Labels: bootstrap

Attachments: Text File CLJS-1329-v1.patch    

 Description   

If you attempt to analyze a form like {{# [1 2]}} then cljs.analyzer/analyze-form, when in :cljs mode, lacks a cond case for JSValue, and it will drop through to the default, treating the form as a constant.

I haven't yet sorted out how to reproduce this with https://github.com/swannodette/cljs-bootstrap. My attempt so far is when I get to

cljs-bootstrap.core=> (r/read-string "#js [1 2]")    
Error: No reader function for tag js
...

Joel Martin's bootstrap Node and Replete, you will see the compiler attempting to handle the :constant AST:

cljs-bootstrap.repl> #js [1 2]
Error: No method in multimethod 'cljs.compiler/emit-constant' for dispatch value: function (val) {
  this.val = val;
}


 Comments   
Comment by Mike Fikes [ 07/Jul/15 10:43 PM ]

The attached CLJS-1329-v1.patch appears to address the issue, but with two notes:

It uses :require instead of :import to get the JSValue tagged literal symbol for :cljs (not sure if this is the right approach).

It appears to emit the correct JS, and works in Replete, but for the map form, say if you issue

#js {:a 1}

then this JavaScript is emitted:

{"a": 1}

and then something will then indicate

Unexpected token ':'. Parse error.

Also, for both the map and vector forms, the individual values don't end up being surrounded with parenthesis like they do on ClojureScript JVM.

So, at best, this patch is a first stab, perhaps suitable for inspiration or refinement.

Comment by David Nolen [ 08/Jul/15 11:55 AM ]

fixed https://github.com/clojure/clojurescript/commit/2924c4880c05208beb0f321e8e4e63b4cb1c45f3





[CLJS-1326] In bootstrapped cljs, read-number of "0" gives "invalid number format" Created: 03/Jul/15  Updated: 12/Jul/15  Resolved: 03/Jul/15

Status: Closed
Project: ClojureScript
Component/s: None
Affects Version/s: 1.7.28
Fix Version/s: None

Type: Defect Priority: Minor
Reporter: Joel Martin Assignee: Unassigned
Resolution: Declined Votes: 0
Labels: bootstrap
Environment:

cljs-bootstrap REPL (https://github.com/kanaka/cljs-bootstrap)



 Description   

tools.reader/read-number (https://github.com/swannodette/tools.reader) of "0" throws an error. The same for "1" works fine.

cljs-bootstrap.repl> 0
Error: Invalid number format [0]
    at new cljs$core$ExceptionInfo (/home/joelm/scratch/cljs-bootstrap/.cljs_bootstrap/cljs/core.js:33157:10)
    at Function.cljs.core.ex_info.cljs$core$IFn$_invoke$arity$3 (/home/joelm/scratch/cljs-bootstrap/.cljs_bootstrap/cljs/core.js:33219:9)
    at Function.cljs.core.ex_info.cljs$core$IFn$_invoke$arity$2 (/home/joelm/scratch/cljs-bootstrap/.cljs_bootstrap/cljs/core.js:33215:26)
    at cljs$core$ex_info (/home/joelm/scratch/cljs-bootstrap/.cljs_bootstrap/cljs/core.js:33201:26)
    at Function.cljs.tools.reader.reader_types.reader_error.cljs$core$IFn$_invoke$arity$variadic (/home/joelm/scratch/cljs-bootstrap/.cljs_bootstrap/cljs/tools/reader/reader_types.js:802:25)
    at cljs$tools$reader$reader_types$reader_error (/home/joelm/scratch/cljs-bootstrap/.cljs_bootstrap/cljs/tools/reader/reader_types.js:798:52)
    at cljs$tools$reader$read_number (/home/joelm/scratch/cljs-bootstrap/.cljs_bootstrap/cljs/tools/reader.js:446:52)
    at /home/joelm/scratch/cljs-bootstrap/.cljs_bootstrap/cljs/tools/reader.js:1550:38
    at cljs$tools$reader$reader_types$log_source (/home/joelm/scratch/cljs-bootstrap/.cljs_bootstrap/cljs/tools/reader/reader_types.js:873:16)
    at cljs$tools$reader$target (/home/joelm/scratch/cljs-bootstrap/.cljs_bootstrap/cljs/tools/reader.js:1528:50)

This is because reader/read-number has:

(or (match-number s) (reader-error rdr "Invalid number format [" s "]")))

which compiled to this JS:

var or__4073__auto__ = cljs.tools.reader.impl.commons.match_number.call(null,s);
if(or__4073__auto__){
return or__4073__auto__;
} else {
return cljs.tools.reader.reader_types.reader_error.call(null,rdr,"Invalid number format [",s,"]");
}

Since match_number returns a JS number, or_4073auto_ is 0, therefore falsey.



 Comments   
Comment by Joel Martin [ 03/Jul/15 9:31 AM ]

FYI, to reproduce, run this in https://github.com/kanaka/cljs-bootstrap

lein run -m clojure.main script/build.clj
node repl.js
cljs-bootstrap.repl> 0
Error: Invalid number format [0]
...
Comment by David Nolen [ 03/Jul/15 2:55 PM ]

This ticket doesn't have nearly enough information. I checked the output of tools.reader and I don't see this generated code at all. The test is wrapped in the required call to truth_.

Comment by Mike Fikes [ 12/Jul/15 7:10 AM ]

FWIW, if this helps anyone else who might encounter this:

In Replete, this was occurring and was address by revising its build to compile macros after the main Replete namespace. The root cause was not determined, but this was tried based on a theory that *unchecked-if* was being set! but somehow left true.

Reference Replete commit: https://github.com/mfikes/replete/commit/e21c59b5f595fb8a10c25cae98a67dee7d0db013





[CLJS-1325] defrecord broken in bootstrapped cljs (error during set!) Created: 03/Jul/15  Updated: 14/Jul/15  Resolved: 14/Jul/15

Status: Closed
Project: ClojureScript
Component/s: None
Affects Version/s: 1.7.28
Fix Version/s: None

Type: Defect Priority: Minor
Reporter: Joel Martin Assignee: Unassigned
Resolution: Completed Votes: 0
Labels: bootstrap
Environment:

cljs-bootstrap node.js RELP (https://github.com/kanaka/cljs-bootstrap)


Attachments: Text File CLJS-1325.patch    

 Description   

This is a follow-on to http://dev.clojure.org/jira/browse/CLJS-1321 for getting defrecord to work in the bootstrap node REPL.

cljs-bootstrap.repl> (defprotocol IFoo (foo [this]))
nil
cljs-bootstrap.repl> (defrecord Baz [b] IFoo (foo [this] (prn "some baz:" b)))
Error: Can't set! local var or non-mutable field
    at new cljs$core$ExceptionInfo (/home/joelm/scratch/cljs-bootstrap/.cljs_bootstrap/cljs/core.js:33157:10)
    at Function.cljs.core.ex_info.cljs$core$IFn$_invoke$arity$3 (/home/joelm/scratch/cljs-bootstrap/.cljs_bootstrap/cljs/core.js:33219:9)
    at cljs$core$ex_info (/home/joelm/scratch/cljs-bootstrap/.cljs_bootstrap/cljs/core.js:33205:26)
    at Function.cljs.analyzer.error.cljs$core$IFn$_invoke$arity$3 (/home/joelm/scratch/cljs-bootstrap/.cljs_bootstrap/cljs/analyzer.js:699:26)
    at cljs$analyzer$error (/home/joelm/scratch/cljs-bootstrap/.cljs_bootstrap/cljs/analyzer.js:685:28)
    at Function.cljs.analyzer.error.cljs$core$IFn$_invoke$arity$2 (/home/joelm/scratch/cljs-bootstrap/.cljs_bootstrap/cljs/analyzer.js:695:28)
    at cljs$analyzer$error (/home/joelm/scratch/cljs-bootstrap/.cljs_bootstrap/cljs/analyzer.js:681:28)
    at /home/joelm/scratch/cljs-bootstrap/.cljs_bootstrap/cljs/analyzer.js:2311:27
    at /home/joelm/scratch/cljs-bootstrap/.cljs_bootstrap/cljs/analyzer.js:2315:3
    at cljs.core.MultiFn.call.G__11387__6 (/home/joelm/scratch/cljs-bootstrap/.cljs_bootstrap/cljs/core.js:31419:149)

The same as above but with debug added to the analyzer set! method to print the form:

cljs-bootstrap.repl> (defprotocol IFoo (foo [this]))
DEBUG set! p__9852: (set! *unchecked-if* true)
DEBUG set! p__9852: (set! *unchecked-if* false)
nil
cljs-bootstrap.repl> (defrecord Baz [b] IFoo (foo [this] (prn "some baz:" b)))
DEBUG set! p__9852: (set! (.. Baz -prototype -cljs$core$ILookup$-lookup$arity$2) (cljs.core$macros/fn ([this__7850__auto__ k__7851__auto__] (cljs.core$macros/this-as this__7850__auto__ (cljs.core/-lookup this__7850__auto__ k__7851__auto__ nil)))))
DEBUG set! p__9852: (set! (.. Baz -prototype -cljs$core$ICollection$-conj$arity$2) (cljs.core$macros/fn ([this__7855__auto__ entry__7856__auto__] (cljs.core$macros/this-as this__7855__auto__ (if (cljs.core/vector? entry__7856__auto__) (cljs.core/-assoc this__7855__auto__ (cljs.core/-nth entry__7856__auto__ 0) (cljs.core/-nth entry__7856__auto__ 1)) (cljs.core/reduce cljs.core/-conj this__7855__auto__ entry__7856__auto__))))))
DEBUG set! p__9852: (set! (.. Baz -prototype -cljs$core$ILookup$-lookup$arity$3) (cljs.core$macros/fn ([this__7852__auto__ k25 else__7853__auto__] (cljs.core$macros/this-as this__7852__auto__ (cljs.core$macros/case k25 :b b (cljs.core/get __extmap k25 else__7853__auto__))))))
DEBUG set! p__9852: (set! (.. Baz -prototype -cljs$core$IPrintWithWriter$-pr-writer$arity$3) (cljs.core$macros/fn ([this__7864__auto__ writer__7865__auto__ opts__7866__auto__] (cljs.core$macros/this-as this__7864__auto__ (cljs.core$macros/let [pr-pair__7867__auto__ (cljs.core$macros/fn [keyval__7868__auto__] (cljs.core/pr-sequential-writer writer__7865__auto__ cljs.core/pr-writer "" " " "" opts__7866__auto__ keyval__7868__auto__))] (cljs.core/pr-sequential-writer writer__7865__auto__ pr-pair__7867__auto__ "#cljs-bootstrap.repl.Baz{" ", " "}" opts__7866__auto__ (cljs.core/concat [(cljs.core/vector :b b)] __extmap)))))))
DEBUG set! p__9852: (set! (.. Baz -prototype -cljs$core$IMeta$-meta$arity$1) (cljs.core$macros/fn ([this__7848__auto__] (cljs.core$macros/this-as this__7848__auto__ __meta))))
DEBUG set! p__9852: (set! (.. Baz -prototype -cljs$core$ICloneable$-clone$arity$1) (cljs.core$macros/fn ([this__7844__auto__] (cljs.core$macros/this-as this__7844__auto__ (new Baz b __meta __extmap __hash)))))
DEBUG set! p__9852: (set! (.. Baz -prototype -cljs$core$ICounted$-count$arity$1) (cljs.core$macros/fn ([this__7854__auto__] (cljs.core$macros/this-as this__7854__auto__ (cljs.core$macros/+ 1 (cljs.core/count __extmap))))))
DEBUG set! p__9852: (set! (.. Baz -prototype -cljs$core$IHash$-hash$arity$1) (cljs.core$macros/fn ([this__7845__auto__] (cljs.core$macros/this-as this__7845__auto__ (cljs.core$macros/caching-hash this__7845__auto__ hash-imap __hash)))))
DEBUG set! p__9852: (set! __hash h__7674__auto__)
Error: Can't set! local var or non-mutable field
    at new cljs$core$ExceptionInfo (/home/joelm/scratch/cljs-bootstrap/.cljs_bootstrap/cljs/core.js:33157:10)
    at Function.cljs.core.ex_info.cljs$core$IFn$_invoke$arity$3 (/home/joelm/scratch/cljs-bootstrap/.cljs_bootstrap/cljs/core.js:33219:9)
    at cljs$core$ex_info (/home/joelm/scratch/cljs-bootstrap/.cljs_bootstrap/cljs/core.js:33205:26)
    at Function.cljs.analyzer.error.cljs$core$IFn$_invoke$arity$3 (/home/joelm/scratch/cljs-bootstrap/.cljs_bootstrap/cljs/analyzer.js:699:26)
    at cljs$analyzer$error (/home/joelm/scratch/cljs-bootstrap/.cljs_bootstrap/cljs/analyzer.js:685:28)
    at Function.cljs.analyzer.error.cljs$core$IFn$_invoke$arity$2 (/home/joelm/scratch/cljs-bootstrap/.cljs_bootstrap/cljs/analyzer.js:695:28)
    at cljs$analyzer$error (/home/joelm/scratch/cljs-bootstrap/.cljs_bootstrap/cljs/analyzer.js:681:28)
    at /home/joelm/scratch/cljs-bootstrap/.cljs_bootstrap/cljs/analyzer.js:2312:27
    at /home/joelm/scratch/cljs-bootstrap/.cljs_bootstrap/cljs/analyzer.js:2316:3
    at cljs.core.MultiFn.call.G__11387__6 (/home/joelm/scratch/cljs-bootstrap/.cljs_bootstrap/cljs/core.js:31419:149)


 Comments   
Comment by Joel Martin [ 03/Jul/15 9:31 AM ]

FYI, to reproduce, run this in https://github.com/kanaka/cljs-bootstrap

lein run -m clojure.main script/build.clj
node repl.js
cljs-bootstrap.repl> (defprotocol IFoo (foo [this]))
cljs-bootstrap.repl> (defrecord Baz [b] IFoo (foo [this] (prn "some baz:" b)))
Error: Can't set! local var or non-mutable field
...
Comment by Mike Fikes [ 08/Jul/15 1:23 PM ]

To reproduce with https://github.com/swannodette/cljs-bootstrap

cljs-bootstrap.core=> (with-out-str
      (c/emit
        (ensure
          (ana/analyze
            (assoc (ana/empty-env) :context :expr)
             '(defrecord R []))))))

repl:42
throw e__4277__auto__;
      ^
Error: Can't set! local var or non-mutable field
    at new cljs$core$ExceptionInfo (/Users/mfikes/Projects/cljs-bootstrap/.cljs_node_repl/cljs/core.js:32007:10)
    at Function.cljs.core.ex_info.cljs$core$IFn$_invoke$arity$3 (/Users/mfikes/Projects/cljs-bootstrap/.cljs_node_repl/cljs/core.js:32084:9)
    at Function.cljs.analyzer.error.cljs$core$IFn$_invoke$arity$3 (/Users/mfikes/Projects/cljs-bootstrap/.cljs_node_repl/cljs/analyzer.js:715:26)
    at Function.cljs.analyzer.error.cljs$core$IFn$_invoke$arity$2 (/Users/mfikes/Projects/cljs-bootstrap/.cljs_node_repl/cljs/analyzer.js:711:28)
    at /Users/mfikes/Projects/cljs-bootstrap/.cljs_node_repl/cljs/analyzer.js:2411:27
    at /Users/mfikes/Projects/cljs-bootstrap/.cljs_node_repl/cljs/analyzer.js:2415:3
    at cljs.core.MultiFn.cljs$core$IFn$_invoke$arity$5 (/Users/mfikes/Projects/cljs-bootstrap/.cljs_node_repl/cljs/core.js:31494:114)
    at Object.cljs$analyzer$analyze_seq_STAR_ [as analyze_seq_STAR_] (/Users/mfikes/Projects/cljs-bootstrap/.cljs_node_repl/cljs/analyzer.js:3882:81)
    at Function.cljs.analyzer.analyze_seq.cljs$core$IFn$_invoke$arity$4 (/Users/mfikes/Projects/cljs-bootstrap/.cljs_node_repl/cljs/analyzer.js:3925:26)
    at Object.cljs$analyzer$analyze_form [as analyze_form] (/Users/mfikes/Projects/cljs-bootstrap/.cljs_node_repl/cljs/analyzer.js:4069:34)
Comment by David Nolen [ 09/Jul/15 12:16 PM ]

The thing to investigate here is why the compiler thinks it's setting a local. If you're using cljs-bootstrap make sure to run lein npm install to get source map support. It makes it pretty easy to figure out what's going wrong in the analyzer. It's what I've been using to pinpoint bugs.

Comment by Mike Fikes [ 09/Jul/15 5:34 PM ]

Results of partial investigation: If you macroexpand-1 the (defrecord R []) form, and then take those results and attempt to evaluate them, you will get the error regarding set!. Then eliminating sub-forms from that expansion, you can reduce it down to

(defrecord* R [] nil (extend-type R IHash (-hash [this] (caching-hash this hash-imap __hash))))

So, there is a set! in the expansion of caching-hash, which would mutate the __hash field

https://github.com/clojure/clojurescript/blob/6b590f2fdf898e94a65153f8059ebdf0e3ec0952/src/main/clojure/cljs/core.cljc#L1592

which is set to be ^:mutable

https://github.com/clojure/clojurescript/blob/6b590f2fdf898e94a65153f8059ebdf0e3ec0952/src/main/clojure/cljs/core.cljc#L1583

A theory would be that either the meta is not conveyed properly, or, perhaps this is simply going down the wrong path, with perhaps a limitation of macroexpand-1 not being capable of processing meta, in which case the above analysis is wrong.

Comment by David Nolen [ 10/Jul/15 9:01 AM ]

The places to look now are much narrower. Something is wrong with parse-type or parse 'set! cases in cljs.analyzer. I would add some printlns using :cljs reader conditionals to make it more readily apparent what is going on. Another option would be to use the browser based setup in cljs-bootstrap and set some breakpoints.

Comment by Mike Fikes [ 11/Jul/15 6:19 PM ]

If you examine the local in parse 'set!, you will see

{:name __hash, :field true, :column nil, :unsynchronized-mutable nil, :line nil, :tag nil, :mutable nil, :volatile-mutable nil, :shadow nil}

Experimenting with the (released) Node.js REPL, shows that ^:mutable doesn't work as intended in ClojureScript within a quoted vector:

cljs.user=> (map meta '[x y ^:mutable z])
(nil nil nil)

But, this can be worked around:

cljs.user=> (map meta ['x 'y (with-meta 'z {:mutable true})])
(nil nil {:mutable true})

Both of the above work in Clojure, while only the second evidently works in ClojureScript.

So this patch fixes the problem by employing this technique. (Perhaps there is a deeper ClojureScript bug; if so, it is not a regression since 0.0-3308.)

With this, defrecord doesn't quite work fully. (Separate tickets can be opened for it.) But, the mutability of the __hash field is properly established.

Comment by Mike Fikes [ 11/Jul/15 6:43 PM ]

The attached patch is arguably working around something that should work (even in 0.0-3308), and perhaps it was only just now discovered via the bootstrap effort.

Is it a defect in cljs.tools.reader? This was done with the version being used within https://github.com/swannodette/cljs-bootstrap

cljs-bootstrap.core=> (meta (last (last (cljs.tools.reader/read-string "'[x y ^:mutable z]"))))
{:mutable true}
Comment by Mike Fikes [ 11/Jul/15 7:43 PM ]

See CLJS-1333. Perhaps this is a defect in ClojureScript.

Comment by David Nolen [ 14/Jul/15 10:43 AM ]

fixed https://github.com/clojure/clojurescript/commit/be0a8a801234e779640fdeaf255b329159df9040





[CLJS-1321] defrecord broken in bootstrapped cljs Created: 01/Jul/15  Updated: 02/Jul/15  Resolved: 02/Jul/15

Status: Closed
Project: ClojureScript
Component/s: None
Affects Version/s: 1.7.28
Fix Version/s: None

Type: Defect Priority: Minor
Reporter: Joel Martin Assignee: David Nolen
Resolution: Completed Votes: 0
Labels: bootstrap
Environment:

cljs-bootstrap REPL (https://github.com/swannodette/cljs-bootstrap)



 Description   

First problem that I run into is that emit-defrecord makes use of .getNamespace and .getName on rname. That should probably be (namespace rname) and (name rname). After that change is made the next error is "Can't set! local var or non-mutable field" somewhere in defrecord. Not sure what the cause of that one is.



 Comments   
Comment by David Nolen [ 02/Jul/15 6:03 PM ]

fixed https://github.com/clojure/clojurescript/commit/8a5023b849cfc509931b3ff509a9f7ee48dd03ec

Comment by David Nolen [ 02/Jul/15 6:04 PM ]

I did not look into the set! issue. Separate ticket should be opened for that if it persists.

Comment by Mike Fikes [ 02/Jul/15 6:46 PM ]

Confirmed fixed downstream (https://github.com/mfikes/replete/issues/25), apart from other Can't set! local var or non-mutable field error, which needs a separate ticket.





[CLJS-1247] Split out error printing from regular printing Created: 04/May/15  Updated: 15/Jul/15  Resolved: 15/Jul/15

Status: Resolved
Project: ClojureScript
Component/s: None
Affects Version/s: 0.0-3269
Fix Version/s: 1.7.28

Type: Defect Priority: Major
Reporter: David Nolen Assignee: David Nolen
Resolution: Completed Votes: 0
Labels: bootstrap


 Comments   
Comment by David Nolen [ 06/May/15 9:02 AM ]

See CLJS-710

Comment by David Nolen [ 15/Jul/15 4:19 PM ]

fixed https://github.com/clojure/clojurescript/commit/074445f5c8eccd5a4ff6d075b9d4b3d96bc367ee





[CLJS-859] Downloads for bootstrap script should happen over HTTPS. Created: 17/Sep/14  Updated: 17/Sep/14  Resolved: 17/Sep/14

Status: Closed
Project: ClojureScript
Component/s: None
Affects Version/s: None
Fix Version/s: None

Type: Enhancement Priority: Major
Reporter: David Kinzer Assignee: Unassigned
Resolution: Completed Votes: 0
Labels: bootstrap, https

Attachments: Text File bootstrap-over-https.patch    
Patch: Code

 Description   

Currently all downloads for the clojurescript bootstrap process are happening over HTTP. If this is switched to HTTPS it adds a layer of security at no real cost.



 Comments   
Comment by David Nolen [ 17/Sep/14 12:20 PM ]

fixed https://github.com/clojure/clojurescript/commit/e09bfeebf488272b1ecb136d5971010f09e904a1





[CLJS-161] Update bootstrap to current version of Google's Closure Library Created: 14/Mar/12  Updated: 27/Jul/13  Resolved: 08/May/12

Status: Closed
Project: ClojureScript
Component/s: None
Affects Version/s: None
Fix Version/s: None

Type: Task Priority: Major
Reporter: Gianni Chiappetta Assignee: Hubert Iwaniuk
Resolution: Completed Votes: 0
Labels: bootstrap, closure
Environment:

N/A


Attachments: Text File CLJS-161-CLJS-35-with-static-serving.patch    

 Description   

The current bundled version of Google's Closure Library is out of date and missing a lot of useful additions. The bootstrap currently requests version r790, however r1376 has been available for several months now.

The latest version can be found here: http://closure-library.googlecode.com/files/closure-library-20111110-r1376.zip



 Comments   
Comment by David Nolen [ 14/Mar/12 7:09 PM ]

CLJS-35 has a non-working patch. If it's fixed for OS X, I'll apply it.

Comment by Gianni Chiappetta [ 15/Mar/12 10:44 AM ]

@David Once the patch is fixed, can we do both?

Comment by David Nolen [ 15/Mar/12 11:12 AM ]

The ideal patch would allow you to get head, a specific revision. Unless I'm missing something it would also be nice to get a bootstrap.bat

Comment by Hubert Iwaniuk [ 21/Apr/12 3:17 AM ]

Attached patch uses newer version of GClosure.

Comment by David Nolen [ 21/Apr/12 9:27 AM ]

fixed, https://github.com/clojure/clojurescript/commit/8b74d8dcb4edeb80fda72ae7f7c1e5872dc59687

Comment by David Nolen [ 22/Apr/12 3:34 PM ]

Reverted. This patch related to CLJS-35 broke browser REPL. I'll happily apply a new patch that addresses the browser REPL issues

Comment by Hubert Iwaniuk [ 30/Apr/12 3:37 AM ]

New GClosure and static serving.

Comment by Hubert Iwaniuk [ 08/May/12 6:05 AM ]

New patch should solve both, this and CLJS-35.

Comment by David Nolen [ 08/May/12 11:38 PM ]

fixed, https://github.com/clojure/clojurescript/commit/63eea77d4d6a2ec31bb017da9f343be5f29a61a4





Generated at Sat Aug 01 21:27:25 CDT 2015 using JIRA 4.4#649-r158309.