d7d465d132c87a301841535c24daf85146aa4867
[debian/pforth] / fth / private.fth
1 \ @(#) private.fth 98/01/26 1.2
2 \ PRIVATIZE
3 \
4 \ Privatize words that are only needed within the file
5 \ and do not need to be exported.
6 \
7 \ Usage:
8 \    PRIVATE{
9 \    : FOO ;  \ Everything between PRIVATE{ and }PRIVATE will become private.
10 \    : MOO ;
11 \    }PRIVATE
12 \    : GOO   foo moo ;  \ can use foo and moo
13 \    PRIVATIZE          \ smudge foo and moo
14 \    ' foo              \ will fail
15 \
16 \ Copyright 1996 Phil Burk
17 \
18 \ 19970701 PLB Use unsigned compares for machines with "negative" addresses.
19
20 anew task-private.fth
21
22 variable private-start
23 variable private-stop
24 $ 20 constant FLAG_SMUDGE
25
26 : PRIVATE{
27     latest private-start !
28     0 private-stop !
29 ;
30 : }PRIVATE
31     private-stop @ 0= not abort" Extra }PRIVATE"
32     latest private-stop !
33 ;
34 : PRIVATIZE  ( -- , smudge all words between PRIVATE{ and }PRIVATE )
35     private-start @ 0= abort" Missing PRIVATE{"
36     private-stop @ 0= abort" Missing }PRIVATE"
37     private-stop @
38     BEGIN
39         dup private-start @ u>    \ 19970701
40     WHILE
41 \       ." Smudge " dup id. cr
42         dup c@ flag_smudge or over c!
43         prevname
44     REPEAT
45     drop
46     0 private-start !
47     0 private-stop !
48 ;