You are viewing a plain text version of this content. The canonical link for it is here.
Posted to dev@xalan.apache.org by bu...@apache.org on 2003/08/07 14:15:30 UTC

DO NOT REPLY [Bug 22210] New: - failed assertion during stylesheet compile (Stylesheet.cpp, line #803)

DO NOT REPLY TO THIS EMAIL, BUT PLEASE POST YOUR BUG 
RELATED COMMENTS THROUGH THE WEB INTERFACE AVAILABLE AT
<http://nagoya.apache.org/bugzilla/show_bug.cgi?id=22210>.
ANY REPLY MADE TO THIS MESSAGE WILL NOT BE COLLECTED AND 
INSERTED IN THE BUG DATABASE.

http://nagoya.apache.org/bugzilla/show_bug.cgi?id=22210

failed assertion during stylesheet compile (Stylesheet.cpp, line #803)

           Summary: failed assertion during stylesheet compile
                    (Stylesheet.cpp, line #803)
           Product: XalanC
           Version: 1.6
          Platform: All
        OS/Version: All
            Status: NEW
          Severity: Normal
          Priority: Other
         Component: XalanC
        AssignedTo: xalan-dev@xml.apache.org
        ReportedBy: mark@npsl.co.uk


Code that asserts:

const ElemTemplate*Code that asserts:

const ElemTemplate*
Stylesheet::findNamedTemplate(const XalanQName&		qname) const
{
	assert(m_importsSize == m_imports.size());


This is a bit tricky to explain, the setup is that I have:

top-level stylesheet:
	<xsl:import href="b.xsl"/>
	<xsl:import href="a.xsl"/>

a.xsl:
	<xsl:import href="c.xsl"/>
	<xsl:template name="foobar" match="nud">
		<xsl:call-template name="foobar">
	</xsl:template>
	
b.xsl:
	<xsl:template match="/">
		<xsl:call-template name="foobar"/>
	</xsl:template>
	
c.xsl:
	<xsl:template match="/"/>

What happens is that b is postConstructed first (although from the comments 
in the post construction code, it looks like it should be last?).  When the
call-template element in b is constructed, then it winds up calling
findNamedTemplate() in a.xsl.  postConstruct() has not yet been called on
a, so the assertion triggers (correctly, since if the template foobar was
pushed down into c.xsl i guess it would not be found).

I'm unsure as to how to correct this -- but I think that you should either
get an error from the compile; or no assertion.  Any pointers?

Thanks,

Mark