On Friday, 1 May 2015 at 21:36:29 UTC, Artur Skawina wrote:
On 05/01/15 22:29, Jens Bauer via Digitalmars-d-learn wrote:
On Wednesday, 29 April 2015 at 13:58:14 UTC, Artur Skawina wrote:
Use `@weakalias!"blah"` instead:

enum weakalias(string A) = gcc.attribute.attribute("alias", A);

@weakalias!"defaultResetHandler" extern (C) void Reset_Handler();

Here's my resulting code-snippet:

enum weak = gcc.attribute.attribute("weak");

alias Tuple(A...) = A;
alias weakalias(string A) = Tuple!(weak, gcc.attribute.attribute("alias", A));

...

    foreach (I, M; A.init.tupleof)
    {
        static if (is(typeof(M)==A.EXC))
code ~= `@weakalias!"`~M.n~`" extern (C) void ` ~ __traits(identifier, A.tupleof[I]) ~ "();\n";
    }

... because the 'alias' attribute does not automcatically include the 'weak' attribute.
It seems to work, but did I write the code correctly ?

... Is it possible to generate a static array without specifying a fixed array size ?

No, but you can just do:

code ~= "\n@isr_vector VectorFunc[" ~ A.tupleof.length.stringof ~ "] g_pfnVectors = [\n";

That works great. Thank you for your valuable help. :)

Apart from the above two mentioned problems, the code builds and produces the expected results. I even started to understand some parts of it, and I find it pretty awesome. ;)

(Ab)using the compiler for the DSL parsing gets really awesome {snip}

I remember the Atari 130XE (and thus the Atari 600XL/800XL) were able to auto-generate basic-code, saving a lot of typing. Though different, this really reminds me of those days. :)

I've never touched a C++ template, but I've been using #define in C. Though #define is a neat feature, it does not beat this, and as I've never had enough reason to use C++ templates, I expect they're not as powerful as D's ability to generate code at compile-time.

Reply via email to