| |
| Posted by Vitaliy Fadeev in reply to Vitaliy Fadeev | PermalinkReply |
|
Vitaliy Fadeev
Posted in reply to Vitaliy Fadeev
| On Tuesday, 17 October 2023 at 07:22:41 UTC, Vitaliy Fadeev wrote:
> 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:
enum JMP_ADDR_R = "RAX";
mixin( format!"asm {
jmp [JMP_ADDR_R];
}"( JMP_ADDR_R )); // IT NOT WORK
Not this:
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:
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"
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()
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?
scriptlike looks perfecto!
```D
enum JMP_ADDR_R = ...
...
import scriptlike;
writeln( mixin(interp!"
asm {
lea ${JMP_ADDR_R}, qword ptr [ ${JMP_I_R} * ${PTR_SIZE} + ${TBL_ADDR} ];
jmp [${JMP_ADDR_R}];
}
") );
```
produced:
```
asm {
lea RAX, qword ptr [ RDX * 8 + 5594AA134290 ];
jmp [RAX];
}
```
Closed!
scriptlike
Thanks, all!
|