diff options
| author | Friedemann Kleint <Friedemann.Kleint@qt.io> | 2022-06-13 10:08:21 +0200 |
|---|---|---|
| committer | Friedemann Kleint <Friedemann.Kleint@qt.io> | 2022-06-15 19:49:46 +0200 |
| commit | 218301ee79c9b669aee80a376c2d2b3934330270 (patch) | |
| tree | ef0c4ad901982a155012fe4da2b4ada31edb88bb /tools/qtpy2cpp_lib/visitor.py | |
| parent | e5e4d388ab9a8a94c341e644ad00dd8a98980063 (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.py | 31 |
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) |
