## @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
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
# @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
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
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