Annotation of gforth/locals-test.fs, revision 1.2
1.1 anton 1: include glocals.fs
2:
3: : localsinfo \ !! only debugging
4: ." stack: " .s ." locals-size: " locals-size ? ." locals-list"
5: also locals words previous cr ;
6:
7: ." before foo" cr
8: : foo
9: { c: a b c: c d: d }
10: a .
11: b .
12: d type
13: c . cr
14: ;
15:
16: ." before" .s cr
17: lp@ . cr
18: 1 2 3 s" xxx" foo
19: lp@ . cr
20: ." after" .s cr
21:
22:
23: ." xxx" cr
24: .s cr
25: depth . cr
26:
27:
28: ." testing part 2" cr
29:
30: : xxxx
1.2 ! anton 31: [ ." starting xxxx" .s cr ]
1.1 anton 32: { f } f
1.2 ! anton 33: if
1.1 anton 34: { a b }
35: b a
36: [ ." before else" .s cr ]
1.2 ! anton 37: else
1.1 anton 38: [ ." after else" .s cr ]
39: { c d }
40: c d
1.2 ! anton 41: then
1.1 anton 42: [ ." locals-size after then:" locals-size @ . cr ]
43: f drop
1.2 ! anton 44: [ ." ending xxxx" .s cr ]
1.1 anton 45: ;
46:
47: 2 3 1 xxxx . . cr
48: 2 3 0 xxxx . . cr
49: cr cr cr
50:
51: : xxx3
1.2 ! anton 52: begin
1.1 anton 53: { a }
1.2 ! anton 54: until
1.1 anton 55: a
56: ;
57: ." after xxx3" .s cr cr cr
58:
59: : xxx2
60: [ ." start of xxx2" .s cr ]
1.2 ! anton 61: begin
1.1 anton 62: [ ." after begin" .s cr ]
63: { a }
64: [ ." after { a }" .s cr ]
1.2 ! anton 65: 1 while
1.1 anton 66: [ ." after while" .s cr ]
67: { b }
68: a b
69: [ ." after a" .s cr ]
1.2 ! anton 70: repeat
1.1 anton 71: [ ." after repeat" .s cr
72: also locals words previous cr
73: ]
74: a
75: [ ." end of xxx2" .s cr ]
76: ;
77:
78: : xxx4
79: [ ." before if" localsinfo ]
1.2 ! anton 80: if
1.1 anton 81: [ ." after if" localsinfo ]
82: { a }
83: [ ." before begin" localsinfo ]
1.2 ! anton 84: begin
1.1 anton 85: [ ." after begin" localsinfo ]
86: [ 1 cs-roll ]
87: [ ." before then" localsinfo ]
1.2 ! anton 88: then
1.1 anton 89: { b }
1.2 ! anton 90: until
1.1 anton 91: [ ." after until" localsinfo ]
92: ;
93:
94: : xxx5
95: { a }
1.2 ! anton 96: ahead
! 97: begin
1.1 anton 98: [ ." after begin" localsinfo ]
99: [ 1 cs-roll ]
1.2 ! anton 100: then
1.1 anton 101: [ ." after then" localsinfo ]
1.2 ! anton 102: until
1.1 anton 103: [ ." after until" localsinfo ]
104: ;
105:
1.2 ! anton 106: ." xxx6 coming up" cr
1.1 anton 107: : xxx6
1.2 ! anton 108: [ ." starting xxx6" localsinfo ]
! 109: if
1.1 anton 110: { x }
1.2 ! anton 111: else
1.1 anton 112: [ ." after else" localsinfo ]
1.2 ! anton 113: ahead
! 114: begin
1.1 anton 115: [ ." after begin" localsinfo ]
1.2 ! anton 116: [ 2 CS-ROLL ] then
1.1 anton 117: [ ." after then" localsinfo ]
1.2 ! anton 118: until
! 119: then
! 120: [ ." ending xxx6" localsinfo ]
1.1 anton 121: ;
122:
123: ." xxx7 coming up" cr
124: : xxx7
125: { b }
1.2 ! anton 126: do
1.1 anton 127: { a }
128: [ ." before loop" localsinfo ]
1.2 ! anton 129: loop
1.1 anton 130: [ ." after loop" localsinfo ]
131: ;
132:
133: ." xxx8 coming up" cr
134:
135: : xxx8
136: { b }
1.2 ! anton 137: ?do
1.1 anton 138: { a }
139: [ ." before loop" localsinfo ]
1.2 ! anton 140: loop
1.1 anton 141: [ ." after loop" localsinfo ]
142: ;
143:
144: ." xxx9 coming up" cr
145: : xxx9
146: { b }
1.2 ! anton 147: do
1.1 anton 148: { c }
149: [ ." before ?leave" leave-sp ? leave-stack . cr ]
1.2 ! anton 150: ?leave
1.1 anton 151: [ ." after ?leave" leave-sp ? cr ]
152: { a }
153: [ ." before loop" localsinfo ]
1.2 ! anton 154: loop
1.1 anton 155: [ ." after loop" localsinfo ]
156: ;
157:
158: ." strcmp coming up" cr
159: : strcmp { addr1 u1 addr2 u2 -- n }
1.2 ! anton 160: addr1 addr2 u1 u2 min 0 ?do
1.1 anton 161: { s1 s2 }
1.2 ! anton 162: s1 c@ s2 c@ - ?dup if
! 163: unloop exit
! 164: then
1.1 anton 165: s1 char+ s2 char+
1.2 ! anton 166: loop
1.1 anton 167: 2drop
168: u1 u2 - ;
169:
170: : teststrcmp
171: ." lp@:" lp@ . cr
172: s" xxx" s" yyy" strcmp . cr
173: ." lp@:" lp@ . cr
174: s" xxx" s" xxx" strcmp . cr
175: ." lp@:" lp@ . cr
176: s" xxx" s" xxxx" strcmp . cr
177: ." lp@:" lp@ . cr
178: s" xxx3" s" xxx2" strcmp . cr
179: ." lp@:" lp@ . cr
180: s" " s" " strcmp . cr
181: ." lp@:" lp@ . cr
182: ." lp@:" lp@ . cr
183: ." stack:" .s cr
184: ;
185:
186: : findchar { c addr u -- i }
1.2 ! anton 187: addr u 0 ?do
1.1 anton 188: { p }
1.2 ! anton 189: p c@ c = if
! 190: p leave
! 191: then
1.1 anton 192: p char+
1.2 ! anton 193: loop
1.1 anton 194: addr - ;
195:
196:
197: : testfindchar
198: ." findcahr " cr
199: ." lp@:" lp@ . cr
200: [char] a s" xxx" findchar . cr
201: ." lp@:" lp@ . cr
202: [char] a s" " findchar . cr
203: ." lp@:" lp@ . cr
204: [char] a s" wam" findchar . cr
205: ." lp@:" lp@ . cr
206: [char] a s" wma" findchar . cr
207: ." lp@:" lp@ . cr
208: [char] a s" awam" findchar . cr
209: ." lp@:" lp@ . cr
210: ." stack:" .s cr
211: ;
212:
213:
214:
215: ." stack:" .s cr
216: teststrcmp
217: testfindchar
218: ." hey you" cr
219:
220: : xxx10
221: [ ." before if" localsinfo ]
1.2 ! anton 222: if
1.1 anton 223: [ ." after if" localsinfo ]
224: scope
225: [ ." after scope" localsinfo ]
226: { a }
227: [ ." before endscope" localsinfo ]
228: endscope
229: [ ." before begin" localsinfo ]
1.2 ! anton 230: begin
1.1 anton 231: [ ." after begin" localsinfo ]
232: [ 1 cs-roll ]
233: [ ." before then" localsinfo ]
1.2 ! anton 234: then
1.1 anton 235: { b }
1.2 ! anton 236: until
1.1 anton 237: [ ." after until" localsinfo ]
238: ;
239:
1.2 ! anton 240: : xxx11
! 241: if
! 242: { a }
! 243: exit
! 244: [ ." after xexit" localsinfo ]
! 245: else
! 246: { b }
! 247: [ ." before xthen" localsinfo
! 248: then
! 249: [ ." after xthen" localsinfo ]
! 250: ;
! 251:
! 252:
! 253: bye
FreeBSD-CVSweb <freebsd-cvsweb@FreeBSD.org>