Author: Manuel Jacob
Branch: refactor-translator
Changeset: r61780:04ce742ce3b7
Date: 2013-02-25 15:46 +0100
http://bitbucket.org/pypy/pypy/changeset/04ce742ce3b7/

Log:    Remove SimpleTaskEngine and move remaining code into
        TranslationDriver.

diff --git a/rpython/translator/driver.py b/rpython/translator/driver.py
--- a/rpython/translator/driver.py
+++ b/rpython/translator/driver.py
@@ -3,7 +3,6 @@
 import shutil
 
 from rpython.translator.translator import TranslationContext
-from rpython.translator.tool.taskengine import SimpleTaskEngine
 from rpython.translator.goal import query
 from rpython.translator.goal.timing import Timer
 from rpython.annotator.listdef import s_list_of_strings
@@ -65,7 +64,7 @@
         os._exit(0)
 
 
-class TranslationDriver(SimpleTaskEngine):
+class TranslationDriver(object):
     _backend_extra_options = {}
 
     def __init__(self, setopts=None, default_goal=None,
@@ -73,7 +72,6 @@
                  exe_name=None, extmod_name=None,
                  config=None, overrides=None):
         self.timer = Timer()
-        SimpleTaskEngine.__init__(self)
 
         self.log = log
 
@@ -99,8 +97,19 @@
         
         self.default_goal = default_goal
         self.extra_goals = []
+
+        self.tasks = tasks = {}
+
+        for name in dir(self):
+            if name.startswith('task_'):
+                task_name = name[len('task_'):]
+                task = getattr(self, name)
+                assert callable(task)
+                task_deps = getattr(task, 'task_deps', [])
+
+                tasks[task_name] = task, task_deps
+
         self._tasks = []
-
         # expose tasks
         def expose_task(task):
             def proc():
@@ -700,7 +709,17 @@
             if task == goal:
                 break
         goals = self.backend_select_goals(goals)
