<< Back to previous view

[CLJS-1588] Self-host: satisfies? on defrecord instance Created: 24/Feb/16  Updated: 25/Apr/16  Resolved: 25/Apr/16

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

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

Attachments: Text File CLJS-1588-2.patch     Text File CLJS-1588-3.patch     Text File CLJS-1588.patch    
Patch: Code and Test

 Description   

If you define a record satisfying a protocol, satisfies? doesn't return true:

$ script/noderepljs 
ClojureScript Node.js REPL server listening on 51714
To quit, type: :cljs/quit
cljs.user=> (require 'cljs.js)
nil
cljs.user=> (def st (cljs.js/empty-state))
#'cljs.user/st
cljs.user=> (cljs.js/eval-str st
"(defrecord Foo [x] IComparable (-compare [_ o] (compare x (.-x o))))" 
nil {:eval cljs.js/js-eval :context :expr} identity)
{:ns cljs.user, :value cljs.user/Foo}
cljs.user=> (cljs.js/eval-str st
"(satisfies? IComparable (Foo. 1))"
nil {:eval cljs.js/js-eval :context :expr} identity)
{:ns cljs.user, :value false}


 Comments   
Comment by Mike Fikes [ 24/Feb/16 3:34 PM ]

High-level analysis:

Using :repl-verbose, you can see this as part of being emitted.

this.cljs$lang$protocol_mask$partition0$ = 2229667594;
this.cljs$lang$protocol_mask$partition1$ = 10240;

If you compare the same for bootstrap, and do a diff, ignoring gensym diffs, you see

this.cljs$lang$protocol_mask$partition0$ = -2065299702;
this.cljs$lang$protocol_mask$partition1$ = 0;

Both of first integers is the same hex value 0x84E6070A, but evidently in the bootstrapped implementation it is being interpreted and emitted as as 2's complement 32-bit value. My hunch is that this is at the root of the issue.

Comment by Mike Fikes [ 24/Feb/16 5:36 PM ]

The root cause is that, in the definition of fast-path-protocols, bit-shift-left is being used until 2147483648 (which is 0x80000000) is reached. In Clojure (bit-shift-left 1 31) yields this integer, but in ClojureScript, since the underlying host arithmetic is 32-bit 2's complement, this yields -2147483648. The specific number being produced is important because == is used in that definition. The fix is to simply use multiplication by 2 instead.

This results in the second line in the protocol mask numbers to match the one produced in JVM ClojureScript (10240 instead of 0, prior to the fix):

this.cljs$lang$protocol_mask$partition0$ = -2065299702;
this.cljs$lang$protocol_mask$partition1$ = 10240;

Presumably this is the important aspect, with the first number being OK as it is equivalent with respect to bit mask operations.

The production code change is a single switch from (core/bit-shift-left b 1) to the equivalent (for the purposes of setting up fast-path-protocols), (core/* 2 b). Also, a good thing is that this definition is not in a critical perf path (it is a def).

Comment by David Nolen [ 26/Feb/16 1:43 PM ]

This one gives me pause, I think we should conditionalize this one for now. I think for ClojureScript we also want to clamp to 32bits by bit-or'ing with 0.

Comment by Mike Fikes [ 26/Feb/16 3:38 PM ]

CLJS-1588-2.patch conditionalizes.

Here is it working in JVM ClojureScript:

$ script/noderepljs 
ClojureScript Node.js REPL server listening on 55658
To quit, type: :cljs/quit
cljs.user=> (defrecord Foo [x] IComparable (-compare [_ o] (compare x (.-x o))))
cljs.user/Foo
cljs.user=> (satisfies? IComparable (Foo. 1))
true

I don't think we can clamp (bit-or with zero), as this causes it to go back to a negative number (here using int to do the bit-or-with-zero op):

cljs.user=> (* 2 (Math/pow 2 30))
2147483648
cljs.user=> (int (* 2 (Math/pow 2 30)))
-2147483648

With clamping with int the self host unit test fails, but without it it passes.

Here is the relevant new expression reference:

[p #?(:clj  (core/bit-shift-left b 1)
      :cljs (core/* 2 b))]))
Comment by Francis Avila [ 26/Feb/16 4:39 PM ]

I think David may be suggesting that the bitfield should be coerced to signed-int on both jvm and js?

For example, the following code:

(iterate (fn [[p b]]
             (if (== (unchecked-int 0x80000000) b)
               [(inc p) 1]
               [p (unchecked-int (bit-shift-left b 1))]))
    [0 1])

However this does not work in clojurescript because unchecked-int is broken there (and the macro version is curiously missing, too).

Another option is to use only 31 bits.

Comment by Mike Fikes [ 24/Apr/16 10:35 AM ]

The previously attached patch no longer applies to master. Attaching an update CLJS-1588-3.patch which has the same production code changes, but instead puts the unit test in the regular test suite.

This new test (which is much easier to read!) will fail without the production change via script/test-self-parity in this way:

FAIL in (test-records) (at cljs.test.js:414:14)
Testing records
expected: (satisfies? IComparable (->FooComparable 1))
  actual: false
Comment by David Nolen [ 25/Apr/16 6:19 AM ]

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





[CLJS-1632] Typos, c/e, and consistency of docs/params Created: 24/Apr/16  Updated: 25/Apr/16  Resolved: 25/Apr/16

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

Type: Enhancement Priority: Trivial
Reporter: Mike Fikes Assignee: David Nolen
Resolution: Completed Votes: 0
Labels: None

Attachments: Text File CLJS-1632.patch    
Patch: Code

 Description   

Fixes typos, consistency, making params match docs, etc.

Covers what was previously CLJS-1510, CLJS-1522, CLJS-1526, CLJS-1534, CLJS-1535, and other similar changes.



 Comments   
Comment by David Nolen [ 25/Apr/16 6:15 AM ]

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





[CLJS-1510] Invalid refer message mentions var twice Created: 11/Dec/15  Updated: 24/Apr/16  Resolved: 24/Apr/16

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

Type: Defect Priority: Trivial
Reporter: Mike Fikes Assignee: David Nolen
Resolution: Declined Votes: 0
Labels: None

Attachments: Text File CLJS-1510.patch    
Patch: Code

 Description   
cljs.user=> (require '[clojure.string :refer [foo]])
clojure.lang.ExceptionInfo: Invalid :refer, var var clojure.string/foo does not exist in file <cljs repl> {:tag :cljs/analysis-error}

Note "var var" above.



 Comments   
Comment by Mike Fikes [ 24/Apr/16 12:08 PM ]

Will coalesce into a larger patch with similar changes.





[CLJS-1522] Self-host: Update parameters on root *load-fn* / *eval-fn* Created: 23/Dec/15  Updated: 24/Apr/16  Resolved: 24/Apr/16

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

Type: Enhancement Priority: Minor
Reporter: Mike Fikes Assignee: David Nolen
Resolution: Declined Votes: 0
Labels: bootstrap

Attachments: Text File CLJS-1522.patch    
Patch: Code

 Description   

There are root functions set up for the dynamic vars *load-fn* and *eval-fn*, but the named parameters on those dynamic vars reflect earlier versions of the code, prior to the values being updated to being maps. This ticket asks the names to be updated in order to avoid confusing any developers that may derive meaning from the parameter names.



 Comments   
Comment by Mike Fikes [ 24/Apr/16 12:06 PM ]

Will coalesce into a larger patch with similar changes.





[CLJS-1526] Doc for *print-err-fn* refers to *print-fn* Created: 30/Dec/15  Updated: 24/Apr/16  Resolved: 24/Apr/16

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

Type: Defect Priority: Trivial
Reporter: Mike Fikes Assignee: David Nolen
Resolution: Declined Votes: 0
Labels: docstring

Attachments: Text File CLJS-1526.patch    
Patch: Code

 Description   

The reference to *print-fn* in the doc output (copied below) is a cut-n-paste error.

cljs.user=> (doc *print-err-fn*)
-------------------------
cljs.core/*print-err-fn*
  Each runtime environment provides a different way to print error output.
  Whatever function *print-fn* is bound to will be passed any
  Strings which should be printed.
nil


 Comments   
Comment by Mike Fikes [ 24/Apr/16 12:05 PM ]

Will coalesce into a larger patch with similar changes.





[CLJS-1534] Docstring for bit-and-not Created: 01/Jan/16  Updated: 24/Apr/16  Resolved: 24/Apr/16

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

Type: Defect Priority: Trivial
Reporter: Mike Fikes Assignee: David Nolen
Resolution: Declined Votes: 0
Labels: docstring

Attachments: Text File CLJS-1534.patch    
Patch: Code

 Description   

Docstring for bit-and-not is inadvertently a copy of the docstring for bit-and.



 Comments   
Comment by Mike Fikes [ 24/Apr/16 12:02 PM ]

Will coalesce into a larger patch with similar changes.





[CLJS-1535] Make param for neg? consistent with pos? and zero? Created: 01/Jan/16  Updated: 24/Apr/16  Resolved: 24/Apr/16

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

Type: Enhancement Priority: Trivial
Reporter: Mike Fikes Assignee: David Nolen
Resolution: Declined Votes: 0
Labels: None

Attachments: Text File CLJS-1535.patch    
Patch: Code

 Description   

The param for neg? is x while for pos? and zero? it is n.

Simple enhancement for consistency.



 Comments   
Comment by Mike Fikes [ 24/Apr/16 11:57 AM ]

Will coalesce into a larger patch with similar changes.





[CLJS-1595] Update Closure Compiler to v20160208 Created: 29/Feb/16  Updated: 23/Apr/16  Resolved: 23/Apr/16

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

Type: Task Priority: Trivial
Reporter: Michael Zhou Assignee: Unassigned
Resolution: Completed Votes: 0
Labels: clojurescript

Attachments: Text File update-closure-compiler-v20160208.patch    

 Description   

Now that Closure Cmopiler v20160208 has been pushed to Maven Central, update to that version.



 Comments   
Comment by Linus Ericsson [ 29/Feb/16 12:06 PM ]

Success report:

I applied update-closure-compiler-v20160208.patch to f58dcdf4 (22 feb) and successfully built clojurescript.

I added the resulting [org.clojure/clojurescript "1.8.28"] to a non-trivial reagent/figwheel based project.clj and updated its closure dependency as well.

I managed to start the repl and everything seem to work fine, these warnings are shown after upgrading clojurescript:

WARNING: Unknown option ':compiler-env'.
WARNING: Unknown option ':special-fns'.
WARNING: Unknown option ':warn-on-undeclared'.

I have not read all the changes to ClojureScript and therefore assume this is just some regression for changed compiler options.

$lein figwheel
Figwheel: Starting server at http://localhost:3449
Figwheel: Watching build - dev
Compiling "resources/public/js/compiled/frontlyft.js" from ["src" "../delat_src"]...
Successfully compiled "resources/public/js/compiled/frontlyft.js" in 1.693 seconds.
Figwheel: Starting CSS Watcher for paths ["resources/public/css"]
Launching ClojureScript REPL for build: dev
Figwheel Controls:
(stop-autobuild) ;; stops Figwheel autobuilder
(start-autobuild [id ...]) ;; starts autobuilder focused on optional ids
(switch-to-build id ...) ;; switches autobuilder to different build
(reset-autobuild) ;; stops, cleans, and starts autobuilder
(reload-config) ;; reloads build config and resets autobuild
(build-once [id ...]) ;; builds source one time
(clean-builds [id ..]) ;; deletes compiled cljs target files
(print-config [id ...]) ;; prints out build configurations
(fig-status) ;; displays current state of system
Switch REPL build focus:
:cljs/quit ;; allows you to switch REPL to another build
Docs: (doc function-name-here)
Exit: Control+C or :cljs/quit
Results: Stored in vars *1, *2, *3, *e holds last exception object
Prompt will show when Figwheel connects to your application
WARNING: Unknown option ':compiler-env'.
WARNING: Unknown option ':special-fns'.
WARNING: Unknown option ':warn-on-undeclared'.
To quit, type: :cljs/quit

These are the dependencies

:dependencies [[org.clojure/clojure "1.8.0"]
[org.clojure/clojurescript "1.8.28"]
[org.clojure/core.async "0.2.374"]
[reagent "0.5.1"]
[timothypratley/reanimated "0.1.4"]
[cljsjs/react "0.14.3-0"]
[com.andrewmcveigh/cljs-time "0.4.0"]
[com.google.javascript/closure-compiler "v20160208"]
[datascript "0.15.0"]
[cljs-http "0.1.39"]
[secretary "1.2.3" :exclusion [org.clojure/clojurescript]]]

:plugins [[lein-cljsbuild "1.1.2" :exclusion [org.clojure/clojure]]
[lein-figwheel "0.5.0-6"]]

Comment by Michael Zhou [ 23/Mar/16 4:12 PM ]

Is there an update on this?

Comment by David Nolen [ 23/Apr/16 3:51 PM ]

fixed https://github.com/clojure/clojurescript/commit/6ba817065113313a15b0f027c6491e0bc732f3e9

Comment by Michael Zhou [ 23/Apr/16 4:19 PM ]

Thanks!





[CLJS-1612] Resolve ns aliases in syntax quote Created: 31/Mar/16  Updated: 23/Apr/16  Resolved: 23/Apr/16

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

Type: Defect Priority: Minor
Reporter: Tom Jack Assignee: David Nolen
Resolution: Completed Votes: 0
Labels: patch

Attachments: Text File CLJS-1612-aux.patch     Text File CLJS-1612.patch     Text File resolve-ns-aliases-in-syntax-quote.patch     Text File self-host-resolve-ns-aliases-in-syntax-quote.patch    
Patch: Code and Test

 Description   

This test (cljs/syntax_quote_test.cljs) fails:

(ns cljs.syntax-quote-test
  (:require [cljs.test :as test :refer-macros [deftest is]]))

(deftest test-syntax-quote
  (is (= `foo 'cljs.syntax-quote-test/foo))
  (is (= `test/test-vars 'cljs.test/test-vars))
  (is (= `test/deftest 'cljs.test/deftest))
  (is (= `test/foo 'cljs.test/foo)))

The first assertion passes (since f240826034), but the remaining assertions fail: test is not resolved to cljs.test, so e.g. `test/foo is just 'test/foo.

Of course, the analogous clojure/syntax_quote_test.clj passes:

(ns clojure.syntax-quote-test
  (:require [clojure.test :as test :refer [deftest is]]))

(deftest test-syntax-quote
  (is (= `foo 'clojure.syntax-quote-test/foo))
  (is (= `test/test-vars 'clojure.test/test-vars))
  (is (= `test/deftest 'clojure.test/deftest))
  (is (= `test/foo 'clojure.test/foo)))

Attached patch resolve-ns-aliases-in-syntax-quote.patch contains the failing test and an attempted fix.



 Comments   
Comment by David Nolen [ 08/Apr/16 2:51 PM ]

This looks good, have you submitted a CA? Thanks.

Comment by Tom Jack [ 08/Apr/16 5:15 PM ]

Yeah, I'm "Thomas Jack" on the contributors list.

Comment by Mike Fikes [ 09/Apr/16 11:44 PM ]

The attached patch causes an issue for self-hosted ClojureScript for symbols in macros namespaces. One specific example is the aclone symbol referenced in the amap macro: With self-host, instead of resolving to cljs.core/aclone, it ends up with the macro-pseudonamespace: cljs.core$macros/aclone. Here is how to reproduce this:

Apply the patch and then start up script/noderepljs:

$ script/noderepljs 
ClojureScript Node.js REPL server listening on 51454
To quit, type: :cljs/quit
cljs.user=> (require 'cljs.js)
nil
cljs.user=> (def st (cljs.js/empty-state))
#'cljs.user/st
cljs.user=> (cljs.js/eval-str st "(def an-array (int-array 5 0))" nil {:eval cljs.js/js-eval :context :expr} identity)
{:ns cljs.user, :value #js [0 0 0 0 0]}
cljs.user=>  (cljs.js/eval-str st "(amap an-array idx ret (+ 1 (aget an-array idx)))" nil {:eval cljs.js/js-eval :context :expr} identity)
WARNING: No such namespace: cljs.core$macros, could not locate cljs/core$macros.cljs, cljs/core$macros.cljc, or Closure namespace "" at line 1 
WARNING: Use of undeclared Var cljs.core$macros/aclone at line 1 
{:error #error {:message "ERROR", :data {:tag :cljs/analysis-error}, :cause #object[TypeError TypeError: Cannot read property 'call' of undefined]}}

This affects the aclone symbol as well as several references to get, as far as I can tell.

Comment by Mike Fikes [ 09/Apr/16 11:48 PM ]

I forgot to add, apart from the regression issue described in the previous comment, the patch does fix the intended use case described in the ticket under self-hosted ClojureScript (causing aliases to expand properly).

Comment by Tom Jack [ 10/Apr/16 12:23 PM ]

D'oh, thanks!

Patch self-host-resolve-ns-aliases-in-syntax-quote.patch adds your example as a failing self-host/test, and fixes it in the stupidest way: just trim off "$macros" in resolve-symbol.

Not sure if this stupid fix is acceptable..

Comment by Mike Fikes [ 10/Apr/16 4:05 PM ]

Yeah, Tom. I suspect that's a little heavy-handed. Here is a specific case it breaks in bootstrap:

Let's say you have this macros namespace:

(ns foo.macros)

(defn add*
  [a b]
  (+ a b))

(defmacro add
  [a b]
  `(add* ~a ~b))

The add* symbol needs to resolve properly and the $macros suffix is key. Without this latest patch, it does, but with it, it fails to do so. Here is the way to reproduce the issue with your patch:

$ script/noderepljs 
ClojureScript Node.js REPL server listening on 57728
To quit, type: :cljs/quit
cljs.user=> (require 'cljs.js)
nil
cljs.user=> (def st (cljs.js/empty-state))
#'cljs.user/st
cljs.user=> (cljs.js/eval st
'(ns foo.core (:require-macros foo.macros))
{:context :expr
 :eval cljs.js/js-eval
 :load         (fn [_ cb]
                 (cb {:lang   :clj
                          :source "(ns foo.macros) (defn add* [a b] (+ a b)) (defmacro add [a b] `(add* ~a ~b))"}))}
identity)
{:value nil}
cljs.user=> (cljs.js/eval st
'(foo.macros/add 1 2)
{:context :expr
 :eval cljs.js/js-eval}
identity)
WARNING: No such namespace: foo.macros, could not locate foo/macros.cljs, foo/macros.cljc, or Closure namespace ""
WARNING: Use of undeclared Var foo.macros/add*
TypeError: Cannot read property 'add_STAR_' of undefined
    at eval (eval at cljs$js$js_eval (/Users/mfikes/Projects/planck/planck-cljs/clojurescript/.cljs_node_repl/cljs/js.js:131:13), <anonymous>:1:11)
    at cljs$js$js_eval (/Users/mfikes/Projects/planck/planck-cljs/clojurescript/.cljs_node_repl/cljs/js.js:131:8)
    at cljs$js$eval_STAR_ (/Users/mfikes/Projects/planck/planck-cljs/clojurescript/.cljs_node_repl/cljs/js.js:1168:146)
    at Function.cljs.js.eval.cljs$core$IFn$_invoke$arity$4 (/Users/mfikes/Projects/planck/planck-cljs/clojurescript/.cljs_node_repl/cljs/js.js:1247:27)
    at cljs$js$eval (/Users/mfikes/Projects/planck/planck-cljs/clojurescript/.cljs_node_repl/cljs/js.js:1233:21)
    at repl:1:102
    at repl:9:3
    at repl:14:4
    at Object.exports.runInThisContext (vm.js:54:17)
    at Domain.<anonymous> ([stdin]:41:34)
cljs.user=>

Without your patch, the last bit will return.

{:value 3}
Comment by Tom Jack [ 10/Apr/16 5:16 PM ]

OK, the issue is beyond my comprehension, then. Your example does not make sense to me – I was surprised that it works as of master.

I will probably let someone who understands self-hosted cljs resolve the issue before I understand it enough to resolve the issue myself.

Comment by Mike Fikes [ 10/Apr/16 7:01 PM ]

Tom, part of me thinks your first patch is correct, and that it is aclone that needs to be qualified as cljs.core/aclone (and similarly for calls to get). I'll try an experiment along these lines and report back.

Comment by Mike Fikes [ 11/Apr/16 10:25 PM ]

The attached {{CLJS-1612-aux.patch}}, when applied with resolve-ns-aliases-in-syntax-quote.patch, results in the compiler core unit tests passing under bootstrap ClojureScript.

At the heart of what needs to be considered here is illustrated in the use of aclone in the amap macro. In particular, under bootstrap ClojureScript, syntax-quoting function symbol like aclone, when used in a macro, result in it being qualified with the current macro pseudo-namespace. (While this does not occur today for aclone, it does occur for this use case in bootstrap outside of cljs.core, so there is a tangential issue regarding cljs.core perhaps getting special treatment. But, regardless, with resolve-ns-aliases-in-syntax-quote.patch, the pseudo-namespace comes into play.)

So, if qualified as cljs.core$macros/aclone, this makes it so that aclone could be a regular function in the macros namespace, called by the macro. This is like the add* function in the example in the Bootstrapped ClojureScript portion at the bottom of http://blog.fikesfarm.com/posts/2016-01-05-clojurescript-macros-calling-functions.html

But, aclone is not a function in the macro namespace. It is a function in the runtime namespace. So, it needs to be qualified as such, as, cljs.core/aclone and the attached patch does just that. The attached patch does this for other function symbols that need the same treatment.

Now, the above analysis is based simply on the current behavior of the compiler, and not based on any notion of how the compiler should behave. An alternate view could be that the $macros suffix should never appear in qualified names, and resolution should just find the correct symbol. (So, a dual argument here is the fact that or can be called as cljs.core/or or cljs.core$macros/or, and both just work somehow, with the ideal publicized behavior being that the $macros suffix is an internal implementation detail, and users should always use forms like cljs.core/or. With this view, we'd instead strive to make self-host-resolve-ns-aliases-in-syntax-quote.patch work.

If we do want to go with the patch attached to this ticket, there are a few things we'd need to do:

1. Combine the patches into a single one. (Presuming a single patch is the only way it would be accepted.) If so, I'd have no problem if Tom wanted to combine this work into his and submit it under his name. (I've signed the CA, so this is OK.)
2. The only reason I currently know this patch works is because I built ClojureScript with it and ran the compiler test suite in bootstrap ClojureScript, but with a downstream bootstrap environment (Planck). I'd feel more comfortable if we added specific tests to the self-host test suite to provoke the failures that are needed to warrant the changes in this patch. (In other words, bootstrap is kind-of unacceptably fragile if we need to rely on something like Planck to ensure it is working correctly—the needed tests need to be with the ClojureScript compiler—ideally one day we'd get to the point where we can run the entire compiler's unit tests in bootstrap mode, but we aren't there now.)

Comment by Mike Fikes [ 17/Apr/16 7:52 AM ]

I'll take a stab at putting the above together.

Comment by Mike Fikes [ 17/Apr/16 10:24 AM ]

CLJS-1612.patch includes Tom Jack's original change plus additional revisions for bootstrap.

Comment by David Nolen [ 23/Apr/16 1:59 PM ]

The patch no longer applies to master, can we rebase?

Comment by Tom Jack [ 23/Apr/16 2:28 PM ]

Hmm, Mike's latest patch CLJS-1612.patch seems to apply to master for me.

$ git fetch -v --all
Fetching origin
From https://github.com/clojure/clojurescript
 = [up to date]      master     -> origin/master
 ...
$ git reset --hard origin/master
HEAD is now at 28e040d CLJS-1626: cljs.test for bootstrap
$ git am --keep-cr -s --ignore-whitespace < CLJS-1612.patch
Applying: CLJS-1612: Resolve ns aliases in syntax quote

Thanks, Mike, by the way, for the patch and explanation!

Comment by Mike Fikes [ 23/Apr/16 2:41 PM ]

Yeah, I can confirm what Tom's seeing. Here's my alternate verification:

$ cd /tmp
$ git clone https://github.com/clojure/clojurescript
Cloning into 'clojurescript'...
remote: Counting objects: 27250, done.
remote: Total 27250 (delta 0), reused 0 (delta 0), pack-reused 27250
Receiving objects: 100% (27250/27250), 10.25 MiB | 3.67 MiB/s, done.
Resolving deltas: 100% (12667/12667), done.
Checking connectivity... done.
$ cd clojurescript
$ curl -L http://dev.clojure.org/jira/secure/attachment/15609/CLJS-1612.patch | git apply
  % Total    % Received % Xferd  Average Speed   Time    Time     Time  Current
                                 Dload  Upload   Total   Spent    Left  Speed
100  8472  100  8472    0     0  13148      0 --:--:-- --:--:-- --:--:-- 13155

After this, script/test, script/test-self-host, and script/test-self-parity all pass as well.

Comment by David Nolen [ 23/Apr/16 3:18 PM ]

fixed https://github.com/clojure/clojurescript/commit/1e794f0a9d6c03b12644f00cd8aa4f8a3e86ab83. Not sure why the patch wasn't applying for me before.





Generated at Fri Apr 29 11:04:15 CDT 2016 using JIRA 4.4#649-r158309.