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