summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorPeter Wu <lekensteyn@gmail.com>2011-11-27 22:03:24 +0000
committerPeter Wu <lekensteyn@gmail.com>2011-11-27 22:03:24 +0000
commit6dec4a159db1687d3e70dccc8c0dd2ee570cb2b5 (patch)
tree251ea20c463001742f362942b6c228560dea3959
parentfb14c03667552fe558e472056bb0b834a3652d8f (diff)
downloadpp2cc-6dec4a159db1687d3e70dccc8c0dd2ee570cb2b5.tar.gz
Support empty statements, update list of unimplemented types
-rwxr-xr-xpp2cc.py33
1 files changed, 29 insertions, 4 deletions
diff --git a/pp2cc.py b/pp2cc.py
index 57c53f3..a73189d 100755
--- a/pp2cc.py
+++ b/pp2cc.py
@@ -880,20 +880,45 @@ class Parse(object):
if not loop_node:
raise RuntimeError("continue not in a loop")
return [self.asm.branch_op("BRA", loop_node.continue_label)]
+ def parseEmptyStatement(self, linked_node):
+ """Returns an empty list for an "empty statement" (duh)"""
+ return []
def parseStatement(self, node, parent_linked_node, level_increment=False):
linked_node = LinkedNode(node, parent_linked_node, level_increment=level_increment)
self.asm.level = linked_node.level
lines = []
- if isinstance(node, c_ast.FuncDecl):
- raise RuntimeError("Not implemented for type " + repr(node))
- elif isinstance(node, c_ast.PtrDecl):
+ if (isinstance(node, c_ast.FuncDecl) or
+ isinstance(node, c_ast.ArrayDecl) or
+ isinstance(node, c_ast.ArrayRef) or
+ isinstance(node, c_ast.Case) or
+ isinstance(node, c_ast.CompoundLiteral) or
+ isinstance(node, c_ast.DeclList) or
+ isinstance(node, c_ast.Default) or
+ isinstance(node, c_ast.EllipsisParam) or
+ isinstance(node, c_ast.Enum) or
+ isinstance(node, c_ast.Enumerator) or
+ isinstance(node, c_ast.EnumeratorList) or
+ isinstance(node, c_ast.FuncDecl) or
+ isinstance(node, c_ast.Goto) or
+ isinstance(node, c_ast.IdentifierType) or
+ isinstance(node, c_ast.Label) or
+ isinstance(node, c_ast.NamedInitializer) or
+ isinstance(node, c_ast.ParamList) or
+ isinstance(node, c_ast.PtrDecl) or
+ isinstance(node, c_ast.Struct) or
+ isinstance(node, c_ast.StructRef) or
+ isinstance(node, c_ast.Switch) or
+ isinstance(node, c_ast.TypeDecl) or
+ isinstance(node, c_ast.Typedef) or
+ isinstance(node, c_ast.Typename) or
+ isinstance(node, c_ast.Union)):
raise RuntimeError("Not implemented for type " + repr(node))
else:
for entry in ("Compound", "BinaryOp", "If", "Constant", "ID",
"Return", "FuncCall", "UnaryOp", "Cast",
"TernaryOp", "DoWhile", "While", "For", "ExprList",
"Assignment", "Decl", "FuncDef", "Break",
- "Continue"):
+ "Continue", "EmptyStatement"):
if isinstance(node, getattr(c_ast, entry)):
lines += getattr(self, "parse" + entry)(linked_node)
break