diff --git a/osaca/parser/base_parser.py b/osaca/parser/base_parser.py index b642691..ced8fa6 100755 --- a/osaca/parser/base_parser.py +++ b/osaca/parser/base_parser.py @@ -15,9 +15,12 @@ class BaseParser(object): SEGMENT_EXT_ID = 'segment_extension' INSTRUCTION_ID = 'instruction' OPERANDS_ID = 'operands' + _parser_constructed = False def __init__(self): - self.construct_parser() + if not self._parser_constructed: + self.construct_parser() + self._parser_constructed = True @staticmethod def detect_ISA(file_content): diff --git a/osaca/parser/parser_AArch64.py b/osaca/parser/parser_AArch64.py index dfb5c57..5e2f249 100755 --- a/osaca/parser/parser_AArch64.py +++ b/osaca/parser/parser_AArch64.py @@ -7,6 +7,14 @@ from osaca.parser import AttrDict, BaseParser class ParserAArch64(BaseParser): + _instance = None + + # Singelton pattern, as this is created very many times + def __new__(cls): + if cls._instance is None: + cls._instance = super(ParserAArch64, cls).__new__(cls) + return cls._instance + def __init__(self): super().__init__() self.isa = 'aarch64' diff --git a/osaca/parser/parser_x86att.py b/osaca/parser/parser_x86att.py index b2e39e2..c7a98e2 100755 --- a/osaca/parser/parser_x86att.py +++ b/osaca/parser/parser_x86att.py @@ -8,6 +8,14 @@ from osaca.parser import AttrDict, BaseParser class ParserX86ATT(BaseParser): + _instance = None + + # Singelton pattern, as this is created very many times + def __new__(cls): + if cls._instance is None: + cls._instance = super(ParserX86ATT, cls).__new__(cls) + return cls._instance + def __init__(self): super().__init__() self.isa = 'x86'