null+****@clear*****
null+****@clear*****
2012年 4月 11日 (水) 11:31:19 JST
Kouhei Sutou 2012-04-11 11:31:19 +0900 (Wed, 11 Apr 2012)
New Revision: 8268368460d809f3d643a202dadced9ba675083f
Log:
expr: extract common code
Modified files:
lib/expr.c
Modified: lib/expr.c (+24 -25)
===================================================================
--- lib/expr.c 2012-04-10 11:39:45 +0900 (1056884)
+++ lib/expr.c 2012-04-11 11:31:19 +0900 (a054cc2)
@@ -4788,6 +4788,27 @@ grn_expr_parser_open(grn_ctx *ctx)
#define PARSE(token) grn_expr_parser(ctx->impl->parser, (token), 0, q)
+static void
+accept_query_string(grn_ctx *ctx, efs_info *efsi,
+ const char *str, unsigned int str_size)
+{
+ grn_obj *column, *token;
+
+ GRN_PTR_PUT(ctx, &efsi->token_stack,
+ grn_expr_add_str(ctx, efsi->e, str, str_size));
+ {
+ efs_info *q = efsi;
+ PARSE(GRN_EXPR_TOKEN_QSTRING);
+ }
+
+ GRN_PTR_POP(&efsi->token_stack, token);
+ column = grn_ptr_value_at(&efsi->column_stack, -1);
+ grn_expr_append_const(efsi->ctx, efsi->e, column, GRN_OP_GET_VALUE, 1);
+ grn_expr_append_obj(efsi->ctx, efsi->e, token, GRN_OP_PUSH, 1);
+ grn_expr_append_op(efsi->ctx, efsi->e,
+ grn_int32_value_at(&efsi->mode_stack, -1), 2);
+}
+
static grn_rc
get_word_(grn_ctx *ctx, efs_info *q)
{
@@ -4878,18 +4899,8 @@ get_word_(grn_ctx *ctx, efs_info *q)
}
end += len;
}
- GRN_PTR_PUT(ctx, &q->token_stack, grn_expr_add_str(ctx, q->e, start, end - start));
+ accept_query_string(ctx, q, start, end - start);
- PARSE(GRN_EXPR_TOKEN_QSTRING);
-{
- grn_obj *column, *token;
- efs_info *efsi = q;
- GRN_PTR_POP(&efsi->token_stack, token);
- column = grn_ptr_value_at(&efsi->column_stack, -1);
- grn_expr_append_const(efsi->ctx, efsi->e, column, GRN_OP_GET_VALUE, 1);
- grn_expr_append_obj(efsi->ctx, efsi->e, token, GRN_OP_PUSH, 1);
- grn_expr_append_op(efsi->ctx, efsi->e, grn_int32_value_at(&efsi->mode_stack, -1), 2);
-}
return GRN_SUCCESS;
}
@@ -4945,20 +4956,8 @@ parse_query(grn_ctx *ctx, efs_info *q)
s += len;
}
- GRN_PTR_PUT(ctx, &q->token_stack, grn_expr_add_str(ctx, q->e,
- GRN_TEXT_VALUE(&q->buf),
- GRN_TEXT_LEN(&q->buf)));
- PARSE(GRN_EXPR_TOKEN_QSTRING);
-{
- grn_obj *column, *token;
- efs_info *efsi = q;
- GRN_PTR_POP(&efsi->token_stack, token);
- column = grn_ptr_value_at(&efsi->column_stack, -1);
- grn_expr_append_const(efsi->ctx, efsi->e, column, GRN_OP_GET_VALUE, 1);
- grn_expr_append_obj(efsi->ctx, efsi->e, token, GRN_OP_PUSH, 1);
- grn_expr_append_op(efsi->ctx, efsi->e, grn_int32_value_at(&efsi->mode_stack, -1), 2);
-}
-
+ accept_query_string(ctx, q,
+ GRN_TEXT_VALUE(&q->buf), GRN_TEXT_LEN(&q->buf));
}
break;