LINT.GetVarRefs¶
Category: デバッグ
Signature¶
LINT.GetVarRefs(function_name)
Parameters¶
| Parameter | Description |
|---|---|
| function_name | 解析対象の関数名 |
Returns¶
- 成功: 1件ごとに
kind,category,name,access,line,depth,contextの7項目をカンマで区切った文字列の汎用配列 - エラー: -1
Description¶
指定した関数内の変数・関数の出現と、ブロック(波括弧)の出入りを、出現ごとに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系関数の仕様と制約 を参照してください。
Compatibility¶
- YAYA: Tc574-1以降で使用可能
See Also¶
- LINT.GetFuncUsedBy
- LINT.GetUserDefFuncUsedBy
- LINT.GetGlobalVarUsedBy
- LINT.GetGlobalVarLetted
- LINT.GetLocalVarUsedBy
- LINT.GetLocalVarLetted