[Wisp-cvs] wisp/users/dig tran.py,1.101,1.102
Status: Alpha
Brought to you by:
digg
From: <di...@us...> - 2003-05-17 13:33:52
|
Update of /cvsroot/wisp/wisp/users/dig In directory sc8-pr-cvs1:/tmp/cvs-serv26651 Modified Files: tran.py Log Message: split interpret into interpret_single and interpret_multi Index: tran.py =================================================================== RCS file: /cvsroot/wisp/wisp/users/dig/tran.py,v retrieving revision 1.101 retrieving revision 1.102 diff -u -d -r1.101 -r1.102 --- tran.py 17 May 2003 13:26:32 -0000 1.101 +++ tran.py 17 May 2003 13:33:49 -0000 1.102 @@ -307,34 +307,36 @@ tok = this.toksrc.get_token() this.toksrc = None -def interpret (toksrc, target, include = [], verbose = 0): +def interpret_single (toksrc, target, include = [], verbose = 0): if isinstance(toksrc, list): toksrc = Macro_Cursor(toksrc) if isinstance(toksrc, str): toksrc = Lexer(toksrc) - if isinstance(target, str): target = target.split() + if isinstance(target, str): target = Linkie(target) # byte order + elif isinstance(target, Linkie): pass + else: raise 'neither a linkie nor a byte order specifier', target - if isinstance(target, Linkie): - interp = Interpreter(target) - for i in include: interp.run(i) - interp.run(toksrc, verbose = verbose) - if interp.regstack: - raise 'regstack not empty after finishing interpretation', \ - interp.regstack - return target - elif isinstance(target, list): - byte_order = target[0] - sections = target[1:] - if sections: - interp = Interpreter(byte_order = byte_order, output = sections) - for i in include: interp.run(i) - interp.run(toksrc, verbose = verbose) - if interp.regstack: - raise 'regstack not empty after finishing interpretation', \ - interp.regstack - return map((lambda n: interp.sections[n]), target[1:]) - else: - return interpret(toksrc, Linkie(byte_order), - include = include, verbose = verbose) + interp = Interpreter(target) + for i in include: interp.run(i + '.tran') + interp.run(toksrc, verbose = verbose) + if interp.regstack: + raise 'regstack not empty after finishing interpretation', \ + interp.regstack + return target + +def interpret_multi (toksrc, target, include = [], verbose = 0): + if isinstance(toksrc, list): toksrc = Macro_Cursor(toksrc) + if isinstance(toksrc, str): toksrc = Lexer(toksrc) + + if isinstance(target, str): target = target.split() + byte_order = target[0] + sections = target[1:] + interp = Interpreter(byte_order = byte_order, output = sections) + for i in include: interp.run(i + '.tran') + interp.run(toksrc, verbose = verbose) + if interp.regstack: + raise 'regstack not empty after finishing interpretation', \ + interp.regstack + return map((lambda n: interp.sections[n]), target[1:]) def main (): from getopt import getopt @@ -343,8 +345,6 @@ import string import sys - interpreter = Interpreter('<', ['.text', '.data', '.bss']) - default_output_names = {'elf': 'a.out', 'pe': 'untitled.exe'} verbose = 0 format = 'elf' @@ -360,8 +360,8 @@ if output_name == None: output_name = default_output_names[format] if len(args) != 1: raise 'Invalid argument count -- must be 1', args - text, data, bss = interpret(Lexer(args[0]), '< .text .data .bss', - verbose = verbose) + text, data, bss = interpret_multi(Lexer(args[0]), '< .text .data .bss', + verbose = verbose) text.dump(title = 'TEXT') data.dump(title = 'DATA') bss.dump(title = 'BSS') |