grn_rc grn_expr_inspect(grn_ctx *ctx, grn_obj *buffer, grn_obj *expr) { grn_expr *e = (grn_expr *)expr; GRN_TEXT_PUTS(ctx, buffer, "#<expr\n"); { int i = 0; grn_obj *value; const char *name; uint32_t name_len; unsigned int n_vars; grn_hash *vars = grn_expr_get_vars(ctx, expr, &n_vars); GRN_TEXT_PUTS(ctx, buffer, " vars:{"); GRN_HASH_EACH(ctx, vars, id, &name, &name_len, &value, { if (i++) { GRN_TEXT_PUTC(ctx, buffer, ','); } GRN_TEXT_PUTS(ctx, buffer, "\n "); GRN_TEXT_PUT(ctx, buffer, name, name_len); GRN_TEXT_PUTC(ctx, buffer, ':'); grn_inspect_indented(ctx, buffer, value, " "); }); GRN_TEXT_PUTS(ctx, buffer, "\n },"); }
grn_command_input * grn_command_input_open(grn_ctx *ctx, grn_obj *command) { grn_command_input *input = NULL; GRN_API_ENTER; input = GRN_MALLOC(sizeof(grn_command_input)); if (!input) { ERR(GRN_NO_MEMORY_AVAILABLE, "[command-input] failed to allocate grn_command_input"); goto exit; } input->command = command; /* TODO: Allocate by self. */ { uint32_t n; input->arguments = grn_expr_get_vars(ctx, input->command, &n); } exit : GRN_API_RETURN(input); }