Path names in :advanced compile

95 views
Skip to first unread message

Andrew S

unread,
Feb 3, 2015, 3:30:18 AM2/3/15
to clojur...@googlegroups.com
In my advanced compile, I see lots of lines that look like this:

return new qB(c,b,sB,new s(null,5,[T,66,V,102,Qe,3,Re,34,Se,"/path/to/cljs/file/core.cljs"],null))};

My only guess is that it has something to do with source maps, but my project.clj has zero mention of source maps anywhere.

One item I do have in my build setting in project.cljs is this: :omit-source true

Anyone know what these are? It doesn't make sense to me that the original cljs source would be referred to in any way in an advanced compilation.

Andrew

Thomas Heller

unread,
Feb 3, 2015, 7:27:16 AM2/3/15
to clojur...@googlegroups.com

Can you look at the pre-optimized js sources and grep for that string? It might be a macro of a library. Hard to tell without knowing what that thing actually is. It looks like something var-ish (ie. :line, :column, :file, ...).

Anyways look at the js files to see the full context, should make it obvious what it is.

Mike Fikes

unread,
Feb 3, 2015, 10:30:51 AM2/3/15
to clojur...@googlegroups.com
Try the :pseudo-names compiler option to see what the :advanced code is referring to (https://github.com/clojure/clojurescript/wiki/Compiler-Options#pseudo-names).

Andrew S

unread,
Feb 3, 2015, 10:57:51 AM2/3/15
to clojur...@googlegroups.com
Grepping over the files created by a :none optimization reveals the
path in places like this:

cljs.core.PersistentArrayMap(null, 5, [new
cljs.core.Keyword(null,"end-column","end-column",1425389514),55,new
cljs.core.Keyword(null,"end-line","end-line",1837326455),101,new
cljs.core.Keyword(null,"column","column",2078222095),3,new
cljs.core.Keyword(null,"line","line",212345235),96,new
cljs.core.Keyword(null,"file","file",-1269645878),"/Users/andrew/path/to/file.cljs"],
null)));

Does this shed any light on the cause of this? I have no idea what
this cljs.core.Keyword is doing with a file path.

