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����������������������������... Télécharger