Implemented -f[no]enhanced-diagnostics, to enable/disable the usage of enhanced diagnostics.

This commit is contained in:
Dale Weiler 2013-01-04 12:07:42 +00:00
parent 5377835f1e
commit 793547a132
4 changed files with 20 additions and 13 deletions

View file

@ -99,6 +99,10 @@
# variables with the name 'nil' to be declared.
PREMISSIVE = false
# Enable enhanced diagnostic messages. i.e provides a "did you mean"
# <ident> when you accidently typo. Amongst others
ENHANCED_DIAGNOSTICS = true
# These are all the warnings, usually present via the -W prefix from
# the command line.
[warnings]

1
opts.c
View file

@ -65,6 +65,7 @@ static void opts_setdefault() {
opts_set(opts.flags, FTEPP_PREDEFS, false);
opts_set(opts.flags, CORRECT_TERNARY, true);
opts_set(opts.flags, BAIL_ON_WERROR, true);
opts_set(opts.flags, ENHANCED_DIAGNOSTICS, true);
}
void opts_init(const char *output, int standard, size_t arraysize) {

View file

@ -48,6 +48,7 @@
GMQCC_DEFINE_FLAG(LOOP_LABELS)
GMQCC_DEFINE_FLAG(UNTYPED_NIL)
GMQCC_DEFINE_FLAG(PERMISSIVE)
GMQCC_DEFINE_FLAG(ENHANCED_DIAGNOSTICS)
#endif
/* warning flags */

View file

@ -1642,22 +1642,23 @@ static ast_expression* parse_expression_leave(parser_t *parser, bool stopatcomma
* We should also consider adding correction tables for
* other things as well.
*/
for (i = 0; i < vec_size(parser->correct_variables); i++) {
correct = correct_str(parser->correct_variables[i], parser_tokval(parser));
if (strcmp(correct, parser_tokval(parser))) {
break;
} else if (correct) {
if (OPTS_FLAG(ENHANCED_DIAGNOSTICS)) {
for (i = 0; i < vec_size(parser->correct_variables); i++) {
correct = correct_str(parser->correct_variables[i], parser_tokval(parser));
if (strcmp(correct, parser_tokval(parser))) {
break;
} else if (correct) {
mem_d(correct);
}
}
if (correct) {
parseerror(parser, "unexpected ident: %s (did you mean %s?)", parser_tokval(parser), correct);
mem_d(correct);
goto onerr;
}
}
if (correct) {
parseerror(parser, "unexpected ident: %s (did you mean %s?)", parser_tokval(parser), correct);
mem_d(correct);
} else {
parseerror(parser, "unexpected ident: %s", parser_tokval(parser));
}
parseerror(parser, "unexpected ident: %s", parser_tokval(parser));
goto onerr;
}
}