Thread overview
faking a C logging macro
Apr 20, 2006
Tydr Schnubbis
Apr 20, 2006
BCS
Apr 20, 2006
clayasaurus
April 20, 2006
Can I get something like this in D, using mixins or whatever?

#define log(s) logprintf(__FILE__ ": " __FUNCTION__ ": %s", s)
April 20, 2006
Tydr Schnubbis wrote:
> Can I get something like this in D, using mixins or whatever?
> 
> #define log(s) logprintf(__FILE__ ": " __FUNCTION__ ": %s", s)


sed "/log\(/logprintf(__FILE__ `: ` __FUNCTION__ `: %s`, /" in.d -o out.d

???

No but seriously folks, I have wanted something like this a few times myself. Particularly, some way to get the __FILE__, etc. set of constants of the line where a template is instanced. Something like the following would be great.



template log(
  char[] s,
  char[] fi = __FILE__,
  int li = __LINE__,
  char[] fn = __FUNCTION__)  // const defaults come from called location
{
	const char[] log = ...
}


main.d
int i;
void main()
{
	pragma(msg, log!("this is broken!!!");
}



compile time output:
main.d:4 this is broken!!!


April 20, 2006
According to the D change log @ version .116 this was included.
"Added __FILE__, __LINE__, __DATE__, __TIME__, __TIMESTAMP__."

Maybe ask Walter to add __FUNCTION__ ?

You might want to check out build's preprocessor stuff as well. http://www.dsource.org/forums/viewtopic.php?t=624


BCS wrote:
> Tydr Schnubbis wrote:
>> Can I get something like this in D, using mixins or whatever?
>>
>> #define log(s) logprintf(__FILE__ ": " __FUNCTION__ ": %s", s)
> 
> 
> sed "/log\(/logprintf(__FILE__ `: ` __FUNCTION__ `: %s`, /" in.d -o out.d
> 
> ???
> 
> No but seriously folks, I have wanted something like this a few times myself. Particularly, some way to get the __FILE__, etc. set of constants of the line where a template is instanced. Something like the following would be great.
> 
> 
> 
> template log(
>   char[] s,
>   char[] fi = __FILE__,
>   int li = __LINE__,
>   char[] fn = __FUNCTION__)  // const defaults come from called location
> {
>     const char[] log = ...
> }
> 
> 
> main.d
> int i;
> void main()
> {
>     pragma(msg, log!("this is broken!!!");
> }
> 
> 
> 
> compile time output:
> main.d:4 this is broken!!!
> 
>