[Wisp-cvs] wisp/users/dig tran.py,1.21,1.22
Status: Alpha
Brought to you by:
digg
From: <di...@us...> - 2003-04-16 20:49:56
|
Update of /cvsroot/wisp/wisp/users/dig In directory sc8-pr-cvs1:/tmp/cvs-serv24538 Modified Files: tran.py Log Message: added the Symbol_Literal class Index: tran.py =================================================================== RCS file: /cvsroot/wisp/wisp/users/dig/tran.py,v retrieving revision 1.21 retrieving revision 1.22 diff -u -d -r1.21 -r1.22 --- tran.py 16 Apr 2003 20:22:22 -0000 1.21 +++ tran.py 16 Apr 2003 20:49:51 -0000 1.22 @@ -13,7 +13,6 @@ from getopt import getopt from linkie import Linkie from shlex import shlex -from types import * import elf import string import sys @@ -31,6 +30,11 @@ return Integer_Literal(long(this) - long(that)) def __repr__ (this): return 'Integer_Literal(%i)' % long(this) +class Symbol_Literal (str, Stackable): + def __new__ (cls, s): + return str.__new__(cls, s) + def __repr__ (this): + return 'Symbol_Literal(%r)' % str(this) class Unique: def __init__ (this, name): @@ -142,15 +146,15 @@ def b_comma (n): if isinstance(n, Integer_Literal): cursect.emit_byte(long(n) % 0x100) - elif type(n) == StringType: cursect.emit_byte_sum([n]) + elif isinstance(n, Symbol_Literal): cursect.emit_byte_sum([str(n)]) else: raise 'Literal expected', n def w_comma (n): if isinstance(n, Integer_Literal): cursect.emit_wyde(long(n) % 0x10000) - elif type(n) == StringType: cursect.emit_wyde_sum([n]) + elif isinstance(n, Symbol_Literal): cursect.emit_wyde_sum([str(n)]) else: raise 'Literal expected', n def t_comma (n): if isinstance(n, Integer_Literal): cursect.emit_tetra(long(n) % 0x100000000L) - elif type(n) == StringType: cursect.emit_tetra_sum([n]) + elif isinstance(n, Symbol_Literal): cursect.emit_tetra_sum([str(n)]) else: raise 'Literal expected', n def label (name): cursect.place_symbol('&' + name) @@ -164,7 +168,7 @@ global cursect cursect = Text def ref (name): - Regstack.append('&' + name) + Regstack.append(Symbol_Literal('&' + name)) def drop (x): pass def align (n): cursect.align(n) def reserve (n): cursect.skip(n) @@ -204,7 +208,7 @@ elif isinstance(object, Integer_Literal): yield 'int' yield 'lit' - elif type(object) == StringType: + elif isinstance(object, Symbol_Literal): yield 'sym' yield 'lit' elif isinstance(object, Register): @@ -236,9 +240,9 @@ global Regstack if isinstance(tok, Integer_Literal): Regstack.append(tok) - elif type(tok) == StringType and tok[:2] == '#/' and len(tok) == 3: + elif isinstance(tok, str) and tok[:2] == '#/' and len(tok) == 3: Regstack.append(Integer_Literal(ord(tok[2]))) - else: + elif isinstance(tok, str): root = tok mg = match_generator(root) try: @@ -259,7 +263,7 @@ arg = [] if m[2] & MA_PREFIX: tok = prep.get_token() - if type(tok) <> StringType: raise 'word expected' + if not isinstance(tok, str): raise 'word expected', tok arg.append(tok) apply(m[1], arg) elif mtype == 'macro': @@ -270,6 +274,7 @@ fn = prep.get_token() + '.tran' prep.push_file(fn) else: raise 'Unknown meaning type in', `Meaning[tok]` + else: raise 'bad token', tok def state_record (tok): global State, current_recordee if tok == Semicolon: |