never-returns (プリミティブ)
パッケージ: CURL.LANGUAGE.CORE-TYPES

通常は決して復帰しないプロシージャの戻り型。

説明

プロシージャまたはメソッドの戻り型として使用した場合、これはこのコードが呼び出されたときには呼び出し側に戻らないこと (つまり、throwerrorexit などによって終了するだけであること) を意味します。
never-returns を返すと宣言したプロシージャには return ステートメントを含めることはできず、常に never-returns 型の式で終了させる必要があります。この条件に従わなければコンパイラは該当する構文エラーを生成します。
ifswitchtype-switch のような条件式では、コンパイル時の型が never-returns でない分岐のみに基づいて条件式のコンパイル時の型が決まります。復帰する分岐がない場合、条件式のコンパイル時の型は never-returns になります。たとえば、次の例では not-odd-errornever-returns として宣言することにより、これを else 句で使用し、if 句が値を生成することを妨げずに済むことができます。
常にエラーや例外をスローすることになっている関数や、呼び出し側に制御を戻さない関数は、never-returns を戻り型として宣言する必要があります。
never-returns 型は、変数、フィールド、パラメータの型宣言には使えません。


例: never-returns 戻り型の使用
{define-proc {not-odd-error i:int}:never-returns
    {error {format "%s is not odd", i}}
}
{define-proc {assert-odd val:int}:int
    {return
        {if {bit-and val, 1} == 1 then
            val
         else
            {not-odd-error val}
        }
    }
}