1.1 --- a/micropython/inspect.py Sat Feb 09 19:37:38 2008 +0100
1.2 +++ b/micropython/inspect.py Sun Feb 10 21:20:38 2008 +0100
1.3 @@ -45,6 +45,7 @@
1.4 each such object is defined.
1.5 """
1.6
1.7 +from micropython.common import *
1.8 import compiler.ast
1.9 from compiler.visitor import ASTVisitor
1.10 try:
1.11 @@ -52,13 +53,7 @@
1.12 except NameError:
1.13 from sets import Set as set
1.14
1.15 -class InspectError(Exception):
1.16 -
1.17 - "An inspection error."
1.18 -
1.19 - def __init__(self, node, message):
1.20 - self.node = node
1.21 - self.message = message
1.22 +class InspectError(ProcessingError): pass
1.23
1.24 class AtLeast:
1.25
1.26 @@ -166,7 +161,7 @@
1.27 if not self.namespace.has_key(name):
1.28 self.globals.add(name)
1.29 else:
1.30 - raise InspectError, "Name %r is global and local in %r" % (name, self)
1.31 + raise InspectError(self.full_name(), self.node, "Name %r is global and local in %r" % (name, self))
1.32
1.33 def get_assignments(self, name):
1.34 if self.assignments.has_key(name):
1.35 @@ -425,7 +420,7 @@
1.36 if name not in self.argnames and not self.has_key(name):
1.37 self.globals.add(name)
1.38 else:
1.39 - raise InspectError, "Name %r is global and local in %r" % (name, self)
1.40 + raise InspectError(self.full_name(), self.node, "Name %r is global and local in %r" % (name, self))
1.41
1.42 def parameters(self):
1.43
1.44 @@ -624,7 +619,7 @@
1.45 # Visitor methods.
1.46
1.47 def default(self, node, *args):
1.48 - raise InspectError, node.__class__
1.49 + raise InspectError(self.full_name(), node, "Node class %r is not supported." % node.__class__)
1.50
1.51 def dispatch(self, node, *args):
1.52 return ASTVisitor.dispatch(self, node, *args)
1.53 @@ -693,15 +688,17 @@
1.54 expr = self.dispatch(base)
1.55 if isinstance(expr, Attr):
1.56 if expr.assignments != 1:
1.57 - raise InspectError(node, "Base class %r for %r in %r is not constant." % (base, cls, self))
1.58 + raise InspectError(self.full_name(), node,
1.59 + "Base class %r for %r in %r is not constant." % (base, cls, self))
1.60 else:
1.61 cls.add_base(expr.value)
1.62 else: # if expr is None:
1.63 - raise InspectError(node, "Base class %r for %r in %r is not found: it may be hidden in some way." % (base, cls, self))
1.64 + raise InspectError(self.full_name(), node,
1.65 + "Base class %r for %r in %r is not found: it may be hidden in some way." % (base, cls, self))
1.66
1.67 # Make a back reference from the node for code generation.
1.68
1.69 - node.cls = cls
1.70 + node.unit = cls
1.71
1.72 # Make an entry for the class.
1.73
1.74 @@ -745,7 +742,8 @@
1.75
1.76 def visitFrom(self, node):
1.77 if self.importer is None:
1.78 - raise InspectError(node, "Please use the micropython.Importer class for code which uses the 'from' statement.")
1.79 + raise InspectError(self.full_name(), node,
1.80 + "Please use the micropython.Importer class for code which uses the 'from' statement.")
1.81
1.82 module = self.importer.load(node.modname, 1)
1.83
1.84 @@ -787,7 +785,7 @@
1.85
1.86 # Make a back reference from the node for code generation.
1.87
1.88 - node.function = function
1.89 + node.unit = function
1.90
1.91 self.namespaces.append(function)
1.92
1.93 @@ -843,7 +841,8 @@
1.94
1.95 def visitImport(self, node):
1.96 if self.importer is None:
1.97 - raise InspectError(node, "Please use the micropython.Importer class for code which uses the 'import' statement.")
1.98 + raise InspectError(self.full_name(), node,
1.99 + "Please use the micropython.Importer class for code which uses the 'import' statement.")
1.100
1.101 for name, alias in node.names:
1.102 if alias is not None: