Bug in HTOD handling <<
Walter Bright
newshound at digitalmars.com
Fri Jul 28 17:10:19 PDT 2006
BCS wrote:
> Walter Bright wrote:
>> Kenneth Bogert wrote:
>>
>>> HTOD does not handle a #define whose value contains a << operator
>>
>>
>> That's right, it doesn't recognized anything beyond simple literals.
>
>
> Doesn't DMD do constant folding on things like (1<<3)?
Yes. But HTOD doesn't. Macro replacement text is seen as ... text.
> IIRC D expressions are trivially convertible to D (often no convention
> is needed). Couldn't htod just convert
>
> "#define" identifier Expression EOL
>
> to
>
> "const" "auto" identifier "=" Expression;
>
> ?
The problem is reliably identifying an Expression out of a j-random
sequence of characters.
>
> With a few conventions to Expression (cast conventions, etc.) this would
> cover a lot of ground. Even without the convention (just copy things
> that don't need convention) this would be fantastic.
>
>
> <code name="foo.h">
>
> #define value 3
> #define name ("BCS")
> #define mask3 (0x01<3)
> #define mask5 (0x01<5)
> #define mask35 (mask3 | mask5)
>
> </code>
>
> |
> v
> htod
> |
> v
>
> <code name="foo.d">
>
> auto value = 3;
> auto name = ("BCS");
> auto mask3 = (0x01<3);
> auto mask5 = (0x01<5);
> auto mask35 = (mask3 | mask5);
>
> </code>
I'm not saying it's impossible, and I agree it would be a nice addition.
But it's a lot of work.
More information about the Digitalmars-d-bugs
mailing list