07.07.2011, 19:20, [email protected]:
> On Jul 7, 2011, at 16:08, ext Konstantin Tokarev wrote:
>
>>  07.07.2011, 17:57, [email protected]:
>>>  On Jul 7, 2011, at 15:22, ext Konstantin Tokarev wrote:
>>>>   07.07.2011, 17:16, [email protected]:
>>>>>   My current implementation idea is to redefine Q_SLOT, slots, signals, 
>>>>> and Q_SIGNAL to expand to an __attribute__, pick that up in the parser, 
>>>>> and annotate the AST.
>>>>   How do you redefine slots and signals? They apply to several methods so 
>>>> simple macro substitution won't work.
>>>  Yes, that why those two are the most "exciting" macros. So the quick 
>>> description is to use a custom qobjectdefs.h containing:
>>>
>>>  #define signals protected __attribute__((q_signal))
>>>  #define slots __attribute__((q_slot))
>>>
>>>  Then in lib/Parse/ParseDeclCXX.cpp (in Clang (!)) store the trailing 
>>> attributes in the AST node, and during code-completion, check for those 
>>> attributes.
>>  There are some problems with this approach.
>>
>>  1. I don't know if any compiler allows __attribute__ on access specifier .
>
> None do. Real compilers (the ones started when you hit "Build", meaning the 
> ones that do a real code generation) get the normal/usual header, so they do 
> not see them.

But you are modifying code which also does compilation, aren't you?

>
> But for code completion, you only need the engine that does the actual code 
> completion to handle it, and only that single engine gets those defines. That 
> engine just happens to be the one in libclang.so (which does not even contain 
> a code generator).
>
>>  2. Clang assumes that anything in AST has its representation in source 
>> code. You are creating "phantom" attributes which don't exist in actual code.
>
> They are just as real as __attribute__((__deprecated__)) when used through 
> Q_DECL_DEPRECATED, so nothing phantom.
>
>>  BTW, haven't you considered creation of custom AST nodes (i.e., subclass 
>> CXXRecordDecl) with additional fields?
>
> Yes, but this would be quite a big change (the current patch file is 233 
> lines).

But it could be implemented without patching of Clang.

>Plus, this is also the way that IBOutlet/IBAction (or after preprocessor 
>expansion: __attribute__((iboutlet)) and __attribute__((ibaction)) ) are 
>handled. And those two happen to do nearly the same for Cocoa/ObjC as 
>Q_SIGNAL/Q_SLOT for Qt ;-)

AFAIK, IBOutlet/IBAction apply to single identifier (field or method, 
respectively)

-- 
Regards,
Konstantin
_______________________________________________
Qt-creator mailing list
[email protected]
http://lists.qt.nokia.com/mailman/listinfo/qt-creator

Reply via email to