Google Closure needs to know about constructors. This is why we have JSDoc support.
On Sunday, June 7, 2015, Alice Bellard <[email protected]> wrote: > On Sunday, June 7, 2015 at 10:58:38 PM UTC+9, David Nolen wrote: > > 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] <javascript:;>> > 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. > > With :optimizations :none, the code compiles to > > // Compiled by ClojureScript 0.0-3308 {} > goog.provide('my.core'); > goog.require('cljs.core'); > my.core.Foo = (function my$core$Foo(){ > return goog.base(this); > }); > goog.inherits(my.core.Foo,Object); > > I'm not sure how "@constructor" JSDoc can help here. I'm not dealing with > a javascript source file, it's clojurescript code, and aren't JSDoc > attributes optional? > > -- > 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.
