preprocessor pass equivalent?

Adam D. Ruppe destructionator at gmail.com
Thu Mar 15 06:51:33 PDT 2012


On Thursday, 15 March 2012 at 08:35:48 UTC, Jay Norwood wrote:
> Is there some option, similar to -E gcc option, that would 
> generate the analogous listing for D?

You could add one to the compiler in just
a few lines; there's already a function that
does it, but it isn't called from anywhere.

Open up mars.c, and find this comment:
"Do not attempt to generate output files if errors"

It is line 1358 in my copy.


Right under that if(), add this:

         for (size_t i = 0; i < modules.dim; i++)
         {
             m = modules[i];
	    m->gensymfile();
	}

compile your new compiler.

BACK UP YOUR FILES because this function overwrites
the original .d file!


$ cat test10.d
void main() {
    auto a = 0;
}

# we have to backup because otherwise our original source will be 
lost!
$ cp test10.d test10_original.d

# you'll have to pass the paths for phobos and druntime unless 
you bring in a dmd.conf...
$ d/dmd2/src/dmd/dmd -Id/dmd2/src/druntime/import 
-Id/dmd2/src/phobos -L-Ld/dmd2/linux/lib32/    test10.d

$ cat test10.d
// Sym file generated from 'test10.d'
import object;
void main()
{
int a = 0;
return 0;
}





It gets ugly if you use a lot of features because this
outputs the dmd translations - so foreach becomes for
and other lowerings.

But you can see basically what the compiler is going
to generate for final code.


More information about the Digitalmars-d-learn mailing list