Still not quite enough information what is the code generated prior to advanced compilation?
I suspect you need to supply the "@constructor" JSDoc. David On Sunday, June 7, 2015, Alice Bellard <[email protected]> wrote: > On Saturday, June 6, 2015 at 11:24:58 PM UTC+9, David Nolen wrote: > > It seems to me this problem can could be made more minimal than it is. > As it is, it seems like Google Closure itself might be rewriting the code. > I don't see any other way for a gensym to end up used over "this". > > > > > > Need more information via a more minimal case. > > > > > > > > David > > > > > > On Sat, Jun 6, 2015 at 5:56 AM, Dusan Miloradovic <[email protected] > <javascript:;>> wrote: > > Sorry, I thought it was the well known issue. Here is the simplified > macro: > > > > > > > > (defmacro custom-this [] > > > > (list 'js* "this") > > > > ) > > > > > > > > (defmacro test-comp > > > > [tsym tfields bsym & impls] > > > > `(defn ~tsym [~@tfields] > > > > ~@(map (fn[c] > > > > `(this-as this# > > > > (aset this# ~(str c) ~c))) tfields) > > > > ~(if (symbol? (first impls)) > > > > `(goog/base (custom-this)) > > > > (let [[constr-name params & bd] (first impls) > > > > mta (meta constr-name) > > > > ovrrd (when mta (= 'override (:tag mta))) > > > > thsym (gensym "this") > > > > ] > > > > `(this-as ~thsym > > > > ~(when-not ovrrd > > > > ;`(goog/base ~thsym ~@params) > > > > `(goog/base (custom-this) ~@params) > > > > ) > > > > ~@bd))) > > > > (this-as this## this##) > > > > ) > > > > ) > > > > > > > > and the test case in the cljs file: > > > > > > > > (mm/test-comp TestComponent [name] goog.ui.Component) > > > > > > > > generates the following js code: > > > > > > > > testns.TestComponent = (function testns$TestComponent(name){ > > > > var this__18400__auto___26494 = this; > > > > (this__18400__auto___26494["name"] = name); > > > > > > > > var this26491_26495 = this; > > > > var G__26493_26496 = this; > > > > goog.base(G__26493_26496); > > > > > > > > var this_SHARP___18401__auto__ = this; > > > > return this_SHARP___18401__auto__; > > > > }); > > > > > > > > and that fails during the advanced compilation phase with: > > > > ERROR: JSC_BASE_CLASS_ERROR. incorrect use of goog.base: First argument > must be 'this'. > > > > > > > > Thanks, > > > > Dusan > > > > > > > > > > > > -- > > > > Note that posts from new members are moderated - please be patient with > your first post. > > > > --- > > > > 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 [email protected] <javascript:;>. > > > > To post to this group, send email to [email protected] > <javascript:;>. > > > > Visit this group at http://groups.google.com/group/clojurescript. > > I'm also seeing the same error. > > (defn Foo > [] > (goog/base (js* "this"))) > (goog/inherits Foo js/Object) > > (defn Foo > [] > (this-as this > (goog/base this))) > (goog/inherits Foo js/Object) > > Neither does work under advanced compilation mode. > > > Compiling ClojureScript. > Compiling "resources/public/js/compiled/main.js" from ["src-cljs"]... > 6?? 07, 2015 10:24:58 ???? com.google.javascript.jscomp.LoggerErrorManager > println > SEVERE: /C:/workspace/app/target/cljsbuild-compiler-0/my/core.js:7: ERROR > - incorrect use of goog.base: First argument must be 'this'. > return goog.base(G__9818); > ^ > > 6?? 07, 2015 10:24:58 ???? com.google.javascript.jscomp.LoggerErrorManager > printSummary > WARNING: 1 error(s), 0 warning(s) > ERROR: JSC_BASE_CLASS_ERROR. incorrect use of goog.base: First argument > must be 'this'. at /C:/workspace/app/target/cljsbuild-compiler-0/my/core.js > line 7 : 7 > [32mSuccessfully compiled "resources/public/js/compiled/main.js" in > 13.313 seconds. [0m > > -- > Note that posts from new members are moderated - please be patient with > your first post. > --- > 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 [email protected] <javascript:;>. > To post to this group, send email to [email protected] > <javascript:;>. > Visit this group at http://groups.google.com/group/clojurescript. > -- Note that posts from new members are moderated - please be patient with your first post. --- 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 [email protected]. To post to this group, send email to [email protected]. Visit this group at http://groups.google.com/group/clojurescript.
