Committed in r234762, thanks! > On Apr 1, 2015, at 3:38 PM, Loïc Jaquemet <[email protected]> wrote: > > Hi, > this is still the same patch as in 2013, > > Updated for r233836 > > Would someone be able to commit it at last ? > > > $ nosetests . > .LIBCLANG TOOLING ERROR: json-compilation-database: Error while > opening JSON database: No such file or directory > > ................................................................................................. > ---------------------------------------------------------------------- > Ran 98 tests in 1.554s > > OK > > llvm[0]: ***** Completed Release+Asserts Build > $ make check-all > llvm[0]: Running test suite > Testing Time: 136.64s > Expected Passes : 21027 > Expected Failures : 122 > Unsupported Tests : 99 > > > > > > > 2015-02-11 18:34 GMT-07:00 Loïc Jaquemet <[email protected] > <mailto:[email protected]>>: >> Updated for r228880 >> >> 2015-01-30 19:13 GMT-07:00 Loïc Jaquemet <[email protected]>: >>> + Removed the useless default that creates a warning. >>> + cleaned some whitespaces >>> >>> Testing Time: 127.86s >>> Expected Passes : 20169 >>> Expected Failures : 103 >>> Unsupported Tests : 88 >>> >>> 2015-01-29 19:08 GMT-07:00 Loïc Jaquemet <[email protected]>: >>>> my bad, >>>> >>>> I was using make check instead of make check-all >>>> >>>> the TU is fixed in the patch attached (2 modifs in print-type.cpp ) >>>> >>>> $ ./Release+Asserts/bin/llvm-lit ~/llvm/tools/clang/test/Index/ >>>> [..] >>>> Testing Time: 5.49s >>>> Expected Passes : 239 >>>> $ >>>> >>>> >>>> $ make check-all >>>> llvm[0]: Running test suite >>>> [..] >>>> Testing Time: 127.90s >>>> Expected Passes : 20158 >>>> Expected Failures : 101 >>>> Unsupported Tests : 88 >>>> >>>> >>>> >>>> 2015-01-29 18:22 GMT-07:00 Loïc Jaquemet <[email protected]>: >>>>> Apparently it was reverted in r227472 >>>>> >>>>> 2015-01-29 5:49 GMT-07:00 Francois Pichet <[email protected]>: >>>>>> I committed in r227432, thanks. >>>>>> >>>>>> On Wed, Jan 28, 2015 at 5:18 PM, Argyrios Kyrtzidis <[email protected]> >>>>>> wrote: >>>>>>> >>>>>>> Yes, I think it’s good to go, thanks Loïc! >>>>>>> >>>>>>> >>>>>>> On Jan 28, 2015, at 1:06 PM, Francois Pichet <[email protected]> >>>>>>> wrote: >>>>>>> >>>>>>> Hi, since your patch is just a rebasing of something that was already >>>>>>> reviewed, I think you can go ahead and commit.. >>>>>>> any objection? >>>>>>> >>>>>>> On Tue, Jan 27, 2015 at 7:36 PM, Loïc Jaquemet <[email protected]> >>>>>>> wrote: >>>>>>>> >>>>>>>> Hi, >>>>>>>> >>>>>>>> would it be possible to get a review for this patch (libclang/python >>>>>>>> bindings) ? >>>>>>>> >>>>>>>> Thanks >>>>>>>> >>>>>>>> 2015-01-21 19:00 GMT-07:00 Loïc Jaquemet <[email protected]>: >>>>>>>>> Please find this patches updated for .226743. >>>>>>>>> >>>>>>>>> >>>>>>>>> * libclang: Add three functions useful for dealing with anonymous >>>>>>>>> fields. >>>>>>>>> +clang_Cursor_getOffsetOfField >>>>>>>>> +clang_Cursor_isAnonymous >>>>>>>>> +clang_Type_visitFields >>>>>>>>> Fixed: reuse CXVisitorResult instead of introducing a new enum >>>>>>>>> >>>>>>>>> * Python; Add corresponding methods for dealing with anonymous fields. >>>>>>>>> >>>>>>>>> * TU in print-type >>>>>>>>> adds [nbFields] in c-index-test for records >>>>>>>>> for anonymous record, shows offset of field in anonymous and parent >>>>>>>>> record. ( clang_Type_getOffsetOf/clang_Cursor_getOffsetOfField) >>>>>>>>> >>>>>>>>> LLVM tests passes >>>>>>>>> python tests passees >>>>>>>>> >>>>>>>>> >>>>>>>>> * Reference from 2013/2014 >>>>>>>>> >>>>>>>>> http://lists.cs.uiuc.edu/pipermail/cfe-commits/Week-of-Mon-20140217/099453.html >>>>>>>>> >>>>>>>>> 2015-01-21 12:28 GMT-07:00 Francois Pichet <[email protected]>: >>>>>>>>>> Hi Loic, >>>>>>>>>> >>>>>>>>>> Seems like this was never committed in trunk? Any reason why? >>>>>>>>>> I have a project with a lot of anonymous struct and this patch would >>>>>>>>>> be >>>>>>>>>> useful. >>>>>>>>>> >>>>>>>>>> On Thu, Feb 20, 2014 at 2:40 AM, Argyrios Kyrtzidis >>>>>>>>>> <[email protected]> >>>>>>>>>> wrote: >>>>>>>>>>> >>>>>>>>>>> >>>>>>>>>>> On Feb 16, 2014, at 11:49 AM, Loïc Jaquemet >>>>>>>>>>> <[email protected]> >>>>>>>>>>> wrote: >>>>>>>>>>> >>>>>>>>>>>>> >>>>>>>>>>>>> +/** >>>>>>>>>>>>> + * \brief Visitor invoked for each field found by a traversal. >>>>>>>>>>>>> + * >>>>>>>>>>>>> + * This visitor function will be invoked for each field found by >>>>>>>>>>>>> + * clang_visitCursorFields(). Its first argument is the cursor >>>>>>>>>>>>> being >>>>>>>>>>>>> + * visited, its second argument is the client data provided to >>>>>>>>>>>>> + * clang_visitCursorFields(). >>>>>>>>>>>>> + * >>>>>>>>>>>>> + * The visitor should return one of the \c CXFieldVisitResult >>>>>>>>>>>>> values >>>>>>>>>>>>> + * to direct clang_visitCursorFields(). >>>>>>>>>>>>> + */ >>>>>>>>>>>>> +typedef enum CXFieldVisitResult (*CXFieldVisitor)(CXCursor C, >>>>>>>>>>>>> + CXClientData >>>>>>>>>>>>> client_data); >>>>>>>>>>>>> >>>>>>>>>>>>> +CINDEX_LINKAGE unsigned clang_Type_visitFields(CXType T, >>>>>>>>>>>>> + CXFieldVisitor >>>>>>>>>>>>> visitor, >>>>>>>>>>>>> + CXClientData >>>>>>>>>>>>> client_data); >>>>>>>>>>>>> >>>>>>>>>>>>> In general, the visitor is not recursing, right ? In that case why >>>>>>>>>>>>> not >>>>>>>>>>>>> use a simpler "getNumFields / getField" pair of functions ? >>>>>>>>>>>> >>>>>>>>>>>> Well, the source code (AST.Decl.h ) exposes a iterator on its >>>>>>>>>>>> fields. >>>>>>>>>>>> Given that in other similar cases a visitor is used, I did the >>>>>>>>>>>> same. >>>>>>>>>>>> >>>>>>>>>>>> I did not want to introduce new code/new logic. >>>>>>>>>>>> I just want to expose the iterator. >>>>>>>>>>>> >>>>>>>>>>>> Do you want me to change it to a "getNumFields / getField" pair of >>>>>>>>>>>> functions ? >>>>>>>>>>> >>>>>>>>>>> I see, the visitor interface is fine. >>>>>>>>>>> >>>>>>>>>>>> >>>>>>>>>>>> >>>>>>>>>>>>> +enum CXFieldVisitResult { >>>>>>>>>>>>> >>>>>>>>>>>>> Could you reuse CXVisitorResult instead of introducing a new enum >>>>>>>>>>>>> ? >>>>>>>>>>>> >>>>>>>>>>>> Yes. I did not see that one. >>>>>>>>>>>> Will change that. >>>>>>>>>>> >>>>>>>>>>> After that, LGTM! >>>>>>>>>>> >>>>>>>>>>>> >>>>>>>>>>>> >>>>>>>>>>>>> >>>>>>>>>>>>> >>>>>>>>>>>>> On Feb 10, 2014, at 5:13 PM, Loïc Jaquemet >>>>>>>>>>>>> <[email protected]> >>>>>>>>>>>>> wrote: >>>>>>>>>>>>> >>>>>>>>>>>>>> Hi, >>>>>>>>>>>>>> >>>>>>>>>>>>>> I'm pinging back about this patch : >>>>>>>>>>>>>> * libclang: Add three functions useful for dealing with anonymous >>>>>>>>>>>>>> fields. >>>>>>>>>>>>>> +clang_Cursor_getOffsetOfField >>>>>>>>>>>>>> +clang_Cursor_isAnonymous >>>>>>>>>>>>>> +clang_Type_visitFields >>>>>>>>>>>>>> >>>>>>>>>>>>>> Currently, there is no function in libclang to access clang logic >>>>>>>>>>>>>> that >>>>>>>>>>>>>> handles anonymous members in a record. >>>>>>>>>>>>>> >>>>>>>>>>>>>> Given the current API , there is no direct method to : >>>>>>>>>>>>>> a) recover the offset of an anonymous field. >>>>>>>>>>>>>> - displayname == spelling == '', clang_Type_getOffset does not >>>>>>>>>>>>>> work >>>>>>>>>>>>>> + new clang_Cursor_getOffsetOfField will expose that information >>>>>>>>>>>>>> b) clearly identify that DECL as an anonymous record. >>>>>>>>>>>>>> + new clang_Cursor_isAnonymous will expose that information >>>>>>>>>>>>>> >>>>>>>>>>>>>> When using clang_visitChildren, an anonymous member will be >>>>>>>>>>>>>> returned >>>>>>>>>>>>>> as a STRUCT_DECL/UNION_DECL. >>>>>>>>>>>>>> Currently the libclang user has to re-implement the logic to >>>>>>>>>>>>>> differentiate FIELD_DECL in the list of children nodes >>>>>>>>>>>>>> For example, >>>>>>>>>>>>>> >>>>>>>>>>>>>> struct A { >>>>>>>>>>>>>> struct {int a;} typeanon; >>>>>>>>>>>>>> struct { >>>>>>>>>>>>>> int bariton; >>>>>>>>>>>>>> union { >>>>>>>>>>>>>> int foo; >>>>>>>>>>>>>> int foo2; >>>>>>>>>>>>>> }; >>>>>>>>>>>>>> }; >>>>>>>>>>>>>> int c; >>>>>>>>>>>>>> } ; >>>>>>>>>>>>>> >>>>>>>>>>>>>> Some children are STRUCT_DECL, some are FIELD_DECL, some are >>>>>>>>>>>>>> attributes. >>>>>>>>>>>>>> Worse, >>>>>>>>>>>>>> children[0] == STRUCT_DECL (struct {int a;}) >>>>>>>>>>>>>> children[1] == FIELD_DECL (typeanon) >>>>>>>>>>>>>> children[2] == STRUCT_DECL (anonymous structure) >>>>>>>>>>>>>> children[3] == FIELD_DECL (int c) >>>>>>>>>>>>>> >>>>>>>>>>>>>> Sometime a STRUCT_DECL is a field (children[2]) sometimes it is >>>>>>>>>>>>>> just a >>>>>>>>>>>>>> STRUCT_DECL. >>>>>>>>>>>>>> >>>>>>>>>>>>>> The new function clang_Type_visitFields will expose the existing >>>>>>>>>>>>>> libclang capabilities to list only fields, and not all children >>>>>>>>>>>>>> node, >>>>>>>>>>>>>> as does clang_visitChildren. >>>>>>>>>>>>>> >>>>>>>>>>>>>> fields[0] == FIELD_DECL (first structure - typeanon) >>>>>>>>>>>>>> fields[1] == FIELD_DECL (second anonymous structure) >>>>>>>>>>>>>> fields[2] == FIELD_DECL (int c) >>>>>>>>>>>>>> >>>>>>>>>>>>>> >>>>>>>>>>>>>> >>>>>>>>>>>>>> >>>>>>>>>>>>>> >>>>>>>>>>>>>> >>>>>>>>>>>>>> >>>>>>>>>>>>>> -- >>>>>>>>>>>>>> Loïc Jaquemet >>>>>>>>>>>>>> <libclang-visit-fields.201116> >>>>>>>>>>>>> >>>>>>>>>>>> >>>>>>>>>>>> >>>>>>>>>>>> >>>>>>>>>>>> -- >>>>>>>>>>>> Loïc Jaquemet >>>>>>>>>>> >>>>>>>>>>> >>>>>>>>>>> _______________________________________________ >>>>>>>>>>> cfe-commits mailing list >>>>>>>>>>> [email protected] >>>>>>>>>>> http://lists.cs.uiuc.edu/mailman/listinfo/cfe-commits >>>>>>>>>> >>>>>>>>>> >>>>>>>>> >>>>>>>>> >>>>>>>>> >>>>>>>>> -- >>>>>>>>> Loïc Jaquemet >>>>>>>> >>>>>>>> >>>>>>>> >>>>>>>> -- >>>>>>>> Loïc Jaquemet >>>>>>> >>>>>>> >>>>>> >>>>> >>>>> >>>>> >>>>> -- >>>>> Loïc Jaquemet >>>> >>>> >>>> >>>> -- >>>> Loïc Jaquemet >>> >>> >>> >>> -- >>> Loïc Jaquemet >> >> >> >> -- >> Loïc Jaquemet > > > > -- > Loïc Jaquemet > <201501-visit-fields.r233836>
_______________________________________________ cfe-commits mailing list [email protected] http://lists.cs.uiuc.edu/mailman/listinfo/cfe-commits
