Author: anevilyak Date: 2011-07-01 03:54:58 +0200 (Fri, 01 Jul 2011) New Revision: 42353 Changeset: https://dev.haiku-os.org/changeset/42353 Modified: haiku/trunk/src/apps/debugger/value/value_nodes/BMessageValueNode.cpp haiku/trunk/src/apps/debugger/value/value_nodes/BMessageValueNode.h Log: Cleanups to simplify handling of pointer vs value types. Modified: haiku/trunk/src/apps/debugger/value/value_nodes/BMessageValueNode.cpp =================================================================== --- haiku/trunk/src/apps/debugger/value/value_nodes/BMessageValueNode.cpp 2011-07-01 00:05:29 UTC (rev 42352) +++ haiku/trunk/src/apps/debugger/value/value_nodes/BMessageValueNode.cpp 2011-07-01 01:54:58 UTC (rev 42353) @@ -64,9 +64,7 @@ { ValueLocation* parentLocation = fParent->Location(); ValueLocation* location; - CompoundType* type = dynamic_cast<CompoundType*>(fParent->GetType()); - if (type == NULL) - return B_BAD_VALUE; + CompoundType* type = fParent->GetMessageType(); status_t error = type->ResolveDataMemberLocation(fMember, *parentLocation, location); @@ -93,6 +91,7 @@ : ValueNode(nodeChild), fType(type), + fMessageType(NULL), fMessage() { fType->AcquireReference(); @@ -154,6 +153,7 @@ pieceLocation.SetToMemory(address.ToUInt64()); location->SetPieceAt(0, pieceLocation); } + fMessageType = baseType; _location = location; _value = NULL; @@ -300,16 +300,15 @@ if (!fChildren.IsEmpty()) return B_OK; - CompoundType* baseType = dynamic_cast<CompoundType*>( - fType->ResolveRawType(false)); - if (baseType == NULL) - return B_OK; + if (fMessageType == NULL) + return B_BAD_VALUE; + DataMember* member = NULL; Type* whatType = NULL; - for (int32 i = 0; i < baseType->CountDataMembers(); i++) { - member = baseType->DataMemberAt(i); + for (int32 i = 0; i < fMessageType->CountDataMembers(); i++) { + member = fMessageType->DataMemberAt(i); if (strcmp(member->Name(), "what") == 0) { whatType = member->GetType(); break; Modified: haiku/trunk/src/apps/debugger/value/value_nodes/BMessageValueNode.h =================================================================== --- haiku/trunk/src/apps/debugger/value/value_nodes/BMessageValueNode.h 2011-07-01 00:05:29 UTC (rev 42352) +++ haiku/trunk/src/apps/debugger/value/value_nodes/BMessageValueNode.h 2011-07-01 01:54:58 UTC (rev 42353) @@ -11,6 +11,9 @@ #include "ValueNode.h" +class CompoundType; + + class BMessageValueNode : public ValueNode { public: BMessageValueNode(ValueNodeChild* nodeChild, @@ -18,7 +21,6 @@ virtual ~BMessageValueNode(); virtual Type* GetType() const; - virtual status_t ResolvedLocationAndValue( ValueLoader* valueLoader, ValueLocation*& _location, @@ -30,6 +32,9 @@ virtual int32 CountChildren() const; virtual ValueNodeChild* ChildAt(int32 index) const; + CompoundType* GetMessageType() const + { return fMessageType; } + private: class BMessageFieldHeaderNode; class BMessageFieldHeaderNodeChild; @@ -42,6 +47,7 @@ private: Type* fType; + CompoundType* fMessageType; BMessage fMessage; ChildNodeList fChildren; };