Thread: [cedet-semantic] [CEDET-semantic] Error when parsing macros
Brought to you by:
zappo
From: bread <bre...@gm...> - 2009-04-12 03:08:31
|
Hi, I tried to find out what was wrong with the former parsing error i encountered several days before and I'm sure now it's related to macro parsing of semantic. This is an example: #ifndef _BREAD_H_ #define _BREAD_H_ #include <iostream> using namespace std; namespace bread_name{ class bread { public: int geta(); int getb(); void dump(const char *info1, const char *info2) { cout << info1 << endl; cout << info2 << endl; }; private: int m_a; int m_b; }; #define dump(a,b) dump(#a, #b) } #endif /* _BREAD_H_ */ I wrote a macro in order to use bread::dump(hello, world) instead of bread::dump("hello", "world"); But because it has exactly the same name with member function of class bread. Semantic can not well handle this. In the function list generated by semantic, there's only macro dump. all members of class bread are ignored. -- Zhiqiu Kong (孔直秋) |
From: Eric M. L. <er...@si...> - 2009-04-13 12:43:14
|
>>> bread <bre...@gm...> seems to think that: >Hi, > >I tried to find out what was wrong with the former parsing error i >encountered several days before and I'm sure now it's related to macro >parsing of semantic. This is an example: > [...] >#define dump(a,b) dump(#a, #b) >} > >#endif /* _BREAD_H_ */ > >I wrote a macro in order to use bread::dump(hello, world) instead of >bread::dump("hello", "world"); Hi, There is no accounting for recursive preprocessor macros in the existing Semantic C parser. I see where I can fix this, but I don't have a solution yet. I'll let you know when I can get it fixed. Eric -- Eric Ludlam: er...@si... Siege: www.siege-engine.com Emacs: http://cedet.sourceforge.net |
From: Eric M. L. <er...@si...> - 2009-04-14 23:03:49
|
>>> bread <bre...@gm...> seems to think that: > Hi, > > I tried to find out what was wrong with the former parsing error i > encountered several days before and I'm sure now it's related to macro > parsing of semantic. This is an example: [ ... ] > #define dump(a,b) dump(#a, #b) [ ... ] > Hi, I added recursion prevention into the macro expansion system for Semantic. I think it matches what the real CPP is supposed to do for deeper recursions, such as: #define S A #define A B #define B A int S () { } which should product a tag called "A". For others who have been reporting mysterious parsing failures that I was not able to reproduce in some headers, this may also help your cases. Please give it a try. Thanks Eric -- Eric Ludlam: er...@si... Siege: www.siege-engine.com Emacs: http://cedet.sourceforge.net |