[pypy-svn] r17823 - pypy/dist/pypy/rpython
arigo at codespeak.net
arigo at codespeak.net
Sat Sep 24 13:42:35 CEST 2005
Author: arigo
Date: Sat Sep 24 13:42:32 2005
New Revision: 17823
Modified:
pypy/dist/pypy/rpython/lltype.py
Log:
Micro-optimization for typeOf(), which is called veeery often.
Modified: pypy/dist/pypy/rpython/lltype.py
==============================================================================
--- pypy/dist/pypy/rpython/lltype.py (original)
+++ pypy/dist/pypy/rpython/lltype.py Sat Sep 24 13:42:32 2005
@@ -3,6 +3,7 @@
from pypy.rpython.rarithmetic import r_uint
from pypy.tool.uid import Hashable
from pypy.tool.tls import tlsobject
+from types import NoneType
log = py.log.Producer('lltype')
@@ -415,23 +416,27 @@
def typeOf(val):
- if isinstance(val, bool):
- return Bool
- if isinstance(val, r_uint):
- return Unsigned
- if isinstance(val, int):
- return Signed
- if isinstance(val, float):
- return Float
- if isinstance(val, str):
- assert len(val) == 1
- return Char
- if isinstance(val, unicode):
- assert len(val) == 1
- return UniChar
- if val is None:
- return Void # maybe
- return val._TYPE
+ try:
+ return val._TYPE
+ except AttributeError:
+ tp = type(val)
+ if tp is NoneType:
+ return Void # maybe
+ if tp is int:
+ return Signed
+ if tp is bool:
+ return Bool
+ if tp is r_uint:
+ return Unsigned
+ if tp is float:
+ return Float
+ if tp is str:
+ assert len(val) == 1
+ return Char
+ if tp is unicode:
+ assert len(val) == 1
+ return UniChar
+ raise TypeError("typeOf(%r object)" % (tp.__name__,))
class InvalidCast(TypeError):
pass
More information about the Pypy-commit
mailing list