]> git.proxmox.com Git - mirror_edk2.git/blobdiff - BaseTools/Source/Python/Common/Expression.py
BaseTools: AutoGen - add Opcode constants
[mirror_edk2.git] / BaseTools / Source / Python / Common / Expression.py
index 320f0015009b3c28e16562cda31116b179597e8d..9fec10d2bb9c3c89a3e7f7b6295a4470fd57c293 100644 (file)
@@ -18,6 +18,7 @@ from CommonDataClass.Exceptions import WrnExpression
 from Misc import GuidStringToGuidStructureString, ParseFieldValue, IsFieldValueAnArray\r
 import Common.EdkLogger as EdkLogger\r
 import copy\r
+from Common.DataType import *\r
 \r
 ERR_STRING_EXPR         = 'This operator cannot be used in string expression: [%s].'\r
 ERR_SNYTAX              = 'Syntax error, the rest of expression cannot be evaluated: [%s].'\r
@@ -43,6 +44,7 @@ ERR_IN_OPERAND          = 'Macro after IN operator can only be: $(FAMILY), $(ARC
 __ValidString = re.compile(r'[_a-zA-Z][_0-9a-zA-Z]*$')\r
 _ReLabel = re.compile('LABEL\((\w+)\)')\r
 _ReOffset = re.compile('OFFSET_OF\((\w+)\)')\r
+PcdPattern = re.compile(r'[_a-zA-Z][0-9A-Za-z_]*\.[_a-zA-Z][0-9A-Za-z_]*$')\r
 \r
 ## SplitString\r
 #  Split string to list according double quote\r
@@ -135,7 +137,7 @@ def BuildOptionValue(PcdValue, GuidDict):
         InputValue = PcdValue\r
     if IsFieldValueAnArray(InputValue):\r
         try:\r
-            PcdValue = ValueExpressionEx(InputValue, 'VOID*', GuidDict)(True)\r
+            PcdValue = ValueExpressionEx(InputValue, TAB_VOID, GuidDict)(True)\r
         except:\r
             pass\r
     return PcdValue\r
@@ -150,7 +152,7 @@ def ReplaceExprMacro(String, Macros, ExceptionList = None):
             InQuote = True\r
         MacroStartPos = String.find('$(')\r
         if MacroStartPos < 0:\r
-            for Pcd in gPlatformPcds.keys():\r
+            for Pcd in gPlatformPcds:\r
                 if Pcd in String:\r
                     if Pcd not in gConditionalPcds:\r
                         gConditionalPcds.append(Pcd)\r
@@ -214,7 +216,6 @@ class ValueExpression(object):
 \r
     NonLetterOpLst = ['+', '-', '*', '/', '%', '&', '|', '^', '~', '<<', '>>', '!', '=', '>', '<', '?', ':']\r
 \r
