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