mirror of
https://github.com/isledecomp/isle-portable.git
synced 2024-11-26 01:17:55 -05:00
48 lines
1.3 KiB
Python
48 lines
1.3 KiB
Python
|
class Lego1Exception(Exception):
|
||
|
"""
|
||
|
Our own base class for exceptions.
|
||
|
Makes it easier to distinguish expected and unexpected errors.
|
||
|
"""
|
||
|
|
||
|
|
||
|
class TypeNotFoundError(Lego1Exception):
|
||
|
def __str__(self):
|
||
|
return f"Type not found in PDB: {self.args[0]}"
|
||
|
|
||
|
|
||
|
class TypeNotFoundInGhidraError(Lego1Exception):
|
||
|
def __str__(self):
|
||
|
return f"Type not found in Ghidra: {self.args[0]}"
|
||
|
|
||
|
|
||
|
class TypeNotImplementedError(Lego1Exception):
|
||
|
def __str__(self):
|
||
|
return f"Import not implemented for type: {self.args[0]}"
|
||
|
|
||
|
|
||
|
class ClassOrNamespaceNotFoundInGhidraError(Lego1Exception):
|
||
|
def __init__(self, namespaceHierachy: list[str]):
|
||
|
super().__init__(namespaceHierachy)
|
||
|
|
||
|
def get_namespace_str(self) -> str:
|
||
|
return "::".join(self.args[0])
|
||
|
|
||
|
def __str__(self):
|
||
|
return f"Class or namespace not found in Ghidra: {self.get_namespace_str()}"
|
||
|
|
||
|
|
||
|
class MultipleTypesFoundInGhidraError(Lego1Exception):
|
||
|
def __str__(self):
|
||
|
return (
|
||
|
f"Found multiple types matching '{self.args[0]}' in Ghidra: {self.args[1]}"
|
||
|
)
|
||
|
|
||
|
|
||
|
class StackOffsetMismatchError(Lego1Exception):
|
||
|
pass
|
||
|
|
||
|
|
||
|
class StructModificationError(Lego1Exception):
|
||
|
def __str__(self):
|
||
|
return f"Failed to modify struct in Ghidra: '{self.args[0]}'\nDetailed error: {self.__cause__}"
|