(rontolisp) docs
← 特殊形式

throw

(throw tag result)

タグが tageq であるもっとも内側のアクティブな catch へ制御を移し、result をその catch フォームの値にします。スタックは実際に巻き戻されるため、途中の unwind-protect の cleanup は内側から順にすべて実行されます。また、間にある handler-case はこれを捕捉しませんthrow はシグナルされたコンディションではなく非局所脱出だからです。

一致する catch がアクティブでない場合 throw はエラーです: インタプリタは THROW: no enclosing catch for tag ... を報告し、JVM バックエンドは対応するランタイムエラーを送出し、wasm-GC バックエンドは(捕捉されない error と同じく)トラップします。result フォームは巻き戻しが始まる前に評価されます。

handler-case を通り抜ける throw はそれに捕捉されません:

一致しない throw はプログラムを中断するため、その経路は静的な例で示します:

> (throw 'nope 1)
Error: THROW: no enclosing catch for tag NOPE