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]>: > 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
Description: Binary data
_______________________________________________ cfe-commits mailing list [email protected] http://lists.cs.uiuc.edu/mailman/listinfo/cfe-commits
