]> granicus.if.org Git - jq/commitdiff
Remove JQ_DEBUG #define and jq_test binary, simplifying build.
authorStephen Dolan <mu@netsoc.tcd.ie>
Sun, 5 May 2013 22:12:10 +0000 (23:12 +0100)
committerStephen Dolan <mu@netsoc.tcd.ie>
Sun, 5 May 2013 22:12:10 +0000 (23:12 +0100)
The debugging features previously available via JQ_DEBUG are now
command-line options.

Makefile
execute.c
execute.h
jq_test.c
jv_alloc.c
jv_alloc.h
main.c

index 45f8ea7568974f9dacc0b63ccb6c3f2d3193361d..9b3b66312f402ebbfffce0cd0be3a3268b2ee3ff 100644 (file)
--- a/Makefile
+++ b/Makefile
@@ -26,19 +26,15 @@ main.c: version.gen.h
 
 JQ_SRC=parser.gen.c lexer.gen.c opcode.c bytecode.c compile.c execute.c builtin.c jv.c jv_parse.c jv_print.c jv_dtoa.c jv_unicode.c jv_aux.c jv_alloc.c
 
-jq_test: CFLAGS += -DJQ_DEBUG=1
-jq_test: $(JQ_SRC) main.c jq_test.c
-       $(CC) $(CFLAGS) $(CFLAGS_DEBUG) -o $@ $^
 
-jq: CFLAGS += -O -DJQ_DEBUG=0
 jq: $(JQ_SRC) main.c jq_test.c
        $(CC) $(CFLAGS) $(CFLAGS_OPT) -o $@ $^
 
-test: jq_test
-       valgrind --error-exitcode=1 -q --leak-check=full ./jq_test --run-tests >/dev/null
+test: jq
+       valgrind --error-exitcode=1 -q --leak-check=full ./jq --run-tests >/dev/null
 
 LIBRARIES=libjq
-BINARIES=jq jq_test
+BINARIES=jq
 PLATFORMS=linux32 linux64 osx32 osx64 win32 win64
 
 build/linux32%: CC='x86_64-linux-gnu-gcc -m32'
