Code::Blocks Forums

Developer forums (C::B DEVELOPMENT STRICTLY!) => Development => CodeCompletion redesign => Topic started by: nullwu on October 22, 2009, 10:20:04 pm

Title: Partial C/C++ preprocessor function for codecompletion
Post by: nullwu on October 22, 2009, 10:20:04 pm
Hi all

English isn't my native language, so... :oops:

I made a patch for codecompletion, which implement some preprocessor function.
Maybe it's not necessary for somebody, but I do need. Or ... do I miss something???


features:
1. accept simple macro definition.
2. branch to "almost" right decision. (because the definition stored in macro still incomplete)
3. disabled block "highlight".
4. header files dependency calculation, let parsing sequence of source files more proper.

I tested this fragment of code under Pentium-M 1.2G box with
WindowXP + TDM gcc 4.4.0  & coLinux + gentoo + gcc 4.1.2
and wxWidgets 2.8.10 for sure.


[UPDATE]
sorry, my bad, the previous patch will disable the function browse in toolbar
here is the new patch


[attachment deleted by admin]
Title: Re: Partial C/C++ preprocessor function for codecompletion
Post by: ollydbg on October 23, 2009, 02:52:58 am
 :D
Thanks!!!
This is a so big patch. I will take time to check it.
Also, It seems the patch is against debugger_branch. :D

Title: Re: Partial C/C++ preprocessor function for codecompletion
Post by: MortenMacFly on October 23, 2009, 07:07:13 am
Here are my 2 cents (questions) from a look I had so far. Notice that I didn't try yet, I just looked at the code.

1.) Why exactly are you using the scripting engine? I didn't get the reason for that from a quick look. This surely makes the processing (of whatever) quite slow.

2.) You are accessing UI controls out of the parser thread (ParserThread::PreprocessorStyling). This will surely lead into a crash sooner or later. Why are you doing so?

Besides that it looks really interesting. I am looking forward to give it a try... :-)
Title: Re: Partial C/C++ preprocessor function for codecompletion
Post by: ollydbg on October 23, 2009, 07:20:53 am
1.) Why exactly are you using the scripting engine? I didn't get the reason for that from a quick look. This surely makes the processing (of whatever) quite slow.
This is the question I would like to ask either.

I'm not fully understand the whole code, but it seems the author use the Sq script engine to evaluate the #if condition's value.
Title: Re: Partial C/C++ preprocessor function for codecompletion
Post by: Ceniza on October 23, 2009, 09:34:09 am
1.) Why exactly are you using the scripting engine? I didn't get the reason for that from a quick look. This surely makes the processing (of whatever) quite slow.
This is the question I would like to ask either.

I'm not fully understand the whole code, but it seems the author use the Sq script engine to evaluate the #if condition's value.

If that's all he uses scripting for, my template abusive implementation of a preprocessor has the code to evaluate that in the file constexprevaluator.h.

I started to convert the code to something easier to understand (by removing all the template code), but that file is not yet converted. It works only up to the PPLexer now (Preprocessor and Lexer are still unconverted).
Title: Re: Partial C/C++ preprocessor function for codecompletion
Post by: nullwu on October 23, 2009, 09:54:54 am
<...deleted...>
Also, It seems the patch is against debugger_branch. :D
No, I always merge with trunk. but I'm watching the debugger branch too.

1.) Why exactly are you using the scripting engine? I didn't get the reason for that from a quick look. This surely makes the processing (of whatever) quite slow.
2.) You are accessing UI controls out of the parser thread (ParserThread::PreprocessorStyling). This will surely lead into a crash sooner or later. Why are you doing so?
Yes, scripting engine will slow down parsing, but it's result will guide CC to override some unnecessary parsing, it's worthy.
The PreprocessorStryling() is activated only under ParseBuffer* , so far, these series are called only from main thread. So it's safe for now.

<...>
This is the question I would like to ask either.

I'm not fully understand the whole code, but it seems the author use the Sq script engine to evaluate the #if condition's value.

If that's all he uses scripting for, my template abusive implementation of a preprocessor has the code to evaluate that in the file constexprevaluator.h.
<...>
Yes, that's all I use scripting for.


finally, something needs more description,
It needs reparsing 2~4 times when the project is the first time to load.
After batch parsing(reparsing), it will (re)produce a <proj>.ccdepend file.
It just calculate the 'header file' dependency, not macro, it does not maintain a exact define-use chain.
Title: Re: Partial C/C++ preprocessor function for codecompletion
Post by: MortenMacFly on October 23, 2009, 10:22:14 am
constexprevaluator.h.
Where is that?
Title: Re: Partial C/C++ preprocessor function for codecompletion
Post by: Ceniza on October 23, 2009, 12:04:30 pm
constexprevaluator.h.
Where is that?

Here (http://sites.google.com/site/ceniza666/ccpp) (CCPP.zip). After decompressing it, it's in CCPP/include/lexer/pp.