Author: jbeard
Date: Thu Mar 17 16:21:56 2011
New Revision: 1082576

URL: http://svn.apache.org/viewvc?rev=1082576&view=rev
Log:
Fixed bug where preempted basic states were not being generated correctly for 
each transition. The LCA of the transition was being used, but really this 
should have been the top-most parallel ancestor, which is still descendant of 
the lca.

Modified:
    
commons/sandbox/gsoc/2010/scxml-js/trunk/src/xslt/backends/js/AbstractEnumeratedStatechartGenerator.xsl
    
commons/sandbox/gsoc/2010/scxml-js/trunk/src/xslt/backends/js/AbstractStatechartGenerator.xsl
    
commons/sandbox/gsoc/2010/scxml-js/trunk/src/xslt/backends/js/StatePatternStatechartGenerator.xsl

Modified: 
commons/sandbox/gsoc/2010/scxml-js/trunk/src/xslt/backends/js/AbstractEnumeratedStatechartGenerator.xsl
URL: 
http://svn.apache.org/viewvc/commons/sandbox/gsoc/2010/scxml-js/trunk/src/xslt/backends/js/AbstractEnumeratedStatechartGenerator.xsl?rev=1082576&r1=1082575&r2=1082576&view=diff
==============================================================================
--- 
commons/sandbox/gsoc/2010/scxml-js/trunk/src/xslt/backends/js/AbstractEnumeratedStatechartGenerator.xsl
 (original)
+++ 
commons/sandbox/gsoc/2010/scxml-js/trunk/src/xslt/backends/js/AbstractEnumeratedStatechartGenerator.xsl
 Thu Mar 17 16:21:56 2011
@@ -300,23 +300,11 @@
                </choose>
        </template>
 
-       <template name="genPreemptedBasicStatesSet">
-               <param name="t"/>
-
-               <!-- this should map parallel state id to set of preempted 
basic state descendants --> 
-               
-               {
-                       <!-- TODO: move this out into subclasses -->
-                       <for-each 
select="$t/c:basicStateDescendantsOfNearestParallelDescendentOfLCA/c:basicStateDescendant">
-                               <variable name="basicStateDescendantId" 
select="text()"/>
-                               <variable name="descendantState" 
select="$allStates[@id=$basicStateDescendantId]"/>
-                               <value-of select="$descendantState/@c:stateNum 
- 1"/> : true
-                               <if test="position() != last()">,</if>
-                       </for-each>
-               }
+       <template name="genStateRefIdentifier">
+               <param name="s"/>
+               <value-of select="$s/@c:stateNum - 1"/>
        </template>
 
-
        <template name="genStateHooks"/>
        <template name="genEnumeratedHooks"/>
        <template name="genTriggerIntEnum"/>

Modified: 
commons/sandbox/gsoc/2010/scxml-js/trunk/src/xslt/backends/js/AbstractStatechartGenerator.xsl
URL: 
http://svn.apache.org/viewvc/commons/sandbox/gsoc/2010/scxml-js/trunk/src/xslt/backends/js/AbstractStatechartGenerator.xsl?rev=1082576&r1=1082575&r2=1082576&view=diff
==============================================================================
--- 
commons/sandbox/gsoc/2010/scxml-js/trunk/src/xslt/backends/js/AbstractStatechartGenerator.xsl
 (original)
+++ 
commons/sandbox/gsoc/2010/scxml-js/trunk/src/xslt/backends/js/AbstractStatechartGenerator.xsl
 Thu Mar 17 16:21:56 2011
@@ -64,6 +64,7 @@
 
        <variable name="abstractStateName" select="'AbstractState'"/>
        <variable name="delayedSendBaseVariableName" select="'_$timeoutId'"/>
+       <variable name="basicStateDescendantOfParallelStateHash" 
select="'$basicStateDescendantsOfParallelStates'"/>
 
        <variable name="defaultIteratorVarName" 
select="concat(generate-id(),'_iterator')"/>
        <variable name="defaultHoistVarName" 
select="concat(generate-id(),'_hoist')"/>
@@ -253,6 +254,7 @@
                                        </call-template>
                                </for-each>
 