index 7f1dea9f2771fc59e34d54e13800ad7ae63141ef..22ffadbbe7e7f3dc924703459ac414cbeb0cbb41 100644 (file)
--- a/execute.c
+++ b/execute.c
@@ -29,6 +29,7 @@ struct jq_state {
   struct forkable_stack fork_stk;
   jv* pathbuf;
   int pathsize; // number of allocated elements
+  int debug_trace_enabled;
 };
 
 int path_push(jq_state *jq, stackval sv, jv val) {
@@ -162,29 +163,29 @@ jv jq_next(jq_state *jq) {
   while (1) {
     uint16_t opcode = *pc;
 
-#if JQ_DEBUG
-    dump_operation(frame_current_bytecode(&jq->frame_stk), pc);
-    printf("\t");
-    const struct opcode_description* opdesc = opcode_describe(opcode);
-    data_stk_elem* param;
-    int stack_in = opdesc->stack_in;
-    if (stack_in == -1) stack_in = pc[1];
-    for (int i=0; i<stack_in; i++) {
-      if (i == 0) {
-        param = forkable_stack_peek(&jq->data_stk);
-      } else {
-        printf(" | ");
-        param = forkable_stack_peek_next(&jq->data_stk, param);
+    if (jq->debug_trace_enabled) {
+      dump_operation(frame_current_bytecode(&jq->frame_stk), pc);
+      printf("\t");
+      const struct opcode_description* opdesc = opcode_describe(opcode);
+      data_stk_elem* param;
+      int stack_in = opdesc->stack_in;
+      if (stack_in == -1) stack_in = pc[1];
+      for (int i=0; i<stack_in; i++) {
+        if (i == 0) {
+          param = forkable_stack_peek(&jq->data_stk);
+        } else {
+          printf(" | ");
+          param = forkable_stack_peek_next(&jq->data_stk, param);
+        }
+        if (!param) break;
+        jv_dump(jv_copy(param->sv.value), 0);
+        printf("<%d>", jv_get_refcnt(param->sv.value));
       }
-      if (!param) break;
-      jv_dump(jv_copy(param->sv.value), 0);
-      printf("<%d>", jv_get_refcnt(param->sv.value));
-    }
 
-    if (backtracking) printf("\t<backtracking>");
+      if (backtracking) printf("\t<backtracking>");
 
-    printf("\n");
-#endif
+      printf("\n");
+    }
     if (backtracking) {
       opcode = ON_BACKTRACK(opcode);
       backtracking = 0;
@@ -265,11 +266,11 @@ jv jq_next(jq_state *jq) {
       uint16_t v = *pc++;
       frame_ptr fp = frame_get_level(&jq->frame_stk, frame_current(&jq->frame_stk), level);
       jv* var = frame_local_var(fp, v);
-      #if JQ_DEBUG
-      printf("V%d = ", v);
-      jv_dump(jv_copy(*var), 0);
-      printf("\n");
-      #endif
+      if (jq->debug_trace_enabled) {
+        printf("V%d = ", v);
+        jv_dump(jv_copy(*var), 0);
+        printf("\n");
+      }
       stack_push(jq, stackval_replace(stack_pop(jq), jv_copy(*var)));
       break;
     }
@@ -280,11 +281,11 @@ jv jq_next(jq_state *jq) {
       frame_ptr fp = frame_get_level(&jq->frame_stk, frame_current(&jq->frame_stk), level);
       jv* var = frame_local_var(fp, v);
       stackval val = stack_pop(jq);
-      #if JQ_DEBUG
-      printf("V%d = ", v);
-      jv_dump(jv_copy(val.value), 0);
-      printf("\n");
-      #endif
+      if (jq->debug_trace_enabled) {
+        printf("V%d = ", v);
+        jv_dump(jv_copy(val.value), 0);
+        printf("\n");
+      }
       jv_free(*var);
       *var = val.value;
       break;
@@ -463,7 +464,7 @@ jv jq_next(jq_state *jq) {
 }
 
 
-void jq_init(struct bytecode* bc, jv input, jq_state **jq) {
+void jq_init(struct bytecode* bc, jv input, jq_state **jq, int flags) {
   jq_state *new_jq;
   new_jq = jv_mem_alloc(sizeof(*new_jq));
   memset(new_jq, 0, sizeof(*new_jq));
@@ -475,6 +476,11 @@ void jq_init(struct bytecode* bc, jv input, jq_state **jq) {
   struct closure top = {bc, -1};
   frame_push(&new_jq->frame_stk, top, 0);
   frame_push_backtrack(&new_jq->frame_stk, bc->code);
+  if (flags & JQ_DEBUG_TRACE) {
+    new_jq->debug_trace_enabled = 1;
+  } else {
+    new_jq->debug_trace_enabled = 0;
+  }
   *jq = new_jq;
 }
 
index 77509f2197513c2d39523d3dc6109f63ddc5721e..1cf14df78e5feeaf3aceba630f078078d135ad93 100644 (file)
--- a/execute.h
+++ b/execute.h
@@ -6,8 +6,9 @@
 struct bytecode* jq_compile(const char* str);
 
 typedef struct jq_state jq_state;
+enum {JQ_DEBUG_TRACE = 1};
 
-void jq_init(struct bytecode* bc, jv value, jq_state **);
+void jq_init(struct bytecode* bc, jv value, jq_state **, int flags);
 jv jq_next(jq_state *);
 void jq_teardown(jq_state **);
 
index 5abd02754a53154ec89601252583072cdddb921b..64b88fb6658568fcf9e500e3ee1d5c14bb953d68 100644 (file)
--- a/jq_test.c
+++ b/jq_test.c
@@ -59,7 +59,7 @@ static void run_jq_tests() {
     fgets(buf, sizeof(buf), testdata);
     jv input = jv_parse(buf);
     if (!jv_is_valid(input)){ invalid++; continue; }
-    jq_init(bc, input, &jq);
+    jq_init(bc, input, &jq, JQ_DEBUG_TRACE);
 
     while (fgets(buf, sizeof(buf), testdata)) {
       if (skipline(buf)) break;
index e127029d5988a1e808dd363ed00f051be75d134d..4fd36a605914928b2b39cd9804ea8762531149a3 100644 (file)
@@ -27,7 +27,7 @@ void* jv_mem_realloc(void* p, size_t sz) {
   return p;
 }
 
-#if JQ_DEBUG
+#ifndef NDEBUG
 volatile char jv_mem_uninitialised;
 __attribute__((constructor)) void jv_mem_uninit_setup(){
   char* p = malloc(1);
index b4e72c0d617d8d18155359a74d10432a3c7820e3..9cf1d34e4f6eb0db45592ee8df731c70d5c48a0e 100644 (file)
@@ -3,12 +3,12 @@
 
 #include <stddef.h>
 
-#if JQ_DEBUG
+#ifndef NDEBUG
 extern volatile char jv_mem_uninitialised;
 #endif
 
 static void jv_mem_invalidate(void* mem, size_t n) {
-#if JQ_DEBUG
+#ifndef NDEBUG
   char* m = mem;
   while (n--) *m++ ^= jv_mem_uninitialised ^ jv_mem_uninitialised;
 #endif
diff --git a/main.c b/main.c
index 71150161f95785471597951eece4d5a91e2a88cc..d2c553c03942ad61511e5375020b91af63b64419 100644 (file)
--- a/main.c
+++ b/main.c
@@ -64,9 +64,9 @@ enum {
 static int options = 0;
 static struct bytecode* bc;
 
-static void process(jv value) {
+static void process(jv value, int flags) {
   jq_state *jq = NULL;
-  jq_init(bc, value, &jq);
+  jq_init(bc, value, &jq, flags);
   jv result;
   while (jv_is_valid(result = jq_next(jq))) {
     if ((options & RAW_OUTPUT) && jv_get_kind(result) == JV_KIND_STRING) {
@@ -153,6 +153,7 @@ int main(int argc, char* argv[]) {
   input_filenames = jv_mem_alloc(sizeof(const char*) * argc);
   ninput_files = 0;
   int further_args_are_files = 0;
+  int jq_flags = 0;
   for (int i=1; i<argc; i++) {
     if (further_args_are_files) {
       input_filenames[ninput_files++] = argv[i];
@@ -185,6 +186,8 @@ int main(int argc, char* argv[]) {
       options |= FROM_FILE;
     } else if (isoption(argv[i],  0,  "debug-dump-disasm")) {
       options |= DUMP_DISASM;
+    } else if (isoption(argv[i],  0,  "debug-trace")) {
+      jq_flags |= JQ_DEBUG_TRACE;
     } else if (isoption(argv[i], 'h', "help")) {
       usage();
     } else if (isoption(argv[i], 'V', "version")) {
@@ -224,7 +227,7 @@ int main(int argc, char* argv[]) {
   }
 
   if (options & PROVIDE_NULL) {
-    process(jv_null());
+    process(jv_null(), jq_flags);
   } else {
     jv slurped;
     if (options & SLURP) {
@@ -245,7 +248,7 @@ int main(int argc, char* argv[]) {
             slurped = jv_string_concat(slurped, jv_string(buf));
           } else {
             if (buf[len-1] == '\n') buf[len-1] = 0;
-            process(jv_string(buf));
+            process(jv_string(buf), jq_flags);
           }
         }
       } else {
@@ -255,7 +258,7 @@ int main(int argc, char* argv[]) {
           if (options & SLURP) {
             slurped = jv_array_append(slurped, value);
           } else {
-            process(value);
+            process(value, jq_flags);
           }
         }
         if (jv_invalid_has_msg(jv_copy(value))) {
@@ -270,7 +273,7 @@ int main(int argc, char* argv[]) {
     }
     jv_parser_free(&parser);
     if (options & SLURP) {
-      process(slurped);
+      process(slurped, jq_flags);
     }
   }
   jv_mem_free(input_filenames);