This is called introspection or reflection. You must use Specman rf_manager. Find it in the docs. However, the documents do not show you all the methods that this unit has. If you really want to see all the methods, run this piece of code:
extend sys {
run() is also {
var rf_man : rf_struct = rf_manager.get_exact_subtype_of_instance(rf_manager);
out(" RF Manager:");
for each (meth) in rf_man.get_declared_methods() {
print meth;
};
};
};
I'm not sure how to iterate through the elements of a list, but you can use this snippet to look at the methods for referencing members of an instance of an object (rather than a subroutine).
extend sys {
A : list of uint;
keep A == {1;3;2};
run() is also {
var variable_name := "A";
var rf_obj: rf_struct = rf_manager.get_exact_subtype_of_instance(sys);
var rf_i : rf_field = rf_obj.get_field(variable_name);
print rf_i;
var rf_rf_i := rf_manager.get_exact_subtype_of_instance(rf_i);
out ( "#\n# RF_RFI\n#");
for each (meth) in rf_rf_i.get_declared_methods() {
print meth;
};
};
};
(8.2) :
... ... rf_i = rf_field 'A', 7 @rf_test4 # # RF_RFI # meth = rf_method 'get_type', Specman meth = rf_method 'is_physical', Specman met = rf_method 'get_svtp_pack', Specman met = rf_method 'set_svtp_pack', Specman meth = rf_method 'is_unenerated', Specman meth = rf_method 'is_const', Specman meth = rf_method 'is_unit_instance', Specman meth = rf_method 'is_port_instance', Specman meth = rf_method 'is_reference', Specman met = rf_method 'get_constrained_types', Specman met = rf_method 'get_deep_copy_attr', Specman meth = rf_method 'get_value', Specman meth = rf_method 'set_value', Specman meth = rf_method 'get_value_unsafe', Specman meth = rf_method 'get_all_when_value_unsafe', Specman met = rf_method 'set_value_unsafe', Specman met = rf_method 'set_value_const_reassign_unsafe', Specman met = rf_method 'get_interface_port_prefix', Specman met = rf_method 'get_interface_port_suffix', Specman meth = rf_method 'is_gen_intelligen', Specman meth = rf_method 'get_long_name', Specman met = rf_method 'get_implicit_constraints', Specman meth = rf_method 'make_path', Specman meth = rf_method 'make_element', Specman meth = rf_method 'make_list_size_path', Specman meth = rf_method 'is_unit_reference', Specman meth = rf_method 'get_id_name_for_port_type', Specman met = rf_method 'get_list_upper_bound', Specman meth = rf_method 'get_sv_typename', Specman meth = rf_method 'get_sv_name_under_when', Specman met = rf_method 'get_sv_size', Specman meth = rf_method 'sv_add_encode_lines', Specman meth = rf_method 'sv_get_decode_function_local_var_name', Specman met = rf_method 'sv_get_decode_function_local_var_decl', Specman met = rf_method 'sv_add_decode_lines', Specman meth = rf_method 'get_sv_field_name', Specman meth = rf_method 'get_sv_field', Specman met = rf_method 'sv_must_be_protected_field', Specman met = rf_method 'sv_add_get_set_field_functions', Specman met = rf_method 'sv_add_get_set_field_function_decs', Specman met = rf_method 'is_sv_exported_field', Specman meth = rf_method 'is_sv_determinant_field', Specman met = rf_method 'field_configured_to_svtp_pack', Specman meth = rf_method 'get_ovm_field_macro', Specman meth = rf_method 'is_internal', Specman meth = rf_method 'get', Specman meth = rf_method 'eanalyze_lnt', Specman . ...
Checking is complete - 0 DUT errors, 0 DUT warnings.
, , , Specman.
!