diff mbox series

[02/16] json: add array::append_string

Message ID 20240724221824.585054-3-dmalcolm@redhat.com
State New
Headers show
Series Revamp of JSON/SARIF output | expand

Commit Message

David Malcolm July 24, 2024, 10:18 p.m. UTC
No functional change intended.

gcc/analyzer/ChangeLog:
	* supergraph.cc (supernode::to_json): Avoid naked "new" by using
	json::array::append_string.
	(supernode::to_json): Likewise.

gcc/ChangeLog:
	* diagnostic-format-sarif.cc (sarif_artifact::populate_roles):
	Avoid naked "new" by using json::array::append_string.
	(sarif_builder::maybe_make_kinds_array): Likewise.
	* json.cc (json::array::append_string): New.
	(selftest::test_writing_arrays): Use it.
	* json.h (json::array::append_string): New decl.
	* optinfo-emit-json.cc (optrecord_json_writer::pass_to_json):
	Avoid naked "new" by using json::array::append_string.
	(optrecord_json_writer::optinfo_to_json): Likewise.

Signed-off-by: David Malcolm <dmalcolm@redhat.com>
---
 gcc/analyzer/supergraph.cc     | 4 ++--
 gcc/diagnostic-format-sarif.cc | 8 ++++----
 gcc/json.cc                    | 9 ++++++++-
 gcc/json.h                     | 1 +
 gcc/optinfo-emit-json.cc       | 4 ++--
 5 files changed, 17 insertions(+), 9 deletions(-)
diff mbox series

Patch

diff --git a/gcc/analyzer/supergraph.cc b/gcc/analyzer/supergraph.cc
index 4dc7942b26aa..20c62856d4b6 100644
--- a/gcc/analyzer/supergraph.cc
+++ b/gcc/analyzer/supergraph.cc
@@ -747,7 +747,7 @@  supernode::to_json () const
 	pretty_printer pp;
 	pp_format_decoder (&pp) = default_tree_printer;
 	pp_gimple_stmt_1 (&pp, stmt, 0, (dump_flags_t)0);
-	phi_arr->append (new json::string (pp_formatted_text (&pp)));
+	phi_arr->append_string (pp_formatted_text (&pp));
       }
     snode_obj->set ("phis", phi_arr);
   }
@@ -762,7 +762,7 @@  supernode::to_json () const
 	pretty_printer pp;
 	pp_format_decoder (&pp) = default_tree_printer;
 	pp_gimple_stmt_1 (&pp, stmt, 0, (dump_flags_t)0);
-	stmt_arr->append (new json::string (pp_formatted_text (&pp)));
+	stmt_arr->append_string (pp_formatted_text (&pp));
       }
     snode_obj->set ("stmts", stmt_arr);
   }
diff --git a/gcc/diagnostic-format-sarif.cc b/gcc/diagnostic-format-sarif.cc
index 225476995d13..7105f7853318 100644
--- a/gcc/diagnostic-format-sarif.cc
+++ b/gcc/diagnostic-format-sarif.cc
@@ -435,7 +435,7 @@  sarif_artifact::populate_roles ()
     if (bitmap_bit_p (m_roles, i))
       {
 	enum diagnostic_artifact_role role = (enum diagnostic_artifact_role)i;
-	roles_arr->append (new json::string (get_artifact_role_string (role)));
+	roles_arr->append_string (get_artifact_role_string (role));
       }
   set ("roles", roles_arr);
 }
@@ -1394,13 +1394,13 @@  sarif_builder::maybe_make_kinds_array (diagnostic_event::meaning m) const
   json::array *kinds_arr = new json::array ();
   if (const char *verb_str
 	= diagnostic_event::meaning::maybe_get_verb_str (m.m_verb))
-    kinds_arr->append (new json::string (verb_str));
+    kinds_arr->append_string (verb_str);
   if (const char *noun_str
 	= diagnostic_event::meaning::maybe_get_noun_str (m.m_noun))
-    kinds_arr->append (new json::string (noun_str));
+    kinds_arr->append_string (noun_str);
   if (const char *property_str
 	= diagnostic_event::meaning::maybe_get_property_str (m.m_property))
-    kinds_arr->append (new json::string (property_str));
+    kinds_arr->append_string (property_str);
   return kinds_arr;
 }
 
diff --git a/gcc/json.cc b/gcc/json.cc
index 53edca520556..86490259dabf 100644
--- a/gcc/json.cc
+++ b/gcc/json.cc
@@ -286,6 +286,13 @@  array::append (value *v)
   m_elements.safe_push (v);
 }
 
+void
+array::append_string (const char *utf8_value)
+{
+  gcc_assert (utf8_value);
+  append (new json::string (utf8_value));
+}
+
 /* class json::float_number, a subclass of json::value, wrapping a double.  */
 
 /* Implementation of json::value::print for json::float_number.  */
@@ -432,7 +439,7 @@  test_writing_arrays ()
   arr.append (new json::string ("foo"));
   ASSERT_PRINT_EQ (arr, true, "[\"foo\"]");
 
-  arr.append (new json::string ("bar"));
+  arr.append_string ("bar");
   ASSERT_PRINT_EQ (arr, true,
 		   "[\"foo\",\n"
 		   " \"bar\"]");
diff --git a/gcc/json.h b/gcc/json.h
index ad4f8c448f8c..d3493a72d525 100644
--- a/gcc/json.h
+++ b/gcc/json.h
@@ -130,6 +130,7 @@  class array : public value
   void print (pretty_printer *pp, bool formatted) const final override;
 
   void append (value *v);
+  void append_string (const char *utf8_value);
 
  private:
   auto_vec<value *> m_elements;
diff --git a/gcc/optinfo-emit-json.cc b/gcc/optinfo-emit-json.cc
index 1fa82d438db9..faae95fc232a 100644
--- a/gcc/optinfo-emit-json.cc
+++ b/gcc/optinfo-emit-json.cc
@@ -259,7 +259,7 @@  optrecord_json_writer::pass_to_json (opt_pass *pass)
 	 optgroup->name != NULL; optgroup++)
       if (optgroup->value != OPTGROUP_ALL
 	  && (pass->optinfo_flags & optgroup->value))
-	optgroups->append (new json::string (optgroup->name));
+	optgroups->append_string (optgroup->name);
   }
   obj->set_integer ("num", pass->static_pass_number);
   return obj;
@@ -347,7 +347,7 @@  optrecord_json_writer::optinfo_to_json (const optinfo *optinfo)
 	  gcc_unreachable ();
 	case OPTINFO_ITEM_KIND_TEXT:
 	  {
-	    message->append (new json::string (item->get_text ()));
+	    message->append_string (item->get_text ());
 	  }
 	  break;
 	case OPTINFO_ITEM_KIND_TREE: