Thanks for digging.

The mapping of "-" to "_" comes indeed from clojure.lang.Compile/munge which is 
called by cljsh.compiler/munge:

--------------------
user=> (#'cljs.compiler/munge "-")
"_"
user => (clojure.lang.Compiler/munge "-")
"_"
user => (clojure.lang.Compiler/munge "_")
"_"
user => 
--------------------

Looking at the java-source, the reason can be found in the CHAR_MAP mapping 
table in Compiler.java:

--------------------
static final public IPersistentMap CHAR_MAP =
                PersistentHashMap.create('-', "_",
//                                       '.', "_DOT_",
':', "_COLON_",
'+', "_PLUS_",
'>', "_GT_",
'<', "_LT_",
'=', "_EQ_",
'~', "_TILDE_",
'!', "_BANG_",
'@', "_CIRCA_",
'#', "_SHARP_",
'\'', "_SINGLEQUOTE_",
'"', "_DOUBLEQUOTE_",
'%', "_PERCENT_",
'^', "_CARET_",
'&', "_AMPERSAND_",
'*', "_STAR_",
'|', "_BAR_",
'{', "_LBRACE_",
'}', "_RBRACE_",
'[', "_LBRACK_",
']', "_RBRACK_",
'/', "_SLASH_",
'\\', "_BSLASH_",
'?', "_QMARK_");

static public String munge(String name){
        StringBuilder sb = new StringBuilder();
        for(char c : name.toCharArray())
                {
                String sub = (String) CHAR_MAP.valAt(c);
                if(sub != null)
                        sb.append(sub);
                else
                        sb.append(c);
                }
        return sb.toString();
}
--------------------

Note that it's in the first entry of CHAR_MAP - a little obscured by the 
(original) formatting.

What's puzzling is that all mappings use a convention to map the char to a 
_WORD_ , except the "-" which gets mapped to "_" directly.

What's further puzzling is that in the clj-repl this mapping deosn't seemed to 
be used:

--------------------
user=> (def my-var "YES")
#'user/my-var
user => (def my_var "NO")
#'user/my_var
user => my-var
"YES"
swimtimer=> 
--------------------

Guess the AOT compiler uses it but the REPL-one doesn't (???).

Confused - FrankS.


On Sep 24, 2012, at 6:53 AM, Herwig Hochleitner <hhochleit...@gmail.com> wrote:

> 
> Not sure if this has been reported before - I searched JIRA and the mailing 
> list, but couldn't find anything, but it's difficult to search for "_"…
> 
> Bug?
> Mapping limitation?
> 
> This behavior comes from cljs.compiler/munge, I'd say it's a mapping 
> limitation that should be considered a bug.
> A possible fix would be to replace _ with _UNDERSCORE_ in munge.
> 
> Notice that clojure.core/munge has the same limitation and should probably 
> fixed aswell:
> 
> (defn foo-bar []
>   "DASH")
> 
> (defn foo_bar []
>   "UNDERSCORE")
> 
> (defn -main []
>   (println "Dash version: " (foo-bar))
>   (println "Underscore version: " (foo_bar)))
> 
> 
> When AOT compiling this example and running it, it prints:
> 
> Dash version:  UNDERSCORE
> Underscore version:  UNDERSCORE
> 
> as opposed to the expected
> 
> Dash version:  DASH
> Underscore version:  UNDERSCORE
> 
> when running from source.
> 
> -- 
> You received this message because you are subscribed to the Google
> Groups "Clojure" group.
> To post to this group, send email to clojure@googlegroups.com
> Note that posts from new members are moderated - please be patient with your 
> first post.
> To unsubscribe from this group, send email to
> clojure+unsubscr...@googlegroups.com
> For more options, visit this group at
> http://groups.google.com/group/clojure?hl=en

-- 
You received this message because you are subscribed to the Google
Groups "Clojure" group.
To post to this group, send email to clojure@googlegroups.com
Note that posts from new members are moderated - please be patient with your 
first post.
To unsubscribe from this group, send email to
clojure+unsubscr...@googlegroups.com
For more options, visit this group at
http://groups.google.com/group/clojure?hl=en

Reply via email to