2 \ ** ficl/softwords/jhlocal.fr
3 \ ** stack comment style local syntax...
4 \ { a b c | cleared -- d e }
5 \ variables before the "|" are initialized in reverse order
6 \ from the stack. Those after the "|" are zero initialized.
7 \ Anything between "--" and "}" is treated as comment
9 \ locstate: 0 = looking for | or -- or }}
15 \ $FreeBSD: src/sys/boot/ficl/softwords/jhlocal.fr,v 1.1.6.1 2000/07/06 23:51:46 obrien Exp $
16 \ $DragonFly: src/sys/boot/ficl/softwords/jhlocal.fr,v 1.2 2003/06/17 04:28:18 dillon Exp $
21 : ?-- ( c-addr u -- c-addr u flag )
22 2dup s" --" compare 0= ;
23 : ?} ( c-addr u -- c-addr u flag )
24 2dup s" }" compare 0= ;
25 : ?| ( c-addr u -- c-addr u flag )
26 2dup s" |" compare 0= ;
28 \ examine name and push true if it's a 2local
29 \ (starts with '2'), false otherwise.
30 : ?2loc ( c-addr u -- c-addr n flag )
31 over c@ [char] 2 = if true else false endif ;
33 : ?delim ( c-addr u -- state | c-addr u 0 )
34 ?| if 2drop 1 exit endif
35 ?-- if 2drop 2 exit endif
36 ?} if 2drop 3 exit endif
45 0 dup locals| locstate |
47 \ stack locals until we hit a delimiter
49 parse-word \ ( nLocals c-addr u )
50 ?delim dup to locstate
52 rot 1+ \ ( c-addr u ... c-addr u nLocals )
55 \ now unstack the locals
57 ?2loc if (2local) else (local) endif
60 \ zero locals until -- or }
64 ?delim dup to locstate
67 postpone zero postpone zero (2local)
80 ?delim dup to locstate
86 locstate 3 <> abort" syntax error in { } local line"
87 ; immediate compile-only