[Lxml-checkins] r46651 - lxml/trunk/src/lxml

scoder at codespeak.net scoder at codespeak.net
Sat Sep 15 21:14:42 CEST 2007


Author: scoder
Date: Sat Sep 15 21:14:42 2007
New Revision: 46651

Modified:
   lxml/trunk/src/lxml/docloader.pxi
   lxml/trunk/src/lxml/iterparse.pxi
   lxml/trunk/src/lxml/parser.pxi
   lxml/trunk/src/lxml/xslt.pxi
Log:
rewrite of _ParserContext init code - use functions instead of __init__

Modified: lxml/trunk/src/lxml/docloader.pxi
==============================================================================
--- lxml/trunk/src/lxml/docloader.pxi	(original)
+++ lxml/trunk/src/lxml/docloader.pxi	Sat Sep 15 21:14:42 2007
@@ -94,14 +94,15 @@
 cdef class _ResolverContext(_ExceptionContext):
     cdef _ResolverRegistry _resolvers
     cdef _TempStore _storage
-    def __init__(self, _ResolverRegistry resolvers):
-        _ExceptionContext.__init__(self)
-        if resolvers is None:
-            self._resolvers = _ResolverRegistry()
-        else:
-            self._resolvers = resolvers
-        self._storage = _TempStore()
 
     cdef void clear(self):
         _ExceptionContext.clear(self)
         self._storage.clear()
+
+cdef _initResolverContext(_ResolverContext context,
+                          _ResolverRegistry resolvers):
+    if resolvers is None:
+        context._resolvers = _ResolverRegistry()
+    else:
+        context._resolvers = resolvers
+    context._storage = _TempStore()

Modified: lxml/trunk/src/lxml/iterparse.pxi
==============================================================================
--- lxml/trunk/src/lxml/iterparse.pxi	(original)
+++ lxml/trunk/src/lxml/iterparse.pxi	Sat Sep 15 21:14:42 2007
@@ -65,7 +65,6 @@
     cdef char*  _tag_name
 
     def __init__(self):
-        _ParserContext.__init__(self)
         self._ns_stack = []
         self._pop_ns = self._ns_stack.pop
         self._node_stack = []

Modified: lxml/trunk/src/lxml/parser.pxi
==============================================================================
--- lxml/trunk/src/lxml/parser.pxi	(original)
+++ lxml/trunk/src/lxml/parser.pxi	Sat Sep 15 21:14:42 2007
@@ -378,14 +378,11 @@
 cdef class _ParserContext(_ResolverContext):
     cdef _ErrorLog _error_log
     cdef xmlparser.xmlParserCtxt* _c_ctxt
-    def __init__(self):
-        _ResolverContext.__init__(self, None)
-        self._error_log = _ErrorLog()
 
     cdef _ParserContext _copy(self):
         cdef _ParserContext context
         context = self.__class__()
-        context._resolvers = self._resolvers._copy()
+        _initParserContext(context, self._resolvers._copy(), NULL)
         return context
 
     cdef void _initParserContext(self, xmlparser.xmlParserCtxt* c_ctxt):
@@ -407,7 +404,15 @@
         recover = parser._parse_options & xmlparser.XML_PARSE_RECOVER
         return _handleParseResult(self, self._c_ctxt, result,
                                    filename, recover)
-    
+
+cdef _initParserContext(_ParserContext context,
+                        _ResolverRegistry resolvers,
+                        xmlparser.xmlParserCtxt* c_ctxt):
+    _initResolverContext(context, resolvers)
+    if c_ctxt is not NULL:
+        context._initParserContext(c_ctxt)
+    context._error_log = _ErrorLog()
+
 
 cdef int _raiseParseError(xmlparser.xmlParserCtxt* ctxt, filename,
                           _ErrorLog error_log) except 0:
@@ -509,7 +514,7 @@
             python.PyErr_NoMemory()
 
         self._context = self._createContext(target)
-        self._context._initParserContext(pctxt)
+        _initParserContext(self._context, None, pctxt)
 
         if remove_comments:
             pctxt.sax.comment = NULL
@@ -594,7 +599,7 @@
         parser._parse_options = self._parse_options
         parser._class_lookup  = self._class_lookup
         parser._context = self._context._copy()
-        parser._parser_ctxt._private = <python.PyObject*>parser._context
+        parser._context._initParserContext(parser._parser_ctxt)
         return parser
 
     def copy(self):

Modified: lxml/trunk/src/lxml/xslt.pxi
==============================================================================
--- lxml/trunk/src/lxml/xslt.pxi	(original)
+++ lxml/trunk/src/lxml/xslt.pxi	Sat Sep 15 21:14:42 2007
@@ -50,17 +50,20 @@
 cdef class _XSLTResolverContext(_ResolverContext):
     cdef xmlDoc* _c_style_doc
     cdef _BaseParser _parser
-    def __init__(self, _BaseParser parser not None):
-        _ResolverContext.__init__(self, parser.resolvers)
-        self._parser = parser
-        self._c_style_doc = NULL
 
     cdef _XSLTResolverContext _copy(self):
         cdef _XSLTResolverContext context
-        context = _XSLTResolverContext(self._parser)
+        context = _XSLTResolverContext()
+        _initXSLTResolverContext(context, self._parser)
         context._c_style_doc = self._c_style_doc
         return context
 
+cdef _initXSLTResolverContext(_XSLTResolverContext context,
+                              _BaseParser parser):
+    _initResolverContext(context, parser.resolvers)
+    context._parser = parser
+    context._c_style_doc = NULL
+
 cdef xmlDoc* _xslt_resolve_stylesheet(char* c_uri, void* context):
     cdef xmlDoc* c_doc
     c_doc = (<_XSLTResolverContext>context)._c_style_doc
@@ -300,7 +303,8 @@
             c_doc.URL = tree.xmlStrdup(_cstr(doc_url_utf))
 
         self._error_log = _ErrorLog()
-        self._xslt_resolver_context = _XSLTResolverContext(doc._parser)
+        self._xslt_resolver_context = _XSLTResolverContext()
+        _initXSLTResolverContext(self._xslt_resolver_context, doc._parser)
         # keep a copy in case we need to access the stylesheet via 'document()'
         self._xslt_resolver_context._c_style_doc = _copyDoc(c_doc, 1)
         c_doc._private = <python.PyObject*>self._xslt_resolver_context


More information about the lxml-checkins mailing list