Took out name attribute from operand parent class

This commit is contained in:
stefandesouza
2024-02-24 15:46:04 +01:00
parent 7ad3438af5
commit dcfe36b850
13 changed files with 72 additions and 38 deletions

View File

@@ -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",

View File

@@ -10,7 +10,7 @@ class ConditionOperand(Operand):
source=False,
destination=False,
):
super().__init__("condition", source, destination)
super().__init__(source, destination)
self._ccode = ccode
@property

View File

@@ -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__()

View File

@@ -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 (

View File

@@ -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

View File

@@ -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

View File

@@ -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,

View File

@@ -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}"

View File

@@ -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}, "

View File

@@ -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__()

View File

@@ -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):

View File

@@ -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):

View File

@@ -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