Foo:

Hey guys. Can someone explain me, why this code does only works
with the inline assembler version but not with the mixin?

You need mixin(), it's unfortunate this gives no error messages:


import std.string: format;

enum Vala(uint count, alias arr) = format("
    asm {
        sub ESP, %d;     // Reserve 'count' bytes
        mov %s, %d;      // Set a.length = 'count'
        mov %s + 4, ESP; // Set &a[0] to reserved bytes
    }", count, arr.stringof, count, arr.stringof);

void main() {
    import std.stdio: writeln;

    ubyte[] a;
    a.length.writeln;

    static if (false) {
        asm {
            sub ESP, 1000;  // Reserve 1000 bytes
            mov a, 1000;    // Set a.length = 1000
            mov a + 4, ESP; // Set &a[0] to reserved bytes
        }
    } else {
        mixin(Vala!(1000, a));
    }

    a.length.writeln;
}

Bye,
bearophile

Reply via email to