On Friday, 26 April 2019 at 10:22:49 UTC, Bastiaan Veelo wrote:
On Friday, 26 April 2019 at 08:35:57 UTC, Bastiaan Veelo wrote:
On Thursday, 25 April 2019 at 08:44:14 UTC, Dennis wrote:
On Monday, 22 April 2019 at 16:24:53 UTC, Taylor Hillegeist wrote:
Or would this not be easy at all with D?

I don't think so. While there are lots of traits for introspection of declarations, there is no way to introspect lines of code. The whole function would need to be wrapped into a mixin, and the D code would need to be parsed
at compile time for this to work.

Yes, but I think that might be doable. You wouldn't need a full blown D parser, just one that can identify statements (`;` being an important clue). Not sure whether __LINE__ will be meaningful inside a mixin, though, but that might also be fixable. It would be an interesting challenge.

Bastiaan.

Proofing the concept:
---
mixin(snoop(q{
    int fun(int a, int b)
    {
        int c = 3;
        foreach (i; 1 .. 5)
        {
            a += i;
        }
        int d = a + b + c;
        return d;
    }
}));
---

Output:
2019-Apr-26 10:33:46.0935135 executed line 7:           int c = 3;
2019-Apr-26 10:33:46.0936716 executed line 10: a += i; 2019-Apr-26 10:33:46.0937348 executed line 10: a += i; 2019-Apr-26 10:33:46.0937963 executed line 10: a += i; 2019-Apr-26 10:33:46.0938583 executed line 10: a += i; 2019-Apr-26 10:33:46.0939622 executed line 12: int d = a + b + c;

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

Bastiaan.

Hey, that's a pretty cool demo. I saw the idea and wondered rather it could be possible with D. I has some very cool introspection properties. The Link seems to be broken right now. But I think this might be worth some development. Tools like this can really help new users, especially when they are doing things the o'l fashion way, printf for debugging. I doubt it would be too much help for things like ranges, but one must pick their battles.

Thanks.

Reply via email to