Script: Debug output for proplist contains all properties

Günther Brammer 2011-05-05 22:27:22 +02:00
parent af52109912
commit fed6d6a0de
4 changed files with 28 additions and 18 deletions

View File

@ -295,15 +295,20 @@ void C4Property::CompileFunc(StdCompiler *pComp, C4ValueNumbers * numbers)
pComp->Value(mkParAdapt(Value, numbers));
}
void C4PropList::AppendDataString(StdStrBuf * out, const char * delim)
void C4PropList::AppendDataString(StdStrBuf * out, const char * delim, int depth)
{
StdStrBuf & DataString = *out;
if (depth > 2 && Properties.GetSize())
{
DataString.Append("...");
return;
}
const C4Property * p = Properties.First();
while (p)
{
DataString.Append(p->Key->GetData());
DataString.Append(" = ");
DataString.Append(p->Value.GetDataString());
DataString.Append(p->Value.GetDataString(depth + 1));
p = Properties.Next(p);
if (p) DataString.Append(delim);
}

View File

@ -99,7 +99,7 @@ public:
// Every proplist has to be initialized by either Init or CompileFunc.
void CompileFunc(StdCompiler *pComp, C4ValueNumbers *);
void AppendDataString(StdStrBuf * out, const char * delim);
void AppendDataString(StdStrBuf * out, const char * delim, int depth = 0);
bool operator==(const C4PropList &b) const;
#ifdef _DEBUG

View File

@ -86,9 +86,8 @@ bool C4Value::WarnAboutConversion(C4V_Type Type, C4V_Type vtToType)
}
// Humanreadable debug output
StdStrBuf C4Value::GetDataString() const
StdStrBuf C4Value::GetDataString(int depth) const
{
// ouput by type info
switch (GetType())
{
@ -99,29 +98,35 @@ StdStrBuf C4Value::GetDataString() const
case C4V_C4Object:
case C4V_PropList:
{
// obj exists?
if (!C4PropListNumbered::CheckPropList(Data.PropList))
return FormatString("%ld", static_cast<long>(Data.Int));
else if (Data.PropList && Data.PropList->GetPropListNumbered())
if (Data.PropList->Status == C4OS_NORMAL)
return FormatString("%s #%d", Data.PropList->GetName(), Data.PropList->GetPropListNumbered()->Number);
StdStrBuf DataString;
DataString = "{";
if (Data.PropList->GetObject())
{
if (Data.Obj->Status == C4OS_NORMAL)
DataString.AppendFormat("#%d, ", Data.Obj->Number);
else
return FormatString("{%s #%d}", Data.PropList->GetName(), Data.PropList->GetPropListNumbered()->Number);
else if (Data.PropList)
return FormatString("{}");
else
return StdStrBuf("0"); // (impossible)
DataString.AppendFormat("(#%d), ", Data.Obj->Number);
}
else if (Data.PropList->GetDef())
DataString.AppendFormat("%s, ", Data.PropList->GetDef()->id.ToString());
Data.PropList->AppendDataString(&DataString, ", ", depth);
DataString.AppendChar('}');
return DataString;
}
case C4V_String:
return (Data.Str && Data.Str->GetCStr()) ? FormatString("\"%s\"", Data.Str->GetCStr()) : StdStrBuf("(nullstring)");
case C4V_Array:
{
if (depth > 2 && Data.Array->GetSize())
{
return StdStrBuf("[...]");
}
StdStrBuf DataString;
DataString = "[";
for (int32_t i = 0; i < Data.Array->GetSize(); i++)
{
if (i) DataString.Append(", ");
DataString.Append(static_cast<const StdStrBuf &>(Data.Array->GetItem(i).GetDataString()));
DataString.Append(std::move(Data.Array->GetItem(i).GetDataString(depth + 1)));
}
DataString.AppendChar(']');
return DataString;

View File

@ -144,7 +144,7 @@ public:
void Denumerate(C4ValueNumbers *);
StdStrBuf GetDataString() const;
StdStrBuf GetDataString(int depth = 0) const;
ALWAYS_INLINE bool ConvertTo(C4V_Type vtToType) const // convert to dest type
{