<< Back to previous view

[CLJS-1948] Possible race condition in compiler w/ parallel-build true Created: 21/Feb/17  Updated: 25/Feb/17  Resolved: 24/Feb/17

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

Type: Defect Priority: Minor
Reporter: Nikita Prokopov Assignee: David Nolen
Resolution: Completed Votes: 0
Labels: None

Attachments: Zip Archive datascript_compiler_race.zip    

 Description   

I'm seeing errors trying to compile DataScript on 1.9.473. Judging from output, it looks like a race error in ClojureScript compiler: output JS files are damaged, removing parallel-build true fixes the problem.

Due to the nature of error, it might not be 100% reproducible. I get it 100% times on my machine though, but reported syntax errors in JS are always different.

The problem was probably introduced in 1.9.229. I'm not getting any errors compiling DataScript in earlier versions (1.9.227 and before)

HOW TO REPRODUCE:

unzip datascript_compiler_race.zip
cd datascript_compiler_race
wget https://github.com/clojure/clojurescript/releases/download/r1.9.473/cljs.jar
rm -rf target && java -cp cljs.jar:src clojure.main build.clj

As this is a race condition, it might not reproduce perfectly every time.

Examples of what I get on my MacBook Pro Retina Mid 2012 (Core i7-3615QM, 4 cores):

[~/datascript_compiler_race] rm -rf target && java -cp cljs.jar:src clojure.main build.clj
WARNING: parse-binding at line 215 is being replaced at line 215 src/datascript/parser.cljc
WARNING: collect-vars-acc at line 470 is being replaced at line 470 /Users/prokopov/datascript_compiler_race/src/datascript/parser.cljc
Feb 21, 2017 1:07:13 PM com.google.javascript.jscomp.LoggerErrorManager println
SEVERE: /Users/prokopov/datascript_compiler_race/target/datascript/parser.js:140: ERROR - Parse error. Semi-colon expected
datascript.parser.collect.cljsdatascript.parser.collect.cljs$lang$mavar G__16546 = cljs.datascript.parser.collvar seq16545__$1 = cljs.core.next(seq16545);
                                                                        ^

