[Groonga-commit] groonga/groonga at 7c8a17d [master] Stop to wrap object literal by GRN_OBJ_PTR

Back to archive index

Kouhei Sutou null+****@clear*****
Sun Mar 6 18:01:15 JST 2016


Kouhei Sutou	2016-03-06 18:01:15 +0900 (Sun, 06 Mar 2016)

  New Revision: 7c8a17d8f14ec90342fa6cf9d3fecf88a1e4de9a
  https://github.com/groonga/groonga/commit/7c8a17d8f14ec90342fa6cf9d3fecf88a1e4de9a

  Message:
    Stop to wrap object literal by GRN_OBJ_PTR
    
    It's backward incompatible change. But nobody don't use the
    feature (object literal as function argument) yet.
    
    grn_expr_append_const_ptr() is also removed. Because it's confused.
    It takes ownership of ptr. And, normally, ptr isn't constant.

  Modified files:
    include/groonga/expr.h
    lib/expr.c
    lib/grn_ecmascript.c
    lib/grn_ecmascript.lemon
    lib/proc/proc_fuzzy_search.c
    lib/proc/proc_highlight.c
    lib/proc/proc_snippet.c

  Modified: include/groonga/expr.h (+0 -2)
===================================================================
--- include/groonga/expr.h    2016-03-06 16:33:56 +0900 (c1c3bf9)
+++ include/groonga/expr.h    2016-03-06 18:01:15 +0900 (b1376db)
@@ -52,8 +52,6 @@ GRN_API grn_obj *grn_expr_append_const_str(grn_ctx *ctx, grn_obj *expr,
                                            grn_operator op, int nargs);
 GRN_API grn_obj *grn_expr_append_const_int(grn_ctx *ctx, grn_obj *expr, int i,
                                            grn_operator op, int nargs);
-GRN_API grn_obj *grn_expr_append_const_ptr(grn_ctx *ctx, grn_obj *expr, grn_obj *ptr,
-                                           grn_operator op, int nargs);
 GRN_API grn_rc grn_expr_append_op(grn_ctx *ctx, grn_obj *expr, grn_operator op, int nargs);
 
 GRN_API grn_rc grn_expr_get_keywords(grn_ctx *ctx, grn_obj *expr, grn_obj *keywords);

  Modified: lib/expr.c (+7 -24)
===================================================================
--- lib/expr.c    2016-03-06 16:33:56 +0900 (53a44ed)
+++ lib/expr.c    2016-03-06 18:01:15 +0900 (5b02ab1)
@@ -553,15 +553,6 @@ grn_expr_close(grn_ctx *ctx, grn_obj *expr)
       }
       for (j = 0; j < end; j++) {
         grn_obj *const_obj = &e->const_blks[i][j];
-        if (const_obj->header.type == GRN_PTR) {
-          grn_obj *ref_obj = GRN_PTR_VALUE(const_obj);
-          if (ref_obj && ref_obj->header.type == GRN_TABLE_HASH_KEY) {
-            grn_obj *value;
-            GRN_HASH_EACH(ctx, (grn_hash *)ref_obj, i, NULL, NULL, (void **)&value, {
-              GRN_OBJ_FIN(ctx, value);
-            });
-          }
-        }
         grn_obj_close(ctx, const_obj);
       }
       GRN_FREE(e->const_blks[i]);
