1.1 --- a/simplified.py Thu Jan 25 00:28:56 2007 +0100
1.2 +++ b/simplified.py Thu Jan 25 00:30:10 2007 +0100
1.3 @@ -472,13 +472,6 @@
1.4
1.5 # Program structure nodes.
1.6
1.7 -class Module(Node):
1.8 -
1.9 - "A Python module."
1.10 -
1.11 - def full_name(self):
1.12 - return "module %s" % self.name
1.13 -
1.14 class Subprogram(Node, WithName):
1.15
1.16 "A subprogram: functions, methods and loops."
1.17 @@ -487,9 +480,28 @@
1.18 Node.__init__(self, *args, **kw)
1.19 WithName.__init__(self)
1.20
1.21 +class Comparable(Node):
1.22 +
1.23 + "Comparable nodes implementing the 'full_name' method."
1.24 +
1.25 + def __eq__(self, other):
1.26 + # NOTE: Single instance: all instances are the same
1.27 + # NOTE: Multiple instances: all instances are different
1.28 + return self.full_name() == other.full_name()
1.29 +
1.30 + def __hash__(self):
1.31 + return id(self)
1.32 +
1.33 +class Module(Comparable):
1.34 +
1.35 + "A Python module."
1.36 +
1.37 + def full_name(self):
1.38 + return "module %s" % self.name
1.39 +
1.40 # Special non-program nodes.
1.41
1.42 -class Structure(Node): "A non-program node containing some kind of namespace."
1.43 +class Structure(Comparable): "A non-program node containing some kind of namespace."
1.44
1.45 class _Class(Structure, WithName):
1.46
1.47 @@ -537,7 +549,7 @@
1.48 self.attributes_for_instances = {}
1.49
1.50 def _get_key(self, node):
1.51 - return getattr(node, "original_def", node)
1.52 + return getattr(node, "original_def", None) # self.module.original
1.53
1.54 def has_instance(self, node):
1.55 return self.instances.has_key(self._get_key(node))
1.56 @@ -592,6 +604,12 @@
1.57 Instance.__init__(self, *args, **kw)
1.58 self.typename = self.value.__class__.__name__
1.59
1.60 + # NOTE: Hacked full_name avoiding instantiation ordering issues:
1.61 + # NOTE: initialise built-in types, initialise built-in constants.
1.62 +
1.63 + #def full_name(self):
1.64 + # return self.typename + "-c"
1.65 +
1.66 class Attribute:
1.67
1.68 """