[pypy-svn] r26242 - pypy/dist/pypy/translator/stackless
mwh at codespeak.net
mwh at codespeak.net
Mon Apr 24 10:58:53 CEST 2006
Author: mwh
Date: Mon Apr 24 10:58:52 2006
New Revision: 26242
Modified:
pypy/dist/pypy/translator/stackless/transform.py
Log:
a long-needed refactoring of how the stackless transform makes function
pointers out of it's helper functions.
Modified: pypy/dist/pypy/translator/stackless/transform.py
==============================================================================
--- pypy/dist/pypy/translator/stackless/transform.py (original)
+++ pypy/dist/pypy/translator/stackless/transform.py Mon Apr 24 10:58:52 2006
@@ -90,70 +90,44 @@
mixlevelannotator = MixLevelHelperAnnotator(translator.rtyper)
l2a = annmodel.lltype_to_annotation
- annotations = [
- annmodel.SomeInstance(bk.getuniqueclassdef(code.UnwindException)),
- annmodel.SomePtr(lltype.Ptr(STATE_HEADER))]
-
+ unwinddef = bk.getuniqueclassdef(code.UnwindException)
add_frame_state_graph = mixlevelannotator.getgraph(
code.add_frame_state,
- annotations, l2a(lltype.Void))
- ADD_FRAME_STATE_TYPE = lltype.FuncType(
- [self.unwind_exception_type, lltype.Ptr(STATE_HEADER)],
- lltype.Void)
+ [annmodel.SomeInstance(unwinddef),
+ annmodel.SomePtr(lltype.Ptr(STATE_HEADER))],
+ l2a(lltype.Void))
- RESUME_STATE_TYPE = lltype.FuncType([], lltype.Signed)
resume_state_graph = mixlevelannotator.getgraph(
code.resume_state, [], annmodel.SomeInteger())
- self.resume_state_ptr = model.Constant(lltype.functionptr(
- RESUME_STATE_TYPE, "resume_state",
- graph=resume_state_graph),
- lltype.Ptr(RESUME_STATE_TYPE))
- FETCH_RETVAL_VOID_TYPE = lltype.FuncType([], lltype.Void)
fetch_retval_void_graph = mixlevelannotator.getgraph(
code.fetch_retval_void, [], annmodel.s_None)
- self.fetch_retval_void_ptr = model.Constant(lltype.functionptr(
- FETCH_RETVAL_VOID_TYPE, "fetch_retval_void",
- graph=fetch_retval_void_graph),
- lltype.Ptr(FETCH_RETVAL_VOID_TYPE))
-
- FETCH_RETVAL_LONG_TYPE = lltype.FuncType([], lltype.Signed)
fetch_retval_long_graph = mixlevelannotator.getgraph(
code.fetch_retval_long, [], annmodel.SomeInteger())
- self.fetch_retval_long_ptr = model.Constant(lltype.functionptr(
- FETCH_RETVAL_LONG_TYPE, "fetch_retval_long",
- graph=fetch_retval_long_graph),
- lltype.Ptr(FETCH_RETVAL_LONG_TYPE))
-
- FETCH_RETVAL_LONGLONG_TYPE = lltype.FuncType([], lltype.Signed)
fetch_retval_longlong_graph = mixlevelannotator.getgraph( # WAA!
code.fetch_retval_longlong, [], annmodel.SomeInteger(size=2))
- self.fetch_retval_longlong_ptr = model.Constant(lltype.functionptr(
- FETCH_RETVAL_LONGLONG_TYPE, "fetch_retval_longlong",
- graph=fetch_retval_longlong_graph),
- lltype.Ptr(FETCH_RETVAL_LONGLONG_TYPE))
-
- FETCH_RETVAL_FLOAT_TYPE = lltype.FuncType([], lltype.Float)
fetch_retval_float_graph = mixlevelannotator.getgraph(
code.fetch_retval_float, [], annmodel.SomeFloat())
- self.fetch_retval_float_ptr = model.Constant(lltype.functionptr(
- FETCH_RETVAL_FLOAT_TYPE, "fetch_retval_float",
- graph=fetch_retval_float_graph),
- lltype.Ptr(FETCH_RETVAL_FLOAT_TYPE))
-
- FETCH_RETVAL_VOID_P_TYPE = lltype.FuncType([], llmemory.Address)
fetch_retval_void_p_graph = mixlevelannotator.getgraph(
code.fetch_retval_void_p, [], annmodel.SomeAddress())
- self.fetch_retval_void_p_ptr = model.Constant(lltype.functionptr(
- FETCH_RETVAL_VOID_P_TYPE, "fetch_retval_void_p",
- graph=fetch_retval_void_p_graph),
- lltype.Ptr(FETCH_RETVAL_VOID_P_TYPE))
mixlevelannotator.finish()
- self.add_frame_state_ptr = model.Constant(
- getfunctionptr(add_frame_state_graph),
- lltype.Ptr(ADD_FRAME_STATE_TYPE))
+ def fptr(graph):
+ FTYPE = lltype.FuncType(
+ [v.concretetype for v in graph.startblock.inputargs],
+ graph.returnblock.inputargs[0].concretetype)
+ return model.Constant(getfunctionptr(graph), lltype.Ptr(FTYPE))
+
+ self.add_frame_state_ptr = fptr(add_frame_state_graph)
+
+ self.resume_state_ptr = fptr(resume_state_graph)
+
+ self.fetch_retval_void_ptr = fptr(fetch_retval_void_graph)
+ self.fetch_retval_long_ptr = fptr(fetch_retval_long_graph)
+ self.fetch_retval_longlong_ptr = fptr(fetch_retval_longlong_graph)
+ self.fetch_retval_float_ptr = fptr(fetch_retval_float_graph)
+ self.fetch_retval_void_p_ptr = fptr(fetch_retval_void_p_graph)
s_global_state = bk.immutablevalue(code.global_state)
r_global_state = translator.rtyper.getrepr(s_global_state)
More information about the Pypy-commit
mailing list