aboutsummaryrefslogtreecommitdiffstats
path: root/tools/qtpy2cpp_lib/visitor.py
diff options
context:
space:
mode:
authorFriedemann Kleint <Friedemann.Kleint@qt.io>2022-06-13 10:08:21 +0200
committerFriedemann Kleint <Friedemann.Kleint@qt.io>2022-06-15 19:49:46 +0200
commit218301ee79c9b669aee80a376c2d2b3934330270 (patch)
treeef0c4ad901982a155012fe4da2b4ada31edb88bb /tools/qtpy2cpp_lib/visitor.py
parente5e4d388ab9a8a94c341e644ad00dd8a98980063 (diff)
qtpy2cpp: Handle "augmented assignment" (operator +=, -=)
As a drive-by add missing operators -, /. Pick-to: 6.3 Task-number: PYSIDE-1945 Change-Id: I6d43d5e03930232ebba1d0d6308f70d03fafde03 Reviewed-by: Christian Tismer <tismer@stackless.com>
Diffstat (limited to 'tools/qtpy2cpp_lib/visitor.py')
-rw-r--r--tools/qtpy2cpp_lib/visitor.py31
1 files changed, 24 insertions, 7 deletions
diff --git a/tools/qtpy2cpp_lib/visitor.py b/tools/qtpy2cpp_lib/visitor.py
index d45d79b9d..3f63bb7a6 100644
--- a/tools/qtpy2cpp_lib/visitor.py
+++ b/tools/qtpy2cpp_lib/visitor.py
@@ -88,8 +88,16 @@ class ConvertVisitor(ast.NodeVisitor, CppFormatter):
self._debug_leave(node)
def visit_Add(self, node):
+ self._handle_bin_op(node, "+")
+
+ def _is_augmented_assign(self):
+ """Is it 'Augmented_assign' (operators +=/-=, etc)?"""
+ return self._stack and isinstance(self._stack[-1], ast.AugAssign)
+
+ def visit_AugAssign(self, node):
+ """'Augmented_assign', Operators +=/-=, etc."""
self.generic_visit(node)
- self._output_file.write(' + ')
+ self._output_file.write("\n")
def visit_Assign(self, node):
self.INDENT()
@@ -141,13 +149,17 @@ class ConvertVisitor(ast.NodeVisitor, CppFormatter):
self.generic_visit(node)
self._output_file.write(')')
- def visit_BitAnd(self, node):
+ def _handle_bin_op(self, node, op):
+ """Handle a binary operator which can appear as 'Augmented Assign'."""
self.generic_visit(node)
- self._output_file.write(" & ")
+ full_op = f" {op}= " if self._is_augmented_assign() else f" {op} "
+ self._output_file.write(full_op)
+
+ def visit_BitAnd(self, node):
+ self._handle_bin_op(node, "&")
def visit_BitOr(self, node):
- self.generic_visit(node)
- self._output_file.write(" | ")
+ self._handle_bin_op(node, "|")
def _format_call(self, node):
# Decorator list?
@@ -209,6 +221,9 @@ class ConvertVisitor(ast.NodeVisitor, CppFormatter):
self.indent_line('};')
del self._class_scope[-1]
+ def visit_Div(self, node):
+ self._handle_bin_op(node, "/")
+
def visit_Eq(self, node):
self.generic_visit(node)
self._output_file.write(" == ")
@@ -316,8 +331,7 @@ class ConvertVisitor(ast.NodeVisitor, CppFormatter):
self._output_file.write(" <= ")
def visit_Mult(self, node):
- self.generic_visit(node)
- self._output_file.write(' * ')
+ self._handle_bin_op(node, "*")
def _within_context_manager(self):
"""Return whether we are within a context manager (with)."""
@@ -392,6 +406,9 @@ class ConvertVisitor(ast.NodeVisitor, CppFormatter):
self.generic_visit(node)
self._output_file.write(format_literal(node))
+ def visit_Sub(self, node):
+ self._handle_bin_op(node, "-")
+
def visit_UnOp(self, node):
self.generic_visit(node)