[Wisp-cvs] wisp/users/dig tran-builtins,1.19,1.20 tran.py,1.91,1.92
Status: Alpha
Brought to you by:
digg
|
From: <di...@us...> - 2003-05-17 10:54:49
|
Update of /cvsroot/wisp/wisp/users/dig
In directory sc8-pr-cvs1:/tmp/cvs-serv9695
Modified Files:
tran-builtins tran.py
Log Message:
replaced Meaning by interpreter.meaning
Index: tran-builtins
===================================================================
RCS file: /cvsroot/wisp/wisp/users/dig/tran-builtins,v
retrieving revision 1.19
retrieving revision 1.20
diff -u -d -r1.19 -r1.20
--- tran-builtins 17 May 2003 10:43:54 -0000 1.19
+++ tran-builtins 17 May 2003 10:54:46 -0000 1.20
@@ -77,8 +77,8 @@
raise 'too long argument pattern', interpreter.regstack
name = ' '.join([name] + [matchers(i).next() for i in interpreter.regstack])
interpreter.regstack = []
- if Meaning.has_key(name): raise 'duplicate declaration', name
- interpreter.recordee = Meaning[name] = []
+ if interpreter.meaning.has_key(name): raise 'duplicate declaration', name
+ interpreter.recordee = interpreter.meaning[name] = []
def record_state (tok):
if tok == Semicolon:
interpreter.state = interpreter.outer_state
@@ -89,8 +89,8 @@
:regs|family
def regs_state0 (family):
- if Meaning.has_key(family):
- f = Meaning[family]
+ if interpreter.meaning.has_key(family):
+ f = interpreter.meaning[family]
if not isinstance(f, Register):
raise 'unable to declare subregisters for', f
if not interpreter.hanging.has_key(f):
@@ -103,7 +103,7 @@
f = interpreter.regpaths[-1]
interpreter.regpaths[-1] = f.next()
interpreter.regpaths.append(f.child())
- Meaning[family] = f
+ interpreter.meaning[family] = f
Registers[f] = family
interpreter.state = regs_state
def regs_state (tok):
@@ -115,15 +115,15 @@
r = interpreter.regpaths[-1]
if interpreter.hanging.has_key(r.parent()):
raise 'misplaced ellipsis'
- elif Meaning.has_key(tok):
- if Meaning[tok] == Meaning[':regs']:
+ elif interpreter.meaning.has_key(tok):
+ if interpreter.meaning[tok] == interpreter.meaning[':regs']:
interpreter.state = regs_state0
- elif Meaning[tok] == Meaning['...']:
+ elif interpreter.meaning[tok] == interpreter.meaning['...']:
interpreter.hanging[r.parent()] = r[-1]
else: raise 'duplicate declaration', tok
else:
interpreter.regpaths[-1] = r.next()
- Meaning[tok] = r
+ interpreter.meaning[tok] = r
Registers[r] = tok
regs_state0(family)
Index: tran.py
===================================================================
RCS file: /cvsroot/wisp/wisp/users/dig/tran.py,v
retrieving revision 1.91
retrieving revision 1.92
diff -u -d -r1.91 -r1.92
--- tran.py 17 May 2003 10:43:54 -0000 1.91
+++ tran.py 17 May 2003 10:54:46 -0000 1.92
@@ -219,33 +219,35 @@
Generic_Register = Register()
-MA_PREFIX = 1
-Meaning = {'reg': Generic_Register,
- '...': Unique('...'),
- 'tetras': ['dup', '+', 'dup', '+'], # FIXME
-}
-for m in 'any const int lit sum sym'.split(' '):
- Meaning[m] = Class_Marker(m)
+class Interpreter (object):
+ __slots__ = 'text data bss current recordee regpaths hanging regstack state meaning'.split()
-bf = open('tran-builtins', 'r')
-builtins = bf.read()
-bf.close()
+ universal_meaning = {
+ 'reg': Generic_Register,
+ '...': Unique('...'),
+ 'tetras': ['dup', '+', 'dup', '+'], # FIXME
+ }
+ for m in 'any const int lit sum sym'.split(' '):
+ universal_meaning[m] = Class_Marker(m)
-for b in builtins.split('\n\n'):
- if b[0] != '#':
- name, code = b.split('\n', 1)
- np = (name + '|').split('|')
- name = np[0]
- pa = np[1]
- exec 'def _p (%s):\n%s\n' % (pa, code)
- flags = 0
- if pa: flags |= MA_PREFIX
- Meaning[name] = 'builtin', _p, flags
+ # load builtins
+ _bf = open('tran-builtins', 'r')
+ _builtins = _bf.read()
+ _bf.close()
-Registers = {Generic_Register: 'reg'} # for reverse translation
+ MA_PREFIX = 1
+
+ for _b in _builtins.split('\n\n'):
+ if _b[0] != '#':
+ _name, _code = _b.split('\n', 1)
+ _np = (_name + '|').split('|')
+ _name = _np[0]
+ _pa = _np[1]
+ exec 'def _p (%s):\n%s\n' % (_pa, _code)
+ _flags = 0
+ if _pa: _flags |= MA_PREFIX
+ universal_meaning[_name] = 'builtin', _p, _flags
-class Interpreter (object):
- __slots__ = 'text data bss current recordee regpaths hanging regstack state'.split()
def __init__ (this, byte_order):
this.text = Linkie('<')
this.data = Linkie('<')
@@ -256,6 +258,7 @@
this.hanging = {}
this.regstack = []
this.state = this.outer_state
+ this.meaning = Interpreter.universal_meaning.copy()
def outer_state (this, tok):
if isinstance(tok, Integer_Literal):
this.regstack.append(tok)
@@ -263,30 +266,32 @@
root = tok
mg = match_generator(root)
try:
- while not Meaning.has_key(tok):
+ while not interpreter.meaning.has_key(tok):
tok = mg.next()
if tok == None:
raise 'stack too empty or meaningless word', root
except StopIteration:
raise 'meaningless word', root
- m = Meaning[tok]
+ m = interpreter.meaning[tok]
if isinstance(m, list): prep.push(Macro_Cursor(m))
elif isinstance(m, Stackable): this.regstack.append(m)
elif isinstance(m, tuple):
mtype = m[0]
if mtype == 'builtin':
- if m[2] & MA_PREFIX:
+ if m[2] & Interpreter.MA_PREFIX:
tok = prep.get_token()
if not isinstance(tok, str): raise 'word expected', tok
m[1](tok)
else:
m[1]()
- else: raise 'Unknown meaning type in', `Meaning[tok]`
+ else: raise 'Unknown meaning type in', `interpreter.meaning[tok]`
else: raise 'Unknown meaning format for', tok
else: raise 'bad token', tok
interpreter = Interpreter('<')
+Registers = {Generic_Register: 'reg'} # for reverse translation
+
default_output_names = {'elf': 'a.out', 'pe': 'untitled.exe'}
verbose = 0
format = 'elf'
@@ -307,7 +312,7 @@
if output_name == None: output_name = default_output_names[format]
if list_words:
wd = {}
- for w in Meaning.keys():
+ for w in interpreter.meaning.keys():
s = w.find(' ')
if s != -1: w = w[:s]
wd[w] = 1
|