initial import from SVN
diff --git a/z_test.py b/z_test.py
new file mode 100644
index 0000000..1eec2a0
--- /dev/null
+++ b/z_test.py
@@ -0,0 +1,75 @@
+from pycparser.c_ast import *
+from pycparser.c_parser import CParser, Coord, ParseError
+
+
+def expand_decl(decl):
+ """ Converts the declaration into a nested list.
+ """
+ typ = type(decl)
+
+ if typ == TypeDecl:
+ return ['TypeDecl', expand_decl(decl.type)]
+ elif typ == IdentifierType:
+ return ['IdentifierType', decl.names]
+ elif typ == ID:
+ return ['ID', decl.name]
+ elif typ in [Struct, Union]:
+ decls = [expand_decl(d) for d in decl.decls or []]
+ return [typ.__name__, decl.name, decls]
+ else:
+ nested = expand_decl(decl.type)
+
+ if typ == Decl:
+ if decl.quals:
+ return ['Decl', decl.quals, decl.name, nested]
+ else:
+ return ['Decl', decl.name, nested]
+ elif typ == Typename: # for function parameters
+ if decl.quals:
+ return ['Typename', decl.quals, nested]
+ else:
+ return ['Typename', nested]
+ elif typ == ArrayDecl:
+ dimval = decl.dim.value if decl.dim else ''
+ return ['ArrayDecl', dimval, nested]
+ elif typ == PtrDecl:
+ return ['PtrDecl', nested]
+ elif typ == Typedef:
+ return ['Typedef', decl.name, nested]
+ elif typ == FuncDecl:
+ if decl.args:
+ params = [expand_decl(param) for param in decl.args.params]
+ else:
+ params = []
+ return ['FuncDecl', params, nested]
+
+#-----------------------------------------------------------------
+
+source_code = """
+int main()
+{
+ int a;
+ a = sizeof(int());
+}
+"""
+
+parser = CParser()
+ast = parser.parse(source_code)
+function_body = ast.ext[0].body #hardcoded to the main() function
+
+for stmt in function_body.stmts:
+ print stmt.coord, expand_decl(stmt.rvalue.expr.type)
+
+#~ class StructRefVisitor(c_ast.NodeVisitor):
+ #~ def visit_StructRef(self, node):
+ #~ print node.name.name, node.field.name
+
+
+#~ parser = c_parser.CParser()
+#~ ast = parser.parse(code)
+
+#~ ast.show()
+
+#~ v = StructRefVisitor()
+#~ v.visit(ast)
+