Skip to content

Commit 0e69eaa

Browse files
committed
Also translate standalone unary operators (like -, !, or ~)
1 parent c8b3ed0 commit 0e69eaa

File tree

3 files changed

+13
-6
lines changed

3 files changed

+13
-6
lines changed

generator/abstractmetabuilder.cpp

Lines changed: 6 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -324,12 +324,12 @@ void AbstractMetaBuilder::traverseStreamOperator(FunctionModelItem item)
324324
}
325325
}
326326

327-
void AbstractMetaBuilder::traverseBinaryArithmeticOperator(FunctionModelItem item)
327+
void AbstractMetaBuilder::traverseArithmeticOperator(FunctionModelItem item)
328328
{
329329
ArgumentList arguments = item->arguments();
330-
if (arguments.size() == 2 && item->accessPolicy() == CodeModel::Public) {
330+
if ((arguments.size() == 1 || arguments.size() == 2) && item->accessPolicy() == CodeModel::Public) {
331331
AbstractMetaClass *aClass = argumentToClass(arguments.at(0));
332-
AbstractMetaClass *bClass = argumentToClass(arguments.at(1));
332+
AbstractMetaClass *bClass = arguments.size() == 2 ? argumentToClass(arguments.at(1)) : nullptr;
333333

334334
if (!aClass) return;
335335

@@ -597,9 +597,10 @@ bool AbstractMetaBuilder::build()
597597
m_dom->findFunctions("operator+") + m_dom->findFunctions("operator-")
598598
+ m_dom->findFunctions("operator/") + m_dom->findFunctions("operator*")
599599
+ m_dom->findFunctions("operator&") + m_dom->findFunctions("operator|")
600-
+ m_dom->findFunctions("operator%") + m_dom->findFunctions("operator^");
600+
+ m_dom->findFunctions("operator%") + m_dom->findFunctions("operator^")
601+
+ m_dom->findFunctions("operator!") + m_dom->findFunctions("operator~");
601602
for (FunctionModelItem item : stream_operators) {
602-
traverseBinaryArithmeticOperator(item);
603+
traverseArithmeticOperator(item);
603604
}
604605
}
605606
{

generator/abstractmetabuilder.h

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -95,7 +95,7 @@ class AbstractMetaBuilder
9595
void traverseFields(ScopeModelItem item, AbstractMetaClass *parent);
9696
void traverseStreamOperator(FunctionModelItem function_item);
9797
void traverseCompareOperator(FunctionModelItem item);
98-
void traverseBinaryArithmeticOperator(FunctionModelItem item);
98+
void traverseArithmeticOperator(FunctionModelItem item);
9999

100100
//! remove functions/methods that are overloads with equivalent parameter types
101101
//! when called from Python

generator/shellimplgenerator.cpp

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -314,6 +314,12 @@ void ShellImplGenerator::write(QTextStream &s, const AbstractMetaClass *meta_cla
314314
} else if (scriptFunctionName.startsWith("operator") && args.size()==1 && !fun->wasProtected()) {
315315
QString op = scriptFunctionName.mid(8);
316316
s << wrappedObject << op << " " << args.at(0)->argumentName();
317+
}
318+
else if (scriptFunctionName.startsWith("operator") && args.size() == 0 && scriptFunctionName.length() == 9 && !fun->wasProtected()) {
319+
// only the unary operators consisting of one char can be applied by prepending the operator...
320+
QString op = scriptFunctionName.mid(8);
321+
// unary operator
322+
s << op << " " << wrappedObject;
317323
} else {
318324
if (fun->isStatic()) {
319325
if (fun->wasProtected()) {

0 commit comments

Comments
 (0)