From 979d08358e62adee401b9b74672b02e1bb17374e Mon Sep 17 00:00:00 2001 From: Julian Hammer Date: Mon, 9 Nov 2020 12:36:14 +0100 Subject: [PATCH] singelton for isa parsers --- osaca/parser/base_parser.py | 5 ++++- osaca/parser/parser_AArch64.py | 8 ++++++++ osaca/parser/parser_x86att.py | 8 ++++++++ 3 files changed, 20 insertions(+), 1 deletion(-) 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'