1.1 --- a/micropython/data.py Mon Jul 01 00:47:43 2013 +0200
1.2 +++ b/micropython/data.py Mon Jul 01 02:10:23 2013 +0200
1.3 @@ -554,7 +554,7 @@
1.4
1.5 "A base class for common/normal classes and the type class."
1.6
1.7 - def __init__(self, name, parent=None, module=None, node=None):
1.8 + def __init__(self, name, parent=None, module=None, node=None, original_name=None):
1.9
1.10 """
1.11 Initialise the class with the given 'name', optional 'parent' object,
1.12 @@ -566,6 +566,7 @@
1.13 self.name = name
1.14 self.parent = parent
1.15 self.astnode = node
1.16 + self.original_name = original_name or name
1.17
1.18 # Superclasses, descendants and attributes.
1.19
1.20 @@ -975,7 +976,7 @@
1.21 "An inspected function."
1.22
1.23 def __init__(self, name, parent, argnames, defaults, has_star, has_dstar,
1.24 - dynamic_def=0, module=None, node=None):
1.25 + dynamic_def=0, module=None, node=None, original_name=None):
1.26
1.27 """
1.28 Initialise the function with the given 'name', 'parent', list of
1.29 @@ -995,6 +996,8 @@
1.30 self.name = name
1.31 self._is_lambda = False
1.32
1.33 + self.original_name = original_name or name
1.34 +
1.35 self.parent = parent
1.36 self.argnames = argnames
1.37 self.defaults = defaults
1.38 @@ -1487,10 +1490,12 @@
1.39 # Where names are reused in a namespace, differentiate between classes
1.40 # using a name index.
1.41
1.42 + original_name = name
1.43 +
1.44 if parent.has_key(name):
1.45 name = "%s#%d" % (name, parent[name].assignments + 1)
1.46
1.47 - cls = Class(name, parent, module, node)
1.48 + cls = Class(name, parent, module, node, original_name)
1.49
1.50 # Add a reference for the class's "shadow" name.
1.51
1.52 @@ -1498,6 +1503,31 @@
1.53
1.54 return cls
1.55
1.56 +# Function construction.
1.57 +
1.58 +def get_function(name, parent, argnames, defaults, has_star, has_dstar,
1.59 + dynamic_def=0, module=None, node=None):
1.60 +
1.61 + """
1.62 + Return a Function instance for the class with the given 'name', 'parent',
1.63 + and other details.
1.64 + """
1.65 +
1.66 + original_name = name
1.67 +
1.68 + if parent.has_key(name):
1.69 + name = "%s#%d" % (name, parent[name].assignments + 1)
1.70 +
1.71 + fn = Function(name, parent, argnames, defaults, has_star, has_dstar,
1.72 + dynamic_def, module, node, original_name)
1.73 +
1.74 + # Add a reference for the function's "shadow" name.
1.75 +
1.76 + if name:
1.77 + parent.use_specific_attribute(parent.full_name(), name)
1.78 +
1.79 + return fn
1.80 +
1.81 # Lambda sequence numbering.
1.82
1.83 lambda_index = 0