]> granicus.if.org Git - jq/commitdiff
Add jv_dumpf() and jv_show()
authorNicolas Williams <nico@cryptonector.com>
Fri, 27 Dec 2013 00:37:17 +0000 (18:37 -0600)
committerNicolas Williams <nico@cryptonector.com>
Fri, 27 Dec 2013 00:40:34 +0000 (18:40 -0600)
jv_dumpf() takes a FILE *.

jv_show() is intended for use in debuggers, so it dumps the jv to stderr
and it does not jv_free() the jv, so it's safe to
"call jv_show(some_jv, -1)" in a debugger.  If flags == -1 then the jv
will be shown pretty-printed and in color.

jv.h
jv_print.c

diff --git a/jv.h b/jv.h
index 7e22cb43a82214060715f5da5322da69cc6e89b0..3fc966a39241309b97144bf83331553882f6a9b5 100644 (file)
--- a/jv.h
+++ b/jv.h
@@ -3,6 +3,7 @@
 
 #include <stdarg.h>
 #include <stdint.h>
+#include <stdio.h>
 
 typedef enum {
   JV_KIND_INVALID,
@@ -124,7 +125,9 @@ jv jv_object_iter_value(jv, int);
 int jv_get_refcnt(jv);
 
 enum { JV_PRINT_PRETTY = 1, JV_PRINT_ASCII = 2, JV_PRINT_COLOUR = 4, JV_PRINT_SORTED = 8, JV_PRINT_UNBUFFERED = 16 };
+void jv_dumpf(jv, FILE *f, int flags);
 void jv_dump(jv, int flags);
+void jv_show(jv, int flags);
 jv jv_dump_string(jv, int flags);
 
 jv jv_parse(const char* string);
index d6eff040e4b4736c9faa67a2272858ac88a10788..4b7dd51eb5cc6cce616420285a27ddfcfecdf1b3 100644 (file)
@@ -260,16 +260,26 @@ static void jv_dump_term(struct dtoa_context* C, jv x, int flags, int indent, FI
   }
 }
 
-void jv_dump(jv x, int flags) {
+void jv_dumpf(jv x, FILE *f, int flags) {
   struct dtoa_context C;
   jvp_dtoa_context_init(&C);
-  jv_dump_term(&C, x, flags, 0, stdout, 0);
+  jv_dump_term(&C, x, flags, 0, f, 0);
   jvp_dtoa_context_free(&C);
   if (flags & JV_PRINT_UNBUFFERED) {
-    fflush(stdout);
+    fflush(f);
   }
 }
 
+void jv_dump(jv x, int flags) {
+  jv_dumpf(x, stdout, flags);
+}
+
+void jv_show(jv x, int flags) {
+  if (flags == -1)
+    flags = JV_PRINT_PRETTY | JV_PRINT_COLOUR | JV_PRINT_UNBUFFERED;
+  jv_dumpf(jv_copy(x), stderr, flags);
+}
+
 jv jv_dump_string(jv x, int flags) {
   struct dtoa_context C;
   jvp_dtoa_context_init(&C);