summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorBryan Bishop <kanzure@gmail.com>2012-04-22 15:48:47 -0500
committerBryan Bishop <kanzure@gmail.com>2012-04-22 15:48:47 -0500
commitbd721559efc5e3a1cf96456aefd253bd71d5827d (patch)
tree6e1af75c90a4fabb7000c026db4fba8bf8c881c2
parent3270d8a5f90394eac04dffaadd14a23b5ad951c9 (diff)
attempts to stop a recursion limit error
original-commit-id: 1021728fb340554317be5dfd1fd1c17f33fe3289
-rw-r--r--crystal.py18
1 files changed, 13 insertions, 5 deletions
diff --git a/crystal.py b/crystal.py
index 4c2cb41..81e996f 100644
--- a/crystal.py
+++ b/crystal.py
@@ -1263,8 +1263,10 @@ class PointerLabelParam(MultiByteParam):
def get_dependencies(self):
dependencies = []
+ if self.parsed_address == self.address:
+ return dependencies
thing = script_parse_table[self.parsed_address]
- if thing and thing.address == self.parsed_address:
+ if thing and thing.address == self.parsed_address and not (thing is self):
if self.debug:
print "parsed address is: " + hex(self.parsed_address) + " with label: " + thing.label + " of type: " + str(thing.__class__)
dependencies.append(thing)
@@ -1516,9 +1518,9 @@ class Command:
def get_dependencies(self):
dependencies = []
for (key, param) in self.params.items():
- if hasattr(param, "get_dependencies"):
+ if hasattr(param, "get_dependencies") and param != self:
deps = param.get_dependencies()
- if deps != None:
+ if deps != None and not self in deps:
dependencies.extend(deps)
return dependencies
@@ -4632,9 +4634,15 @@ class Asm:
if not found:
raise Exception, "unable to insert object into Asm"
return True
- def insert_single_with_dependencies(self, object):
- objects = get_dependencies_for(object) + [object]
+ def insert_single_with_dependencies(self, object0):
+ objects = get_dependencies_for(object0) + [object0]
+ objects = list(set(objects))
for object in objects:
+ if object in self.parts:
+ if self.debug:
+ print "already inserted -- object.__class__="+str(object.__class__)+" object is: "+str(object)+\
+ " for object.__class__="+str(object0.__class__)+" object="+str(object0)
+ continue
if self.debug:
print "object.__class__="+str(object.__class__) + " object is: " + str(object)
self.insert(object)