[pypy-svn] r17994 - in pypy/dist/pypy/translator: goal tool tool/test

pedronis at codespeak.net pedronis at codespeak.net
Fri Sep 30 02:04:49 CEST 2005


Author: pedronis
Date: Fri Sep 30 02:04:47 2005
New Revision: 17994

Modified:
   pypy/dist/pypy/translator/goal/driver.py
   pypy/dist/pypy/translator/tool/taskengine.py
   pypy/dist/pypy/translator/tool/test/test_taskengine.py
Log:
closure for _depending_on and use it to compute optinally skipped goal based on skipped suggestions



Modified: pypy/dist/pypy/translator/goal/driver.py
==============================================================================
--- pypy/dist/pypy/translator/goal/driver.py	(original)
+++ pypy/dist/pypy/translator/goal/driver.py	Fri Sep 30 02:04:47 2005
@@ -55,18 +55,11 @@
         self.runner = runner
 
         self.done = {}
-        
-        maybe_skip = {}
-        def add_maybe_skip(goal):
-            if goal in maybe_skip:
-                return
-            maybe_skip[goal] = True
-            for depending in self._depending_on(goal):
-                add_maybe_skip(depending)
 
+        maybe_skip = []
         for goal in self.backend_select_goals(disable):
-            add_maybe_skip(goal)
-        self.maybe_skip = maybe_skip.keys()
+            maybe_skip.extend(self._depending_on_closure(goal))
+        self.maybe_skip = dict.fromkeys(maybe_skip).keys()
 
         if default_goal:
             default_goal, = self.backend_select_goals([default_goal])

Modified: pypy/dist/pypy/translator/tool/taskengine.py
==============================================================================
--- pypy/dist/pypy/translator/tool/taskengine.py	(original)
+++ pypy/dist/pypy/translator/tool/taskengine.py	Fri Sep 30 02:04:47 2005
@@ -87,6 +87,17 @@
                 l.append(task_name)
         return l
 
+    def _depending_on_closure(self, goal):
+        d = {}
+        def track(goal):
+            if goal in d:
+                return
+            d[goal] = True
+            for depending in self._depending_on(goal):
+                track(depending)
+        track(goal)
+        return d.keys()
+
     def _execute(self, goals, *args, **kwds):
         task_skip = kwds.get('task_skip', [])
         for goal in self._plan(goals, skip=task_skip):

Modified: pypy/dist/pypy/translator/tool/test/test_taskengine.py
==============================================================================
--- pypy/dist/pypy/translator/tool/test/test_taskengine.py	(original)
+++ pypy/dist/pypy/translator/tool/test/test_taskengine.py	Fri Sep 30 02:04:47 2005
@@ -17,6 +17,17 @@
 
         task_C.task_deps = ['B']
 
+        def task_D(self):
+            pass
+        task_D.task_deps = ['E']
+
+        def task_E(self):
+            pass
+        task_E.task_deps = ['F']
+
+        def task_F(self):
+            pass
+
     abc = ABC()
 
     assert abc._plan('B') == ['B']
@@ -28,6 +39,19 @@
     assert dict.fromkeys(abc._depending_on('B'), True) == {'A':True, 'C':True}
     assert abc._depending_on('A') == []
    
+    assert abc._depending_on('F') == ['E']
+    assert abc._depending_on('E') == ['D']
+    assert abc._depending_on('D') == []
+
+    assert abc._depending_on_closure('C') == ['C']
+    assert dict.fromkeys(abc._depending_on_closure('B'), True) == {'A':True, 'C':True, 'B': True}
+    assert abc._depending_on_closure('A') == ['A']
+   
+    assert dict.fromkeys(abc._depending_on_closure('F'), True) == {'D':True, 'E':True, 'F': True}
+    assert dict.fromkeys(abc._depending_on_closure('E'), True) == {'D':True, 'E':True}
+    assert abc._depending_on_closure('D') == ['D']
+
+
 def test_execute():
 
     class ABC(SimpleTaskEngine):



More information about the Pypy-commit mailing list