From 57290d63fdde7c79d88570a02daa9abce4830f55 Mon Sep 17 00:00:00 2001 From: Akim Demaille Date: Sat, 27 Apr 2019 19:11:59 +0200 Subject: [PATCH] package: various fixes for syntax-check * cfg.mk: Disable checks where needed (e.g., we do want to check the behavior with tabs). (sc_at_parser_check): Remove. Unfortunately since a11c144609255bc6e42c2aff83548e91cbd05425 we no longer use the './' prefix to run programs in the current directory. That was so that we could run Java programs like the other, although they are no run with the `./` prefix (see 967a59d2c08a33f24708450561e2f8010b604523). As a consequence this sc check no longer makes sense. However, since now AT_PARSER_CHECK passes the `./` prefix itself, this sc-check was superfluous. * examples/c/reccalc/scan.l: Use memcpy, not strncpy. * src/ielr.c, src/reader.c: Obfuscate "lr(0)" so that the sc-check for "space before paren" does not fire. * tests/diagnostics.at: Avoid space-tab, use tab-tab. --- TODO | 2 +- cfg.mk | 21 +++++++-------------- examples/c/calc/calc.y | 2 +- examples/c/reccalc/scan.l | 2 +- src/ielr.c | 2 +- src/reader.c | 2 +- tests/diagnostics.at | 4 ++-- 7 files changed, 14 insertions(+), 21 deletions(-) diff --git a/TODO b/TODO index 1d2fa03e..9fb8c922 100644 --- a/TODO +++ b/TODO @@ -105,7 +105,7 @@ Rename states1 as path, length as pathlen. Introduce inline functions for things such as nullable[*rp - ntokens] where we need to map from symbol number to nterm number. -There are probably a significant part of the the relations management that +There are probably a significant part of the relations management that should be migrated on top of a bitsetv. *** closure diff --git a/cfg.mk b/cfg.mk index effda66f..a4383fc8 100644 --- a/cfg.mk +++ b/cfg.mk @@ -60,18 +60,6 @@ update-copyright-env = \ ## More syntax-checks. ## ## -------------------- ## -# At least for Mac OS X's grep, the order between . and [ in "[^.[]" -# matters: -# $ LC_ALL=fr_FR grep -nE '[^[.]' /dev/null -# $ LC_ALL=C grep -nE '[^[.]' /dev/null -# grep: invalid collating element or class -# $ LC_ALL=fr_FR grep -nE '[^.[]' /dev/null -# $ LC_ALL=C grep -nE '[^.[]' /dev/null -sc_at_parser_check: - @prohibit='AT_PARSER_CHECK\(\[+[^.[]|AT_CHECK\(\[+\./' \ - halt='use AT_PARSER_CHECK for and only for generated parsers' \ - $(_sc_search_regexp) - # Indent only with spaces. # Taken from Coreutils. sc_prohibit_tab_based_indentation: @@ -156,11 +144,16 @@ sc_space_before_open_paren: ## syntax-checks exceptions. ## ## -------------------------- ## +# po-check: we use gnulib-po, so we don't need/want them in our POTFILE. +generated_files = + exclude = \ $(foreach a,$(1),$(eval $(subst $$,$$$$,exclude_file_name_regexp--sc_$(a)))) + $(call exclude, \ bindtextdomain=^lib/main.c$$ \ cast_of_argument_to_free=^src/muscle-tab.c$$ \ + po_check=^po/POTFILES.in$$ \ preprocessor_indentation=^data/|^lib/|^src/parse-gram.[ch]$$ \ program_name=^lib/main.c$$ \ prohibit_always-defined_macros=^data/skeletons/yacc.c$$ \ @@ -169,8 +162,8 @@ $(call exclude, prohibit_doubled_word=^tests/named-refs.at$$ \ prohibit_magic_number_exit=^doc/bison.texi$$ \ prohibit_magic_number_exit+=?|^tests/(conflicts|regression).at$$ \ - prohibit_strcmp=^doc/bison\.texi|tests/local\.at$$ \ - prohibit_tab_based_indentation=install-icc.sh|\.(am|mk)$$|^\.git|Makefile$$ \ + prohibit_strcmp=^doc/bison\.texi|examples|tests/local\.at$$ \ + prohibit_tab_based_indentation=install-icc.sh|\.(am|mk)$$|^\.git|tests/input.at|Makefile$$ \ require_config_h=^(lib/yyerror|data/skeletons/(glr|yacc))\.c$$ \ require_config_h_first=^(lib/yyerror|data/skeletons/(glr|yacc))\.c$$ \ space_before_open_paren=^data/skeletons/ \ diff --git a/examples/c/calc/calc.y b/examples/c/calc/calc.y index f3a6cb1d..a9896e43 100644 --- a/examples/c/calc/calc.y +++ b/examples/c/calc/calc.y @@ -87,7 +87,7 @@ main (int argc, char const* argv[]) { /* Enable parse traces on option -p. */ for (int i = 1; i < argc; ++i) - if (!strcmp(argv[i], "-p")) + if (!strcmp (argv[i], "-p")) yydebug = 1; return yyparse (); } diff --git a/examples/c/reccalc/scan.l b/examples/c/reccalc/scan.l index 7cf0ceef..fbb781aa 100644 --- a/examples/c/reccalc/scan.l +++ b/examples/c/reccalc/scan.l @@ -30,7 +30,7 @@ while (capacity < size + yyleng + 1); \ str = realloc (str, capacity); \ } \ - strncpy (str + size, yytext, yyleng); \ + memcpy (str + size, yytext, yyleng); \ size += yyleng; \ assert (size < capacity); \ } while (0) diff --git a/src/ielr.c b/src/ielr.c index 11aa4d58..62df108e 100644 --- a/src/ielr.c +++ b/src/ielr.c @@ -50,7 +50,7 @@ lr_type_get (void) { char *type = muscle_percent_define_get ("lr.type"); LrType res; - if (STREQ (type, "lr(0)")) + if (STREQ (type, "lr""(0)")) res = LR_TYPE__LR0; else if (STREQ (type, "lalr")) res = LR_TYPE__LALR; diff --git a/src/reader.c b/src/reader.c index 32feb0dc..9d4d049d 100644 --- a/src/reader.c +++ b/src/reader.c @@ -763,7 +763,7 @@ prepare_percent_define_front_end_variables (void) { static char const * const values[] = { - "lr.type", "lr(0)", "lalr", "ielr", "canonical-lr", NULL, + "lr.type", "lr""(0)", "lalr", "ielr", "canonical-lr", NULL, "lr.default-reduction", "most", "consistent", "accepting", NULL, NULL }; diff --git a/tests/diagnostics.at b/tests/diagnostics.at index 57f645a3..cc09ef8e 100644 --- a/tests/diagnostics.at +++ b/tests/diagnostics.at @@ -223,13 +223,13 @@ input.y: warning: fix-its can be applied. Rerun with option AT_TEST([[Locations from M4]], [[%define api.prefix {sun} -%define api.prefix {🌞} +%define api.prefix {🌞} %% exp:; ]], [1], [[input.y:10.1-35: error: %define variable 'api.prefix' redefined - 10 | %define api.prefix {🌞} + 10 | %define api.prefix {🌞} | ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ input.y:9.1-37: previous definition 9 | %define api.prefix {sun}