[pypy-svn] r20417 - pypy/branch/somepbc-refactoring/pypy/translator/goal

arigo at codespeak.net arigo at codespeak.net
Wed Nov 30 11:18:01 CET 2005


Author: arigo
Date: Wed Nov 30 11:18:00 2005
New Revision: 20417

Modified:
   pypy/branch/somepbc-refactoring/pypy/translator/goal/driver.py
   pypy/branch/somepbc-refactoring/pypy/translator/goal/query.py
Log:
Fixed obvious stuff until targetnopstandalone works again.


Modified: pypy/branch/somepbc-refactoring/pypy/translator/goal/driver.py
==============================================================================
--- pypy/branch/somepbc-refactoring/pypy/translator/goal/driver.py	(original)
+++ pypy/branch/somepbc-refactoring/pypy/translator/goal/driver.py	Wed Nov 30 11:18:00 2005
@@ -137,7 +137,8 @@
         self.log.info('with policy: %s.%s' % (policy.__class__.__module__, policy.__class__.__name__))
 
         annmodel.DEBUG = self.options.debug
-        annotator = translator.annotate(self.inputtypes, policy=policy)
+        annotator = translator.buildannotator(policy=policy)
+        annotator.build_types(self.entry_point, self.inputtypes)
         self.sanity_check_annotation()
         annotator.simplify()        
     #
@@ -155,7 +156,7 @@
         self.log.info("No lost method defs")
 
         so = query.qoutput(query.polluted_qgen(translator))
-        tot = len(translator.flowgraphs)
+        tot = len(translator.graphs)
         percent = int(tot and (100.0*so / tot) or 0)
         if percent == 0:
             pr = self.log.info
@@ -167,14 +168,16 @@
 
     def task_rtype(self):
         opt = self.options
-        self.translator.specialize(dont_simplify_again=True,
-                                   crash_on_first_typeerror=not opt.insist)
+        rtyper = self.translator.buildrtyper()
+        rtyper.specialize(dont_simplify_again=True,
+                          crash_on_first_typeerror=not opt.insist)
     #
     task_rtype = taskdef(task_rtype, ['annotate'], "RTyping")
 
     def task_backendopt(self):
+        from pypy.translator.backendopt.all import backend_optimizations
         opt = self.options
-        self.translator.backend_optimizations(ssa_form=opt.backend != 'llvm')
+        backend_optimizations(self.translator, ssa_form=opt.backend != 'llvm')
     #
     task_backendopt = taskdef(task_backendopt, 
                                         ['rtype'], "Back-end optimisations") 
@@ -194,9 +197,13 @@
             from pypy.translator.c import gc
             gcpolicy = gc.NoneGcPolicy
 
-        cbuilder = translator.cbuilder(standalone=standalone, 
-                                       gcpolicy=gcpolicy,
-                                       thread_enabled = getattr(opt, 'thread', False))
+        if standalone:
+            from pypy.translator.c.genc import CStandaloneBuilder as CBuilder
+        else:
+            from pypy.translator.c.genc import CExtModuleBuilder as CBuilder
+        cbuilder = CBuilder(self.translator, self.entry_point,
+                            gcpolicy       = gcpolicy,
+                            thread_enabled = getattr(opt, 'thread', False))
         cbuilder.stackless = opt.stackless
         database = cbuilder.build_database()
         self.log.info("database for generating C source was created")

Modified: pypy/branch/somepbc-refactoring/pypy/translator/goal/query.py
==============================================================================
--- pypy/branch/somepbc-refactoring/pypy/translator/goal/query.py	(original)
+++ pypy/branch/somepbc-refactoring/pypy/translator/goal/query.py	Wed Nov 30 11:18:00 2005
@@ -515,16 +515,16 @@
                 s = annotator.binding(v, extquery=True)
                 if s and s.__class__ == annmodel.SomeObject and s.knowntype != type:
                     raise Found
-    for f,g in translator.flowgraphs.iteritems():
+    for g in translator.graphs:
         try:
             flowmodel.traverse(visit, g)
         except Found:
-            line = "%s: %s" % (prettyfunc(f), graph_sig(translator, g))
+            line = "%s: %s" % (g, graph_sig(translator, g))
             yield line
 
 def check_exceptblocks_qgen(translator):
     annotator = translator.annotator
-    for graph in translator.flowgraphs.itervalues():
+    for graph in translator.graphs:
         et, ev = graph.exceptblock.inputargs
         s_et = annotator.binding(et, extquery=True)
         s_ev = annotator.binding(ev, extquery=True)
@@ -539,19 +539,15 @@
             yield "%s exceptblock is not completely sane" % graph.name
 
 def check_methods_qgen(translator):
-    from pypy.annotation.classdef import ClassDef
+    from pypy.annotation.description import FunctionDesc, MethodDesc
     def ismeth(s_val):
         if not isinstance(s_val, annmodel.SomePBC):
             return False
-        s_pbc = s_val
-        c = 0
-        for f, clsdef in s_pbc.prebuiltinstances.iteritems():
-            if callable(f) and isinstance(clsdef, ClassDef):
-                c += 1
-        return c == len(s_pbc.prebuiltinstances)
-    usercls = translator.annotator.getuserclasses()
+        return s_val.getKind() is MethodDesc
+    bk = translator.annotator.bookkeeper
+    classdefs = bk.classdefs
     withmeths = []
-    for clsdef in usercls.itervalues():
+    for clsdef in classdefs:
         meths = []
         for attr in clsdef.attrs.values():
             if ismeth(attr.s_value):
@@ -559,22 +555,27 @@
         if meths:
             withmeths.append((clsdef, meths))
     for clsdef, meths in withmeths:
-        cls = clsdef.cls
         n = 0
         subclasses = []
-        for clsdef1 in usercls.itervalues():
-            if issubclass(clsdef1.cls, cls):
+        for clsdef1 in classdefs:
+            if clsdef1.issubclass(clsdef):
                 subclasses.append(clsdef1)
         for meth in meths:
             name = meth.name
-            funcs = dict.fromkeys(meth.s_value.prebuiltinstances.iterkeys())
+            funcs = dict.fromkeys([desc.funcdesc
+                                   for desc in meth.s_value.descriptions])
             for subcls in subclasses:
-                f = subcls.cls.__dict__.get(name)
-                if hasattr(f, 'im_self') and f.im_self is None:
-                    f = f.im_func                
-                if f:
-                    if f not in funcs:
-                        yield "lost method: %s %s %s %s" % (name, subcls.cls, cls, subcls.attrs.keys() )
+                if not subcls.find_source_for(name):
+                    continue
+                c = subcls.read_attribute(name)
+                if isinstance(c, Constant):
+                    if not isinstance(c.value, (types.FunctionType,
+                                                types.MethodType)):
+                        continue
+                    c = bk.getdesc(c.value)
+                if isinstance(c, FunctionDesc):
+                    if c not in funcs:
+                        yield "lost method: %s %s %s %s" % (name, subcls.name, clsdef.name, subcls.attrs.keys() )
 
 def qoutput(queryg, write=None):
     if write is None:



More information about the Pypy-commit mailing list