2011-02-10 11 views
1

specman 매뉴얼에서 약간은 특정 변수가 생성되었는지 여부를 즉시 결정할 수 있음을 나타냅니다. (exist()를 통해 수행 할 수있는 배열 인덱스 또는 해시 멤버 테스트에 대해 묻지 않음)specman에서 변수 또는 구조체 필드의 존재를 테스트하는 방법은 무엇입니까?

구조체 이름/경로 해석에 대한 논의에서 구조체 필드에 '유지' 해결 된 경로 내에 존재하지 않으면 오류가 발생하고 _must_be_가 주석 처리됩니다 ...

내 전자 작업은 여러 전자 코드 개발자가 지속적으로 업데이트하는 모델을 시뮬레이트하고 누군가가 단순히 새 변수를 만들 때마다 이전 버전과의 호환성을 잃게됩니다 모델 & TCM 빌드 매개 변수를 추가로 지정하십시오.

답변

2

리플렉션 인터페이스로이를 수행 할 수 있습니다. 문서에서 "rf_manager"를 찾으십시오.

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] [email protected]: struct 'foo' has a field called 'bar' 
[0] [email protected]: struct 'baz' doesn't have a field called 'bar' 

을 산출이 필드를 반복해야하는 경우 : 모든 것이 설명되어 아니, 그러나 ...

여기

, 나는 필드 baz의 존재 여부를 테스트하고 있습니다 해야 할 일 :

rf_manager.get_exact_subtype_of_instance(whatever).get_declared_fields()