The X Macro using D

Olivier FAURE via Digitalmars-d digitalmars-d at puremagic.com
Fri Jul 21 05:27:35 PDT 2017


On Friday, 21 July 2017 at 08:06:09 UTC, Stefan Koch wrote:
> My pleasure :)
>
> // ...
>
> mixin((){
>     // ...
>
>     enum Y = [
>         //  id   reg  mask   ty
>         X("AH",   4, mAX, TYuchar),
>         X("AL",   0, mAX, TYuchar),
>         X("AX",   8, mAX, TYushort),
>         X("BH",   7, mBX, TYuchar),
>         X("BL",   3, mBX, TYuchar),
>         // ...
>         X("ESI", 22, mSI, TYulong),
>         X("ESP", 20,   0, TYulong),
>         X("SI",  14, mSI, TYushort),
>         X("SP",  12,   0, TYushort),
>     ];
>
>
>     enum lns = itos(Y.length);
>
>     string pseudotab = "\nprivate __gshared static immutable 
> string[" ~ lns ~ "] pseudotab = [";
>
>     foreach(i, r; Y)
>     {
>         pseudotab ~= `"` ~ r.id ~ `", `;
>     }
>
>     pseudotab ~= "];\n";
>
> }());

Quick questions: isn't it possible to do

     private __gshared const(char)*[24] pseudotab = Y.map!(x => 
x.id);

instead? That seems like the most obvious and easy to read 
option; and in contrast to the other solutions proposed, it's 
closer to the Rule of Least Power.


More information about the Digitalmars-d mailing list