Plz check check the inline comments :)

On Fri, Nov 28, 2008 at 11:06 AM, Eric M. Ludlam <eric@siege-engine.com> wrote:
>>> bread <breaddawson@gmail.com> seems to think that:
 [ ... ]
>2. Sometimes, even if 'semantic-analyze-debug-assist' could show me all the
>possible completions, 'semantic-ia-complete-symbol-menu' might not show all.
>For example, after i added two other functions to bread.hpp:
>int set(int, int);
>void test();
>I got back to panda.cpp and try completions, only geta() and set(int, int)
>can be got, but when i try 'semantic-analyze-debug-assit', i was told:
 [ ... ]
>It seems that all the members are got by semantic. But this infomation can
>be losed after i closed emacs and reopen it, which means, after i reopen
>panda.cpp, i just find that even semantic-analyze-debug-assist can not get
>the possible completions. I need to manually 'C-u M-x bovinate' to make them

This sounds to me a bit like the include file was not reparsed due to
fast typing.  I looked in the code, and I can see how this may
happen.  I checked in changes to force a refresh during searches to
catch fast typists.  I don't know if this will solve the problem, so
let me know how it goes.

I've updated the codes from CVS and found the situation is like this now:

1) after i close panda.cpp and reopen it, everything is fine with the completions. I need not 'C-u M-x bovinate' to make 'semantic-analyze-debug-assist' and 'semantic-ia-complete-symbol-menu' work.

2) but the refesh problem of 'semantic-ia-complete-symbol-menu' remains there. I mean, after i modify bread.hpp, and turn to panda.cpp to see completions, i found the completions did not change. But in 'semantic-analyze-debug-assist', i noticed that my modification did work for it. Even 'C-u M-x bovinate' did not work, either. The completions remained different with the one listed in 'semantic-analyze-debug-assist'. Just as what was mentioned in 1), close panda.cpp and reopen it will solve this.

>What's more, after i use 'C-u M-x bovinate' to make the completions menu
>work properly, i found function overloading may not be processed. That
>happened after i added another version of set:
>void set(float, char);
>I can see it via 'semantic-analyze-debug-assist' but it's not in completions
>menu. It seems the newer one is hidden by the older one.
 [ ... ]

In the debug assist output, there are two lists.  A completion list,
and the list of "known members."  The completion list is stripped down
to items that matched a desired return argument data type.  Is that
perhaps what you see?

Yes, you r right. The completions are stripped to match the desired return argument. I did some tests and found when i have 2 functions like this:

int set(int, int);
float set(float, float);


float f; f = b.       will show me "float set(float, float)"
int i; i = b.           will show me "int set(int, int)"

It's wonderful!

But, if i have the 2 functions like this:

void set(int, int);
void set();


b.      will only show me "void set(int, int)" instead of both the two. The possible completions in 'semantic-analyze-debug-assist" does not include another version of set, either.



         Eric Ludlam:                       eric@siege-engine.com
  Siege: www.siege-engine.com          Emacs: http://cedet.sourceforge.net

Zhiqiu Kong (孔直秋)