mirror of
https://github.com/RRZE-HPC/OSACA.git
synced 2026-01-06 03:00:11 +01:00
Added DirectiveClass with comment iterator
This commit is contained in:
@@ -86,6 +86,43 @@ class InstructionForm:
|
|||||||
def comment(self, comment):
|
def comment(self, comment):
|
||||||
self._COMMENT_ID =comment
|
self._COMMENT_ID =comment
|
||||||
|
|
||||||
|
class DirectiveForm:
|
||||||
|
def __init__(self, NAME_ID = None, PARAMETER_ID = None, COMMENT_ID = None):
|
||||||
|
self._NAME_ID = NAME_ID
|
||||||
|
self._PARAMETER_ID = PARAMETER_ID
|
||||||
|
self._COMMENT_ID = COMMENT_ID
|
||||||
|
|
||||||
|
@property
|
||||||
|
def name(self):
|
||||||
|
return self._NAME_ID
|
||||||
|
|
||||||
|
@property
|
||||||
|
def parameters(self):
|
||||||
|
return self._PARAMETER_ID
|
||||||
|
|
||||||
|
@property
|
||||||
|
def comment(self):
|
||||||
|
return self._COMMENT_ID
|
||||||
|
|
||||||
|
def __iter__(self):
|
||||||
|
return self
|
||||||
|
|
||||||
|
def __next__(self):
|
||||||
|
if not self._COMMENT_ID:
|
||||||
|
raise StopIteration
|
||||||
|
return self._COMMENT_ID.pop(0)
|
||||||
|
|
||||||
|
@name.setter
|
||||||
|
def name(self, name):
|
||||||
|
self._NAME_ID = name
|
||||||
|
|
||||||
|
@parameters.setter
|
||||||
|
def parameters(self, parameters):
|
||||||
|
self._PARAMETER_ID = parameters
|
||||||
|
|
||||||
|
@comment.setter
|
||||||
|
def comment(self, comment):
|
||||||
|
self._COMMENT_ID = comment
|
||||||
|
|
||||||
class ParserX86ATT(BaseParser):
|
class ParserX86ATT(BaseParser):
|
||||||
_instance = None
|
_instance = None
|
||||||
@@ -307,13 +344,13 @@ class ParserX86ATT(BaseParser):
|
|||||||
self.directive.parseString(line, parseAll=True).asDict()
|
self.directive.parseString(line, parseAll=True).asDict()
|
||||||
)
|
)
|
||||||
instruction_form.directive = {
|
instruction_form.directive = {
|
||||||
"name": result[self.DIRECTIVE_ID]["name"],
|
"name": result.directive.name,
|
||||||
"parameters": result[self.DIRECTIVE_ID]["parameters"],
|
"parameters": result.directive.parameters,
|
||||||
}
|
}
|
||||||
|
|
||||||
if self.COMMENT_ID in result[self.DIRECTIVE_ID]:
|
if self.COMMENT_ID in result.directive:
|
||||||
instruction_form.comment = " ".join(
|
instruction_form.comment = " ".join(
|
||||||
result[self.DIRECTIVE_ID][self.COMMENT_ID]
|
result.directive.comment
|
||||||
)
|
)
|
||||||
except pp.ParseException:
|
except pp.ParseException:
|
||||||
pass
|
pass
|
||||||
@@ -379,12 +416,12 @@ class ParserX86ATT(BaseParser):
|
|||||||
return operand
|
return operand
|
||||||
|
|
||||||
def process_directive(self, directive):
|
def process_directive(self, directive):
|
||||||
directive_new = {"name": directive["name"], "parameters": []}
|
directive_new = DirectiveForm(NAME_ID = directive["name"], PARAMETER_ID = [])
|
||||||
if "parameters" in directive:
|
if "parameters" in directive:
|
||||||
directive_new["parameters"] = directive["parameters"]
|
directive_new.parameters = directive["parameters"]
|
||||||
if "comment" in directive:
|
if "comment" in directive:
|
||||||
directive_new["comment"] = directive["comment"]
|
directive_new.comment = directive["comment"]
|
||||||
return AttrDict({self.DIRECTIVE_ID: directive_new})
|
return InstructionForm(DIRECTIVE_ID = directive_new)
|
||||||
|
|
||||||
def process_memory_address(self, memory_address):
|
def process_memory_address(self, memory_address):
|
||||||
"""Post-process memory address operand"""
|
"""Post-process memory address operand"""
|
||||||
|
|||||||
@@ -82,22 +82,16 @@ class TestParserX86ATT(unittest.TestCase):
|
|||||||
self._get_directive(self.parser, "\t.align\t16,0x90").parameters[1], "0x90"
|
self._get_directive(self.parser, "\t.align\t16,0x90").parameters[1], "0x90"
|
||||||
)
|
)
|
||||||
self.assertEqual(
|
self.assertEqual(
|
||||||
self._get_directive(self.parser, " .byte 100,103,144 #IACA START")[
|
self._get_directive(self.parser, " .byte 100,103,144 #IACA START").name,
|
||||||
"name"
|
|
||||||
],
|
|
||||||
"byte",
|
"byte",
|
||||||
)
|
)
|
||||||
self.assertEqual(
|
self.assertEqual(
|
||||||
self._get_directive(self.parser, " .byte 100,103,144 #IACA START")[
|
self._get_directive(self.parser, " .byte 100,103,144 #IACA START").parameters[2],
|
||||||
"parameters"
|
|
||||||
][2],
|
|
||||||
"144",
|
"144",
|
||||||
)
|
)
|
||||||
self.assertEqual(
|
self.assertEqual(
|
||||||
" ".join(
|
" ".join(
|
||||||
self._get_directive(self.parser, " .byte 100,103,144 #IACA START")[
|
self._get_directive(self.parser, " .byte 100,103,144 #IACA START").comment
|
||||||
"comment"
|
|
||||||
]
|
|
||||||
),
|
),
|
||||||
"IACA START",
|
"IACA START",
|
||||||
)
|
)
|
||||||
|
|||||||
Reference in New Issue
Block a user