diff options
-rw-r--r-- | typesystem.cpp | 32 |
1 files changed, 32 insertions, 0 deletions
diff --git a/typesystem.cpp b/typesystem.cpp index bbf7e86a1..8808e5314 100644 --- a/typesystem.cpp +++ b/typesystem.cpp @@ -436,6 +436,21 @@ static QString getNamePrefix(StackElement* element) return names.join("."); } +// Returns empty string if there's no error. +static QString checkSignatureError(const QString& signature, const QString& tag) +{ + QString funcName = signature.left(signature.indexOf('(')).trimmed(); + static QRegExp whiteSpace("\\s"); + if (!funcName.startsWith("operator ") && funcName.contains(whiteSpace)) { + return QString("Error in <%1> tag signature attribute '%2'.\n" + "White spaces aren't allowed in function names, " + "and return types should not be part of the signature.") + .arg(tag) + .arg(signature); + } + return QString(); +} + bool Handler::startElement(const QString &, const QString &n, const QString &, const QXmlAttributes &atts) { @@ -562,6 +577,11 @@ bool Handler::startElement(const QString &, const QString &n, if (element->type == StackElement::FunctionTypeEntry) { QString signature = attributes["signature"]; name = signature.left(signature.indexOf('(')).trimmed(); + QString errorString = checkSignatureError(signature, "function"); + if (!errorString.isEmpty()) { + m_error = errorString; + return false; + } QString rename = attributes["rename"]; if (!rename.isEmpty()) { static QRegExp functionNameRegExp("^[a-zA-Z_][a-zA-Z0-9_]*$"); @@ -1457,6 +1477,12 @@ bool Handler::startElement(const QString &, const QString &n, return false; } + QString errorString = checkSignatureError(signature, "add-function"); + if (!errorString.isEmpty()) { + m_error = errorString; + return false; + } + AddedFunction func(signature, attributes["return-type"], since); func.setStatic(attributes["static"] == "yes"); if (!signature.contains("(")) @@ -1496,6 +1522,12 @@ bool Handler::startElement(const QString &, const QString &n, return false; } + QString errorString = checkSignatureError(signature, "modify-function"); + if (!errorString.isEmpty()) { + m_error = errorString; + return false; + } + FunctionModification mod(since); m_currentSignature = mod.signature = signature; |