susumu.yata
null+****@clear*****
Tue Nov 17 15:44:44 JST 2015
susumu.yata 2015-11-17 15:44:44 +0900 (Tue, 17 Nov 2015) New Revision: e91fb149ddccf47555dde730871a082b05d67009 https://github.com/groonga/groonga/commit/e91fb149ddccf47555dde730871a082b05d67009 Message: grn_ts: simplify grn_ts_expr_node_deref() Modified files: lib/ts/ts_expr_builder.c lib/ts/ts_expr_node.c lib/ts/ts_expr_node.h Modified: lib/ts/ts_expr_builder.c (+1 -1) =================================================================== --- lib/ts/ts_expr_builder.c 2015-11-17 15:38:52 +0900 (bd9f6fb) +++ lib/ts/ts_expr_builder.c 2015-11-17 15:44:44 +0900 (4577ede) @@ -145,7 +145,7 @@ grn_ts_expr_builder_complete(grn_ctx *ctx, grn_ts_expr_builder *builder, if (!builder || (builder->n_nodes != 1) || builder->n_bridges || !expr) { GRN_TS_ERR_RETURN(GRN_INVALID_ARGUMENT, "invalid argument"); } - rc = grn_ts_expr_node_deref(ctx, builder->nodes[0], &builder->nodes[0]); + rc = grn_ts_expr_node_deref(ctx, &builder->nodes[0]); if (rc != GRN_SUCCESS) { return rc; } Modified: lib/ts/ts_expr_node.c (+11 -14) =================================================================== --- lib/ts/ts_expr_node.c 2015-11-17 15:38:52 +0900 (0a2c512) +++ lib/ts/ts_expr_node.c 2015-11-17 15:44:44 +0900 (b54bbdf) @@ -3115,18 +3115,18 @@ grn_ts_expr_op_node_deref_args_for_equal(grn_ctx *ctx, node->n_args); } if ((node->args[0]->data_kind & ~GRN_TS_VECTOR_FLAG) != GRN_TS_REF) { - return grn_ts_expr_node_deref(ctx, node->args[1], &node->args[1]); + return grn_ts_expr_node_deref(ctx, &node->args[1]); } if ((node->args[1]->data_kind & ~GRN_TS_VECTOR_FLAG) != GRN_TS_REF) { - return grn_ts_expr_node_deref(ctx, node->args[0], &node->args[0]); + return grn_ts_expr_node_deref(ctx, &node->args[0]); } /* FIXME: Arguments should be compared as references if possible. */ - rc = grn_ts_expr_node_deref(ctx, node->args[0], &node->args[0]); + rc = grn_ts_expr_node_deref(ctx, &node->args[0]); if (rc != GRN_SUCCESS) { return rc; } - rc = grn_ts_expr_node_deref(ctx, node->args[1], &node->args[1]); + rc = grn_ts_expr_node_deref(ctx, &node->args[1]); if (rc != GRN_SUCCESS) { return rc; } @@ -3146,7 +3146,7 @@ grn_ts_expr_op_node_deref_args(grn_ctx *ctx, grn_ts_expr_op_node *node) default: { size_t i; for (i = 0; i < node->n_args; i++) { - grn_rc rc = grn_ts_expr_node_deref(ctx, node->args[i], &node->args[i]); + grn_rc rc = grn_ts_expr_node_deref(ctx, &node->args[i]); if (rc != GRN_SUCCESS) { return rc; } @@ -4756,23 +4756,20 @@ grn_ts_expr_node_deref_once(grn_ctx *ctx, grn_ts_expr_node *in, } grn_rc -grn_ts_expr_node_deref(grn_ctx *ctx, grn_ts_expr_node *in, - grn_ts_expr_node **out) +grn_ts_expr_node_deref(grn_ctx *ctx, grn_ts_expr_node **node_ptr) { - grn_ts_expr_node *node = in, **in_ptr = NULL; + grn_ts_expr_node *node = *node_ptr, **in_ptr = NULL; while ((node->data_kind & ~GRN_TS_VECTOR_FLAG) == GRN_TS_REF) { grn_ts_expr_node *new_node; grn_rc rc = grn_ts_expr_node_deref_once(ctx, node, &new_node); if (rc != GRN_SUCCESS) { - if (node != in) { - if (in_ptr) { - *in_ptr = NULL; - } + if (in_ptr) { + *in_ptr = NULL; grn_ts_expr_node_close(ctx, node); } return rc; } - if (node == in) { + if (node == *node_ptr) { grn_ts_expr_bridge_node *bridge_node; bridge_node = (grn_ts_expr_bridge_node *)new_node; if (bridge_node->src != node) { @@ -4782,7 +4779,7 @@ grn_ts_expr_node_deref(grn_ctx *ctx, grn_ts_expr_node *in, } node = new_node; } - *out = node; + *node_ptr = node; return GRN_SUCCESS; } Modified: lib/ts/ts_expr_node.h (+5 -6) =================================================================== --- lib/ts/ts_expr_node.h 2015-11-17 15:38:52 +0900 (56fbe48) +++ lib/ts/ts_expr_node.h 2015-11-17 15:44:44 +0900 (2073177) @@ -97,13 +97,12 @@ void grn_ts_expr_node_close(grn_ctx *ctx, grn_ts_expr_node *node); /* * grn_ts_expr_node_deref() resolves references. * - * If *in refers to a reference node, grn_ts_expr_node_deref() creates a key - * node associated with the destination table and creates a bridge node from - * *in to the key node. If the data kind of the bridge node is GRN_TS_REF, - * references are recursively resolved. + * If *node_ptr refers to a reference node, grn_ts_expr_node_deref() creates a + * key node associated with the destination table and creates a bridge node + * from *node_ptr to the key node. If the data kind of the bridge node is + * GRN_TS_REF, references are recursively resolved. */ -grn_rc grn_ts_expr_node_deref(grn_ctx *ctx, grn_ts_expr_node *in, - grn_ts_expr_node **out); +grn_rc grn_ts_expr_node_deref(grn_ctx *ctx, grn_ts_expr_node **node_ptr); /* grn_ts_expr_node_evaluate() evaluates a subtree. */ grn_rc grn_ts_expr_node_evaluate(grn_ctx *ctx, grn_ts_expr_node *node, -------------- next part -------------- HTML����������������������������...Télécharger