示例#1
0
    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))
示例#2
0
    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))
示例#3
0
    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 
示例#4
0
 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
示例#5
0
    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)
示例#6
0
    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
示例#7
0
    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)
示例#8
0
 def visitPass(self, node):
     return jast.SimpleComment("pass")
示例#9
0
 def visitGlobal(self, node):
     return jast.SimpleComment('global ' + COMMASPACE.join(node.names))
示例#10
0
 def pass_stmt(self):
     return jast.SimpleComment("pass")
示例#11
0
 def global_stmt(self, names):
     return jast.SimpleComment('global ' + COMMASPACE.join(names))