Feb 21, 2017 1:07:13 PM com.google.javascript.jscomp.LoggerErrorManager println
SEVERE: /Users/prokopov/datascript_compiler_race/target/datascript/parser.js:1676: ERROR - Parse error. IE8 (and below) will parse trailing commas in array and object literals incorrectly. If you are targeting newer versions of JS, set the appropriate language_in option.
return faif(cljs.coredatascript.parser.RuleVars.prototype.cljs$core$IMap$_dissoc$arity$2 = (function (this__7667__auto__,k__7668return ((this__7654__auto____$1.constructor === other__7655__autoif(cljs.core.contains_QMARK_(new cljs.core.PersistentHashSet(null, new cljs.core.PersistentArrayMap(null, 2, [cljs.core.cst$kw$free,return true;
                                                                                                                                                                                                                                                                                                                                    ^

Feb 21, 2017 1:07:13 PM com.google.javascript.jscomp.LoggerErrorManager printSummary
WARNING: 2 error(s), 0 warning(s)
ERROR: JSC_PARSE_ERROR. Parse error. Semi-colon expected at /Users/prokopov/datascript_compiler_race/target/datascript/parser.js line 140 : 72
ERROR: JSC_TRAILING_COMMA. Parse error. IE8 (and below) will parse trailing commas in array and object literals incorrectly. If you are targeting newer versions of JS, set the appropriate language_in option. at /Users/prokopov/datascript_compiler_race/target/datascript/parser.js line 1676 : 324
[~/datascript_compiler_race] rm -rf target && java -cp cljs.jar:src clojure.main build.clj
WARNING: parse-binding at line 215 is being replaced at line 215 src/datascript/parser.cljc
WARNING: parse-clause at line 598 is being replaced at line 598 /Users/prokopov/datascript_compiler_race/src/datascript/parser.cljc
WARNING: parse-clauses at line 611 is being replaced at line 611 /Users/prokopov/datascript_compiler_race/src/datascript/parser.cljc
Feb 21, 2017 1:05:50 PM com.google.javascript.jscomp.LoggerErrorManager println
SEVERE: /Users/prokopov/datascript_compiler_race/target/datascript/parser.js:458: ERROR - Parse error. Semi-colon expected
datasreturn cljs.core.pr_sequential_writer(writer__7673__auto__,pr_pair__7675__auto__,"#datascript.parser.Variable{",", ","}",opts__7674__auto__,cljs.core.concat.cljs$core$IFn$_invoke$arity$2(new cljs.core.PersistentVector(null, 1, 5return (new cljs.core.RecordIter((0),G__16721__$1,1,new cljs.core.PersistentVector(null, 1, 5, cljs.core.PersistentVector.EMPTY_NODE, [cljs.core.cst$kw$symbol], null),(cljs.core.truth_(self__.__extmap)?cljs.core._iterator(self__.__extmap):cljs.core.nil_iter())));
            ^

Feb 21, 2017 1:05:50 PM com.google.javascript.jscomp.LoggerErrorManager println
SEVERE: /Users/prokopov/datascript_compiler_race/target/datascript/parser.js:4080: ERROR - Parse error. IE8 (and below) will parse trailing commas in array and object literals incorrectly. If you are targeting newer versions of JS, set the appropriate language_in option.
throw cljs.core.ex_info.cljs$core$IFn$_invoke$arity$2([cljs.core.str.cljs$cothrow cljs.core.ex_info.cljs$core$IFn$_invoke$arity$2([cljs.core.str.cljs$core$IFn$_invoke$arity$1("Cannot parse pull expression, expect ['pull' src-var? variable (constant | variable | plain-symbol)]")].join(''),new cljs.core.PersistentArrayMap(null, 2, [cljs.core.cst$kw$error,}
                                                                                                                                                                                                                                                                                                                                                                  ^

Feb 21, 2017 1:05:50 PM com.google.javascript.jscomp.LoggerErrorManager printSummary
WARNING: 2 error(s), 0 warning(s)
ERROR: JSC_PARSE_ERROR. Parse error. Semi-colon expected at /Users/prokopov/datascript_compiler_race/target/datascript/parser.js line 458 : 12
ERROR: JSC_TRAILING_COMMA. Parse error. IE8 (and below) will parse trailing commas in array and object literals incorrectly. If you are targeting newer versions of JS, set the appropriate language_in option. at /Users/prokopov/datascript_compiler_race/target/datascript/parser.js line 4080 : 354
[~/datascript_compiler_race] rm -rf target && java -cp cljs.jar:src clojure.main build.clj
WARNING: parse-binding at line 215 is being replaced at line 215 /Users/prokopov/datascript_compiler_race/src/datascript/parser.cljc
Feb 21, 2017 1:02:55 PM com.google.javascript.jscomp.LoggerErrorManager println
SEVERE: /Users/prokopov/datascript_compiler_race/target/datascript/parser.js:4507: ERROR - Parse error. ',' expected
throw cljs.core.ex_info.cljs$core$IFn$_invoke$arity$2([cljs.core.str.cljs$core$IFn$_invoke$arity$1("Cannot parse :find, expected: (find-rel | find-coll | find-tuple | find-scalar)")].join(''),new cljs.core.PersistentArrayMap(null, 2, [cljs.core.cst$kw$error,cljs.core.cst$kw$parser_SLASH_find,cljs.core.cst$kw$fragment,forvar or__6983__}
                                                                                                                                                                                                                                                                                                                                      ^

Feb 21, 2017 1:02:55 PM com.google.javascript.jscomp.LoggerErrorManager printSummary
WARNING: 1 error(s), 0 warning(s)
ERROR: JSC_PARSE_ERROR. Parse error. ',' expected at /Users/prokopov/datascript_compiler_race/target/datascript/parser.js line 4507 : 326
[~/datascript_compiler_race] rm -rf target && java -cp cljs.jar:src clojure.main build.clj
WARNING: collect-vars-acc at line 470 is being replaced at line 470 src/datascript/parser.cljc
WARNING: parse-clause at line 598 is being replaced at line 598 src/datascript/parser.cljc
WARNING: parse-clauses at line 611 is being replaced at line 611 src/datascript/parser.cljc
Feb 21, 2017 1:02:00 PM com.google.javascript.jscomp.LoggerErrorManager println
SEVERE: /Users/prokopov/datascript_compiler_race/target/datascript/parser.js:227: ERROR - Parse error. ',' expected
this.datascript.parser.Placeholder.prototype.cljs$core$ILookup$_lookup$arity$2 = (function (this__7658_this.cljs$lang$protocol_mask$partition1$ = 81var thidatascript.parser.Placeholdereturn this__7658__auto____$1.cljs$core$ILookup$_lookup$arity$3(null,k__7659__auto__,null);
                                                                                                           ^

Feb 21, 2017 1:02:00 PM com.google.javascript.jscomp.LoggerErrorManager printSummary
WARNING: 1 error(s), 0 warning(s)
ERROR: JSC_PARSE_ERROR. Parse error. ',' expected at /Users/prokopov/datascript_compiler_race/target/datascript/parser.js line 227 : 107
[~/datascript_compiler_race] rm -rf target && java -cp cljs.jar:src clojure.main build.clj
WARNING: parse-binding at line 215 is being replaced at line 215 /Users/prokopov/datascript_compiler_race/src/datascript/parser.cljc
Feb 21, 2017 1:00:46 PM com.google.javascript.jscomp.LoggerErrorManager println
SEVERE: /Users/prokopov/datascript_compiler_race/out/datascript/parser.js:215: ERROR - Parse error. Character '@' (U+0040) is not a valid identifier start char
datascript.parser.Placeholder = (functio * @implements {cljs.core.IAthis.__meta  * @implemthis.__extmap = __extm * @this.__hash = __hash;
                                           ^

Feb 21, 2017 1:00:46 PM com.google.javascript.jscomp.LoggerErrorManager printSummary
WARNING: 1 error(s), 0 warning(s)
ERROR: JSC_PARSE_ERROR. Parse error. Character '@' (U+0040) is not a valid identifier start char at /Users/prokopov/datascript_compiler_race/out/datascript/parser.js line 215 : 43
[~/datascript_compiler_race] rm -rf target && java -cp cljs.jar:src clojure.main build.clj
WARNING: collect-vars-acc at line 470 is being replaced at line 470 /Users/prokopov/datascript_compiler_race/src/datascript/parser.cljc
WARNING: parse-clause at line 598 is being replaced at line 598 /Users/prokopov/datascript_compiler_race/src/datascript/parser.cljc
WARNING: parse-clauses at line 611 is being replaced at line 611 /Users/prokopov/datascript_compiler_race/src/datascript/parser.cljc
Feb 21, 2017 12:59:33 PM com.google.javascript.jscomp.LoggerErrorManager println
SEVERE: /Users/prokopov/datascript_compiler_race/out/datascript/parser.js:7639: ERROR - Parse error. '}' expected

Feb 21, 2017 12:59:33 PM com.google.javascript.jscomp.LoggerErrorManager printSummary
WARNING: 1 error(s), 0 warning(s)
ERROR: JSC_PARSE_ERROR. Parse error. '}' expected at /Users/prokopov/datascript_compiler_race/out/datascript/parser.js line 7639 : 0

Note how output JS is not even syntactically correct:

functio * @implements
__meta  * @implemthis.__extmap
,forvar or__6983__}

This is a clear sign that two or more threads are writing to the same file without coordination.

Also note that with parallel build enabled, compiler confuses declare with function defenition and warns about collect-vars-acc at line 470 is being replaced at line 470. In fact, the function is first decalre-d, then defn-ed just once in the same file, which, under normal circumstances, should not trigger any warnings.

Also note that setting :parallel-build false leads to 100% stable, error-less builds:

[~/datascript_compiler_race] rm -rf target && java -cp cljs.jar:src clojure.main build.clj --no-parallel
[~/datascript_compiler_race]


 Comments   
Comment by David Nolen [ 22/Feb/17 6:50 AM ]

This issue needs work before it will be considered. Do not link outside to minimal cases, you need to provide all the information in the ticket.

Comment by Nikita Prokopov [ 22/Feb/17 7:12 AM ]

David, thanks for the heads up! I’ve updated the issue with standalone zip containing test case and instructions on how to build it. Unfortunately I cannot include cljs.jar in it because it’s too big (24 Mb, while JIRA only allows for 10 Mb attachments max). But I’m sure you have one somewhere on your machine

Comment by David Nolen [ 24/Feb/17 1:38 PM ]

The issue appears to be that somehow duplicate inputs are present, that is

datascript/pull_parser.cljc
will get compiled twice.

Comment by David Nolen [ 24/Feb/17 2:06 PM ]

fixed https://github.com/clojure/clojurescript/commit/04541fbf8ec573d26bac4e4e61e69cb4c64a3dd7

Comment by Nikita Prokopov [ 25/Feb/17 2:35 AM ]

Is it because of how cljc is handled? I don’t see duplicate file names in that repo

Comment by Nikita Prokopov [ 25/Feb/17 2:44 AM ]

BTW confirm that 1.9.494 fixes my issue. Thanks a lot!

Comment by Pavel Kopychenko [ 25/Feb/17 3:59 AM ]

Hi all!! I'm sorry! I have simular error when I try to compile production after update clojurescript to version 1.9.494 from 1.9.229.

Compiling "resources/public/js/c/camerton/testor/main.js" from ["src-cljc" "src-cljs-common" "src-cljs-testor"]...
Feb 25, 2017 3:40:05 PM com.google.javascript.jscomp.LoggerErrorManager println
SEVERE: /home/maker/git/camerton/target/cljsbuild-compiler-3/cljs/core/async.js:1426: ERROR - Parse error. No newline allowed before '=>'
var inst_56769 = async(inst_56768);
                                  ^

Feb 25, 2017 3:40:05 PM com.google.javascript.jscomp.LoggerErrorManager printSummary
WARNING: 1 error(s), 0 warning(s)
ERROR: JSC_PARSE_ERROR. Parse error. No newline allowed before '=>' at /home/maker/git/camerton/target/cljsbuild-compiler-3/cljs/core/async.js line 1426 : 34
Comment by António Nuno Monteiro [ 25/Feb/17 10:48 AM ]

@nikita not related to cljc files in particular, just the way we sort dependencies could make us end up with duplicate entries. We now calculate `distinct` by keying on the namespace that the entry provides.

@pavel that's not related to this issue, but I'm also seeing it. Please open a new ticket. It's most likely related to the Closure Compiler upgrade.





[CLJS-1928] Self-host: Macro namespace alias in keyword Created: 02/Feb/17  Updated: 24/Feb/17  Resolved: 24/Feb/17

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-1928.patch    
Patch: Code and Test

 Description   

If, in self-hosted ClojureScript you require a macro namespace and establish an alias, as in

(require-macros '[cljs.spec :as s])

You won't be able to use to use the alias in a keyword, as in

::s/foo

The root cause is that when r/*alias-map* is bound to (current-alias-map) this fails to set up mappings for macro namespaces.



 Comments   
Comment by Mike Fikes [ 02/Feb/17 9:27 PM ]

The attached patch revises (current-alias-map) to additionally consult macros namespaces when setting up the alias map. This is tested by adding the (previously-disabled) keyword unit tests, adding a specific test for a macros namespace alias.

(FWIW, a similar technique is also used in Lumo and Planck and, as a consequence, they can properly read forms involving macros namespace aliases, but the resulting forms cannot be compiled in those environments owing to the change needed in cljs.js).

Comment by David Nolen [ 24/Feb/17 1:23 PM ]

fixed https://github.com/clojure/clojurescript/commit/46dcd22713a924bfd90f0a19449bb09f128d11df





[CLJS-1941] `cljs.compiler/cljs-files-in` shouldn't return `.cljc` files if a `.cljs` file exists for the namespace Created: 14/Feb/17  Updated: 24/Feb/17  Resolved: 24/Feb/17

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

Type: Defect Priority: Major
Reporter: António Nuno Monteiro Assignee: Unassigned
Resolution: Completed Votes: 0
Labels: None

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

 Description   

We're seeing non-determinism in builds due to this problem. This is the same bug as CLJS-1772, but happens at a different code path.



 Comments   
Comment by António Nuno Monteiro [ 14/Feb/17 12:26 PM ]

Attached patch with fix.

Comment by David Nolen [ 24/Feb/17 1:16 PM ]

fixed https://github.com/clojure/clojurescript/commit/3aa1951533ce2ff7a94f90dbcf74904fe413db48





[CLJS-1940] Undeclared var warning when invoking a protocol method on a `js` interop form Created: 14/Feb/17  Updated: 24/Feb/17  Resolved: 24/Feb/17

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

Type: Defect Priority: Major
Reporter: Nicola Mometto Assignee: David Nolen
Resolution: Completed Votes: 0
Labels: interop, protocols, regression


 Description   

Compiling the following code under 1.9.743

(ns test.foo)

(defprotocol Proto
  (f [this]))

(defn foo []
  (f js/Math.E))

Produces the following warning:

WARNING: Use of undeclared Var test.foo/js at line 7 src/test/foo.cljs

This is a regression from 1.9.293

https://github.com/Bronsa/CLJS-1.9.473-regression contains a project set up to reproduce this



 Comments   
Comment by David Nolen [ 24/Feb/17 12:52 PM ]

:advanced
is not the issue here,
:static-fns
is what is required to exhibit the problem.

Comment by David Nolen [ 24/Feb/17 1:05 PM ]

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





[CLJS-1951] Missing 0 and 1 arity versions of interleave Created: 23/Feb/17  Updated: 24/Feb/17  Resolved: 24/Feb/17

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

Type: Defect Priority: Minor
Reporter: Thomas Mulvaney Assignee: Unassigned
Resolution: Completed Votes: 0
Labels: None

Attachments: Text File CLJS-1951.patch    
Patch: Code and Test

 Description   

For compatibility with Clojure, `interleave` should have 0 and 1 arity versions.



 Comments   
Comment by David Nolen [ 24/Feb/17 12:45 PM ]

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





[CLJS-1952] Bump Closure Compiler to Feb 2017 release Created: 23/Feb/17  Updated: 24/Feb/17  Resolved: 24/Feb/17

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

Type: Enhancement Priority: Minor
Reporter: António Nuno Monteiro Assignee: David Nolen
Resolution: Completed Votes: 0
Labels: None

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

 Comments   
Comment by David Nolen [ 24/Feb/17 12:42 PM ]

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





[CLJS-1937] Self-host: undeclared cljs.core$macros/mod when compiling cljs/core.cljs Created: 12/Feb/17  Updated: 22/Feb/17  Resolved: 22/Feb/17

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

Type: Defect Priority: Minor
Reporter: António Nuno Monteiro Assignee: David Nolen
Resolution: Completed Votes: 0
Labels: None

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

 Comments   
Comment by António Nuno Monteiro [ 12/Feb/17 11:32 PM ]

Attached patch with fix.

Comment by David Nolen [ 22/Feb/17 6:59 AM ]

fixed https://github.com/clojure/clojurescript/commit/2aa8aae2d8499d1b09a25bfa0b447c46d230cfe0





[CLJS-1936] cljs.analyzer declares vars which are only used in Clojure Created: 11/Feb/17  Updated: 22/Feb/17  Resolved: 22/Feb/17

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

Type: Defect Priority: Major
Reporter: António Nuno Monteiro Assignee: David Nolen
Resolution: Completed Votes: 0
Labels: None

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

 Description   

We shouldn't be declaring these vars on the ClojureScript side, as they can lead to runtime errors when trying to call those functions from the self-hosted compiler. Putting them under reader conditionals enables emitting warnings when they are used.



 Comments   
Comment by David Nolen [ 22/Feb/17 6:58 AM ]

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





[CLJS-1949] Self-host: cljs.compiler/munge doesn't preserve JVM compiler semantics Created: 21/Feb/17  Updated: 22/Feb/17  Resolved: 22/Feb/17

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

Type: Defect Priority: Major
Reporter: António Nuno Monteiro Assignee: David Nolen
Resolution: Completed Votes: 0
Labels: None

Attachments: Text File CLJS-1949.patch    
Patch: Code and Test

 Comments   
Comment by António Nuno Monteiro [ 21/Feb/17 5:17 PM ]

Attached patch with fix and test.

Comment by Mike Fikes [ 21/Feb/17 5:30 PM ]

FWIW, I tried the attached patch downstream with Planck and it worked. Prior to the patch, I observed this behavior:

cljs.user=> (.catch (js/Promise. #(%2 "x")) #(println %))
(new Promise((function (p1__20_SHARP_,p2__19_SHARP_){
return p2__19_SHARP_.call(null,"x");
}))).catch$ is not a function. (In '(new Promise((function (p1__20_SHARP_,p2__19_SHARP_){
return p2__19_SHARP_.call(null,"x");
}))).catch$((function (p1__21_SHARP_){
return cljs.core.println.call(null,p1__21_SHARP_);
}))', '(new Promise((function (p1__20_SHARP_,p2__19_SHARP_){
return p2__19_SHARP_.call(null,"x");
}))).catch$' is undefined)

And with the patch:

cljs.user=> (.catch (js/Promise. #(%2 "x")) #(println %))
x
#object[Promise [object Promise]]
Comment by David Nolen [ 22/Feb/17 6:56 AM ]

fixed https://github.com/clojure/clojurescript/commit/025dd9d3e57f1955fd442b9f69823c892a38cb58





[CLJS-1950] Eliminate instances of #^ Created: 21/Feb/17  Updated: 22/Feb/17  Resolved: 22/Feb/17

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-1950.patch    
Patch: Code

 Description   

With CLJS-1636 I had, without thinking, blindly followed the existing pattern used to mark def s as private, employing

#^:private

This ticket is to remove those new and the existing instance of this older syntax.



 Comments   
Comment by David Nolen [ 22/Feb/17 6:52 AM ]

fixed https://github.com/clojure/clojurescript/commit/6325a29612b6266ee786ce49a83f12566708e696





[CLJS-1943] Self-host: `cljs.pprint`'s macros can't be compiled Created: 15/Feb/17  Updated: 20/Feb/17  Resolved: 20/Feb/17

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

Type: Defect Priority: Major
Reporter: António Nuno Monteiro Assignee: David Nolen
Resolution: Completed Votes: 0
Labels: bootstrap

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

 Comments   
Comment by António Nuno Monteiro [ 15/Feb/17 6:46 PM ]

Attached patch with fix and enabled running the cljs.pprint tests when running the self-parity tests.

Comment by David Nolen [ 20/Feb/17 1:50 PM ]

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





[CLJS-1945] cljs.spec/every-impl kind-fn kind-form dead code Created: 18/Feb/17  Updated: 20/Feb/17  Resolved: 20/Feb/17

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

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

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

 Description   

With Clojure 386e7e6 a [kindfn kindform] let was removed here

https://github.com/clojure/clojure/commit/386e7e63485bcb7bed050df2c2b54a6ceca05e5f#diff-b0f91f319d0c76aadf667da929b08d37L1031

this upstream revision was not copied in ClojureScript 1a297c5 around here:

https://github.com/clojure/clojurescript/commit/1a297c52d958520065335815ffb3dee07c314aa7#diff-5c48ec6d047e1ea6fdcdd00b4f09f45eR729

and is currently dead code that could be removed.



 Comments   
Comment by David Nolen [ 20/Feb/17 11:01 AM ]

fixed https://github.com/clojure/clojurescript/commit/7326d79001f2fbbb2ee4086b1f645cab374c0e58





[CLJS-1944] Can't spec generate non-vector collections Created: 18/Feb/17  Updated: 20/Feb/17  Resolved: 20/Feb/17

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: None

Attachments: Text File CLJS-1944.patch    
Patch: Code and Test

 Description   

If you use cljs.spec/coll-of with non-vector :kind, you can't exercise the spec.

Repro:

$ java -jar cljs.jar -m cljs.repl.node
ClojureScript Node.js REPL server listening on 58736
To quit, type: :cljs/quit
cljs.user=> (require '[clojure.spec :as s] 'clojure.test.check.generators)
true
cljs.user=> (s/exercise (s/coll-of string? :kind set?))
Error: Couldn't satisfy such-that predicate after 100 tries.
...


 Comments   
Comment by Mike Fikes [ 18/Feb/17 11:48 AM ]

This is a cut-n-dry defect simply involving missing this Clojure deletion:

https://github.com/clojure/clojure/commit/23e3ec3f8bceeedee70beed7a17846c25eba05a6#diff-b0f91f319d0c76aadf667da929b08d37L1208

in this ClojureScript tracking change here:

https://github.com/clojure/clojurescript/commit/cd43ec9bf40605e230dc8858c2855f9ad85b39d8#diff-5c48ec6d047e1ea6fdcdd00b4f09f45eL702

The consequence is that gen-into is always non-nil (set to []) and then kind is not made use of here: https://github.com/clojure/clojurescript/blob/627f7fd513d928531db48392d8f52142fea5eb38/src/main/cljs/cljs/spec.cljs#L890-L891

Comment by David Nolen [ 20/Feb/17 10:57 AM ]

fixed https://github.com/clojure/clojurescript/commit/77d9077c04f61a19d86e67d18bd7c93217e88aa3





[CLJS-1946] Self-hosted: don't emit `goog.require` calls for foreign libs if optimizations different than `:none` Created: 18/Feb/17  Updated: 20/Feb/17  Resolved: 20/Feb/17

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

Type: Defect Priority: Minor
Reporter: António Nuno Monteiro Assignee: David Nolen
Resolution: Completed Votes: 0
Labels: None

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

 Description   

This is done in JVM CLJS but not in self-hosted.



 Comments   
Comment by David Nolen [ 20/Feb/17 10:53 AM ]

fixed https://github.com/clojure/clojurescript/commit/23beecb7e0b752c98cacebfe0aff3879eab0f0e1





[CLJS-1947] cljs.spec "and" passes :cljs.spec/invalid in next spec after failed if there are 4+ sub-specs Created: 19/Feb/17  Updated: 20/Feb/17  Resolved: 20/Feb/17

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

Type: Defect Priority: Minor
Reporter: Vlad Protsenko Assignee: Unassigned
Resolution: Not Reproducible Votes: 0
Labels: bug, clojurescript, spec


 Description   

This bug affects version 1.9.473, but I could not select it in select box, and I did not test it on other versions.

;; This code will print :cljs.spec/invalid once:
(s/conform (s/and pos? println println println) 0)
:cljs.spec/invalid
=> :cljs.spec/invalid

;; This code does not print anything
(s/conform (s/and pos? println println) 0)
=> :cljs.spec/invalid


 Comments   
Comment by Mike Fikes [ 19/Feb/17 9:26 PM ]

Duplicate of CLJS-1935.

Confirmed via git bisect that https://github.com/clojure/clojurescript/commit/ff0b11c123bf46d9e0efff164a7327fb269d2262 fixed the issue reported in this ticket.





Generated at Mon Feb 27 01:09:45 CST 2017 using JIRA 4.4#649-r158309.