Update of /cvsroot/wisp/wisp/users/dig
In directory sc8-pr-cvs1:/tmp/cvs-serv23956
Modified Files:
tran-builtins tran.py
Log Message:
moved sections to the interpreter capsule
Index: tran-builtins
===================================================================
RCS file: /cvsroot/wisp/wisp/users/dig/tran-builtins,v
retrieving revision 1.5
retrieving revision 1.6
diff -u -d -r1.5 -r1.6
--- tran-builtins 16 May 2003 15:24:28 -0000 1.5
+++ tran-builtins 16 May 2003 15:41:18 -0000 1.6
@@ -10,10 +10,10 @@
s = Regstack.pop()
scalar = long(s[0])
symbols = map(str, s[1:])
- cursect.emit_tetra_sum(symbols, delta = scalar % 0x100000000L, relative = 1)
+ interpreter.current.emit_tetra_sum(symbols, delta = scalar % 0x100000000L, relative = 1)
$-t, sym
- cursect.emit_tetra_sum([str(Regstack.pop())], relative = 1)
+ interpreter.current.emit_tetra_sum([str(Regstack.pop())], relative = 1)
+ int int
n = Regstack.pop(); m = Regstack.pop()
@@ -32,13 +32,13 @@
Regstack.append(m - n)
.bss
- cursect = Bss
+ interpreter.current = interpreter.bss
.data
- cursect = Data
+ interpreter.current = interpreter.data
.text
- cursect = Text
+ interpreter.current = interpreter.text
//
Regstack = []
@@ -80,13 +80,13 @@
interpreter.state = regs_state
align int
- cursect.align(long(Regstack.pop()))
+ interpreter.current.align(long(Regstack.pop()))
b, int
- cursect[::1] = long(Regstack.pop())
+ interpreter.current[::1] = long(Regstack.pop())
b, sym
- cursect[::1] = str(Regstack.pop())
+ interpreter.current[::1] = str(Regstack.pop())
commit
Regstack.reverse()
@@ -99,7 +99,7 @@
Regstack.append(Regstack[-1])
label|name
- cursect.place_symbol('&' + name)
+ interpreter.current.place_symbol('&' + name)
minor reg
Regstack.append(Integer_Literal(Regstack.pop()[-1]))
@@ -111,22 +111,22 @@
Regstack.append(Symbol_Literal('&' + name))
reserve int
- cursect.skip(Regstack.pop())
+ interpreter.current.skip(Regstack.pop())
swap any any
y = Regstack.pop(); x = Regstack.pop()
Regstack.append(y); Regstack.append(x)
t, int
- cursect[::4] = long(Regstack.pop())
+ interpreter.current[::4] = long(Regstack.pop())
t, sym
- cursect[::4] = str(Regstack.pop())
+ interpreter.current[::4] = str(Regstack.pop())
w, int
- cursect[::2] = long(Regstack.pop())
+ interpreter.current[::2] = long(Regstack.pop())
w, sym
- cursect[::2] = str(Regstack.pop())
+ interpreter.current[::2] = str(Regstack.pop())
# vim: ft=python
Index: tran.py
===================================================================
RCS file: /cvsroot/wisp/wisp/users/dig/tran.py,v
retrieving revision 1.73
retrieving revision 1.74
diff -u -d -r1.73 -r1.74
--- tran.py 16 May 2003 15:24:29 -0000 1.73
+++ tran.py 16 May 2003 15:41:19 -0000 1.74
@@ -244,11 +244,6 @@
else: raise 'Unknown meaning type in', `Meaning[tok]`
else: raise 'bad token', tok
-# Main output sections.
-Text = Linkie('<')
-Data = Linkie('<')
-Bss = Linkie('<')
-cursect = Text
Regstack = []
Generic_Register = Register()
reggen = Generic_Register.child_generator()
@@ -270,7 +265,7 @@
np = (name + '|').split('|')
name = np[0]
pa = np[1]
- g = 'cursect, Regstack, current_recordee, current_register_index'
+ g = 'Regstack, current_recordee, current_register_index'
exec 'def _p (%s):\n global %s\n%s\n' % (pa, g, code)
flags = 0
if pa: flags |= MA_PREFIX
@@ -284,6 +279,10 @@
interpreter = container()
interpreter.state = outer_state
+interpreter.text = Linkie('<')
+interpreter.data = Linkie('<')
+interpreter.bss = Linkie('<')
+interpreter.current = interpreter.text
verbose = 0
@@ -314,12 +313,14 @@
if verbose: print '(%s) %s' % (' '.join(map(str, Regstack)), tok)
interpreter.state(tok)
tok = prep.get_token()
- print 'TEXT'; Text.dump()
- print 'DATA'; Data.dump()
- print 'BSS'; Bss.dump()
+ print 'TEXT'; interpreter.text.dump()
+ print 'DATA'; interpreter.data.dump()
+ print 'BSS'; interpreter.bss.dump()
if Regstack:
raise 'Regstack not empty after parsing ended', Regstack
- binary = elf.make_ELF32_object(text = Text, data = Data, bss = Bss,
+ binary = elf.make_ELF32_object(text = interpreter.text,
+ data = interpreter.data,
+ bss = interpreter.bss,
flags = 's')
f = open(output_name, 'w')
binary.get_file().tofile(f)
|