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