Fixed an issue in Optimize() when encounter expression like "TRUE AND TRUE"
authorjwang36 <jwang36@7335b38e-4728-0410-8992-fb3ffe349368>
Fri, 16 May 2008 03:02:50 +0000 (03:02 +0000)
committerjwang36 <jwang36@7335b38e-4728-0410-8992-fb3ffe349368>
Fri, 16 May 2008 03:02:50 +0000 (03:02 +0000)
git-svn-id: https://buildtools.tianocore.org/svn/buildtools/trunk/BaseTools@1233 7335b38e-4728-0410-8992-fb3ffe349368

Source/Python/AutoGen/GenDepex.py

index cf11121..1e416d1 100644 (file)
@@ -43,10 +43,10 @@ gType2Phase = {
 }\r
 \r
 ## Convert dependency expression string into EFI internal representation\r
-# \r
+#\r
 #   DependencyExpression class is used to parse dependency expression string and\r
 # convert it into its binary form.\r
-# \r
+#\r
 class DependencyExpression:\r
 \r
     OpcodePriority = {\r
@@ -87,10 +87,10 @@ class DependencyExpression:
     SupportedOpcode = ["BEFORE", "AFTER", "PUSH", "AND", "OR", "NOT", "END", "SOR"]\r
     SupportedOperand = ["TRUE", "FALSE"]\r
     ## Constructor\r
-    # \r
+    #\r
     #   @param  Expression  The list or string of dependency expression\r
     #   @param  ModuleType  The type of the module using the dependency expression\r
-    # \r
+    #\r
     def __init__(self, Expression, ModuleType, Optimize=False, File=''):\r
         self.Phase = gType2Phase[ModuleType]\r
         if type(Expression) == type([]):\r
@@ -130,9 +130,11 @@ class DependencyExpression:
             return\r
         Op = ValidOpcode[0]\r
         NewOperand = []\r
+        AllOperand = set()\r
         for Token in self.PostfixNotation:\r
             if Token in self.SupportedOpcode or Token in NewOperand:\r
                 continue\r
+            AllOperand.add(Token)\r
             if Token == 'TRUE':\r
                 if Op == 'AND':\r
                     continue\r
@@ -147,12 +149,15 @@ class DependencyExpression:
                     break\r
             NewOperand.append(Token)\r
 \r
-        self.TokenList = []\r
-        while True:\r
-            self.TokenList.append(NewOperand.pop(0))\r
-            if NewOperand == []:\r
-                break\r
-            self.TokenList.append(Op)\r
+        if len(NewOperand) == 0:\r
+            self.TokenList = list(AllOperand)\r
+        else:\r
+            self.TokenList = []\r
+            while True:\r
+                self.TokenList.append(NewOperand.pop(0))\r
+                if NewOperand == []:\r
+                    break\r
+                self.TokenList.append(Op)\r
         self.PostfixNotation = []\r
         self.ExpressionString = ' '.join(self.TokenList)\r
         self.Parse()\r
@@ -160,9 +165,9 @@ class DependencyExpression:
     ## Convert a GUID value in C structure format into its binary form\r
     #\r
     #   @param  Guid    The GUID value in C structure format\r
-    # \r
+    #\r
     #   @retval array   The byte array representing the GUID value\r
-    # \r
+    #\r
     def GetGuidValue(self, Guid):\r
         GuidValueString = Guid.replace("{", "").replace("}", "").replace(" ", "")\r
         GuidValueList = GuidValueString.split(",")\r
@@ -173,17 +178,17 @@ class DependencyExpression:
     ## Save the binary form of dependency expression in file\r
     #\r
     #   @param  File    The path of file. If None is given, put the data on console\r
-    # \r
+    #\r
     #   @retval True    If the file doesn't exist or file is changed\r
     #   @retval False   If file exists and is not changed.\r
-    # \r
+    #\r
     def Generate(self, File=None):\r
         Buffer = StringIO()\r
         for Item in self.PostfixNotation:\r
             if Item in self.Opcode[self.Phase]:\r
                 Buffer.write(pack("B", self.Opcode[self.Phase][Item]))\r
             elif Item in self.SupportedOpcode:\r
-                EdkLogger.error("GenDepex", FORMAT_INVALID, \r
+                EdkLogger.error("GenDepex", FORMAT_INVALID,\r
                                 "Opcode [%s] is not expected in %s phase" % (Item, self.Phase),\r
                                 ExtraData=self.ExpressionString)\r
             else:\r
@@ -208,7 +213,7 @@ __usage__ = "%prog [options] [dependency_expression_file]"
 ## Parse command line options\r
 #\r
 #   @retval OptionParser\r
-# \r
+#\r
 def GetOptions():\r
     from optparse import OptionParser\r
 \r