diff python/ppci/c3/visitor.py @ 307:e609d5296ee9

Massive rewrite of codegenerator
author Windel Bouwman
date Thu, 12 Dec 2013 20:42:56 +0100
parents b145f8e6050b
children 04cf4d26a3bc
line wrap: on
line diff
--- a/python/ppci/c3/visitor.py	Mon Dec 09 19:00:21 2013 +0100
+++ b/python/ppci/c3/visitor.py	Thu Dec 12 20:42:56 2013 +0100
@@ -25,21 +25,24 @@
                 self.do(s)
             self.do(node.typ)
             self.do(node.body)
-        elif type(node) is CompoundStatement:
+        elif type(node) is Compound:
             for s in node.statements:
                 self.do(s)
-        elif type(node) is IfStatement:
+        elif type(node) is If:
             self.do(node.condition)
             self.do(node.truestatement)
             self.do(node.falsestatement)
+        elif type(node) is While:
+            self.do(node.condition)
+            self.do(node.statement)
+        elif type(node) is Assignment:
+            self.do(node.lval)
+            self.do(node.rval)
         elif type(node) is FunctionCall:
             for arg in node.args:
                 self.do(arg)
             self.do(node.proc)
-        elif type(node) is Assignment:
-            self.do(node.lval)
-            self.do(node.rval)
-        elif type(node) is ReturnStatement:
+        elif type(node) is Return:
             self.do(node.expr)
         elif type(node) is Binop:
             self.do(node.a)
@@ -50,6 +53,7 @@
             self.do(node.ex)
         elif type(node) is TypeCast:
             self.do(node.a)
+            self.do(node.to_type)
         elif type(node) is Member:
             self.do(node.base)
         elif type(node) is Deref:
@@ -69,12 +73,9 @@
             for pt in node.parametertypes:
                 self.do(pt)
             self.do(node.returntype)
-        elif type(node) in [Identifier, Literal, EmptyStatement]:
+        elif type(node) in [Identifier, Literal, Empty]:
             # Those nodes do not have child nodes.
             pass
-        elif type(node) is WhileStatement:
-            self.do(node.condition)
-            self.do(node.statement)
         else:
             raise Exception('Could not visit "{0}"'.format(node))