aboutsummaryrefslogtreecommitdiffstats
path: root/tools/qtpy2cpp_lib/visitor.py
diff options
context:
space:
mode:
authorFriedemann Kleint <Friedemann.Kleint@qt.io>2022-06-01 10:43:14 +0200
committerFriedemann Kleint <Friedemann.Kleint@qt.io>2022-06-03 23:08:54 +0200
commitfba2f8dad8e1d313b4bab13950bb7607b2b8e1da (patch)
treee3ca5144e20fbe2d4acd424e3c3a54908f273b6b /tools/qtpy2cpp_lib/visitor.py
parente141ea41cf6f2840281ab6e52b0861a6d1dcc137 (diff)
qtpy2cpp: Handle context managers
Pick-to: 6.3 Task-number: PYSIDE-1945 Change-Id: I70dd4c139ef690964f1a65c6d995a0112d3dcfa3 Reviewed-by: Christian Tismer <tismer@stackless.com>
Diffstat (limited to 'tools/qtpy2cpp_lib/visitor.py')
-rw-r--r--tools/qtpy2cpp_lib/visitor.py20
1 files changed, 20 insertions, 0 deletions
diff --git a/tools/qtpy2cpp_lib/visitor.py b/tools/qtpy2cpp_lib/visitor.py
index 97048dec4..5bb02db31 100644
--- a/tools/qtpy2cpp_lib/visitor.py
+++ b/tools/qtpy2cpp_lib/visitor.py
@@ -180,6 +180,9 @@ class ConvertVisitor(ast.NodeVisitor, CppFormatter):
def visit_Call(self, node):
self._format_call(node)
+ # Context manager expression?
+ if self._stack and isinstance(self._stack[-1], ast.withitem):
+ self._output_file.write(";\n")
def _write_function_args(self, args_node):
# Manually do visit(), skip the children of func
@@ -301,6 +304,9 @@ class ConvertVisitor(ast.NodeVisitor, CppFormatter):
def visit_Name(self, node):
"""Format a variable reference (cf visit_Attribute)"""
+ # Context manager variable?
+ if self._stack and isinstance(self._stack[-1], ast.withitem):
+ return
self._output_file.write(format_reference(node))
def visit_NameConstant(self, node):
@@ -342,6 +348,20 @@ class ConvertVisitor(ast.NodeVisitor, CppFormatter):
def visit_UnOp(self, node):
self.generic_visit(node)
+ def visit_With(self, node):
+ self.indent()
+ self.INDENT()
+ self._output_file.write("{ // Converted from context manager\n")
+ for item in node.items:
+ self.INDENT()
+ if item.optional_vars:
+ self._output_file.write(format_reference(item.optional_vars))
+ self._output_file.write(" = ")
+ self.generic_visit(node)
+ self.INDENT()
+ self._output_file.write("}\n")
+ self.dedent()
+
def _debug_enter(self, node, parent=None):
message = '{}>generic_visit({})'.format(' ' * self ._debug_indent,
debug_format_node(node))