Module name compile time constant?

Bill Baxter dnewsgroup at billbaxter.com
Sat Apr 26 17:19:49 PDT 2008


Don wrote:
> Bruno Medeiros wrote:
>> davidl wrote:
>>> 在 Tue, 15 Apr 2008 13:00:57 +0800,Bill Baxter 
>>> <dnewsgroup at billbaxter.com> 写道:
>>>
>>>> Walter Bright wrote:
>>>>> davidl wrote:
>>>>>>
>>>>>> module abc.super.long.pack.awesome.mod;
>>>>>>
>>>>>> what if i need the string of "abc.super.long.pack.awesome.mod" 
>>>>>> generally and don't want to copy paste differently in all my modules?
>>>>>  alias abc.super.long.pack.awesome.mod foo;
>>>>
>>>> I think he wants that full module name as a char[], though.
>>>>
>>>> Is that what you want, Davidl?
>>>>
>>>> Or do you just want to be able to say
>>>>
>>>>
>>>>     import short.awesome; // aka "import 
>>>> abc.super.long.pack.awesome.mod"
>>>>
>>>> If that's what you want you can create a module in short/awesome.d 
>>>> that contains just:
>>>>
>>>>    module short.awesome;
>>>>    public import abc.super.long.pack.awesome.mod;
>>>>
>>>> But somehow I'm thinking you actually want to automatically get that 
>>>> module name as a string.
>>>>
>>>> How about going the other way around?  Start with a string?
>>>>
>>>> string foo = "abc.super.long.pack.awesome.mod";
>>>> mixin(import_module(foo));
>>>>
>>>> where import_module  is
>>>>
>>>> string import_module(string name) {
>>>>     return "import " ~ name ";" ;
>>>> }
>>>>
>>>> If those don't answer your question you're gonna have to be more 
>>>> specific.
>>>>
>>>>
>>>> --bb
>>>
>>> Yes, i want the string. But I don't want to modify the module part to 
>>> manually defined strings
>>> I want some magic of module.name to get the current module name in 
>>> compile time string form.
>>>
>>
>> I tried this to see if it would work:
>>
>> ---  ---
>> module foo.test;
>>
>> void main()
>> {
>>     writefln(.stringof);
>> }
>>
>>
>> Almost worked! It prints "module test". It would do what you wanted if 
>> '.stringof' returned the fully qualified module (and didn't have the 
>> "module " prefix).
> 
> Maybe it's supposed to. The spec for .stringof is completely different 
> to what's implemented.
> 
> But anyway...
> 
> Getting the fully qualified name is currently possible (since about 
> D0.150) but it's a bit disgusting to do, and I can't really recommend 
> it.  My old meta.nameof module did the job.
> If you pass the module name as a template alias parameter, the fully 
> qualified name appears in the mangled name. You just need to demangle it 
> and extract the module name.

Yikes!  Devious.  I guess that's why they pay you the big bucks. ... Or 
should if they don't.

--bb



More information about the Digitalmars-d mailing list