Author: William ML Leslie <[email protected]>
Branch: real-mode-translator-driver
Changeset: r89728:8ffe9002f13b
Date: 2017-01-24 22:50 +1100
http://bitbucket.org/pypy/pypy/changeset/8ffe9002f13b/
Log: Call the dependent function before running your task.
Straightforward.
diff --git a/rpython/translator/driver.py b/rpython/translator/driver.py
--- a/rpython/translator/driver.py
+++ b/rpython/translator/driver.py
@@ -17,8 +17,6 @@
log = AnsiLogger("translation")
-class Done(Exception): pass
-
# TODO:
# sanity-checks using states
@@ -84,28 +82,57 @@
self.extra_goals = []
def annotate(self):
- return self.proceed(['annotate'])
+ return self.run_task(self.task_annotate, 'annotate')
def rtype_lltype(self):
- return self.proceed(['rtype_lltype'])
+ self.annotate()
+ return self.run_task(self.task_rtype_lltype, 'rtype_lltype')
+
+ def pyjitpl_lltype(self):
+ self.rtype_lltype()
+ return self.run_task(self.task_pyjitpl_lltype, 'pyjitpl_lltype')
+
+ def jittest_lltype(self):
+ self.rtype_lltype()
+ return self.run_task(self.task_jittest_lltype, 'jittest_lltype')
def backendopt_lltype(self):
- return self.proceed(['backendopt_lltype'])
+ self.rtype_lltype()
+ if 'pyjitpl' in self.extra_goals:
+ self.pyjitpl_lltype()
+ if 'jittest' in self.extra_goals:
+ self.jittest_lltype()
+
+ return self.run_task(self.task_backendopt_lltype,
+ 'backendopt_lltype')
+
+ def stackcheckinsertion_lltype(self):
+ self.rtype_lltype()
+ if 'backendopt' in self.extra_goals:
+ self.backendopt_lltype()
+ return self.run_task(self.task_stackcheckinsertion_lltype,
+ 'stackcheckinsertion_lltype')
def llinterpret_lltype(self):
- return self.proceed(['llinterpret_lltype'])
-
- def pyjitpl_lltype(self):
- return self.proceed(['pyjitpl_lltype'])
+ self.stackcheckinsertion_lltype()
+ return self.run_task(self.task_llinterpret_lltype,
+ 'llinterpret_lltype')
def source_c(self):
- return self.proceed(['source_c'])
+ if 'check_for_boehm' not in self.done:
+ self.possibly_check_for_boehm()
+ self.done.add('check_for_boehm')
+ self.stackcheckinsertion_lltype()
+ self.run_task(self.task_database_c, 'database_c')
+ return self.run_task(self.task_source_c, 'source_c')
def compile_c(self):
- return self.proceed(['compile_c'])
+ self.source_c()
+ return self.run_task(self.task_compile_c, 'compile_c')
def run_c(self):
- return self.proceed(['run_c'])
+ self.compile_c()
+ return self.run_task(self.task_run_c, 'run_c')
def set_extra_goals(self, goals):
self.extra_goals = goals
@@ -122,7 +149,7 @@
backend = self.config.translation.backend
return backend, type_system
- def run_task(self, name, goals, *args, **kwargs):
+ def run_task(self, task, name, *args, **kwargs):
if name in self.done or name in self._disabled:
return
task = getattr(self, 'task_%s' % name)
@@ -157,47 +184,21 @@
self.log.info('usession directory: %s' % (udir,))
self.done.add(name)
- goals.discard(name)
- if not goals:
- raise Done(res)
return res
def proceed(self, goals):
- try:
- self._proceed_inner(goals)
- except Done as d:
- return d.args[0]
-
- def _proceed_inner(self, goals):
backend, ts = self.get_backend_and_type_system()
goals = set(self.backend_select_goals(goals + self.extra_goals))
if not goals:
self.log('Nothing to do.')
- raise Done(None)
+ self.extra_goals += goals
- if any(cgoal in goals
- for bakgoal in ['database', 'source', 'compile']
- for cgoal in [bakgoal, bakgoal + '_c']):
- if 'check_for_boehm' not in self.done:
- self.possibly_check_for_boehm()
- self.done.add('check_for_boehm')
-
- self.run_task('annotate', goals)
- self.run_task('rtype_lltype', goals)
- if 'pyjitpl_lltype' in goals or 'jittest_lltype' in goals:
- self.run_task('pyjitpl_lltype', goals)
- if 'jittest_lltype' in goals:
- self.run_task('jittest_lltype', goals)
- self.run_task('backendopt_lltype', goals)
- self.run_task('stackcheckinsertion_lltype', goals)
- if 'llinterpret_lltype' in goals:
- self.run_task('llinterpret_lltype', goals)
- self.run_task('backend_%s' % backend, goals, goals)
-
- def task_backend_c(self, goals):
- self.run_task('database_c', goals)
- self.run_task('source_c', goals)
- self.run_task('compile_c', goals)
+ # run C goals first to catch missing boehm.
+ for goal in goals:
+ if goal.endswith('_c'):
+ getattr(self, goal)()
+ for goal in goals:
+ getattr(self, goal)()
def backend_select_goals(self, goals):
backend, ts = self.get_backend_and_type_system()
_______________________________________________
pypy-commit mailing list
[email protected]
https://mail.python.org/mailman/listinfo/pypy-commit