On 11/10/2013 01:51 AM, Timon Gehr wrote:
On 11/09/2013 10:12 AM, Rob T wrote:

I am wondering if there's a way to pass only the variable and have the
inspect function determine the variable's symbol name as passed rather
than have to pass both the name and value separately?
...

Well, yes, but the following does not scale that well, and it is
somewhat fragile, since there is no way to get column information.

import std.stdio;
import std.string;
import std.algorithm;
import std.range;
import std.conv;

template LineCache(string f){ enum LineCache =
import(__FILE__).splitLines(); }

void inspect(string f=__FILE__,int l=__LINE__,T)( T value ){
     enum
name=LineCache!__FILE__[l-1].find("inspect").drop("inspect".length).find("(").drop(1).until!(a=>a==')').to!string.strip;
...

Oops. There's a typo. It should read LineCache!f, obviously.

     writeln(name ~ " = ", value);
}

void main(){
     int a;
     int b=3;
     inspect(a);
     inspect(a+2);
     inspect(a+b);
}


$ dmd -J. -run tt.d
a = 0
a+2 = 2
a+b = 3


Reply via email to