On Tue, Feb 3, 2015 at 4:30 PM, Mike Fikes <mikef...@gmail.com> wrote:
> Try the :pseudo-names compiler option to see what the :advanced code is referring to (https://github.com/clojure/clojurescript/wiki/Compiler-Options#pseudo-names).
>
> --
> Note that posts from new members are moderated - please be patient with your first post.
> ---
> You received this message because you are subscribed to a topic in the Google Groups "ClojureScript" group.
> To unsubscribe from this topic, visit https://groups.google.com/d/topic/clojurescript/6qSmNpSQeI4/unsubscribe.
> To unsubscribe from this group and all its topics, send an email to clojurescrip...@googlegroups.com.
> To post to this group, send email to clojur...@googlegroups.com.
> Visit this group at http://groups.google.com/group/clojurescript.



--
hellofunk

David Nolen

unread,
Feb 3, 2015, 11:37:05 AM2/3/15
to clojur...@googlegroups.com
Looks like metadata leakage. Need a minimal example though.

Thanks,
David

You received this message because you are subscribed to the Google Groups "ClojureScript" group.
To unsubscribe from this group and stop receiving emails from it, send an email to clojurescrip...@googlegroups.com.

Andrew S

unread,
Feb 3, 2015, 11:38:52 AM2/3/15
to clojur...@googlegroups.com
I can try to produce an example if I know where to start. There is
nowhere in my app that I am specifying a path to a file, so I'm not
sure where this is happening.

David Nolen

unread,
Feb 3, 2015, 12:29:33 PM2/3/15
to clojur...@googlegroups.com
The problem is metadata leakage. This has nothing to do with specifying paths in your code. Somewhere you are writing map literals (perhaps in a macro?) and compiler metadata is leaking.

David

Andrew S

unread,
Feb 3, 2015, 12:35:38 PM2/3/15
to clojur...@googlegroups.com
Ok, can you clarify the type of map literal that would do this? I have
not written any of my own macros on this app, but perhaps a library I
depend on has them. By map literal, do you just mean a {:foo :bar}
type of syntax, or something else? I also have not added any metadata
myself to anything in the app using the caret or with-meta syntax.

David Nolen

unread,
Feb 3, 2015, 12:40:47 PM2/3/15
to clojur...@googlegroups.com
Yes {:foo :bar}

David

Andrew S

unread,
Feb 3, 2015, 12:50:51 PM2/3/15
to clojur...@googlegroups.com
Ok, I'm sorry if I'm missing the train of thought on this, but how
does any ordinary clojure(script) map lead to what you call metadata
leakage that contains paths to files? Of course I use maps all over
the place (doesn't everyone?), but I don't see how this connects to
the problem I'm having.

David Nolen

unread,
Feb 3, 2015, 1:06:11 PM2/3/15
to clojur...@googlegroups.com
You have as much of an idea why this happening as I do.

Which is zero :)

Without a minimal reproducer there is nothing for anyone to do.

You need to sort yourself what line of your ClojureScript or your ClojureScript dependencies is generating these maps.

Then maybe someone can offer a solution.

David

Francis Avila

unread,
Feb 3, 2015, 1:15:15 PM2/3/15
to clojur...@googlegroups.com
Andrew, the metadata you are seeing is added by the CLJS compiler to the Clojure objects it creates as it is reading CLJS code. You did not add it explicitly in your code anywhere, and we're not saying you did.

The problem here is that the metadata did not *stay* in Clojure but got emitted into the compiled js code.

So what likely happened is that some *Clojure* code (e.g. cljs a macro) emitted an object constructed by the Compiler, but the metadata on that object was not stripped out before being emitted as js code.

We need a minimum reproducible case. Here is a possibility to explore:

;;CLJ code
(defmacro macro-identity [x] x)

;; CLJS code
(def do-i-have-extra-metadata? (macro-identity {:foo :bar}))


Then see if the compiled output of do-i-have-extra-metadata? has extra metadata.

If that does not seem to work, look for places in your codebase where some object is crossing from clojurescript->clojure->clojurescript. Start with Clojure macros.

Andrew S

unread,
Feb 3, 2015, 1:26:48 PM2/3/15
to clojur...@googlegroups.com
Thanks, this helps, I'll try to track it down. I've made some slight
progress in that a closer inspection of the grep results shows that
the only JS files where these paths are showing up are files in which
I define Om components, all my other JS files unrelated to Om do not
show these paths. I'll see what I can find further.

Andrew S

unread,
Feb 3, 2015, 1:58:51 PM2/3/15
to clojur...@googlegroups.com
Ok, I managed to create an easy reproduction of this. The problem goes
away when I roll back my version of clojurescript.

I have a simple lein template I use for various things. Its
dependencies are listed here:

https://github.com/hellofunk/hellofunk-lein-template/blob/master/resources/leiningen/new/hellofunk/project.clj

If I do a "lein cljsbuild once" on a project generated by this
template, without adding any new code, I get a line like this in my JS
output:

cljs.core.Keyword(null,"file","file",-1269645878),"/path/to/project/core.cljs"],
null)));

If I change the dependency to this:

[org.clojure/clojurescript "0.0-2311"]

The problem goes away!

Hope this will help point in the right direction, if anyone has some advice.
--
hellofunk

David Nolen

unread,
Feb 3, 2015, 2:02:25 PM2/3/15
to clojur...@googlegroups.com
Have you tested against 0.0-2760?

David

Andrew S

unread,
Feb 3, 2015, 2:10:44 PM2/3/15
to clojur...@googlegroups.com
Yes. 2760 issue remains.

David Nolen

unread,
Feb 3, 2015, 2:21:18 PM2/3/15
to clojur...@googlegroups.com
Ok will take a look with your template and see what I can see.

Thanks,
David

David Nolen

unread,
Feb 3, 2015, 2:25:44 PM2/3/15
to clojur...@googlegroups.com
Here's the issue for tracking purposes http://dev.clojure.org/jira/browse/CLJS-1001

David

Andrew S

unread,
Feb 3, 2015, 2:36:00 PM2/3/15
to clojur...@googlegroups.com
Thanks David.

Immo Heikkinen

unread,
Feb 4, 2015, 2:26:00 AM2/4/15
to clojur...@googlegroups.com
Seems to be related to reify. I updated the issue with minimal repro example:

(defprotocol Foo (foo [_]))

(defn new-foo []
  (reify Foo (foo [_])))

(new-foo)
Reply all
Reply to author
Forward
0 new messages