shevek / jcpp

The C Preprocessor as a Java library
http://www.anarres.org/projects/jcpp/
Apache License 2.0
106 stars 36 forks source link

Support for include_next #7

Open ochafik opened 10 years ago

ochafik commented 10 years ago

Although jcpp parses #include_next, it doesn't seem to skip the current file's directory.

See http://gcc.gnu.org/onlinedocs/cpp/Wrapper-Headers.html

Here's a fix from JNAerator's fork:

https://github.com/ochafik/jcpp/commit/823a020fb5d1b531d897bb27216096829a6f6ac1

shevek commented 10 years ago

That's because I lashed this all up in the mid '90s and didn't read the documentation! I did pretty well, considering! :-)

shevek commented 10 years ago

I've written enough virtual filesystem handling code in my life to be cautious and nervous about implementing this properly. As I see it, the linked patch prevents reincluding a file which was relative to the parent, but does not correctly implement include_next if both the first and the next header are in the system include directories, nor can it handle a chain of more than one 'next' inclusion.

I'll have to think about this somewhat more, but I'm reluctant to take the patch into trunk with those weaknesses. Fundamentally, the weakness is in the vfs code, because it doesn't really allow one to identify a file; following which one would have to walk the Source stack and ensure that the proposed source (VirtualFile) was not on the stack already, which would require a change to Source ("Are you this VF?") as well.

I'll let that settle into our brains for a bit before I come back to it.