No functional change intended.
gcc/analyzer/ChangeLog:
* analyzer.cc: Include "make-unique.h". Convert "to_json"
functions to use std::unique_ptr.
* call-string.cc: Likewise.
* constraint-manager.cc: Likewise.
* diagnostic-manager.cc: Likewise.
* engine.cc: Likewise.
* program-point.cc: Likewise.
* program-state.cc: Likewise.
* ranges.cc: Likewise.
* region-model.cc: Likewise.
* region.cc: Likewise.
* svalue.cc: Likewise.
* sm.cc: Likewise.
* store.cc: Likewise.
* supergraph.cc: Likewise.
* analyzer.h: Convert "to_json" functions to return
std::unique_ptr.
* call-string.h: Likewise.
* constraint-manager.h: Likewise.
(bounded_range::set_json_attr): Pass "obj" by reference.
* diagnostic-manager.h: Convert "to_json" functions to return
std::unique_ptr.
* exploded-graph.h: Likewise.
* program-point.h: Likewise.
* program-state.h: Likewise.
* ranges.h: Likewise.
* region-model.h: Likewise.
* region.h: Likewise.
* sm.h: Likewise.
* store.h: Likewise.
* supergraph.h: Likewise.
* svalue.h: Likewise.
Signed-off-by: David Malcolm <dmalcolm@redhat.com>
#include "tree-pretty-print.h"
#include "diagnostic-event-id.h"
#include "tree-dfa.h"
+#include "make-unique.h"
#if ENABLE_ANALYZER
This is intended for debugging the analyzer rather than serialization and
thus is a string (or null, for NULL_TREE). */
-json::value *
+std::unique_ptr<json::value>
tree_to_json (tree node)
{
if (!node)
- return new json::literal (json::JSON_NULL);
+ return ::make_unique<json::literal> (json::JSON_NULL);
pretty_printer pp;
dump_generic_node (&pp, node, 0, TDF_VOPS|TDF_MEMSYMS, false);
- return new json::string (pp_formatted_text (&pp));
+ return ::make_unique<json::string> (pp_formatted_text (&pp));
}
/* Generate a JSON value for EVENT_ID.
thus is a string matching those seen in event messags (or null,
for unknown). */
-json::value *
+std::unique_ptr<json::value>
diagnostic_event_id_to_json (const diagnostic_event_id_t &event_id)
{
if (event_id.known_p ())
{
pretty_printer pp;
pp_printf (&pp, "%@", &event_id);
- return new json::string (pp_formatted_text (&pp));
+ return ::make_unique<json::string> (pp_formatted_text (&pp));
}
else
- return new json::literal (json::JSON_NULL);
+ return ::make_unique<json::literal> (json::JSON_NULL);
}
/* Generate a JSON value for OFFSET.
This is intended for debugging the analyzer rather than serialization and
thus is a string. */
-json::value *
+std::unique_ptr<json::value>
bit_offset_to_json (const bit_offset_t &offset)
{
pretty_printer pp;
pp_wide_int_large (&pp, offset, SIGNED);
- return new json::string (pp_formatted_text (&pp));
+ return ::make_unique<json::string> (pp_formatted_text (&pp));
}
/* Generate a JSON value for OFFSET.
This is intended for debugging the analyzer rather than serialization and
thus is a string. */
-json::value *
+std::unique_ptr<json::value>
byte_offset_to_json (const byte_offset_t &offset)
{
pretty_printer pp;
pp_wide_int_large (&pp, offset, SIGNED);
- return new json::string (pp_formatted_text (&pp));
+ return ::make_unique<json::string> (pp_formatted_text (&pp));
}
/* Workaround for lack of const-correctness of ssa_default_def. */
extern FILE *get_or_create_any_logfile ();
-extern json::value *
+extern std::unique_ptr<json::value>
tree_to_json (tree node);
-extern json::value *
+extern std::unique_ptr<json::value>
diagnostic_event_id_to_json (const diagnostic_event_id_t &);
-extern json::value *
+extern std::unique_ptr<json::value>
bit_offset_to_json (const bit_offset_t &offset);
-extern json::value *
+extern std::unique_ptr<json::value>
byte_offset_to_json (const byte_offset_t &offset);
extern tristate
#include "analyzer/analyzer-logging.h"
#include "analyzer/call-string.h"
#include "analyzer/supergraph.h"
+#include "make-unique.h"
#if ENABLE_ANALYZER
"funcname" : str},
...for each element in the callstring]. */
-json::value *
+std::unique_ptr<json::value>
call_string::to_json () const
{
- json::array *arr = new json::array ();
+ auto arr = ::make_unique<json::array> ();
for (const call_string::element_t &e : m_elements)
{
- json::object *e_obj = new json::object ();
+ auto e_obj = ::make_unique<json::object> ();
e_obj->set_integer ("src_snode_idx", e.m_callee->m_index);
e_obj->set_integer ("dst_snode_idx", e.m_caller->m_index);
e_obj->set_string ("funcname", function_name (e.m_caller->m_fun));
- arr->append (e_obj);
+ arr->append (std::move (e_obj));
}
return arr;
void print (pretty_printer *pp) const;
- json::value *to_json () const;
+ std::unique_ptr<json::value> to_json () const;
bool empty_p () const { return m_elements.is_empty (); }
#include "analyzer/call-summary.h"
#include "analyzer/analyzer-selftests.h"
#include "tree-pretty-print.h"
+#include "make-unique.h"
#if ENABLE_ANALYZER
pp_newline (&pp);
}
-json::object *
+std::unique_ptr<json::object>
bounded_range::to_json () const
{
- json::object *range_obj = new json::object ();
- set_json_attr (range_obj, "lower", m_lower);
- set_json_attr (range_obj, "upper", m_upper);
+ auto range_obj = ::make_unique<json::object> ();
+ set_json_attr (*range_obj, "lower", m_lower);
+ set_json_attr (*range_obj, "upper", m_upper);
return range_obj;
}
/* Subroutine of bounded_range::to_json. */
void
-bounded_range::set_json_attr (json::object *obj, const char *name, tree value)
+bounded_range::set_json_attr (json::object &obj, const char *name, tree value)
{
pretty_printer pp;
pp_format_decoder (&pp) = default_tree_printer;
pp_printf (&pp, "%E", value);
- obj->set_string (name, pp_formatted_text (&pp));
+ obj.set_string (name, pp_formatted_text (&pp));
}
pp_newline (&pp);
}
-json::value *
+std::unique_ptr<json::value>
bounded_ranges::to_json () const
{
- json::array *arr_obj = new json::array ();
+ auto arr_obj = ::make_unique<json::array> ();
for (unsigned i = 0; i < m_ranges.length (); ++i)
arr_obj->append (m_ranges[i].to_json ());
{"svals" : [str],
"constant" : optional str}. */
-json::object *
+std::unique_ptr<json::object>
equiv_class::to_json () const
{
- json::object *ec_obj = new json::object ();
+ auto ec_obj = ::make_unique<json::object> ();
- json::array *sval_arr = new json::array ();
+ auto sval_arr = ::make_unique<json::array> ();
for (const svalue *sval : m_vars)
sval_arr->append (sval->to_json ());
- ec_obj->set ("svals", sval_arr);
+ ec_obj->set ("svals", std::move (sval_arr));
if (m_constant)
{
"op" : str,
"rhs" : int, the EC index}. */
-json::object *
+std::unique_ptr<json::object>
constraint::to_json () const
{
- json::object *con_obj = new json::object ();
+ auto con_obj = ::make_unique<json::object> ();
con_obj->set_integer ("lhs", m_lhs.as_int ());
con_obj->set_string ("op", constraint_op_code (m_op));
m_ranges->dump_to_pp (pp, true);
}
-json::object *
+std::unique_ptr<json::object>
bounded_ranges_constraint::to_json () const
{
- json::object *con_obj = new json::object ();
+ auto con_obj = ::make_unique<json::object> ();
con_obj->set_integer ("ec", m_ec_id.as_int ());
con_obj->set ("ranges", m_ranges->to_json ());
{"ecs" : array of objects, one per equiv_class
"constraints" : array of objects, one per constraint}. */
-json::object *
+std::unique_ptr<json::object>
constraint_manager::to_json () const
{
- json::object *cm_obj = new json::object ();
+ auto cm_obj = ::make_unique<json::object> ();
/* Equivalence classes. */
{
- json::array *ec_arr = new json::array ();
+ auto ec_arr = ::make_unique<json::array> ();
for (const equiv_class *ec : m_equiv_classes)
ec_arr->append (ec->to_json ());
- cm_obj->set ("ecs", ec_arr);
+ cm_obj->set ("ecs", std::move (ec_arr));
}
/* Constraints. */
{
- json::array *con_arr = new json::array ();
+ auto con_arr = ::make_unique<json::array> ();
for (const constraint &c : m_constraints)
con_arr->append (c.to_json ());
- cm_obj->set ("constraints", con_arr);
+ cm_obj->set ("constraints", std::move (con_arr));
}
/* m_bounded_ranges_constraints. */
{
- json::array *con_arr = new json::array ();
+ auto con_arr = ::make_unique<json::array> ();
for (const auto &c : m_bounded_ranges_constraints)
con_arr->append (c.to_json ());
- cm_obj->set ("bounded_ranges_constraints", con_arr);
+ cm_obj->set ("bounded_ranges_constraints", std::move (con_arr));
}
return cm_obj;
void dump_to_pp (pretty_printer *pp, bool show_types) const;
void dump (bool show_types) const;
- json::object *to_json () const;
+ std::unique_ptr<json::object> to_json () const;
std::unique_ptr<text_art::widget>
make_dump_widget (const text_art::dump_widget_info &dwi) const;
tree m_upper;
private:
- static void set_json_attr (json::object *obj, const char *name, tree value);
+ static void set_json_attr (json::object &obj, const char *name, tree value);
};
/* A collection of bounded_range instances, suitable
void dump_to_pp (pretty_printer *pp, bool show_types) const;
void dump (bool show_types) const;
- json::value *to_json () const;
+ std::unique_ptr<json::value> to_json () const;
void add_to_dump_widget (text_art::tree_widget &parent,
const text_art::dump_widget_info &dwi) const;
void print (pretty_printer *pp) const;
- json::object *to_json () const;
+ std::unique_ptr<json::object> to_json () const;
std::unique_ptr<text_art::tree_widget>
make_dump_widget (const text_art::dump_widget_info &dwi,
void print (pretty_printer *pp, const constraint_manager &cm) const;
- json::object *to_json () const;
+ std::unique_ptr<json::object> to_json () const;
std::unique_ptr<text_art::widget>
make_dump_widget (const text_art::dump_widget_info &dwi,
void print (pretty_printer *pp, const constraint_manager &cm) const;
- json::object *to_json () const;
+ std::unique_ptr<json::object> to_json () const;
bool operator== (const bounded_ranges_constraint &other) const;
bool operator!= (const bounded_ranges_constraint &other) const
void dump (FILE *fp) const;
void dump () const;
- json::object *to_json () const;
+ std::unique_ptr<json::object> to_json () const;
std::unique_ptr<text_art::tree_widget>
make_dump_widget (const text_art::dump_widget_info &dwi) const;
"pending_diagnostic": str,
"idx": int}. */
-json::object *
+std::unique_ptr<json::object>
saved_diagnostic::to_json () const
{
- json::object *sd_obj = new json::object ();
+ auto sd_obj = ::make_unique<json::object> ();
if (m_sm)
sd_obj->set_string ("sm", m_sm->get_name ());
/* Return a new json::object of the form
{"diagnostics" : [obj for saved_diagnostic]}. */
-json::object *
+std::unique_ptr<json::object>
diagnostic_manager::to_json () const
{
- json::object *dm_obj = new json::object ();
+ auto dm_obj = ::make_unique<json::object> ();
{
- json::array *sd_arr = new json::array ();
+ auto sd_arr = ::make_unique<json::array> ();
int i;
saved_diagnostic *sd;
FOR_EACH_VEC_ELT (m_saved_diagnostics, i, sd)
sd_arr->append (sd->to_json ());
- dm_obj->set ("diagnostics", sd_arr);
+ dm_obj->set ("diagnostics", std::move (sd_arr));
}
return dm_obj;
void add_note (std::unique_ptr<pending_note> pn);
void add_event (std::unique_ptr<checker_event> event);
- json::object *to_json () const;
+ std::unique_ptr<json::object> to_json () const;
void dump_dot_id (pretty_printer *pp) const;
void dump_as_dot_node (pretty_printer *pp) const;
engine *get_engine () const { return m_eng; }
- json::object *to_json () const;
+ std::unique_ptr<json::object> to_json () const;
bool add_diagnostic (const state_machine *sm,
const pending_location &ploc,
"idx" : int,
"processed_stmts" : int}. */
-json::object *
+std::unique_ptr<json::object>
exploded_node::to_json (const extrinsic_state &ext_state) const
{
- json::object *enode_obj = new json::object ();
+ auto enode_obj = ::make_unique<json::object> ();
enode_obj->set ("point", get_point ().to_json ());
enode_obj->set ("state", get_state ().to_json (ext_state));
"sedge": (optional) object for the superedge, if any,
"custom": (optional) str, a description, if this is a custom edge}. */
-json::object *
+std::unique_ptr<json::object>
exploded_edge::to_json () const
{
- json::object *eedge_obj = new json::object ();
+ auto eedge_obj = ::make_unique<json::object> ();
eedge_obj->set_integer ("src_idx", m_src->m_index);
eedge_obj->set_integer ("dst_idx", m_dest->m_index);
if (m_sedge)
/* Return a new json::array of per-snode SCC ids. */
-json::array *
+std::unique_ptr<json::array>
strongly_connected_components::to_json () const
{
- json::array *scc_arr = new json::array ();
+ auto scc_arr = ::make_unique<json::array> ();
for (int i = 0; i < m_sg.num_nodes (); i++)
scc_arr->append (new json::integer_number (get_scc_id (i)));
return scc_arr;
/* Return a new json::object of the form
{"scc" : [per-snode-IDs]}, */
-json::object *
+std::unique_ptr<json::object>
worklist::to_json () const
{
- json::object *worklist_obj = new json::object ();
+ auto worklist_obj = ::make_unique<json::object> ();
worklist_obj->set ("scc", m_scc.to_json ());
"ext_state": object for extrinsic_state,
"diagnostic_manager": object for diagnostic_manager}. */
-json::object *
+std::unique_ptr<json::object>
exploded_graph::to_json () const
{
- json::object *egraph_obj = new json::object ();
+ auto egraph_obj = ::make_unique<json::object> ();
/* Nodes. */
{
- json::array *nodes_arr = new json::array ();
+ auto nodes_arr = ::make_unique<json::array> ();
unsigned i;
exploded_node *n;
FOR_EACH_VEC_ELT (m_nodes, i, n)
nodes_arr->append (n->to_json (m_ext_state));
- egraph_obj->set ("nodes", nodes_arr);
+ egraph_obj->set ("nodes", std::move (nodes_arr));
}
/* Edges. */
{
- json::array *edges_arr = new json::array ();
+ auto edges_arr = ::make_unique<json::array> ();
unsigned i;
exploded_edge *n;
FOR_EACH_VEC_ELT (m_edges, i, n)
edges_arr->append (n->to_json ());
- egraph_obj->set ("edges", edges_arr);
+ egraph_obj->set ("edges", std::move (edges_arr));
}
/* m_sg is JSONified at the top-level. */
return;
}
- json::object *toplev_obj = new json::object ();
+ auto toplev_obj = ::make_unique<json::object> ();
toplev_obj->set ("sgraph", sg.to_json ());
toplev_obj->set ("egraph", eg.to_json ());
toplev_obj->print (&pp, flag_diagnostics_json_formatting);
pp_formatted_text (&pp);
- delete toplev_obj;
-
if (gzputs (output, pp_formatted_text (&pp)) == EOF
|| gzclose (output))
error_at (UNKNOWN_LOCATION, "error writing %qs", filename);
void dump_processed_stmts (pretty_printer *pp) const;
void dump_saved_diagnostics (pretty_printer *pp) const;
- json::object *to_json (const extrinsic_state &ext_state) const;
+ std::unique_ptr<json::object> to_json (const extrinsic_state &ext_state) const;
/* The result of on_stmt. */
struct on_stmt_flags
const final override;
void dump_dot_label (pretty_printer *pp) const;
- json::object *to_json () const;
+ std::unique_ptr<json::object> to_json () const;
//private:
const superedge *const m_sedge;
void dump () const;
- json::array *to_json () const;
+ std::unique_ptr<json::array> to_json () const;
private:
struct per_node_data
return m_scc.get_scc_id (snode.m_index);
}
- json::object *to_json () const;
+ std::unique_ptr<json::object> to_json () const;
private:
class key_t
void dump_states_for_supernode (FILE *, const supernode *snode) const;
void dump_exploded_nodes () const;
- json::object *to_json () const;
+ std::unique_ptr<json::object> to_json () const;
exploded_node *get_node_by_index (int idx) const;
#include "analyzer/exploded-graph.h"
#include "analyzer/analysis-plan.h"
#include "analyzer/inlining-iterator.h"
+#include "make-unique.h"
#if ENABLE_ANALYZER
"stmt_idx": int (only for kind=='PK_BEFORE_STMT',
"call_string": object for the call_string}. */
-json::object *
+std::unique_ptr<json::object>
program_point::to_json () const
{
- json::object *point_obj = new json::object ();
+ auto point_obj = ::make_unique<json::object> ();
point_obj->set_string ("kind", point_kind_to_string (get_kind ()));
void print (pretty_printer *pp, const format &f) const;
void dump () const;
- json::object *to_json () const;
+ std::unique_ptr<json::object> to_json () const;
hashval_t hash () const;
bool operator== (const program_point &other) const
#include "analyzer/analyzer-selftests.h"
#include "text-art/tree-widget.h"
#include "text-art/dump.h"
+#include "make-unique.h"
#if ENABLE_ANALYZER
/* Return a new json::object of the form
{"checkers" : array of objects, one for each state_machine}. */
-json::object *
+std::unique_ptr<json::object>
extrinsic_state::to_json () const
{
- json::object *ext_state_obj = new json::object ();
+ auto ext_state_obj = ::make_unique<json::object> ();
{
- json::array *checkers_arr = new json::array ();
+ auto checkers_arr = ::make_unique<json::array> ();
unsigned i;
state_machine *sm;
FOR_EACH_VEC_ELT (m_checkers, i, sm)
checkers_arr->append (sm->to_json ());
- ext_state_obj->set ("checkers", checkers_arr);
+ ext_state_obj->set ("checkers", std::move (checkers_arr));
}
return ext_state_obj;
{"global" : (optional) value for global state,
SVAL_DESC : value for state}. */
-json::object *
+std::unique_ptr<json::object>
sm_state_map::to_json () const
{
- json::object *map_obj = new json::object ();
+ auto map_obj = ::make_unique<json::object> ();
if (m_global_state != m_sm.get_start_state ())
map_obj->set ("global", m_global_state->to_json ());
"checkers" : { STATE_NAME : object per sm_state_map },
"valid" : true/false}. */
-json::object *
+std::unique_ptr<json::object>
program_state::to_json (const extrinsic_state &ext_state) const
{
- json::object *state_obj = new json::object ();
+ auto state_obj = ::make_unique<json::object> ();
state_obj->set ("store", m_region_model->get_store ()->to_json ());
state_obj->set ("constraints",
/* Provide m_checker_states as an object, using names as keys. */
{
- json::object *checkers_obj = new json::object ();
+ auto checkers_obj = ::make_unique<json::object> ();
int i;
sm_state_map *smap;
if (!smap->is_empty_p ())
checkers_obj->set (ext_state.get_name (i), smap->to_json ());
- state_obj->set ("checkers", checkers_obj);
+ state_obj->set ("checkers", std::move (checkers_obj));
}
state_obj->set_bool ("valid", m_valid);
void dump_to_file (FILE *outf) const;
void dump () const;
- json::object *to_json () const;
+ std::unique_ptr<json::object> to_json () const;
engine *get_engine () const { return m_engine; }
region_model_manager *get_model_manager () const;
pretty_printer *pp) const;
void dump (bool simple) const;
- json::object *to_json () const;
+ std::unique_ptr<json::object> to_json () const;
std::unique_ptr<text_art::tree_widget>
make_dump_widget (const text_art::dump_widget_info &dwi,
void dump (const extrinsic_state &ext_state, bool simple) const;
void dump () const;
- json::object *to_json (const extrinsic_state &ext_state) const;
+ std::unique_ptr<json::object>
+ to_json (const extrinsic_state &ext_state) const;
std::unique_ptr<text_art::tree_widget>
make_dump_widget (const text_art::dump_widget_info &dwi) const;
#include "analyzer/constraint-manager.h"
#include "analyzer/analyzer-selftests.h"
#include "analyzer/ranges.h"
+#include "make-unique.h"
#if ENABLE_ANALYZER
pp_newline (&pp);
}
-json::value *
+std::unique_ptr<json::value>
symbolic_byte_offset::to_json () const
{
return m_num_bytes_sval->to_json ();
pp_newline (&pp);
}
-json::value *
+std::unique_ptr<json::value>
symbolic_byte_range::to_json () const
{
- json::object *obj = new json::object ();
+ auto obj = ::make_unique<json::object> ();
obj->set ("start", m_start.to_json ());
obj->set ("size", m_size.to_json ());
return obj;
void dump_to_pp (pretty_printer *pp, bool) const;
void dump (bool) const;
- json::value *to_json () const;
+ std::unique_ptr<json::value> to_json () const;
bool operator== (const symbolic_byte_offset &other) const
{
region_model_manager &mgr) const;
void dump (bool, region_model_manager &mgr) const;
- json::value *to_json () const;
+ std::unique_ptr<json::value> to_json () const;
bool empty_p () const;
This is intended for debugging the analyzer rather than
serialization. */
-json::object *
+std::unique_ptr<json::object>
region_to_value_map::to_json () const
{
- json::object *map_obj = new json::object ();
+ auto map_obj = ::make_unique<json::object> ();
auto_vec<const region *> regs;
for (iterator iter = begin (); iter != end (); ++iter)
This is intended for debugging the analyzer rather than
serialization. */
-json::object *
+std::unique_ptr<json::object>
region_model::to_json () const
{
- json::object *model_obj = new json::object ();
+ auto model_obj = ::make_unique<json::object> ();
model_obj->set ("store", m_store.to_json ());
model_obj->set ("constraints", m_constraints->to_json ());
if (m_current_frame)
void dump_to_pp (pretty_printer *pp, bool simple, bool multiline) const;
void dump (bool simple) const;
- json::object *to_json () const;
+ std::unique_ptr<json::object> to_json () const;
std::unique_ptr<text_art::tree_widget>
make_dump_widget (const text_art::dump_widget_info &dwi) const;
void debug () const;
- json::object *to_json () const;
+ std::unique_ptr<json::object> to_json () const;
std::unique_ptr<text_art::tree_widget>
make_dump_widget (const text_art::dump_widget_info &dwi) const;
#include "analyzer/sm.h"
#include "analyzer/program-state.h"
#include "text-art/dump.h"
+#include "make-unique.h"
#if ENABLE_ANALYZER
/* Return a new json::string describing the region. */
-json::value *
+std::unique_ptr<json::value>
region::to_json () const
{
label_text desc = get_desc (true);
- json::value *reg_js = new json::string (desc.get ());
+ auto reg_js = ::make_unique<json::string> (desc.get ());
return reg_js;
}
void dump (bool simple) const;
void dump () const;
- json::value *to_json () const;
+ std::unique_ptr<json::value> to_json () const;
bool maybe_print_for_user (pretty_printer *pp,
#include "analyzer/svalue.h"
#include "analyzer/program-state.h"
#include "analyzer/pending-diagnostic.h"
+#include "make-unique.h"
#if ENABLE_ANALYZER
/* Return a new json::string describing the state. */
-json::value *
+std::unique_ptr<json::value>
state_machine::state::to_json () const
{
pretty_printer pp;
pp_format_decoder (&pp) = default_tree_printer;
dump_to_pp (&pp);
- return new json::string (pp_formatted_text (&pp));
+ return ::make_unique<json::string> (pp_formatted_text (&pp));
}
/* class state_machine. */
{"name" : str,
"states" : [str]}. */
-json::object *
+std::unique_ptr<json::object>
state_machine::to_json () const
{
- json::object *sm_obj = new json::object ();
+ auto sm_obj = ::make_unique<json::object> ();
sm_obj->set_string ("name", m_name);
{
- json::array *states_arr = new json::array ();
+ auto states_arr = ::make_unique<json::array> ();
unsigned i;
state *s;
FOR_EACH_VEC_ELT (m_states, i, s)
states_arr->append (s->to_json ());
- sm_obj->set ("states", states_arr);
+ sm_obj->set ("states", std::move (states_arr));
}
return sm_obj;
const char *get_name () const { return m_name; }
virtual void dump_to_pp (pretty_printer *pp) const;
- virtual json::value *to_json () const;
+ virtual std::unique_ptr<json::value> to_json () const;
unsigned get_id () const { return m_id; }
void dump_to_pp (pretty_printer *pp) const;
- json::object *to_json () const;
+ std::unique_ptr<json::object> to_json () const;
state_t get_start_state () const { return m_start; }
#include "analyzer/analyzer-selftests.h"
#include "stor-layout.h"
#include "text-art/tree-widget.h"
+#include "make-unique.h"
#if ENABLE_ANALYZER
This is intended for debugging the analyzer rather
than serialization. */
-json::object *
+std::unique_ptr<json::object>
bit_range::to_json () const
{
- json::object *obj = new json::object ();
+ auto obj = ::make_unique<json::object> ();
obj->set ("start_bit_offset",
bit_offset_to_json (m_start_bit_offset));
obj->set ("size_in_bits",
This is intended for debugging the analyzer rather
than serialization. */
-json::object *
+std::unique_ptr<json::object>
byte_range::to_json () const
{
- json::object *obj = new json::object ();
+ auto obj = ::make_unique<json::object> ();
obj->set ("start_byte_offset",
byte_offset_to_json (m_start_byte_offset));
obj->set ("size_in_bytes",
{KEY_DESC : SVALUE_DESC,
...for the various key/value pairs in this binding_map}. */
-json::object *
+std::unique_ptr<json::object>
binding_map::to_json () const
{
- json::object *map_obj = new json::object ();
+ auto map_obj = ::make_unique<json::object> ();
auto_vec <const binding_key *> binding_keys;
for (map_t::iterator iter = m_map.begin ();
"touched": true/false,
"map" : object for the binding_map. */
-json::object *
+std::unique_ptr<json::object>
binding_cluster::to_json () const
{
- json::object *cluster_obj = new json::object ();
+ auto cluster_obj = ::make_unique<json::object> ();
cluster_obj->set_bool ("escaped", m_escaped);
cluster_obj->set_bool ("touched", m_touched);
...for each parent region,
"called_unknown_fn": true/false}. */
-json::object *
+std::unique_ptr<json::object>
store::to_json () const
{
- json::object *store_obj = new json::object ();
+ auto store_obj = ::make_unique<json::object> ();
/* Sort into some deterministic order. */
auto_vec<const region *> base_regions;
{
gcc_assert (parent_reg);
- json::object *clusters_in_parent_reg_obj = new json::object ();
+ auto clusters_in_parent_reg_obj = ::make_unique<json::object> ();
const region *base_reg;
unsigned j;
cluster->to_json ());
}
label_text parent_reg_desc = parent_reg->get_desc ();
- store_obj->set (parent_reg_desc.get (), clusters_in_parent_reg_obj);
+ store_obj->set (parent_reg_desc.get (),
+ std::move (clusters_in_parent_reg_obj));
}
store_obj->set_bool ("called_unknown_fn", m_called_unknown_fn);
void dump_to_pp (pretty_printer *pp) const;
void dump () const;
- json::object *to_json () const;
+ std::unique_ptr<json::object> to_json () const;
bool empty_p () const
{
void dump_to_pp (pretty_printer *pp) const;
void dump () const;
- json::object *to_json () const;
+ std::unique_ptr<json::object> to_json () const;
bool empty_p () const
{
void dump_to_pp (pretty_printer *pp, bool simple, bool multiline) const;
void dump (bool simple) const;
- json::object *to_json () const;
+ std::unique_ptr<json::object> to_json () const;
void add_to_tree_widget (text_art::tree_widget &parent_widget,
const text_art::dump_widget_info &dwi) const;
void validate () const;
- json::object *to_json () const;
+ std::unique_ptr<json::object> to_json () const;
std::unique_ptr<text_art::tree_widget>
make_dump_widget (const text_art::dump_widget_info &dwi,
void validate () const;
- json::object *to_json () const;
+ std::unique_ptr<json::object> to_json () const;
std::unique_ptr<text_art::tree_widget>
make_dump_widget (const text_art::dump_widget_info &dwi,
#include "tree-cfg.h"
#include "analyzer/supergraph.h"
#include "analyzer/analyzer-logging.h"
+#include "make-unique.h"
#if ENABLE_ANALYZER
{"nodes" : [objs for snodes],
"edges" : [objs for sedges]}. */
-json::object *
+std::unique_ptr<json::object>
supergraph::to_json () const
{
- json::object *sgraph_obj = new json::object ();
+ auto sgraph_obj = ::make_unique<json::object> ();
/* Nodes. */
{
- json::array *nodes_arr = new json::array ();
+ auto nodes_arr = ::make_unique<json::array> ();
unsigned i;
supernode *n;
FOR_EACH_VEC_ELT (m_nodes, i, n)
nodes_arr->append (n->to_json ());
- sgraph_obj->set ("nodes", nodes_arr);
+ sgraph_obj->set ("nodes", std::move (nodes_arr));
}
/* Edges. */
{
- json::array *edges_arr = new json::array ();
+ auto edges_arr = ::make_unique<json::array> ();
unsigned i;
superedge *n;
FOR_EACH_VEC_ELT (m_edges, i, n)
edges_arr->append (n->to_json ());
- sgraph_obj->set ("edges", edges_arr);
+ sgraph_obj->set ("edges", std::move (edges_arr));
}
return sgraph_obj;
"phis": [str],
"stmts" : [str]}. */
-json::object *
+std::unique_ptr<json::object>
supernode::to_json () const
{
- json::object *snode_obj = new json::object ();
+ auto snode_obj = ::make_unique<json::object> ();
snode_obj->set_integer ("idx", m_index);
snode_obj->set_integer ("bb_idx", m_bb->index);
"dst_idx": int, the index of the destination supernode,
"desc" : str. */
-json::object *
+std::unique_ptr<json::object>
superedge::to_json () const
{
- json::object *sedge_obj = new json::object ();
+ auto sedge_obj = ::make_unique<json::object> ();
sedge_obj->set_string ("kind", edge_kind_to_string (m_kind));
sedge_obj->set_integer ("src_idx", m_src->m_index);
sedge_obj->set_integer ("dst_idx", m_dest->m_index);
void dump_dot_to_file (FILE *fp, const dump_args_t &) const;
void dump_dot (const char *path, const dump_args_t &) const;
- json::object *to_json () const;
+ std::unique_ptr<json::object> to_json () const;
int num_nodes () const { return m_nodes.length (); }
int num_edges () const { return m_edges.length (); }
void dump_dot (graphviz_out *gv, const dump_args_t &args) const override;
void dump_dot_id (pretty_printer *pp) const;
- json::object *to_json () const;
+ std::unique_ptr<json::object> to_json () const;
location_t get_start_location () const;
location_t get_end_location () const;
virtual void dump_label_to_pp (pretty_printer *pp,
bool user_facing) const = 0;
- json::object *to_json () const;
+ std::unique_ptr<json::object> to_json () const;
enum edge_kind get_kind () const { return m_kind; }
/* Return a new json::string describing the svalue. */
-json::value *
+std::unique_ptr<json::value>
svalue::to_json () const
{
label_text desc = get_desc (true);
- json::value *sval_js = new json::string (desc.get ());
+ auto sval_js = ::make_unique<json::string> (desc.get ());
return sval_js;
}
void dump (bool simple) const;
label_text get_desc (bool simple=true) const;
- json::value *to_json () const;
+ std::unique_ptr<json::value> to_json () const;
std::unique_ptr<text_art::tree_widget>
make_dump_widget (const dump_widget_info &dwi,