+
+// ===========================================================================
+// debug methods
+// ===========================================================================
+
+#ifdef __WXDEBUG__
+
+void spContext::Dump(const wxString& indent) const
+{
+ DumpThis(indent);
+
+ // increase it for the children
+ wxString indentChild = indent + " ";
+
+ for ( MMemberListT::const_iterator i = mMembers.begin();
+ i != mMembers.end();
+ i++ ) {
+ (*i)->Dump(indentChild);
+ }
+}
+
+void spContext::DumpThis(const wxString& indent) const
+{
+ wxFAIL_MSG("abstract base class can't be found in parser tree!");
+}
+
+void spParameter::DumpThis(const wxString& indent) const
+{
+ wxLogDebug("%sparam named '%s' of type '%s'",
+ indent.c_str(), mName.c_str(), mType.c_str());
+}
+
+void spAttribute::DumpThis(const wxString& indent) const
+{
+ wxLogDebug("%svariable named '%s' of type '%s'",
+ indent.c_str(), mName.c_str(), mType.c_str());
+}
+
+void spOperation::DumpThis(const wxString& indent) const
+{
+ wxString protection;
+ if ( !!mScope ) {
+ switch ( mVisibility ) {
+ case SP_VIS_PUBLIC:
+ protection = "public";
+ break;
+
+ case SP_VIS_PROTECTED:
+ protection = "protected";
+ break;
+
+ case SP_VIS_PRIVATE:
+ protection = "private";
+ break;
+
+ default:
+ wxFAIL_MSG("unknown protection type");
+ }
+ }
+ else {
+ protection = "global";
+ }
+
+ wxLogDebug("%s%s%s%s function named '%s::%s' of type '%s'",
+ indent.c_str(),
+ mIsConstant ? "const " : "",
+ mIsVirtual ? "virtual " : "",
+ protection.c_str(),
+ mScope.c_str(), mName.c_str(), mRetType.c_str());
+}
+
+void spPreprocessorLine::DumpThis(const wxString& indent) const
+{
+ wxString kind;
+ switch ( mDefType ) {
+ case SP_PREP_DEF_DEFINE_SYMBOL:
+ kind = "define";
+ break;
+
+ case SP_PREP_DEF_REDEFINE_SYMBOL:
+ kind = "redefine";
+ break;
+
+ case SP_PREP_DEF_INCLUDE_FILE:
+ kind.Printf("include (%s)", CPP_GetIncludedFileNeme().c_str());
+ break;
+
+ case SP_PREP_DEF_OTHER:
+ kind = "other";
+ break;
+
+ }
+
+ wxLogDebug("%spreprocessor statement: %s",
+ indent.c_str(), kind.c_str());
+}
+
+void spClass::DumpThis(const wxString& indent) const
+{
+ wxString base;
+ for ( StrListT::const_iterator i = mSuperClassNames.begin();
+ i != mSuperClassNames.end();
+ i++ ) {
+ if ( !!base )
+ base += ", ";
+ base += *i;
+ }
+
+ if ( !base )
+ base = "none";
+
+ wxString kind;
+ switch ( mClassSubType ) {
+ case SP_CLTYPE_CLASS:
+ kind = "class";
+ break;
+
+ case SP_CLTYPE_TEMPLATE_CLASS:
+ kind = "template class";
+ break;
+
+ case SP_CLTYPE_STRUCTURE:
+ kind = "struc";
+ break;
+
+ case SP_CLTYPE_UNION:
+ kind = "union";
+ break;
+
+ case SP_CLTYPE_INTERFACE:
+ kind = "interface";
+ break;
+
+ default:
+ wxFAIL_MSG("unknown class subtype");
+ }
+
+ wxLogDebug("%s%s named '%s' (base classes: %s)",
+ indent.c_str(), kind.c_str(),
+ mName.c_str(), base.c_str());
+}
+
+void spEnumeration::DumpThis(const wxString& indent) const
+{
+ wxLogDebug("%senum named '%s'",
+ indent.c_str(), mName.c_str());
+}
+
+void spTypeDef::DumpThis(const wxString& indent) const
+{
+ wxLogDebug("%stypedef %s = %s",
+ indent.c_str(), mName.c_str(), mOriginalType.c_str());
+}
+
+void spFile::DumpThis(const wxString& indent) const
+{
+ wxLogDebug("%sfile '%s'",
+ indent.c_str(), mFileName.c_str());
+}
+
+#endif // __WXDEBUG__