Necessary regression

Yesterday I ran the Standard Library Test (which consists in analyzing a C++ standard library implementation with Scalpel) for the first time since a couple of months. I didn't have any particular reason to do this as I didn't change the syntax analysis related source code, but I did it anyway. It's sometimes good to be overcautious!

As usual, I used my GCC's C++ standard library to perform that test. As I told you in a previous article, Scalpel is able to analyze the GCC 4.4.0's C++ standard library headers without any error. What you may not know is that I've had to add support of some non-standard GCC extensions (such as __restrict__, __typeof__ or __attribute__) to reach that goal.
The support of these extensions seems to be insufficient to be able to parse my current GCC's library (version 4.4.2). Indeed, this new version of the C++ standard library implementation introduced an extension Scalpel didn't have to parse until there.

This is finally at that point I figured out that I was on the wrong track.
Even if the purpose of Scalpel is to analyze standard C++ code, it seemed necessary to me to support this kind of extensions. Even a strict standard code cannot indeed do without the standard library.
But what if GCC decided to introduce a new extension every month in their implementation? And since I do it for GCC, why shouldn't I do the same for every non-standard extensions of every other C++ standard library implementations? To be such tightly coupled with all these stuffs would lead Scalpel code to be overbloated and perpetually outdated.

This is why I decided to drop the support of all of these non-standard extensions.
Those of you who plan to use Scalpel as a compiler front-end should use a standard implementation of the C++ standard library, such as Apache's one.
Those who plan to use it as a simple analyzer for their IDE plugins or their CASE tools should do it as well. Or even better, they should use a header-only empty implementation, which just contains the standard public interface with all inlined empty function bodies. (Does such a library even exist? It definitely should!)
Finally, those who absolutely need non-standard extension support should hire me to write a patch and pay me a lot of money.

From now on, I will perform the Standard Library Test with Apache's C++ SL. By now, Scalpel is already able to analyze its syntax without any error!
Er, except for iterator, limits, queue and stack headers… Edit: This is fixed! Happy new year!

As usual, stay tuned!