June 21, 2011

Le sigh

I’ve been coming across more problems with Boost Wave. The current ones blocking me are:

  • A lack of an efficient way to conditionally disable a macro. The “context policy” provides hooks for handling macro expansions, and its return value is meant to control whether the expansion takes place. It doesn’t work. I’ll write up a bug report when I get some time.
  • Wave isn’t very forgiving about integer under/overflow. For example, the GNU C library’s header “/usr/include/bits/wchar.h” has the following tidbit to determine the sign of wide characters, which Boost Wave barfs on:
#elif L’\0’ - 1 > 0

I think the latter “problem” might actually be reasonable - I believe the standards say that handling of overflow is undefined, and preprocessor/compiler-specific. That doesn’t help me much though. I could fix this by writing code to parse the expressions, which seems silly, or by passing off to the target preprocessor (e.g. GCC), which seems like overkill.

I’m going to have a look at how hard it would be to use LLVM/Clang’s preprocessor instead. If that’s a better bet, I may go that way. Otherwise, it might be time to get approval to send patches to the Wave project.