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