diff options
author | Friedemann Kleint <Friedemann.Kleint@qt.io> | 2022-05-28 20:54:03 +0200 |
---|---|---|
committer | Qt Cherry-pick Bot <cherrypick_bot@qt-project.org> | 2022-06-02 04:59:52 +0000 |
commit | 83ed8512797fea4549842d551eecb32fa2e698da (patch) | |
tree | adc19a8ab2dd8093f1d184f62d6d8f1cdc7ce71a | |
parent | f46855dc42cbfd39ef4db00dcd2d09f4453a3fdc (diff) |
qtpy2cpp: Handle main()
Check for the if __name__ == '__main__' statement
and convert that into a C main function.
Task-number: PYSIDE-1945
Change-Id: I75e38aca9ebc9dc0f79dc97a18e61c28b6b17505
Reviewed-by: Cristian Maureira-Fredes <cristian.maureira-fredes@qt.io>
(cherry picked from commit ef5c2bff2a9e396664b45c69ba1156ce38c6d21d)
Reviewed-by: Qt Cherry-pick Bot <cherrypick_bot@qt-project.org>
-rw-r--r-- | tools/qtpy2cpp_lib/visitor.py | 25 |
1 files changed, 25 insertions, 0 deletions
diff --git a/tools/qtpy2cpp_lib/visitor.py b/tools/qtpy2cpp_lib/visitor.py index 5614dc622..f5d4e0709 100644 --- a/tools/qtpy2cpp_lib/visitor.py +++ b/tools/qtpy2cpp_lib/visitor.py @@ -70,6 +70,19 @@ def _is_qt_constructor(assign_node): return None +def _is_if_main(if_node): + """Return whether an if statement is: if __name__ == '__main__' """ + test = if_node.test + return (isinstance(test, ast.Compare) + and len(test.ops) == 1 + and isinstance(test.ops[0], ast.Eq) + and isinstance(test.left, ast.Name) + and test.left.id == "__name__" + and len(test.comparators) == 1 + and isinstance(test.comparators[0], ast.Constant) + and test.comparators[0].value == "__main__") + + class ConvertVisitor(ast.NodeVisitor, CppFormatter): """AST visitor printing out C++ Note on implementation: @@ -239,6 +252,18 @@ class ConvertVisitor(ast.NodeVisitor, CppFormatter): def visit_If(self, node): # Manually do visit() to get the indentation right. Note: # elsif() is modelled as nested if. + + # Check for the main function + if _is_if_main(node): + self._output_file.write("\nint main(int argc, char *argv[])\n{\n") + self.indent() + for b in node.body: + self.visit(b) + self.indent_string("return 0;\n") + self.dedent() + self._output_file.write("}\n") + return + self.indent_string('if (') self.visit(node.test) self._output_file.write(') {\n') |