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:
|