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