[Wisp-cvs] wisp/users/dig tran.py,1.29,1.30
Status: Alpha
Brought to you by:
digg
From: <di...@us...> - 2003-04-17 12:33:41
|
Update of /cvsroot/wisp/wisp/users/dig In directory sc8-pr-cvs1:/tmp/cvs-serv15640 Modified Files: tran.py Log Message: better literal arithmetics Index: tran.py =================================================================== RCS file: /cvsroot/wisp/wisp/users/dig/tran.py,v retrieving revision 1.29 retrieving revision 1.30 diff -u -d -r1.29 -r1.30 --- tran.py 17 Apr 2003 12:17:14 -0000 1.29 +++ tran.py 17 Apr 2003 12:33:36 -0000 1.30 @@ -59,11 +59,15 @@ class Constant_Sum (Stackable): def __init__ (this, plus = (), minus = (), scalar = 0L): - if isinstance(plus, Symbol_Literal) or plus == Dollar or \ - isinstance(plus, Integer_Literal): plus = plus, - if isinstance(minus, Symbol_Literal) or minus == Dollar or \ - isinstance(minus, Integer_Literal): minus = minus, this.scalar = long(scalar) + if isinstance(plus, Symbol_Literal) or plus == Dollar: + plus = plus, + if isinstance(minus, Symbol_Literal) or minus == Dollar: + minus = minus, + if isinstance(plus, Integer_Literal): + this.scalar += long(plus); plus = () + if isinstance(minus, Integer_Literal): + this.scalar -= long(minus); minus = () this.plus = []; this.minus = [] for item in plus: if isinstance(item, Symbol_Literal) or item == Dollar: @@ -263,8 +267,12 @@ current_register_index = 0 State = state_regs def plus (a, b): + if not isinstance(a, Constant_Sum): a = Constant_Sum(a) + if not isinstance(b, Constant_Sum): b = Constant_Sum(b) Regstack.append(a + b) def minus (a, b): + if not isinstance(a, Constant_Sum): a = Constant_Sum(a) + if not isinstance(b, Constant_Sum): b = Constant_Sum(b) Regstack.append(a - b) def matchers (object): @@ -281,6 +289,9 @@ elif isinstance(object, Constant_Sum): yield 'sum' yield 'const' + elif object == Dollar: + yield '$' + yield 'const' elif isinstance(object, Register): while object <> None: yield Registers[object] @@ -377,33 +388,33 @@ MA_ARGC = 007 MA_PREFIX = 010 Meaning = { - '$': ('simple', Dollar), - '+ int int': ('builtin', plus, 2), - '- int int': ('builtin', minus, 2), - '.bss': ('builtin', dot_bss, 0), - '.data': ('builtin', dot_data, 0), - '.text': ('builtin', dot_text, 0), - ':macro': ('builtin', colon_macro, 0 | MA_PREFIX), - ':regs': ('builtin', colon_regs, 0 | MA_PREFIX), - 'align int': ('builtin', align, 1), - 'any': ('simple', Class_Marker('any')), - 'b, lit': ('builtin', b_comma, 1), - 'const': ('simple', Class_Marker('const')), - 'drop any': ('builtin', drop, 1), - 'dup any': ('builtin', dup, 1), - 'include': ('include',), - 'int': ('simple', Class_Marker('int')), - 'label': ('builtin', label, 0 | MA_PREFIX), - 'lit': ('simple', Class_Marker('lit')), - 'minor reg': ('builtin', minor, 1), - 'ref': ('builtin', ref, 0 | MA_PREFIX), - 'reg': ('simple', Generic_Register), - 'reserve int': ('builtin', reserve, 1), - 'sum': ('simple', Class_Marker('sum')), - 'swap any any': ('builtin', swap, 2), - 'sym': ('simple', Class_Marker('sym')), - 't, lit': ('builtin', t_comma, 1), - 'w, lit': ('builtin', w_comma, 1), + '$': ('simple', Dollar), + '+ const const': ('builtin', plus, 2), + '- const const': ('builtin', minus, 2), + '.bss': ('builtin', dot_bss, 0), + '.data': ('builtin', dot_data, 0), + '.text': ('builtin', dot_text, 0), + ':macro': ('builtin', colon_macro, 0 | MA_PREFIX), + ':regs': ('builtin', colon_regs, 0 | MA_PREFIX), + 'align int': ('builtin', align, 1), + 'any': ('simple', Class_Marker('any')), + 'b, lit': ('builtin', b_comma, 1), + 'const': ('simple', Class_Marker('const')), + 'drop any': ('builtin', drop, 1), + 'dup any': ('builtin', dup, 1), + 'include': ('include',), + 'int': ('simple', Class_Marker('int')), + 'label': ('builtin', label, 0 | MA_PREFIX), + 'lit': ('simple', Class_Marker('lit')), + 'minor reg': ('builtin', minor, 1), + 'ref': ('builtin', ref, 0 | MA_PREFIX), + 'reg': ('simple', Generic_Register), + 'reserve int': ('builtin', reserve, 1), + 'sum': ('simple', Class_Marker('sum')), + 'swap any any': ('builtin', swap, 2), + 'sym': ('simple', Class_Marker('sym')), + 't, lit': ('builtin', t_comma, 1), + 'w, lit': ('builtin', w_comma, 1), } current_recordee = None current_register_family = 0 |