Leo: |
VB maakt de stack leeg, dan komt er een 1 en die wordt geDUPt.
[rtn] ( 1 1 0 ) okO ja, en die extra nul. Waarom die nul trouwens? |
Theo: |
Zal ik je laten zien.
VB 2 ' ; CATCH .S [rtn] ( 2 -14 ) okAls het extra getal van CATCH een nul is, betekent dat, dat de operatie gelukt is. Als de operatie niet lukt geeft hij een foutnummer i.p.v. die nul. |
Leo: | Wat is er in dit geval dan niet gelukt? |
Theo: |
Probeer hetzelfde maar eens met EXECUTE.
VB 2 ' ; EXECUTE .S [rtn] Compile-only word (message # -14) |
Leo: |
Hm.
(2 minuten stilte) De .S achter EXECUTE wordt niet uitgevoerd, en die achter CATCH wel. |
Theo: |
Juist. EXECUTE gooit het bijltje er bij neer.
CATCH vangt eventuele fouten op en zorgt ervoor dat de stack hersteld wordt,
d.w.z. voor en na de mislukte operatie even diep is.
Hij vervangt het token van de mislukte operatie door het foutnummer.
Na gelukte operaties komt de goedkeuringsnul uiteraard bovenop het bereikte resultaat.
Kijk maar bij VB 1.
De volgende: VB 3 S" DUP" ' EVALUATE CATCH .S |
Leo: |
Dit doet hetzelfde als voorbeeld 1.
[rtn] ( 3 3 0 ) ok |
Theo: |
Juist. Maar nu deze:
VB 4 S" vijg" ' EVALUATE CATCH .S |
Leo: |
Die "vijg" kan hij niet evalueren,
dus komt er achter de 4 een of ander foutnummertje op de stack.
[rtn] ( 4 0 0 -61 ) okWaar komen die twee nullen vandaan? |
Theo: | Bedenk dat na een fout de stack voor en na CATCH even diep is. |
Leo: | Och natuurlijk, de vijg-string stond ook op de stack. Maar waarom is die in 0 0 veranderd? |