diff --git a/build/errorlist/errorlist.exe b/build/errorlist/errorlist.exe index 1308953ff8..184b0b2534 100755 Binary files a/build/errorlist/errorlist.exe and b/build/errorlist/errorlist.exe differ diff --git a/build/errorlist/errorlist.pl b/build/errorlist/errorlist.pl index e108f65c76..4c5bc86d56 100755 --- a/build/errorlist/errorlist.pl +++ b/build/errorlist/errorlist.pl @@ -3,9 +3,11 @@ use strict; use warnings; +my $source = '../../source'; + my (%topgroups, %groups, %types); -my @files = cpp_files('.'); +my @files = cpp_files("$source/"); for (@files) { open my $f, $_ or die "Error opening file '$_' ($!)"; @@ -27,7 +29,7 @@ for (@files) { $topgroups{Error} = 1; $types{'Error~InvalidError'} = 1; -open my $out, '>', 'ps/Errors.cpp' or die "Error opening ps/Errors.cpp ($!)"; +open my $out, '>', "$source/ps/Errors.cpp" or die "Error opening $source/ps/Errors.cpp ($!)"; print $out <<'.'; // Auto-generated by errorlist.pl - do not edit. @@ -53,7 +55,7 @@ print $out "\n"; for (sort { $a->[1] cmp $b->[1] } map [$_, do{(my $c=$_)=~s/~/_/;$c} ], keys %types) { my ($base, $name) = split /~/, $_->[0]; - print $out "class PSERROR_${base}_$name : public PSERROR_$base { public: PSERROR_${base}_$name(); };\n"; + print $out "class PSERROR_${base}_$name : public PSERROR_$base { public: PSRETURN getCode() const; };\n"; } print $out "\n"; @@ -147,32 +149,42 @@ print $out "\n"; for (sort keys %types) { my ($base, $name) = split /~/; - print $out qq~PSERROR_${base}_${name}::PSERROR_${base}_${name}() { magic=0x45725221; code=0x~.unpack('H*',$types{$_}).qq~; }\n~; + print $out qq~PSRETURN PSERROR_${base}_${name}::getCode() const { return 0x~.unpack('H*',$types{$_}).qq~; }\n~; } print $out <<"."; -const wchar_t* GetErrorString(PSRETURN code) +const char* PSERROR::what() const { -\tswitch (code) -\t{ + return GetErrorString(getCode()); +} + +const char* GetErrorString(const PSERROR& err) +{ + return GetErrorString(err.getCode()); +} + +const char* GetErrorString(PSRETURN code) +{ + switch (code) + { . for (sort keys %types) { (my $name = $_) =~ s/~/_/; - print $out qq{\tcase 0x}.unpack('H*',$types{$_}).qq{: return L"$name";\n}; + print $out qq{\tcase 0x}.unpack('H*',$types{$_}).qq{: return "$name";\n}; } print $out <<"."; -\tdefault: return L"Unrecognised error"; -\t} + default: return "Unrecognised error"; + } } void ThrowError(PSRETURN code) { -\tswitch (code) // Use 'break' in case someone tries to continue from the exception -\t{ + switch (code) // Use 'break' in case someone tries to continue from the exception + { . for (sort keys %types) { @@ -182,8 +194,8 @@ for (sort keys %types) { print $out <<"."; -\tdefault: throw PSERROR_Error_InvalidError(); // Hmm... -\t} + default: throw PSERROR_Error_InvalidError(); // Hmm... + } } . @@ -192,6 +204,6 @@ sub cpp_files { opendir my $d, $_[0] or die "Error opening directory '$_[0]' ($!)"; my @f = readdir $d; my @files = map "$_[0]/$_", grep /\.(?:cpp|h)$/, @f; - push @files, cpp_files("$_[0]/$_") for grep { !/^(?:workspaces|tools|ape|sced)$/ and /^[a-zA-Z0-9]+$/ and -d "$_[0]/$_" } @f; + push @files, cpp_files("$_[0]/$_") for grep { !/^(?:workspaces|tools)$/ and /^[a-zA-Z0-9]+$/ and -d "$_[0]/$_" } @f; return @files; } diff --git a/source/gui/CGUI.cpp b/source/gui/CGUI.cpp index 119a6a32fe..6c1048b3b5 100755 --- a/source/gui/CGUI.cpp +++ b/source/gui/CGUI.cpp @@ -993,9 +993,9 @@ void CGUI::LoadXMLFile(const string &Filename) // TODO Gee: Output in log } } - catch (PSERROR_GUI) + catch (PSERROR_GUI& e) { - LOG(ERROR, LOG_CATEGORY, "Errors loading GUI file %s", Filename.c_str()); + LOG(ERROR, LOG_CATEGORY, "Errors loading GUI file %s (%s)", Filename.c_str(), e.getCode()); return; } diff --git a/source/i18n/Interface.cpp b/source/i18n/Interface.cpp index 711e1265b5..7e4e04d82a 100755 --- a/source/i18n/Interface.cpp +++ b/source/i18n/Interface.cpp @@ -70,7 +70,7 @@ CLocale_interface* I18n::NewLocale(JSContext* cx, JSObject* scope) } catch (PSERROR_I18n& e) { - LOG(ERROR, LOG_CATEGORY, "Error creating locale object ('%ls')", GetErrorString(e.code)); + LOG(ERROR, LOG_CATEGORY, "Error creating locale object ('%s')", GetErrorString(e)); return NULL; } } diff --git a/source/ps/Errors.cpp b/source/ps/Errors.cpp index 18b2a0585b..39e53ea942 100755 --- a/source/ps/Errors.cpp +++ b/source/ps/Errors.cpp @@ -2,7 +2,7 @@ #include "precompiled.h" -#include "ps/Errors.h" +#include "Errors.h" class PSERROR_CVFSFile : public PSERROR {}; class PSERROR_Error : public PSERROR {}; @@ -19,34 +19,34 @@ class PSERROR_I18n_Script : public PSERROR_I18n {}; class PSERROR_Scripting_DefineType : public PSERROR_Scripting {}; class PSERROR_Scripting_LoadFile : public PSERROR_Scripting {}; -class PSERROR_CVFSFile_AlreadyLoaded : public PSERROR_CVFSFile { public: PSERROR_CVFSFile_AlreadyLoaded(); }; -class PSERROR_CVFSFile_InvalidBufferAccess : public PSERROR_CVFSFile { public: PSERROR_CVFSFile_InvalidBufferAccess(); }; -class PSERROR_CVFSFile_LoadFailed : public PSERROR_CVFSFile { public: PSERROR_CVFSFile_LoadFailed(); }; -class PSERROR_Error_InvalidError : public PSERROR_Error { public: PSERROR_Error_InvalidError(); }; -class PSERROR_GUI_JSOpenFailed : public PSERROR_GUI { public: PSERROR_GUI_JSOpenFailed(); }; -class PSERROR_Game_World_MapLoadFailed : public PSERROR_Game_World { public: PSERROR_Game_World_MapLoadFailed(); }; -class PSERROR_I18n_Script_SetupFailed : public PSERROR_I18n_Script { public: PSERROR_I18n_Script_SetupFailed(); }; -class PSERROR_Renderer_VBOFailed : public PSERROR_Renderer { public: PSERROR_Renderer_VBOFailed(); }; -class PSERROR_Scripting_CallFunctionFailed : public PSERROR_Scripting { public: PSERROR_Scripting_CallFunctionFailed(); }; -class PSERROR_Scripting_ContextCreationFailed : public PSERROR_Scripting { public: PSERROR_Scripting_ContextCreationFailed(); }; -class PSERROR_Scripting_ConversionFailed : public PSERROR_Scripting { public: PSERROR_Scripting_ConversionFailed(); }; -class PSERROR_Scripting_CreateObjectFailed : public PSERROR_Scripting { public: PSERROR_Scripting_CreateObjectFailed(); }; -class PSERROR_Scripting_DefineConstantFailed : public PSERROR_Scripting { public: PSERROR_Scripting_DefineConstantFailed(); }; -class PSERROR_Scripting_DefineType_AlreadyExists : public PSERROR_Scripting_DefineType { public: PSERROR_Scripting_DefineType_AlreadyExists(); }; -class PSERROR_Scripting_DefineType_CreationFailed : public PSERROR_Scripting_DefineType { public: PSERROR_Scripting_DefineType_CreationFailed(); }; -class PSERROR_Scripting_GlobalObjectCreationFailed : public PSERROR_Scripting { public: PSERROR_Scripting_GlobalObjectCreationFailed(); }; -class PSERROR_Scripting_LoadFile_EvalErrors : public PSERROR_Scripting_LoadFile { public: PSERROR_Scripting_LoadFile_EvalErrors(); }; -class PSERROR_Scripting_LoadFile_OpenFailed : public PSERROR_Scripting_LoadFile { public: PSERROR_Scripting_LoadFile_OpenFailed(); }; -class PSERROR_Scripting_NativeFunctionSetupFailed : public PSERROR_Scripting { public: PSERROR_Scripting_NativeFunctionSetupFailed(); }; -class PSERROR_Scripting_RegisterFunctionFailed : public PSERROR_Scripting { public: PSERROR_Scripting_RegisterFunctionFailed(); }; -class PSERROR_Scripting_RuntimeCreationFailed : public PSERROR_Scripting { public: PSERROR_Scripting_RuntimeCreationFailed(); }; -class PSERROR_Scripting_StandardClassSetupFailed : public PSERROR_Scripting { public: PSERROR_Scripting_StandardClassSetupFailed(); }; -class PSERROR_Scripting_TypeDoesNotExist : public PSERROR_Scripting { public: PSERROR_Scripting_TypeDoesNotExist(); }; -class PSERROR_System_RequiredExtensionsMissing : public PSERROR_System { public: PSERROR_System_RequiredExtensionsMissing(); }; -class PSERROR_System_SDLInitFailed : public PSERROR_System { public: PSERROR_System_SDLInitFailed(); }; -class PSERROR_System_VmodeFailed : public PSERROR_System { public: PSERROR_System_VmodeFailed(); }; -class PSERROR_Xeromyces_XMLOpenFailed : public PSERROR_Xeromyces { public: PSERROR_Xeromyces_XMLOpenFailed(); }; -class PSERROR_Xeromyces_XMLParseError : public PSERROR_Xeromyces { public: PSERROR_Xeromyces_XMLParseError(); }; +class PSERROR_CVFSFile_AlreadyLoaded : public PSERROR_CVFSFile { public: PSRETURN getCode() const; }; +class PSERROR_CVFSFile_InvalidBufferAccess : public PSERROR_CVFSFile { public: PSRETURN getCode() const; }; +class PSERROR_CVFSFile_LoadFailed : public PSERROR_CVFSFile { public: PSRETURN getCode() const; }; +class PSERROR_Error_InvalidError : public PSERROR_Error { public: PSRETURN getCode() const; }; +class PSERROR_GUI_JSOpenFailed : public PSERROR_GUI { public: PSRETURN getCode() const; }; +class PSERROR_Game_World_MapLoadFailed : public PSERROR_Game_World { public: PSRETURN getCode() const; }; +class PSERROR_I18n_Script_SetupFailed : public PSERROR_I18n_Script { public: PSRETURN getCode() const; }; +class PSERROR_Renderer_VBOFailed : public PSERROR_Renderer { public: PSRETURN getCode() const; }; +class PSERROR_Scripting_CallFunctionFailed : public PSERROR_Scripting { public: PSRETURN getCode() const; }; +class PSERROR_Scripting_ContextCreationFailed : public PSERROR_Scripting { public: PSRETURN getCode() const; }; +class PSERROR_Scripting_ConversionFailed : public PSERROR_Scripting { public: PSRETURN getCode() const; }; +class PSERROR_Scripting_CreateObjectFailed : public PSERROR_Scripting { public: PSRETURN getCode() const; }; +class PSERROR_Scripting_DefineConstantFailed : public PSERROR_Scripting { public: PSRETURN getCode() const; }; +class PSERROR_Scripting_DefineType_AlreadyExists : public PSERROR_Scripting_DefineType { public: PSRETURN getCode() const; }; +class PSERROR_Scripting_DefineType_CreationFailed : public PSERROR_Scripting_DefineType { public: PSRETURN getCode() const; }; +class PSERROR_Scripting_GlobalObjectCreationFailed : public PSERROR_Scripting { public: PSRETURN getCode() const; }; +class PSERROR_Scripting_LoadFile_EvalErrors : public PSERROR_Scripting_LoadFile { public: PSRETURN getCode() const; }; +class PSERROR_Scripting_LoadFile_OpenFailed : public PSERROR_Scripting_LoadFile { public: PSRETURN getCode() const; }; +class PSERROR_Scripting_NativeFunctionSetupFailed : public PSERROR_Scripting { public: PSRETURN getCode() const; }; +class PSERROR_Scripting_RegisterFunctionFailed : public PSERROR_Scripting { public: PSRETURN getCode() const; }; +class PSERROR_Scripting_RuntimeCreationFailed : public PSERROR_Scripting { public: PSRETURN getCode() const; }; +class PSERROR_Scripting_StandardClassSetupFailed : public PSERROR_Scripting { public: PSRETURN getCode() const; }; +class PSERROR_Scripting_TypeDoesNotExist : public PSERROR_Scripting { public: PSRETURN getCode() const; }; +class PSERROR_System_RequiredExtensionsMissing : public PSERROR_System { public: PSRETURN getCode() const; }; +class PSERROR_System_SDLInitFailed : public PSERROR_System { public: PSRETURN getCode() const; }; +class PSERROR_System_VmodeFailed : public PSERROR_System { public: PSRETURN getCode() const; }; +class PSERROR_Xeromyces_XMLOpenFailed : public PSERROR_Xeromyces { public: PSRETURN getCode() const; }; +class PSERROR_Xeromyces_XMLParseError : public PSERROR_Xeromyces { public: PSRETURN getCode() const; }; extern const PSRETURN PSRETURN_CVFSFile_AlreadyLoaded = 0x01000001; extern const PSRETURN PSRETURN_CVFSFile_InvalidBufferAccess = 0x01000002; @@ -161,69 +161,79 @@ extern const PSRETURN CODE__PSRETURN_Xeromyces_XMLOpenFailed = 0x09000001; extern const PSRETURN MASK__PSRETURN_Xeromyces_XMLParseError = 0xffffffff; extern const PSRETURN CODE__PSRETURN_Xeromyces_XMLParseError = 0x09000002; -PSERROR_CVFSFile_AlreadyLoaded::PSERROR_CVFSFile_AlreadyLoaded() { magic=0x45725221; code=0x01000001; } -PSERROR_CVFSFile_InvalidBufferAccess::PSERROR_CVFSFile_InvalidBufferAccess() { magic=0x45725221; code=0x01000002; } -PSERROR_CVFSFile_LoadFailed::PSERROR_CVFSFile_LoadFailed() { magic=0x45725221; code=0x01000003; } -PSERROR_Error_InvalidError::PSERROR_Error_InvalidError() { magic=0x45725221; code=0x02000001; } -PSERROR_GUI_JSOpenFailed::PSERROR_GUI_JSOpenFailed() { magic=0x45725221; code=0x03000001; } -PSERROR_Game_World_MapLoadFailed::PSERROR_Game_World_MapLoadFailed() { magic=0x45725221; code=0x04040001; } -PSERROR_I18n_Script_SetupFailed::PSERROR_I18n_Script_SetupFailed() { magic=0x45725221; code=0x05030001; } -PSERROR_Renderer_VBOFailed::PSERROR_Renderer_VBOFailed() { magic=0x45725221; code=0x06000001; } -PSERROR_Scripting_DefineType_AlreadyExists::PSERROR_Scripting_DefineType_AlreadyExists() { magic=0x45725221; code=0x07010001; } -PSERROR_Scripting_DefineType_CreationFailed::PSERROR_Scripting_DefineType_CreationFailed() { magic=0x45725221; code=0x07010002; } -PSERROR_Scripting_LoadFile_EvalErrors::PSERROR_Scripting_LoadFile_EvalErrors() { magic=0x45725221; code=0x07020001; } -PSERROR_Scripting_LoadFile_OpenFailed::PSERROR_Scripting_LoadFile_OpenFailed() { magic=0x45725221; code=0x07020002; } -PSERROR_Scripting_CallFunctionFailed::PSERROR_Scripting_CallFunctionFailed() { magic=0x45725221; code=0x07000001; } -PSERROR_Scripting_ContextCreationFailed::PSERROR_Scripting_ContextCreationFailed() { magic=0x45725221; code=0x07000002; } -PSERROR_Scripting_ConversionFailed::PSERROR_Scripting_ConversionFailed() { magic=0x45725221; code=0x07000003; } -PSERROR_Scripting_CreateObjectFailed::PSERROR_Scripting_CreateObjectFailed() { magic=0x45725221; code=0x07000004; } -PSERROR_Scripting_DefineConstantFailed::PSERROR_Scripting_DefineConstantFailed() { magic=0x45725221; code=0x07000005; } -PSERROR_Scripting_GlobalObjectCreationFailed::PSERROR_Scripting_GlobalObjectCreationFailed() { magic=0x45725221; code=0x07000006; } -PSERROR_Scripting_NativeFunctionSetupFailed::PSERROR_Scripting_NativeFunctionSetupFailed() { magic=0x45725221; code=0x07000007; } -PSERROR_Scripting_RegisterFunctionFailed::PSERROR_Scripting_RegisterFunctionFailed() { magic=0x45725221; code=0x07000008; } -PSERROR_Scripting_RuntimeCreationFailed::PSERROR_Scripting_RuntimeCreationFailed() { magic=0x45725221; code=0x07000009; } -PSERROR_Scripting_StandardClassSetupFailed::PSERROR_Scripting_StandardClassSetupFailed() { magic=0x45725221; code=0x0700000a; } -PSERROR_Scripting_TypeDoesNotExist::PSERROR_Scripting_TypeDoesNotExist() { magic=0x45725221; code=0x0700000b; } -PSERROR_System_RequiredExtensionsMissing::PSERROR_System_RequiredExtensionsMissing() { magic=0x45725221; code=0x08000001; } -PSERROR_System_SDLInitFailed::PSERROR_System_SDLInitFailed() { magic=0x45725221; code=0x08000002; } -PSERROR_System_VmodeFailed::PSERROR_System_VmodeFailed() { magic=0x45725221; code=0x08000003; } -PSERROR_Xeromyces_XMLOpenFailed::PSERROR_Xeromyces_XMLOpenFailed() { magic=0x45725221; code=0x09000001; } -PSERROR_Xeromyces_XMLParseError::PSERROR_Xeromyces_XMLParseError() { magic=0x45725221; code=0x09000002; } +PSRETURN PSERROR_CVFSFile_AlreadyLoaded::getCode() const { return 0x01000001; } +PSRETURN PSERROR_CVFSFile_InvalidBufferAccess::getCode() const { return 0x01000002; } +PSRETURN PSERROR_CVFSFile_LoadFailed::getCode() const { return 0x01000003; } +PSRETURN PSERROR_Error_InvalidError::getCode() const { return 0x02000001; } +PSRETURN PSERROR_GUI_JSOpenFailed::getCode() const { return 0x03000001; } +PSRETURN PSERROR_Game_World_MapLoadFailed::getCode() const { return 0x04040001; } +PSRETURN PSERROR_I18n_Script_SetupFailed::getCode() const { return 0x05030001; } +PSRETURN PSERROR_Renderer_VBOFailed::getCode() const { return 0x06000001; } +PSRETURN PSERROR_Scripting_DefineType_AlreadyExists::getCode() const { return 0x07010001; } +PSRETURN PSERROR_Scripting_DefineType_CreationFailed::getCode() const { return 0x07010002; } +PSRETURN PSERROR_Scripting_LoadFile_EvalErrors::getCode() const { return 0x07020001; } +PSRETURN PSERROR_Scripting_LoadFile_OpenFailed::getCode() const { return 0x07020002; } +PSRETURN PSERROR_Scripting_CallFunctionFailed::getCode() const { return 0x07000001; } +PSRETURN PSERROR_Scripting_ContextCreationFailed::getCode() const { return 0x07000002; } +PSRETURN PSERROR_Scripting_ConversionFailed::getCode() const { return 0x07000003; } +PSRETURN PSERROR_Scripting_CreateObjectFailed::getCode() const { return 0x07000004; } +PSRETURN PSERROR_Scripting_DefineConstantFailed::getCode() const { return 0x07000005; } +PSRETURN PSERROR_Scripting_GlobalObjectCreationFailed::getCode() const { return 0x07000006; } +PSRETURN PSERROR_Scripting_NativeFunctionSetupFailed::getCode() const { return 0x07000007; } +PSRETURN PSERROR_Scripting_RegisterFunctionFailed::getCode() const { return 0x07000008; } +PSRETURN PSERROR_Scripting_RuntimeCreationFailed::getCode() const { return 0x07000009; } +PSRETURN PSERROR_Scripting_StandardClassSetupFailed::getCode() const { return 0x0700000a; } +PSRETURN PSERROR_Scripting_TypeDoesNotExist::getCode() const { return 0x0700000b; } +PSRETURN PSERROR_System_RequiredExtensionsMissing::getCode() const { return 0x08000001; } +PSRETURN PSERROR_System_SDLInitFailed::getCode() const { return 0x08000002; } +PSRETURN PSERROR_System_VmodeFailed::getCode() const { return 0x08000003; } +PSRETURN PSERROR_Xeromyces_XMLOpenFailed::getCode() const { return 0x09000001; } +PSRETURN PSERROR_Xeromyces_XMLParseError::getCode() const { return 0x09000002; } -const wchar_t* GetErrorString(PSRETURN code) +const char* PSERROR::what() const +{ + return GetErrorString(getCode()); +} + +const char* GetErrorString(const PSERROR& err) +{ + return GetErrorString(err.getCode()); +} + +const char* GetErrorString(PSRETURN code) { switch (code) { - case 0x01000001: return L"CVFSFile_AlreadyLoaded"; - case 0x01000002: return L"CVFSFile_InvalidBufferAccess"; - case 0x01000003: return L"CVFSFile_LoadFailed"; - case 0x02000001: return L"Error_InvalidError"; - case 0x03000001: return L"GUI_JSOpenFailed"; - case 0x04040001: return L"Game_World_MapLoadFailed"; - case 0x05030001: return L"I18n_Script_SetupFailed"; - case 0x06000001: return L"Renderer_VBOFailed"; - case 0x07010001: return L"Scripting_DefineType_AlreadyExists"; - case 0x07010002: return L"Scripting_DefineType_CreationFailed"; - case 0x07020001: return L"Scripting_LoadFile_EvalErrors"; - case 0x07020002: return L"Scripting_LoadFile_OpenFailed"; - case 0x07000001: return L"Scripting_CallFunctionFailed"; - case 0x07000002: return L"Scripting_ContextCreationFailed"; - case 0x07000003: return L"Scripting_ConversionFailed"; - case 0x07000004: return L"Scripting_CreateObjectFailed"; - case 0x07000005: return L"Scripting_DefineConstantFailed"; - case 0x07000006: return L"Scripting_GlobalObjectCreationFailed"; - case 0x07000007: return L"Scripting_NativeFunctionSetupFailed"; - case 0x07000008: return L"Scripting_RegisterFunctionFailed"; - case 0x07000009: return L"Scripting_RuntimeCreationFailed"; - case 0x0700000a: return L"Scripting_StandardClassSetupFailed"; - case 0x0700000b: return L"Scripting_TypeDoesNotExist"; - case 0x08000001: return L"System_RequiredExtensionsMissing"; - case 0x08000002: return L"System_SDLInitFailed"; - case 0x08000003: return L"System_VmodeFailed"; - case 0x09000001: return L"Xeromyces_XMLOpenFailed"; - case 0x09000002: return L"Xeromyces_XMLParseError"; + case 0x01000001: return "CVFSFile_AlreadyLoaded"; + case 0x01000002: return "CVFSFile_InvalidBufferAccess"; + case 0x01000003: return "CVFSFile_LoadFailed"; + case 0x02000001: return "Error_InvalidError"; + case 0x03000001: return "GUI_JSOpenFailed"; + case 0x04040001: return "Game_World_MapLoadFailed"; + case 0x05030001: return "I18n_Script_SetupFailed"; + case 0x06000001: return "Renderer_VBOFailed"; + case 0x07010001: return "Scripting_DefineType_AlreadyExists"; + case 0x07010002: return "Scripting_DefineType_CreationFailed"; + case 0x07020001: return "Scripting_LoadFile_EvalErrors"; + case 0x07020002: return "Scripting_LoadFile_OpenFailed"; + case 0x07000001: return "Scripting_CallFunctionFailed"; + case 0x07000002: return "Scripting_ContextCreationFailed"; + case 0x07000003: return "Scripting_ConversionFailed"; + case 0x07000004: return "Scripting_CreateObjectFailed"; + case 0x07000005: return "Scripting_DefineConstantFailed"; + case 0x07000006: return "Scripting_GlobalObjectCreationFailed"; + case 0x07000007: return "Scripting_NativeFunctionSetupFailed"; + case 0x07000008: return "Scripting_RegisterFunctionFailed"; + case 0x07000009: return "Scripting_RuntimeCreationFailed"; + case 0x0700000a: return "Scripting_StandardClassSetupFailed"; + case 0x0700000b: return "Scripting_TypeDoesNotExist"; + case 0x08000001: return "System_RequiredExtensionsMissing"; + case 0x08000002: return "System_SDLInitFailed"; + case 0x08000003: return "System_VmodeFailed"; + case 0x09000001: return "Xeromyces_XMLOpenFailed"; + case 0x09000002: return "Xeromyces_XMLParseError"; - default: return L"Unrecognised error"; + default: return "Unrecognised error"; } } diff --git a/source/ps/Errors.h b/source/ps/Errors.h index 2ec8ee924f..29d551c5c7 100755 --- a/source/ps/Errors.h +++ b/source/ps/Errors.h @@ -1,16 +1,17 @@ #ifndef _ERRORS_H_ #define _ERRORS_H_ +#include + #include "lib/types.h" typedef u32 PSRETURN; -class PSERROR +class PSERROR : public std::exception { public: - int magic; // = 0x45725221, so the exception handler can recognise - // that it's a PSERROR and not some other random object. - PSRETURN code; // unique (but arbitrary) code, for translation tables etc + virtual const char* what() const throw (); + virtual PSRETURN getCode() const = 0; // for functions that catch exceptions then return error codes }; #define ERROR_GROUP(a) class PSERROR_##a : public PSERROR {}; \ @@ -22,7 +23,7 @@ public: extern const PSRETURN CODE__PSRETURN_##a##_##b -#define ERROR_TYPE(a,b) class PSERROR_##a##_##b : public PSERROR_##a { public: PSERROR_##a##_##b(); }; \ +#define ERROR_TYPE(a,b) class PSERROR_##a##_##b : public PSERROR_##a { public: PSRETURN getCode() const; }; \ extern const PSRETURN MASK__PSRETURN_##a##_##b; \ extern const PSRETURN CODE__PSRETURN_##a##_##b; \ extern const PSRETURN PSRETURN_##a##_##b @@ -33,7 +34,8 @@ const PSRETURN PSRETURN_OK = 0; const PSRETURN MASK__PSRETURN_OK = 0xffffffff; const PSRETURN CODE__PSRETURN_OK = 0; -const wchar_t* GetErrorString(PSRETURN code); +const char* GetErrorString(PSRETURN code); +const char* GetErrorString(const PSERROR& err); void ThrowError(PSRETURN code); #endif diff --git a/source/ps/Game.cpp b/source/ps/Game.cpp index 793159dd06..f3e1962978 100755 --- a/source/ps/Game.cpp +++ b/source/ps/Game.cpp @@ -103,9 +103,9 @@ PSRETURN CGame::StartGame(CGameAttributes *pAttribs) RegisterInit(pAttribs); } - catch (PSERROR_Game e) + catch (PSERROR_Game& e) { - return e.code; + return e.getCode(); } return 0; }