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.