summaryrefslogtreecommitdiff
path: root/js/codeq/stateMachine.js
diff options
context:
space:
mode:
Diffstat (limited to 'js/codeq/stateMachine.js')
-rw-r--r--js/codeq/stateMachine.js12
1 files changed, 11 insertions, 1 deletions
diff --git a/js/codeq/stateMachine.js b/js/codeq/stateMachine.js
index cfb27e7..dff89d5 100644
--- a/js/codeq/stateMachine.js
+++ b/js/codeq/stateMachine.js
@@ -6,8 +6,17 @@ codeq.makeStateMachine = function(def){
var currState = null;
return {
'transition': function(name){
+ var newState = def[name];
+ if (!newState) {
+ codeq.log.error('Cannot transition to state ' + name + ': it is not defined');
+ return;
+ }
+ if (newState === currState) {
+ codeq.log.info('Will not transition between identical states: ' + name);
+ return;
+ }
if(currState !== null) currState.exit();
- currState = def[name];
+ currState = newState;
currState.enter.apply(currState,Array.prototype.slice.apply(arguments,[1]));
},
'destroy': function(){
@@ -15,6 +24,7 @@ codeq.makeStateMachine = function(def){
currState = null;
},
'register': function(name,state){
+ if (name in def) codeq.log.error('The state ' + name + ' is already registered, overriding');
def[name] = state;
}
}