From 14e5896e37d758e513e5134d4c66e07f1c8cbbc8 Mon Sep 17 00:00:00 2001 From: John Schneiderman Date: Sun, 15 Sep 2024 08:53:38 +0200 Subject: [PATCH 1/3] Fixes comparison between different enumeration types. --- oscar64/NativeCodeGenerator.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/oscar64/NativeCodeGenerator.cpp b/oscar64/NativeCodeGenerator.cpp index 20c1a90..950a9d8 100644 --- a/oscar64/NativeCodeGenerator.cpp +++ b/oscar64/NativeCodeGenerator.cpp @@ -33490,7 +33490,7 @@ bool NativeCodeBasicBlock::MoveLoadLogicStoreAbsUp(int at) if (mIns[j].ChangesZeroPage(mIns[at + 0].mAddress)) return false; - if (mIns[at + 1].mType == ASMIM_ZERO_PAGE && mIns[j].ChangesZeroPage(mIns[at + 1].mAddress)) + if (mIns[at + 1].mMode == ASMIM_ZERO_PAGE && mIns[j].ChangesZeroPage(mIns[at + 1].mAddress)) return false; if (mIns[j].UsesMemoryOf(mIns[at + 2])) From 7abd615a18632b173e0a31ed793781832c3f9fb0 Mon Sep 17 00:00:00 2001 From: John Schneiderman Date: Sun, 15 Sep 2024 10:28:25 +0200 Subject: [PATCH 2/3] Adds support for the error diagnostic directive. --- oscar64/Scanner.cpp | 19 +++++++++++++++++++ oscar64/Scanner.h | 1 + 2 files changed, 20 insertions(+) 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, From 7b7fe6c5a9c8db33f54f3fcc5e4568ee117c5373 Mon Sep 17 00:00:00 2001 From: John Schneiderman Date: Sun, 15 Sep 2024 10:49:33 +0200 Subject: [PATCH 3/3] Adds the warning diagnositc directive. --- oscar64/Scanner.cpp | 18 ++++++++++++++++++ oscar64/Scanner.h | 1 + 2 files changed, 19 insertions(+) diff --git a/oscar64/Scanner.cpp b/oscar64/Scanner.cpp index 7be59c4..a7fe446 100644 --- a/oscar64/Scanner.cpp +++ b/oscar64/Scanner.cpp @@ -144,6 +144,7 @@ const char* TokenNames[] = "'#ifdef'", "'#ifndef'", "'#error'", + "'#warning'", "'#pragma'", "'#line'", @@ -784,6 +785,19 @@ void Scanner::NextPreToken(void) } exit(EXIT_FAILURE); } + else if (mToken == TK_PREP_WARN) + { + NextRawToken(); + + if (mToken == TK_STRING) + { + this->Warning((const char*)mTokenString); + } + else + { + this->Warning("Missing or invalid warning message"); + } + } else if (mToken == TK_PREP_IDENT) { Macro* def = nullptr; @@ -1166,6 +1180,8 @@ void Scanner::NextSkipRawToken(void) mToken = TK_PREP_DEFINE; else if (!strcmp(tkprep, "error")) mToken = TK_PREP_ERROR; + else if (!strcmp(tkprep, "warning")) + mToken = TK_PREP_WARN; else if (!strcmp(tkprep, "undef")) mToken = TK_PREP_UNDEF; else if (!strcmp(tkprep, "include")) @@ -1556,6 +1572,8 @@ void Scanner::NextRawToken(void) mToken = TK_PREP_DEFINE; else if (!strcmp(tkprep, "error")) mToken = TK_PREP_ERROR; + else if (!strcmp(tkprep, "warning")) + mToken = TK_PREP_WARN; 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 e9f478c..daea112 100644 --- a/oscar64/Scanner.h +++ b/oscar64/Scanner.h @@ -142,6 +142,7 @@ enum Token TK_PREP_IFDEF, TK_PREP_IFNDEF, TK_PREP_ERROR, + TK_PREP_WARN, TK_PREP_PRAGMA, TK_PREP_LINE,