Re: [CEDET-devel] Temporary solution for Qt 4.5
Brought to you by:
zappo
From: David E. <de...@ra...> - 2009-07-08 16:35:58
|
David Engster <de...@ra...> writes: > Eric M. Ludlam <er...@si...> writes: >> I checked in some changes to semantic-c.el, and mode-local.el that >> gets a little closer. For the first c++ file case, it will now >> correctly enter into the various Semantic specific mode settings and >> preprocessor tables EXCEPT FOR the foo.h header file. For some reason >> this is showing up as empty, even though it is parsing the file and >> including any symbols found. Somehow that first parse just isn't geting >> the macro table. > I think I found another bug in mode-local.el, which prevented the > correct setting of the mode-local variables for c++-mode. Here's the > patch I've applied: [...] > Now, when I first load a c++ file, semantic-lex-spp-describe correctly > shows the FOO definition from foo.h. > > But parsing *still* does not work... M-x bovinate shows nil. But it > seems we're getting closer. :-) Hi Eric, I've dug a bit further and I think I know what's going wrong, but I don't know how to solve it. First of all, this has nothing to do with the FOO definition not being parsed - this problem is solved by the patch I posted. The problem is that the first C++ file loaded is not being parsed at all, at least with my current installation. The problem seems to be this: When you first load a C++ file (e.g. test.cpp), c++-mode gets defined as a child of c-mode, so `set-mode-local-parent' gets called and therefore `activate-mode-local-bindings' is executed for test.cpp. However, this prevents the execution of the mode-local-init-hook, since in `mode-local-post-major-mode-change' the file test.cpp is seen as already initialized (`mode-local-initialized-p' returns t, since we already called activate-mode-local-bindings). I tried to simply remove activate-mode-local-bindings in set-mode-local-parent, so that mode-local-init-hook gets called for test.cpp. However, the C parser is not yet installed, since the c++-mode-hook was not yet executed... -David |