257 def enter(self, visitee):
258 if visitee not in self.ids:
259 self.number += 1
260 dot_id = self.ids[visitee] = "T%s" % self.number
261 dot_id = self.ids[visitee]
262 mother = None
263 if self.is_needed(visitee):
264 if isinstance(visitee, ControlFlowLeaf):
265 entry = '%s [label="%s", shape=box]' % (dot_id, visitee.name())
266 elif isinstance(visitee, OrNode):
267 entry = '%s [label="OR", shape=invhouse]' % dot_id
268 elif isinstance(visitee, AndNode):
269 entry = '%s [label="AND", shape=invhouse]' % dot_id
270 elif isinstance(visitee, OrderedNode):
271 entry = '%s [label=">>", shape=point]' % dot_id
272 elif isinstance(visitee, InvertNode):
273 entry = '%s [label="NOT", shape=circle, color=red]' % dot_id
274 elif isinstance(visitee, par):
275 entry = '%s [label="PAR", shape=circle]' % dot_id
276 elif isinstance(visitee, seq):
277 entry = '%s [label="SEQ", shape=circle]' % dot_id
278 else:
279 entry = '%s [label="%s", shape=circle]' % (dot_id, type(visitee))
280 self.nodes.append(entry)
281 if len(self.stack) != 0:
282 mother = self.collapse_identical_ancestors(type(self.stack[-1][0]))
283 if not mother:
284 mother = self.stack[-1][1]
285 edge = "%s->%s" % (dot_id, mother)
286 self.edges.append(edge)
287 self.stack.append((visitee, dot_id))
288