From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: from mga09.intel.com (mga09.intel.com [134.134.136.24]) (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 8926B21CF3B85 for ; Mon, 3 Jul 2017 19:11:06 -0700 (PDT) Received: from fmsmga001.fm.intel.com ([10.253.24.23]) by orsmga102.jf.intel.com with ESMTP/TLS/DHE-RSA-AES256-GCM-SHA384; 03 Jul 2017 19:12:44 -0700 X-ExtLoop1: 1 X-IronPort-AV: E=Sophos;i="5.40,306,1496127600"; d="scan'208";a="1167756247" Received: from fmsmsx107.amr.corp.intel.com ([10.18.124.205]) by fmsmga001.fm.intel.com with ESMTP; 03 Jul 2017 19:12:44 -0700 Received: from shsmsx104.ccr.corp.intel.com (10.239.4.70) by fmsmsx107.amr.corp.intel.com (10.18.124.205) with Microsoft SMTP Server (TLS) id 14.3.319.2; Mon, 3 Jul 2017 19:12:43 -0700 Received: from shsmsx103.ccr.corp.intel.com ([169.254.4.116]) by SHSMSX104.ccr.corp.intel.com ([10.239.4.70]) with mapi id 14.03.0319.002; Tue, 4 Jul 2017 10:12:41 +0800 From: "Zhu, Yonghong" To: "Zhu, Yonghong" , "edk2-devel@lists.01.org" CC: "Feng, YunhuaX" , "Gao, Liming" , "Zhu, Yonghong" Thread-Topic: [edk2] [PATCH] BaseTools: Add PCDs conditional operator function Thread-Index: AQHS89bXZ7SONhC7NE2u9pH+WCfltaJC7lQA Date: Tue, 4 Jul 2017 02:12:41 +0000 Message-ID: References: <1499070677-24084-1-git-send-email-yonghong.zhu@intel.com> In-Reply-To: <1499070677-24084-1-git-send-email-yonghong.zhu@intel.com> Accept-Language: en-US X-MS-Has-Attach: X-MS-TNEF-Correlator: x-originating-ip: [10.239.127.40] MIME-Version: 1.0 Subject: Re: [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: , X-List-Received-Date: Tue, 04 Jul 2017 02:11:06 -0000 Content-Language: en-US Content-Type: text/plain; charset="us-ascii" Content-Transfer-Encoding: quoted-printable Reviewed-by: Yonghong Zhu =20 Best Regards, Zhu Yonghong -----Original Message----- From: edk2-devel [mailto:edk2-devel-bounces@lists.01.org] On Behalf Of Yong= hong Zhu Sent: Monday, July 03, 2017 4:31 PM To: edk2-devel@lists.01.org Cc: Feng, YunhuaX ; Gao, Liming Subject: [edk2] [PATCH] BaseTools: Add PCDs conditional operator function 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 --- 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 ['+', '-', '*', '/', '%', '&', '|', '^', '~',=20 + '<<', '>>', '!', '=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 @@ c= lass 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'] +=20 + self.NonLetterOpLst + ['?',':'] =20 self._Token =3D '' Expr =3D self._Expr[self._Idx:] -- 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