summary |
shortlog |
log |
commit | commitdiff |
tree
raw |
patch |
inline | side by side (from parent 1:
e9651c1)
Parse PCDS value like A >B ? C :D
if A > B is True, the result is C, else the result is D
Cc: Liming Gao <liming.gao@intel.com>
Cc: Yonghong Zhu <yonghong.zhu@intel.com>
Contributed-under: TianoCore Contribution Agreement 1.0
Signed-off-by: Yunhua Feng <yunhuax.feng@intel.com>
Reviewed-by: Yonghong Zhu <yonghong.zhu@intel.com>
- NonLetterOpLst = ['+', '-', '*', '/', '%', '&', '|', '^', '~', '<<', '>>', '!', '=', '>', '<']\r
+ NonLetterOpLst = ['+', '-', '*', '/', '%', '&', '|', '^', '~', '<<', '>>', '!', '=', '>', '<', '?', ':']\r
\r
PcdPattern = re.compile(r'[_a-zA-Z][0-9A-Za-z_]*\.[_a-zA-Z][0-9A-Za-z_]*$')\r
HexPattern = re.compile(r'0[xX][0-9a-fA-F]+$')\r
\r
PcdPattern = re.compile(r'[_a-zA-Z][0-9A-Za-z_]*\.[_a-zA-Z][0-9A-Za-z_]*$')\r
HexPattern = re.compile(r'0[xX][0-9a-fA-F]+$')\r
self._Idx = 0\r
self._Token = ''\r
\r
self._Idx = 0\r
self._Token = ''\r
\r
+ Val = self._ConExpr()\r
RealVal = Val\r
if type(Val) == type(''):\r
if Val == 'L""':\r
RealVal = Val\r
if type(Val) == type(''):\r
if Val == 'L""':\r
Val = EvalFunc()\r
while self._IsOperator(OpLst):\r
Op = self._Token\r
Val = EvalFunc()\r
while self._IsOperator(OpLst):\r
Op = self._Token\r
+ if Op == '?':\r
+ Val2 = EvalFunc()\r
+ if self._IsOperator(':'):\r
+ Val3 = EvalFunc()\r
+ if Val:\r
+ Val = Val2\r
+ else:\r
+ Val = Val3\r
+ continue\r
try:\r
Val = self.Eval(Op, Val, EvalFunc())\r
except WrnExpression, Warn:\r
self._WarnExcept = Warn\r
Val = Warn.result\r
return Val\r
try:\r
Val = self.Eval(Op, Val, EvalFunc())\r
except WrnExpression, Warn:\r
self._WarnExcept = Warn\r
Val = Warn.result\r
return Val\r
+ # A [? B]*\r
+ def _ConExpr(self):\r
+ return self._ExprFuncTemplate(self._OrExpr, ['?', ':'])\r
\r
# A [|| B]*\r
def _OrExpr(self):\r
\r
# A [|| B]*\r
def _OrExpr(self):\r
def _IdenExpr(self):\r
Tk = self._GetToken()\r
if Tk == '(':\r
def _IdenExpr(self):\r
Tk = self._GetToken()\r
if Tk == '(':\r
+ Val = self._ConExpr()\r
try:\r
# _GetToken may also raise BadExpression\r
if self._GetToken() != ')':\r
try:\r
# _GetToken may also raise BadExpression\r
if self._GetToken() != ')':\r
def __GetIdToken(self, IsAlphaOp = False):\r
IdToken = ''\r
for Ch in self._Expr[self._Idx:]:\r
def __GetIdToken(self, IsAlphaOp = False):\r
IdToken = ''\r
for Ch in self._Expr[self._Idx:]:\r
- if not self.__IsIdChar(Ch):\r
+ if not self.__IsIdChar(Ch) or ('?' in self._Expr and Ch == ':'):\r
break\r
self._Idx += 1\r
IdToken += Ch\r
break\r
self._Idx += 1\r
IdToken += Ch\r
# Parse operator\r
def _GetOperator(self):\r
self.__SkipWS()\r
# Parse operator\r
def _GetOperator(self):\r
self.__SkipWS()\r
- LegalOpLst = ['&&', '||', '!=', '==', '>=', '<='] + self.NonLetterOpLst\r
+ LegalOpLst = ['&&', '||', '!=', '==', '>=', '<='] + self.NonLetterOpLst + ['?',':']\r
\r
self._Token = ''\r
Expr = self._Expr[self._Idx:]\r
\r
self._Token = ''\r
Expr = self._Expr[self._Idx:]\r