Kouhei Sutou
null+****@clear*****
Sat Feb 20 18:42:29 JST 2016
Kouhei Sutou 2016-02-20 18:42:29 +0900 (Sat, 20 Feb 2016) New Revision: bf18022a605582f9f5b22d65005b59777947cf7d https://github.com/groonga/groonga/commit/bf18022a605582f9f5b22d65005b59777947cf7d Message: Simplify hash_args release code on error Modified files: lib/expr.c lib/grn_ecmascript.lemon Modified: lib/expr.c (+7 -0) =================================================================== --- lib/expr.c 2016-02-20 18:36:27 +0900 (bb2d132) +++ lib/expr.c 2016-02-20 18:42:29 +0900 (fb4f99d) @@ -7584,6 +7584,13 @@ grn_expr_parse(grn_ctx *ctx, grn_obj *expr, GRN_OBJ_FIN(ctx, &efsi.column_stack); GRN_OBJ_FIN(ctx, &efsi.token_stack); GRN_OBJ_FIN(ctx, &efsi.buf); + if (efsi.hash_args) { + grn_obj *value; + GRN_HASH_EACH(ctx, efsi.hash_args, i, NULL, NULL, (void **)&value, { + GRN_OBJ_FIN(ctx, value); + }); + grn_hash_close(ctx, efsi.hash_args); + } } else { ERR(GRN_INVALID_ARGUMENT, "variable is not defined correctly"); } Modified: lib/grn_ecmascript.lemon (+0 -17) =================================================================== --- lib/grn_ecmascript.lemon 2016-02-20 18:36:27 +0900 (8a1ac6c) +++ lib/grn_ecmascript.lemon 2016-02-20 18:42:29 +0900 (1ae46cf) @@ -30,13 +30,6 @@ } else { GRN_TEXT_PUTC(ctx, &message, '|'); } - if (efsi->hash_args) { - grn_obj *value; - GRN_HASH_EACH(ctx, efsi->hash_args, i, NULL, NULL, (void **)&value, { - GRN_OBJ_FIN(ctx, value); - }); - grn_hash_close(efsi->ctx, efsi->hash_args); - } ERR(GRN_SYNTAX_ERROR, "Syntax error: <%.*s>", (int)GRN_TEXT_LEN(&message), GRN_TEXT_VALUE(&message)); GRN_OBJ_FIN(ctx, &message); @@ -429,27 +422,17 @@ property_name_and_value ::= property_name COLON assignment_expression. { GRN_OBJ_INIT(buf, value->header.type, 0, value->header.domain); GRN_TEXT_PUT(ctx, buf, GRN_TEXT_VALUE(value), GRN_TEXT_LEN(value)); } else { - grn_obj *obj; ERR(GRN_INVALID_ARGUMENT, "duplicated property name: <%.*s>", (int)GRN_TEXT_LEN(property), GRN_TEXT_VALUE(property)); - GRN_HASH_EACH(ctx, efsi->hash_args, i, NULL, NULL, (void **)&obj, { - GRN_OBJ_FIN(ctx, obj); - }); - grn_hash_close(efsi->ctx, efsi->hash_args); } e->codes_curr -= 3; } else { - grn_obj *obj; ERR(GRN_NO_MEMORY_AVAILABLE, "failed to add a property to object literal: <%.*s>", (int)GRN_TEXT_LEN(property), GRN_TEXT_VALUE(property)); - GRN_HASH_EACH(ctx, efsi->hash_args, i, NULL, NULL, (void **)&obj, { - GRN_OBJ_FIN(ctx, obj); - }); - grn_hash_close(efsi->ctx, efsi->hash_args); } } } -------------- next part -------------- HTML����������������������������...Download