Subject: Re: [boost] [preprocessing] Feedback requested on a C99 preprocessor written in pure universal Python
From: Edward Diener (eldiener_at_[hidden])
Date: 2017-03-07 01:56:11


On 3/6/2017 6:56 PM, Andrey Semashev via Boost wrote:
> On Mon, Mar 6, 2017 at 11:46 PM, Niall Douglas via Boost
> <boost_at_[hidden]> wrote:
>> On 06/03/2017 19:10, Edward Diener via Boost wrote:
>>> On 3/6/2017 5:45 AM, Niall Douglas via Boost wrote:
>>>> Those of you who watch reddit/r/cpp will know I've been working for the
>>>> past month on a pure Python implementation of a C99 conforming
>>>> preprocessor. I am pleased to be able to ask for Boost feedback on a
>>>> fairly high quality implementation:
>>>>
>>>> https://github.com/ned14/pcpp
>>>
>>> It would be nice, for the purpose of testing with Boost PP and Boost
>>> VMD, if somehow your preprocessor could somehow be plugged in to one of
>>> the compilers Boost supports, with VC++ being the most obvious choice
>>> because its preprocessor is not C++ standard conforming.
>>
>> It's pretty straightforward in theory. pcpp can consume from stdin or a
>> file, and can output to stdout or a file, so it's easy to insert into a
>> sequence using the pipe operator (which works fine on Windows too).
>
> Given that preprocessor checks are often used for compiler
> workarounds, and pcpp is not a full C++ frontend, one would have to
> make sure pcpp defines the same set of predefined macros the compiler
> does. In the particular case of MSVC that would make libraries like
> Boost.PP and Boost.VMD treat pcpp the same way they do MSVC, which is
> probably suboptimal, if at all functional. I guess, for such tandem to
> be workable, pcpp has to define its own predefined macros, and PP and
> VMD have to test it before they test other compiler-specific macros.

Exactly !

Still merely to run the Boost PP and Boost VMD tests, which are decent
tests for much hardcore C++ standard preprocessor conformance, pcpp
could minimally define __cplusplus >= 201103L or __STDC_VERSION__ >=
199901L, without necessarily identifying itself otherwise, and Boost
PP/Boost VMD will treat the preprocessor as strictly C++ standard
conformant with variadic macro support. But what you write above is
certainly correct in general, in order to test other Boost libraries and
end-user's code, with pcpp as the preprocessor for some other compiler.

BTW Boost already has an almost complete conformant C++ preprocesor in
Boost Wave. I could not have developed VMD or helped support Boost PP
without its ability to show correct macro expansion. It has been
absolutely invaluable in that respect.