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