[Wisp-cvs] wisp/users/dig tran-builtins,NONE,1.1 tran.py,1.64,1.65
Status: Alpha
Brought to you by:
digg
From: <di...@us...> - 2003-04-22 16:09:51
|
Update of /cvsroot/wisp/wisp/users/dig In directory sc8-pr-cvs1:/tmp/cvs-serv16684 Modified Files: tran.py Added Files: tran-builtins Log Message: extracted tran-builtins from tran.py --- NEW FILE: tran-builtins --- #### tran-builtins - see tran.py for details # # Copyleft © 2003 by Andres Soolo (di...@us...) # This file is licensed under the GNU GPL v2. If you # don't know what that means, please do read the GPL. # #### @(#) $Id: tran-builtins,v 1.1 2003/04/22 16:09:46 digg Exp $ $-t, sym cursect.emit_tetra_sum([str(Regstack.pop())], relative = 1) + int int n = Regstack.pop(); m = Regstack.pop() Regstack.append(m + n) .bss cursect = Bss .data cursect = Data .text cursect = Text // Regstack = [] :macro|name if len(Regstack) > 2: raise 'too long argument pattern', Regstack name = ' '.join([name] + [matchers(i).next() for i in Regstack]) Regstack = [] if Meaning.has_key(name): raise 'duplicate declaration', name current_recordee = Meaning[name] = [] def record_state (tok): global current_recordee, State if tok == Semicolon: State = outer_state current_recordee = None else: current_recordee.append(tok) State = record_state :regs|family if Meaning.has_key(family): raise 'duplicate declaration', tok Register(current_register_family) f = Register(current_register_family) Meaning[family] = f Registers[f] = family current_register_index = 0 def regs_state (tok): global State, current_register_family, current_register_index if tok != Semicolon: if Meaning.has_key(tok): raise 'duplicate declaration', tok r = Register(current_register_family, current_register_index) Meaning[tok] = r Registers[r] = tok current_register_index += 1 else: State = outer_state current_register_family += 1 current_register_index = None State = regs_state align int cursect.align(long(Regstack.pop())) b, int cursect.emit_byte(long(Regstack.pop()) % 0x100) b, sym cursect.emit_byte_sum([str(Regstack.pop())]) drop any Regstack.pop() dup any Regstack.append(Regstack[-1]) label|name cursect.place_symbol('&' + name) minor reg Regstack.append(Integer_Literal(Regstack.pop()[-1])) include|name prep.push_file(str(name) + '.tran') ref|name Regstack.append(Symbol_Literal('&' + name)) reserve int cursect.skip(Regstack.pop()) swap any any y = Regstack.pop(); x = Regstack.pop() Regstack.append(y); Regstack.append(x) t, int cursect.emit_tetra(long(Regstack.pop()) % 0x100000000L) t, sym cursect.emit_tetra_sum([str(Regstack.pop())]) w, int cursect.emit_wyde(long(Regstack.pop()) % 0x10000L) w, sym cursect.emit_wyde_sum([str(Regstack.pop())]) # vim: ft=python Index: tran.py =================================================================== RCS file: /cvsroot/wisp/wisp/users/dig/tran.py,v retrieving revision 1.64 retrieving revision 1.65 diff -u -d -r1.64 -r1.65 --- tran.py 22 Apr 2003 16:03:02 -0000 1.64 +++ tran.py 22 Apr 2003 16:09:46 -0000 1.65 @@ -212,112 +212,12 @@ for m in 'any const int lit sum sym'.split(' '): Meaning[m] = Class_Marker(m) -BUILTINS = ''' - -$-t, sym - cursect.emit_tetra_sum([str(Regstack.pop())], relative = 1) - -+ int int - n = Regstack.pop(); m = Regstack.pop() - Regstack.append(m + n) - -.bss - cursect = Bss - -.data - cursect = Data - -.text - cursect = Text - -// - Regstack = [] - -:macro|name - if len(Regstack) > 2: raise 'too long argument pattern', Regstack - name = ' '.join([name] + [matchers(i).next() for i in Regstack]) - Regstack = [] - if Meaning.has_key(name): raise 'duplicate declaration', name - current_recordee = Meaning[name] = [] - def record_state (tok): - global current_recordee, State - if tok == Semicolon: - State = outer_state - current_recordee = None - else: - current_recordee.append(tok) - State = record_state - -:regs|family - if Meaning.has_key(family): raise 'duplicate declaration', tok - Register(current_register_family) - f = Register(current_register_family) - Meaning[family] = f - Registers[f] = family - current_register_index = 0 - def regs_state (tok): - global State, current_register_family, current_register_index - if tok != Semicolon: - if Meaning.has_key(tok): raise 'duplicate declaration', tok - r = Register(current_register_family, current_register_index) - Meaning[tok] = r - Registers[r] = tok - current_register_index += 1 - else: - State = outer_state - current_register_family += 1 - current_register_index = None - State = regs_state - -align int - cursect.align(long(Regstack.pop())) - -b, int - cursect.emit_byte(long(Regstack.pop()) % 0x100) - -b, sym - cursect.emit_byte_sum([str(Regstack.pop())]) - -drop any - Regstack.pop() - -dup any - Regstack.append(Regstack[-1]) - -label|name - cursect.place_symbol('&' + name) - -minor reg - Regstack.append(Integer_Literal(Regstack.pop()[-1])) - -include|name - prep.push_file(str(name) + '.tran') - -ref|name - Regstack.append(Symbol_Literal('&' + name)) - -reserve int - cursect.skip(Regstack.pop()) - -swap any any - y = Regstack.pop(); x = Regstack.pop() - Regstack.append(y); Regstack.append(x) - -t, int - cursect.emit_tetra(long(Regstack.pop()) % 0x100000000L) - -t, sym - cursect.emit_tetra_sum([str(Regstack.pop())]) - -w, int - cursect.emit_wyde(long(Regstack.pop()) % 0x10000L) - -w, sym - cursect.emit_wyde_sum([str(Regstack.pop())]) -''' +bf = open('tran-builtins', 'r') +builtins = bf.read() +bf.close() -for b in BUILTINS.split('\n\n'): - if b: +for b in builtins.split('\n\n'): + if b[0] != '#': name, code = b.split('\n', 1) np = (name + '|').split('|') name = np[0] |