Re: [Fwd: Re: [sv-bc] P1800-2008 draft 4 pg 526]

From: Greg Jaxon <Greg.Jaxon_at_.....>
Date: Tue Mar 04 2008 - 16:50:27 PST
Coffin, Eric wrote:
> Greg,
> 
> If the macro use "`sna(ke+1)" expands to "666 + 69 + 69 + ke+1 + ke+"1
> then the identifier "foo" must be treated inconsistently within the
> macro body.  This expansion implies that within the macro body foo is
> both a macro formal and a name of a macro.  This seems overly complex. 
> Moreover, this interpretation would prevent our ability to write macros
> that expand to different macros such as MACRO_1 in this example:
> 
> `define MACRO_1(a) `a
> `define MACRO_2 two
> `define MACRO_3 three
> 
> module A;
> reg `MACRO_1(MACRO_2);
> reg `MACRO_1(MACRO_3);
> endmodule

It doesn't block this feature, but it would require different syntax.
Under reading (a), the macro invocation `a is a token.  Therefore to
get the indirection used here, maybe you'd apply token gluing:

   `define MACRO_1(a) ```a

Oops, that's pretty darn ambiguous isn't it?  I think we have another
glitch with the token view of `text_macro_identifier.

> If we treat all occurrences of "foo" within the body of "sna" as a
> formal, we need not worry about the context of an identifier within a
> macro body.  Identifiers within the body of macro are always formals if
> they match the name of a formal.  "666 + 42+1 + 42+1 + ke+1 + ke+1"
> seems logical to me for the expansion of 'sna(ke+1).

Yes, this is also pretty consistent.  It is also the answer given by
some key products, so it's the path of least resistance.  Maybe we should
call this issue resolved.

Thanks for everyone's ideas,
Greg

> 
> -Eric
> 
> Greg Jaxon wrote:
>> Coffin, Eric wrote:
>>
>>  
>>> Greg,
>>>
>>> How about another option:
>>>
>>> d) 666 + 42 + 42 + ke + ke
>>>
>>> Wouldn't that make more sense if the use of 'foo' and '\foo' were
>>> first substituted with ke and then the body were further expanded?
>>>
>>> -Eric
>>>     
>>
>> Yes, that's actually what I meant to write for (b), sorry.  It's the
>> next most
>> sensible answer once escaped names are made secure.  The power for a
>> macro
>> to invoke an actual argument as a macro looks nice in such a small
>> example.
>> Expanding `sna(ke+1) as  666 + 42+1 + 42+1 + ke+1 + ke+1  looks less
>> appealing than           666 + 69 + 69 + ke+1 + ke+1 .
>>
>> My related question about the "tokenness" of `identifier also sets up
>> the question of whether getting ` and ke together in this example doesn't
>> perhaps require token gluing.  If not, then can I:
>>
>> `     define foo tasking4it
>>       always begin `
>>          foo( arg1, arg2 );
>>       end
>>
>>       task tasking4it( a, b );
>>         ...
>>       endtask
>>
>> ?
>>
>> Greg
>> Greg Jaxon wrote:
>>  
>>>  `define \foo(3)  666
>>>  `define sna(foo) `\foo(3)  + `\foo  + `foo + \foo  + foo
>>>  `define foo 69
>>>  `define ke 42
>>>
>>> Does  `sna(ke)  expands to:
>>>
>>>   a)  666 + 69 + 69 + ke + ke
>>>   b)  `\ke(3) + `42 + `42 + 42 + 42       // with errors of course
>>>   c)  `\ke(3) + `\ke  + `42 + \ke  + 42   // also errors
>>>
>>>
>>>       
>>
>>
>>   


-- 
This message has been scanned for viruses and
dangerous content by MailScanner, and is
believed to be clean.
Received on Tue Mar 4 16:58:17 2008

This archive was generated by hypermail 2.1.8 : Tue Mar 04 2008 - 16:58:49 PST