From 47043dd3cc82fd53ce4de3e3f12f05ffff0eb963 Mon Sep 17 00:00:00 2001 From: Patricio Inzaghi <51960393+pinzaghi@users.noreply.github.com> Date: Wed, 9 Dec 2020 14:51:24 +0100 Subject: Extra line breaks when c_ast.If are chained (#401) --- pycparser/c_generator.py | 2 ++ tests/test_c_generator.py | 16 ++++++++++++++++ 2 files changed, 18 insertions(+) diff --git a/pycparser/c_generator.py b/pycparser/c_generator.py index 36b95fb..983d578 100644 --- a/pycparser/c_generator.py +++ b/pycparser/c_generator.py @@ -399,6 +399,8 @@ class CGenerator(object): # compute its own indentation. # return self.visit(n) + elif typ in (c_ast.If,): + return indent + self.visit(n) else: return indent + self.visit(n) + '\n' diff --git a/tests/test_c_generator.py b/tests/test_c_generator.py index a7e52e8..3c724a0 100644 --- a/tests/test_c_generator.py +++ b/tests/test_c_generator.py @@ -423,5 +423,21 @@ class TestCasttoC(unittest.TestCase): self.assertEqual(generator.visit(c_ast.Cast(void_type, test_fun)), '(void) test_fun()') + def test_nested_else_if_line_breaks(self): + generator = c_generator.CGenerator() + test_ast1 = c_ast.If(None, None, None) + test_ast2 = c_ast.If(None, None, c_ast.If(None, None, None)) + test_ast3 = c_ast.If(None, None, c_ast.If(None, None, c_ast.If(None, None, None))) + test_ast4 = c_ast.If(None, c_ast.Compound([]), c_ast.If(None, c_ast.Compound([]), c_ast.If(None, c_ast.Compound([]), None))) + + self.assertEqual(generator.visit(test_ast1), + 'if ()\n \n') + self.assertEqual(generator.visit(test_ast2), + 'if ()\n \nelse\n if ()\n \n') + self.assertEqual(generator.visit(test_ast3), + 'if ()\n \nelse\n if ()\n \nelse\n if ()\n \n') + self.assertEqual(generator.visit(test_ast4), + 'if ()\n{\n}\nelse\n if ()\n{\n}\nelse\n if ()\n{\n}\n') + if __name__ == "__main__": unittest.main() -- cgit v1.2.1