def visitAssert(self, node): if self.isAlwaysFalse("__debug__"): return jast.SimpleComment("assert") args = [self.visit(node.test).asAny()] if node.msg is not None: args.append(self.visit(node.msg).asAny()) return jast.If(self.frame.getglobal("__debug__").nonzero(), jast.InvokeStatic("Py", "assert_", args))
def assert_stmt(self, test, message=None): if self.isAlwaysFalse("__debug__"): return jast.SimpleComment("assert") args = [test.asAny()] if message is not None: args.append(message.asAny()) return jast.If( self.frame.getglobal("__debug__").nonzero(), jast.InvokeStatic("Py", "assert", args))
def getDeclarations(self): if len(self.temporaries) == 0: return [] decs = [jast.SimpleComment("Temporary Variables")] for type, temps in self.temporaries.items(): names = [] for index in range(len(temps)): names.append("t$%d$%s" % (index, type.replace("[]", "__"))) ident = "%s %s" % (type, COMMASPACE.join(names)) decs.append(jast.Identifier(ident)) decs.append(jast.Blank) return decs
def parse(self, node): if isinstance(self.frame, GlobalFrame): futures = self._futures = Future() futures.preprocessFutures(node, None) ScopesCompiler(self).parse(node) self.frame.setScope(node.scope) ret = BaseEvaluator.parse(self, node) #print 'parse', ret decs = self.free_decls + self.frame.getDeclarations() if len(decs) != 0: return [decs, jast.SimpleComment('Code'), ret] else: return ret
def visitIf(self, node): test = self.visit(node.test).nonzero() body = jast.Block(self.suite(node.body)) orelse = None if node.orelse is not None: orelse = jast.Block(self.suite(node.orelse)) if isinstance(node.test, ast.Name): tname = self.getName(node.test.id) if tname is not None and self.isAlwaysFalse(tname): if node.orelse is None: return jast.SimpleComment("if "+tname) else: return orelse return jast.If(test, body, orelse)
def parse(self, node): if isinstance(self.frame,GlobalFrame): self.getFutures().preprocessFutures(node,None) ScopesCompiler(self, self.scopes).parse(node) self.frame.setScope(self.getScopeInfo(node)) try: ret = self.visit(node) except: #print 'Parsing line: %d' % self.lineno if hasattr(self, 'data') and self.lineno > 0: print self.data.split('\n')[self.lineno-1] raise #print 'parse', ret decs = self.free_decls + self.frame.getDeclarations() if len(decs) != 0: return [decs, jast.SimpleComment('Code'), ret] else: return ret
def if_stmt(self, tests, else_body=None): jtests = [] for test, body in tests: tname = self.getName(test) if tname is not None and self.isAlwaysFalse(tname): continue test = self.visit(test).nonzero() body = jast.Block(self.visit(body)) jtests.append((test, body)) if else_body is not None: else_body = jast.Block(self.visit(else_body)) if len(jtests) == 0: if else_body is None: return jast.SimpleComment("if " + tname) else: return else_body if len(jtests) == 1: return jast.If(jtests[0][0], jtests[0][1], else_body) else: return jast.MultiIf(jtests, else_body)
def visitPass(self, node): return jast.SimpleComment("pass")
def visitGlobal(self, node): return jast.SimpleComment('global ' + COMMASPACE.join(node.names))
def pass_stmt(self): return jast.SimpleComment("pass")
def global_stmt(self, names): return jast.SimpleComment('global ' + COMMASPACE.join(names))