]> git.proxmox.com Git - mirror_edk2.git/blobdiff - BaseTools/Source/Python/Common/Expression.py
BaseTools: Fix a bug for FixedPcd value generation in AutoGen file
[mirror_edk2.git] / BaseTools / Source / Python / Common / Expression.py
index 80fad7563d17909bcdde8d6b6302ec60142b5493..7b3030c5fa08f9d1f219dbd83f3a81e338afd5d4 100644 (file)
@@ -1,7 +1,7 @@
 ## @file\r
 # This file is used to parse and evaluate expression in directive or PCD value.\r
 #\r
-# Copyright (c) 2011, Intel Corporation. All rights reserved.<BR>\r
+# Copyright (c) 2011 - 2016, 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
@@ -76,6 +76,10 @@ def ReplaceExprMacro(String, Macros, ExceptionList = None):
             InQuote = True\r
         MacroStartPos = String.find('$(')\r
         if MacroStartPos < 0:\r
+            for Pcd in gPlatformPcds.keys():\r
+                if Pcd in String:\r
+                    if Pcd not in gConditionalPcds:\r
+                        gConditionalPcds.append(Pcd)\r
             continue\r
         RetStr = ''\r
         while MacroStartPos >= 0:\r
@@ -246,12 +250,14 @@ class ValueExpression(object):
     #   @return: True or False if RealValue is False\r
     #            Evaluated value of string format if RealValue is True\r
     #\r
-    def __call__(self, RealValue=False):\r
+    def __call__(self, RealValue=False, Depth=0):\r
         if self._NoProcess:\r
             return self._Expr\r
 \r
+        self._Depth = Depth\r
+\r
         self._Expr = self._Expr.strip()\r
-        if RealValue:\r
+        if RealValue and Depth == 0:\r
             self._Token = self._Expr\r
             if self.__IsNumberToken():\r
                 return self._Expr\r
@@ -471,7 +477,7 @@ class ValueExpression(object):
                 Ex = BadExpression(ERR_PCD_RESOLVE % self._Token)\r
                 Ex.Pcd = self._Token\r
                 raise Ex\r
-            self._Token = ValueExpression(self._Symb[self._Token], self._Symb)(True)\r
+            self._Token = ValueExpression(self._Symb[self._Token], self._Symb)(True, self._Depth+1)\r
             if type(self._Token) != type(''):\r
                 self._LiteralToken = hex(self._Token)\r
                 return\r
@@ -551,7 +557,7 @@ class ValueExpression(object):
             if Match and not Expr[Match.end():Match.end()+1].isalnum() \\r
                 and Expr[Match.end():Match.end()+1] != '_':\r
                 self._Idx += Match.end()\r
-                self._Token = ValueExpression(GuidStringToGuidStructureString(Expr[0:Match.end()]))(True)\r
+                self._Token = ValueExpression(GuidStringToGuidStructureString(Expr[0:Match.end()]))(True, self._Depth+1)\r
                 return self._Token\r
             elif self.__IsIdChar(Ch):\r
                 return self.__GetIdToken()\r