A 'contained' string-pasting ability.
Reiner Pope
reiner.pope at REMOVE.THIS.gmail.com
Wed Oct 4 01:53:15 PDT 2006
I think the string-pasting capability that people like Don Clugston
requested in 'Template-based preprocessing' could be possible without
too many changes to DMD by restricting its implementation to the alias
declaration alone. Everywhere else you would have to still give _real_
identifiers (ones which can be determined in the lexical, not semantic
pass) but in alias statements, you could give _virtual_ identifiers
(ones which rely on something in the semantic pass).
Since you can rename practically everything with alias, it (I think)
gives you pretty much all the functionality of an identifier keyword
which can go anyway, but with a much more contained change to the
language. This way, everything would parse just as before except for
alias statements, which would allow for delayed evaluation (ie until the
semantic pass) just like static if does.
AliasDeclaration:
alias AliasIdent AliasIdent;
AliasIdent:
Identifier
!( AssignExpression )
The AssignExpression must evaluate to a string which is a valid symbol
name. This would allow solving Garett Bass's problem, for instance (the
original poster in Template-based preprocessing):
#define SERIALIZABLE(type, identifier) \
type identifier; \
\
string serialize_##identifier() { \
return toString(identifier); \
}
class Foo {
SERIALIZABLE(int, i);
};
could look like:
template Serializable(T, char[] identifier)
{
private T temp;
alias temp !(identifier);
private string serialize_temp() { return toString(identifier); }
alias serialize_temp !("serialize_" ~ identifier);
}
class Foo {
mixin Serializable!(int, "i");
}
What do you think?
Reiner
More information about the Digitalmars-d
mailing list