[lldb-dev] Enumerating the members of an enum

Russell Harmon russ at eatnumber1.com
Tue Oct 22 15:53:07 PDT 2013


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/20131022/3006dfaa/attachment.html>


More information about the lldb-dev mailing list