| 470 | |
| 471 | |
| 472 | class Frame: |
| 473 | def __init__(self, type, resolved=None, ancestry=()): |
| 474 | self.type = type |
| 475 | if resolved is None: |
| 476 | resolved = type.resolve() |
| 477 | self.resolved = resolved.resolve() |
| 478 | self.ancestry = ancestry |
| 479 | |
| 480 | def __str__(self): |
| 481 | return '%s\n%s\n%s' % ( |
| 482 | Repr(self.type), |
| 483 | Repr(self.resolved), |
| 484 | [Repr(t) for t in self.ancestry]) |
| 485 | |
| 486 | class Empty: |
| 487 | def __getattr__(self, name): |
| 488 | if name == 'ancestry': |
| 489 | return () |
| 490 | else: |
| 491 | return None |
| 492 | |
| 493 | |
| 494 | class Stack(list): |