null+****@clear*****
null+****@clear*****
2010年 8月 5日 (木) 15:55:46 JST
Kouhei Sutou 2010-08-05 06:55:46 +0000 (Thu, 05 Aug 2010)
New Revision: b1df78cf1e684f582462f1bb4de2e37f79286d30
Log:
inspect supports proc.
Modified files:
lib/util.c
test/unit/core/test-inspect.c
Modified: lib/util.c (+44 -0)
===================================================================
--- lib/util.c 2010-08-05 06:19:04 +0000 (be22582)
+++ lib/util.c 2010-08-05 06:55:46 +0000 (a1947db)
@@ -79,6 +79,47 @@ grn_inspect_name(grn_ctx *ctx, grn_obj *buf, grn_obj *obj)
}
static grn_rc
+grn_proc_inspect(grn_ctx *ctx, grn_obj *buf, grn_obj *obj)
+{
+ grn_proc *proc = (grn_proc *)obj;
+ uint32_t i;
+
+ GRN_TEXT_PUTS(ctx, buf, "#<proc:");
+ switch (proc->type) {
+ case GRN_PROC_TOKENIZER :
+ GRN_TEXT_PUTS(ctx, buf, "tokenizer");
+ break;
+ case GRN_PROC_COMMAND :
+ GRN_TEXT_PUTS(ctx, buf, "command");
+ break;
+ case GRN_PROC_FUNCTION :
+ GRN_TEXT_PUTS(ctx, buf, "function");
+ break;
+ case GRN_PROC_HOOK :
+ GRN_TEXT_PUTS(ctx, buf, "hook");
+ break;
+ }
+ GRN_TEXT_PUTS(ctx, buf, " ");
+
+ grn_inspect_name(ctx, buf, obj);
+ GRN_TEXT_PUTS(ctx, buf, " ");
+
+ GRN_TEXT_PUTS(ctx, buf, "arguments:[");
+ for (i = 0; i < proc->nvars; i++) {
+ grn_expr_var *var = proc->vars + i;
+ if (i != 0) {
+ GRN_TEXT_PUTS(ctx, buf, ", ");
+ }
+ GRN_TEXT_PUT(ctx, buf, var->name, var->name_size);
+ }
+ GRN_TEXT_PUTS(ctx, buf, "]");
+
+ GRN_TEXT_PUTS(ctx, buf, ">");
+
+ return GRN_SUCCESS;
+}
+
+static grn_rc
grn_accessor_inspect(grn_ctx *ctx, grn_obj *buf, grn_obj *obj)
{
return grn_column_name_(ctx, obj, buf);
@@ -586,6 +627,9 @@ grn_inspect(grn_ctx *ctx, grn_obj *buffer, grn_obj *obj)
case GRN_EXPR :
grn_expr_inspect(ctx, buffer, obj);
return buffer;
+ case GRN_PROC :
+ grn_proc_inspect(ctx, buffer, obj);
+ return buffer;
case GRN_ACCESSOR :
case GRN_ACCESSOR_VIEW :
grn_accessor_inspect(ctx, buffer, obj);
Modified: test/unit/core/test-inspect.c (+30 -0)
===================================================================
--- test/unit/core/test-inspect.c 2010-08-05 06:19:04 +0000 (8af6c4e)
+++ test/unit/core/test-inspect.c 2010-08-05 06:55:46 +0000 (f09af36)
@@ -66,6 +66,8 @@ void test_column_var_size(void);
void test_column_index(void);
void test_type(void);
void test_record(void);
+void test_proc_command(void);
+void test_proc_function(void);
static gchar *tmp_directory;
@@ -806,3 +808,31 @@ test_record(void)
">",
inspected_string());
}
+
+void
+test_proc_command(void)
+{
+ grn_obj *proc;
+
+ proc = get_object("column_remove");
+ inspected = grn_inspect(context, NULL, proc);
+ cut_assert_equal_string("#<proc:command "
+ "column_remove "
+ "arguments:[table, name]"
+ ">",
+ inspected_string());
+}
+
+void
+test_proc_function(void)
+{
+ grn_obj *proc;
+
+ proc = get_object("geo_distance");
+ inspected = grn_inspect(context, NULL, proc);
+ cut_assert_equal_string("#<proc:function "
+ "geo_distance "
+ "arguments:[]"
+ ">",
+ inspected_string());
+}