Polymorphize RawVec
This commit is contained in:
parent
ca5d25e2c4
commit
d6c0ebef50
7 changed files with 515 additions and 286 deletions
|
|
@ -56,7 +56,7 @@ class StdStringProvider(printer_base):
|
|||
self._valobj = valobj
|
||||
vec = valobj["vec"]
|
||||
self._length = int(vec["len"])
|
||||
self._data_ptr = unwrap_unique_or_non_null(vec["buf"]["ptr"])
|
||||
self._data_ptr = unwrap_unique_or_non_null(vec["buf"]["inner"]["ptr"])
|
||||
|
||||
def to_string(self):
|
||||
return self._data_ptr.lazy_string(encoding="utf-8", length=self._length)
|
||||
|
|
@ -74,7 +74,7 @@ class StdOsStringProvider(printer_base):
|
|||
vec = buf[ZERO_FIELD] if is_windows else buf
|
||||
|
||||
self._length = int(vec["len"])
|
||||
self._data_ptr = unwrap_unique_or_non_null(vec["buf"]["ptr"])
|
||||
self._data_ptr = unwrap_unique_or_non_null(vec["buf"]["inner"]["ptr"])
|
||||
|
||||
def to_string(self):
|
||||
return self._data_ptr.lazy_string(encoding="utf-8", length=self._length)
|
||||
|
|
@ -96,6 +96,7 @@ class StdStrProvider(printer_base):
|
|||
def display_hint():
|
||||
return "string"
|
||||
|
||||
|
||||
def _enumerate_array_elements(element_ptrs):
|
||||
for (i, element_ptr) in enumerate(element_ptrs):
|
||||
key = "[{}]".format(i)
|
||||
|
|
@ -112,6 +113,7 @@ def _enumerate_array_elements(element_ptrs):
|
|||
|
||||
yield key, element
|
||||
|
||||
|
||||
class StdSliceProvider(printer_base):
|
||||
def __init__(self, valobj):
|
||||
self._valobj = valobj
|
||||
|
|
@ -130,11 +132,14 @@ class StdSliceProvider(printer_base):
|
|||
def display_hint():
|
||||
return "array"
|
||||
|
||||
|
||||
class StdVecProvider(printer_base):
|
||||
def __init__(self, valobj):
|
||||
self._valobj = valobj
|
||||
self._length = int(valobj["len"])
|
||||
self._data_ptr = unwrap_unique_or_non_null(valobj["buf"]["ptr"])
|
||||
self._data_ptr = unwrap_unique_or_non_null(valobj["buf"]["inner"]["ptr"])
|
||||
ptr_ty = gdb.Type.pointer(valobj.type.template_argument(0))
|
||||
self._data_ptr = self._data_ptr.reinterpret_cast(ptr_ty)
|
||||
|
||||
def to_string(self):
|
||||
return "Vec(size={})".format(self._length)
|
||||
|
|
@ -155,11 +160,13 @@ class StdVecDequeProvider(printer_base):
|
|||
self._head = int(valobj["head"])
|
||||
self._size = int(valobj["len"])
|
||||
# BACKCOMPAT: rust 1.75
|
||||
cap = valobj["buf"]["cap"]
|
||||
cap = valobj["buf"]["inner"]["cap"]
|
||||
if cap.type.code != gdb.TYPE_CODE_INT:
|
||||
cap = cap[ZERO_FIELD]
|
||||
self._cap = int(cap)
|
||||
self._data_ptr = unwrap_unique_or_non_null(valobj["buf"]["ptr"])
|
||||
self._data_ptr = unwrap_unique_or_non_null(valobj["buf"]["inner"]["ptr"])
|
||||
ptr_ty = gdb.Type.pointer(valobj.type.template_argument(0))
|
||||
self._data_ptr = self._data_ptr.reinterpret_cast(ptr_ty)
|
||||
|
||||
def to_string(self):
|
||||
return "VecDeque(size={})".format(self._size)
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue