改訂履歴 | ||
---|---|---|
改訂 V6.2-002/-002A | 2015年7月20日 |
|
改訂 V6.2-001 | 2015年2月27日 |
|
改訂 V6.1-000 | 2014年8月28日 | |
改訂 V6.0-003 | 2014年2月24日 |
|
改訂 V6.0-001 | 2013年3月21日 | “$ZCOmpile”で、コンパイル時にエラーが発生した後に状態 1 を返す$ZCOMPILEについてのポイントが追加 |
改訂 V5.5-000/2 | 312012年10月05日 | “$ZALlocstor”, “$ZREalstor”, “$ZUSedstor” の説明を追加 |
改訂 V5.5-000/1 | 2012年10月05日 | “$ZTrap”の記述が改善され、 “$ZCMdline” の参考例が追加され、 “オブジェクト(.o) ファイルから共有ライブラリを作成” のLinux、Solaris、z / OSの例が追加 |
改訂 V5.5-000 | 2012年6月15日 | “$ZONLNrlbk” の説明が追加 |
改訂 V5.4-002B | 2011年12月26日 | 各章の改訂履歴を含むGT.Mのリリースを反映したドキュメント改訂履歴への変換 |
目次
この章では、GT.M.で実装されているM 組み込み特殊変数について説明します。Zの文字で始まるすべてのエントリは、ANSI標準の組み込みの特殊変数へのGT.Mの追加です。組み込みの特殊変数のいずれも、大文字と小文字が区別されません。
Mの固有の特殊変数は、単一のドル記号($)で始まります。GT.Mはプログラムの検査のためにこのような変数が用意されています。 いくつかのケースでは、固有の特殊変数は環境に対応する部分を変更できるように値をSETすることができます。
注意 | |
---|---|
組み込みの特殊変数のいずれも、けっしてKILLはできません。SETまたはNEWすることは一般的に許可されませんが、具体的にそれらを行う説明に記載されています。 |
$ ZT[RAP] には、ルーチン実行中にエラーが発生した時に、GT.MがXECUTEする文字列の値が含まれています。
注意 | |
---|---|
以下の検討では、$ETRAPのエラー処理が同時に効果がなくなっている(つまり、$ETRAP="")ことを前提としています。$ETRAPと$ZTRAP間の相互作用の詳細については、 第13章: “エラー処理”を参照してください 。 |
$ZTRAP変数がnullでない場合、GT.Mは、現在のレベルで$ZTRAPを実行します。$ZTRAP変数は、 "B," の初期値を持ち、エラー状態が発生したときにダイレクトモードでプロセスを置きます。もし$ZTRAPの値が null ("") の場合、例外は、例外に関連付けられている条件コードでダウンを実行するイメージを引き起こします。もし $ZTRAPに無効なソースコードが含まれている場合は、GT.Mはエラーメッセージを表示し、ダイレクトモードにプロセスを置きます。
$ZTRAPは、読み書き可能な特殊変数( Intrinsic Special Variable:ISV)です(すなわち、SETコマンドの引数に等号 (=) の左側で出現が可能)。
$ZTRAPは、また、包括的NEWコマンドの引数として表示されることがあります。NEW $ZTRAP はGT.Mに現在の$ZTRAP値をスタックし、その値を空の文字列($ZTRAP="")に設定します。NEWコマンドは、エラー処理のために$ZTRAPを制御します。プログラムがNEWが発生した呼び出しレベルからQUITするとき、GT.Mは、以前にNEWによってスタックされた値を復元します。NEW $ZTRAP は、$ZTRAPのネストを提供します。エラーが発生したときに $ZTRAPは= "" イメージを終了するので、SET $ZTRAP="" は、一般的に NEW $ZTRAPの直後に、続きます。 あなたのプログラムのネスティングに対応するエラー処理の戦略を構築するために、このテクニックを使用することができます。環境変数 gtm_ztrap_new がブール代数のTRUEと評価された場合(大文字小文字を区別しない文字列 "TRUE"、または、大文字と小文字を区別しない文字列 "YES"、または、ゼロ以外の数値)、$ZTRAPは$ZTRAPがSETされている時にNEWされ; それ以外の場合、$ZTRAPは、SETされた時にはスタックされません。
注意 | |
---|---|
$ZTRAPから来るQUITは、$ZTRAPがアクティブになっている時のレベルを終了します。 |
$ZTRAPをシンプルにキープしてください、別のルーチンに複雑なロジックを置いてください。もし$ZTRAPによって指定されたアクションが、$ZTRAPの値を変更する前に、別のランタイムエラーの結果を生じさせる場合は、GT.Mは、イメージを終了しプロセスのスタック領域を使い果たすまで、$ZTRAPを呼び出します。例外処理のデバッグは、注意してください。
例:
GTM>S $ZTRAP="ZP @$ZPOS B"
この例では、GT.Mがダイレクトモードに入る前にエラーを検出した行のソースコードを表示するために、$ZTRAPを変更ています。
UNIX環境変数 gtm_ztrap_form によって制御される$ZTRAPの4つの設定があります。
gtm_ztrap_form の4つの設定は次のとおりです:
code - gtm_ztrap_form が "code"(またはその後に記述された値が 1 でもない値)と評価された場合、GT.Mは$ZTRAPをコードとして扱い、前述のようにコードを処理します。
entryref (入り口参照) - もし gtm_ztrap_form が "entryref:入り口参照" として評価される場合、GT.Mは、暗黙のGOTOコマンドに entryref の引数としてそれを扱います。
adaptive(適応) - もし gtm_ztrap_form が "adaptive:適応" と評価された場合に、かつ、もし $ZTRAP が有効なMコードでコンパイルされていない場合に、$ZTRAP は、ちょうど "entryref : 入り口参照" のために説明したように扱われます。少し曖昧さがあるので、$ZTRAPのコードとentryref のフォームは、同じアプリケーションに混在させることができます。
重要 | |
---|---|
GT.Mは、$ZTRAPを入口参照(entryref)として評価する前に、$ZTRAPをコンパイルしようとします。GT.Mは、QUIT、ZGOTO、HANGなどの引数を持たないコマンドを有効なラベルとして許可するため、「アダプティブ」モードでのエラー処理コードのラベルなどのキーワードを使用しないように注意してください。 |
pope[ntryref] / popa[daptive] - もし gtm_ztrap_form が " POPE[NTRYREF]" または "POPA[DAPTIVE] " (大文字と小文字を区別しない)に評価され、そして、$ZTRAPの値が entryref のフォームになっている場合、GT.M はエラーが$ZTRAPが最後に設定された時のレベル(これは含まない)に発生する時のレベルからMスタックを戻します。次に、GT.Mの転送は、$ZTRAPの値がSETされた場所のレベルで$ZTRAPで entryref を制御します。もしUNIX環境変数 gtm_zyerror が有効な entryref に定義されている場合、GT.Mは、スタックを戻す後に、そして、$ZTRAPで指定されたentyrefに制御を渡す前に、GTM_ZYERROR(暗黙のDOで)で指定された entryref に制御を移行します。
注意 | |
---|---|
$ZTRAP値と同様に、デバイスEXCEPTION値の呼び出しは、現在のgtm_ztrap_form設定で指定されたパターンに従います。ただし、EXCEPTIONアクションで暗黙的にポップすることはありません。 |