ruby: slicc state machine error fixes
authorBrad Beckmann <Brad.Beckmann@amd.com>
Wed, 18 Nov 2009 21:55:58 +0000 (13:55 -0800)
committerBrad Beckmann <Brad.Beckmann@amd.com>
Wed, 18 Nov 2009 21:55:58 +0000 (13:55 -0800)
Added error messages when:
- a state does not exist in a machine's list of known states.
- an event does not exist in a machine
- the actions of a certain machine have not been declared

src/mem/slicc/ast/TransitionDeclAST.py

index ef745fd5030c7271945aef704f69e52e0d2cee22..a941d7b0c9e3efcab5924f9b5cdd839b6cecb1dd 100644 (file)
@@ -46,9 +46,20 @@ class TransitionDeclAST(DeclAST):
         if machine is None:
             self.error("Transition declaration not part of a machine.")
 
+        for action in self.actions:
+            if action not in machine.actions:
+                self.error("Invalid action: %s is not part of machine: %s" % \
+                           (action, machine))
+
         for state in self.states:
+            if state not in machine.states:
+                self.error("Invalid state: %s is not part of machine: %s" % \
+                           (state, machine))
             next_state = self.next_state or state
             for event in self.events:
+                if event not in machine.events:
+                    self.error("Invalid event: %s is not part of machine: %s" % \
+                               (event, machine))
                 t = Transition(self.symtab, machine, state, event, next_state,
                                self.actions, self.location, self.pairs)
                 machine.addTransition(t)