diff options
author | Eli Bendersky <eliben@users.noreply.github.com> | 2015-02-21 09:27:49 -0800 |
---|---|---|
committer | Eli Bendersky <eliben@users.noreply.github.com> | 2015-02-21 09:27:49 -0800 |
commit | fc9b69bfc4fb15ee371cffe4a91e5b21cfb16415 (patch) | |
tree | ab15c268ac6e81e19cd05e5cd9a01a71942efc41 | |
parent | b036e36318ea41c1a5a484da8c0218cdafccec99 (diff) | |
parent | b4fc6edfe397babe95322ab09c5d1c3575819976 (diff) | |
download | pycparser-fc9b69bfc4fb15ee371cffe4a91e5b21cfb16415.tar.gz |
Merge pull request #69 from ssfrr/master
adds visit_FuncDecl method to CGenerator
-rw-r--r-- | pycparser/c_generator.py | 5 | ||||
-rw-r--r-- | tests/test_c_generator.py | 26 |
2 files changed, 28 insertions, 3 deletions
diff --git a/pycparser/c_generator.py b/pycparser/c_generator.py index a76638d..d605276 100644 --- a/pycparser/c_generator.py +++ b/pycparser/c_generator.py @@ -15,8 +15,6 @@ class CGenerator(object): generic_visit. """ def __init__(self): - self.output = '' - # Statements start with indentation of self.indent_level spaces, using # the _make_indent method # @@ -276,6 +274,9 @@ class CGenerator(object): s += ' = ' + self.visit(n.expr) return s + def visit_FuncDecl(self, n): + return self._generate_type(n) + def _generate_struct_union(self, n, name): """ Generates code for structs and unions. name should be either 'struct' or union. diff --git a/tests/test_c_generator.py b/tests/test_c_generator.py index 7210294..d024616 100644 --- a/tests/test_c_generator.py +++ b/tests/test_c_generator.py @@ -4,7 +4,7 @@ import unittest # Run from the root dir sys.path.insert(0, '.') -from pycparser import c_parser, c_generator +from pycparser import c_parser, c_generator, c_ast _c_parser = c_parser.CParser( lex_optimize=False, @@ -35,6 +35,30 @@ def parse_to_ast(src): return _c_parser.parse(src) +class FuncDeclVisitor(c_ast.NodeVisitor): + def __init__(self): + self.stubs = [] + + def visit_FuncDecl(self, node): + gen = c_generator.CGenerator() + self.stubs.append(gen.visit(node)) + + +class TestFunctionDeclGeneration(unittest.TestCase): + def test_partial_funcdecl_generation(self): + src = r''' + void noop(void); + void *something(void *thing); + int add(int x, int y);''' + ast = parse_to_ast(src) + v = FuncDeclVisitor() + v.visit(ast) + self.assertEqual(len(v.stubs), 3) + self.assertTrue(r'void noop(void)' in v.stubs) + self.assertTrue(r'void *something(void *thing)' in v.stubs) + self.assertTrue(r'int add(int x, int y)' in v.stubs) + + class TestCtoC(unittest.TestCase): def _run_c_to_c(self, src): ast = parse_to_ast(src) |