From 54e8b63ae770cc9bac958fcfbdc23defff81f371 Mon Sep 17 00:00:00 2001 From: Mirek Fidler Date: Fri, 11 Feb 2022 17:27:54 +0100 Subject: [PATCH] ide: PDB debugger now supports ErrorValue --- uppsrc/ide/Debuggers/Pdb.h | 7 ++++--- uppsrc/ide/Debuggers/Pretty.cpp | 15 +++++++-------- uppsrc/ide/Debuggers/PrettyUpp.cpp | 8 ++++++++ upptst/PdbTests/main.cpp | 6 ++++++ 4 files changed, 25 insertions(+), 11 deletions(-) diff --git a/uppsrc/ide/Debuggers/Pdb.h b/uppsrc/ide/Debuggers/Pdb.h index a315efcf3..dac4114f3 100644 --- a/uppsrc/ide/Debuggers/Pdb.h +++ b/uppsrc/ide/Debuggers/Pdb.h @@ -274,10 +274,11 @@ struct Pdb : Debugger, ParentCtrl { Vector data_type; // type of data items (usually type_param) Vector data_ptr; // pointer to items (data_count.GetCount() * data_type.GetCount() items) Visual text; + bool has_data = true; // do display the data for SINGLE_VALUE (false for e.g. void Value) - void Text(const char *s, Color color = SRed) { text.Cat(s, color); } - void Text(const String& s, Color color = SRed) { text.Cat(s, color); } - void SetNull() { Text("Null", SCyan); } + void Text(const char *s, Color color = SRed) { text.Cat(s, color); has_data = false; } + void Text(const String& s, Color color = SRed) { text.Cat(s, color); has_data = false; } + void SetNull() { Text("Null", SCyan); has_data = false; } }; VectorMap&, int64, int, Pdb::Pretty&>>> pretty; diff --git a/uppsrc/ide/Debuggers/Pretty.cpp b/uppsrc/ide/Debuggers/Pretty.cpp index aa7a9af72..bc84af8af 100644 --- a/uppsrc/ide/Debuggers/Pretty.cpp +++ b/uppsrc/ide/Debuggers/Pretty.cpp @@ -146,14 +146,13 @@ bool Pdb::VisualisePretty(Visual& result, Pdb::Val val, dword flags) if(p.kind == SINGLE_VALUE) { Pretty p; PrettyVal(val, 0, 1, p); - if(p.text.part.GetCount()) - for(const VisualPart& vp : p.text.part) - result.Cat(vp.text, vp.ink); - else - if(p.data_type.GetCount() && p.data_ptr.GetCount()) - Visualise(result, MakeVal(p.data_type[0], p.data_ptr[0]), flags); - else - Visualise(result, val, flags | RAW); + for(const VisualPart& vp : p.text.part) + result.Cat(vp.text, vp.ink); + if(p.has_data) + if(p.data_type.GetCount() && p.data_ptr.GetCount()) + Visualise(result, MakeVal(p.data_type[0], p.data_ptr[0]), flags); + else + Visualise(result, val, flags | RAW); } else { // CONTAINER int count = (int)min(p.data_count, (int64)40); diff --git a/uppsrc/ide/Debuggers/PrettyUpp.cpp b/uppsrc/ide/Debuggers/PrettyUpp.cpp index ed617ee69..5018db715 100644 --- a/uppsrc/ide/Debuggers/PrettyUpp.cpp +++ b/uppsrc/ide/Debuggers/PrettyUpp.cpp @@ -174,6 +174,14 @@ void Pdb::PrettyValue(Pdb::Val val, const Vector&, int64 from, int count p.data_type << "Upp::WString"; p.data_ptr << v.address; } + if(st == 6) { // ERROR_V + p.Text("ErrorValue ", SLtRed()); + p.has_data = true; + a = PeekPtr(a); + Val v = GetAttr(MakeVal("Upp::RawValueRep", a), "v"); + p.data_type << "Upp::String"; + p.data_ptr << v.address; + } if(st == 9) // VALUEARRAY_V PrettyValueArray_(a, p); if(st == 12) diff --git a/upptst/PdbTests/main.cpp b/upptst/PdbTests/main.cpp index a75adf584..36d75b9e1 100644 --- a/upptst/PdbTests/main.cpp +++ b/upptst/PdbTests/main.cpp @@ -196,6 +196,12 @@ GUI_APP_MAIN v = m; DDUMP(v); + v = ErrorValue(); + DDUMP(v); + + v = ErrorValue("HellO!"); + DDUMP(v); + Value& ref = v; Value *ptr = &v;