<br><br><div class="gmail_quote">On Wed, Sep 15, 2010 at 15:19, Robby Findler <span dir="ltr">&lt;<a href="mailto:robby@eecs.northwestern.edu">robby@eecs.northwestern.edu</a>&gt;</span> wrote:<br><blockquote class="gmail_quote" style="margin: 0pt 0pt 0pt 0.8ex; border-left: 1px solid rgb(204, 204, 204); padding-left: 1ex;">

The class exists at runtime, not at compile time, so you can&#39;t just<br>
take an identifier like that and get the names of the methods back.<br>
(This is a fundamental difference between our class system and ones<br>
like in Java. See<br>
<a href="http://www.eecs.northwestern.edu/%7Erobby/pubs/papers/aplas2006-fff.pdf" target="_blank">http://www.eecs.northwestern.edu/~robby/pubs/papers/aplas2006-fff.pdf</a><br>
for more info about the high level properties of the class system.)<br>
<br>
At least not with the current class system. You can, however, define a<br>
macro, something like:<br>
<br>
(define-class &lt;name&gt; &lt;class-expr&gt;)<br>
<br>
and then have define-class inspect the class-expr to find the method<br>
names (note you&#39;ll have to use local-expand to make this work) and put<br>
that information into &lt;name&gt; at compile time.<br></blockquote><div><br>Or maybe I can define a% in a separate module and require it for-syntax either?<br><br>So here is where I am right now:<br><br>#lang racket<br>

<br>(require <br>  &quot;a.rkt&quot;<br>  (for-syntax &quot;a.rkt&quot;))<br><br>(define-syntax-rule (define-singleton-sender fun obj meth)<br>  (define-syntax-rule (fun args (... ...))<br>    (send (obj) meth args (... ...))))<br>

<br>(define-syntax (class-&gt;singleton stx)<br>  (syntax-case stx ()<br>    [(_ cl obj)<br>     (with-syntax ([(name ...)<br>                    (interface-&gt;method-names (class-&gt;interface a%))]) ; ***<br>       #&#39;(begin (define-singleton-sender name obj name)<br>

                ...))]))<br><br>(define current-a (make-parameter (new a% [a 3])))<br><br>(class-&gt;singleton a% current-a)<br><br>This works for class a%, but only for this one, as I don&#39;t know how to pass a%<br>
as an argument to the macro (note the a% on line ***).<br>How can I do that?<br>
<br>
<br> </div><blockquote class="gmail_quote" style="margin: 0pt 0pt 0pt 0.8ex; border-left: 1px solid rgb(204, 204, 204); padding-left: 1ex;">
<br>
hth,<br>
<font color="#888888">Robby<br>
</font><div><div></div><div class="h5"><br>
On Wed, Sep 15, 2010 at 7:50 AM, Laurent &lt;<a href="mailto:laurent.orseau@gmail.com">laurent.orseau@gmail.com</a>&gt; wrote:<br>
&gt; Dear all,<br>
&gt;<br>
&gt; Apparently I still don&#39;t have my macro writing licence.<br>
&gt; I&#39;m stuck somewhere around syntax-case and with-syntax.<br>
&gt;<br>
&gt; Here is my problem.<br>
&gt; Suppose something like this:<br>
&gt;<br>
&gt; (define-syntax (class-&gt;singleton stx)<br>
&gt;   (syntax-case stx ()<br>
&gt;     [(_ cl)<br>
&gt;      (with-syntax ([(name ...)<br>
&gt;                     (interface-&gt;method-names (class-&gt;interface #&#39;cl))]) ;<br>
&gt; ***<br>
&gt;        #&#39;(begin (define-something name)<br>
&gt;                 ...))]))<br>
&gt;<br>
&gt; (class-&gt;singleton a%)<br>
&gt;<br>
&gt; On line *** I want to match (name ...) with the list of method-names of<br>
&gt; the given class (here a%).<br>
&gt; Obviously, this is wrong, since #&#39;cl is just a syntaxed identifier IIUC,<br>
&gt; but should be the class itself.<br>
&gt; datum-&gt;syntax and syntax-&gt;datum don&#39;t help either, so what should I do?<br>
&gt; Any hint (even an RTFM link) would be appreciated.<br>
&gt;<br>
&gt; Thanks,<br>
&gt; Laurent<br>
&gt;<br>
&gt;<br>
&gt;<br>
</div></div><div><div></div><div class="h5">&gt; _________________________________________________<br>
&gt;  For list-related administrative tasks:<br>
&gt;  <a href="http://lists.racket-lang.org/listinfo/users" target="_blank">http://lists.racket-lang.org/listinfo/users</a><br>
&gt;<br>
</div></div></blockquote></div><br>