diff --git a/oscar64/Scanner.cpp b/oscar64/Scanner.cpp index 6ce2d3f..7be59c4 100644 --- a/oscar64/Scanner.cpp +++ b/oscar64/Scanner.cpp @@ -143,6 +143,7 @@ const char* TokenNames[] = "'#endif'", "'#ifdef'", "'#ifndef'", + "'#error'", "'#pragma'", "'#line'", @@ -769,6 +770,20 @@ void Scanner::NextPreToken(void) mOffset++; } } + else if (mToken == TK_PREP_ERROR) + { + NextRawToken(); + + if (mToken == TK_STRING) + { + mErrors->Error(mLocation, ERRR_PREPROCESSOR, (const char*)mTokenString); + } + else + { + mErrors->Error(mLocation, EERR_INVALID_PREPROCESSOR, "Missing or invalid error message"); + } + exit(EXIT_FAILURE); + } else if (mToken == TK_PREP_IDENT) { Macro* def = nullptr; @@ -1149,6 +1164,8 @@ void Scanner::NextSkipRawToken(void) if (!strcmp(tkprep, "define")) mToken = TK_PREP_DEFINE; + else if (!strcmp(tkprep, "error")) + mToken = TK_PREP_ERROR; else if (!strcmp(tkprep, "undef")) mToken = TK_PREP_UNDEF; else if (!strcmp(tkprep, "include")) @@ -1537,6 +1554,8 @@ void Scanner::NextRawToken(void) if (!strcmp(tkprep, "define")) mToken = TK_PREP_DEFINE; + else if (!strcmp(tkprep, "error")) + mToken = TK_PREP_ERROR; else if (!strcmp(tkprep, "undef")) mToken = TK_PREP_UNDEF; else if (!strcmp(tkprep, "include")) diff --git a/oscar64/Scanner.h b/oscar64/Scanner.h index 52d39df..e9f478c 100644 --- a/oscar64/Scanner.h +++ b/oscar64/Scanner.h @@ -141,6 +141,7 @@ enum Token TK_PREP_ENDIF, TK_PREP_IFDEF, TK_PREP_IFNDEF, + TK_PREP_ERROR, TK_PREP_PRAGMA, TK_PREP_LINE,