From d12519423f1bde4bea68d8232c1482931793f145 Mon Sep 17 00:00:00 2001 From: Rene Gollent Date: Sun, 14 Apr 2013 10:48:14 -0400 Subject: [PATCH] Adjust CreateDerivedArrayType to also take the lower bound. Since valid array bounds vary by language, this needs to be passed in by the source language creating the derived type. Adjust callers accordingly. --- src/apps/debugger/debug_info/DwarfTypes.cpp | 8 ++++---- src/apps/debugger/debug_info/DwarfTypes.h | 3 ++- src/apps/debugger/model/Type.cpp | 2 +- src/apps/debugger/model/Type.h | 3 ++- src/apps/debugger/source_language/CppLanguage.cpp | 4 ++-- 5 files changed, 11 insertions(+), 9 deletions(-) diff --git a/src/apps/debugger/debug_info/DwarfTypes.cpp b/src/apps/debugger/debug_info/DwarfTypes.cpp index a72b228c94..c302be726a 100644 --- a/src/apps/debugger/debug_info/DwarfTypes.cpp +++ b/src/apps/debugger/debug_info/DwarfTypes.cpp @@ -253,8 +253,8 @@ DwarfType::CreateDerivedAddressType(address_type_kind addressType, status_t -DwarfType::CreateDerivedArrayType(uint64 elementCount, bool extendExisting, - ArrayType*& _resultType) +DwarfType::CreateDerivedArrayType(int64 lowerBound, int64 elementCount, + bool extendExisting, ArrayType*& _resultType) { DwarfArrayType* resultType = NULL; BReference baseTypeReference; @@ -271,8 +271,8 @@ DwarfType::CreateDerivedArrayType(uint64 elementCount, bool extendExisting, return B_NO_MEMORY; DwarfSubrangeType* subrangeType = new(std::nothrow) DwarfSubrangeType( - fTypeContext, fName, NULL, resultType, BVariant((uint64)0), - BVariant(elementCount - 1)); + fTypeContext, fName, NULL, resultType, BVariant(lowerBound), + BVariant(lowerBound + elementCount - 1)); if (subrangeType == NULL) return B_NO_MEMORY; diff --git a/src/apps/debugger/debug_info/DwarfTypes.h b/src/apps/debugger/debug_info/DwarfTypes.h index dadbf43927..f95b1a640c 100644 --- a/src/apps/debugger/debug_info/DwarfTypes.h +++ b/src/apps/debugger/debug_info/DwarfTypes.h @@ -115,7 +115,8 @@ public: AddressType*& _resultType); virtual status_t CreateDerivedArrayType( - uint64 elementCount, + int64 lowerBound, + int64 elementCount, bool extendExisting, ArrayType*& _resultType); diff --git a/src/apps/debugger/model/Type.cpp b/src/apps/debugger/model/Type.cpp index ebdd4e594e..318abf2f26 100644 --- a/src/apps/debugger/model/Type.cpp +++ b/src/apps/debugger/model/Type.cpp @@ -105,7 +105,7 @@ Type::CreateDerivedAddressType(address_type_kind kind, status_t -Type::CreateDerivedArrayType(uint64 elementCount, +Type::CreateDerivedArrayType(int64 lowerBound, int64 elementCount, bool extendExisting, ArrayType*& _resultType) { _resultType = NULL; diff --git a/src/apps/debugger/model/Type.h b/src/apps/debugger/model/Type.h index b3e018b0af..8ebf55adbe 100644 --- a/src/apps/debugger/model/Type.h +++ b/src/apps/debugger/model/Type.h @@ -141,7 +141,8 @@ public: AddressType*& _resultType); virtual status_t CreateDerivedArrayType( - uint64 elementCount, + int64 lowerBound, + int64 elementCount, bool extendExisting, // if the current object is already // an array type, attach an extra diff --git a/src/apps/debugger/source_language/CppLanguage.cpp b/src/apps/debugger/source_language/CppLanguage.cpp index e67a1637ab..d1904648dc 100644 --- a/src/apps/debugger/source_language/CppLanguage.cpp +++ b/src/apps/debugger/source_language/CppLanguage.cpp @@ -123,10 +123,10 @@ CppLanguage::ParseTypeExpression(const BString &expression, return B_ERROR; if (arrayType == NULL) { - result = _resultType->CreateDerivedArrayType(size, true, + result = _resultType->CreateDerivedArrayType(0, size, true, arrayType); } else { - result = arrayType->CreateDerivedArrayType(size, true, + result = arrayType->CreateDerivedArrayType(0, size, true, arrayType); }