summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorEli Bendersky <eliben@users.noreply.github.com>2015-02-21 09:27:49 -0800
committerEli Bendersky <eliben@users.noreply.github.com>2015-02-21 09:27:49 -0800
commitfc9b69bfc4fb15ee371cffe4a91e5b21cfb16415 (patch)
treeab15c268ac6e81e19cd05e5cd9a01a71942efc41
parentb036e36318ea41c1a5a484da8c0218cdafccec99 (diff)
parentb4fc6edfe397babe95322ab09c5d1c3575819976 (diff)
downloadpycparser-fc9b69bfc4fb15ee371cffe4a91e5b21cfb16415.tar.gz
Merge pull request #69 from ssfrr/master
adds visit_FuncDecl method to CGenerator
-rw-r--r--pycparser/c_generator.py5
-rw-r--r--tests/test_c_generator.py26
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)