DMD "preprocessed"-source output?
Denis Koroskin
2korden at gmail.com
Sun Oct 5 09:09:10 PDT 2008
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 :(
More information about the Digitalmars-d-learn
mailing list