From beb8d8e6d7dd6afc03ef612a4e21af531a685446 Mon Sep 17 00:00:00 2001 From: drmortalwombat <90205530+drmortalwombat@users.noreply.github.com> Date: Mon, 6 Jun 2022 22:06:57 +0200 Subject: [PATCH] Fix crash on error messages with unnamed objects --- oscar64/Compiler.cpp | 2 +- oscar64/GlobalAnalyzer.cpp | 2 +- oscar64/InterCodeGenerator.cpp | 6 +++--- oscar64/Linker.cpp | 2 +- oscar64/Parser.cpp | 36 +++++++++++++++++----------------- oscar64/Scanner.cpp | 2 +- 6 files changed, 25 insertions(+), 25 deletions(-) diff --git a/oscar64/Compiler.cpp b/oscar64/Compiler.cpp index e5b08f7..da2c021 100644 --- a/oscar64/Compiler.cpp +++ b/oscar64/Compiler.cpp @@ -108,7 +108,7 @@ void Compiler::RegisterRuntime(const Location & loc, const Ident* ident) } else { - mErrors->Error(loc, EERR_RUNTIME_CODE, "Missing runtime code implementation", ident->mString); + mErrors->Error(loc, EERR_RUNTIME_CODE, "Missing runtime code implementation", ident); } } diff --git a/oscar64/GlobalAnalyzer.cpp b/oscar64/GlobalAnalyzer.cpp index 75978f9..9a77dff 100644 --- a/oscar64/GlobalAnalyzer.cpp +++ b/oscar64/GlobalAnalyzer.cpp @@ -237,7 +237,7 @@ void GlobalAnalyzer::AnalyzeProcedure(Expression* exp, Declaration* dec) Analyze(exp, dec); } else - mErrors->Error(dec->mLocation, EERR_UNDEFINED_OBJECT, "Calling undefined function", dec->mIdent->mString); + mErrors->Error(dec->mLocation, EERR_UNDEFINED_OBJECT, "Calling undefined function", dec->mIdent); dec->mFlags &= ~DTF_FUNC_ANALYZING; } diff --git a/oscar64/InterCodeGenerator.cpp b/oscar64/InterCodeGenerator.cpp index 9af9280..0b8d4aa 100644 --- a/oscar64/InterCodeGenerator.cpp +++ b/oscar64/InterCodeGenerator.cpp @@ -341,7 +341,7 @@ void InterCodeGenerator::TranslateAssembler(InterCodeModule* mod, Expression* ex dec->mLinkerObject->AddReference(ref); } else - mErrors->Error(aexp->mLocation, EERR_ASM_INVALD_OPERAND, "Undefined immediate operand", aexp->mBase->mIdent->mString); + mErrors->Error(aexp->mLocation, EERR_ASM_INVALD_OPERAND, "Undefined immediate operand", aexp->mBase->mIdent); } else if (aexp->mType == DT_VARIABLE_REF) { @@ -586,7 +586,7 @@ void InterCodeGenerator::TranslateAssembler(InterCodeModule* mod, Expression* ex if (aexp->mBase->mBase) d[offset] = aexp->mOffset + aexp->mBase->mInteger - offset - 1; else - mErrors->Error(aexp->mLocation, EERR_ASM_INVALD_OPERAND, "Undefined immediate operand", aexp->mBase->mIdent->mString); + mErrors->Error(aexp->mLocation, EERR_ASM_INVALD_OPERAND, "Undefined immediate operand", aexp->mBase->mIdent); } else d[offset] = aexp->mInteger - offset - 1; @@ -2030,7 +2030,7 @@ InterCodeGenerator::ExValue InterCodeGenerator::TranslateExpression(Declaration* } else { - mErrors->Error(exp->mLeft->mDecValue->mLocation, EERR_OBJECT_NOT_FOUND, "Unknown intrinsic function", iname->mString); + mErrors->Error(exp->mLeft->mDecValue->mLocation, EERR_OBJECT_NOT_FOUND, "Unknown intrinsic function", iname); return ExValue(TheVoidTypeDeclaration); } } diff --git a/oscar64/Linker.cpp b/oscar64/Linker.cpp index 1d6c5dd..c5081fb 100644 --- a/oscar64/Linker.cpp +++ b/oscar64/Linker.cpp @@ -426,7 +426,7 @@ void Linker::Link(void) else if (obj->mFlags & LOBJF_REFERENCED) { if (!obj->mRegion) - mErrors->Error(obj->mLocation, ERRR_INSUFFICIENT_MEMORY, "Could not place object", obj->mIdent->mString); + mErrors->Error(obj->mLocation, ERRR_INSUFFICIENT_MEMORY, "Could not place object", obj->mIdent); else if (obj->mRegion->mCartridgeBanks != 0) { for (int i = 0; i < 64; i++) diff --git a/oscar64/Parser.cpp b/oscar64/Parser.cpp index bd94756..874497a 100644 --- a/oscar64/Parser.cpp +++ b/oscar64/Parser.cpp @@ -49,7 +49,7 @@ Declaration* Parser::ParseStructDeclaration(uint64 flags, DecType dt) } else { - mErrors->Error(mScanner->mLocation, EERR_DUPLICATE_DEFINITION, "Error duplicate struct declaration", structName->mString); + mErrors->Error(mScanner->mLocation, EERR_DUPLICATE_DEFINITION, "Error duplicate struct declaration", structName); } } } @@ -92,7 +92,7 @@ Declaration* Parser::ParseStructDeclaration(uint64 flags, DecType dt) dec->mSize = offset; if (dec->mScope->Insert(mdec->mIdent, mdec)) - mErrors->Error(mdec->mLocation, EERR_DUPLICATE_DEFINITION, "Duplicate struct member declaration", mdec->mIdent->mString); + mErrors->Error(mdec->mLocation, EERR_DUPLICATE_DEFINITION, "Duplicate struct member declaration", mdec->mIdent); if (mlast) mlast->mNext = mdec; @@ -259,12 +259,12 @@ Declaration* Parser::ParseBaseTypeDeclaration(uint64 flags) } else if (!dec) { - mErrors->Error(mScanner->mLocation, EERR_OBJECT_NOT_FOUND, "Identifier not defined", mScanner->mTokenIdent->mString); + mErrors->Error(mScanner->mLocation, EERR_OBJECT_NOT_FOUND, "Identifier not defined", mScanner->mTokenIdent); mScanner->NextToken(); } else { - mErrors->Error(mScanner->mLocation, EERR_NOT_A_TYPE, "Identifier is no type", mScanner->mTokenIdent->mString); + mErrors->Error(mScanner->mLocation, EERR_NOT_A_TYPE, "Identifier is no type", mScanner->mTokenIdent); mScanner->NextToken(); } break; @@ -706,7 +706,7 @@ Expression* Parser::ParseInitExpression(Declaration* dtype) if (dtype->mType != DT_TYPE_ARRAY && !(dtype->mFlags & DTF_DEFINED)) { if (dtype->mIdent) - mErrors->Error(mScanner->mLocation, EERR_UNDEFINED_OBJECT, "Constant for undefined type", dtype->mIdent->mString); + mErrors->Error(mScanner->mLocation, EERR_UNDEFINED_OBJECT, "Constant for undefined type", dtype->mIdent); else mErrors->Error(mScanner->mLocation, EERR_UNDEFINED_OBJECT, "Constant for undefined annonymous type"); } @@ -1054,7 +1054,7 @@ Declaration* Parser::ParseDeclaration(bool variable) { Declaration* pdec = mScope->Insert(ndec->mIdent, ndec->mBase); if (pdec && pdec != ndec->mBase) - mErrors->Error(ndec->mLocation, EERR_DUPLICATE_DEFINITION, "Duplicate type declaration", ndec->mIdent->mString); + mErrors->Error(ndec->mLocation, EERR_DUPLICATE_DEFINITION, "Duplicate type declaration", ndec->mIdent); } } else @@ -1083,7 +1083,7 @@ Declaration* Parser::ParseDeclaration(bool variable) if (ndec->mType == DT_VARIABLE) ndec->mSection = mCompilationUnits->mSectionZeroPage; else - mErrors->Error(ndec->mLocation, ERRR_INVALID_STORAGE_TYPE, "Invalid storage type", ndec->mIdent->mString); + mErrors->Error(ndec->mLocation, ERRR_INVALID_STORAGE_TYPE, "Invalid storage type", ndec->mIdent); } if (mGlobals == mScope && !(storageFlags & DTF_STATIC)) @@ -1102,9 +1102,9 @@ Declaration* Parser::ParseDeclaration(bool variable) if (pdec->mType == DT_CONST_FUNCTION && ndec->mBase->mType == DT_TYPE_FUNCTION) { if (!ndec->mBase->IsSame(pdec->mBase)) - mErrors->Error(ndec->mLocation, EERR_DECLARATION_DIFFERS, "Function declaration differs", ndec->mIdent->mString); + mErrors->Error(ndec->mLocation, EERR_DECLARATION_DIFFERS, "Function declaration differs", ndec->mIdent); else if (ndec->mFlags & ~pdec->mFlags & (DTF_HWINTERRUPT | DTF_INTERRUPT | DTF_FASTCALL | DTF_NATIVE)) - mErrors->Error(ndec->mLocation, EERR_DECLARATION_DIFFERS, "Function call type declaration differs", ndec->mIdent->mString); + mErrors->Error(ndec->mLocation, EERR_DECLARATION_DIFFERS, "Function call type declaration differs", ndec->mIdent); else { // @@ -1131,7 +1131,7 @@ Declaration* Parser::ParseDeclaration(bool variable) else if (ndec->mBase->mType == DT_TYPE_POINTER && pdec->mBase->mType == DT_TYPE_ARRAY && ndec->mBase->mBase->IsSame(pdec->mBase->mBase)) ; else - mErrors->Error(ndec->mLocation, EERR_DECLARATION_DIFFERS, "Variable declaration differs", ndec->mIdent->mString); + mErrors->Error(ndec->mLocation, EERR_DECLARATION_DIFFERS, "Variable declaration differs", ndec->mIdent); } ndec = pdec; @@ -1147,7 +1147,7 @@ Declaration* Parser::ParseDeclaration(bool variable) pdec->mBase = ndec->mBase; } else - mErrors->Error(ndec->mLocation, EERR_DECLARATION_DIFFERS, "Variable declaration differs", ndec->mIdent->mString); + mErrors->Error(ndec->mLocation, EERR_DECLARATION_DIFFERS, "Variable declaration differs", ndec->mIdent); } if (!(ndec->mFlags & DTF_EXTERN)) @@ -1159,7 +1159,7 @@ Declaration* Parser::ParseDeclaration(bool variable) ndec = pdec; } else - mErrors->Error(ndec->mLocation, EERR_DUPLICATE_DEFINITION, "Duplicate variable declaration", ndec->mIdent->mString); + mErrors->Error(ndec->mLocation, EERR_DUPLICATE_DEFINITION, "Duplicate variable declaration", ndec->mIdent); } } @@ -1475,13 +1475,13 @@ Expression* Parser::ParseSimpleExpression(void) } else { - mErrors->Error(mScanner->mLocation, EERR_INVALID_IDENTIFIER, "Invalid identifier", mScanner->mTokenIdent->mString); + mErrors->Error(mScanner->mLocation, EERR_INVALID_IDENTIFIER, "Invalid identifier", mScanner->mTokenIdent); mScanner->NextToken(); } } else { - mErrors->Error(mScanner->mLocation, EERR_OBJECT_NOT_FOUND, "Unknown identifier", mScanner->mTokenIdent->mString); + mErrors->Error(mScanner->mLocation, EERR_OBJECT_NOT_FOUND, "Unknown identifier", mScanner->mTokenIdent); mScanner->NextToken(); } @@ -1615,7 +1615,7 @@ Expression* Parser::ParsePostfixExpression(void) exp = nexp->ConstantFold(mErrors); } else - mErrors->Error(mScanner->mLocation, EERR_OBJECT_NOT_FOUND, "Struct member identifier not found", mScanner->mTokenIdent->mString); + mErrors->Error(mScanner->mLocation, EERR_OBJECT_NOT_FOUND, "Struct member identifier not found", mScanner->mTokenIdent); mScanner->NextToken(); } else @@ -1644,7 +1644,7 @@ Expression* Parser::ParsePostfixExpression(void) exp = nexp->ConstantFold(mErrors); } else - mErrors->Error(mScanner->mLocation, EERR_OBJECT_NOT_FOUND, "Struct member identifier not found", mScanner->mTokenIdent->mString); + mErrors->Error(mScanner->mLocation, EERR_OBJECT_NOT_FOUND, "Struct member identifier not found", mScanner->mTokenIdent); mScanner->NextToken(); } else @@ -2410,7 +2410,7 @@ Expression* Parser::ParseAssemblerBaseOperand(Declaration* pcasm, int pcoffset) exp->mDecType = TheUnsignedIntTypeDeclaration; } else - mErrors->Error(mScanner->mLocation, EERR_OBJECT_NOT_FOUND, "Assembler label not found", mScanner->mTokenIdent->mString); + mErrors->Error(mScanner->mLocation, EERR_OBJECT_NOT_FOUND, "Assembler label not found", mScanner->mTokenIdent); } mScanner->NextToken(); } @@ -3583,7 +3583,7 @@ void Parser::ParsePragma(void) mScanner->NextToken(); ConsumeToken(TK_CLOSE_PARENTHESIS); } - mErrors->Error(mScanner->mLocation, EWARN_UNKNOWN_PRAGMA, "Unknown pragma, ignored", mScanner->mTokenIdent->mString); + mErrors->Error(mScanner->mLocation, EWARN_UNKNOWN_PRAGMA, "Unknown pragma, ignored", mScanner->mTokenIdent); } } else diff --git a/oscar64/Scanner.cpp b/oscar64/Scanner.cpp index ff7c829..65092a3 100644 --- a/oscar64/Scanner.cpp +++ b/oscar64/Scanner.cpp @@ -1878,7 +1878,7 @@ int64 Scanner::PrepParseSimple(void) mErrors->Error(mLocation, ERRR_PREPROCESSOR, "'(' expected"); } else - mErrors->Error(mLocation, ERRR_PREPROCESSOR, "Invalid preprocessor symbol", mTokenIdent->mString); + mErrors->Error(mLocation, ERRR_PREPROCESSOR, "Invalid preprocessor symbol", mTokenIdent); break; default: mErrors->Error(mLocation, ERRR_PREPROCESSOR, "Invalid preprocessor token", TokenName(mToken));