From nobody Sun May 5 16:23:19 2024 Delivered-To: importer@patchew.org Received-SPF: none (zoho.com: 198.145.21.10 is neither permitted nor denied by domain of lists.01.org) client-ip=198.145.21.10; envelope-from=edk2-devel-bounces@lists.01.org; helo=ml01.01.org; Authentication-Results: mx.zoho.com; spf=none (zoho.com: 198.145.21.10 is neither permitted nor denied by domain of lists.01.org) smtp.mailfrom=edk2-devel-bounces@lists.01.org; Return-Path: Received: from ml01.01.org (ml01.01.org [198.145.21.10]) by mx.zohomail.com with SMTPS id 1499070684168216.6453559280609; Mon, 3 Jul 2017 01:31:24 -0700 (PDT) Received: from [127.0.0.1] (localhost [IPv6:::1]) by ml01.01.org (Postfix) with ESMTP id F3FD321CB57DC; Mon, 3 Jul 2017 01:29:42 -0700 (PDT) Received: from mga14.intel.com (mga14.intel.com [192.55.52.115]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by ml01.01.org (Postfix) with ESMTPS id 213962095A6D4 for ; Mon, 3 Jul 2017 01:29:42 -0700 (PDT) Received: from fmsmga005.fm.intel.com ([10.253.24.32]) by fmsmga103.fm.intel.com with ESMTP/TLS/DHE-RSA-AES256-GCM-SHA384; 03 Jul 2017 01:31:18 -0700 Received: from shwdeopenpsi168.ccr.corp.intel.com ([10.239.158.121]) by fmsmga005.fm.intel.com with ESMTP; 03 Jul 2017 01:31:17 -0700 X-Original-To: edk2-devel@lists.01.org X-ExtLoop1: 1 X-IronPort-AV: E=Sophos;i="5.40,302,1496127600"; d="scan'208";a="121692471" From: Yonghong Zhu To: edk2-devel@lists.01.org Date: Mon, 3 Jul 2017 16:31:17 +0800 Message-Id: <1499070677-24084-1-git-send-email-yonghong.zhu@intel.com> X-Mailer: git-send-email 2.6.1.windows.1 Subject: [edk2] [PATCH] BaseTools: Add PCDs conditional operator function X-BeenThere: edk2-devel@lists.01.org X-Mailman-Version: 2.1.22 Precedence: list List-Id: EDK II Development List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Cc: Yunhua Feng , Liming Gao MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable Errors-To: edk2-devel-bounces@lists.01.org Sender: "edk2-devel" X-ZohoMail: RSF_4 Z_629925259 SPT_0 Content-Type: text/plain; charset="utf-8" From: Yunhua Feng 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 Cc: Yonghong Zhu Contributed-under: TianoCore Contribution Agreement 1.0 Signed-off-by: Yunhua Feng Reviewed-by: Yonghong Zhu =20 --- BaseTools/Source/Python/Common/Expression.py | 22 +++++++++++++++++----- 1 file changed, 17 insertions(+), 5 deletions(-) diff --git a/BaseTools/Source/Python/Common/Expression.py b/BaseTools/Sourc= e/Python/Common/Expression.py index 6d002f5676..ba83e02f75 100644 --- a/BaseTools/Source/Python/Common/Expression.py +++ b/BaseTools/Source/Python/Common/Expression.py @@ -129,7 +129,7 @@ class ValueExpression(object): 'IN' : 'in' } =20 - NonLetterOpLst =3D ['+', '-', '*', '/', '%', '&', '|', '^', '~', '<<',= '>>', '!', '=3D', '>', '<'] + NonLetterOpLst =3D ['+', '-', '*', '/', '%', '&', '|', '^', '~', '<<',= '>>', '!', '=3D', '>', '<', '?', ':'] =20 PcdPattern =3D re.compile(r'[_a-zA-Z][0-9A-Za-z_]*\.[_a-zA-Z][0-9A-Za-= z_]*$') HexPattern =3D re.compile(r'0[xX][0-9a-fA-F]+$') @@ -276,7 +276,7 @@ class ValueExpression(object): self._Idx =3D 0 self._Token =3D '' =20 - Val =3D self._OrExpr() + Val =3D self._ConExpr() RealVal =3D Val if type(Val) =3D=3D type(''): if Val =3D=3D 'L""': @@ -312,12 +312,24 @@ class ValueExpression(object): Val =3D EvalFunc() while self._IsOperator(OpLst): Op =3D self._Token + if Op =3D=3D '?': + Val2 =3D EvalFunc() + if self._IsOperator(':'): + Val3 =3D EvalFunc() + if Val: + Val =3D Val2 + else: + Val =3D Val3 + continue try: Val =3D self.Eval(Op, Val, EvalFunc()) except WrnExpression, Warn: self._WarnExcept =3D Warn Val =3D Warn.result return Val + # A [? B]* + def _ConExpr(self): + return self._ExprFuncTemplate(self._OrExpr, ['?', ':']) =20 # A [|| B]* def _OrExpr(self): @@ -392,7 +404,7 @@ class ValueExpression(object): def _IdenExpr(self): Tk =3D self._GetToken() if Tk =3D=3D '(': - Val =3D self._OrExpr() + Val =3D self._ConExpr() try: # _GetToken may also raise BadExpression if self._GetToken() !=3D ')': @@ -474,7 +486,7 @@ class ValueExpression(object): def __GetIdToken(self, IsAlphaOp =3D False): IdToken =3D '' for Ch in self._Expr[self._Idx:]: - if not self.__IsIdChar(Ch): + if not self.__IsIdChar(Ch) or ('?' in self._Expr and Ch =3D=3D= ':'): break self._Idx +=3D 1 IdToken +=3D Ch @@ -593,7 +605,7 @@ class ValueExpression(object): # Parse operator def _GetOperator(self): self.__SkipWS() - LegalOpLst =3D ['&&', '||', '!=3D', '=3D=3D', '>=3D', '<=3D'] + se= lf.NonLetterOpLst + LegalOpLst =3D ['&&', '||', '!=3D', '=3D=3D', '>=3D', '<=3D'] + se= lf.NonLetterOpLst + ['?',':'] =20 self._Token =3D '' Expr =3D self._Expr[self._Idx:] --=20 2.12.2.windows.2 GitPatchExtractor 1.0 _______________________________________________ edk2-devel mailing list edk2-devel@lists.01.org https://lists.01.org/mailman/listinfo/edk2-devel