// implementations of these two methods, or when you are setting up field macros// for an abstract class (i.e. virtual class).`define uvm_field_utils_begin(T) \ function void __m_uvm_field_automation (uvm_object tmp_data__, \ int what__, \ string str__); \ begin \ T local_data__; /* Used for copy and compare */ \ typedef T ___local_type____; \ string string_aa_key; /* Used for associative array lookups */ \ uvm_object __current_scopes[$]; \ if(what__ inside {UVM_SETINT,UVM_SETSTR,UVM_SETOBJ}) begin \ if(__m_uvm_status_container.m_do_cycle_check(this)) begin \ return; \ end \ else \ __current_scopes=__m_uvm_status_container.m_uvm_cycle_scopes; \ end \
staticprotectedintm_inst_count;externvirtualfunctionvoid__m_uvm_field_automation(uvm_objecttmp_data__,uvm_field_flag_twhat__,stringstr__);externprotectedvirtualfunctionuvm_report_objectm_get_report_object();// Compatibility methods//@uvm-compat for compatibility with 1.2externvirtualfunctionvoidset_int_local(stringfield_name,uvm_bitstream_tvalue,bitrecurse=1);//@uvm-compat for compatibility with 1.2externvirtualfunctionvoidset_string_local(stringfield_name,stringvalue,
// <do_execute_op> method.// @uvm-ieee 1800.2-2020 auto B.2.1.1`define uvm_field_utils_begin(T) \function void do_execute_op( uvm_field_op op ); \ super.do_execute_op(op); \ __m_uvm_execute_field_op(op); \endfunction : do_execute_op \local function void __m_uvm_execute_field_op( uvm_field_op __local_op__ ); \ uvm_field_flag_t local_op_type__; /* Used to avoid re-querying */ \ T local_rhs__; /* Used for $casting copy and compare */ \ uvm_resource_base local_rsrc__; /* Used for UVM_SET ops */ \ string local_rsrc_name__; \ uvm_object local_obj__; /* Used when trying to read uvm_object resources */ \ bit local_success__; /* Used when trying to read resources */ \ typedef T __local_type__; /* Used for referring to type T in field macros */ \ int local_size__; /* Used when unpacking size values */ \/* All possible policy classes */ \/* Using the same name as the do_* methods, allows macro reuse */ \