# # @file\r
# This file is used to parse and evaluate range expression in Pcd declaration.\r
#\r
-# Copyright (c) 2015, Intel Corporation. All rights reserved.<BR>\r
+# Copyright (c) 2015 - 2018, Intel Corporation. All rights reserved.<BR>\r
# This program and the accompanying materials\r
# are licensed and made available under the terms and conditions of the BSD License\r
# which accompanies this distribution. The full text of the license may be found at\r
RegGuidPattern = re.compile(r'[0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[0-9a-fA-F]{4}-[0-9a-fA-F]{4}-[0-9a-fA-F]{12}')\r
ExRegGuidPattern = re.compile(r'[0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[0-9a-fA-F]{4}-[0-9a-fA-F]{4}-[0-9a-fA-F]{12}$')\r
\r
- SymbolPattern = re.compile("("\r
- "\$\([A-Z][A-Z0-9_]*\)|\$\(\w+\.\w+\)|\w+\.\w+|"\r
- "&&|\|\||!(?!=)|"\r
- "(?<=\W)AND(?=\W)|(?<=\W)OR(?=\W)|(?<=\W)NOT(?=\W)|(?<=\W)XOR(?=\W)|"\r
- "(?<=\W)EQ(?=\W)|(?<=\W)NE(?=\W)|(?<=\W)GT(?=\W)|(?<=\W)LT(?=\W)|(?<=\W)GE(?=\W)|(?<=\W)LE(?=\W)"\r
- ")")\r
- \r
RangePattern = re.compile(r'[0-9]+ - [0-9]+')\r
\r
def preProcessRangeExpr(self, expr):\r
rangeContainer = RangeContainer()\r
for range1 in rangeContainer1.pop():\r
for range2 in rangeContainer2.pop():\r
- if range1.start >= range2.start:\r
- start = range1.start\r
- end = range1.end\r
- range1.start = range2.start\r
- range1.end = range2.end\r
- range2.start = start\r
- range2.end = end\r
+ start1 = range1.start\r
+ end1 = range1.end\r
+ start2 = range2.start\r
+ end2 = range2.end\r
+ if start1 >= start2:\r
+ start1, start2 = start2, start1\r
+ end1, end2 = end2, end1\r
if range1.empty:\r
rangeid = str(uuid.uuid1())\r
rangeContainer.push(RangeObject(0, 0, True))\r
- if range1.end < range2.start:\r
+ if end1 < start2:\r
rangeid = str(uuid.uuid1())\r
rangeContainer.push(RangeObject(0, 0, True))\r
- elif range1.end == range2.start:\r
+ elif end1 == start2:\r
rangeid = str(uuid.uuid1())\r
- rangeContainer.push(RangeObject(range1.end, range1.end))\r
- elif range1.end <= range2.end and range1.end > range2.start:\r
+ rangeContainer.push(RangeObject(end1, end1))\r
+ elif end1 <= end2 and end1 > start2:\r
rangeid = str(uuid.uuid1())\r
- rangeContainer.push(RangeObject(range2.start, range1.end))\r
- elif range1.end >= range2.end:\r
+ rangeContainer.push(RangeObject(start2, end1))\r
+ elif end1 >= end2:\r
rangeid = str(uuid.uuid1())\r
- rangeContainer.push(RangeObject(range2.start, range2.end))\r
+ rangeContainer.push(RangeObject(start2, end2))\r
\r
self.operanddict[rangeid] = rangeContainer\r
# rangeContainer.dump()\r