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]> 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]> 
> > 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].
> 
> >
> 
> > To post to this group, send email to [email protected].
> 
> >
> 
> > 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].
> 
> To post to this group, send email to [email protected].
> 
> 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].
To post to this group, send email to [email protected].
Visit this group at http://groups.google.com/group/clojurescript.

Reply via email to