[pypy-svn] r50724 - pypy/dist/pypy/objspace
cfbolz at codespeak.net
cfbolz at codespeak.net
Thu Jan 17 19:16:48 CET 2008
Author: cfbolz
Date: Thu Jan 17 19:16:48 2008
New Revision: 50724
Modified:
pypy/dist/pypy/objspace/reflective.py
Log:
factor out some common code
Modified: pypy/dist/pypy/objspace/reflective.py
==============================================================================
--- pypy/dist/pypy/objspace/reflective.py (original)
+++ pypy/dist/pypy/objspace/reflective.py Thu Jan 17 19:16:48 2008
@@ -43,48 +43,40 @@
def proxymaker(space, opname, parentfn):
if opname in DontWrapMe:
return None
- elif opname == "newdict": # grr grr kwargs
+ def user_hook(*args_w):
+ if w_rspace is not None:
+ try:
+ w_f = space.getattr(w_rspace, space.wrap("newdict"))
+ except OperationError, e:
+ if not e.match(space, space.w_AttributeError):
+ raise
+ else:
+ w_obj = space.call_function(w_f, w_obj)
+ reset_reflective_space(space, w_rspace)
+ return w_obj
+ return None
+
+ if opname == "newdict": # grr grr kwargs
def fn(track_builtin_shadowing=False):
w_obj = parentfn(track_builtin_shadowing)
w_rspace = get_reflective_space(space)
- if w_rspace is not None:
- try:
- w_f = space.getattr(w_rspace, space.wrap("newdict"))
- except OperationError, e:
- if not e.match(space, space.w_AttributeError):
- raise
- else:
- w_obj = space.call_function(w_f, w_obj)
- reset_reflective_space(space, w_rspace)
+ w_newobj = user_hook(w_obj)
+ if w_newobj is not None:
+ return w_newobj
return w_obj
elif opname.startswith("new"):
def fn(*args_w):
w_obj = parentfn(*args_w)
w_rspace = get_reflective_space(space)
- if w_rspace is not None:
- try:
- w_f = space.getattr(w_rspace, space.wrap(opname))
- except OperationError, e:
- if not e.match(space, space.w_AttributeError):
- raise
- else:
- w_obj = space.call_function(w_f, w_obj)
- reset_reflective_space(space, w_rspace)
+ w_newobj = user_hook(w_obj)
+ if w_newobj is not None:
+ return w_newobj
return w_obj
else:
def fn(*args_w):
- ec = space.getexecutioncontext()
- w_rspace = get_reflective_space(space)
- if w_rspace is not None:
- try:
- w_f = space.getattr(w_rspace, space.wrap(opname))
- except OperationError, e:
- if not e.match(space, space.w_AttributeError):
- raise
- else:
- w_res = space.call_function(w_f, *args_w)
- reset_reflective_space(space, w_rspace)
- return w_res
+ w_obj = user_hook(*args_w)
+ if w_obj is not None:
+ return w_obj
return parentfn(*args_w)
fn.func_name = opname
return fn
More information about the Pypy-commit
mailing list