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