デバッグ†
16 個の関数。
LOGGING†
書式†
LOGGING(var)
引数†
| Parameter | Description |
|---|---|
| var | ログに書き込む値。任意の型を指定可能 |
戻り値†
VOID(戻り値なし)
解説†
指定した値をログファイルに書き込み、同時にデバッグツール「玉」にも表示します。任意のデータ型を受け付けます。
簡易配列は各値をカンマで結合した形式で出力されます。
出力形式†
引数が複数あるときや配列を渡したときは、各値をカンマで区切って1行に書き出します。文字列は " で囲みます。
LOGGING('a', 1, 2.5) // "a",1,2.500000
値が配列やハッシュを含むとき(Tc602-8以降)は、配列を ( )、ハッシュを { } で囲み、ハッシュの要素は キー=値 の形で書き出します。入れ子の内側も同じ規則で書き出すので、どこまでが内側なのかがわかります。
_h = PARSEJSON('{"l":[1,2],"m":{"x":"a"}}')
LOGGING(_h) // {"l"=(1,2),"m"={"x"="a"}}
LOGGING(PARSEJSON('[[1,[2,"s"]],3]')) // (1,(2,"s")),3
いちばん外側の配列は引数として展開されるので、括弧で囲まれません。
互換性†
- YAYA: 初期バージョンより使用可能
- AYA: バージョン5.8以降で使用可能
- Tc602-8: 入れ子の配列を
( )、ハッシュを{ }で囲んで出力するようにした(それまでは内側も,や=でつながれ、ハッシュのキーや値の文字列は"で囲まれなかった)
関連項目†
GETLASTERROR†
書式†
GETLASTERROR
GETLASTERROR()
引数†
なし
戻り値†
直近のシステム関数呼び出しのエラーコード(整数)。エラーがない場合は0。
解説†
直近に実行したシステム関数呼び出しのエラーコードを返す関数。
この関数が返す値は SETLASTERROR で設定することもできる。エラーが起きそうな場所を確実にチェックするには、先に SETLASTERROR(0) で値を 0 に戻してから、システム関数を使い、その後で GETLASTERROR を調べる。
エラーコード†
| コード | 意味 |
|---|---|
| 0 | エラーなし |
| 8 | 引数が不足している |
| 9 | 引数の値が不正 |
| 10 | 空文字列は処理できない |
| 11 | 結果を格納できる変数がない |
| 12 | 範囲外または不正な値 |
| 13 | 処理が失敗した |
| 14 | 外部ライブラリが読み込まれていない |
| 15 | ファイルが開かれていない |
| 16 | 正規表現の構文エラーまたは複雑すぎる |
| 17 | 正規表現処理中の未定義エラー |
| 18 | 変数が期待される箇所に非変数の引数が渡された |
使用例†
SETLASTERROR(0)
// システム関数を呼び出す
if !GETLASTERROR {
"エラーが発生しました。"
}
互換性†
- YAYA: 初期バージョンから使用可能
- AYA: バージョン5.8以降
関連項目†
SETLASTERROR†
書式†
SETLASTERROR( code )
引数†
| Parameter | Description |
|---|---|
| code | 設定するエラーコード(整数値) |
戻り値†
なし
解説†
システム関数のエラーコードを設定します。YAYA スクリプト実行中にエラー状態を手動で設定することができます。
GETLASTERROR と組み合わせてシステムレベルのエラー状態を管理します。
互換性†
- YAYA: 初期バージョンより対応
- AYA: 5.8以降
関連項目†
GETERRORLOG†
書式†
GETERRORLOG()
引数†
なし
戻り値†
エラーログの文字列配列(最大20件、新しいものから順)
解説†
YAYA 内部で起きたエラー・警告のログの配列を取得する。
- エラーログの形式は、デバッグツール「玉」やエラーログ機能(基礎設定の
log)で出力されるものと同じ。ファイル名(行番号) : error E0022 : メッセージの形をしている - 辞書エラーが起きたときの緊急時読み込み機能が作動した場合は、緊急時機能が動作する前のエラーログが維持される。これを使って、異常時にエラーを出力できる
- ログの最大数は、基礎設定の
maxlognumで変更できる(デフォルト: 256)。返るのは直近のエラーから 20 個まで
使用例†
エラーログを、ファイル名・行番号・種別・コード・メッセージに分解する例。
ErrorList.SPLIT{
_L=SPLIT(RE_REPLACEEX(_argv[0],'\((\d+|-)\) : ',',$1,'),',',3)
//("E:\ssp\ghost\Taromati2\ghost\master\dic\system\ERRORLOG.dic","17","error E0041 : 'for'のループ式が異常です.")
_L[2]=SPLIT(RE_REPLACEEX(_L[2],' *([WEN])(\d+|-)( *: |:)',',$1,$2,'),',',4)
//("E:\ssp\ghost\Taromati2\ghost\master\dic\system\ERRORLOG.dic","17","error","E","0041","'for'のループ式が異常です.")
_L
}
ErrorList.Gene{
ErrorList.filename=IARRAY
ErrorList.linenum=IARRAY
ErrorList.type=IARRAY
ErrorList.typecode=IARRAY
ErrorList.code=IARRAY
ErrorList.Info=IARRAY
_l=GETERRORLOG
foreach _l;_i{
_t=ErrorList.SPLIT(_i)
ErrorList.filename,=_t[0]
ErrorList.linenum,=TOINT(_t[1])
ErrorList.type,=_t[2]
ErrorList.typecode,=_t[3]
ErrorList.code,=TOINT(_t[4])
ErrorList.Info,=_t[5]
}
}
ClearErrorListVar{
ERASEALLVARBEGINAS('ErrorList.')
}
互換性†
- YAYA: Tc555-1 以降
関連項目†
GETCALLSTACK†
書式†
GETCALLSTACK
GETCALLSTACK()
引数†
なし
戻り値†
コールスタックの汎用配列。各要素はユーザー定義関数の関数名(文字列)。
解説†
ユーザー定義関数の呼び出し履歴(コールスタック)を取得する関数。各要素が関数名を表す汎用配列として返される。
互換性†
- YAYA: 初期から利用可能
CLEARERRORLOG†
書式†
CLEARERRORLOG()
引数†
なし
戻り値†
空の配列
YAYAの内部処理で蓄積されたエラーおよび警告ログを消去する。実行後、GETERRORLOGが返すエラー配列は空になる。
解説†
YAYA 内部で起きたエラー・警告のログを消去する。実行すると、GETERRORLOG で得られるエラー配列が空になる。
互換性†
- YAYA: バージョンTc567-2以降
関連項目†
DUMPVAR†
書式†
DUMPVAR()
引数†
None
戻り値†
返り値はありません(VOID)。
解説†
変数のダンプをログ出力します。実行するとその時点の全変数の状態をデフォルトのログファイル(通常 ayame.log)に書き出します。スクリプト実行中の特定時点での変数状態を確認するためのデバッグユーティリティです。
出力形式†
1行に1変数を、[番号] 変数名 = 値 の形で書き出します。値には型が付きます。
| 型 | 書式 |
|---|---|
| 整数・実数・文字列 | (int)5、(double)2.500000、(string)abc |
| VOID | (nop/void) |
| 汎用配列 | (array) : に続けて要素を空白で区切る |
| ハッシュ(Tc600-4以降) | (hash) : に続けて キー=値 を空白で区切る |
| 入れ子の要素(Tc600-4以降) | 配列は (array)[ ... ]、ハッシュは (hash){ ... } で囲む |
[0] count = (int)3
[1] list = (array) : (int)1 (string)p
[2] h = (hash) : (string)a=(int)1 (string)l=(array)[ (int)1 (int)2 ] (string)n=(hash){ (string)x=(double)2.500000 }
互換性†
- YAYA: Tc529-2以降
- Tc600-4: ハッシュと入れ子の値を出力するようにした(それまではハッシュが
(unknown type)、入れ子の要素が(?UNKNOWN)になっていた)
SLEEP†
書式†
SLEEP(millisecond)
引数†
| Parameter | Description |
|---|---|
| millisecond | 待機時間(ミリ秒単位) |
戻り値†
- 成功時: 0
- 失敗時: -1
解説†
指定したミリ秒数だけ処理を一時停止します。
長時間の待機を指定するとアプリケーション全体がフリーズするため、短い時間やデバッグ用途に限定して使用することを推奨します。
THREADSTART で起動したスレッドから呼んだときは、待っている間ほかのスレッド(SSP からの request を含む)が動けます。THREADSTOP や unload で中断を求められると、待ちの途中で戻ります。
互換性†
- YAYA: Tc564-1以降
- Tc608-1: ワーカースレッドから呼んだときに、待つ間ほかのスレッドが動けるようにし、中断で途中で戻るようにした
関連項目†
SETTAMAHWND†
書式†
SETTAMAHWND( hwnd )
引数†
| Parameter | Description |
|---|---|
| hwnd | デバッグツール「玉」のウィンドウハンドル(数値型) |
戻り値†
なし(VOID)
解説†
デバッグツール「玉」のウィンドウハンドルを設定します。設定後はデバッグメッセージがそのウィンドウに出力されます。
互換性†
- YAYA: Tc562-1以降
LINT.GetFuncUsedBy†
書式†
LINT.GetFuncUsedBy(function_name)
引数†
| Parameter | Description |
|---|---|
| function_name | 解析対象の関数名 |
戻り値†
- 成功: 指定関数内で使用されている関数名(ユーザー定義関数・システム関数両方)の汎用配列
- 候補なし: 空の汎用配列
- エラー: -1
解説†
指定した関数内で使用しているすべての関数名(ユーザー定義関数・システム関数を含む)を列挙し、汎用配列で返します。コードの依存関係解析や開発時の検査に使用するLint系ユーティリティ関数です。
関数名は重複を除去し、名前順に並べて返されます。埋め込み式 %(式) を含む文字列があると、展開に内部的に使われる TOSTR も含まれます。制約の詳細は LINT系関数の仕様と制約 を参照してください。
互換性†
- YAYA: Tc568-1以降で使用可能
関連項目†
- LINT.GetUserDefFuncUsedBy
- LINT.GetGlobalVarUsedBy
- LINT.GetLocalVarUsedBy
- LINT.GetGlobalVarLetted
- LINT.GetLocalVarLetted
- LINT.GetVarRefs
LINT.GetGlobalVarLetted†
書式†
LINT.GetGlobalVarLetted(function_name)
引数†
| Parameter | Description |
|---|---|
| function_name | 解析対象の関数名 |
戻り値†
- 成功: 指定関数内で代入されているグローバル変数名の汎用配列
- 候補なし: 空の汎用配列
- エラー: -1
解説†
指定した関数内でグローバル変数への代入(let)が行われている箇所を列挙し、汎用配列で返します。読み取りのみの箇所は列挙されません。読み取りも含めて列挙する場合は LINT.GetGlobalVarUsedBy を使用してください。
変数名は重複を除去し、名前順に並べて返されます。
以下も代入として列挙されます。
- 複合代入(
+=-=など)と++-- - 配列要素への代入(
G_a[0] = 1はG_a)(Tc574-1以降) foreach _list ; G_vのループ変数G_v(Tc574-1以降)foreach _list ; G_k, G_vの2つのループ変数G_kG_v(Tc600-3以降)
制約の詳細は LINT系関数の仕様と制約 を参照してください。
互換性†
- YAYA: Tc568-1以降で使用可能
- Tc574-1: 配列要素への代入と foreach のループ変数を列挙するように変更
- Tc600-3: 2変数の foreach のループ変数を両方とも列挙
関連項目†
- LINT.GetFuncUsedBy
- LINT.GetUserDefFuncUsedBy
- LINT.GetGlobalVarUsedBy
- LINT.GetLocalVarUsedBy
- LINT.GetLocalVarLetted
- LINT.GetVarRefs
LINT.GetGlobalVarUsedBy†
書式†
LINT.GetGlobalVarUsedBy(function_name)
引数†
| Parameter | Description |
|---|---|
| function_name | 解析対象の関数名 |
戻り値†
- 成功: 指定関数内で使用されているグローバル変数名の汎用配列
- 候補なし: 空の汎用配列
- エラー: -1
解説†
指定した関数内で使用しているグローバル変数名を列挙し、汎用配列で返します。代入・読み取り両方の使用箇所が対象となります。
変数名は重複を除去し、名前順に並べて返されます。そのため LINT.GetGlobalVarLetted と組み合わせても「代入されているが読まれていない変数」は判別できません。制約の詳細は LINT系関数の仕様と制約 を参照してください。
互換性†
- YAYA: Tc568-1以降で使用可能
関連項目†
- LINT.GetFuncUsedBy
- LINT.GetUserDefFuncUsedBy
- LINT.GetLocalVarUsedBy
- LINT.GetGlobalVarLetted
- LINT.GetLocalVarLetted
- LINT.GetVarRefs
LINT.GetLocalVarLetted†
書式†
LINT.GetLocalVarLetted(function_name)
引数†
| Parameter | Description |
|---|---|
| function_name | 解析対象の関数名 |
戻り値†
- 成功: 指定関数内でローカル変数への代入が行われている変数名の汎用配列。ネストしたスコープへの出入りは
{/}で表現される - 候補なし(
{}のみの場合も含む): 空の汎用配列 - エラー: -1
解説†
指定した関数内でローカル変数への代入(let)が行われている箇所を列挙し、汎用配列で返します。読み取りのみの箇所は列挙されません。代入と読み取りの両方を列挙するには LINT.GetLocalVarUsedBy を使用してください。
変数名は代入が行われた順に返され、ネストしたスコープ(波括弧ブロック)への出入りは { および } で示されます。
以下も代入として列挙されます。
- 複合代入(
+=-=など)と++-- - 配列要素への代入(
_a[0] = 1は_a)(Tc574-1以降) foreach _list ; _vのループ変数_v(Tc574-1以降)foreach _list ; _k, _vの2つのループ変数_k_v(Tc600-3以降)
case 構文が内部で生成するローカル変数(_CaSe_ExPr_PrEfIx_ で始まる名前)は列挙されません(Tc574-1以降)。
制約の詳細は LINT系関数の仕様と制約 を参照してください。
互換性†
- YAYA: Tc568-1以降で使用可能
- Tc574-1: 配列要素への代入と foreach のループ変数を列挙するように変更。case の内部変数を除外
- Tc600-3: 2変数の foreach のループ変数を両方とも列挙
関連項目†
- LINT.GetLocalVarUsedBy
- LINT.GetGlobalVarLetted
- LINT.GetGlobalVarUsedBy
- LINT.GetUserDefFuncUsedBy
- LINT.GetFuncUsedBy
- LINT.GetVarRefs
LINT.GetLocalVarUsedBy†
書式†
LINT.GetLocalVarUsedBy(function_name)
引数†
| Parameter | Description |
|---|---|
| function_name | 解析対象の関数名 |
戻り値†
- 成功: 指定関数内で使用されているローカル変数名の汎用配列。ネストしたスコープへの出入りは
{/}で表現される - 候補なし(
{}のみの場合も含む): 空の汎用配列 - エラー: -1
解説†
指定した関数内で使用しているローカル変数名を列挙し、汎用配列で返します。代入・読み取り両方の使用箇所が対象となります。
変数名は使用された順に返され、ネストしたスコープ(波括弧ブロック)への出入りは { および } で示されます。
Tc574-1以降では、同じステートメント内の代入先の変数(foreach のループ変数を含む)は、そのステートメントの最後に並びます。代入は右辺の評価後に行われるためです。
_z = _z + 1 // → _z(読み), _z(代入)
_a[0] = _b // → _b, _a
case 構文が内部で生成するローカル変数(_CaSe_ExPr_PrEfIx_ で始まる名前)は列挙されません(Tc574-1以降)。
戻り値には読みと代入の区別がありません。制約の詳細は LINT系関数の仕様と制約 を参照してください。
互換性†
- YAYA: Tc568-1以降で使用可能
- Tc574-1: 同一ステートメント内で代入先を最後に並べるように変更。case の内部変数を除外
関連項目†
- LINT.GetFuncUsedBy
- LINT.GetUserDefFuncUsedBy
- LINT.GetGlobalVarUsedBy
- LINT.GetGlobalVarLetted
- LINT.GetLocalVarLetted
- LINT.GetVarRefs
LINT.GetUserDefFuncUsedBy†
書式†
LINT.GetUserDefFuncUsedBy(function_name)
引数†
| Parameter | Description |
|---|---|
| function_name | 解析対象の関数名 |
戻り値†
- 成功: 指定関数内で使用されているユーザー定義関数名の汎用配列
- 候補なし: 空の汎用配列
- エラー: -1
解説†
指定した関数内で使用しているユーザー定義関数名を列挙し、汎用配列で返します。システム関数は含まれません(システム関数も含めて列挙する場合は LINT.GetFuncUsedBy を使用してください)。
関数名は重複を除去し、名前順に並べて返されます。EVAL などで文字列から呼び出される関数は含まれません。制約の詳細は LINT系関数の仕様と制約 を参照してください。
互換性†
- YAYA: Tc568-1以降で使用可能
関連項目†
- LINT.GetFuncUsedBy
- LINT.GetGlobalVarUsedBy
- LINT.GetLocalVarUsedBy
- LINT.GetGlobalVarLetted
- LINT.GetLocalVarLetted
- LINT.GetVarRefs
LINT.GetVarRefs†
書式†
LINT.GetVarRefs(function_name)
引数†
| Parameter | Description |
|---|---|
| function_name | 解析対象の関数名 |
戻り値†
- 成功: 1件ごとに
kind,category,name,access,line,depth,contextの7項目をカンマで区切った文字列の汎用配列 - エラー: -1
解説†
指定した関数内の変数・関数の出現と、ブロック(波括弧)の出入りを、出現ごとに1件ずつ列挙して汎用配列で返します。LINT.GetLocalVarUsedBy などと異なり、読み・書きの区別、行番号、ブロックの種類、出現した構文の種類が含まれます。
各要素はカンマ区切りなので、簡易配列としてそのまま項目を取り出せます。
_refs = LINT.GetVarRefs('OnTest')
foreach _refs ; _r {
_kind = _r[0]
_name = _r[2]
_line = TOINT(_r[4])
}
項目†
| 番号 | 項目 | 値 |
|---|---|---|
| 0 | kind | var(変数) / func(関数) / {(ブロック開始) / }(ブロック終了) |
| 1 | category | var のとき local / global、func のとき user / system、{ } のときブロックの種類 |
| 2 | name | 変数名・関数名({ } では空) |
| 3 | access | var のとき r(読み) / w(代入) / rw(読み書き)、func のとき call({ } では空) |
| 4 | line | 辞書ファイル中の行番号 |
| 5 | depth | ブロックの入れ子の深さ(関数本体が1) |
| 6 | context | 出現したステートメントの種類({ } では空) |
access†
| 値 | 対象 |
|---|---|
r |
代入先以外のすべての出現 |
w |
= := の代入先、配列要素への = の代入先(_a[0] = 1 の _a)、foreach のループ変数(2変数の foreach では両方。Tc600-3以降) |
rw |
+= -= *= /= %= ,= とその := 形、++ -- の対象(配列要素への複合代入を含む) |
代入は右辺の評価後に行われるため、同じステートメント内では代入先(w / rw)が最後に並びます。
_z = _z + 1
// var,local,_z,r,10,1,subst
// var,local,_z,w,10,1,subst
ブロックの種類({ } の category)†
| 値 | 対象 |
|---|---|
function |
関数本体 |
if / elseif / else |
if 構文 |
while |
while 構文 |
for |
for 構文 |
foreach |
foreach 構文 |
switch |
switch 構文 |
case |
case 構文 |
when / others |
case 構文内の when / others |
plain |
上記以外(単独の { } や、switch の各ブロックなど) |
} には、対応する { と同じ種類と深さが入ります。
context†
| 値 | 対象 |
|---|---|
output |
出力する数式 |
subst |
代入を含む数式 |
if / elseif / while / switch |
各構文の条件式 |
for-init / for-cond / for-step |
for a ; b ; c の a / b / c |
foreach / foreach-var |
foreach a ; b の a / b(foreach a ; k, v では k と v がどちらも foreach-var。Tc600-3以降) |
case / when |
case の式 / when の条件 |
parallel / void / return |
各構文の式 |
例えば if _c = 1 は、context が if で access が w の件として現れます。
列挙されないもの†
case構文が内部で生成するローカル変数(_CaSe_ExPr_PrEfIx_で始まる名前)- 変数・関数を含まないステートメント(
break/continue/return(式なし) /--、リテラルだけの出力など) - when のラベル(リテラル)
制約の詳細は LINT系関数の仕様と制約 を参照してください。
互換性†
- YAYA: Tc574-1以降で使用可能