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.