1

specman のマニュアルには、特定の変数が作成されたかどうかをオンザフライで判断できることを示すものはほとんどありません。(exists() を介して実行できる、配列インデックスまたはハッシュ メンバーのテストについては質問しません)

構造体名/パスの解決に関する議論で、解決されたパス内に存在しない構造体フィールドで「キープ」を試みるとエラーが発生し、_must_be_ がコメントアウトされることに気付いただけです...

私の仕事には、複数の e-code 開発者によって絶えず更新されるモデルのシミュレーションが含まれており、モデルと TCM ビルド パラメーターをさらに指定するために誰かが新しい変数を作成するだけで、テスト ベンチの後方互換性が失われます。

4

1 に答える 1

2

これは、リフレクションインターフェイスを使用して行うことができます。ドキュメントで「rf_manager」を検索します。すべてが文書化されているわけではありませんが...

ここでは、フィールドの存在をテストしていますbaz

struct foo {
   bar : int;
};

struct baz {
};

extend sys {
   run() is also {
      var f : foo = new;
      var rf_f : rf_struct = rf_manager.get_exact_subtype_of_instance(f);
      var f_bar_field : rf_field = rf_f.get_field("bar");

      if f_bar_field != NULL {
         message(NONE,"struct 'foo' has a field called 'bar'");
      } else {
         message(NONE,"struct 'foo' doesn't have a field called 'bar'");
      };

      var b : baz = new;
      var rf_b : rf_struct = rf_manager.get_exact_subtype_of_instance(b);
      var b_bar_field : rf_field = rf_b.get_field("bar");

      if b_bar_field != NULL {
         message(NONE,"struct 'baz' has a field called 'bar'");
      } else {
         message(NONE,"struct 'baz' doesn't have a field called 'bar'");
      };

   };
};

これにより、

[...]
Starting the test ...
Running the test ...
[0] sys-@0: struct 'foo' has a field called 'bar'
[0] sys-@0: struct 'baz' doesn't have a field called 'bar'

フィールドを反復処理する必要がある場合は、次のようにします。

rf_manager.get_exact_subtype_of_instance(whatever).get_declared_fields()
于 2011-02-11T21:43:52.670 に答える