@@ -32,6 +32,7 @@ along with GCC; see the file COPYING3. If not see
#include "tree-pretty-print.h"
#include "diagnostic-event-id.h"
#include "tree-dfa.h"
+#include "make-unique.h"
#if ENABLE_ANALYZER
@@ -223,15 +224,15 @@ get_diagnostic_tree_for_gassign (const gassign *assign_stmt)
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.
@@ -239,41 +240,41 @@ tree_to_json (tree node)
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. */
@@ -416,16 +416,16 @@ extern void log_stashed_constants (logger *logger);
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
@@ -38,6 +38,7 @@ along with GCC; see the file COPYING3. If not see
#include "analyzer/analyzer-logging.h"
#include "analyzer/call-string.h"
#include "analyzer/supergraph.h"
+#include "make-unique.h"
#if ENABLE_ANALYZER
@@ -103,18 +104,18 @@ call_string::print (pretty_printer *pp) const
"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;
@@ -72,7 +72,7 @@ public:
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 (); }
@@ -50,6 +50,7 @@ along with GCC; see the file COPYING3. If not see
#include "analyzer/call-summary.h"
#include "analyzer/analyzer-selftests.h"
#include "tree-pretty-print.h"
+#include "make-unique.h"
#if ENABLE_ANALYZER
@@ -446,12 +447,12 @@ bounded_range::dump (bool show_types) const
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;
}
@@ -466,12 +467,12 @@ bounded_range::make_dump_widget (const text_art::dump_widget_info &dwi) const
/* 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));
}
@@ -715,10 +716,10 @@ bounded_ranges::dump (bool show_types) const
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 ());
@@ -1113,15 +1114,15 @@ equiv_class::print (pretty_printer *pp) const
{"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)
{
@@ -1380,10 +1381,10 @@ constraint::print (pretty_printer *pp, const constraint_manager &cm) const
"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));
@@ -1468,10 +1469,10 @@ bounded_ranges_constraint::print (pretty_printer *pp,
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 ());
@@ -1781,33 +1782,33 @@ debug (const constraint_manager &cm)
{"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;
@@ -85,7 +85,7 @@ struct bounded_range
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;
@@ -112,7 +112,7 @@ struct bounded_range
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
@@ -135,7 +135,7 @@ public:
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;
@@ -271,7 +271,7 @@ public:
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,
@@ -351,7 +351,7 @@ class constraint
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,
@@ -398,7 +398,7 @@ public:
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
@@ -442,7 +442,7 @@ public:
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;
@@ -740,10 +740,10 @@ saved_diagnostic::add_event (std::unique_ptr<checker_event> event)
"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 ());
@@ -1216,18 +1216,18 @@ diagnostic_manager::add_event (std::unique_ptr<checker_event> event)
/* 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;
@@ -42,7 +42,7 @@ public:
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;
@@ -157,7 +157,7 @@ public:
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,
@@ -1438,10 +1438,10 @@ exploded_node::dump (const extrinsic_state &ext_state) const
"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));
@@ -2292,10 +2292,10 @@ exploded_edge::dump_dot_label (pretty_printer *pp) const
"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)
@@ -2418,10 +2418,10 @@ strongly_connected_components::dump () const
/* 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;
@@ -2639,10 +2639,10 @@ worklist::key_t::cmp (const worklist::key_t &ka, const worklist::key_t &kb)
/* 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 ());
@@ -4658,29 +4658,29 @@ exploded_graph::dump_states_for_supernode (FILE *out,
"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. */
@@ -6095,7 +6095,7 @@ dump_analyzer_json (const supergraph &sg,
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 ());
@@ -6103,8 +6103,6 @@ dump_analyzer_json (const supergraph &sg,
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);
@@ -239,7 +239,7 @@ class exploded_node : public dnode<eg_traits>
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
@@ -387,7 +387,7 @@ class exploded_edge : public dedge<eg_traits>
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;
@@ -688,7 +688,7 @@ public:
void dump () const;
- json::array *to_json () const;
+ std::unique_ptr<json::array> to_json () const;
private:
struct per_node_data
@@ -732,7 +732,7 @@ public:
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
@@ -867,7 +867,7 @@ public:
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;
@@ -54,6 +54,7 @@ along with GCC; see the file COPYING3. If not see
#include "analyzer/exploded-graph.h"
#include "analyzer/analysis-plan.h"
#include "analyzer/inlining-iterator.h"
+#include "make-unique.h"
#if ENABLE_ANALYZER
@@ -313,10 +314,10 @@ program_point::dump () const
"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 ()));
@@ -184,7 +184,7 @@ public:
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
@@ -56,6 +56,7 @@ along with GCC; see the file COPYING3. If not see
#include "analyzer/analyzer-selftests.h"
#include "text-art/tree-widget.h"
#include "text-art/dump.h"
+#include "make-unique.h"
#if ENABLE_ANALYZER
@@ -98,18 +99,18 @@ extrinsic_state::dump () const
/* 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;
@@ -276,10 +277,10 @@ sm_state_map::dump (bool simple) const
{"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 ());
@@ -1185,10 +1186,10 @@ program_state::dump () const
"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",
@@ -1199,7 +1200,7 @@ program_state::to_json (const extrinsic_state &ext_state) const
/* 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;
@@ -1207,7 +1208,7 @@ program_state::to_json (const extrinsic_state &ext_state) const
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);
@@ -55,7 +55,7 @@ public:
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;
@@ -117,7 +117,7 @@ public:
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,
@@ -231,7 +231,8 @@ public:
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;
@@ -54,6 +54,7 @@ along with GCC; see the file COPYING3. If not see
#include "analyzer/constraint-manager.h"
#include "analyzer/analyzer-selftests.h"
#include "analyzer/ranges.h"
+#include "make-unique.h"
#if ENABLE_ANALYZER
@@ -100,7 +101,7 @@ symbolic_byte_offset::dump (bool simple) const
pp_newline (&pp);
}
-json::value *
+std::unique_ptr<json::value>
symbolic_byte_offset::to_json () const
{
return m_num_bytes_sval->to_json ();
@@ -155,10 +156,10 @@ symbolic_byte_range::dump (bool simple, region_model_manager &mgr) const
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;
@@ -39,7 +39,7 @@ public:
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
{
@@ -72,7 +72,7 @@ public:
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;
@@ -232,10 +232,10 @@ region_to_value_map::dump (bool simple) 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)
@@ -512,10 +512,10 @@ region_model::debug () const
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)
@@ -177,7 +177,7 @@ public:
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;
@@ -286,7 +286,7 @@ class region_model
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;
@@ -59,6 +59,7 @@ along with GCC; see the file COPYING3. If not see
#include "analyzer/sm.h"
#include "analyzer/program-state.h"
#include "text-art/dump.h"
+#include "make-unique.h"
#if ENABLE_ANALYZER
@@ -1035,11 +1036,11 @@ region::dump () const
/* 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;
}
@@ -176,7 +176,7 @@ public:
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,
@@ -42,6 +42,7 @@ along with GCC; see the file COPYING3. If not see
#include "analyzer/svalue.h"
#include "analyzer/program-state.h"
#include "analyzer/pending-diagnostic.h"
+#include "make-unique.h"
#if ENABLE_ANALYZER
@@ -77,13 +78,13 @@ state_machine::state::dump_to_pp (pretty_printer *pp) const
/* 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. */
@@ -151,19 +152,19 @@ state_machine::dump_to_pp (pretty_printer *pp) const
{"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;
@@ -49,7 +49,7 @@ public:
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; }
@@ -180,7 +180,7 @@ public:
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; }
@@ -56,6 +56,7 @@ along with GCC; see the file COPYING3. If not see
#include "analyzer/analyzer-selftests.h"
#include "stor-layout.h"
#include "text-art/tree-widget.h"
+#include "make-unique.h"
#if ENABLE_ANALYZER
@@ -231,10 +232,10 @@ bit_range::dump () const
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",
@@ -505,10 +506,10 @@ byte_range::dump () const
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",
@@ -770,10 +771,10 @@ binding_map::dump (bool simple) const
{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 ();
@@ -1419,10 +1420,10 @@ binding_cluster::validate () const
"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);
@@ -2636,10 +2637,10 @@ store::validate () const
...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;
@@ -2662,7 +2663,7 @@ store::to_json () const
{
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;
@@ -2678,7 +2679,8 @@ store::to_json () const
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);
@@ -239,7 +239,7 @@ struct bit_range
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
{
@@ -315,7 +315,7 @@ struct byte_range
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
{
@@ -546,7 +546,7 @@ public:
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;
@@ -615,7 +615,7 @@ public:
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,
@@ -758,7 +758,7 @@ public:
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,
@@ -54,6 +54,7 @@ along with GCC; see the file COPYING3. If not see
#include "tree-cfg.h"
#include "analyzer/supergraph.h"
#include "analyzer/analyzer-logging.h"
+#include "make-unique.h"
#if ENABLE_ANALYZER
@@ -462,29 +463,29 @@ supergraph::dump_dot (const char *path, const dump_args_t &dump_args) const
{"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;
@@ -717,10 +718,10 @@ supernode::dump_dot_id (pretty_printer *pp) const
"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);
@@ -980,10 +981,10 @@ superedge::dump_dot (graphviz_out *gv, const dump_args_t &) const
"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);
@@ -168,7 +168,7 @@ public:
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 (); }
@@ -255,7 +255,7 @@ class supernode : public dnode<supergraph_traits>
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;
@@ -323,7 +323,7 @@ class superedge : public dedge<supergraph_traits>
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; }
@@ -104,11 +104,11 @@ svalue::get_desc (bool simple) const
/* 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;
}
@@ -105,7 +105,7 @@ public:
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,