-    PcdPattern = re.compile(r'[_a-zA-Z][0-9A-Za-z_]*\.[_a-zA-Z][0-9A-Za-z_]*$')\r
 \r
     SymbolPattern = re.compile("("\r
                                  "\$\([A-Z][A-Z0-9_]*\)|\$\(\w+\.\w+\)|\w+\.\w+|"\r
@@ -616,7 +617,7 @@ class ValueExpression(object):
             raise BadExpression(ERR_EMPTY_TOKEN)\r
 \r
         # PCD token\r
-        if self.PcdPattern.match(self._Token):\r
+        if PcdPattern.match(self._Token):\r
             if self._Token not in self._Symb:\r
                 Ex = BadExpression(ERR_PCD_RESOLVE % self._Token)\r
                 Ex.Pcd = self._Token\r
@@ -800,22 +801,22 @@ class ValueExpressionEx(ValueExpression):
         PcdValue = self.PcdValue\r
         try:\r
             PcdValue = ValueExpression.__call__(self, RealValue, Depth)\r
-            if self.PcdType == 'VOID*' and (PcdValue.startswith("'") or PcdValue.startswith("L'")):\r
+            if self.PcdType == TAB_VOID and (PcdValue.startswith("'") or PcdValue.startswith("L'")):\r
                 PcdValue, Size = ParseFieldValue(PcdValue)\r
                 PcdValueList = []\r
                 for I in range(Size):\r
                     PcdValueList.append('0x%02X'%(PcdValue & 0xff))\r
                     PcdValue = PcdValue >> 8\r
                 PcdValue = '{' + ','.join(PcdValueList) + '}'\r
-            elif self.PcdType in ['UINT8', 'UINT16', 'UINT32', 'UINT64', 'BOOLEAN'] and (PcdValue.startswith("'") or \\r
+            elif self.PcdType in TAB_PCD_NUMERIC_TYPES and (PcdValue.startswith("'") or \\r
                       PcdValue.startswith('"') or PcdValue.startswith("L'") or PcdValue.startswith('L"') or PcdValue.startswith('{')):\r
                 raise BadExpression\r
         except WrnExpression, Value:\r
             PcdValue = Value.result\r
         except BadExpression, Value:\r
-            if self.PcdType in ['UINT8', 'UINT16', 'UINT32', 'UINT64', 'BOOLEAN']:\r
+            if self.PcdType in TAB_PCD_NUMERIC_TYPES:\r
                 PcdValue = PcdValue.strip()\r
-                if type(PcdValue) == type('') and PcdValue.startswith('{') and PcdValue.endswith('}'):\r
+                if PcdValue.startswith('{') and PcdValue.endswith('}'):\r
                     PcdValue = SplitPcdValueString(PcdValue[1:-1])\r
                 if type(PcdValue) == type([]):\r
                     TmpValue = 0\r
@@ -823,24 +824,24 @@ class ValueExpressionEx(ValueExpression):
                     ValueType = ''\r
                     for Item in PcdValue:\r
                         Item = Item.strip()\r
-                        if Item.startswith('UINT8'):\r
+                        if Item.startswith(TAB_UINT8):\r
                             ItemSize = 1\r
-                            ValueType = 'UINT8'\r
-                        elif Item.startswith('UINT16'):\r
+                            ValueType = TAB_UINT8\r
+                        elif Item.startswith(TAB_UINT16):\r
                             ItemSize = 2\r
-                            ValueType = 'UINT16'\r
-                        elif Item.startswith('UINT32'):\r
+                            ValueType = TAB_UINT16\r
+                        elif Item.startswith(TAB_UINT32):\r
                             ItemSize = 4\r
-                            ValueType = 'UINT32'\r
-                        elif Item.startswith('UINT64'):\r
+                            ValueType = TAB_UINT32\r
+                        elif Item.startswith(TAB_UINT64):\r
                             ItemSize = 8\r
-                            ValueType = 'UINT64'\r
+                            ValueType = TAB_UINT64\r
                         elif Item[0] in ['"',"'",'L']:\r
                             ItemSize = 0\r
-                            ValueType = 'VOID*'\r
+                            ValueType = TAB_VOID\r
                         else:\r
                             ItemSize = 0\r
-                            ValueType = 'UINT8'\r
+                            ValueType = TAB_UINT8\r
                         Item = ValueExpressionEx(Item, ValueType, self._Symb)(True)\r
 \r
                         if ItemSize == 0:\r
@@ -875,13 +876,13 @@ class ValueExpressionEx(ValueExpression):
                     PcdValue = '0x%0{}X'.format(Size) % (TmpValue)\r
                 if TmpValue < 0:\r
                     raise  BadExpression('Type %s PCD Value is negative' % self.PcdType)\r
-                if self.PcdType == 'UINT8' and Size > 1:\r
+                if self.PcdType == TAB_UINT8 and Size > 1:\r
                     raise BadExpression('Type %s PCD Value Size is Larger than 1 byte' % self.PcdType)\r
-                if self.PcdType == 'UINT16' and Size > 2:\r
+                if self.PcdType == TAB_UINT16 and Size > 2:\r
                     raise BadExpression('Type %s PCD Value Size is Larger than 2 byte' % self.PcdType)\r
-                if self.PcdType == 'UINT32' and Size > 4:\r
+                if self.PcdType == TAB_UINT32 and Size > 4:\r
                     raise BadExpression('Type %s PCD Value Size is Larger than 4 byte' % self.PcdType)\r
-                if self.PcdType == 'UINT64' and Size > 8:\r
+                if self.PcdType == TAB_UINT64 and Size > 8:\r
                     raise BadExpression('Type %s PCD Value Size is Larger than 8 byte' % self.PcdType)\r
             else:\r
                 try:\r
@@ -908,15 +909,15 @@ class ValueExpressionEx(ValueExpression):
                                 for Label in LabelList:\r
                                     if not IsValidCName(Label):\r
                                         raise BadExpression('%s is not a valid c variable name' % Label)\r
-                                    if Label not in LabelDict.keys():\r
+                                    if Label not in LabelDict:\r
                                         LabelDict[Label] = str(LabelOffset)\r
-                            if Item.startswith('UINT8'):\r
+                            if Item.startswith(TAB_UINT8):\r
                                 LabelOffset = LabelOffset + 1\r
-                            elif Item.startswith('UINT16'):\r
+                            elif Item.startswith(TAB_UINT16):\r
                                 LabelOffset = LabelOffset + 2\r
-                            elif Item.startswith('UINT32'):\r
+                            elif Item.startswith(TAB_UINT32):\r
                                 LabelOffset = LabelOffset + 4\r
-                            elif Item.startswith('UINT64'):\r
+                            elif Item.startswith(TAB_UINT64):\r
                                 LabelOffset = LabelOffset + 8\r
                             else:\r
                                 try:\r
@@ -950,7 +951,7 @@ class ValueExpressionEx(ValueExpression):
                             Size = 0\r
                             ValueStr = ''\r
                             TokenSpaceGuidName = ''\r
-                            if Item.startswith('GUID') and Item.endswith(')'):\r
+                            if Item.startswith(TAB_GUID) and Item.endswith(')'):\r
                                 try:\r
                                     TokenSpaceGuidName = re.search('GUID\((\w+)\)', Item).group(1)\r
                                 except:\r
@@ -971,18 +972,18 @@ class ValueExpressionEx(ValueExpression):
                                 continue\r
                             else:\r
                                 ValueType = ""\r
-                                if Item.startswith('UINT8'):\r
+                                if Item.startswith(TAB_UINT8):\r
                                     ItemSize = 1\r
-                                    ValueType = "UINT8"\r
-                                elif Item.startswith('UINT16'):\r
+                                    ValueType = TAB_UINT8\r
+                                elif Item.startswith(TAB_UINT16):\r
                                     ItemSize = 2\r
-                                    ValueType = "UINT16"\r
-                                elif Item.startswith('UINT32'):\r
+                                    ValueType = TAB_UINT16\r
+                                elif Item.startswith(TAB_UINT32):\r
                                     ItemSize = 4\r
-                                    ValueType = "UINT32"\r
-                                elif Item.startswith('UINT64'):\r
+                                    ValueType = TAB_UINT32\r
+                                elif Item.startswith(TAB_UINT64):\r
                                     ItemSize = 8\r
-                                    ValueType = "UINT64"\r
+                                    ValueType = TAB_UINT64\r
                                 else:\r
                                     ItemSize = 0\r
                                 if ValueType:\r