aboutsummaryrefslogtreecommitdiff
path: root/gcc/json.cc
diff options
context:
space:
mode:
authorMartin Liska <mliska@suse.cz>2019-10-22 11:58:27 +0200
committerMartin Liska <marxin@gcc.gnu.org>2019-10-22 09:58:27 +0000
commit076222782e4558e0bd22711c6fdcc0faf0882daf (patch)
tree3cbd3dcafcbcaf3939736dfe771309b5915a6263 /gcc/json.cc
parentfc25649ccd251d9a6c2e27ac821276caaea986e4 (diff)
downloadgcc-076222782e4558e0bd22711c6fdcc0faf0882daf.zip
gcc-076222782e4558e0bd22711c6fdcc0faf0882daf.tar.gz
gcc-076222782e4558e0bd22711c6fdcc0faf0882daf.tar.bz2
Come up with json::integer_number and use it in GCOV.
2019-10-22 Martin Liska <mliska@suse.cz> * diagnostic-format-json.cc (json_from_expanded_location): Use json::integer_number. * gcov.c (output_intermediate_json_line): Use new json::integer_number. (output_json_intermediate_file): Likewise. * json.cc (number::print): Move to ... (float_number::print): ... this. (integer_number::print): New. (test_writing_numbers): Move to ... (test_writing_float_numbers): ... this. (test_writing_integer_numbers): New. (json_cc_tests): Register test_writing_integer_numbers. * json.h (class value): Add forward declaration for float_number and integer_number. (enum kind): Add JSON_INTEGER and JSON_FLOAT. (class number): Move to ... (class float_number): ... this. (class integer_number): New. * optinfo-emit-json.cc (optrecord_json_writer::impl_location_to_json): Use json::integer_number. (optrecord_json_writer::location_to_json): Likewise. (optrecord_json_writer::profile_count_to_json): Likewise. (optrecord_json_writer::pass_to_json): Likewise. From-SVN: r277284
Diffstat (limited to 'gcc/json.cc')
-rw-r--r--gcc/json.cc41
1 files changed, 33 insertions, 8 deletions
diff --git a/gcc/json.cc b/gcc/json.cc
index 512e2e5..bec6fc5 100644
--- a/gcc/json.cc
+++ b/gcc/json.cc
@@ -154,18 +154,31 @@ array::append (value *v)
m_elements.safe_push (v);
}
-/* class json::number, a subclass of json::value, wrapping a double. */
+/* class json::float_number, a subclass of json::value, wrapping a double. */
-/* Implementation of json::value::print for json::number. */
+/* Implementation of json::value::print for json::float_number. */
void
-number::print (pretty_printer *pp) const
+float_number::print (pretty_printer *pp) const
{
char tmp[1024];
snprintf (tmp, sizeof (tmp), "%g", m_value);
pp_string (pp, tmp);
}
+/* class json::integer_number, a subclass of json::value, wrapping a long. */
+
+/* Implementation of json::value::print for json::integer_number. */
+
+void
+integer_number::print (pretty_printer *pp) const
+{
+ char tmp[1024];
+ snprintf (tmp, sizeof (tmp), "%ld", m_value);
+ pp_string (pp, tmp);
+}
+
+
/* class json::string, a subclass of json::value. */
/* json::string's ctor. */
@@ -297,11 +310,22 @@ test_writing_arrays ()
/* Verify that JSON numbers are written correctly. */
static void
-test_writing_numbers ()
+test_writing_float_numbers ()
+{
+ assert_print_eq (float_number (0), "0");
+ assert_print_eq (float_number (42), "42");
+ assert_print_eq (float_number (-100), "-100");
+ assert_print_eq (float_number (123456789), "1.23457e+08");
+}
+
+static void
+test_writing_integer_numbers ()
{
- assert_print_eq (number (0), "0");
- assert_print_eq (number (42), "42");
- assert_print_eq (number (-100), "-100");
+ assert_print_eq (integer_number (0), "0");
+ assert_print_eq (integer_number (42), "42");
+ assert_print_eq (integer_number (-100), "-100");
+ assert_print_eq (integer_number (123456789), "123456789");
+ assert_print_eq (integer_number (-123456789), "-123456789");
}
/* Verify that JSON strings are written correctly. */
@@ -337,7 +361,8 @@ json_cc_tests ()
test_object_get ();
test_writing_objects ();
test_writing_arrays ();
- test_writing_numbers ();
+ test_writing_float_numbers ();
+ test_writing_integer_numbers ();
test_writing_strings ();
test_writing_literals ();
}