[Wisp-cvs] wisp/users/dig tran-builtins,1.13,1.14
Status: Alpha
Brought to you by:
digg
From: <di...@us...> - 2003-05-17 06:44:40
|
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())) |