[lldb-dev] Enumerating the members of an enum

Russell Harmon russ at eatnumber1.com
Wed Oct 23 13:43:33 PDT 2013


That's fine with me.

Since an enumeration member has no corresponding QualType (there's only
EnumConstantDecl), in order to put all the logic of enumerating enum
members into QualASTType, QualASTType would have to be able to create
instances of itself not directly backed by a QualType. I think probably the
best way to go would be to have the TypeEnumMemberImpl that I'm writing
recieve a reference to the QualASTType of the enum itself and the index of
this enum member and either eagerly or lazily pull the relevant information
out. What do you think?

--
Russell Harmon


On Tue, Oct 22, 2013 at 5:57 PM, Greg Clayton <gclayton at apple.com> wrote:

> How about SBTypeEnumMember? Everything in SBType.h currently starts with
> SBType.
>
> On Oct 22, 2013, at 3:53 PM, Russell Harmon <russ at eatnumber1.com> wrote:
>
> > I had a full email saying why I disagree written when I convinced myself
> that I agree. My thinking is that an enum member is the only "type" (that I
> can think of) which is itself also a value. Anyway, I'm fine with what
> you've outlined, although the name SBTypeEnumerator is a bit confusing. How
> about SBValuedType or SBEnumTypeMember?
> >
> > --
> > Russell Harmon
> >
> >
> > On Mon, Oct 14, 2013 at 10:45 AM, Enrico Granata <egranata at apple.com>
> wrote:
> > Russell,
> > I agree with Greg that this is a more sensible approach than hijacking
> SBTypeList for something that is not a type
> > If you want to go ahead and work in this area, you are most welcome to
> >
> > Just a side note, since our SB objects are backed by one opaque-pointer
> type instance variable, it might make sense to define a TypeEnumeratorImpl
> class (and a corresponding TypeEnumeratorListImpl) much like SBType is
> backed by TypeImpl (technically, shared_ptr<TypeImpl>)
> > Having these classes in lldb-core would allow us to implement this
> functionality at the ClangASTType level and then just export it at the SB
> API level
> >
> > What are your thoughts on this approach?
> >
> > Enrico Granata
> > 📩 egranata@.com
> > ☎️ 27683
> >
> > On Oct 14, 2013, at 10:22 AM, Greg Clayton <gclayton at apple.com> wrote:
> >
> >> An SBTypeList contains a list of SBType objects. It would not be very
> useful since SBType objects do not contain a values.
> >>
> >> We should probably make an SBTypeEnumerator. Something like:
> >>
> >>
> >> class SBTypeEnumerator
> >> {
> >>      bool
> >>      IsSigned();
> >>
> >>      // Get the enumerator value as a signed integer
> >>      int64_t
> >>      GetValueAsSigned();
> >>
> >>      // Get the enumerator value as an unsigned integer
> >>        uint64_t
> >>      GetValueAsUnsigned();
> >>
> >>      // Return the exact integer type for this enumerator
> >>      SBType
> >>      GetType();
> >>
> >>      const char *
> >>      GetName();
> >> };
> >>
> >> Then we would need to add a SBTypeEnumeratorList class as well:
> >>
> >> class SBTypeEnumeratorList
> >> {
> >>      SBTypeEnumerator
> >>      GetEnumeratorAtIndex (uint32_t idx);
> >>
> >>      SBTypeEnumerator
> >>      GetEnumeratorByName (const char *name);
> >>
> >>      SBTypeEnumeratorList
> >>      GetEnumeratorsByValue (int64_t value);
> >>
> >>      SBTypeEnumeratorList
> >>      GetEnumeratorsByValue (uint64_t value);
> >> };
> >>
> >> Then we would need to add functions to SBType:
> >>
> >> class SBType
> >> {
> >>      SBTypeEnumeratorList
> >>      GetEnumerators();
> >> }
> >>
> >> This would return a valid SBTypeEnumeratorList only if the SBType it
> was run on is an enumeration type.
> >>
> >>
> >>
> >> On Oct 13, 2013, at 5:14 PM, Russell Harmon <russ at eatnumber1.com>
> wrote:
> >>
> >>> According to the C11 standard, N1570, §6.7.2.2.3, "The identifiers in
> an enumerator list are declared as constants that have type int". Based on
> this, wouldn't it make most sense to have a function that returns an
> SBTypeList of ints?
> >>>
> >>> Is there an easy work around for this missing bit of API, or shall I
> add the necessary pieces?
> >>>
> >>> --
> >>> Russell Harmon
> >>>
> >>>
> >>> On Mon, Oct 7, 2013 at 10:45 AM, Enrico Granata <egranata at apple.com>
> wrote:
> >>> As far as I can tell/remember, this is missing API
> >>>
> >>> Technically, it would not be an SBTypeList since the entries in an
> enumerator are *NOT* types.
> >>>
> >>> We would probably have to come up with a new class like an
> SBEnumeratorEntry (I am sure better names are possible :-) that wraps the
> notion of a (numeric_value,string_name) pair
> >>>
> >>> Enrico Granata
> >>> 📩 egranata@.com
> >>> ☎️ 27683
> >>>
> >>> On Oct 7, 2013, at 12:23 AM, Russell Harmon <russ at eatnumber1.com>
> wrote:
> >>>
> >>>> Is there a way to enumerate the fields of an enum (e.x. get an
> SBTypeList from an enum), or is that missing API?
> >>>>
> >>>> Thanks
> >>>> Russell Harmon
> >>>> _______________________________________________
> >>>> lldb-dev mailing list
> >>>> lldb-dev at cs.uiuc.edu
> >>>> http://lists.cs.uiuc.edu/mailman/listinfo/lldb-dev
> >>>
> >>>
> >>> _______________________________________________
> >>> lldb-dev mailing list
> >>> lldb-dev at cs.uiuc.edu
> >>> http://lists.cs.uiuc.edu/mailman/listinfo/lldb-dev
> >>
> >
> >
>
>
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.llvm.org/pipermail/lldb-dev/attachments/20131023/e1fc5fae/attachment.html>


More information about the lldb-dev mailing list