Re: [CEDET-devel] Temporary solution for Qt 4.5
Brought to you by:
zappo
From: Eric M. L. <er...@si...> - 2009-07-05 19:39:39
|
Hi David, 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. In my tests, I was using this setup file: (add-to-list 'semantic-lex-c-preprocessor-symbol-file "/tmp/foo.h") (if (featurep 'semantic-c) (semantic-c-reset-preprocessor-symbol-map)) as loading semantic-c will call reset on its own. The changes to mode local change how files map. In effect, changes to c ++ files were being skipped when applied to c-mode. The changes to semantic-c just moved where the child-mode was defined to be earlier. The remaining problem seems to be related to how the call to `semantic-refresh-table' is being handled. I'll continue to investigate in there. Eric On Sun, 2009-07-05 at 15:13 +0200, David Engster wrote: > > Doing this gets the system to work correctly ever time, except for the > > very-first C++ file loaded. There seems to be some sort of ordering > > issue, but the act of debugging during bootstrap causes everything to > > run in a different order, so I don't know why yet. > > I checked out your latest changes and it works like you describe. I've > tried to debug why it doesn't work on the first loaded C++ file. From > what I see, the file "foo.h" is correctly parsed and added to the > preprocessor symbol table. I think the problem stems from c++-mode being > defined as a child mode of c-mode. When I switch from c++-mode to > c-mode, it works right away. > > First of all, I think there's a bug in set-mode-local-parent, where the > arguments seem to be in the wrong order. This is the change I've done: > > ----------------- > > --- mode-local.el.~1.17.~ Fri Jul 3 14:44:42 2009 > +++ mode-local.el Sun Jul 5 14:49:37 2009 > @@ -164,7 +164,7 @@ > ;; Refresh mode bindings to get mode local variables inherited from > ;; PARENT. To work properly, the following should be called after > ;; PARENT mode local variables have been defined. > - (mode-local-map-mode-buffers mode 'activate-mode-local-bindings)) > + (mode-local-map-mode-buffers 'activate-mode-local-bindings mode)) > > (defsubst get-mode-local-parent (mode) > "Return the mode parent of the major mode MODE. > > ------------------ > > However, it still doesn't work. It seems the 'define-child-mode' in > semantic-c.el is called at the wrong time. At least, when I now manually > evaluate > > (define-child-mode c++-mode c-mode) > > in test.cpp, I can see that semantic-lex-spp-macro-symbol-obarray > correctly contains the FOO definition, which wasn't the case without the > above patch. The parsing still won't work, though. I'll try to debug a > bit further, but maybe you know what's the problem. > > -David > > ------------------------------------------------------------------------------ > _______________________________________________ > Cedet-devel mailing list > Ced...@li... > https://lists.sourceforge.net/lists/listinfo/cedet-devel |