On 8/1/2018 11:08 PM, Manu wrote:
I think implementing the string alternative is the only robust way
forward, because that also solves the additional problem of being able
to name C++ namespaces that are invalid D keywords, which has bitten
me in at least 2 particularly noteworthy occasions.
Which keywords were those?
In any case, this is a general problem when dealing with C and C++
interoperability, and your solution would only deal with one case of it. For
example,
--- C++ ---
void with();
int scope;
enum pure;
-----------
If this problem were to be solved, it should be solved, not hacked for one case
only. There are many ways of dealing with it:
1. pragma(mangle)
2. change the names in the C/C++ side
3. use a macro -Dwith=with_ when compiling the C/C++ code
4. write wrappers/forwarders/trampolines in C/C++, compile them and link them in
5. write a tool that patches the object file (not as hard as it sounds, the
symbol table is usually in one spot, but of course the patcher would have to be
implemented for each object file format). I've written object file patchers
before, they work surprisingly well. Nobody else does it, presumably because the
thought inspires terror :-)
6. provide some switch to the D compiler to rename A=>B in the object file
symbols, though I'd worry such would slow the compiler down
7. perhaps amend the language such that an identifier of the form "__keyword"
would appear in the object file as "keyword".