DMD "preprocessed"-source output?
Ary Borenszweig
ary at esperanto.org.ar
Sun Oct 5 09:31:32 PDT 2008
Denis Koroskin escribió:
> On Sun, 05 Oct 2008 19:01:41 +0400, Ary Borenszweig
> <ary at esperanto.org.ar> wrote:
>
>> Nick Sabalausky escribió:
>>> I don't suppose DMD has any way to output a copy of what the source
>>> files look like after things like mixins, CTFE and versions are
>>> applied? (Sort of like running a C compiler with a "preprocess-only"
>>> flag). I don't see anything like this in the listed command-line
>>> params, but maybe I missed it.
>>> I have a program (that makes heavy use of mixins and CTFE and such)
>>> that gives wildly different output between two different versions of
>>> DMD/Tango (Tango's documented "breaking changes" don't appear to be
>>> the culprit and nothing in DMD's changelog or the latest bugzilla
>>> entries seem to immediately stick out). I'm sure I can track it down,
>>> but it would help to narrow things down if I could run the
>>> "preprocessed" results from both environments through a file diff.
>>
>> Just for fun, I'll make a view in Descent that will show you exactly
>> that. I believe DMD has all the information to output that, but not a
>> switch. It'll also help me detect easier if there's a bug in CTFE or
>> template instantiation (in Descent's port).
>>
>> Note that this will turn things like:
>>
>> const int x = 1 + 2 + 3 + 4;
>>
>> into
>>
>> const int x = 10;
>>
>> and:
>>
>> const int x = someFuncThatCanBeEvaluatedAtCompileTime(2);
>>
>> into:
>>
>> const int x = 20;
>>
>> I don't know if this is good or bad...
>>
>> I'll let you know when I'll have it done.
>
> The best thing whould be to view the code transformation step by step
> (using some slider at the bottom of view):
>
> // Step 1:
> const int x = mixin!("someFuncThatCanBeEvaluatedAtCompileTime(1 + 2 + 3
> + 3)");
>
> // Step 2:
> const int x = someFuncThatCanBeEvaluatedAtCompileTime(1 + 2 + 3 + 3);
>
> // Step 3:
> const int x = someFuncThatCanBeEvaluatedAtCompileTime(10);
>
> // Step 4:
> const int x = 42;
>
> This would be awesome, but I guess it's hardly possible :(
It's possible. Another idea that I have is to be able to debug
compile-time evaluation. So you would right click an expression, select
"Debug Compile-Time Evaluation", and you'd be able to step through the
evaluation, seeing values as they are transformed. That's a bit harder
than the former idea. I wonder if somebody would find this useful... It
seems like a really entertaining thing to implement. :-)
More information about the Digitalmars-d-learn
mailing list