1.1 --- a/micropython/inspect.py Mon May 05 00:46:38 2008 +0200
1.2 +++ b/micropython/inspect.py Sat May 10 02:32:20 2008 +0200
1.3 @@ -616,6 +616,8 @@
1.4 del self.positional_names[-1]
1.5
1.6 # Initialise default storage.
1.7 + # NOTE: This must be initialised separately due to the reliance on node
1.8 + # NOTE: visiting.
1.9
1.10 self.default_attrs = []
1.11
1.12 @@ -743,8 +745,10 @@
1.13
1.14 "Make a function from a method."
1.15
1.16 - return Function(self.name, self.parent, self.argnames[1:], self.defaults,
1.17 + function = Function(self.name, self.parent, self.argnames[1:], self.defaults,
1.18 self.has_star, self.has_dstar, self.global_namespace, self.node)
1.19 + function.default_attrs = self.default_attrs
1.20 + return function
1.21
1.22 class UnresolvedName(NamespaceDict):
1.23
1.24 @@ -793,11 +797,6 @@
1.25
1.26 self.all_objects = set()
1.27
1.28 - # Constant records.
1.29 -
1.30 - self.constant_values = {}
1.31 - self.constant_list = None # cache for constants
1.32 -
1.33 # Keyword records.
1.34
1.35 self.keyword_names = set()
1.36 @@ -834,15 +833,6 @@
1.37
1.38 return dict(self)
1.39
1.40 - def constants(self):
1.41 -
1.42 - "Return a list of constants."
1.43 -
1.44 - if self.constant_list is None:
1.45 - self.constant_list = list(self.constant_values.values())
1.46 -
1.47 - return self.constant_list
1.48 -
1.49 # Program visitors.
1.50
1.51 class InspectedModule(ASTVisitor, Module):
1.52 @@ -867,6 +857,10 @@
1.53 self.builtins = self.importer.modules.get("__builtins__")
1.54 self.loaded = 0
1.55
1.56 + # Constant records.
1.57 +
1.58 + self.constant_values = importer.constant_values
1.59 +
1.60 # Current expression state.
1.61
1.62 self.expr = None
1.63 @@ -957,9 +951,14 @@
1.64 self.dispatch(n)
1.65 return None
1.66
1.67 - visitAdd = NOP
1.68 + def OP(self, node):
1.69 + for n in node.getChildNodes():
1.70 + self.dispatch(n)
1.71 + return Instance()
1.72
1.73 - visitAnd = NOP
1.74 + visitAdd = OP
1.75 +
1.76 + visitAnd = OP
1.77
1.78 visitAssert = NOP
1.79
1.80 @@ -989,23 +988,24 @@
1.81
1.82 visitAssTuple = visitAssList
1.83
1.84 - visitAugAssign = NOP
1.85 + visitAugAssign = OP
1.86
1.87 - visitBackquote = NOP
1.88 + visitBackquote = OP
1.89
1.90 - visitBitand = NOP
1.91 + visitBitand = OP
1.92
1.93 - visitBitor = NOP
1.94 + visitBitor = OP
1.95
1.96 - visitBitxor = NOP
1.97 + visitBitxor = OP
1.98
1.99 visitBreak = NOP
1.100
1.101 - visitCallFunc = NOP
1.102 + visitCallFunc = OP
1.103
1.104 def visitClass(self, node):
1.105 if self.namespaces:
1.106 print "Class %r in %r is not global: ignored." % (node.name, self.namespaces[-1].full_name())
1.107 + return None
1.108 else:
1.109 cls = Class(node.name, self.get_parent(), self, node)
1.110
1.111 @@ -1045,9 +1045,9 @@
1.112 self.dispatch(node.code)
1.113 self.namespaces.pop()
1.114
1.115 - return None
1.116 + return cls
1.117
1.118 - visitCompare = NOP
1.119 + visitCompare = OP
1.120
1.121 def visitConst(self, node):
1.122 const = Const(node.value)
1.123 @@ -1058,24 +1058,25 @@
1.124
1.125 visitDecorators = NOP
1.126
1.127 - visitDict = NOP
1.128 + visitDict = OP
1.129
1.130 visitDiscard = NOP
1.131
1.132 - visitDiv = NOP
1.133 + visitDiv = OP
1.134
1.135 visitEllipsis = NOP
1.136
1.137 visitExec = NOP
1.138
1.139 - visitExpression = NOP
1.140 + visitExpression = OP
1.141
1.142 - visitFloorDiv = NOP
1.143 + visitFloorDiv = OP
1.144
1.145 def visitFor(self, node):
1.146 self.in_loop = 1
1.147 self.NOP(node)
1.148 self.in_loop = 0
1.149 + return None
1.150
1.151 def visitFrom(self, node):
1.152 module = self.importer.load(node.modname, 1)
1.153 @@ -1145,9 +1146,9 @@
1.154 self.namespaces.pop()
1.155
1.156 self.store(node.name, function)
1.157 - return None
1.158 + return function
1.159
1.160 - visitGenExpr = NOP
1.161 + visitGenExpr = OP
1.162
1.163 visitGenExprFor = NOP
1.164
1.165 @@ -1196,7 +1197,7 @@
1.166
1.167 return None
1.168
1.169 - visitInvert = NOP
1.170 + visitInvert = OP
1.171
1.172 def visitKeyword(self, node):
1.173 self.dispatch(node.expr)
1.174 @@ -1205,28 +1206,32 @@
1.175 self.keyword_names.add(node.name)
1.176 return None
1.177
1.178 - visitLambda = NOP
1.179 + visitLambda = OP
1.180
1.181 - visitLeftShift = NOP
1.182 + visitLeftShift = OP
1.183
1.184 - visitList = NOP
1.185 + visitList = OP
1.186
1.187 - visitListComp = NOP
1.188 + visitListComp = OP
1.189
1.190 visitListCompFor = NOP
1.191
1.192 visitListCompIf = NOP
1.193
1.194 - visitMod = NOP
1.195 + visitMod = OP
1.196
1.197 def visitModule(self, node):
1.198 return self.dispatch(node.node)
1.199
1.200 - visitMul = NOP
1.201 + visitMul = OP
1.202
1.203 def visitName(self, node):
1.204 name = node.name
1.205 - if self.namespaces and self.namespaces[-1].has_key(name):
1.206 + if name == "None":
1.207 + const = Const(None)
1.208 + self.constant_values[None] = const
1.209 + return const
1.210 + elif self.namespaces and self.namespaces[-1].has_key(name):
1.211 return self.namespaces[-1][name]
1.212 elif self.has_key(name):
1.213 return self[name]
1.214 @@ -1235,13 +1240,13 @@
1.215 else:
1.216 return None
1.217
1.218 - visitNot = NOP
1.219 + visitNot = OP
1.220
1.221 - visitOr = NOP
1.222 + visitOr = OP
1.223
1.224 visitPass = NOP
1.225
1.226 - visitPower = NOP
1.227 + visitPower = OP
1.228
1.229 visitPrint = NOP
1.230
1.231 @@ -1251,20 +1256,20 @@
1.232
1.233 visitReturn = NOP
1.234
1.235 - visitRightShift = NOP
1.236 + visitRightShift = OP
1.237
1.238 - visitSlice = NOP
1.239 + visitSlice = OP
1.240
1.241 - visitSliceobj = NOP
1.242 + visitSliceobj = OP
1.243
1.244 def visitStmt(self, node):
1.245 for n in node.nodes:
1.246 self.dispatch(n)
1.247 return None
1.248
1.249 - visitSub = NOP
1.250 + visitSub = OP
1.251
1.252 - visitSubscript = NOP
1.253 + visitSubscript = OP
1.254
1.255 def visitTryExcept(self, node):
1.256 self.dispatch(node.body)
1.257 @@ -1276,16 +1281,17 @@
1.258
1.259 visitTryFinally = NOP
1.260
1.261 - visitTuple = NOP
1.262 + visitTuple = OP
1.263
1.264 - visitUnaryAdd = NOP
1.265 + visitUnaryAdd = OP
1.266
1.267 - visitUnarySub = NOP
1.268 + visitUnarySub = OP
1.269
1.270 def visitWhile(self, node):
1.271 self.in_loop = 1
1.272 self.NOP(node)
1.273 self.in_loop = 0
1.274 + return None
1.275
1.276 visitWith = NOP
1.277