test_closure.xml 1.1 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364
  1. <?xml version="1.0" ?>
  2. <test>
  3. <statechart>
  4. <!-- function closures are supported -->
  5. <datamodel><![CDATA[
  6. counter = func(i:int) {
  7. return func {
  8. i += 1;
  9. return i;
  10. };
  11. };
  12. increment = counter(0);
  13. x = 0;
  14. ]]></datamodel>
  15. <inport name="in">
  16. <event name="start"/>
  17. </inport>
  18. <outport name="out">
  19. <event name="done"/>
  20. </outport>
  21. <root initial="s1">
  22. <state id="s1">
  23. <onentry>
  24. <code>
  25. x = increment();
  26. </code>
  27. </onentry>
  28. <transition cond="x == 1" target="/s2"/>
  29. </state>
  30. <state id="s2">
  31. <onentry>
  32. <code>
  33. x = increment();
  34. </code>
  35. </onentry>
  36. <transition cond="x == 2" target="/s3"/>
  37. </state>
  38. <state id="s3">
  39. <onentry>
  40. <raise event="done"/>
  41. </onentry>
  42. </state>
  43. </root>
  44. </statechart>
  45. <input>
  46. <event port="in" name="start" time="0 d"/>
  47. </input>
  48. <output>
  49. <big_step>
  50. <event port="out" name="done"/>
  51. </big_step>
  52. </output>
  53. </test>