mixin assembler does not work?

Foo via Digitalmars-d-learn digitalmars-d-learn at puremagic.com
Sun Jul 20 07:18:57 PDT 2014


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

Code:
import std.stdio : writeln;
import std.conv : to;

template Vala(uint count, alias arr) {
	immutable string c = to!string(count);

	enum Vala = "asm { sub ESP, " ~ c ~ "; mov " ~ arr.stringof ~ ",
" ~ c ~ "; mov " ~ arr.stringof ~ " + 4, ESP; }";
}

void main() {
	ubyte[] a;
	writeln(a.length);
	
	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);
	}
	
	writeln(a.length);
}


More information about the Digitalmars-d-learn mailing list