[Lxml-checkins] r52346 - in lxml/trunk: . src/lxml

scoder at codespeak.net scoder at codespeak.net
Sun Mar 9 17:53:10 CET 2008


Author: scoder
Date: Sun Mar  9 17:53:04 2008
New Revision: 52346

Modified:
   lxml/trunk/   (props changed)
   lxml/trunk/CHANGES.txt
   lxml/trunk/src/lxml/apihelpers.pxi
   lxml/trunk/src/lxml/etree_defs.h
Log:
 r3748 at delle:  sbehnel | 2008-03-08 19:54:32 +0100
 faster _isString(), faster _getNsTag()


Modified: lxml/trunk/CHANGES.txt
==============================================================================
--- lxml/trunk/CHANGES.txt	(original)
+++ lxml/trunk/CHANGES.txt	Sun Mar  9 17:53:04 2008
@@ -30,6 +30,8 @@
 Other changes
 -------------
 
+* General API speed-ups.
+
 * The benchmark suite now uses tail text in the trees, which makes the
   absolute numbers incomparable to previous results.
 

Modified: lxml/trunk/src/lxml/apihelpers.pxi
==============================================================================
--- lxml/trunk/src/lxml/apihelpers.pxi	(original)
+++ lxml/trunk/src/lxml/apihelpers.pxi	Sun Mar  9 17:53:04 2008
@@ -1002,7 +1002,8 @@
     cdef char* c_ns_end
     cdef Py_ssize_t taglen
     cdef Py_ssize_t nslen
-    if isinstance(tag, QName):
+    # _isString() is much faster than isinstance()
+    if not _isString(tag) and isinstance(tag, QName):
         tag = (<QName>tag).text
     tag = _utf8(tag)
     c_tag = _cstr(tag)

Modified: lxml/trunk/src/lxml/etree_defs.h
==============================================================================
--- lxml/trunk/src/lxml/etree_defs.h	(original)
+++ lxml/trunk/src/lxml/etree_defs.h	Sun Mar  9 17:53:04 2008
@@ -119,7 +119,9 @@
              (__PY_NEW_GLOBAL_EMPTY_TUPLE)), \
          NULL))
 
-#define _isString(obj)   PyObject_TypeCheck(obj, &PyBaseString_Type)
+#define _isString(obj)   (PyString_CheckExact(obj)  || \
+                          PyUnicode_CheckExact(obj) || \
+                          PyObject_TypeCheck(obj, &PyBaseString_Type))
 
 #define _isElement(c_node) \
         (((c_node)->type == XML_ELEMENT_NODE) || \


More information about the lxml-checkins mailing list