EN JP CN

KAST API バージョン 10.0 からの重大な変更内容

KAST API バージョン 10.0 からの重大な変更内容

KAST API は継続的に改善されています。残念ながら、これらの改善と既存のカスタム KAST チェッカーとの後方互換性が必ずあるというわけではありません。次の表は、KAST API for 10.0 における変更点と、カスタムチェッカーについて行う必要のある変更の説明を示しています。

API メンバー 変更内容 作業内容
QualifiedName 修飾子なしの QualifiedName ノードは作成されなくなりました。 これまで、ノードに修飾子がなかった場合でも、与えられた UnqualifiedName ノードの子リンク付きの QualifiedName ノードで表されていました。新しいスーパータイプ (AnyName) が、QualifiedName およびすべての UnqualifiedName オブジェクトについて導入されました。修飾子なしのタイプ QualifiedName のノードをチェッカーが期待している場合は、代わりにタイプ AnyName のノードを受け入れるようにしてください。
Op Op ノードは完全に削除されました。これまで、Op ノードは、さまざまな種類の式 (KTC_OPCODE_ASSIGN など) の操作コードの保存に使用されていました。新しい属性 Op が、MemberExprUnaryExprBinaryExpr、および OpFunc の各ノードタイプに追加されました。この新しい属性は、同じ操作コードを反映します。式ノードの @Op 属性を明示的にチェックするか、新しい組み込み関数 getOperationCode をチェック (こちらを推奨) してください。カスタム関数の場合は、ktc_getOperation を使用してください。
MemberFunc これまで、MemberFunc ノードには、すべての作業を行う "スレーブ" の FuncDef ノードが含まれていました。これが変更され、MemberFunc には FuncDef のすべての属性および子孫が直接的に含まれるようになり、子としての FuncDef ノードは含まれなくなりました。同じ機能を維持するには、MemberFunc ノードと、必要に応じて FuncDef をキャッチするようにチェッカーを変更します。
InitDeclarator 明示的な初期化子が存在しない場合は、InitDeclarator ノードが作成されなくなりました。適切に初期化された宣言はInitialzedDeclaratorノードで表されるようになったため、このような宣言に関連する KAST パターンはそれに対応するように変更する必要があります。共通スーパータイプ AnyDeclarator を使用し、初期化された宣言または初期化されていない宣言を検索できます。
Declarator Declarator ノードは完全に削除されました。このノードタイプの目的は、ポインター/リファレンス宣言のポインターおよびリファレンスに関する情報を保存することでした。ポインター/リファレンス宣言子は、具体的に新しいノードタイプ PtrDeclarator を使用します。このノードタイプは、共通スーパータイプ AnyDeclarator を他の同様のノードタイプと共有します。
MemberDeclarator MemberDeclarator タイプファミリーは完全に削除されました。汎用宣言子 (すなわち AnyDeclarator スーパータイプ) を明示的な MemberDeclarator ノードの代わりに使用します。ビットフィールド宣言の場合は、新しい BitFieldDeclarator ノードを使用できます。この変更に関連し、子孫ノードタイプ MemberDeclarators の名前が Declarators に変更されました。
DirectDeclarator DirectDeclaratorNameDeclarator に名前が変更され、AnyDeclarator スーパータイプの一部となりました。現在 DirectDeclarator が使用されている場合は、汎用宣言子を使用します。この変更に伴い、AnyDirectDeclarator タイプおよび NoDirectDeclarator タイプも削除されました。
DirectNewDeclarator DirectNewDeclarator タイプファミリーは完全に削除されました。 DirectNewDeclarator は、多数の割り当て済み要素 (new int[5]) を含む "new" 構築を表すときに使用されていました。汎用宣言子 (具体的には ArrayDeclarator) を使用します。すべての NewDeclarator タイプも完全に削除されました。
NewTypeId すべての NewTypeId タイプが削除されました。これらのタイプと汎用 TypeId タイプとの違いは、汎用宣言子へのリンクの代わりの NewDeclarator へのリンクでした。NewTypeId の代わりに TypeId を使用します。この変更に伴い、TypeId および NewTypeId に共有されていた AnyTypeId スーパータイプも削除されました。
ConvTypeId ConvTypeId は削除されました。代わりに汎用 TypeId ノードを使用します。
MaybeDeclarator タイプ Exception の子ノード MaybeDeclarator の名前が Declarator に変更されました。Maybe 接頭辞はスーパータイプで使用されるためだけに予約されるようになり、具体的なノードには接頭辞はありません。
@Id Id 属性が次のノードから削除されました: DtorIdExprNameDeclaratorNameSpec、およびTypeNameこれらのノードにはそれぞれ、タイプAnyName またはタイプ UnqualifiedNameの子が含まれます。代わりに、子孫名タイプをクエリすると、この属性に以前保存された識別子を取得できます。ただし、ノードの属性への直接アクセスを使用することは、一般的に良い対処法ではないため、KAST 開発者は代わりに組み込み (またはカスタム) の関数を使用してください。getName 組み込み関数はこの目的で使用できます。