def VisitEqnSet(self, o, **kwargs): self.ast = o deps = VisitorFindDirectSymbolDependance() deps.visit(o) self.assignee_to_assigment = {} for a in o.assignments: self.assignee_to_assigment[a.lhs] = a assignment_deps = deps.dependancies resolved = set() def resolve(assignment): if assignment in resolved: return if type(assignment) != ast.AssignedVariable: return for dep in assignment_deps[assignment]: resolve(dep) self.visit(self.assignee_to_assigment[assignment]) resolved.add(assignment) for a in o.assignments: resolve(a.lhs) for a in o.assignments: self.visit(a) for a in o.timederivatives: self.visit(a)
def VisitNineMLComponent(self, o, **kwargs): self.ast = o deps = VisitorFindDirectSymbolDependance() deps.visit(o) self.assignee_to_assigment = {} for a in o.assignments: self.assignee_to_assigment[a.lhs] = a assignment_deps = deps.dependancies resolved = set() #print #print 'Assignments:' #for ass in o.assignments: #print ass.lhs.symbol, ass.lhs def resolve(assignment): if assignment in resolved: return if type(assignment) != ast.AssignedVariable: return for dep in assignment_deps[assignment]: resolve(dep) self.visit(self.assignee_to_assigment[assignment]) resolved.add(assignment) for a in o.assignments: resolve(a.lhs) for a in o.assignments: self.visit(a) for a in o.timederivatives: #print 'Time Derivative:', a, a.lhs.symbol self.visit(a) # Build a dictionary of predicates which detect whether a # trigger is valid self.transition_triggers_evals = {} self.transitions_actions = {} self.transition_event_forwarding = defaultdict(list) self.transition_port_handlers = defaultdict(list) for conn in o._event_port_connections: self.visit(conn) for tr in o.transitions: self.visit(tr)