[Groonga-commit] groonga/groonga at f4d064f [master] expr: add functions for debug

Back to archive index

Kouhei Sutou null+****@clear*****
Mon Mar 23 14:46:56 JST 2015


Kouhei Sutou	2015-03-23 14:46:56 +0900 (Mon, 23 Mar 2015)

  New Revision: f4d064f3b3263d212be60716f07a39488e272281
  https://github.com/groonga/groonga/commit/f4d064f3b3263d212be60716f07a39488e272281

  Message:
    expr: add functions for debug

  Modified files:
    lib/grn_expr.h
    lib/util.c

  Modified: lib/grn_expr.h (+7 -0)
===================================================================
--- lib/grn_expr.h    2015-03-23 14:07:14 +0900 (c59330f)
+++ lib/grn_expr.h    2015-03-23 14:46:56 +0900 (7587149)
@@ -66,6 +66,12 @@ grn_bool grn_scan_info_push_arg(scan_info *si, grn_obj *arg);
 grn_obj *grn_scan_info_get_arg(grn_ctx *ctx, scan_info *si, int i);
 
 int32_t grn_expr_code_get_weight(grn_ctx *ctx, grn_expr_code *ec, uint32_t *offset);
+grn_rc grn_expr_code_inspect_indented(grn_ctx *ctx,
+                                      grn_obj *buffer,
+                                      grn_expr_code *code,
+                                      const char *indent);
+void grn_p_expr_code(grn_ctx *ctx, grn_expr_code *code);
+
 void grn_expr_take_obj(grn_ctx *ctx, grn_obj *expr, grn_obj *obj);
 grn_obj *grn_expr_alloc_const(grn_ctx *ctx, grn_obj *expr);
 
@@ -74,3 +80,4 @@ grn_obj *grn_expr_alloc_const(grn_ctx *ctx, grn_obj *expr);
 #endif
 
 #endif /* GRN_EXPR_H */
+

  Modified: lib/util.c (+42 -24)
===================================================================
--- lib/util.c    2015-03-23 14:07:14 +0900 (dd703b5)
+++ lib/util.c    2015-03-23 14:46:56 +0900 (68c6538)
@@ -20,6 +20,7 @@
 #include "grn_ii.h"
 #include "grn_util.h"
 #include "grn_string.h"
+#include "grn_expr.h"
 
 #include <string.h>
 #include <stdio.h>
@@ -279,6 +280,30 @@ grn_proc_inspect(grn_ctx *ctx, grn_obj *buf, grn_obj *obj)
 }
 
 grn_rc
+grn_expr_code_inspect_indented(grn_ctx *ctx,
+                               grn_obj *buffer,
+                               grn_expr_code *code,
+                               const char *indent)
+{
+  if (!code) {
+    GRN_TEXT_PUTS(ctx, buffer, "(NULL)");
+    return GRN_SUCCESS;
+  }
+
+  GRN_TEXT_PUTS(ctx, buffer, "<");
+  GRN_TEXT_PUTS(ctx, buffer, grn_operator_to_string(code->op));
+  GRN_TEXT_PUTS(ctx, buffer, " ");
+  GRN_TEXT_PUTS(ctx, buffer, "modify:");
+  grn_text_itoa(ctx, buffer, code->modify);
+  GRN_TEXT_PUTS(ctx, buffer, ", ");
+  GRN_TEXT_PUTS(ctx, buffer, "value:");
+  grn_inspect_indented(ctx, buffer, code->value, "      ");
+  GRN_TEXT_PUTS(ctx, buffer, ">");
+
+  return GRN_SUCCESS;
+}
+
+grn_rc
 grn_expr_inspect(grn_ctx *ctx, grn_obj *buffer, grn_obj *expr)
 {
   grn_expr *e = (grn_expr *)expr;
@@ -305,33 +330,15 @@ grn_expr_inspect(grn_ctx *ctx, grn_obj *buffer, grn_obj *expr)
   }
 
   {
-    uint32_t i, j;
-    grn_expr_var *var;
+    uint32_t i;
     grn_expr_code *code;
     GRN_TEXT_PUTS(ctx, buffer, "\n  codes:{");
-    for (j = 0, code = e->codes; j < e->codes_curr; j++, code++) {
-      if (j) { GRN_TEXT_PUTC(ctx, buffer, ','); }
+    for (i = 0, code = e->codes; i < e->codes_curr; i++, code++) {
+      if (i) { GRN_TEXT_PUTC(ctx, buffer, ','); }
       GRN_TEXT_PUTS(ctx, buffer, "\n    ");
-      grn_text_itoa(ctx, buffer, j);
-      GRN_TEXT_PUTS(ctx, buffer, ":<");
-      GRN_TEXT_PUTS(ctx, buffer, grn_operator_to_string(code->op));
-      GRN_TEXT_PUTS(ctx, buffer, "(");
-      for (i = 0, var = e->vars; i < e->nvars; i++, var++) {
-        if (i) { GRN_TEXT_PUTC(ctx, buffer, ','); }
-        GRN_TEXT_PUTC(ctx, buffer, '?');
-        if (var->name_size) {
-          GRN_TEXT_PUT(ctx, buffer, var->name, var->name_size);
-        } else {
-          grn_text_itoa(ctx, buffer, (int)i);
-        }
-      }
-      GRN_TEXT_PUTS(ctx, buffer, "), ");
-      GRN_TEXT_PUTS(ctx, buffer, "modify:");
-      grn_text_itoa(ctx, buffer, code->modify);
-      GRN_TEXT_PUTS(ctx, buffer, ", ");
-      GRN_TEXT_PUTS(ctx, buffer, "value:");
-      grn_inspect_indented(ctx, buffer, code->value, "      ");
-      GRN_TEXT_PUTS(ctx, buffer, ">");
+      grn_text_itoa(ctx, buffer, i);
+      GRN_TEXT_PUTS(ctx, buffer, ":");
+      grn_expr_code_inspect_indented(ctx, buffer, code, "      ");
     }
     GRN_TEXT_PUTS(ctx, buffer, "\n  }");
   }
@@ -1256,6 +1263,17 @@ grn_p_ii_values(grn_ctx *ctx, grn_obj *ii)
   grn_obj_unlink(ctx, &buffer);
 }
 
+void
+grn_p_expr_code(grn_ctx *ctx, grn_expr_code *code)
+{
+  grn_obj buffer;
+
+  GRN_TEXT_INIT(&buffer, 0);
+  grn_expr_code_inspect_indented(ctx, &buffer, code, "");
+  printf("%.*s\n", (int)GRN_TEXT_LEN(&buffer), GRN_TEXT_VALUE(&buffer));
+  grn_obj_unlink(ctx, &buffer);
+}
+
 #ifdef WIN32
 static char *win32_base_dir = NULL;
 const char *
-------------- next part --------------
HTML����������������������������...
Download 



More information about the Groonga-commit mailing list
Back to archive index