]> git.proxmox.com Git - mirror_edk2.git/blobdiff - BaseTools/Source/Python/Common/Expression.py
BaseTools: Expression - remove redundant variable
[mirror_edk2.git] / BaseTools / Source / Python / Common / Expression.py
index 5a0ade9e7ecad6d1fa6cbeb2dec09f7d4ef26eae..bcb27ec11fd596c75f5ce5c91220b24afd7d0ab9 100644 (file)
@@ -15,7 +15,7 @@
 from Common.GlobalData import *\r
 from CommonDataClass.Exceptions import BadExpression\r
 from CommonDataClass.Exceptions import WrnExpression\r
-from Misc import GuidStringToGuidStructureString, ParseFieldValue\r
+from Misc import GuidStringToGuidStructureString, ParseFieldValue, IsFieldValueAnArray\r
 import Common.EdkLogger as EdkLogger\r
 import copy\r
 \r
@@ -46,14 +46,13 @@ ERR_IN_OPERAND          = 'Macro after IN operator can only be: $(FAMILY), $(ARC
 #\r
 def SplitString(String):\r
     # There might be escaped quote: "abc\"def\\\"ghi", 'abc\'def\\\'ghi'\r
-    Str = String\r
     RetList = []\r
     InSingleQuote = False\r
     InDoubleQuote = False\r
     Item = ''\r
-    for i, ch in enumerate(Str):\r
+    for i, ch in enumerate(String):\r
         if ch == '"' and not InSingleQuote:\r
-            if Str[i - 1] != '\\':\r
+            if String[i - 1] != '\\':\r
                 InDoubleQuote = not InDoubleQuote\r
             if not InDoubleQuote:\r
                 Item += String[i]\r
@@ -64,7 +63,7 @@ def SplitString(String):
                 RetList.append(Item)\r
                 Item = ''\r
         elif ch == "'" and not InDoubleQuote:\r
-            if Str[i - 1] != '\\':\r
+            if String[i - 1] != '\\':\r
                 InSingleQuote = not InSingleQuote\r
             if not InSingleQuote:\r
                 Item += String[i]\r
@@ -84,13 +83,12 @@ def SplitString(String):
 def SplitPcdValueString(String):\r
     # There might be escaped comma in GUID() or DEVICE_PATH() or " "\r
     # or ' ' or L' ' or L" "\r
-    Str = String\r
     RetList = []\r
     InParenthesis = 0\r
     InSingleQuote = False\r
     InDoubleQuote = False\r
     Item = ''\r
-    for i, ch in enumerate(Str):\r
+    for i, ch in enumerate(String):\r
         if ch == '(':\r
             InParenthesis += 1\r
         if ch == ')':\r
@@ -125,6 +123,25 @@ def IsValidCString(Str):
         return False\r
     return True\r
 \r
+def BuildOptionValue(PcdValue, GuidDict):\r
+    IsArray = False\r
+    if PcdValue.startswith('H'):\r
+        InputValue = PcdValue[1:]\r
+    elif PcdValue.startswith("L'") or PcdValue.startswith("'"):\r
+        InputValue = PcdValue\r
+    elif PcdValue.startswith('L'):\r
+        InputValue = 'L"' + PcdValue[1:] + '"'\r
+    else:\r
+        InputValue = PcdValue\r
+    if IsFieldValueAnArray(InputValue):\r
+        IsArray = True\r
+    if IsArray:\r
+        try:\r
+            PcdValue = ValueExpressionEx(InputValue, 'VOID*', GuidDict)(True)\r
+        except:\r
+            pass\r
+    return PcdValue\r
+\r
 ## ReplaceExprMacro\r
 #\r
 def ReplaceExprMacro(String, Macros, ExceptionList = None):\r
@@ -890,8 +907,9 @@ class ValueExpressionEx(ValueExpression):
                         LabelOffset = 0\r
                         for Index, Item in enumerate(PcdValueList):\r
                             # compute byte offset of every LABEL\r
-                            Item = Item.strip()\r
                             LabelList = ReLabel.findall(Item)\r
+                            Item = ReLabel.sub('', Item)\r
+                            Item = Item.strip()\r
                             if LabelList:\r
                                 for Label in LabelList:\r
                                     if not IsValidCString(Label):\r