@@ -19,8 +19,12 @@ Elm.debuggerRestart = function() {
19 staticDebugger.restart();
19 staticDebugger.restart();
22−Elm.debuggerStep = function() {
22+Elm.debuggerGetMaxSteps = function() {
23+ return staticDebugger.getMaxSteps();
26+Elm.debuggerStepTo = function(index) {
23− staticDebugger.step();
27+ staticDebugger.stepTo(index);
26function debuggerInit(module, elm) {
30function debuggerInit(module, elm) {
@@ -29,6 +33,7 @@ function debuggerInit(module, elm) {
29 var allNodes = null;
33 var allNodes = null;
31 var recordedEvents = [];
35 var recordedEvents = [];
36+ var eventCounter = 0;
32 var asyncTimers = [];
37 var asyncTimers = [];
33 var initialProgramState = {
38 var initialProgramState = {
34 nodeValues: [],
39 nodeValues: [],
@@ -76,18 +81,33 @@ function debuggerInit(module, elm) {
79− function stepRecording() {
84+ function gotoStep(index) {
80− if (programPaused) {
85+ if (!programPaused) {
81− if (recordedEvents.length > 0) {
82− var nextEvent = recordedEvents.shift();
83− elm.notify(nextEvent.id, nextEvent.value, nextEvent.timestep);
87− // move into stepping mode
88 programPaused = true;
86 programPaused = true;
89 resetProgram();
87 resetProgram();
90+ if (index < 0 || index >= recordedEvents.length) {
91+ throw "Index out of bounds: " + index;
94+ if (index < eventCounter) {
99+ assert(index >= eventCounter, "index must be bad");
100+ while (eventCounter < index) {
101+ var nextEvent = recordedEvents[eventCounter];
102+ elm.notify(nextEvent.id, nextEvent.value, nextEvent.timestep);
106+ assert(eventCounter == index, "while loop didnt' work");
109+ function getMaxSteps() {
110+ return recordedEvents.length - 1;
93 function clearAsyncEvents() {
113 function clearAsyncEvents() {
@@ -130,7 +150,8 @@ function debuggerInit(module, elm) {
130 // debugger functions
150 // debugger functions
131 reset: resetProgram,
151 reset: resetProgram,
132 restart: restartProgram,
152 restart: restartProgram,
133− step: stepRecording
153+ getMaxSteps: getMaxSteps,
136 allNodes = flattenNodes(wrappedElm.inputs);
157 allNodes = flattenNodes(wrappedElm.inputs);