I got to the bottom of it. It's almost embarrassing to say. But the path to 
the w3c_audio.js extern file was wrong. Unfortunately, lein doesn't give 
any sort of warning or error if any of the externs files don't exist. I'm 
not sure if it's a cljsbuild issue, or a clojurescript issue, or a google 
closure compiler issue.

So I am thinking I'll give adding this warning (or error?) to clojurescript 
a go. I notice in clojurescript source that closure.clj deals with running 
the closure compiler. I can see exactly where I want to add the warning (or 
tweak the calling of google closure compiler). I could do this, but I'm 
having trouble now running a locally built clojurescript. 

I've checked it out. Added some debug. Then I build a jar with 'lein jar'. 
I upload it to a local maven repository. I add that repository to my 
project-with-the-missing-extern's project.clj. I lein deps. It grabs the 
new jar. I lein cljsbuild, and the build begins, but then the build 
explodes with:

Exception in thread "main" java.io.FileNotFoundException: Could not locate 
clojure/data/json__init.class or clojure/data/json.clj on classpath: , 
compiling:(cljs/source_map.clj:1:1)
...
Caused by: java.io.FileNotFoundException: Could not locate 
clojure/data/json__init.class or clojure/data/json.clj on classpath: 

So this is now off the original topic, but how do you work on clojurescript 
itself? What step am I missing thats leading to the missing 
clojre/data/json.clj class on the classpath? What's the best workflow for 
hacking clojurescript itself?

Regards

Crispin

On Wednesday, January 28, 2015 at 11:29:25 PM UTC+8, David Nolen wrote:
>
> Run a `lein deps :tree` to compare the version of the Google Closure 
> Compiler you are getting.
>
> David
>
> On Wed, Jan 28, 2015 at 9:58 AM, Crispin Wellington <retrogr...@gmail.com 
> <javascript:>> wrote:
>
>> OK something very strange is going on. I tried the let block, and it was 
>> the same in my project. 
>>
>> So I created a new minimal project, lein new mies test-sound, and made a 
>> minimal test: https://github.com/retrogradeorbit/test-sound
>>
>> And here it works!
>>
>> Go back to my old project, and it doesn't.
>>
>> So now I have to go and gradually work through the project differences to 
>> see what's causing this. If I find anything, I'll post it.
>>
>> Thanks for your help
>>
>> Crispin
>>
>> On Wednesday, January 28, 2015 at 10:06:52 PM UTC+8, David Nolen wrote:
>>>
>>> I mentioned trying this in a `let` binding instead. What happens when 
>>> you try that?
>>>
>>> David
>>>
>>> On Wed, Jan 28, 2015 at 9:04 AM, Crispin Wellington <
>>> retrogr...@gmail.com> wrote:
>>>
>>>> No, that's not it. So I tried:
>>>>
>>>> (def audio-context (js/AudioContext.))
>>>> (.decodeAudioData audio-context (js/ArrayBuffer. 256) #(println "ok" %) 
>>>> #(println "error" %))
>>>>
>>>> and it compiled to:
>>>>
>>>> ;var zv = new AudioContext;
>>>> zv.Rd(new ArrayBuffer(256), function(a) {
>>>>   return fo.c(mh(["ok", a], 0));
>>>> }, function(a) {
>>>>   return fo.c(mh(["error", a], 0));
>>>> });
>>>>
>>>> This has really got me stumped.
>>>>
>>>> Crispin
>>>>
>>>>
>>>> On Wednesday, January 28, 2015 at 6:23:29 PM UTC+8, Thomas Heller wrote:
>>>>>
>>>>> I just have a guess for you.
>>>>>
>>>>> AudioContext.decodeAudioData parameters are declared as ArrayBuffer, 
>>>>> Function, Function but you are passing "data" which is a String not an 
>>>>> ArrayBuffer. Maybe the type inference thinks you are calling a method 
>>>>> that 
>>>>> is not defined in the externs?
>>>>>
>>>>> Maybe it will work if you pass an ArrayBuffer? Other than that I see 
>>>>> no reason why it would munge the name.
>>>>>
>>>>> /thomas
>>>>>
>>>>> On Wednesday, January 28, 2015 at 2:14:31 AM UTC+1, Crispin Wellington 
>>>>> wrote:
>>>>>>
>>>>>> Hi there,
>>>>>>
>>>>>> I have been trying to compile some audio code in clojurescript in 
>>>>>> advanced mode. I have setup the w3c_audio.js extern (from: 
>>>>>> http://closureplease.com/externs/) into my extern list. When I 
>>>>>> compile, it prevents the munging of "AudioContext" (without the extern, 
>>>>>> this is being munged, so the extern is 'working'). But it doesn't 
>>>>>> prevent 
>>>>>> the munging of methods on AudioContext object. 
>>>>>>
>>>>>> A super minimal example (but not working code):
>>>>>>
>>>>>> (def audio-context (js/AudioContext.))
>>>>>> (.decodeAudioData audio-context "data" #(println "ok" %) #(println 
>>>>>> "error" %))
>>>>>>
>>>>>> compiles with advanced to:
>>>>>>
>>>>>> ;var zv = new AudioContext;
>>>>>> zv.Rd("data", function(a) {
>>>>>>   return fo.c(mh([a], 0));
>>>>>> }, function() {
>>>>>>   return(0).call(null);
>>>>>> });
>>>>>>
>>>>>> zv.Rd is wrong. It should be zv.decodeAudioData.
>>>>>>
>>>>>> The externs file does indeed have this function prototype. here are 
>>>>>> the excerpts:
>>>>>>
>>>>>> /**
>>>>>>  * @constructor
>>>>>>  */
>>>>>> var AudioContext = function() {};
>>>>>>
>>>>>> ....
>>>>>>
>>>>>> /**
>>>>>>  * @param {ArrayBuffer} audioData
>>>>>>  * @param {Function} successCallback
>>>>>>  * @param {Function=} errorCallback
>>>>>>  */
>>>>>> AudioContext.prototype.decodeAudioData = function(audioData, 
>>>>>> successCallback,
>>>>>>     errorCallback) {};
>>>>>>
>>>>>> Why would closure compiler protect the AudioContext name, but munge 
>>>>>> the decodeAudioData name? What am I doing wrong?
>>>>>>
>>>>>> Regards
>>>>>>
>>>>>> Crispin Wellington
>>>>>>
>>>>>>
>>>>>>  -- 
>>>> You received this message because you are subscribed to the Google
>>>> Groups "Clojure" group.
>>>> To post to this group, send email to clo...@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+u...@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 unsubscribe from this group and stop receiving emails from it, send 
>>>> an email to clojure+u...@googlegroups.com.
>>>> For more options, visit https://groups.google.com/d/optout.
>>>>
>>>
>>>  -- 
>> You received this message because you are subscribed to the Google
>> Groups "Clojure" group.
>> To post to this group, send email to clo...@googlegroups.com 
>> <javascript:>
>> Note that posts from new members are moderated - please be patient with 
>> your first post.
>> To unsubscribe from this group, send email to
>> clojure+u...@googlegroups.com <javascript:>
>> 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 unsubscribe from this group and stop receiving emails from it, send an 
>> email to clojure+u...@googlegroups.com <javascript:>.
>> For more options, visit https://groups.google.com/d/optout.
>>
>
>

-- 
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 unsubscribe from this group and stop receiving emails from it, send an email 
to clojure+unsubscr...@googlegroups.com.
For more options, visit https://groups.google.com/d/optout.

Reply via email to