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