Update of /cvsroot/wisp/wisp/users/dig
In directory sc8-pr-cvs1:/tmp/cvs-serv10281
Modified Files:
tran-builtins
Log Message:
allow nesting of :regs declarations
Index: tran-builtins
===================================================================
RCS file: /cvsroot/wisp/wisp/users/dig/tran-builtins,v
retrieving revision 1.13
retrieving revision 1.14
diff -u -d -r1.13 -r1.14
--- tran-builtins 17 May 2003 06:08:31 -0000 1.13
+++ tran-builtins 17 May 2003 06:44:35 -0000 1.14
@@ -77,23 +77,29 @@
interpreter.state = record_state
:regs|family
- if Meaning.has_key(family): raise 'duplicate declaration', family
- f = apply(Register, interpreter.regpath)
- Meaning[family] = f
- Registers[f] = family
- interpreter.regpath.append(0)
+ def regs_state0 (family):
+ if Meaning.has_key(family): raise 'duplicate declaration', family
+ f = apply(Register, interpreter.regpath)
+ Meaning[family] = f
+ Registers[f] = family
+ interpreter.regpath.append(0)
+ interpreter.state = regs_state
def regs_state (tok):
- if tok != Semicolon:
- if Meaning.has_key(tok): raise 'duplicate declaration', tok
+ if tok == Semicolon:
+ interpreter.regpath.pop()
+ interpreter.regpath[-1] += 1
+ if len(interpreter.regpath) == 1:
+ interpreter.state = outer_state
+ elif Meaning.has_key(tok):
+ if Meaning[tok] == Meaning[':regs']:
+ interpreter.state = regs_state0
+ else: raise 'duplicate declaration', tok
+ else:
r = apply(Register, interpreter.regpath)
Meaning[tok] = r
Registers[r] = tok
interpreter.regpath[-1] += 1
- else:
- interpreter.state = outer_state
- interpreter.regpath.pop()
- interpreter.regpath[-1] += 1
- interpreter.state = regs_state
+ regs_state0(family)
align int
interpreter.current.align(long(Regstack.pop()))
|