From dcfe36b850a944862532573f752aeeec2a9d0534 Mon Sep 17 00:00:00 2001 From: stefandesouza Date: Sat, 24 Feb 2024 15:46:04 +0100 Subject: [PATCH] Took out name attribute from operand parent class --- osaca/parser/__init__.py | 4 ++-- osaca/parser/condition.py | 2 +- osaca/parser/directive.py | 24 ++++++++++++++++-------- osaca/parser/flag.py | 11 ++++++++++- osaca/parser/identifier.py | 11 ++++++++++- osaca/parser/immediate.py | 2 +- osaca/parser/instruction_form.py | 10 +++++----- osaca/parser/label.py | 10 +++++++++- osaca/parser/memory.py | 4 ++-- osaca/parser/operand.py | 13 ++----------- osaca/parser/parser_AArch64.py | 4 ++-- osaca/parser/parser_x86att.py | 4 ++-- osaca/parser/register.py | 11 ++++++++++- 13 files changed, 72 insertions(+), 38 deletions(-) diff --git a/osaca/parser/__init__.py b/osaca/parser/__init__.py index c649904..cdaf2ed 100644 --- a/osaca/parser/__init__.py +++ b/osaca/parser/__init__.py @@ -6,12 +6,12 @@ Only the parser below will be exported, so please add new parsers to __all__. from .base_parser import BaseParser from .parser_x86att import ParserX86ATT from .parser_AArch64 import ParserAArch64 -from .instruction_form import instructionForm +from .instruction_form import InstructionForm from .operand import Operand __all__ = [ "Operand", - "instructionForm", + "InstructionForm", "BaseParser", "ParserX86ATT", "ParserAArch64", diff --git a/osaca/parser/condition.py b/osaca/parser/condition.py index 0cab22d..1acdf50 100644 --- a/osaca/parser/condition.py +++ b/osaca/parser/condition.py @@ -10,7 +10,7 @@ class ConditionOperand(Operand): source=False, destination=False, ): - super().__init__("condition", source, destination) + super().__init__(source, destination) self._ccode = ccode @property diff --git a/osaca/parser/directive.py b/osaca/parser/directive.py index 286e7d8..1996e63 100644 --- a/osaca/parser/directive.py +++ b/osaca/parser/directive.py @@ -4,31 +4,39 @@ from osaca.parser.operand import Operand class DirectiveOperand(Operand): - def __init__(self, name=None, parameter_id=None): - super().__init__(name) - self._parameter_id = parameter_id + def __init__(self, name=None, parameters=None): + self._name = name + self._parameters = parameters + + @property + def name(self): + return self._name + + @name.setter + def name(self, name): + self._name = name @property def parameters(self): - return self._parameter_id + return self._parameters @parameters.setter def parameters(self, parameters): - self._parameter_id = parameters + self._parameters = parameters def __eq__(self, other): if isinstance(other, DirectiveOperand): return ( self._name == other._name - and self._parameter_id == other._parameter_id + and self._parameters == other._parameters ) elif isinstance(other, dict): - return self._name == other["name"] and self._parameter_id == other["parameters"] + return self._name == other["name"] and self._parameters == other["parameters"] return False def __str__(self): - return f"Directive(name={self._name}, parameters={self._parameter_id})" + return f"Directive(name={self._name}, parameters={self._parameters})" def __repr__(self): return self.__str__() diff --git a/osaca/parser/flag.py b/osaca/parser/flag.py index acf10ec..53ce9fc 100644 --- a/osaca/parser/flag.py +++ b/osaca/parser/flag.py @@ -5,7 +5,16 @@ from osaca.parser.operand import Operand class FlagOperand(Operand): def __init__(self, name=None, source=False, destination=False): - super().__init__(name, source, destination) + self._name = name + super().__init__(source, destination) + + @property + def name(self): + return self._name + + @name.setter + def name(self, name): + self._name = name def __str__(self): return ( diff --git a/osaca/parser/identifier.py b/osaca/parser/identifier.py index 33a8850..e5c0209 100644 --- a/osaca/parser/identifier.py +++ b/osaca/parser/identifier.py @@ -5,10 +5,19 @@ from osaca.parser.operand import Operand class IdentifierOperand(Operand): def __init__(self, name=None, offset=None, relocation=None, source=False, destination=False): - super().__init__(name, source, destination) + super().__init__(source, destination) + self._name = name self._offset = offset self._relocation = relocation + @property + def name(self): + return self._name + + @name.setter + def name(self, name): + self._name = name + @property def offset(self): return self._offset diff --git a/osaca/parser/immediate.py b/osaca/parser/immediate.py index 2c8cd84..76893a6 100644 --- a/osaca/parser/immediate.py +++ b/osaca/parser/immediate.py @@ -13,7 +13,7 @@ class ImmediateOperand(Operand): source=False, destination=False, ): - super().__init__(str(value_id), source, destination) + super().__init__(source, destination) self._identifier_id = identifier_id self._type_id = type_id self._value_id = value_id diff --git a/osaca/parser/instruction_form.py b/osaca/parser/instruction_form.py index 64eaa51..7073a58 100644 --- a/osaca/parser/instruction_form.py +++ b/osaca/parser/instruction_form.py @@ -47,7 +47,7 @@ class InstructionForm: return self._semantic_operands @property - def instruction(self): + def mnemonic(self): return self._mnemonic @property @@ -142,9 +142,9 @@ class InstructionForm: def breaks_dependency_on_equal_operands(self, boolean): self._breaks_dependency_on_equal_operands = boolean - @instruction.setter - def instruction(self, instruction): - self._mnemonic = instruction + @mnemonic.setter + def mnemonic(self, mnemonic): + self._mnemonic = mnemonic @label.setter def label(self, label): @@ -188,7 +188,7 @@ class InstructionForm: def __str__(self): attributes = { - "mnemonic": self.instruction, + "mnemonic": self.mnemonic, "operands_id": self.operands, "hidden_operands": self.hidden_operands, "directive_id": self.directive, diff --git a/osaca/parser/label.py b/osaca/parser/label.py index 4cafc57..39b1ece 100644 --- a/osaca/parser/label.py +++ b/osaca/parser/label.py @@ -5,7 +5,15 @@ from osaca.parser.operand import Operand class LabelOperand(Operand): def __init__(self, name=None): - super().__init__(name) + self._name = name + + @property + def name(self): + return self._name + + @name.setter + def name(self, name): + self._name = name def __str__(self): return f"Label(name={self._name}" diff --git a/osaca/parser/memory.py b/osaca/parser/memory.py index 0010f6f..45e8e65 100644 --- a/osaca/parser/memory.py +++ b/osaca/parser/memory.py @@ -20,7 +20,7 @@ class MemoryOperand(Operand): source=False, destination=False, ): - super().__init__("memory", source, destination) + super().__init__(source, destination) self._offset = offset self._base = base self._index = index @@ -127,7 +127,7 @@ class MemoryOperand(Operand): def __str__(self): return ( - f"MemoryOperand(name={self._name}, offset={self._offset}, " + f"MemoryOperand(offset={self._offset}, " f"base={self._base}, index={self._index}, scale={self._scale}, " f"segment_ext={self._segment_ext}, mask={self._mask}, " f"pre_indexed={self._pre_indexed}, post_indexed={self._post_indexed}, " diff --git a/osaca/parser/operand.py b/osaca/parser/operand.py index 5c8a185..cb4219c 100644 --- a/osaca/parser/operand.py +++ b/osaca/parser/operand.py @@ -2,15 +2,10 @@ class Operand: - def __init__(self, name, source=False, destination=False): - self._name = name + def __init__(self, source=False, destination=False): self._source = source self._destination = destination - @property - def name(self): - return self._name - @property def source(self): return self._source @@ -19,10 +14,6 @@ class Operand: def destination(self): return self._destination - @name.setter - def name(self, name): - self._name = name - @source.setter def source(self, source): self._source = source @@ -32,7 +23,7 @@ class Operand: self._destination = destination def __str__(self): - return f"Operand(Name: {self._name}, Source: {self._source}, Destination: {self._destination})" + return f"Operand(Source: {self._source}, Destination: {self._destination})" def __repr__(self): return self.__str__() diff --git a/osaca/parser/parser_AArch64.py b/osaca/parser/parser_AArch64.py index 087f639..64db200 100644 --- a/osaca/parser/parser_AArch64.py +++ b/osaca/parser/parser_AArch64.py @@ -306,7 +306,7 @@ class ParserAArch64(BaseParser): self.directive.parseString(line, parseAll=True).asDict() ) instruction_form.directive = DirectiveOperand( - name=result[0].name, parameter_id=result[0].parameters + name=result[0].name, parameters=result[0].parameters ) if result[1] is not None: instruction_form.comment = " ".join(result[1]) @@ -394,7 +394,7 @@ class ParserAArch64(BaseParser): def process_directive_operand(self, operand): return DirectiveOperand( name=operand["name"], - parameter_id=operand["parameters"], + parameters=operand["parameters"], ), operand["comment"] if "comment" in operand else None def process_register_operand(self, operand): diff --git a/osaca/parser/parser_x86att.py b/osaca/parser/parser_x86att.py index c3f0f0b..5049535 100644 --- a/osaca/parser/parser_x86att.py +++ b/osaca/parser/parser_x86att.py @@ -238,7 +238,7 @@ class ParserX86ATT(BaseParser): ) instruction_form.directive = DirectiveOperand( name=result[0].name, - parameter_id=result[0].parameters, + parameters=result[0].parameters, ) if result[1] is not None: @@ -317,7 +317,7 @@ class ParserX86ATT(BaseParser): ) def process_directive(self, directive): - directive_new = DirectiveOperand(name=directive["name"], parameter_id=directive["parameters"] if "parameters" in directive else []) + directive_new = DirectiveOperand(name=directive["name"], parameters=directive["parameters"] if "parameters" in directive else []) return directive_new, directive["comment"] if "comment" in directive else None def process_memory_address(self, memory_address): diff --git a/osaca/parser/register.py b/osaca/parser/register.py index ee04197..2154eb4 100644 --- a/osaca/parser/register.py +++ b/osaca/parser/register.py @@ -23,7 +23,8 @@ class RegisterOperand(Operand): shift=False, shift_op=False, ): - super().__init__(name, source, destination) + super().__init__(source, destination) + self._name = name self._width = width self._prefix = prefix self._regtype = regtype @@ -38,6 +39,14 @@ class RegisterOperand(Operand): self._shift = shift self._shift_op = shift_op + @property + def name(self): + return self._name + + @name.setter + def name(self, name): + self._name = name + @property def width(self): return self._width