GCC Middle and Back End API Reference
sarif_code_flow Class Reference
Inheritance diagram for sarif_code_flow:
Collaboration diagram for sarif_code_flow:

Public Member Functions

 sarif_code_flow (sarif_result &parent, unsigned idx_within_parent)
 
sarif_resultget_parent () const
 
unsigned get_index_within_parent () const
 
sarif_thread_flowget_or_append_thread_flow (const diagnostic_thread &thread, diagnostic_thread_id_t thread_id)
 
sarif_thread_flowget_thread_flow (diagnostic_thread_id_t thread_id)
 
void add_location (sarif_thread_flow_location &)
 
sarif_thread_flow_locationget_thread_flow_loc_obj (diagnostic_event_id_t event_id) const
 
sarif_property_bagget_or_create_properties ()
 
enum kind get_kind () const final override
 
void print (pretty_printer *pp, bool formatted) const final override
 
objectdyn_cast_object () final override
 
bool is_empty () const
 
void set (const char *key, value *v)
 
template<typename JsonType>
void set (const char *key, std::unique_ptr< JsonType > v)
 
valueget (const char *key) const
 
void set_string (const char *key, const char *utf8_value)
 
void set_integer (const char *key, long v)
 
void set_float (const char *key, double v)
 
void set_bool (const char *key, bool v)
 
void dump (FILE *, bool formatted) const
 
void DEBUG_FUNCTION dump () const
 
const pointer::token & get_pointer_token () const
 

Static Public Member Functions

static int compare (const json::object &obj_a, const json::object &obj_b)
 
static int compare (const json::value &val_a, const json::value &val_b)
 

Data Fields

pointer::token m_pointer_token
 

Private Types

typedef hash_map< char *, value *, simple_hashmap_traits< nofree_string_hash, value * > > map_t
 

Private Attributes

sarif_resultm_parent
 
const unsigned m_idx_within_parent
 
hash_map< int_hash< diagnostic_thread_id_t, -1, -2 >, sarif_thread_flow * > m_thread_id_map
 
json::arraym_thread_flows_arr
 
std::vector< sarif_thread_flow_location * > m_all_tfl_objs
 
map_t m_map
 
auto_vec< const char * > m_keys
 

Detailed Description

Subclass of sarif_object for SARIF "codeFlow" objects (SARIF v2.1.0 section 3.36).

Member Typedef Documentation

◆ map_t

Constructor & Destructor Documentation

◆ sarif_code_flow()

sarif_code_flow::sarif_code_flow ( sarif_result & parent,
unsigned idx_within_parent )
class sarif_code_flow : public sarif_object.

References m_idx_within_parent, m_parent, m_thread_flows_arr, and json::object::set().

Member Function Documentation

◆ add_location()

void sarif_code_flow::add_location ( sarif_thread_flow_location & tfl_obj)

References m_all_tfl_objs.

◆ compare() [1/2]

int object::compare ( const json::object & obj_a,
const json::object & obj_b )
staticinherited
Subroutine of json::compare for comparing a pairs of objects.

References json::value::compare(), gcc_assert, get(), m_keys, and m_map.

Referenced by json::value::compare().

◆ compare() [2/2]

int value::compare ( const json::value & val_a,
const json::value & val_b )
staticinherited
A deterministic total ordering for comparing json values, so that we can e.g. put them in std::map. This is intended to follow the condition for equality described in the JSON Schema standard (§4.3, “Instance equality”), as referenced by SARIF v2.1.0 (§3.7.3 "Array properties with unique values"), but has the following limitations: - numbers are supposed to be checked for "the same mathematical value", but in this implementation int vs float numbers won't compare as equal, and float number comparison is bitwise - strings are supposed to be "the same codepoint-for-codepoint", but this implementation doesn't take into account canonicalization issues.

References json::object::compare(), compare(), gcc_unreachable, json::float_number::get(), json::integer_number::get(), get_kind(), json::string::get_string(), json::JSON_ARRAY, json::JSON_FALSE, json::JSON_FLOAT, json::JSON_INTEGER, json::JSON_NULL, json::JSON_OBJECT, json::JSON_STRING, json::JSON_TRUE, and json::array::size().

Referenced by json::object::compare(), compare(), and sarif_array_of_unique< JsonElementType >::comparator_t::operator()().

◆ dump() [1/2]

void value::dump ( ) const
inherited
A convenience function for debugging. Dump to stderr with formatting, and a trailing newline.

References dump().

◆ dump() [2/2]

void value::dump ( FILE * outf,
bool formatted ) const
inherited
class json::value.
Dump this json::value tree to OUTF. The key/value pairs of json::objects are printed in the order in which the keys were originally inserted.

References output_buffer::m_stream, pp_buffer(), pp_flush(), and print().

Referenced by dump(), generate_results(), and sarif_serialization_format_json::write_to_file().

◆ dyn_cast_object()

object * json::object::dyn_cast_object ( )
inlinefinaloverridevirtualinherited

Reimplemented from json::value.

References final().

◆ get()

