debugger: add example code for "manual downcasting"

This commit is contained in:
hjk
2011-05-12 20:03:58 +02:00
parent 034765bcea
commit 9ccca96b20
2 changed files with 49 additions and 2 deletions

View File

@@ -2397,3 +2397,32 @@ if False:
d.putSubItem(Item(p.dereference(), iiname))
p = p + 1
#struct KRBase
#{
# enum Type { TYPE_A, TYPE_B } type;
# KRBase(Type _type) : type(_type) {}
#};
#
#struct KRA : KRBase { int x; int y; KRA():KRBase(TYPE_A),x(1),y(32) {} };
#struct KRB : KRBase { KRB():KRBase(TYPE_B) {} };
#
#void testKR()
#{
# KRBase *ptr1 = new KRA;
# KRBase *ptr2 = new KRB;
# ptr2 = new KRB;
#}
def qdump__KRBase(d, item):
warn("DIR %s " % dir(item))
if getattr(item, "__nested__", None) is None:
base = ["KRA", "KRB"][int(item.value["type"])]
nest = Item(item.value.cast(lookupType(base)), item.iname)
nest.__nested__ = True
warn("NEST %s " % dir(nest))
d.putItem(nest)
else:
d.putName("type")
d.putValue(item.value["type"])
d.putType(" ")

View File

@@ -2556,12 +2556,30 @@ void testMPI()
}
enum E {
ONE = 6
enum E { ONE = 6 };
struct KRBase
{
enum Type { TYPE_A, TYPE_B } type;
KRBase(Type _type) : type(_type) {}
};
struct KRA : KRBase { int x; int y; KRA():KRBase(TYPE_A),x(1),y(32) {} };
struct KRB : KRBase { KRB():KRBase(TYPE_B) {} };
void testKR()
{
KRBase *ptr1 = new KRA;
KRBase *ptr2 = new KRB;
ptr2 = new KRB;
}
int main(int argc, char *argv[])
{
testKR();
int *x = new int(32);
Q_UNUSED(x);
std::string s;