summaryrefslogtreecommitdiffstats
path: root/adv.py
authorDamien Lespiau <damien.lespiau@gmail.com>2008-11-10 20:58:05 (GMT)
committer Damien Lespiau <damien.lespiau@gmail.com>2008-11-10 20:58:05 (GMT)
commit951a933db820afcc78b9260c5aeae0133702e582 (patch) (side-by-side diff)
treeadbb35e607765462cc15d4bcdad67ddfd6b7ace9 /adv.py
parentd298d77207012ad68c1e14aeb6efaede109bcd44 (diff)
downloadadv-master.tar.gz
adv-master.tar.bz2
Use a dictionary to dramatically speed up the symbol resolving processHEADmaster
Signed-off-by: Damien Lespiau <damien.lespiau@gmail.com>
Diffstat (limited to 'adv.py') (more/less context) (ignore whitespace changes)
-rwxr-xr-xadv.py14
1 files changed, 8 insertions, 6 deletions
diff --git a/adv.py b/adv.py
index 6c165ae..a51bf67 100755
--- a/adv.py
+++ b/adv.py
@@ -200,14 +200,16 @@ class Archive(Cluster, Node):
class Solver:
def __init__(self, archives):
self.archives = archives
-
- def solve_symbol(self, from_object, symbol):
+ self.symtab = {}
+ # construct the symbol -> object dict
for archive in self.archives:
for object in archive.objects:
- if object == from_object:
- continue
- if object.has_symbol(symbol.name):
- from_object.add_dependency(object)
+ for symbol in object.symbols:
+ self.symtab[symbol.name] = object
+
+ def solve_symbol(self, from_object, symbol):
+ if self.symtab.has_key(symbol.name):
+ from_object.add_dependency(self.symtab[symbol.name])
def solve_object(self, object):
verbose(2, "Solving %s dependencies" % object.name)