1234567891011121314151617181920212223242526272829303132333435363738394041424344454647 |
- from sccd.statechart.static.tree import *
- from sccd.action_lang.static.scope import *
- from sccd.statechart.static.semantic_configuration import *
- @dataclass
- class Statechart(Freezable):
- __slots__ = ["semantics", "scope", "datamodel", "internal_events", "internally_raised_events", "inport_events", "event_outport", "tree"]
- def __init__(self, semantics: SemanticConfiguration, scope: Scope, datamodel: Optional[Block], internal_events: Bitmap, internally_raised_events: Bitmap, inport_events: Dict[str, Set[int]], event_outport: Dict[str, str], tree: StateTree):
-
- super().__init__()
-
- # Semantic configuration for statechart execution
- self.semantics: SemanticConfiguration = semantics
- # Instance scope, the set of variable names (and their types and offsets in memory) that belong to the statechart
- self.scope: Scope = scope
- # Block of statements setting up the datamodel (variables in instance scope)
- self.datamodel: Optional[Block] = datamodel
- # Union of internally raised and input events. Basically all the events that a transition could be triggered by.
- self.internal_events: Bitmap = internal_events
-
- # All internally raised events in the statechart, may overlap with input events, as an event can be both an input event and internally raised.
- self.internally_raised_events: Bitmap = internally_raised_events
- # Mapping from inport to set of event IDs - currently unused
- self.inport_events: Dict[str, Bitmap] = inport_events
- # Mapping from event name to outport
- self.event_outport: Dict[str, str] = event_outport
- self.tree: StateTree = tree
- def generate_semantic_variants(self) -> List['Statechart']:
- return [Statechart(
- semantics=variant,
- # All other fields remain the same.
- scope=self.scope,
- datamodel=self.datamodel,
- internal_events=self.internal_events,
- internally_raised_events=self.internally_raised_events,
- inport_events=self.inport_events,
- event_outport=self.event_outport,
- tree=self.tree)
- for variant in self.semantics.generate_variants()]
|