+                               <call-template 
name="genParallelStateBasicSubstatesHash"/>
                
                                //states enum for glass-box unit testing
                                <call-template name="genStatesEnum">
@@ -294,6 +296,22 @@
 
        </template>
 
+       <template name="genParallelStateBasicSubstatesHash">
+               var <value-of 
select="$basicStateDescendantOfParallelStateHash"/> = {
+                       <for-each select="//s:parallel">
+                               <value-of select="@id"/> : {
+                                       <for-each select=".//*[@c:isBasic]">
+                                               <call-template 
name="genStateRefIdentifier">
+                                                       <with-param name="s" 
select="."/>
+                                               </call-template> : true
+                                               <if test="not(position() = 
last())">,</if>
+                                       </for-each>
+                               }
+                               <if test="not(position() = last())">,</if>
+                       </for-each>
+               }
+       </template>
+
        <template match="s:datamodel">
                var <for-each select="s:data">
                        <value-of select="@id"/> 
@@ -853,7 +871,7 @@
                if(<value-of 
select="$historyStateReference"/>.lastConfiguration){
 
                        return {
-                               preemptedBasicStates: <call-template 
name="genPreemptedBasicStatesSet"><with-param name="t" 
select="$t"/></call-template>,
+                               preemptedBasicStates : <call-template 
name="genPreemptedBasicStateReference"><with-param name="t" 
select="$t"/></call-template>,
                                action: function(){
                                        //transition action
                                        <if test="$log">
@@ -1083,6 +1101,17 @@
                </choose>
        </template>
 
+       <template name="genPreemptedBasicStateReference">
+               <param name="t"/>
+
+               <choose>
+                       <when test="$t/c:nearestParallelDescendantOfLCA">
+                               <value-of 
select="$basicStateDescendantOfParallelStateHash"/>["<value-of 
select="$t/c:nearestParallelDescendantOfLCA"/>"]
+                       </when>
+                       <otherwise> {} </otherwise>
+               </choose>
+       </template>
+
        <template name="genTriggerDispatcherInnerContents">
                <param name="s"/>
                <param name="t"/>
@@ -1093,7 +1122,7 @@
                        if(<value-of select="@cond"/>)
                </if>
                return {
-                       preemptedBasicStates : <call-template 
name="genPreemptedBasicStatesSet"><with-param name="t" 
select="$t"/></call-template>,
+                       preemptedBasicStates : <call-template 
name="genPreemptedBasicStateReference"><with-param name="t" 
select="$t"/></call-template>,
                        action : function(){
                                <if test="not($t/@event)">
                                        hasTakenDefaultTransition = true;

Modified: 
commons/sandbox/gsoc/2010/scxml-js/trunk/src/xslt/backends/js/StatePatternStatechartGenerator.xsl
URL: 
http://svn.apache.org/viewvc/commons/sandbox/gsoc/2010/scxml-js/trunk/src/xslt/backends/js/StatePatternStatechartGenerator.xsl?rev=1082576&r1=1082575&r2=1082576&view=diff
==============================================================================
--- 
commons/sandbox/gsoc/2010/scxml-js/trunk/src/xslt/backends/js/StatePatternStatechartGenerator.xsl
 (original)
+++ 
commons/sandbox/gsoc/2010/scxml-js/trunk/src/xslt/backends/js/StatePatternStatechartGenerator.xsl
 Thu Mar 17 16:21:56 2011
@@ -213,16 +213,9 @@
                "<value-of select="$eventName"/>"
        </template>
 
-       <template name="genPreemptedBasicStatesSet">
-               <param name="t"/>
-               
-               {
-                       <for-each 
select="$t/c:basicStateDescendantsOfNearestParallelDescendentOfLCA/c:basicStateDescendant">
-                               <value-of select="text()"/> : true
-                               <if test="position() != last()">,</if>
-                       </for-each>
-               }
-       </template>
-
+       <template name="genStateRefIdentifier">
+               <param name="s"/>
+               <value-of select="$s/@id"/>
+       </template>
 
 </stylesheet>


Reply via email to