-        return self._execute(goals)
+
+        res = None
+        for goal in goals:
+            taskcallable, _ = self.tasks[goal]
+            self._event('planned', goal, taskcallable)
+        for goal in goals:
+            taskcallable, _ = self.tasks[goal]
+            self._event('pre', goal, taskcallable)
+            res = self._do(goal, taskcallable)
+            self._event('post', goal, taskcallable)
+        return res
 
     def from_targetspec(targetspec_dic, config=None, args=None,
                         empty_translator=None,
diff --git a/rpython/translator/tool/taskengine.py 
b/rpython/translator/tool/taskengine.py
deleted file mode 100644
--- a/rpython/translator/tool/taskengine.py
+++ /dev/null
@@ -1,48 +0,0 @@
-
-
-class SimpleTaskEngine(object):
-
-    def __init__(self):
-        self._plan_cache = {}
-
-        self.tasks = tasks = {}
-
-        for name in dir(self):
-            if name.startswith('task_'):
-                task_name = name[len('task_'):]
-                task = getattr(self, name)
-                assert callable(task)
-                task_deps = getattr(task, 'task_deps', [])
-
-                tasks[task_name] = task, task_deps
-
-    def _execute(self, goals, *args, **kwds):
-        res = None
-        for goal in goals:
-            taskcallable, _ = self.tasks[goal]
-            self._event('planned', goal, taskcallable)
-        for goal in goals:
-            taskcallable, _ = self.tasks[goal]
-            self._event('pre', goal, taskcallable)
-            try:
-                res = self._do(goal, taskcallable, *args, **kwds)
-            except (SystemExit, KeyboardInterrupt):
-                raise
-            except:
-                self._error(goal)
-                raise
-            self._event('post', goal, taskcallable)
-        return res
-
-    def _do(self, goal, func, *args, **kwds):
-        return func()
-
-    def _event(self, kind, goal, func):
-        pass
-    
-    def _error(self, goal):
-        pass
-
-
-        
-        
diff --git a/rpython/translator/tool/test/test_taskengine.py 
b/rpython/translator/tool/test/test_taskengine.py
deleted file mode 100644
--- a/rpython/translator/tool/test/test_taskengine.py
+++ /dev/null
@@ -1,150 +0,0 @@
-from rpython.translator.tool.taskengine import SimpleTaskEngine
-
-def test_simple():
-
-    class ABC(SimpleTaskEngine):
-
-        def task_A(self):
-            pass
-
-        task_A.task_deps = ['B', '?C']
-
-        def task_B(self):
-            pass
-
-        def task_C(self):
-            pass
-
-        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']
-    assert abc._plan('C') == ['B', 'C']
-    assert abc._plan('A') == ['B', 'C', 'A']
-    assert abc._plan('A', skip=['C']) == ['B', 'A']
-
-    assert abc._depending_on('C') == []
-    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):
-
-        def __init__(self):
-            SimpleTaskEngine.__init__(self)
-            self.done = []
-
-        def task_A(self):
-            self.done.append('A')
-
-        task_A.task_deps = ['B', '?C']
-
-        def task_B(self):
-            self.done.append('B')
-
-        def task_C(self):
-            self.done.append('C')
-
-        task_C.task_deps = ['B']
-
-        def _event(self, kind, goal, taskcallable):
-            self.done.append((kind, goal))
-
-    def test(goals, task_skip=[]):
-        if isinstance(goals, str):
-            goals = [goals]
-        abc = ABC()
-        abc._execute(goals, task_skip=task_skip)
-        return abc.done
-
-    def trace(goals):
-        t = []
-        for goal in goals:
-            t.append(('planned', goal))
-        for goal in goals:
-            t.extend([('pre', goal), goal, ('post', goal)])
-        return t
-
-    assert test('B') == trace('B')
-    assert test('C') == trace(['B', 'C'])
-    assert test('A') == trace(['B', 'C', 'A'])
-    assert test('A', ['C']) == trace(['B', 'A'])
-    assert test(['B', 'C']) == trace(['B', 'C'])
-    assert test(['C', 'B']) == trace(['B', 'C'])
-    assert test(['B', 'A']) == trace(['B', 'C', 'A'])
-    assert test(['B', 'A'], ['C']) == trace(['B', 'A'])
-    assert test(['B', 'A', 'C']) == trace(['B', 'C', 'A'])
-    assert test(['B', 'A', 'C'], ['C']) == trace(['B', 'C', 'A'])
-
-def test_driver():
-    class Drv(SimpleTaskEngine):
-
-        def task_A():
-            pass
-        task_A.task_deps = []
-
-        def task_R():
-            pass
-        task_R.task_deps = ['A']
-
-        def task_b():
-            pass
-        task_b.task_deps = ['R']
-
-        def task_H():
-            pass
-        task_H.task_deps = ['b']
-
-        def task_T():
-            pass
-        task_T.task_deps = ['H']
-
-        def task_B():
-            pass
-        task_B.task_deps = ['R', '??T']
-
-        def task_D():
-            pass
-        task_D.task_deps = ['R', '?B', '?A', '??T']
-
-    drv = Drv()
-    assert drv._plan(['R']) == ['A', 'R']
-    assert drv._plan(['B']) == ['A', 'R', 'B']
-    assert drv._plan(['D']) == ['A', 'R', 'B', 'D']
-    assert drv._plan(['D'], skip=['B']) == ['A', 'R', 'D']
-    assert drv._plan(['D', 'R']) == ['A', 'R', 'B', 'D']
-
-
-    assert drv._plan(['H', 'R']) == ['A', 'R', 'b', 'H']
-    assert drv._plan(['H']) == ['A', 'R', 'b', 'H']
-    assert drv._plan(['T', 'B']) == ['A', 'R', 'b', 'H', 'T', 'B']
-    assert drv._plan(['D', 'T']) == ['A', 'R', 'b', 'H', 'T', 'B', 'D']
-    assert drv._plan(['D', 'T', 'R']) == ['A', 'R', 'b', 'H', 'T', 'B', 'D']
-    assert drv._plan(['D', 'T']) == ['A', 'R', 'b', 'H', 'T', 'B', 'D']
-    assert drv._plan(['D', 'T'], skip=['B']) == ['A', 'R', 'b', 'H', 'T', 'D']
_______________________________________________
pypy-commit mailing list
[email protected]
http://mail.python.org/mailman/listinfo/pypy-commit

Reply via email to