diff options
author | Peter Wu <lekensteyn@gmail.com> | 2011-11-27 22:03:24 +0000 |
---|---|---|
committer | Peter Wu <lekensteyn@gmail.com> | 2011-11-27 22:03:24 +0000 |
commit | 6dec4a159db1687d3e70dccc8c0dd2ee570cb2b5 (patch) | |
tree | 251ea20c463001742f362942b6c228560dea3959 | |
parent | fb14c03667552fe558e472056bb0b834a3652d8f (diff) | |
download | pp2cc-6dec4a159db1687d3e70dccc8c0dd2ee570cb2b5.tar.gz |
Support empty statements, update list of unimplemented types
-rwxr-xr-x | pp2cc.py | 33 |
1 files changed, 29 insertions, 4 deletions
@@ -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 |