Module name compile time constant?

Bill Baxter dnewsgroup at billbaxter.com
Tue Apr 15 16:35:54 PDT 2008


Simen Kjaeraas wrote:
> On Tue, 15 Apr 2008 17:56:32 +0200, Spacen Jasset 
> <spacenjasset at yahoo.co.uk> wrote:
> 
>> davidl wrote:
>>> 在 Tue, 15 Apr 2008 15:12:13 +0800,Janice Caron 
>>> <caron800 at googlemail.com> 写道:
>>>
>>>> On 15/04/2008, davidl <davidl at 126.com> wrote:
>>>>>  I want some magic of module.name to get the current module name in 
>>>>> compile
>>>>> time string form.
>>>>
>>>> Yeah, basically you want to add __MODULE__ to the list of "special 
>>>> tokens" in
>>>> http://digitalmars.com/d/2.0/lex.html
>>>>
>>>> I think it would be easy for Walter to add, and I don't think it's
>>>> particularly controversial, so why not just go ahead and add an
>>>> enhancement request to Bugzilla.
>>>  I'm looking for a cleaner solution.
>>> __SPEC_TOKEN__ for me looks like a hack.
>>>  and it's not so well defined if my app doesn't have a module 
>>> declaration section?
>>> should the compiler stop the compilation?
>>>
>> __MODULE__ seems reasonable to me. It's in line with __FILE__ and 
>> __LINE__ and __FUNC__ (which seems absent, from dmd 1 anyway)
>>
>> If you have no module definition, then presumably it could be "" or 
>> whatever module the compiler considers it is when that happens 
>> according to the current rules.
>>
>> They look a bit like C preprocessor type macros, but really they 
>> aren't so much, at any rate there is none of the problems you get with 
>> C style macros and so they don't seem like a hack to me.
>>
>> What alternative did you have in mind?
> 
> 
> One could argue that a more D-style way to do it would be along the lines
> of preprocessor.line, preprocessor.file, and so on. It looks less like a
> hack and more like a real part of the language. One could possibly add
> other things to this preprocessor object as well, for instance a list of
> version statements, and I'm sure there are other ideas floating around.

+1

Good point!  Maybe it should still have a preprocessor macro feel 
though, with underscores, like

   __ID(line) or __ID__(file), etc. (akin to __traits(...))

I guess pretending it's an object and using . access would be ok too.

   __ID.line or __ID__.file, etc.



--bb



More information about the Digitalmars-d mailing list