[Groonga-commit] groonga/groonga at e1ba53a [master] grn_ts: add error messages

Back to archive index

susumu.yata null+****@clear*****
Wed Oct 7 11:52:03 JST 2015


susumu.yata	2015-10-07 11:52:03 +0900 (Wed, 07 Oct 2015)

  New Revision: e1ba53a85284d74fd0573aa6a64869531674e386
  https://github.com/groonga/groonga/commit/e1ba53a85284d74fd0573aa6a64869531674e386

  Message:
    grn_ts: add error messages
    
    GitHub: #412

  Modified files:
    lib/ts.c

  Modified: lib/ts.c (+25 -13)
===================================================================
--- lib/ts.c    2015-10-07 11:17:21 +0900 (12641e6)
+++ lib/ts.c    2015-10-07 11:52:03 +0900 (0c5781f)
@@ -4880,7 +4880,8 @@ grn_ts_expr_parser_tokenize_number(grn_ctx *ctx, grn_ts_expr_parser *parser,
   int_value = strtol(str.ptr, &end, 0);
   if ((end != str.ptr) && (*end != '.')) {
     if (grn_ts_byte_is_name_char(*end)) {
-      GRN_TS_ERR_RETURN(GRN_INVALID_FORMAT, "unterminated Int literal: %.*s",
+      GRN_TS_ERR_RETURN(GRN_INVALID_FORMAT,
+                        "unterminated Int literal: \"%.*s\"",
                         (int)str.size, str.ptr);
     }
     token_str.ptr = str.ptr;
@@ -4894,10 +4895,12 @@ grn_ts_expr_parser_tokenize_number(grn_ctx *ctx, grn_ts_expr_parser *parser,
   } else {
     grn_ts_float float_value = strtod(str.ptr, &end);
     if (end == str.ptr) {
-      GRN_TS_ERR_RETURN(GRN_INVALID_FORMAT, "invalid number");
+      GRN_TS_ERR_RETURN(GRN_INVALID_FORMAT, "invalid number literal: \"%.*s\"",
+                        (int)str.size, str.ptr);
     }
     if (grn_ts_byte_is_name_char(*end)) {
-      GRN_TS_ERR_RETURN(GRN_INVALID_FORMAT, "unterminated Float literal: %.*s",
+      GRN_TS_ERR_RETURN(GRN_INVALID_FORMAT,
+                        "unterminated Float literal: \"%.*s\"",
                         (int)str.size, str.ptr);
     }
     token_str.ptr = str.ptr;
@@ -4930,8 +4933,8 @@ grn_ts_expr_parser_tokenize_text(grn_ctx *ctx, grn_ts_expr_parser *parser,
     }
   }
   if (i >= str.size) {
-    /* No closing double-quote. */
-    return GRN_INVALID_ARGUMENT;
+    GRN_TS_ERR_RETURN(GRN_INVALID_FORMAT, "no closing double quote: \"%.*s\"",
+                      (int)str.size, str.ptr);
   }
   token_str.ptr = str.ptr;
   token_str.size = i + 1;
@@ -5054,9 +5057,11 @@ grn_ts_expr_parser_tokenize_sign(grn_ctx *ctx, grn_ts_expr_parser *parser,
       break;
     }
     case GRN_TS_EXPR_BRACKET_TOKEN: {
+      grn_ts_str bracket;
       const grn_ts_expr_bracket_token *bracket_token;
       bracket_token = (const grn_ts_expr_bracket_token *)prev_token;
-      switch (bracket_token->src.ptr[0]) {
+      bracket = bracket_token->src;
+      switch (bracket.ptr[0]) {
         case '(': case '[': {
           n_args = 1;
           break;
@@ -5066,13 +5071,15 @@ grn_ts_expr_parser_tokenize_sign(grn_ctx *ctx, grn_ts_expr_parser *parser,
           break;
         }
         default: {
-          return GRN_UNKNOWN_ERROR;
+          GRN_TS_ERR_RETURN(GRN_OBJECT_CORRUPT, "undefined bracket: \"%.*s\"",
+                            (int)bracket.size, bracket.ptr);
         }
       }
       break;
     }
     default: {
-      return GRN_INVALID_FORMAT;
+      GRN_TS_ERR_RETURN(GRN_INVALID_FORMAT, "invalid token sequence: %d",
+                        prev_token->type);
     }
   }
   if (token_str.ptr[0] == '+') {
@@ -5098,7 +5105,8 @@ grn_ts_expr_parser_tokenize_op(grn_ctx *ctx, grn_ts_expr_parser *parser,
   grn_ts_expr_op_token *new_token;
   switch (str.ptr[0]) {
     case '+': case '-': {
-      return grn_ts_expr_parser_tokenize_sign(ctx, parser, str, token);
+      rc = grn_ts_expr_parser_tokenize_sign(ctx, parser, str, &new_token);
+      break;
     }
 #define GRN_TS_EXPR_PARSER_TOKENIZE_OP_CASE(label, TYPE, EQUAL_TYPE)\
   case label: {\
@@ -5137,7 +5145,9 @@ grn_ts_expr_parser_tokenize_op(grn_ctx *ctx, grn_ts_expr_parser *parser,
         rc = grn_ts_expr_op_token_open(ctx, token_str, GRN_TS_OP_EQUAL,
                                        &new_token);
       } else {
-        rc = GRN_INVALID_ARGUMENT;
+        GRN_TS_ERR(GRN_INVALID_FORMAT, "single equal not available: =\"%.*s\"",
+                   (int)str.size, str.ptr);
+        rc = ctx->rc;
       }
       break;
     }
@@ -5155,7 +5165,9 @@ grn_ts_expr_parser_tokenize_op(grn_ctx *ctx, grn_ts_expr_parser *parser,
     GRN_TS_EXPR_PARSER_TOKENIZE_OP_CASE('%', MODULUS)
 #undef GRN_TS_EXPR_PARSER_TOKENIZE_OP_CASE
     default: {
-      rc = GRN_INVALID_ARGUMENT;
+      GRN_TS_ERR(GRN_INVALID_FORMAT, "invalid character: \"%.*s\"",
+                 (int)str.size, str.ptr);
+      rc = ctx->rc;
       break;
     }
   }
@@ -5275,7 +5287,8 @@ grn_ts_expr_parser_push_const(grn_ctx *ctx, grn_ts_expr_parser *parser,
       return grn_ts_expr_push_text(ctx, parser->expr, token->content.as_text);
     }
     default: {
-      return GRN_OBJECT_CORRUPT;
+      GRN_TS_ERR_RETURN(GRN_OBJECT_CORRUPT, "invalid data kind: %d",
+                        token->data_kind);
     }
   }
 }
@@ -5356,7 +5369,6 @@ grn_ts_expr_parser_apply(grn_ctx *ctx, grn_ts_expr_parser *parser,
     depth -= n_args + 1;
     stack[depth++] = dummy_token;
   }
-  parser->stack = stack;
   parser->stack_depth = depth;
   return rc;
 }
-------------- next part --------------
HTML����������������������������...
Download 



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