Can I get caller name?

2014-09-26 Thread AsmMan via Digitalmars-d-learn
for debugging purposes, I need to get the caller name. Is it 
possible? if so, how do I do this?


void foo()
{
  baa();
}

void baa()
{
  wrilten(caller_name()); // foo
}

I know I could create an extra parameter and pass the current 
function name as argument but it isn't a possibility for now.


Re: Can I get caller name?

2014-09-26 Thread ketmar via Digitalmars-d-learn
On Fri, 26 Sep 2014 05:59:32 +
AsmMan via Digitalmars-d-learn digitalmars-d-learn@puremagic.com
wrote:

 for debugging purposes, I need to get the caller name. Is it 
 possible? if so, how do I do this?
use debugger? or parse debugging info and do stackwalk.


signature.asc
Description: PGP signature


Re: Can I get caller name?

2014-09-26 Thread Vladimir Panteleev via Digitalmars-d-learn

On Friday, 26 September 2014 at 05:59:33 UTC, AsmMan wrote:
for debugging purposes, I need to get the caller name. Is it 
possible? if so, how do I do this?


void foo()
{
  baa();
}

void baa()
{
  wrilten(caller_name()); // foo
}

I know I could create an extra parameter and pass the current 
function name as argument but it isn't a possibility for now.


Method 1 (extra template parameter):

// method1.d /
import std.stdio;

void foo()
{
baa();
}

void baa(string caller=__FUNCTION__)()
{
writeln(caller);
}

void main()
{
foo();
}
//

Method 2 (slow, needs -g, also prints line number on Windows):

/// method2.d ///
import std.stdio;

void foo()
{
baa();
}

void baa()
{
writeln(getCaller());
}

void main()
{
foo();
}

string getCaller()
{
try
throw new Exception(null);
catch (Exception e)
{
import std.string, std.algorithm;
string[] lines = e.toString().splitLines()[1..$];
return lines.find!(line = line.canFind(getCaller))[2];
}
}
/


Re: Can I get caller name?

2014-09-26 Thread AsmMan via Digitalmars-d-learn

Thanks guys!