Robert Fraser escribió:
Ary Borenszweig Wrote:

Ary Borenszweig escribió:
http://www.youtube.com/watch?v=rtYCFVPfx4M
Bah... I just realized debugging that kind of things might be really hart to do. Imagine this:

---
char[] something() {
        return "x *= 3; x += 4;";
}

mixin("int bla(int x) { x *= 2; " ~ something ~ " return 4; }");

void main() {
        const something = bla(2);
}
---

Now I want to debug the invocation of bla: how the variable x is being modified. But there's no such place in the source code for that definition (well, there is, but it's split in pieces, and obviously you'll get lost when debugging).

So I'm starting to think that the compile-time debugger should work on the (formatted) compile-time view of the modules. So you'll end up debugging code like this:

---
char[] something() {
        return "x *= 3; x += 4;";
}

int bla(int x) {
        x *= 2;
        x *= 3;
        x += 4;
        return x;
}

void main() {
        const something = bla(2);
}
---

But that's way more hard to do than what I'm doing right now.

Finally, you might want to have both worlds together, like:

---
char[] someOtherFunc() {
   return "char[] x = \"whatever\";";
}

char[] someFunc() {
   mixin(someOtherFunc());
   return x;
}


mixin(someFunc());
---

Now I want to debug someFunc(). But I also want to see that someOtherFunc() is expanded well, so I can't just show the compile-time view of the module, because doing this might have an error already (the error I want to debug, for example!). (and also the compile-time view dependens on the function I'm trying to debug)

Aaah... I give up.

(I came to this conclusion when trying to debug the scrappes:units project).

NO! Don't give up! I've already started using it, and it's very useful even if 
it can't debug compile-time-generated code; that's only a very small use case.

Cool! :-)

Well, I think I'll give up with string mixins for the moment.

What did you debug? What did you find useful? What would you improve?

Reply via email to