Add globals to list of names returned by get_names().
Fix func arg processing to handle args in tuples. In test code, skip names beginning with '.'.
This commit is contained in:
parent
461922a005
commit
dbdb28e8be
|
@ -61,6 +61,7 @@ class Scope:
|
||||||
d = {}
|
d = {}
|
||||||
d.update(self.defs)
|
d.update(self.defs)
|
||||||
d.update(self.uses)
|
d.update(self.uses)
|
||||||
|
d.update(self.globals)
|
||||||
return d.keys()
|
return d.keys()
|
||||||
|
|
||||||
def add_child(self, child):
|
def add_child(self, child):
|
||||||
|
@ -111,8 +112,7 @@ class SymbolVisitor:
|
||||||
self.visit(n, parent)
|
self.visit(n, parent)
|
||||||
scope = FunctionScope(node.name, self.module, self.klass)
|
scope = FunctionScope(node.name, self.module, self.klass)
|
||||||
self.scopes[node] = scope
|
self.scopes[node] = scope
|
||||||
for name in node.argnames:
|
self._do_args(scope, node.argnames)
|
||||||
scope.add_param(name)
|
|
||||||
self.visit(node.code, scope)
|
self.visit(node.code, scope)
|
||||||
|
|
||||||
def visitLambda(self, node, parent):
|
def visitLambda(self, node, parent):
|
||||||
|
@ -120,10 +120,16 @@ class SymbolVisitor:
|
||||||
self.visit(n, parent)
|
self.visit(n, parent)
|
||||||
scope = LambdaScope(self.module, self.klass)
|
scope = LambdaScope(self.module, self.klass)
|
||||||
self.scopes[node] = scope
|
self.scopes[node] = scope
|
||||||
for name in node.argnames:
|
self._do_args(scope, node.argnames)
|
||||||
scope.add_param(name)
|
|
||||||
self.visit(node.code, scope)
|
self.visit(node.code, scope)
|
||||||
|
|
||||||
|
def _do_args(self, scope, args):
|
||||||
|
for name in args:
|
||||||
|
if type(name) == types.TupleType:
|
||||||
|
self._do_args(scope, name)
|
||||||
|
else:
|
||||||
|
scope.add_param(name)
|
||||||
|
|
||||||
def visitClass(self, node, parent):
|
def visitClass(self, node, parent):
|
||||||
parent.add_def(node.name)
|
parent.add_def(node.name)
|
||||||
for n in node.bases:
|
for n in node.bases:
|
||||||
|
@ -217,7 +223,7 @@ if __name__ == "__main__":
|
||||||
|
|
||||||
def get_names(syms):
|
def get_names(syms):
|
||||||
return [s for s in [s.get_name() for s in syms.get_symbols()]
|
return [s for s in [s.get_name() for s in syms.get_symbols()]
|
||||||
if not s.startswith('_[')]
|
if not (s.startswith('_[') or s.startswith('.'))]
|
||||||
|
|
||||||
for file in sys.argv[1:]:
|
for file in sys.argv[1:]:
|
||||||
print file
|
print file
|
||||||
|
@ -256,6 +262,6 @@ if __name__ == "__main__":
|
||||||
if not list_eq(get_names(s.get_namespace()),
|
if not list_eq(get_names(s.get_namespace()),
|
||||||
l[0].get_names()):
|
l[0].get_names()):
|
||||||
print s.get_name()
|
print s.get_name()
|
||||||
print get_names(s.get_namespace())
|
print sort(get_names(s.get_namespace()))
|
||||||
print l[0].get_names()
|
print sort(l[0].get_names())
|
||||||
sys.exit(-1)
|
sys.exit(-1)
|
||||||
|
|
|
@ -61,6 +61,7 @@ class Scope:
|
||||||
d = {}
|
d = {}
|
||||||
d.update(self.defs)
|
d.update(self.defs)
|
||||||
d.update(self.uses)
|
d.update(self.uses)
|
||||||
|
d.update(self.globals)
|
||||||
return d.keys()
|
return d.keys()
|
||||||
|
|
||||||
def add_child(self, child):
|
def add_child(self, child):
|
||||||
|
@ -111,8 +112,7 @@ class SymbolVisitor:
|
||||||
self.visit(n, parent)
|
self.visit(n, parent)
|
||||||
scope = FunctionScope(node.name, self.module, self.klass)
|
scope = FunctionScope(node.name, self.module, self.klass)
|
||||||
self.scopes[node] = scope
|
self.scopes[node] = scope
|
||||||
for name in node.argnames:
|
self._do_args(scope, node.argnames)
|
||||||
scope.add_param(name)
|
|
||||||
self.visit(node.code, scope)
|
self.visit(node.code, scope)
|
||||||
|
|
||||||
def visitLambda(self, node, parent):
|
def visitLambda(self, node, parent):
|
||||||
|
@ -120,10 +120,16 @@ class SymbolVisitor:
|
||||||
self.visit(n, parent)
|
self.visit(n, parent)
|
||||||
scope = LambdaScope(self.module, self.klass)
|
scope = LambdaScope(self.module, self.klass)
|
||||||
self.scopes[node] = scope
|
self.scopes[node] = scope
|
||||||
for name in node.argnames:
|
self._do_args(scope, node.argnames)
|
||||||
scope.add_param(name)
|
|
||||||
self.visit(node.code, scope)
|
self.visit(node.code, scope)
|
||||||
|
|
||||||
|
def _do_args(self, scope, args):
|
||||||
|
for name in args:
|
||||||
|
if type(name) == types.TupleType:
|
||||||
|
self._do_args(scope, name)
|
||||||
|
else:
|
||||||
|
scope.add_param(name)
|
||||||
|
|
||||||
def visitClass(self, node, parent):
|
def visitClass(self, node, parent):
|
||||||
parent.add_def(node.name)
|
parent.add_def(node.name)
|
||||||
for n in node.bases:
|
for n in node.bases:
|
||||||
|
@ -217,7 +223,7 @@ if __name__ == "__main__":
|
||||||
|
|
||||||
def get_names(syms):
|
def get_names(syms):
|
||||||
return [s for s in [s.get_name() for s in syms.get_symbols()]
|
return [s for s in [s.get_name() for s in syms.get_symbols()]
|
||||||
if not s.startswith('_[')]
|
if not (s.startswith('_[') or s.startswith('.'))]
|
||||||
|
|
||||||
for file in sys.argv[1:]:
|
for file in sys.argv[1:]:
|
||||||
print file
|
print file
|
||||||
|
@ -256,6 +262,6 @@ if __name__ == "__main__":
|
||||||
if not list_eq(get_names(s.get_namespace()),
|
if not list_eq(get_names(s.get_namespace()),
|
||||||
l[0].get_names()):
|
l[0].get_names()):
|
||||||
print s.get_name()
|
print s.get_name()
|
||||||
print get_names(s.get_namespace())
|
print sort(get_names(s.get_namespace()))
|
||||||
print l[0].get_names()
|
print sort(l[0].get_names())
|
||||||
sys.exit(-1)
|
sys.exit(-1)
|
||||||
|
|
Loading…
Reference in New Issue