X-Git-Url: https://git.m6w6.name/?p=m6w6%2Fext-psi;a=blobdiff_plain;f=src%2Fparser_proc.c;h=75c81060110cf8f80822f0768f46be51dbe91fc1;hp=6b8b81714bc991535ffc6e1b5526f3af2b476c6c;hb=39bbd983561a028dc67a52c2da1c6b13981d2e14;hpb=7b47ebb6e09fd8d50709fe7730995308d7d92054;ds=sidebyside diff --git a/src/parser_proc.c b/src/parser_proc.c index 6b8b817..75c8106 100644 --- a/src/parser_proc.c +++ b/src/parser_proc.c @@ -7581,19 +7581,19 @@ yydestruct (const char *yymsg, int yytype, YYSTYPE *yyvaluep, struct psi_parser case 248: /* impl_type_token */ #line 393 "src/parser_proc_grammar.y" /* glr.c:851 */ - {psi_token_free(&(*(struct psi_token **)(&(*yyvaluep))));} + {} #line 7586 "src/parser_proc.c" /* glr.c:851 */ break; case 249: /* impl_type_restricted_token */ #line 393 "src/parser_proc_grammar.y" /* glr.c:851 */ - {psi_token_free(&(*(struct psi_token **)(&(*yyvaluep))));} + {} #line 7592 "src/parser_proc.c" /* glr.c:851 */ break; case 250: /* impl_type_extended_token */ #line 393 "src/parser_proc_grammar.y" /* glr.c:851 */ - {psi_token_free(&(*(struct psi_token **)(&(*yyvaluep))));} + {} #line 7598 "src/parser_proc.c" /* glr.c:851 */ break; @@ -7653,7 +7653,7 @@ yydestruct (const char *yymsg, int yytype, YYSTYPE *yyvaluep, struct psi_parser case 260: /* let_func_token */ #line 393 "src/parser_proc_grammar.y" /* glr.c:851 */ - {psi_token_free(&(*(struct psi_token **)(&(*yyvaluep))));} + {} #line 7658 "src/parser_proc.c" /* glr.c:851 */ break; @@ -7671,7 +7671,7 @@ yydestruct (const char *yymsg, int yytype, YYSTYPE *yyvaluep, struct psi_parser case 263: /* callback_rval */ #line 393 "src/parser_proc_grammar.y" /* glr.c:851 */ - {psi_token_free(&(*(struct psi_token **)(&(*yyvaluep))));} + {} #line 7676 "src/parser_proc.c" /* glr.c:851 */ break; @@ -7725,7 +7725,7 @@ yydestruct (const char *yymsg, int yytype, YYSTYPE *yyvaluep, struct psi_parser case 272: /* set_func_token */ #line 393 "src/parser_proc_grammar.y" /* glr.c:851 */ - {psi_token_free(&(*(struct psi_token **)(&(*yyvaluep))));} + {} #line 7730 "src/parser_proc.c" /* glr.c:851 */ break; @@ -7749,7 +7749,7 @@ yydestruct (const char *yymsg, int yytype, YYSTYPE *yyvaluep, struct psi_parser case 276: /* assert_stmt_token */ #line 393 "src/parser_proc_grammar.y" /* glr.c:851 */ - {psi_token_free(&(*(struct psi_token **)(&(*yyvaluep))));} + {} #line 7754 "src/parser_proc.c" /* glr.c:851 */ break; @@ -9442,7 +9442,7 @@ static int psi_parser_proc_lex(YYSTYPE *lvalp, struct psi_parser *P, struct psi_ #if PSI_DEBUG_LEX PSI_DEBUG_PRINT(P, "PSI: LEX index %4zu ", *index); #endif - if (psi_plist_get(tokens, (*index)++, &token)) { + if (psi_plist_get(tokens, (*index)++, &token) && token) { #if PSI_DEBUG_LEX PSI_DEBUG_DUMP(P, psi_token_dump, token); #endif @@ -9475,11 +9475,22 @@ static void psi_parser_proc_error(struct psi_parser *P, struct psi_plist *tokens P->error(PSI_DATA(P), T, PSI_WARNING, "PSI %s at col %u", msg, T->col); while (i <= last || T->type != PSI_T_EOS) { + const char *pos; + if (!psi_plist_get(tokens, i++, &T)) { break; } + + if (i < last + 1) { + pos = "preceding"; + } else if (i > last + 1) { + pos = "following"; + } else { + pos = "offending"; + } + P->error(PSI_DATA(P), T, PSI_WARNING, "PSI %s token '%s' at col %u", - ilast+1?"following":"offending", T->text->val, T->col); + pos, T ? T->text->val : "", T ? T->col : 0); } } else { P->error(PSI_DATA(P), NULL, PSI_WARNING, "PSI %s", msg);