# HG changeset patch # User Paul Boddie # Date 1216149377 -7200 # Node ID 00ce6c2f044010d5e8b8dc02eaf4083bef131774 # Parent 721d44d4eaf857abd29341eaeda62997b6c7dcad Changed the code generator to reject unsupported AST nodes. diff -r 721d44d4eaf8 -r 00ce6c2f0440 micropython/ast.py --- a/micropython/ast.py Tue Jul 15 19:29:16 2008 +0200 +++ b/micropython/ast.py Tue Jul 15 21:16:17 2008 +0200 @@ -1163,9 +1163,9 @@ def visitAdd(self, node): self._visitBinary(node, "__add__", "__radd__") - def visitAnd(self, node): pass + def visitAnd(self, node): raise TranslationNotImplementedError(self.module.full_name(), node, "And") - def visitAssert(self, node): pass + def visitAssert(self, node): raise TranslationNotImplementedError(self.module.full_name(), node, "Assert") def visitAssign(self, node): self.dispatch(node.expr) @@ -1175,16 +1175,16 @@ def visitAssAttr(self, node): self._visitAttr(node, self.attribute_store_instructions) - def visitAssList(self, node): pass + def visitAssList(self, node): raise TranslationNotImplementedError(self.module.full_name(), node, "AssList") def visitAssName(self, node): self._visitName(node, (StoreName, StoreAddress)) visitAssTuple = visitAssList - def visitAugAssign(self, node): pass + def visitAugAssign(self, node): raise TranslationNotImplementedError(self.module.full_name(), node, "AugAssign") - def visitBackquote(self, node): pass + def visitBackquote(self, node): raise TranslationNotImplementedError(self.module.full_name(), node, "Backquote") def visitBitand(self, node): self._visitBinary(node, "__and__", "__rand__") @@ -1250,9 +1250,9 @@ next_label, exit_label = self.get_loop_labels() self.new_op(Jump(next_label)) - def visitDecorators(self, node): pass + def visitDecorators(self, node): raise TranslationNotImplementedError(self.module.full_name(), node, "Decorators") - def visitDict(self, node): pass + def visitDict(self, node): raise TranslationNotImplementedError(self.module.full_name(), node, "Dict") def visitDiscard(self, node): self.dispatch(node.expr) @@ -1260,11 +1260,11 @@ def visitDiv(self, node): self._visitBinary(node, "__div__", "__rdiv__") - def visitEllipsis(self, node): pass + def visitEllipsis(self, node): raise TranslationNotImplementedError(self.module.full_name(), node, "Ellipsis") - def visitExec(self, node): pass + def visitExec(self, node): raise TranslationNotImplementedError(self.module.full_name(), node, "Exec") - def visitExpression(self, node): pass + def visitExpression(self, node): raise TranslationNotImplementedError(self.module.full_name(), node, "Expression") def visitFloorDiv(self, node): self._visitBinary(node, "__floordiv__", "__rfloordiv__") @@ -1364,13 +1364,13 @@ self.dispatch(compiler.ast.Name("None")) self.new_op(Return()) - def visitGenExpr(self, node): pass + def visitGenExpr(self, node): raise TranslationNotImplementedError(self.module.full_name(), node, "GenExpr") - def visitGenExprFor(self, node): pass + def visitGenExprFor(self, node): raise TranslationNotImplementedError(self.module.full_name(), node, "GenExprFor") - def visitGenExprIf(self, node): pass + def visitGenExprIf(self, node): raise TranslationNotImplementedError(self.module.full_name(), node, "GenExprIf") - def visitGenExprInner(self, node): pass + def visitGenExprInner(self, node): raise TranslationNotImplementedError(self.module.full_name(), node, "GenExprInner") def visitGetattr(self, node): self._visitAttr(node, self.attribute_load_instructions) @@ -1403,18 +1403,18 @@ def visitKeyword(self, node): pass - def visitLambda(self, node): pass + def visitLambda(self, node): raise TranslationNotImplementedError(self.module.full_name(), node, "Lambda") def visitLeftShift(self, node): self._visitBinary(node, "__lshift__", "__rlshift__") - def visitList(self, node): pass + def visitList(self, node): raise TranslationNotImplementedError(self.module.full_name(), node, "List") - def visitListComp(self, node): pass + def visitListComp(self, node): raise TranslationNotImplementedError(self.module.full_name(), node, "ListComp") - def visitListCompFor(self, node): pass + def visitListCompFor(self, node): raise TranslationNotImplementedError(self.module.full_name(), node, "ListCompFor") - def visitListCompIf(self, node): pass + def visitListCompIf(self, node): raise TranslationNotImplementedError(self.module.full_name(), node, "ListCompIf") def visitMod(self, node): self._visitBinary(node, "__mod__", "__rmod__") @@ -1432,18 +1432,18 @@ else: self._visitName(node, (LoadName, LoadAddress)) - def visitNot(self, node): pass + def visitNot(self, node): raise TranslationNotImplementedError(self.module.full_name(), node, "Not") - def visitOr(self, node): pass + def visitOr(self, node): raise TranslationNotImplementedError(self.module.full_name(), node, "Or") def visitPass(self, node): pass def visitPower(self, node): self._visitBinary(node, "__pow__", "__rpow__") - def visitPrint(self, node): pass + def visitPrint(self, node): raise TranslationNotImplementedError(self.module.full_name(), node, "Print") - def visitPrintnl(self, node): pass + def visitPrintnl(self, node): raise TranslationNotImplementedError(self.module.full_name(), node, "Printnl") def visitRaise(self, node): # NOTE: expr1 only => instance provided @@ -1465,7 +1465,7 @@ def visitRightShift(self, node): self._visitBinary(node, "__rshift__", "__rrshift__") - def visitSlice(self, node): pass + def visitSlice(self, node): raise TranslationNotImplementedError(self.module.full_name(), node, "Slice") def visitStmt(self, node): for n in node.nodes: @@ -1475,7 +1475,7 @@ def visitSub(self, node): self._visitBinary(node, "__sub__", "__rsub__") - def visitSubscript(self, node): pass + def visitSubscript(self, node): raise TranslationNotImplementedError(self.module.full_name(), node, "Subscript") def visitTryExcept(self, node): exit_label = self.new_label() @@ -1530,9 +1530,9 @@ self.drop_exception_labels() - def visitTryFinally(self, node): pass + def visitTryFinally(self, node): raise TranslationNotImplementedError(self.module.full_name(), node, "TryFinally") - def visitTuple(self, node): pass + def visitTuple(self, node): raise TranslationNotImplementedError(self.module.full_name(), node, "Tuple") def visitUnaryAdd(self, node): self._visitUnary(node, "__pos__") @@ -1564,9 +1564,9 @@ self.set_label(exit_label) self.drop_loop_labels() - def visitWith(self, node): pass + def visitWith(self, node): raise TranslationNotImplementedError(self.module.full_name(), node, "With") - def visitYield(self, node): pass + def visitYield(self, node): raise TranslationNotImplementedError(self.module.full_name(), node, "Yield") # Useful data. diff -r 721d44d4eaf8 -r 00ce6c2f0440 micropython/common.py --- a/micropython/common.py Tue Jul 15 19:29:16 2008 +0200 +++ b/micropython/common.py Tue Jul 15 21:16:17 2008 +0200 @@ -65,6 +65,12 @@ pass +class TranslationNotImplementedError(TranslateError): + + "An error caused by a node not being supported in translation." + + pass + # Program code representations. class Label: