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

Public Member Functions

 sarif_artifact (const char *filename)
void add_role (enum diagnostic_artifact_role role, bool embed_contents)
bool embed_contents_p () const
void populate_contents (sarif_builder &builder)
void populate_roles ()
sarif_property_bagget_or_create_properties ()
enum kind get_kind () const final override
void print (pretty_printer *pp, bool formatted) const final override
std::unique_ptr< valueclone () 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)
size_t get_num_keys () const
const char * get_key (size_t i) const
std::unique_ptr< objectclone_as_object () const
void dump (FILE *, bool formatted) const
void DEBUG_FUNCTION dump () const
virtual string * dyn_cast_string ()
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

const char * m_filename
auto_sbitmap m_roles
bool m_embed_contents
map_t m_map
auto_vec< const char * > m_keys

Detailed Description

Subclass of sarif_object for SARIF artifact objects
(SARIF v2.1.0 section 3.24).   

Member Typedef Documentation

◆ map_t

Constructor & Destructor Documentation

◆ sarif_artifact()

sarif_artifact::sarif_artifact ( const char * filename)
inline

Member Function Documentation

◆ add_role()

void sarif_artifact::add_role ( enum diagnostic_artifact_role role,
bool embed_contents )
class sarif_artifact : public sarif_object.   
Add ROLE to this artifact's roles.
If EMBED_CONTENTS is true, then flag that we will attempt to embed the
contents of this artifact when writing it out.   

References analysis_target, bitmap_bit_p, bitmap_set_bit, m_embed_contents, m_roles, result_file, and scanned_file.

Referenced by sarif_builder::get_or_create_artifact().

◆ clone()

std::unique_ptr< value > object::clone ( ) const
finaloverridevirtualinherited

Implements json::value.

References clone_as_object().

◆ clone_as_object()

std::unique_ptr< object > object::clone_as_object ( ) const
inherited

◆ 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 dyn_cast_object(), and final().

Referenced by dyn_cast_object().

◆ dyn_cast_string()

virtual string * json::value::dyn_cast_string ( )
inlinevirtualinherited

Reimplemented in json::string.

◆ embed_contents_p()

bool sarif_artifact::embed_contents_p ( ) const
inline

◆ get()

◆ get_key()

const char * json::object::get_key ( size_t i) const
inlineinherited

References i, and m_keys.

Referenced by copy_any_property_bag().

◆ get_kind()

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

Implements json::value.

References final(), and json::JSON_OBJECT.

◆ get_num_keys()

size_t json::object::get_num_keys ( ) const
inlineinherited

References m_keys.

Referenced by copy_any_property_bag().

◆ get_or_create_properties()

◆ get_pointer_token()

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

References m_pointer_token.

◆ is_empty()

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

References m_map.

◆ populate_contents()

void sarif_artifact::populate_contents ( sarif_builder & builder)
Populate the "contents" property (SARIF v2.1.0 section 3.24.8).
We do this after initialization to
(a) ensure that any charset options have been set
(b) only populate it for artifacts that are referenced by a location.   

References m_filename, sarif_builder::maybe_make_artifact_content_object(), and json::object::set().

Referenced by sarif_builder::make_run_object().

◆ populate_roles()

void sarif_artifact::populate_roles ( )
Populate the "roles" property of this sarif_artifact with a new
json::array for the artifact.roles property (SARIF v2.1.0 section 3.24.6)
containing strings such as "analysisTarget", "resultFile"
and/or "tracedFile".   

References bitmap_bit_p, bitmap_empty_p(), get_artifact_role_string(), i, m_roles, NUM_ROLES, and json::object::set().

Referenced by sarif_builder::make_run_object().

◆ 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(), copy_any_property_bag(), 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(), 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(), sarif_property_bag::set_graph(), 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(), 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_embed_contents

bool sarif_artifact::m_embed_contents
private

◆ m_filename

const char* sarif_artifact::m_filename
private

◆ m_keys

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

◆ m_map

map_t json::object::m_map
privateinherited

◆ m_pointer_token

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

◆ m_roles

auto_sbitmap sarif_artifact::m_roles
private

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