std.format with named args
Vitaliy Fadeev
vital.fadeev at gmail.com
Tue Oct 17 07:22:41 UTC 2023
On Tuesday, 17 October 2023 at 06:57:07 UTC, Imperatorn wrote:
> On Tuesday, 17 October 2023 at 06:46:31 UTC, Vitaliy Fadeev
> wrote:
>> Hi all!
>> I want readable mixin.
>> I want pass variable to string.
>> I want string with named args.
>> Like this:
>>
>> ```D
>> enum JMP_ADDR_R = "RAX";
>>
>> mixin( format!"asm {
>> jmp [JMP_ADDR_R];
>> }"( JMP_ADDR_R )); // IT NOT WORK
>> ```
>>
>> Not this:
>>
>> ```D
>> enum JMP_ADDR_R = "RAX";
>>
>> mixin( format!"asm {
>> jmp [%s];
>> }"( JMP_ADDR_R )); // WORK, BUT NOT-READABLE
>> ```
>>
>> In large code named identifiers more readable.
>>
>> In future it will used in jump table, like this:
>>
>> ```D
>> mixin( format!"asm {
>> lea JMP_ADDR_R, qword ptr [ JMP_I_R * PTR_SIZE +
>> TBL_ADDR ];
>> jmp [JMP_ADDR_R];
>> }"( JMP_I_R, PTR_SIZE, TBL_ADDR, JMP_ADDR_R ));
>> ```
>>
>> Please, help me find a solution...
>> or exists std.format with named args ?
>> or another solution with named args ?
>
> Without string interpolation the best you can do is
> https://dlang.org/library/std/conv/text.html
>
> Or write some code yourself, unfortunately
May be.
"String interpolation"
```D
mixin( format!"asm {
lea JMP_ADDR_R, qword ptr [ JMP_I_R * PTR_SIZE + TBL_ADDR
];
jmp [JMP_ADDR_R];
}"( JMP_I_R, PTR_SIZE, TBL_ADDR, JMP_ADDR_R ));
```
vs
text()
```D
mixin( text( "asm {
lea", JMP_ADDR_R, ", qword ptr [ ", JMP_I_R, " * ",
PTR_SIZE, " + ", TBL_ADDR, " ];
jmp [", JMP_ADDR_R, "];
}"));
```
"String interpolation" more readable.
"String interpolation" easier to type.
"text()" syntax is highlighted,
Thanks for the correct keywords: "String interpolation" - this is
what I'm looking for.
Is there a "string interpolation" solution?
More information about the Digitalmars-d-learn
mailing list