[pypy-commit] pypy task-decorator: more pythonic: use decorator to replace direct invocation of taskdef
jameslan
noreply at buildbot.pypy.org
Mon Dec 3 16:08:30 CET 2012
Author: James Lan <jameslan at gmail.com>
Branch: task-decorator
Changeset: r59289:6cf85e6305a6
Date: 2012-12-02 23:46 -0800
http://bitbucket.org/pypy/pypy/changeset/6cf85e6305a6/
Log: more pythonic: use decorator to replace direct invocation of taskdef
diff --git a/pypy/translator/driver.py b/pypy/translator/driver.py
--- a/pypy/translator/driver.py
+++ b/pypy/translator/driver.py
@@ -6,7 +6,6 @@
from pypy.translator.tool.taskengine import SimpleTaskEngine
from pypy.translator.goal import query
from pypy.translator.goal.timing import Timer
-from pypy.annotation import model as annmodel
from pypy.annotation.listdef import s_list_of_strings
from pypy.annotation import policy as annpolicy
from pypy.tool.udir import udir
@@ -19,15 +18,17 @@
py.log.setconsumer("translation", ansi_log)
-def taskdef(taskfunc, deps, title, new_state=None, expected_states=[],
+def taskdef(deps, title, new_state=None, expected_states=[],
idemp=False, earlycheck=None):
- taskfunc.task_deps = deps
- taskfunc.task_title = title
- taskfunc.task_newstate = None
- taskfunc.task_expected_states = expected_states
- taskfunc.task_idempotent = idemp
- taskfunc.task_earlycheck = earlycheck
- return taskfunc
+ def decorator(taskfunc):
+ taskfunc.task_deps = deps
+ taskfunc.task_title = title
+ taskfunc.task_newstate = None
+ taskfunc.task_expected_states = expected_states
+ taskfunc.task_idempotent = idemp
+ taskfunc.task_earlycheck = earlycheck
+ return taskfunc
+ return decorator
# TODO:
# sanity-checks using states
@@ -299,6 +300,7 @@
#import gc; gc.dump_rpy_heap('rpyheap-after-%s.dump' % goal)
return res
+ @taskdef([], "Annotating&simplifying")
def task_annotate(self):
""" Annotate
"""
@@ -330,9 +332,6 @@
annotator.simplify()
return s
- #
- task_annotate = taskdef(task_annotate, [], "Annotating&simplifying")
-
def sanity_check_annotation(self):
translator = self.translator
@@ -343,25 +342,24 @@
lost = query.qoutput(query.check_methods_qgen(translator))
assert not lost, "lost methods, something gone wrong with the annotation of method defs"
+ RTYPE = 'rtype_lltype'
+ @taskdef(['annotate'], "RTyping")
def task_rtype_lltype(self):
""" RTyping - lltype version
"""
rtyper = self.translator.buildrtyper(type_system='lltype')
rtyper.specialize(dont_simplify_again=True)
- #
- task_rtype_lltype = taskdef(task_rtype_lltype, ['annotate'], "RTyping")
- RTYPE = 'rtype_lltype'
+ OOTYPE = 'rtype_ootype'
+ @taskdef(['annotate'], "ootyping")
def task_rtype_ootype(self):
""" RTyping - ootype version
"""
# Maybe type_system should simply be an option used in task_rtype
rtyper = self.translator.buildrtyper(type_system="ootype")
rtyper.specialize(dont_simplify_again=True)
- #
- task_rtype_ootype = taskdef(task_rtype_ootype, ['annotate'], "ootyping")
- OOTYPE = 'rtype_ootype'
+ @taskdef([RTYPE], "JIT compiler generation")
def task_pyjitpl_lltype(self):
""" Generate bytecodes for JIT and flow the JIT helper functions
ootype version
@@ -374,11 +372,8 @@
backend_name=self.config.translation.jit_backend, inline=True)
#
self.log.info("the JIT compiler was generated")
- #
- task_pyjitpl_lltype = taskdef(task_pyjitpl_lltype,
- [RTYPE],
- "JIT compiler generation")
+ @taskdef([OOTYPE], "JIT compiler generation")
def task_pyjitpl_ootype(self):
""" Generate bytecodes for JIT and flow the JIT helper functions
ootype version
@@ -391,11 +386,8 @@
backend_name='cli', inline=True) #XXX
#
self.log.info("the JIT compiler was generated")
- #
- task_pyjitpl_ootype = taskdef(task_pyjitpl_ootype,
- [OOTYPE],
- "JIT compiler generation")
+ @taskdef([RTYPE], "test of the JIT on the llgraph backend")
def task_jittest_lltype(self):
""" Run with the JIT on top of the llgraph backend
"""
@@ -407,44 +399,31 @@
# and restart without needing to restart the whole translation process
from pypy.jit.tl import jittest
jittest.jittest(self)
- #
- task_jittest_lltype = taskdef(task_jittest_lltype,
- [RTYPE],
- "test of the JIT on the llgraph backend")
+ BACKENDOPT = 'backendopt_lltype'
+ @taskdef([RTYPE, '??pyjitpl_lltype', '??jittest_lltype'], "lltype back-end optimisations")
def task_backendopt_lltype(self):
""" Run all backend optimizations - lltype version
"""
from pypy.translator.backendopt.all import backend_optimizations
backend_optimizations(self.translator)
- #
- task_backendopt_lltype = taskdef(task_backendopt_lltype,
- [RTYPE, '??pyjitpl_lltype',
- '??jittest_lltype'],
- "lltype back-end optimisations")
- BACKENDOPT = 'backendopt_lltype'
+ OOBACKENDOPT = 'backendopt_ootype'
+ @taskdef([OOTYPE], "ootype back-end optimisations")
def task_backendopt_ootype(self):
""" Run all backend optimizations - ootype version
"""
from pypy.translator.backendopt.all import backend_optimizations
backend_optimizations(self.translator)
- #
- task_backendopt_ootype = taskdef(task_backendopt_ootype,
- [OOTYPE], "ootype back-end optimisations")
- OOBACKENDOPT = 'backendopt_ootype'
+ STACKCHECKINSERTION = 'stackcheckinsertion_lltype'
+ @taskdef(['?'+BACKENDOPT, RTYPE, 'annotate'], "inserting stack checks")
def task_stackcheckinsertion_lltype(self):
from pypy.translator.transform import insert_ll_stackcheck
count = insert_ll_stackcheck(self.translator)
self.log.info("inserted %d stack checks." % (count,))
- task_stackcheckinsertion_lltype = taskdef(
- task_stackcheckinsertion_lltype,
- ['?'+BACKENDOPT, RTYPE, 'annotate'],
- "inserting stack checks")
- STACKCHECKINSERTION = 'stackcheckinsertion_lltype'
def possibly_check_for_boehm(self):
if self.config.translation.gc == "boehm":
@@ -456,6 +435,9 @@
i = 'Boehm GC not installed. Try e.g. "translate.py --gc=hybrid"'
raise Exception(str(e) + '\n' + i)
+ @taskdef([STACKCHECKINSERTION, '?'+BACKENDOPT, RTYPE, '?annotate'],
+ "Creating database for generating c source",
+ earlycheck = possibly_check_for_boehm)
def task_database_c(self):
""" Create a database for further backend generation
"""
@@ -483,12 +465,8 @@
self.log.info("database for generating C source was created")
self.cbuilder = cbuilder
self.database = database
- #
- task_database_c = taskdef(task_database_c,
- [STACKCHECKINSERTION, '?'+BACKENDOPT, RTYPE, '?annotate'],
- "Creating database for generating c source",
- earlycheck = possibly_check_for_boehm)
-
+
+ @taskdef(['database_c'], "Generating c source")
def task_source_c(self):
""" Create C source files from the generated database
"""
@@ -513,9 +491,6 @@
shutil.copy(str(fname), str(dstname))
self.log.info('Static data info written to %s' % dstname)
- #
- task_source_c = taskdef(task_source_c, ['database_c'], "Generating c source")
-
def compute_exe_name(self):
newexename = self.exe_name % self.get_info()
if '/' not in newexename and '\\' not in newexename:
@@ -541,6 +516,7 @@
self.log.info('usession directory: %s' % (udir,))
self.log.info("created: %s" % (self.c_entryp,))
+ taskdef(['source_c'], "Compiling c source")
def task_compile_c(self):
""" Compile the generated C code using either makefile or
translator/platform
@@ -556,9 +532,8 @@
self.create_exe()
else:
self.c_entryp = cbuilder.get_entry_point()
- #
- task_compile_c = taskdef(task_compile_c, ['source_c'], "Compiling c source")
+ @taskdef([STACKCHECKINSERTION, '?'+BACKENDOPT, RTYPE], "LLInterpreting")
def task_llinterpret_lltype(self):
from pypy.rpython.llinterp import LLInterpreter
py.log.setconsumer("llinterp operation", None)
@@ -572,11 +547,8 @@
lambda: [])())
log.llinterpret.event("result -> %s" % v)
- #
- task_llinterpret_lltype = taskdef(task_llinterpret_lltype,
- [STACKCHECKINSERTION, '?'+BACKENDOPT, RTYPE],
- "LLInterpreting")
+ @taskdef(["?" + OOBACKENDOPT, OOTYPE], 'Generating CLI source')
def task_source_cli(self):
from pypy.translator.cli.gencli import GenCli
from pypy.translator.cli.entrypoint import get_entrypoint
@@ -593,9 +565,8 @@
self.gen = GenCli(udir, self.translator, entry_point, config=self.config)
filename = self.gen.generate_source()
self.log.info("Wrote %s" % (filename,))
- task_source_cli = taskdef(task_source_cli, ["?" + OOBACKENDOPT, OOTYPE],
- 'Generating CLI source')
+ taskdef(['source_cli'], 'Compiling CLI source')
def task_compile_cli(self):
from pypy.translator.oosupport.support import unpatch_os
from pypy.translator.cli.test.runtest import CliFunctionWrapper
@@ -608,8 +579,6 @@
self.log.info("Compiled %s" % filename)
if self.standalone and self.exe_name:
self.copy_cli_exe()
- task_compile_cli = taskdef(task_compile_cli, ['source_cli'],
- 'Compiling CLI source')
def copy_cli_exe(self):
# XXX messy
@@ -668,6 +637,7 @@
shutil.copy(main_exe, '.')
self.log.info("Copied to %s" % os.path.join(os.getcwd(), dllname))
+ @taskdef(["?" + OOBACKENDOPT, OOTYPE], 'Generating JVM source')
def task_source_jvm(self):
from pypy.translator.jvm.genjvm import GenJvm
from pypy.translator.jvm.node import EntryPoint
@@ -678,9 +648,8 @@
self.gen = GenJvm(udir, self.translator, entry_point)
self.jvmsource = self.gen.generate_source()
self.log.info("Wrote JVM code")
- task_source_jvm = taskdef(task_source_jvm, ["?" + OOBACKENDOPT, OOTYPE],
- 'Generating JVM source')
+ @taskdef(['source_jvm'], 'Compiling JVM source')
def task_compile_jvm(self):
from pypy.translator.oosupport.support import unpatch_os
from pypy.translator.jvm.test.runtest import JvmGeneratedSourceWrapper
@@ -692,8 +661,6 @@
self.log.info("Compiled JVM source")
if self.standalone and self.exe_name:
self.copy_jvm_jar()
- task_compile_jvm = taskdef(task_compile_jvm, ['source_jvm'],
- 'Compiling JVM source')
def copy_jvm_jar(self):
import subprocess
@@ -748,10 +715,9 @@
classlist.close()
return filename
+ @taskdef(['compile_jvm'], 'XXX')
def task_run_jvm(self):
pass
- task_run_jvm = taskdef(task_run_jvm, ['compile_jvm'],
- 'XXX')
def proceed(self, goals):
if not goals:
More information about the pypy-commit
mailing list