◆ get_index_within_parent()

unsigned sarif_code_flow::get_index_within_parent ( ) const
inline

References m_idx_within_parent.

Referenced by make_sarif_url_for_event().

◆ get_kind()

enum kind json::object::get_kind ( ) const
inlinefinaloverridevirtualinherited

Implements json::value.

References final(), and json::JSON_OBJECT.

◆ get_or_append_thread_flow()

sarif_thread_flow & sarif_code_flow::get_or_append_thread_flow ( const diagnostic_thread & thread,
diagnostic_thread_id_t thread_id )

◆ get_or_create_properties()

sarif_property_bag & sarif_object::get_or_create_properties ( )
inherited

◆ get_parent()

sarif_result & sarif_code_flow::get_parent ( ) const
inline

References m_parent.

Referenced by make_sarif_url_for_event().

◆ get_pointer_token()

const pointer::token & json::value::get_pointer_token ( ) const
inlineinherited

References m_pointer_token.

◆ get_thread_flow()

sarif_thread_flow & sarif_code_flow::get_thread_flow ( diagnostic_thread_id_t thread_id)

References gcc_assert, and m_thread_id_map.

◆ get_thread_flow_loc_obj()

◆ is_empty()

bool json::object::is_empty ( ) const
inlineinherited

References m_map.

◆ print()

void object::print ( pretty_printer * pp,
bool formatted ) const
finaloverridevirtualinherited

◆ set() [1/2]

template<typename JsonType>
void json::object::set ( const char * key,
std::unique_ptr< JsonType > v )
inlineinherited

References set().

◆ set() [2/2]

void object::set ( const char * key,
value * v )
inherited
Set the json::value * for KEY, taking ownership of V (and taking a copy of KEY if necessary).

References gcc_assert, m_keys, m_map, and json::value::m_pointer_token.

Referenced by optrecord_json_writer::add_pass_list(), optrecord_json_writer::add_record(), sarif_location_manager::add_related_location(), compiler_data_hooks::add_sarif_invocation_properties(), generate_results(), sarif_builder::get_or_create_artifact(), sarif_object::get_or_create_properties(), optrecord_json_writer::inlining_chain_to_json(), json_set_prime_path_coverage(), sarif_location_relationship::lazily_add_kind(), sarif_location::lazily_add_relationships_array(), sarif_builder::make_fix_object(), sarif_builder::make_replacement_object(), sarif_builder::make_result_object(), sarif_builder::make_run_object(), sarif_builder::make_tool_object(), sarif_builder::make_top_level_object(), infinite_loop_diagnostic::maybe_add_sarif_properties(), sarif_builder::maybe_make_cwe_taxonomy_object(), sarif_builder::maybe_make_physical_location_object(), json_output_format::on_report_diagnostic(), optrecord_json_writer::optinfo_to_json(), optrecord_json_writer::optrecord_json_writer(), output_intermediate_json_line(), output_json_intermediate_file(), optrecord_json_writer::pass_to_json(), sarif_artifact::populate_contents(), sarif_artifact::populate_roles(), sarif_builder::populate_thread_flow_location_object(), sarif_invocation::prepare_to_flush(), sarif_code_flow::sarif_code_flow(), sarif_ice_notification::sarif_ice_notification(), sarif_invocation::sarif_invocation(), sarif_thread_flow::sarif_thread_flow(), set(), sarif_builder::set_any_logical_locs_arr(), set_bool(), set_float(), set_integer(), sarif_property_bag::set_logical_location(), and set_string().

◆ set_bool()

void object::set_bool ( const char * key,
bool v )
inherited
Set value of KEY within this object to the JSON literal true or false, based on V.

References set().

Referenced by sarif_builder::make_location_object(), json_output_format::on_report_diagnostic(), output_intermediate_json_line(), and sarif_invocation::prepare_to_flush().

◆ set_float()

void object::set_float ( const char * key,
double v )
inherited
Set value of KEY within this object to a JSON floating point value based on V.

References set().

◆ set_integer()

◆ set_string()

Field Documentation

◆ m_all_tfl_objs

std::vector<sarif_thread_flow_location *> sarif_code_flow::m_all_tfl_objs
private

◆ m_idx_within_parent

const unsigned sarif_code_flow::m_idx_within_parent
private

◆ m_keys

auto_vec<const char *> json::object::m_keys
privateinherited

Referenced by compare(), print(), and set().

◆ m_map

map_t json::object::m_map
privateinherited

Referenced by compare(), get(), is_empty(), print(), set(), and ~object().

◆ m_parent

sarif_result& sarif_code_flow::m_parent
private

Referenced by get_parent(), and sarif_code_flow().

◆ m_pointer_token

pointer::token json::value::m_pointer_token
inherited

◆ m_thread_flows_arr

json::array* sarif_code_flow::m_thread_flows_arr
private

◆ m_thread_id_map

hash_map<int_hash<diagnostic_thread_id_t, -1, -2>, sarif_thread_flow *> sarif_code_flow::m_thread_id_map
private

The documentation for this class was generated from the following file: