starting dependencies work

This commit is contained in:
Bryan Bishop 2012-04-20 18:26:52 -05:00
parent a8da5fbda9
commit c80279b98f

View File

@ -1208,6 +1208,9 @@ class MultiByteParam():
else: else:
self.parsed_address = calculate_pointer_from_bytes_at(self.address, bank=None) self.parsed_address = calculate_pointer_from_bytes_at(self.address, bank=None)
def get_dependencies(self):
return []
#you won't actually use this to_asm because it's too generic #you won't actually use this to_asm because it's too generic
#def to_asm(self): return ", ".join([(self.prefix+"%.2x")%x for x in self.bytes]) #def to_asm(self): return ", ".join([(self.prefix+"%.2x")%x for x in self.bytes])
def to_asm(self): def to_asm(self):
@ -1243,6 +1246,11 @@ class PointerLabelParam(MultiByteParam):
self.parsed_address = calculate_pointer_from_bytes_at(self.address, bank=self.bank) self.parsed_address = calculate_pointer_from_bytes_at(self.address, bank=self.bank)
MultiByteParam.parse(self) MultiByteParam.parse(self)
def get_dependencies(self):
dependencies = [script_parse_table[self.parsed_address]]
dependencies.append(script_parse_table[self.parsed_address].get_dependencies())
return dependencies
def to_asm(self): def to_asm(self):
bank = self.bank bank = self.bank
#we pass bank= for whether or not to include a bank byte when reading #we pass bank= for whether or not to include a bank byte when reading
@ -1482,6 +1490,14 @@ class Command:
#start parsing this command's parameter bytes #start parsing this command's parameter bytes
self.parse() self.parse()
def get_dependencies(self):
dependencies = []
for (key, param) in self.params.items():
if hasattr("get_dependencies", param):
deps = param.get_dependencies()
dependencies.extend(deps)
return dependencies
def to_asm(self): def to_asm(self):
#start with the rgbasm macro name for this command #start with the rgbasm macro name for this command
output = self.macro_name output = self.macro_name
@ -1942,6 +1958,13 @@ class Script():
self.commands = commands self.commands = commands
return commands return commands
def get_dependencies(self):
dependencies = []
for command in self.commands:
deps = command.get_dependencies()
dependencies.extend(deps)
return dependencies
def to_asm(self): def to_asm(self):
asm_output = "".join([command.to_asm()+"\n" for command in self.commands]) asm_output = "".join([command.to_asm()+"\n" for command in self.commands])
return asm_output return asm_output
@ -2438,6 +2461,13 @@ class SignpostRemoteBase:
else: self.label = label else: self.label = label
self.parse() self.parse()
def get_dependencies(self):
dependencies = []
for p in self.params:
deps = p.get_dependencies()
dependencies.extend(deps)
return dependencies
def to_asm(self): def to_asm(self):
"""very similar to Command.to_asm""" """very similar to Command.to_asm"""
if len(self.params) == 0: return "" if len(self.params) == 0: return ""
@ -2662,6 +2692,13 @@ class Signpost:
self.params.append(mb) self.params.append(mb)
else: else:
raise Exception, "unknown signpost type byte="+hex(func) + " signpost@"+hex(self.address) raise Exception, "unknown signpost type byte="+hex(func) + " signpost@"+hex(self.address)
def get_dependencies(self):
dependencies = []
for p in self.params:
dependencies.extend(p.get_dependencies())
return dependencies
def to_asm(self): def to_asm(self):
output = self.macro_name + " " output = self.macro_name + " "
if self.params == []: raise Exception, "signpost has no params?" if self.params == []: raise Exception, "signpost has no params?"
@ -2775,6 +2812,11 @@ class MapHeader:
self.music = HexByte(address=address+6) self.music = HexByte(address=address+6)
self.time_of_day = DecimalParam(address=address+7) self.time_of_day = DecimalParam(address=address+7)
self.fishing_group = DecimalParam(address=address+8) self.fishing_group = DecimalParam(address=address+8)
def get_dependencies(self):
dependencies = [self.second_map_header]
dependencies.append(self.second_map_header.get_dependencies())
return dependencies
def to_asm(self): def to_asm(self):
output = "; bank, tileset, permission\n" output = "; bank, tileset, permission\n"
@ -2902,6 +2944,12 @@ class SecondMapHeader:
#self.connections = connections #self.connections = connections
return True return True
def get_dependencies(self):
dependencies = [self.script_header, self.event_header, self.blockdata]
dependencies.append(self.script_header.get_dependencies())
dependencies.append(self.event_header.get_dependencies())
return dependencies
def to_asm(self): def to_asm(self):
output = "; border block\n" output = "; border block\n"
@ -3070,6 +3118,12 @@ class MapEventHeader:
else: else:
self.last_address = after_signposts+1 self.last_address = after_signposts+1
return True return True
def get_dependencies(self):
dependencies = self.people_events + self.signposts + self.xy_triggers + self.warps
for p in list(dependencies):
dependencies.extend(p.get_dependencies())
return dependencies
def to_asm(self): def to_asm(self):
xspacing = "" #was =spacing xspacing = "" #was =spacing
@ -3245,6 +3299,14 @@ class MapScriptHeader:
self.last_address = current_address self.last_address = current_address
print "done parsing a MapScriptHeader map_group="+str(map_group)+" map_id="+str(map_id) print "done parsing a MapScriptHeader map_group="+str(map_group)+" map_id="+str(map_id)
return True return True
def get_dependencies(self):
dependencies = self.triggers
for p in list(dependencies):
dependencies.extend(p.get_dependencies())
for callback in self.callbacks:
dependencies.extend(callback["callback"].get_dependencies())
return dependencies
def to_asm(self): def to_asm(self):
output = "" output = ""
@ -4050,6 +4112,19 @@ def to_asm(some_object):
asm += "\n; " + hex(last_address) asm += "\n; " + hex(last_address)
return asm return asm
def get_dependencies_for(some_object):
"""
calculates which labels need to be satisfied for an object
to be inserted into the asm and compile successfully.
You could also choose to not insert labels into the asm, but
then you're losing out on the main value of having asm in the
first place.
"""
if isinstance(some_object, int):
some_object = script_parse_table[some_object]
return some_object.get_dependencies()
def isolate_incbins(): def isolate_incbins():
"find each incbin line" "find each incbin line"
global incbin_lines, asm global incbin_lines, asm