make m_strDefaultValueForCmp always non-empty; this simplifies the code; fix wxMethod::GetAsString() not to use wxType::GetAsCleanString for return type

git-svn-id: https://svn.wxwidgets.org/svn/wx/wxWidgets/trunk@55840 c3d73ce0-8a6f-49c7-b76d-6d57e0e08775
This commit is contained in:
Francesco Montorsi
2008-09-24 21:58:56 +00:00
parent 75eec3adfb
commit 2cb3a02f1a
2 changed files with 35 additions and 28 deletions

View File

@@ -132,19 +132,24 @@ bool wxType::operator==(const wxType& m) const
void wxArgumentType::SetDefaultValue(const wxString& defval, const wxString& defvalForCmp) void wxArgumentType::SetDefaultValue(const wxString& defval, const wxString& defvalForCmp)
{ {
m_strDefaultValue=defval.Strip(wxString::both); m_strDefaultValue = defval.Strip(wxString::both);
m_strDefaultValueForCmp=defvalForCmp.Strip(wxString::both); m_strDefaultValueForCmp = defvalForCmp.IsEmpty() ? m_strDefaultValue : defvalForCmp.Strip(wxString::both);
// adjust aesthetic form of DefaultValue for the modify mode of ifacecheck:
// we may need to write it out in an interface header
if (m_strDefaultValue == "0u")
m_strDefaultValue = "0";
// in order to make valid&simple comparison on argument defaults, // in order to make valid&simple comparison on argument defaults,
// we reduce some of the multiple forms in which the same things may appear // we reduce some of the multiple forms in which the same things may appear
// to a single form: // to a single form:
if (m_strDefaultValue == "0u") if (m_strDefaultValueForCmp == "0u")
m_strDefaultValue = "0"; m_strDefaultValueForCmp = "0";
/* /*
if (IsPointer()) if (IsPointer())
m_strDefaultValue.Replace("0", "NULL"); m_strDefaultValueForCmp.Replace("0", "NULL");
else else
m_strDefaultValue.Replace("NULL", "0"); m_strDefaultValueForCmp.Replace("NULL", "0");
*/ */
// ADHOC-FIX: // ADHOC-FIX:
// doxygen likes to put wxDateTime:: in front of all wxDateTime enums; // doxygen likes to put wxDateTime:: in front of all wxDateTime enums;
@@ -153,8 +158,8 @@ void wxArgumentType::SetDefaultValue(const wxString& defval, const wxString& def
m_strDefaultValueForCmp.Replace("wxStockGDI::", ""); // same story for some other classes m_strDefaultValueForCmp.Replace("wxStockGDI::", ""); // same story for some other classes
// ADHOC-FIX: // ADHOC-FIX:
if (m_strDefaultValue.Contains("wxGetTranslation")) if (m_strDefaultValueForCmp.Contains("wxGetTranslation"))
m_strDefaultValue = "_(TOFIX)"; // TODO: wxGetTranslation gives problems to gccxml m_strDefaultValueForCmp = "_(TOFIX)"; // TODO: wxGetTranslation gives problems to gccxml
} }
bool wxArgumentType::operator==(const wxArgumentType& m) const bool wxArgumentType::operator==(const wxArgumentType& m) const
@@ -162,24 +167,21 @@ bool wxArgumentType::operator==(const wxArgumentType& m) const
if ((const wxType&)(*this) != (const wxType&)m) if ((const wxType&)(*this) != (const wxType&)m)
return false; return false;
const wxString& def1 = m_strDefaultValueForCmp.IsEmpty() ? m_strDefaultValue : m_strDefaultValueForCmp;
const wxString& def2 = m.m_strDefaultValueForCmp.IsEmpty() ? m.m_strDefaultValue : m.m_strDefaultValueForCmp;
// ADHOC-FIX: // ADHOC-FIX:
// default values for style attributes of wxWindow-derived classes in gccxml appear as raw // default values for style attributes of wxWindow-derived classes in gccxml appear as raw
// numbers; avoid false positives in this case! // numbers; avoid false positives in this case!
if (m_strArgName == m.m_strArgName && m_strArgName == "style" && if (m_strArgName == m.m_strArgName && m_strArgName == "style" &&
(def1.IsNumber() || def2.IsNumber())) (m_strDefaultValueForCmp.IsNumber() || m.m_strDefaultValueForCmp.IsNumber()))
return true; return true;
if (def1 != def2) if (m_strDefaultValueForCmp != m.m_strDefaultValueForCmp)
{ {
// maybe the default values are numbers. // maybe the default values are numbers.
// in this case gccXML gives as default values things like '-0x0000001' instead of just '-1'. // in this case gccXML gives as default values things like '-0x0000001' instead of just '-1'.
// To handle these cases, we try to convert the default value strings to numbers: // To handle these cases, we try to convert the default value strings to numbers:
long def1val, def2val; long def1val, def2val;
if (def1.ToLong(&def1val, 0 /* auto-detect */) && if (m_strDefaultValueForCmp.ToLong(&def1val, 0 /* auto-detect */) &&
def2.ToLong(&def2val, 0 /* auto-detect */)) m.m_strDefaultValueForCmp.ToLong(&def2val, 0 /* auto-detect */))
{ {
if (def1val == def2val) if (def1val == def2val)
return true; // the default values match return true; // the default values match
@@ -187,7 +189,7 @@ bool wxArgumentType::operator==(const wxArgumentType& m) const
if (g_verbose) if (g_verbose)
LogMessage("Argument type '%s = %s' has different default value from '%s = %s'", LogMessage("Argument type '%s = %s' has different default value from '%s = %s'",
m_strType, def1, m.m_strType, def2); m_strType, m_strDefaultValueForCmp, m.m_strType, m.m_strDefaultValueForCmp);
return false; return false;
} }
@@ -289,13 +291,11 @@ wxString wxMethod::GetAsString(bool bWithArgumentNames, bool bClean, bool bDepre
{ {
wxString ret; wxString ret;
// NOTE: for return and argument types, never use wxType::GetAsCleanString
// since in that way we'd miss important decorators like &,*,const etc
if (m_retType!=wxEmptyType) if (m_retType!=wxEmptyType)
{ ret += m_retType.GetAsString() + " ";
if (bClean)
ret += m_retType.GetAsCleanString() + " ";
else
ret += m_retType.GetAsString() + " ";
}
//else; this is a ctor or dtor //else; this is a ctor or dtor
ret += m_strName + "("; ret += m_strName + "(";

View File

@@ -64,6 +64,10 @@ public:
void SetTypeFromString(const wxString& t); void SetTypeFromString(const wxString& t);
wxString GetAsString() const wxString GetAsString() const
{ return m_strType; } { return m_strType; }
// returns this type _without_ any decoration,
// including the & (which indicates this is a reference),
// the * (which indicates this is a pointer), etc.
wxString GetAsCleanString() const wxString GetAsCleanString() const
{ return m_strTypeClean; } { return m_strTypeClean; }
@@ -108,11 +112,14 @@ public:
wxString GetArgumentName() const wxString GetArgumentName() const
{ return m_strArgName; } { return m_strArgName; }
void SetDefaultValue(const wxString& defval, const wxString& defvalForCmp = wxEmptyString); void SetDefaultValue(const wxString& defval,
const wxString& defvalForCmp = wxEmptyString);
wxString GetDefaultValue() const wxString GetDefaultValue() const
{ return m_strDefaultValue; } { return m_strDefaultValue; }
// returns the default value used for comparisons
wxString GetDefaultCleanValue() const wxString GetDefaultCleanValue() const
{ return m_strDefaultValueForCmp.IsEmpty() ? m_strDefaultValue : m_strDefaultValueForCmp; } { return m_strDefaultValueForCmp; }
bool HasDefaultValue() const bool HasDefaultValue() const
{ return !m_strDefaultValue.IsEmpty(); } { return !m_strDefaultValue.IsEmpty(); }
@@ -125,12 +132,12 @@ protected:
wxString m_strDefaultValue; wxString m_strDefaultValue;
// this string may differ from m_strDefaultValue if there were // this string may differ from m_strDefaultValue if there were
// preprocessor substitutions; can be wxEmptyString. // preprocessor substitutions or other "replacements" done to
// avoid false errors.
wxString m_strDefaultValueForCmp; wxString m_strDefaultValueForCmp;
wxString m_strArgName; // this one only makes sense when this wxType is // the argument name
// used as argument type (and not as return type) wxString m_strArgName;
// and can be empty.
}; };
extern wxArgumentType wxEmptyArgumentType; extern wxArgumentType wxEmptyArgumentType;