Generating code based on UDA
Rares Pop via Digitalmars-d-learn
digitalmars-d-learn at puremagic.com
Sat Oct 25 21:03:52 PDT 2014
I think it is a bug.
Executing linked code from a mixin statement should not reduce
the scope of the mixin, IMHO.
I will file a bug report.
On Saturday, 25 October 2014 at 21:35:44 UTC, Ali Çehreli wrote:
> On 10/25/2014 08:56 AM, Rares Pop wrote:
>
> > Indeed it worked. What is the rationale behind the
> mixin(fullName) ?
>
> __traits(getAttributes) requires a symbol but fullName is a
> string. Mixing it in as code fulfills the requirement.
>
> > However, in my project the injections function, the @Inject
> UDA struct
> > and some other dependencies are defined in a library
> (libinfuse).
>
> I am afraid it needs to be changed. :-/
>
> > In this format the compiler gives the undefined identifier
> error I was
> > mentioning in my first post.
> > "source/infuse/injector.d-mixin-148(148): Error: undefined
> identifier B"
>
> I found two solutions:
>
> a) Do not define 'attributes' at all and use
> __traits(getAttributes) directly in the foreach loop:
>
> foreach (attr; __traits(getAttributes, mixin(fullName))) {
>
> b) Define attributes as a typeof of __traits(getAttributes) and
> use that in the foreach loop:
>
> alias attributes = typeof(__traits(getAttributes,
> mixin(fullName)));
> foreach (attr; attributes) {
>
> I think what happens in both cases is that the entity that we
> iterate over maintains its TypeTuple'ness without trying to
> produce a value out of its members.
>
> > Is this a dmd compiler bug?
>
> I don't know but it is very confusing.
>
> Ali
More information about the Digitalmars-d-learn
mailing list