That would work. Yet now I'm back to remembering to update that line of code 
equating self to its function name at each use.

My desire for "self" as a keyword is in looking for a way to use contextual 
information the compiler already knows about and can easily employ.

Best regards,
Rick C. Hodgin

-------- Original Message --------
 From: Václav Zeman <vhais...@gmail.com>
 Sent: Fri, Jun 15, 2012 08:08 AM
 To: Oleg Endo <oleg.e...@t-online.de>
 CC: Rick C. Hodgin <foxmuldrs...@yahoo.com>; David Brown 
<david.br...@hesbynett.no>;   Joe Buck <joe.b...@synopsys.com>; Ian Lance 
Taylor <i...@google.com>;   gcc@gcc.gnu.org <gcc@gcc.gnu.org>
 Subject: Re: "self" keyword

>On 14 June 2012 22:42, Oleg Endo wrote:
>> On Thu, 2012-06-14 at 16:34 -0400, Rick C. Hodgin wrote:
>>> David,
>>>
>>> Well, I probably don't have a NEED for it.  I've gotten along for 25+
>>> years without it. :-)
>>>
>>> However, what prompted my inquiry is using it would've saved me tracking
>>> down a few bugs in recent weeks.  Some prior code was re-used for a
>>> similar function, but the name of the recursive calls weren't updated in
>>> every case.  It didn't take long to debug, but I realized that had it
>>> always been written as self() it never would've been an issue.
>>>
>>> I can also see a use for generated code where there's a base source code
>>> template in use with an embedded include file reference that changes as
>>> it's generated per pass, such as:
>>>
>>> int step1(int a, int b)
>>> {
>>>      #include "\current_task\step1.cpp"
>>> }
>>>
>>> int step2(int a, int b)
>>> {
>>>      #include "\current_task\step2.cpp"
>>> }
>>>
>>> Using the self() reference for recursion, one could modify stepN.cpp's
>>> generator algorithms without having to know or care anything in the
>>> wrapper code.
>>
>> Wouldn't this do?
>>
>> #define __self__ step1
>> int __self__ (int a, int b)
>> {
>>  #include "something"
>>  __self__ (x, y);
>> }
>> #undef __self__
>You can already do this with GCC in C and C++ (minus problems with
>overloaded functions) like this:
>
>#define DECLSELF(f,self) __typeof__ (&f) self = f
>
>int foo (int n)
>{
>    DECLSELF(foo, self);
>
>    if (n == 0)
>        return 0;
>    else
>    {
>        return 1 + self (n - 1);
>    }
>}
>
>-- 
>VZ

Reply via email to