From f370ac5c186d063bd169c07ea89e1792617264cd Mon Sep 17 00:00:00 2001 From: Gabe Black Date: Thu, 8 Sep 2011 03:21:14 -0700 Subject: [PATCH] ISA parser: Don't look for operands in strings. --- src/arch/isa_parser.py | 13 +++++++++---- 1 file changed, 9 insertions(+), 4 deletions(-) diff --git a/src/arch/isa_parser.py b/src/arch/isa_parser.py index e7598ffe8..863c7c70e 100755 --- a/src/arch/isa_parser.py +++ b/src/arch/isa_parser.py @@ -687,8 +687,9 @@ class OperandList(object): def __init__(self, parser, code): self.items = [] self.bases = {} - # delete comments so we don't match on reg specifiers inside - code = commentRE.sub('', code) + # delete strings and comments so we don't match on operands inside + for regEx in (stringRE, commentRE): + code = regEx.sub('', code) # search for operands next_pos = 0 while 1: @@ -802,8 +803,9 @@ class SubOperandList(OperandList): def __init__(self, parser, code, master_list): self.items = [] self.bases = {} - # delete comments so we don't match on reg specifiers inside - code = commentRE.sub('', code) + # delete strings and comments so we don't match on operands inside + for regEx in (stringRE, commentRE): + code = regEx.sub('', code) # search for operands next_pos = 0 while 1: @@ -854,6 +856,9 @@ class SubOperandList(OperandList): error("Code block has more than one memory operand.") self.memOperand = op_desc +# Regular expression object to match C++ strings +stringRE = re.compile(r'"([^"\\]|\\.)*"') + # Regular expression object to match C++ comments # (used in findOperands()) commentRE = re.compile(r'(^)?[^\S\n]*/(?:\*(.*?)\*/[^\S\n]*|/[^\n]*)($)?', -- 2.30.2