http://nagoya.apache.org/bugzilla/show_bug.cgi?id=2699
*** shadow/2699 Thu Jul 19 18:29:08 2001
--- shadow/2699.tmp.3124 Fri Jul 20 15:56:14 2001
***************
*** 5,11 ****
| Status: NEW Version: CurrentCVS |
| Resolution: Platform: PC |
| Severity: Major OS/Version: Windows NT/2K |
! | Priority: Other Component: org.apache.xalan.xsltc |
+----------------------------------------------------------------------------+
| Assigned To: [EMAIL PROTECTED] |
| Reported By: [EMAIL PROTECTED] |
--- 5,11 ----
| Status: NEW Version: CurrentCVS |
| Resolution: Platform: PC |
| Severity: Major OS/Version: Windows NT/2K |
! | Priority: Medium Component: org.apache.xalan.xsltc |
+----------------------------------------------------------------------------+
| Assigned To: [EMAIL PROTECTED] |
| Reported By: [EMAIL PROTECTED] |
***************
*** 64,66 ****
--- 64,82 ----
------- Additional Comments From [EMAIL PROTECTED] 2001-07-19 18:29 -------
Created an attachment (id=343)
javap disassembly of translet (compiled with the working codepath).
+
+
+ ------- Additional Comments From [EMAIL PROTECTED] 2001-07-20 15:56 -------
+ During the compilation of the expression inside <xsl:if test=". = $Node">,
+ ParameterRef::translate(...) releases the register slot used by the $Node
+ parameter (slot 5). Then, during the compilation of <xsl:variable name="b"
+ select="1"/> the compiler then assumes that slot 5 is free - generating codes
+ to fill it with int 1. At runtime the VM dies (since I presume it won't let you
+ put an int into a register already containing a ref).
+
+ I can thing of two reasons why 5 shouldnt be reused:
+ 1. the ref is initialized outside a loop and used inside,
+ 2. the ref is for a parameter and should only be given up when the scope of the
+ template ends (arguable, since analysis could show when it s not needed
+ anymore. Does xsltc do this analysis? Perhaps it doesn't matter since there are
+ 65536 registers.)