Discussion on static reflection syntax in C++
Stefan Koch
uplink.coder at googlemail.com
Tue Feb 23 15:49:14 UTC 2021
On Tuesday, 23 February 2021 at 15:35:43 UTC, Paul Backus wrote:
> On Tuesday, 23 February 2021 at 14:14:13 UTC, Stefan Koch wrote:
>> On Monday, 22 February 2021 at 23:44:45 UTC, Paul Backus wrote:
>
> I haven't fully thought this through, but would it be possible
> to overload `mixin` to do this? E.g.,
>
> import core.ast: Struct, Type;
>
> // some type function
> Struct pair(Type t) { ... }
>
> alias PairOfInts = mixin(pair(int));
>
> Conceptually, `mixin` already means "take this stuff and inject
> it into the current scope," and grammatically it's allowed to
> appear as both an expression and a type.
Yes it would be possible to reuse mixin, but iirc mixins convert
non-string expressions to string which would introduce ambiguity,
if I special case it __struct, or __type__.
>> At which point any modification of the __struct* is an error
>> and will abort compilation.
>
> If __struct is only the "user-space" representation, and not
> the real AST node, I don't see why this is necessary, since
> modifying the __struct after mixing it in wouldn't have any
> affect on the actual AST.
>
The restriction is imposed to avoid confusing situations, due to
the closeness of the mapping to real compiler entities you cannot
finalize the same struct* twice and such things.
Modifying a __struct after it has been finalized or 'mixed-in' is
either useless or a bug.
More information about the Digitalmars-d
mailing list