Thread overview
Expanded source code
Jun 17, 2009
Paul D. Anderson
Jun 17, 2009
BCS
Jun 18, 2009
Ary Borenszweig
Jun 18, 2009
Paul D. Anderson
Jun 19, 2009
Ary Borenszweig
Jun 19, 2009
Paul D. Anderson
June 17, 2009
Is there a way to see the source for a D program after the mixins and templates, etc., are expanded?

I get occasional error messages saying I've got incompatible types, for example, but the error message only makes sense when I mentally instantiate a template. Is there a way to see this instantiation in print?

At what phase of compilation does this occur? Has the code been tokenized? (It's okay with me if it is--I just want to know.)

Paul

June 17, 2009
Reply to Paul,

> Is there a way to see the source for a D program after the mixins and
> templates, etc., are expanded?
> 

Descent has a "compile time view" that is supposed to do some of this.

If you are only looking at string mixins you can use pragma(msg, string) to view the string

> I get occasional error messages saying I've got incompatible types,
> for example, but the error message only makes sense when I mentally
> instantiate a template. Is there a way to see this instantiation in
> print?
> 
> At what phase of compilation does this occur? Has the code been
> tokenized? (It's okay with me if it is--I just want to know.)
> 

This is mostly informed guess work but: it's all mixed up; the file is tokenized and parsed, then some semantic stuff happens including some template evaluation and CTFE to construct the string that is then tokenized and your back where you started. In concept, the tokenization, parsing and semantics are different phases. The first two might happen at the same time but I think the third is separate.

> Paul
> 


June 18, 2009
BCS escribió:
> Reply to Paul,
> 
>> Is there a way to see the source for a D program after the mixins and
>> templates, etc., are expanded?
>>
> 
> Descent has a "compile time view" that is supposed to do some of this.
> 
> If you are only looking at string mixins you can use pragma(msg, string) to view the string
> 
>> I get occasional error messages saying I've got incompatible types,
>> for example, but the error message only makes sense when I mentally
>> instantiate a template.

You can also debug the template instantiation with Descent.

But only for D1, aw...
June 18, 2009
Paul D. Anderson Wrote:

> Is there a way to see the source for a D program after the mixins and templates, etc., are expanded?
> 
> I get occasional error messages saying I've got incompatible types, for example, but the error message only makes sense when I mentally instantiate a template. Is there a way to see this instantiation in print?
> 
> At what phase of compilation does this occur? Has the code been tokenized? (It's okay with me if it is--I just want to know.)
> 
> Paul
> 

Thanks for the help. So the short answer is no.

A related question: which D language constructs do (virtual) text substitution?

My list:
* alias
* mixin
* special tokens
* special token sequences
* templates
* template mixins

Are there others?

Paul
June 19, 2009
Paul D. Anderson wrote:
> Paul D. Anderson Wrote:
> 
>> Is there a way to see the source for a D program after the mixins and templates, etc., are expanded?
>>
>> I get occasional error messages saying I've got incompatible types, for example, but the error message only makes sense when I mentally instantiate a template. Is there a way to see this instantiation in print?
>>
>> At what phase of compilation does this occur? Has the code been tokenized? (It's okay with me if it is--I just want to know.)
>>
>> Paul
>>
> 
> Thanks for the help. So the short answer is no.

I thought the short answer was yes. Did you try Descent? You can hover a template instance to see it's expansion. Same goes with mixins. Doesn't this help you?
June 19, 2009
Ary Borenszweig Wrote:

> Paul D. Anderson wrote:
> > Paul D. Anderson Wrote:
> > 
> >> Is there a way to see the source for a D program after the mixins and templates, etc., are expanded?
> >>
> >> I get occasional error messages saying I've got incompatible types, for example, but the error message only makes sense when I mentally instantiate a template. Is there a way to see this instantiation in print?
> >>
> >> At what phase of compilation does this occur? Has the code been tokenized? (It's okay with me if it is--I just want to know.)
> >>
> >> Paul
> >>
> > 
> > Thanks for the help. So the short answer is no.
> 
> I thought the short answer was yes. Did you try Descent? You can hover a template instance to see it's expansion. Same goes with mixins. Doesn't this help you?

Sorry, didn't mean to sound ungrateful. I appreciate your help, but...

I don't use Descent -- the last time I tried to use it (and I know it's been improved a lot) I couldn't get it installed properly.

But it sounds like Descent does what I want. I was looking for a non-IDE specific variety. And, oh yeah, I need it for D2. Maybe I'll peek at the Descent implementation and see if I can't come up with something that I can pull from there.

Again, thanks.

Paul