aboutsummaryrefslogtreecommitdiff
path: root/amforth-6.5/common/lib/execute-parsing.frt
blob: a5dc9bc0c9f804efedd84f071f36291a314dcf76 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25

\ execute-parsing
\ ( addr len XT -- )
\ execute XT with addr/len as SOURCE
\

variable xp-addr
variable xp-len

: xp-source xp-addr @ xp-len @ ;

: execute-parsing ( addr len XT -- )
  xp-addr @ xp-len @ 2>r \ make it nestable 
  >r                     \ save XT temporarily
  xp-len ! xp-addr !     \ prepare new source
  r>                     \ get back the XT
  ['] source defer@ >in @ 2>r \ save and switch source
  ['] xp-source is SOURCE
  0 >IN !
  catch      \ DO IT
  2r> >in ! is source    \ restore old source
  2r> xp-len ! xp-addr ! \ restore nested information
  throw                  \ re-throw exception, if any
;