Author: Armin Rigo <[email protected]>
Branch:
Changeset: r50462:7d73e99929bb
Date: 2011-12-13 13:55 +0100
http://bitbucket.org/pypy/pypy/changeset/7d73e99929bb/
Log: Let the JIT see the app-level 'type(x)' construct.
diff --git a/pypy/objspace/std/typetype.py b/pypy/objspace/std/typetype.py
--- a/pypy/objspace/std/typetype.py
+++ b/pypy/objspace/std/typetype.py
@@ -10,7 +10,6 @@
w_dict=gateway.NoneNotWrapped):
"This is used to create user-defined classes only."
- from pypy.objspace.std.typeobject import W_TypeObject
# XXX check types
w_typetype = _precheck_for_new(space, w_typetype)
@@ -19,10 +18,18 @@
if (space.is_w(space.type(w_typetype), space.w_type) and w_bases is None
and
w_dict is None):
return space.type(w_name)
- elif w_bases is None or w_dict is None:
+ else:
+ return _create_new_type(space, w_typetype, w_name, w_bases, w_dict)
+
+
+def _create_new_type(space, w_typetype, w_name, w_bases, w_dict):
+ # this is in its own function because we want the special case 'type(x)'
+ # above to be seen by the jit.
+ from pypy.objspace.std.typeobject import W_TypeObject
+
+ if w_bases is None or w_dict is None:
raise OperationError(space.w_TypeError, space.wrap("type() takes 1 or
3 arguments"))
-
bases_w = space.fixedview(w_bases)
w_winner = w_typetype
_______________________________________________
pypy-commit mailing list
[email protected]
http://mail.python.org/mailman/listinfo/pypy-commit