+ char const* invalid_mode;
+ switch (standard) {
+ case STANDARD_ANSI:
+ case STANDARD_C89: c_mode = _C89; break;
+ /* TODO ^v determine difference between these two */
+ case STANDARD_C90: c_mode = _C89; break;
+ case STANDARD_C99: c_mode = _C89 | _C99; break;
+ case STANDARD_GNU89: c_mode = _C89 | _GNUC; break;
+
+default_c_warn:
+ fprintf(stderr,
+ "warning: command line option \"-std=%s\" is not valid for C\n",
+ invalid_mode);
+ /* FALLTHROUGH */
+ case STANDARD_DEFAULT:
+ case STANDARD_GNU99: c_mode = _C89 | _C99 | _GNUC; break;
+
+ case STANDARD_CXX98: invalid_mode = "c++98"; goto default_c_warn;
+ case STANDARD_GNUXX98: invalid_mode = "gnu98"; goto default_c_warn;
+ }
+ goto do_parsing;
+ } else if (filetype == FILETYPE_PREPROCESSED_CXX) {
+ char const* invalid_mode;
+ switch (standard) {
+ case STANDARD_C89: invalid_mode = "c89"; goto default_cxx_warn;
+ case STANDARD_C90: invalid_mode = "c90"; goto default_cxx_warn;
+ case STANDARD_C99: invalid_mode = "c99"; goto default_cxx_warn;
+ case STANDARD_GNU89: invalid_mode = "gnu89"; goto default_cxx_warn;
+ case STANDARD_GNU99: invalid_mode = "gnu99"; goto default_cxx_warn;
+
+ case STANDARD_ANSI:
+ case STANDARD_CXX98: c_mode = _CXX; break;
+
+default_cxx_warn:
+ fprintf(stderr,
+ "warning: command line option \"-std=%s\" is not valid for C++\n",
+ invalid_mode);
+ case STANDARD_DEFAULT:
+ case STANDARD_GNUXX98: c_mode = _CXX | _GNUC; break;
+ }
+
+do_parsing:
+ c_mode |= features_on;
+ c_mode &= ~features_off;
+ init_tokens();