[Groonga-commit] groonga/groonga [master] expr: extract common code

Back to archive index

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;




Groonga-commit メーリングリストの案内
Back to archive index