Mercurial > lcfOS
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))