view tests/mini/naked_asm5.d @ 1401:e2cf1f67ca33

Don't print the entire declaration of the alliassee when `->toChars()` is called on an `AliasDeclaration`; just printing the name will do. This fixes #305, which otherwise tries to generate {{{ class E { void A() { alias /* recurse into E->toCBuffer() */ m; } } }}} by way of an infinite recursion (causing a segfault when the stack runs out).
author Frits van Bommel <fvbommel wxs.nl>
date Wed, 20 May 2009 16:20:59 +0200
parents 1b10a9c6e3e8
children a400b1dd657f
line wrap: on
line source

int foo(int op)(int a, int b)
{
    version(X86)
    {
    const OP = (op == '+') ? "add" : "sub";
    asm { naked; }
    mixin("asm{"~OP~" EAX, [ESP+4];}");
    asm { ret 4; }
    }
    else version(X86_64)
    {
    const OP = (op == '+') ? "add" : "sub";
    asm { naked; }
    mixin("asm{"~OP~" ESI,EDI; mov EAX, ESI;}");
    asm { ret; }
    }
    else static assert(0, "todo");
}

void main()
{
        int i = foo!('+')(2, 4);
        assert(i == 6);
        i = foo!('-')(2, 4);
        assert(i == 2);
}