@@ -578,6 +569,13 @@ grn_expr_close(grn_ctx *ctx, grn_obj *expr)
       grn_obj_unlink(ctx, obj);
 #else
       if (obj->header.type) {
+        if (obj->header.type == GRN_TABLE_HASH_KEY &&
+            ((grn_hash *)obj)->value_size == sizeof(grn_obj)) {
+          grn_obj *value;
+          GRN_HASH_EACH(ctx, (grn_hash *)obj, id, NULL, NULL, (void **)&value, {
+            GRN_OBJ_FIN(ctx, value);
+          });
+        }
         grn_obj_unlink(ctx, obj);
       } else {
         GRN_LOG(ctx, GRN_LOG_WARNING, "GRN_VOID object is tried to be unlinked");
@@ -1279,21 +1277,6 @@ grn_expr_append_const_int(grn_ctx *ctx, grn_obj *expr, int i,
   GRN_API_RETURN(res);
 }
 
-grn_obj *
-grn_expr_append_const_ptr(grn_ctx *ctx, grn_obj *expr, grn_obj *ptr,
-                          grn_operator op, int nargs)
-{
-  grn_obj *res = NULL;
-  GRN_API_ENTER;
-  if ((res = grn_expr_alloc_const(ctx, expr))) {
-    GRN_PTR_INIT(res, GRN_OBJ_OWN, GRN_DB_OBJECT);
-    GRN_PTR_SET(ctx, res, ptr);
-    res->header.impl_flags |= GRN_OBJ_EXPRCONST;
-  }
-  grn_expr_append_obj(ctx, expr, res, op, nargs);
-  GRN_API_RETURN(res);
-}
-
 grn_rc
 grn_expr_append_op(grn_ctx *ctx, grn_obj *expr, grn_operator op, int nargs)
 {

  Modified: lib/grn_ecmascript.c (+44 -29)
===================================================================
--- lib/grn_ecmascript.c    2016-03-06 16:33:56 +0900 (017a572)
+++ lib/grn_ecmascript.c    2016-03-06 18:01:15 +0900 (73e188e)
@@ -1895,15 +1895,31 @@ static void yy_reduce(
 #line 386 "grn_ecmascript.lemon"
 {
   grn_ctx *ctx = efsi->ctx;
-  grn_expr *e = (grn_expr *)(efsi->e);
-  grn_expr_append_const_ptr(ctx, (grn_obj *)e, (grn_obj *)efsi->object_literal,
-                            GRN_OP_PUSH, 1);
+  grn_expr_take_obj(ctx, efsi->e, (grn_obj *)(efsi->object_literal));
+  grn_expr_append_obj(ctx, efsi->e, (grn_obj *)(efsi->object_literal),
+                      GRN_OP_PUSH, 1);
   efsi->object_literal = NULL;
 }
 #line 1904 "grn_ecmascript.c"
         break;
+      case 110: /* property_name_and_value_list ::= */
+#line 394 "grn_ecmascript.lemon"
+{
+  grn_ctx *ctx = efsi->ctx;
+
+  efsi->object_literal =
+    grn_hash_create(ctx, NULL, GRN_TABLE_MAX_KEY_SIZE, sizeof(grn_obj),
+                    GRN_OBJ_KEY_VAR_SIZE|GRN_OBJ_TEMPORARY|GRN_HASH_TINY);
+  if (!efsi->object_literal) {
+    ERR(GRN_NO_MEMORY_AVAILABLE,
+        "couldn't create hash table for parsing object literal: <%.*s>",
+        (int)(efsi->str_end - efsi->str), efsi->str);
+  }
+}
+#line 1920 "grn_ecmascript.c"
+        break;
       case 113: /* property_name_and_value ::= property_name COLON assignment_expression */
-#line 398 "grn_ecmascript.lemon"
+#line 409 "grn_ecmascript.lemon"
 {
   grn_ctx *ctx = efsi->ctx;
   grn_expr *e = (grn_expr *)(efsi->e);
@@ -1944,44 +1960,44 @@ static void yy_reduce(
     }
   }
 }
-#line 1948 "grn_ecmascript.c"
+#line 1964 "grn_ecmascript.c"
         break;
       case 115: /* member_expression_part ::= BRACKETL expression BRACKETR */
-#line 441 "grn_ecmascript.lemon"
+#line 452 "grn_ecmascript.lemon"
 {
   grn_expr_append_op(efsi->ctx, efsi->e, GRN_OP_GET_MEMBER, 2);
 }
-#line 1955 "grn_ecmascript.c"
+#line 1971 "grn_ecmascript.c"
         break;
       case 117: /* arguments ::= PARENL argument_list PARENR */
-#line 446 "grn_ecmascript.lemon"
+#line 457 "grn_ecmascript.lemon"
 { yygotominor.yy0 = yymsp[-1].minor.yy0; }
-#line 1960 "grn_ecmascript.c"
+#line 1976 "grn_ecmascript.c"
         break;
       case 118: /* argument_list ::= */
-#line 447 "grn_ecmascript.lemon"
+#line 458 "grn_ecmascript.lemon"
 { yygotominor.yy0 = 0; }
-#line 1965 "grn_ecmascript.c"
+#line 1981 "grn_ecmascript.c"
         break;
       case 119: /* argument_list ::= assignment_expression */
-#line 448 "grn_ecmascript.lemon"
+#line 459 "grn_ecmascript.lemon"
 { yygotominor.yy0 = 1; }
-#line 1970 "grn_ecmascript.c"
+#line 1986 "grn_ecmascript.c"
         break;
       case 120: /* argument_list ::= argument_list COMMA assignment_expression */
-#line 449 "grn_ecmascript.lemon"
+#line 460 "grn_ecmascript.lemon"
 { yygotominor.yy0 = yymsp[-2].minor.yy0 + 1; }
-#line 1975 "grn_ecmascript.c"
+#line 1991 "grn_ecmascript.c"
         break;
       case 121: /* output_columns ::= */
-#line 451 "grn_ecmascript.lemon"
+#line 462 "grn_ecmascript.lemon"
 {
   yygotominor.yy0 = 0;
 }
-#line 1982 "grn_ecmascript.c"
+#line 1998 "grn_ecmascript.c"
         break;
       case 122: /* output_columns ::= output_column */
-#line 454 "grn_ecmascript.lemon"
+#line 465 "grn_ecmascript.lemon"
 {
   if (yymsp[0].minor.yy0) {
     yygotominor.yy0 = 0;
@@ -1989,10 +2005,10 @@ static void yy_reduce(
     yygotominor.yy0 = 1;
   }
 }
-#line 1993 "grn_ecmascript.c"
+#line 2009 "grn_ecmascript.c"
         break;
       case 123: /* output_columns ::= output_columns COMMA output_column */
-#line 462 "grn_ecmascript.lemon"
+#line 473 "grn_ecmascript.lemon"
 {
   if (yymsp[0].minor.yy0) {
     yygotominor.yy0 = yymsp[-2].minor.yy0;
@@ -2003,10 +2019,10 @@ static void yy_reduce(
     yygotominor.yy0 = 1;
   }
 }
-#line 2007 "grn_ecmascript.c"
+#line 2023 "grn_ecmascript.c"
         break;
       case 124: /* output_column ::= STAR */
-#line 473 "grn_ecmascript.lemon"
+#line 484 "grn_ecmascript.lemon"
 {
   grn_ctx *ctx = efsi->ctx;
   grn_obj *expr = efsi->e;
@@ -2044,21 +2060,21 @@ static void yy_reduce(
     yygotominor.yy0 = GRN_TRUE;
   }
 }
-#line 2048 "grn_ecmascript.c"
+#line 2064 "grn_ecmascript.c"
         break;
       case 125: /* output_column ::= NONEXISTENT_COLUMN */
-#line 510 "grn_ecmascript.lemon"
+#line 521 "grn_ecmascript.lemon"
 {
   yygotominor.yy0 = GRN_TRUE;
 }
-#line 2055 "grn_ecmascript.c"
+#line 2071 "grn_ecmascript.c"
         break;
       case 126: /* output_column ::= assignment_expression */
-#line 513 "grn_ecmascript.lemon"
+#line 524 "grn_ecmascript.lemon"
 {
   yygotominor.yy0 = GRN_FALSE;
 }
-#line 2062 "grn_ecmascript.c"
+#line 2078 "grn_ecmascript.c"
         break;
       default:
       /* (0) input ::= query */ yytestcase(yyruleno==0);
@@ -2104,7 +2120,6 @@ static void yy_reduce(
       /* (106) element_list ::= assignment_expression */ yytestcase(yyruleno==106);
       /* (107) element_list ::= elision assignment_expression */ yytestcase(yyruleno==107);
       /* (108) element_list ::= element_list elision assignment_expression */ yytestcase(yyruleno==108);
-      /* (110) property_name_and_value_list ::= */ yytestcase(yyruleno==110);
       /* (111) property_name_and_value_list ::= property_name_and_value */ yytestcase(yyruleno==111);
       /* (112) property_name_and_value_list ::= property_name_and_value_list COMMA property_name_and_value */ yytestcase(yyruleno==112);
       /* (114) property_name ::= STRING */ yytestcase(yyruleno==114);
@@ -2197,7 +2212,7 @@ static void yy_syntax_error(
       GRN_OBJ_FIN(ctx, &message);
     }
   }
-#line 2201 "grn_ecmascript.c"
+#line 2216 "grn_ecmascript.c"
 /************ End %syntax_error code ******************************************/
   grn_expr_parserARG_STORE; /* Suppress warning about unused %extra_argument variable */
 }

  Modified: lib/grn_ecmascript.lemon (+15 -4)
===================================================================
--- lib/grn_ecmascript.lemon    2016-03-06 16:33:56 +0900 (214a74e)
+++ lib/grn_ecmascript.lemon    2016-03-06 18:01:15 +0900 (b902f42)
@@ -385,13 +385,24 @@ element_list ::= element_list elision assignment_expression.
 
 object_literal ::= BRACEL property_name_and_value_list BRACER. {
   grn_ctx *ctx = efsi->ctx;
-  grn_expr *e = (grn_expr *)(efsi->e);
-  grn_expr_append_const_ptr(ctx, (grn_obj *)e, (grn_obj *)efsi->object_literal,
-                            GRN_OP_PUSH, 1);
+  grn_expr_take_obj(ctx, efsi->e, (grn_obj *)(efsi->object_literal));
+  grn_expr_append_obj(ctx, efsi->e, (grn_obj *)(efsi->object_literal),
+                      GRN_OP_PUSH, 1);
   efsi->object_literal = NULL;
 }
 
-property_name_and_value_list ::= .
+property_name_and_value_list ::= . {
+  grn_ctx *ctx = efsi->ctx;
+
+  efsi->object_literal =
+    grn_hash_create(ctx, NULL, GRN_TABLE_MAX_KEY_SIZE, sizeof(grn_obj),
+                    GRN_OBJ_KEY_VAR_SIZE|GRN_OBJ_TEMPORARY|GRN_HASH_TINY);
+  if (!efsi->object_literal) {
+    ERR(GRN_NO_MEMORY_AVAILABLE,
+        "couldn't create hash table for parsing object literal: <%.*s>",
+        (int)(efsi->str_end - efsi->str), efsi->str);
+  }
+}
 property_name_and_value_list ::= property_name_and_value.
 property_name_and_value_list ::= property_name_and_value_list COMMA property_name_and_value.
 

  Modified: lib/proc/proc_fuzzy_search.c (+2 -3)
===================================================================
--- lib/proc/proc_fuzzy_search.c    2016-03-06 16:33:56 +0900 (ce7a1fd)
+++ lib/proc/proc_fuzzy_search.c    2016-03-06 18:01:15 +0900 (4e8d99f)
@@ -320,9 +320,8 @@ selector_fuzzy_search(grn_ctx *ctx, grn_obj *table, grn_obj *index,
     grn_obj *value;
     int key_size;
     option_ptr = args[3];
-    if (option_ptr->header.type == GRN_PTR) {
-      grn_obj *option;
-      option = GRN_PTR_VALUE(option_ptr);
+    if (option_ptr->header.type == GRN_TABLE_HASH_KEY) {
+      grn_obj *option = option_ptr;
       if (option->header.type != GRN_TABLE_HASH_KEY) {
         GRN_PLUGIN_ERROR(ctx, GRN_INVALID_ARGUMENT,
                          "fuzzy_search(): "

  Modified: lib/proc/proc_highlight.c (+2 -4)
===================================================================
--- lib/proc/proc_highlight.c    2016-03-06 16:33:56 +0900 (067e699)
+++ lib/proc/proc_highlight.c    2016-03-06 18:01:15 +0900 (ebf50b5)
@@ -255,10 +255,8 @@ func_highlight(grn_ctx *ctx, int nargs, grn_obj **args,
     grn_obj *end_arg = args[nargs - 1];
     int n_args_without_option = nargs;
 
-    if (end_arg->header.type == GRN_PTR) {
-      grn_obj *hash;
-      hash = GRN_PTR_VALUE(end_arg);
-
+    if (end_arg->header.type == GRN_TABLE_HASH_KEY) {
+      grn_obj *hash = end_arg;
       if (hash) {
         grn_hash_cursor *cursor;
         void *key;

  Modified: lib/proc/proc_snippet.c (+2 -3)
===================================================================
--- lib/proc/proc_snippet.c    2016-03-06 16:33:56 +0900 (de812fb)
+++ lib/proc/proc_snippet.c    2016-03-06 18:01:15 +0900 (54d2033)
@@ -104,9 +104,8 @@ func_snippet(grn_ctx *ctx, int nargs, grn_obj **args, grn_user_data *user_data)
     int default_close_tag_length = 0;
     int n_args_without_option = nargs;
 
-    if (end_arg->header.type == GRN_PTR) {
-      grn_obj *hash;
-      hash = GRN_PTR_VALUE(end_arg);
+    if (end_arg->header.type == GRN_TABLE_HASH_KEY) {
+      grn_obj *hash = end_arg;
       if (hash) {
         grn_hash_cursor *cursor;
         void *key;
-------------- next part --------------
HTML����������������������������...
Download 



More information about the Groonga-commit mailing list
Back to archive index