Thread overview
how to instrument dmd compiler to dump all references to a given symbol?
Jan 14, 2018
Timothee Cour
Jan 14, 2018
Adam D. Ruppe
Jan 14, 2018
Shachar Shemesh
Jan 14, 2018
Seb
January 13, 2018
eg:

how to instrument dmd compiler to dump all references to a given symbol?
eg: for `A.a` it should output the locations marked with HERE
any help/starting points would be appreciated!

```
Struct A{
int a;
 void fun(){
  a++; // HERE
  alias b=a;
 b++; // HERE
 }
}

void fun(){
 int a; // NOT HERE
 A b;
 b.a ++ ; // HERE
}
```
January 14, 2018
On Sunday, 14 January 2018 at 02:36:02 UTC, Timothee Cour wrote:
> how to instrument dmd compiler to dump all references to a given symbol?

you can actually do it with your own code. behold:

struct A{
//int a; // comment this line
int _a; // make the actual var renamed...

// then add a ref property with template file/line params
@property ref int a(string file = __FILE__, size_t line = __LINE__)() {
        pragma(msg, file); // and print those out
        pragma(msg, line);
        return _a;
}
 void fun(){
  a++; // HERE
  alias b=a;
 b++; // HERE
 }
}

void fun(){
 int a; // NOT HERE
 A b;
 b.a ++ ; // HERE
}



Can be a bit trickier in other cases but there's a compile time list of uses.
January 14, 2018
On 14/01/18 04:42, Adam D. Ruppe wrote:
> On Sunday, 14 January 2018 at 02:36:02 UTC, Timothee Cour wrote:
>> how to instrument dmd compiler to dump all references to a given symbol?
> 
> you can actually do it with your own code. behold:
> 
> struct A{
> //int a; // comment this line
> int _a; // make the actual var renamed...

It wouldn't catch this use:

auto hiddenUser(T)(T t) {
  static if( __traits(hasMember, T, "a") ) {
    return T.a;
  } else {
    return 17;
  }
}

...
  A var;
  hiddenUser(var);
January 14, 2018
On Sunday, 14 January 2018 at 02:36:02 UTC, Timothee Cour wrote:
> eg:
>
> how to instrument dmd compiler to dump all references to a given symbol?
> eg: for `A.a` it should output the locations marked with HERE
> any help/starting points would be appreciated!
>
> ```
> Struct A{
> int a;
>  void fun(){
>   a++; // HERE
>   alias b=a;
>  b++; // HERE
>  }
> }
>
> void fun(){
>  int a; // NOT HERE
>  A b;
>  b.a ++ ; // HERE
> }
> ```

I don't know what you are trying to achieve, but `deprecated` could work for you. At least it's an easy way to get all locations using a symbol:

https://run.dlang.io/is/ICv9lH