[ 
https://issues.apache.org/jira/browse/XALANJ-2389?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel#action_12529600
 ] 

Brian Minchau commented on XALANJ-2389:
---------------------------------------

Here is the XML for a testcase:
<a><x><y>3</y><y>5</y><y>1</y></x></a>

Here is the stylesheet for the same testcase:
<?xml version="1.0"?>
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform";>
  <xsl:template match="/">
    <xsl:variable name="v" select="3"/>
    
    <!-- These 3 are OK even without the patch -->
   <xsl:variable name="var1" select="351"/>  
   <xsl:variable name="var2" select="a"/>  
   <xsl:variable name="var3" select="a[//x/y[3]]"/>  

   <!-- This one with var4 only works with the patch -->
   <xsl:variable name="var4" select="a[//x/y[$v]]"/>  

    <out><xsl:value-of 
          select="$var1 + 1"/>,<xsl:value-of 
          select="$var2 + 1"/>,<xsl:value-of 
          select="$var3 + 1"/>,<xsl:value-of
          select="$var4 + 1"/></out>
  </xsl:template>
</xsl:stylesheet>

The correct output is:
<out>352,352,352,352</out>

Note that this is an XSLTC problem, it works fine for the interpreter.

> XSLTC doesn't correctly set the parent of some nodes ... comile time failures 
> result
> ------------------------------------------------------------------------------------
>
>                 Key: XALANJ-2389
>                 URL: https://issues.apache.org/jira/browse/XALANJ-2389
>             Project: XalanJ2
>          Issue Type: Bug
>          Components: XSLTC
>            Reporter: Brian Minchau
>
> There is a problem with AST node construction in XSLTC.  
> When the processor is creating AST nodes for path expressions, 
> it sometimes discards nodes that it creates, takes the child nodes, 
> and attaches them to new parents.  This can happen when nodes
> representing casts are injected.
> Inside the constructors and various setter methods for SyntaxTreeNode
> and its subclasses, there are calls to setParent that try to ensure that the
> child of a node points to its parent.  The problem is that 
> SyntaxTreeNode.setParent checks whether the parent of a node is not null,
> and if it is, it ignores the request to set the parent.
> In the case of the path expressions, some nodes that the parser has already
> created as children of other nodes get reattached to new parents in the 
> middle of parsing.
> The behaviour of the setParent method means that such nodes point to the old 
> parent
> which is disconnected from the rest of the parse tree.
> Much later, when generating code for VariableReference nodes,
> we loop through the parent chain looking for the nearest ancestor
> that implements the Closure interface.  Predicate is one such class.
> But this problem in SyntaxTreeNode.setParent has the result that the
> variable reference node in the test case does not find a Predicate that
> ought to be in its ancestor chain.
> The problem is to ensure the SyntaxTreeNode._parent pointer is correct.
> It's not a simple matter of changing SyntaxTreeNode.setParent to 
> unconditionally set the _parent field however.  If you do that, other things 
> end up being broken. 

-- 
This message is automatically generated by JIRA.
-
You can reply to this email to add a comment to the issue online.


---------------------------------------------------------------------
To unsubscribe, e-mail: [EMAIL PROTECTED]
For additional commands, e-mail: [EMAIL PROTECTED]

Reply via email to