This is called introspection or reflection. You have to use Specman's rf_manager
. Search for it in the docs. However, the docs don't show you all the methods that this unit has. If you really want to see all the methods, run this snippet 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 list elements, but you can use this snippet to look at the methods on a reference to an object's instance members ( not a subroutine's variable).
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;
};
};
};
In my version ( 8.2 ) this prints:
Starting the test ...
Running the test ...
rf_i = rf_field 'A', line 7 in @rf_test4
#
# RF_RFI
#
meth = rf_method 'get_type', Specman's private modules
meth = rf_method 'is_physical', Specman's private modules
meth = rf_method 'get_svtp_pack', Specman's private modules
meth = rf_method 'set_svtp_pack', Specman's private modules
meth = rf_method 'is_ungenerated', Specman's private modules
meth = rf_method 'is_const', Specman's private modules
meth = rf_method 'is_unit_instance', Specman's private modules
meth = rf_method 'is_port_instance', Specman's private modules
meth = rf_method 'is_reference', Specman's private modules
meth = rf_method 'get_constrained_types', Specman's private modules
meth = rf_method 'get_deep_copy_attr', Specman's private modules
meth = rf_method 'get_value', Specman's private modules
meth = rf_method 'set_value', Specman's private modules
meth = rf_method 'get_value_unsafe', Specman's private modules
meth = rf_method 'get_all_when_value_unsafe', Specman's private modules
meth = rf_method 'set_value_unsafe', Specman's private modules
meth = rf_method 'set_value_const_reassign_unsafe', Specman's private modules
meth = rf_method 'get_interface_port_prefix', Specman's private modules
meth = rf_method 'get_interface_port_suffix', Specman's private modules
meth = rf_method 'is_gen_intelligen', Specman's private modules
meth = rf_method 'get_long_name', Specman's private modules
meth = rf_method 'get_implicit_constraints', Specman's private modules
meth = rf_method 'make_path', Specman's private modules
meth = rf_method 'make_element', Specman's private modules
meth = rf_method 'make_list_size_path', Specman's private modules
meth = rf_method 'is_unit_reference', Specman's private modules
meth = rf_method 'get_id_name_for_port_type', Specman's private modules
meth = rf_method 'get_list_upper_bound', Specman's private modules
meth = rf_method 'get_sv_typename', Specman's private modules
meth = rf_method 'get_sv_name_under_when', Specman's private modules
meth = rf_method 'get_sv_size', Specman's private modules
meth = rf_method 'sv_add_encode_lines', Specman's private modules
meth = rf_method 'sv_get_decode_function_local_var_name', Specman's private modules
meth = rf_method 'sv_get_decode_function_local_var_decl', Specman's private modules
meth = rf_method 'sv_add_decode_lines', Specman's private modules
meth = rf_method 'get_sv_field_name', Specman's private modules
meth = rf_method 'get_sv_field', Specman's private modules
meth = rf_method 'sv_must_be_protected_field', Specman's private modules
meth = rf_method 'sv_add_get_set_field_functions', Specman's private modules
meth = rf_method 'sv_add_get_set_field_function_decs', Specman's private modules
meth = rf_method 'is_sv_exported_field', Specman's private modules
meth = rf_method 'is_sv_determinant_field', Specman's private modules
meth = rf_method 'field_configured_to_svtp_pack', Specman's private modules
meth = rf_method 'get_ovm_field_macro', Specman's private modules
meth = rf_method 'is_internal', Specman's private modules
meth = rf_method 'get', Specman's private modules
meth = rf_method 'eanalyze_lnt', Specman's private modules
No actual running requested.
Checking the test ...
Checking is complete - 0 DUT errors, 0 DUT warnings.
I'm sure there's a way to do what you want, but it can be very difficult to use Specman's reflection interface.
Merry hacking!