From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: from mail02.groups.io (mail02.groups.io [66.175.222.108]) by spool.mail.gandi.net (Postfix) with ESMTPS id B889C740032 for ; Thu, 21 Dec 2023 00:56:15 +0000 (UTC) DKIM-Signature: a=rsa-sha256; bh=baGU5ZP75sHOr7rzZwzqTbFxCLq4BSucDkT/INISMmc=; c=relaxed/simple; d=groups.io; h=From:To:Cc:References:In-Reply-To:Subject:Date:Message-ID:MIME-Version:Thread-Index:Precedence:List-Subscribe:List-Help:Sender:List-Id:Mailing-List:Delivered-To:Reply-To:List-Unsubscribe-Post:List-Unsubscribe:Content-Type:Content-Transfer-Encoding:Content-Language; s=20140610; t=1703120174; v=1; b=Q4Ypr4EyfsN8lRiqFjGqAxjCe9i5RUdxLBcEYAF6unbljEHFaFlwbZRNK5r2+oAivR2ETeJn dS7G27HXAv7Gy2DWH8ZjNrQB+5CLsHqWGjAip7lZuxHAzcoeoR9nzcmUHXxGU2aTC+55uU3aboU 7Wosz5FLdifhuLqVxKQxNEno= X-Received: by 127.0.0.2 with SMTP id nQ8zYY7687511xuZrQqqg6Uq; Wed, 20 Dec 2023 16:56:14 -0800 X-Received: from cxsh.intel-email.com (cxsh.intel-email.com [121.46.250.151]) by mx.groups.io with SMTP id smtpd.web11.41357.1703120172373582752 for ; Wed, 20 Dec 2023 16:56:13 -0800 X-Received: from cxsh.intel-email.com (localhost [127.0.0.1]) by cxsh.intel-email.com (Postfix) with ESMTP id B1857DDA797 for ; Thu, 21 Dec 2023 08:56:10 +0800 (CST) X-Received: from localhost (localhost [127.0.0.1]) by cxsh.intel-email.com (Postfix) with ESMTP id AC5C0DDA7C8 for ; Thu, 21 Dec 2023 08:56:10 +0800 (CST) X-Received: from mail.byosoft.com.cn (mail.byosoft.com.cn [58.240.74.242]) by cxsh.intel-email.com (Postfix) with SMTP id A24DEDDA7C4 for ; Thu, 21 Dec 2023 08:56:07 +0800 (CST) X-Received: from DESKTOPS6D0PVI ([36.112.174.178]) (envelope-sender ) by 192.168.6.13 with ESMTP(SSL) for ; Thu, 21 Dec 2023 08:56:00 +0800 X-WM-Sender: gaoliming@byosoft.com.cn X-Originating-IP: 36.112.174.178 X-WM-AuthFlag: YES X-WM-AuthUser: gaoliming@byosoft.com.cn From: "gaoliming via groups.io" To: "'Yuting Yang'" , Cc: "'Rebecca Cran'" , "'Bob Feng'" , "'Christine Chen'" References: <20231212084354.755-1-yuting2.yang@intel.com> In-Reply-To: <20231212084354.755-1-yuting2.yang@intel.com> Subject: =?UTF-8?B?W2VkazItZGV2ZWxdIOWbnuWkjTogW1BBVENIXSBCYXNlVG9vbHM6IFZmckNvbXBpbGVyIEFkZHMgRGVmYXVsdFZhbHVlRXJyb3IgRmVhdHVyZQ==?= Date: Thu, 21 Dec 2023 08:56:03 +0800 Message-ID: <002601da33a8$78e903b0$6abb0b10$@byosoft.com.cn> MIME-Version: 1.0 Thread-Index: AQMtdWCH4FJDqz20kQvDc5b7ZWuBwK4MZINA Precedence: Bulk List-Subscribe: List-Help: Sender: devel@edk2.groups.io List-Id: Mailing-List: list devel@edk2.groups.io; contact devel+owner@edk2.groups.io Reply-To: devel@edk2.groups.io,gaoliming@byosoft.com.cn List-Unsubscribe-Post: List-Unsubscribe=One-Click List-Unsubscribe: X-Gm-Message-State: QKjB6VQZlhi7jPzS1q4uwTsRx7686176AA= Content-Type: text/plain; charset="gb2312" Content-Transfer-Encoding: quoted-printable Content-Language: zh-cn X-GND-Status: LEGIT Authentication-Results: spool.mail.gandi.net; dkim=pass header.d=groups.io header.s=20140610 header.b=Q4Ypr4Ey; dmarc=none; spf=pass (spool.mail.gandi.net: domain of bounce@groups.io designates 66.175.222.108 as permitted sender) smtp.mailfrom=bounce@groups.io Yuting: Seemly, this is a new feature. Can you submit a new BZ for it? If so, it can be tracked in stable tag feature planning.=20 I have confuse on these two options --catch_default and --except_list. VfrCompiler is used to compile single VFR one by one.=20 =20 Single VFR can enable --catch_default or not. If so, what's the usage model for --except_list? Besides, what's purpose for new option --catch_default? Why limit the default opcode in VFR file? Thanks Liming > -----=D3=CA=BC=FE=D4=AD=BC=FE----- > =B7=A2=BC=FE=C8=CB: Yuting Yang > =B7=A2=CB=CD=CA=B1=BC=E4: 2023=C4=EA12=D4=C212=C8=D5 16:44 > =CA=D5=BC=FE=C8=CB: devel@edk2.groups.io > =B3=AD=CB=CD: Rebecca Cran ; Liming Gao > ; Bob Feng ; Christine > Chen > =D6=F7=CC=E2: [PATCH] BaseTools: VfrCompiler Adds DefaultValueError Featu= re >=20 > Add --catch_default option > Raise a DefaultValueError when encountering VFR default definitions > to help remove default variables. > S > Add --except_list option > Exclude packages that don't require enabling the catch_default function. >=20 > Cc: Rebecca Cran > Cc: Liming Gao > Cc: Bob Feng > Cc: Christine Chen > Cc: Yuting Yang >=20 > Signed-off-by: Yuting Yang > --- > BaseTools/Source/C/VfrCompile/VfrCompiler.cpp | 40 ++- > BaseTools/Source/C/VfrCompile/VfrCompiler.h | 3 + > BaseTools/Source/C/VfrCompile/VfrError.cpp | 3 +- > BaseTools/Source/C/VfrCompile/VfrError.h | 3 +- > BaseTools/Source/C/VfrCompile/VfrFormPkg.h | 1 + > BaseTools/Source/C/VfrCompile/VfrSyntax.g | 238 ++++++++++-------- > 6 files changed, 184 insertions(+), 104 deletions(-) >=20 > diff --git a/BaseTools/Source/C/VfrCompile/VfrCompiler.cpp > b/BaseTools/Source/C/VfrCompile/VfrCompiler.cpp > index 5f4d262d85..e97cebff65 100644 > --- a/BaseTools/Source/C/VfrCompile/VfrCompiler.cpp > +++ b/BaseTools/Source/C/VfrCompile/VfrCompiler.cpp > @@ -78,6 +78,9 @@ CVfrCompiler::OptionInitialization ( > mOptions.WarningAsError =3D FALSE; >=20 > mOptions.AutoDefault =3D FALSE; >=20 > mOptions.CheckDefault =3D FALSE; >=20 > + mOptions.IsCatchDefaultEnable =3D FALSE; >=20 > + mOptions.ExceptionList =3D NULL; >=20 > + mOptions.ExceptionListSize =3D 0; >=20 > memset (&mOptions.OverrideClassGuid, 0, sizeof (EFI_GUID)); >=20 >=20 >=20 > if (Argc =3D=3D 1) { >=20 > @@ -95,6 +98,23 @@ CVfrCompiler::OptionInitialization ( > Version (); >=20 > SET_RUN_STATUS (STATUS_DEAD); >=20 > return; >=20 > + } else if (stricmp(Argv[Index], "--catch_default") =3D=3D 0){ >=20 > + mOptions.IsCatchDefaultEnable =3D TRUE; >=20 > + } else if (stricmp(Argv[Index], "--except_list") =3D=3D 0){ >=20 > + INT32 Start =3D ++Index; >=20 > + if ((Start >=3D Argc) || (Argv[Start][0] =3D=3D '-')) { >=20 > + DebugError (NULL, 0, 1001, "Missing option", "-exception_list > missing except list"); >=20 > + goto Fail; >=20 > + } >=20 > + while ((Argv[Index][0] !=3D '-') && (Index < Argc - 1)) { >=20 > + Index++; >=20 > + } >=20 > + INT32 End =3D Index--; >=20 > + mOptions.ExceptionListSize =3D End - Start; >=20 > + for (INT32 i =3D Start; i < End; i++) { >=20 > + mOptions.ExceptionList =3D (CHAR8**) > realloc(mOptions.ExceptionList, (i - Start + 1) * sizeof(CHAR8*)); >=20 > + mOptions.ExceptionList[i-Start] =3D Argv[i]; >=20 > + } >=20 > } else if (stricmp(Argv[Index], "-l") =3D=3D 0) { >=20 > mOptions.CreateRecordListFile =3D TRUE; >=20 > gCIfrRecordInfoDB.TurnOn (); >=20 > @@ -179,7 +199,11 @@ CVfrCompiler::OptionInitialization ( > goto Fail; >=20 > } >=20 > strcpy (mOptions.VfrFileName, Argv[Index]); >=20 > - >=20 > + for (int i =3D 0; i < mOptions.ExceptionListSize; i++) { >=20 > + if (strstr(mOptions.VfrFileName, mOptions.ExceptionList[i]) !=3D NULL) > { >=20 > + mOptions.IsCatchDefaultEnable =3D FALSE; >=20 > + } >=20 > + } >=20 > if (mOptions.OutputDirectory =3D=3D NULL) { >=20 > mOptions.OutputDirectory =3D (CHAR8 *) malloc (1); >=20 > if (mOptions.OutputDirectory =3D=3D NULL) { >=20 > @@ -217,6 +241,11 @@ Fail: > free (mOptions.VfrFileName); >=20 > mOptions.VfrFileName =3D NULL; >=20 > } >=20 > + if (mOptions.ExceptionList !=3D NULL) { >=20 > + free(mOptions.ExceptionList); >=20 > + mOptions.ExceptionList =3D NULL; >=20 > + >=20 > + } >=20 > if (mOptions.VfrBaseFileName !=3D NULL) { >=20 > free (mOptions.VfrBaseFileName); >=20 > mOptions.VfrBaseFileName =3D NULL; >=20 > @@ -496,6 +525,11 @@ CVfrCompiler::~CVfrCompiler ( > mOptions.VfrBaseFileName =3D NULL; >=20 > } >=20 >=20 >=20 > + if (mOptions.ExceptionList !=3D NULL) { >=20 > + free (mOptions.ExceptionList); >=20 > + mOptions.ExceptionList =3D NULL; >=20 > + } >=20 > + >=20 > if (mOptions.OutputDirectory !=3D NULL) { >=20 > free (mOptions.OutputDirectory); >=20 > mOptions.OutputDirectory =3D NULL; >=20 > @@ -679,7 +713,7 @@ CVfrCompiler::Compile ( > DebugError (NULL, 0, 0001, "Error opening the input file", "%s", > InFileName); >=20 > goto Fail; >=20 > } >=20 > - >=20 > + InputInfo.IsCatchDefaultEnable =3D mOptions.IsCatchDefaultEnable; >=20 > if (mOptions.HasOverrideClassGuid) { >=20 > InputInfo.OverrideClassGuid =3D &mOptions.OverrideClassGuid; >=20 > } else { >=20 > @@ -937,5 +971,3 @@ main ( >=20 >=20 > return GetUtilityStatus (); >=20 > } >=20 > - >=20 > - >=20 > diff --git a/BaseTools/Source/C/VfrCompile/VfrCompiler.h > b/BaseTools/Source/C/VfrCompile/VfrCompiler.h > index b6e207d2ce..39e0a89a29 100644 > --- a/BaseTools/Source/C/VfrCompile/VfrCompiler.h > +++ b/BaseTools/Source/C/VfrCompile/VfrCompiler.h > @@ -52,6 +52,9 @@ typedef struct { > BOOLEAN WarningAsError; >=20 > BOOLEAN AutoDefault; >=20 > BOOLEAN CheckDefault; >=20 > + BOOLEAN IsCatchDefaultEnable; >=20 > + CHAR8** ExceptionList; >=20 > + INT16 ExceptionListSize; >=20 > } OPTIONS; >=20 >=20 >=20 > typedef enum { >=20 > diff --git a/BaseTools/Source/C/VfrCompile/VfrError.cpp > b/BaseTools/Source/C/VfrCompile/VfrError.cpp > index 65bb8e34fd..8a706f929b 100644 > --- a/BaseTools/Source/C/VfrCompile/VfrError.cpp > +++ b/BaseTools/Source/C/VfrCompile/VfrError.cpp > @@ -49,7 +49,8 @@ static SVFR_WARNING_HANDLE > VFR_WARNING_HANDLE_TABLE [] =3D { > { VFR_WARNING_DEFAULT_VALUE_REDEFINED, ": default value > re-defined with different value"}, >=20 > { VFR_WARNING_ACTION_WITH_TEXT_TWO, ": Action opcode should not > have TextTwo part"}, >=20 > { VFR_WARNING_OBSOLETED_FRAMEWORK_OPCODE, ": Not > recommend to use obsoleted framework opcode"}, >=20 > - { VFR_WARNING_CODEUNDEFINED, ": undefined Warning Code" } >=20 > + { VFR_WARNING_CODEUNDEFINED, ": undefined Warning Code" }, >=20 > + { VFR_WARNING_UNSUPPORTED, ": pls remove the default values if > necessary" } >=20 > }; >=20 >=20 >=20 > CVfrErrorHandle::CVfrErrorHandle ( >=20 > diff --git a/BaseTools/Source/C/VfrCompile/VfrError.h > b/BaseTools/Source/C/VfrCompile/VfrError.h > index 7d16bd5f74..1b4bc173d2 100644 > --- a/BaseTools/Source/C/VfrCompile/VfrError.h > +++ b/BaseTools/Source/C/VfrCompile/VfrError.h > @@ -47,7 +47,8 @@ typedef enum { > VFR_WARNING_DEFAULT_VALUE_REDEFINED =3D 0, >=20 > VFR_WARNING_ACTION_WITH_TEXT_TWO, >=20 > VFR_WARNING_OBSOLETED_FRAMEWORK_OPCODE, >=20 > - VFR_WARNING_CODEUNDEFINED >=20 > + VFR_WARNING_CODEUNDEFINED, >=20 > + VFR_WARNING_UNSUPPORTED >=20 > } EFI_VFR_WARNING_CODE; >=20 >=20 >=20 > typedef struct _SVFR_ERROR_HANDLE { >=20 > diff --git a/BaseTools/Source/C/VfrCompile/VfrFormPkg.h > b/BaseTools/Source/C/VfrCompile/VfrFormPkg.h > index 9ef6f07787..d8fada3bcb 100644 > --- a/BaseTools/Source/C/VfrCompile/VfrFormPkg.h > +++ b/BaseTools/Source/C/VfrCompile/VfrFormPkg.h > @@ -96,6 +96,7 @@ struct SBufferNode { >=20 >=20 > typedef struct { >=20 > EFI_GUID *OverrideClassGuid; >=20 > + BOOLEAN IsCatchDefaultEnable; >=20 > } INPUT_INFO_TO_SYNTAX; >=20 >=20 >=20 > class CFormPkg { >=20 > diff --git a/BaseTools/Source/C/VfrCompile/VfrSyntax.g > b/BaseTools/Source/C/VfrCompile/VfrSyntax.g > index 55fd067f8a..5daf1c423c 100644 > --- a/BaseTools/Source/C/VfrCompile/VfrSyntax.g > +++ b/BaseTools/Source/C/VfrCompile/VfrSyntax.g > @@ -50,6 +50,7 @@ VfrParserStart ( > { >=20 > ParserBlackBox VfrParser(File)= ; >=20 > VfrParser.parser()->SetOverrideClassGuid (InputInfo->OverrideClassGuid); >=20 > + > VfrParser.parser()->SetIsCatchDefaultEnable(InputInfo->IsCatchDefaultEnable > ); >=20 > return VfrParser.parser()->vfrProgram(); >=20 > } >=20 > >> >=20 > @@ -386,8 +387,8 @@ dataStructField32 [BOOLEAN FieldInUnion]: > ; >=20 >=20 >=20 > dataStructField16 [BOOLEAN FieldInUnion]: >=20 > - << >=20 > - UINT32 ArrayNum =3D 0; >=20 > + << >=20 > + UINT32 ArrayNum =3D 0; >=20 > >> >=20 > ("UINT16" | "CHAR16") >=20 > N:StringIdentifier >=20 > @@ -737,7 +738,7 @@ vfrFormSetList : > ; >=20 >=20 >=20 > vfrStatementExtension: >=20 > - << >=20 > + << >=20 > EFI_GUID Guid; >=20 > CIfrGuid *GuidObj =3D NULL; >=20 > CHAR8 *TypeName =3D NULL; >=20 > @@ -751,7 +752,7 @@ vfrStatementExtension: > >> >=20 > L:GuidOp >=20 > Uuid "=3D" guidDefinition[Guid] >=20 > - {"," DataType "=3D" >=20 > + {"," DataType "=3D" >=20 > ( >=20 > U64:"UINT64" {OpenBracket AN1:Number CloseBracket > <getText(), AN1->getLine());>>} >=20 > << > TypeName =3D U64->getText(); LineNum =3D U64->getLine(); >> >=20 > @@ -770,7 +771,7 @@ vfrStatementExtension: > | T:"EFI_HII_TIME" {OpenBracket AN8:Number CloseBracket > <getText(), AN8->getLine());>>} >=20 > << > TypeName =3D T->getText(); LineNum =3D T->getLine(); IsStruct =3D TRUE;>> >=20 > | R:"EFI_HII_REF" {OpenBracket AN9:Number CloseBracket > <getText(), AN9->getLine());>>} >=20 > - << > TypeName =3D R->getText(); LineNum =3D R->getLine(); IsStruct =3D TRUE;>> >=20 > + << > TypeName =3D R->getText(); LineNum =3D R->getLine(); IsStruct =3D TRUE;>> >=20 > | TN:StringIdentifier {OpenBracket AN10:Number CloseBracket > <getText(), AN10->getLine());>>} >=20 > << > TypeName =3D TN->getText(); LineNum =3D TN->getLine(); IsStruct =3D TRUE;= >> >=20 > ) >=20 > @@ -875,19 +876,19 @@ vfrExtensionData[UINT8 *DataBuff, UINT32 Size, > CHAR8 *TypeName, UINT32 TypeSize, > memcpy (ByteOffset, &Data_U64, TypeSize); >=20 > }else if (strcmp ("UINT32", TypeName) =3D=3D 0) { >=20 > Data_U32 =3D _STOU32(RD->getText(), RD->getLine()); >=20 > - memcpy (ByteOffset, &Data_U32, TypeSize); >=20 > + memcpy (ByteOffset, &Data_U32, TypeSize); >=20 > }else if (strcmp ("UINT16", TypeName) =3D=3D 0) { >=20 > Data_U16 =3D _STOU16(RD->getText(), RD->getLine()); >=20 > - memcpy (ByteOffset, &Data_U16, TypeSize); >=20 > + memcpy (ByteOffset, &Data_U16, TypeSize); >=20 > }else if (strcmp ("UINT8", TypeName) =3D=3D 0) { >=20 > Data_U8 =3D _STOU8(RD->getText(), RD->getLine()); >=20 > - memcpy (ByteOffset, &Data_U8, TypeSize); >=20 > + memcpy (ByteOffset, &Data_U8, TypeSize); >=20 > }else if (strcmp ("BOOLEAN", TypeName)=3D=3D 0) { >=20 > Data_BL =3D _STOU8(RD->getText(), RD->getLine()); >=20 > - memcpy (ByteOffset, &Data_BL, TypeSize); >=20 > + memcpy (ByteOffset, &Data_BL, TypeSize); >=20 > }else if (strcmp ("EFI_STRING_ID", TypeName) =3D=3D 0) { >=20 > Data_SID =3D _STOSID(RD->getText(), RD->getLine()); >=20 > - memcpy (ByteOffset, &Data_SID, TypeSize); >=20 > + memcpy (ByteOffset, &Data_SID, TypeSize); >=20 > } >=20 > } else { >=20 > gCVfrVarDataTypeDB.GetDataFieldInfo(TFName, > FieldOffset, FieldType, FieldSize, BitField); >=20 > @@ -975,7 +976,15 @@ vfrExtensionData[UINT8 *DataBuff, UINT32 Size, > CHAR8 *TypeName, UINT32 TypeSize, >=20 >=20 > vfrStatementDefaultStore : >=20 > << UINT16 DefaultId =3D EFI_HII_DEFAULT_CLASS_STANDARD; >> >=20 > - D:DefaultStore N:StringIdentifier "," >=20 > + D:DefaultStore N:StringIdentifier "," << >=20 > + if > (mIsCatchDefaultEnable) { >=20 > + > gCVfrErrorHandle.HandleWarning ( >=20 > + > VFR_WARNING_UNSUPPORTED, >=20 > + > D->getLine(), >=20 > + > D->getText() >=20 > + ); >=20 > + } >=20 > + >> >=20 > Prompt "=3D" "STRING_TOKEN" "\(" S:Number "\)" >=20 > { >=20 > "," Attribute "=3D" A:Number << DefaultId =3D > _STOU16(A->getText(), A->getLine()); >> >=20 > @@ -1074,7 +1083,7 @@ vfrStatementVarStoreEfi : > | U64:"UINT64" "," << TypeName > =3D U64->getText(); LineNum =3D U64->getLine(); >> >=20 > | D:"EFI_HII_DATE" "," << TypeName =3D > D->getText(); LineNum =3D D->getLine(); >> >=20 > | T:"EFI_HII_TIME" "," << TypeName =3D > T->getText(); LineNum =3D T->getLine(); >> >=20 > - | R:"EFI_HII_REF" "," << TypeName =3D > R->getText(); LineNum =3D R->getLine(); >> >=20 > + | R:"EFI_HII_REF" "," << TypeName =3D > R->getText(); LineNum =3D R->getLine(); >> >=20 > ) >=20 > { >=20 > VarId "=3D" ID:Number "," << >=20 > @@ -1092,8 +1101,8 @@ vfrStatementVarStoreEfi : > ( >=20 > Name "=3D" SN:StringIdentifier "," << StoreName =3D > SN->getText(); >> >=20 > | >=20 > - Name "=3D" "STRING_TOKEN" "\(" VN:Number "\)" "," >=20 > - VarSize "=3D" N:Number "," << >=20 > + Name "=3D" "STRING_TOKEN" "\(" VN:Number "\)" "," >=20 > + VarSize "=3D" N:Number "," << >=20 >=20 > IsUEFI23EfiVarstore =3D FALSE; >=20 >=20 > StoreName =3D > gCVfrStringDB.GetVarStoreNameFormStringId(_STOSID(VN->getText(), > VN->getLine())); >=20 > if > (StoreName =3D=3D NULL) { >=20 > @@ -1116,7 +1125,7 @@ vfrStatementVarStoreEfi : > break; >=20 > case 8: >=20 >=20 > TypeName =3D (CHAR8 *) "UINT64"; >=20 > - break; >=20 > + break; >=20 > default: >=20 >=20 > _PCATCH (VFR_RETURN_UNSUPPORTED, N); >=20 > break; >=20 > @@ -1124,7 +1133,7 @@ vfrStatementVarStoreEfi : > >> >=20 > ) >=20 >=20 >=20 > - Uuid "=3D" guidDefinition[Guid] << >=20 > + Uuid "=3D" guidDefinition[Guid] << >=20 > if > (IsUEFI23EfiVarstore) { >=20 >=20 > _PCATCH(gCVfrDataStorage.DeclareBufferVarStore ( >=20 >=20 > StoreName, >=20 > @@ -1150,7 +1159,7 @@ vfrStatementVarStoreEfi : > } >=20 >=20 > VSEObj.SetGuid (&Guid); >=20 >=20 > VSEObj.SetVarStoreId (VarStoreId); >=20 > - >=20 > + >=20 >=20 > VSEObj.SetSize ((UINT16) Size); >=20 >=20 > VSEObj.SetName (StoreName); >=20 > if > (IsUEFI23EfiVarstore =3D=3D FALSE && StoreName !=3D NULL) { >=20 > @@ -1184,7 +1193,7 @@ vfrStatementVarStoreNameValue : > >> >=20 > } >=20 > ( >=20 > - Name "=3D" "STRING_TOKEN" "\(" N:Number "\)" "," << >=20 > + Name "=3D" "STRING_TOKEN" "\(" N:Number "\)" "," << >=20 > if > (!Created) { >=20 >=20 > _PCATCH(gCVfrDataStorage.DeclareNameVarStoreBegin (SN->getText(), > VarStoreId), SN); >=20 >=20 > Created =3D TRUE; >=20 > @@ -1245,12 +1254,12 @@ vfrStatementDisableIfFormSet : > vfrStatementSuppressIfFormSet : >=20 > << CIfrSuppressIf SIObj;>> >=20 > L:SuppressIf << >=20 > - > SIObj.SetLineNo(L->getLine()); >=20 > + > SIObj.SetLineNo(L->getLine()); >=20 > >> >=20 > { FLAGS "=3D" flagsField ( "\|" flagsField )* "," } >=20 > vfrStatementExpression[0] ";" >=20 > vfrFormSetList >=20 > - E: EndIf >=20 > + E: EndIf >=20 > ";" << > CRT_END_OP (E); >> >=20 > ; >=20 >=20 >=20 > @@ -1491,7 +1500,7 @@ vfrQuestionDataFieldName [EFI_QUESTION_ID > &QId, UINT32 &Mask, CHAR8 *&VarIdStr, > ( >=20 > SN2:StringIdentifier << _STRCAT > (&VarIdStr, SN2->getText()); LineNo =3D SN2->getLine(); >> >=20 > ( >=20 > - "." << >=20 > + "." << >=20 >=20 > _STRCAT (&VarIdStr, "."); >=20 > if > (mConstantOnlyInExpression) { >=20 >=20 > _PCATCH(VFR_RETURN_CONSTANT_ONLY, LineNo); >=20 > @@ -1518,7 +1527,7 @@ vfrQuestionDataFieldName [EFI_QUESTION_ID > &QId, UINT32 &Mask, CHAR8 *&VarIdStr, > ; >=20 >=20 >=20 > vfrConstantValueField[UINT8 Type, EFI_IFR_TYPE_VALUE &Value, BOOLEAN > &ListType] : >=20 > - << >=20 > + << >=20 > EFI_GUID Guid; >=20 > BOOLEAN Negative =3D FALSE; >=20 > BOOLEAN IntDecStyle =3D FALSE; >=20 > @@ -1634,11 +1643,11 @@ vfrConstantValueField[UINT8 Type, > EFI_IFR_TYPE_VALUE &Value, BOOLEAN &ListType] > | Z:Zero << $Value.u8 > =3D _STOU8(Z->getText(), Z->getLine()); >> >=20 > | HOUR:Number ":" MINUTE:Number ":" SECOND:Number << > $Value.time =3D _STOT(HOUR->getText(), > MINUTE->getText(),SECOND->getText(), HOUR->getLine()); >> >=20 > | YEAR:Number "/" MONTH:Number "/" DAY:Number << > $Value.date =3D _STOD(YEAR->getText(), MONTH->getText(), DAY->getText()= , > YEAR->getLine()); >> >=20 > - | QI:Number";" FI:Number";" guidDefinition[Guid] ";" "STRING_TOKEN" > "\(" DP:Number "\)" >=20 > + | QI:Number";" FI:Number";" guidDefinition[Guid] ";" "STRING_TOKEN" > "\(" DP:Number "\)" >=20 > << > $Value.ref =3D _STOR(QI->getText(), FI->getText(), &Guid, DP->getText(= ), > QI->getLine()); >> >=20 > | "STRING_TOKEN" "\(" S1:Number "\)" << $Value.string > =3D _STOSID(S1->getText(), S1->getLine()); >> >=20 > | "\{" << ListType =3D > TRUE; >> >=20 > - L1:Number << >=20 > + L1:Number << >=20 > switch > (Type) { >=20 > case > EFI_IFR_TYPE_NUM_SIZE_8 : >=20 >=20 > Type8[Index] =3D _STOU8(L1->getText(), L1->getLine()); >=20 > @@ -1658,8 +1667,8 @@ vfrConstantValueField[UINT8 Type, > EFI_IFR_TYPE_VALUE &Value, BOOLEAN &ListType] >=20 > Index++; >=20 > >> >=20 > ( >=20 > - "," >=20 > - L2:Number << >=20 > + "," >=20 > + L2:Number << >=20 > switch > (Type) { >=20 > case > EFI_IFR_TYPE_NUM_SIZE_8 : >=20 >=20 > Type8[Index] =3D _STOU8(L2->getText(), L2->getLine()); >=20 > @@ -1679,7 +1688,7 @@ vfrConstantValueField[UINT8 Type, > EFI_IFR_TYPE_VALUE &Value, BOOLEAN &ListType] >=20 > Index++; >=20 > >> >=20 > )* >=20 > - "\}" >=20 > + "\}" >=20 > ; >=20 >=20 >=20 >=20 > //************************************************************ > ***************** >=20 > @@ -1714,7 +1723,7 @@ vfrFormDefinition : > ; >=20 >=20 >=20 > vfrFormMapDefinition : >=20 > - << >=20 > + << >=20 > CIfrFormMap *FMapObj =3D NULL; >=20 > UINT32 FormMapMethodNumber =3D 0; >=20 > EFI_GUID Guid; >=20 > @@ -1775,11 +1784,15 @@ vfrStatementDefault : > CIfrNumeric *NumericQst =3D NULL; >=20 >=20 >=20 > >> >=20 > - D:Default >=20 > + D:Default << >=20 > + if > (mIsCatchDefaultEnable) { >=20 > + > DefaultValueError(VFR_RETURN_UNSUPPORTED, D->getLine()); >=20 > + } >=20 > + >> >=20 > ( >=20 > ( >=20 > - "=3D" vfrConstantValueField[_GET_CURRQEST_DATATYPE(), *Val, > ArrayType] "," >=20 > - << >=20 > + "=3D" vfrConstantValueField[_GET_CURRQEST_DATATYPE(), *Val, > ArrayType] "," >=20 > + << >=20 > if > (gCurrentMinMaxData !=3D NULL && > gCurrentMinMaxData->IsNumericOpcode()) { >=20 >=20 > //check default value is valid for Numeric Opcode >=20 >=20 > NumericQst =3D (CIfrNumeric *) gCurrentQuestion; >=20 > @@ -1888,14 +1901,14 @@ vfrStatementDefault : > vfrStatementValue "," << CIfrEnd > EndObj1; EndObj1.SetLineNo(D->getLine()); >> >=20 > ) >=20 > { >=20 > - DefaultStore "=3D" SN:StringIdentifier "," << >=20 > + DefaultStore "=3D" SN:StringIdentifier "," << >=20 >=20 > _PCATCH(gCVfrDefaultStore.GetDefaultId (SN->getText(), &DefaultId), SN); >=20 > if > (DObj !=3D NULL) { >=20 > - > DObj->SetDefaultId (DefaultId); >=20 > - } >=20 > + > DObj->SetDefaultId (DefaultId); >=20 > + } >=20 >=20 >=20 > if > (DObj2 !=3D NULL) { >=20 > - > DObj2->SetDefaultId (DefaultId); >=20 > + > DObj2->SetDefaultId (DefaultId); >=20 > } >=20 > >> >=20 > } >=20 > @@ -1917,8 +1930,8 @@ vfrStatementDefault : >=20 > ); >=20 > } >=20 > } >=20 > - if > (DObj !=3D NULL) {delete DObj;} >=20 > - if > (DObj2 !=3D NULL) {delete DObj2;} >=20 > + if > (DObj !=3D NULL) {delete DObj;} >=20 > + if > (DObj2 !=3D NULL) {delete DObj2;} >=20 > >> >=20 > ) >=20 > ; >=20 > @@ -1970,11 +1983,15 @@ vfrStatementInvalid : > ; >=20 >=20 >=20 > flagsField : >=20 > - Number >=20 > - | InteractiveFlag >=20 > - | ManufacturingFlag >=20 > - | DefaultFlag >=20 > - | ResetRequiredFlag >=20 > + Number >=20 > + | InteractiveFlag >=20 > + | ManufacturingFlag >=20 > + | D:DefaultFlag << >=20 > + if > (mIsCatchDefaultEnable) { >=20 > + > DefaultValueError(VFR_RETURN_UNSUPPORTED, D->getLine()); >=20 > + } >=20 > + >> >=20 > + | ResetRequiredFlag >=20 > | ReconnectRequiredFlag >=20 > | N:NVAccessFlag << >=20 >=20 > gCVfrErrorHandle.HandleWarning ( >=20 > @@ -1989,7 +2006,7 @@ flagsField : >=20 > L->getLine(), >=20 >=20 > L->getText() >=20 > ); >=20 > - >> >=20 > + >> >=20 > ; >=20 >=20 >=20 > vfrStatementValue : >=20 > @@ -2001,13 +2018,13 @@ vfrStatementValue : > vfrStatementRead : >=20 > << CIfrRead RObj; >> >=20 > R:Read << > RObj.SetLineNo(R->getLine()); >> >=20 > - vfrStatementExpression[0] ";" >=20 > + vfrStatementExpression[0] ";" >=20 > ; >=20 >=20 >=20 > vfrStatementWrite : >=20 > << CIfrWrite WObj; >> >=20 > W:Write << > WObj.SetLineNo(W->getLine()); >> >=20 > - vfrStatementExpression[0] ";" >=20 > + vfrStatementExpression[0] ";" >=20 > ; >=20 >=20 >=20 > vfrStatementSubTitle : >=20 > @@ -2140,7 +2157,7 @@ vfrStatementGoto : > FormId "=3D" F3:Number "," << RefType > =3D 2; FId =3D _STOFID(F3->getText(), F3->getLine()); >> >=20 > Question "=3D" >=20 > ( >=20 > - QN3:StringIdentifier "," << >=20 > + QN3:StringIdentifier "," << >=20 >=20 > mCVfrQuestionDB.GetQuestionId (QN3->getText (), NULL, QId, BitMask); >=20 > if > (QId =3D=3D EFI_QUESTION_ID_INVALID) { >=20 >=20 > _PCATCH(VFR_RETURN_UNDEFINED, QN3); >=20 > @@ -2222,7 +2239,7 @@ vfrStatementGoto : > "," Key "=3D" KN:Number << > AssignQuestionKey (*QHObj, KN); >> >=20 > } >=20 > { >=20 > - E:"," >=20 > + E:"," >=20 > vfrStatementQuestionOptionList << > OHObj->SetScope(1); CRT_END_OP (E);>> >=20 > } >=20 > ";" << if > (R1Obj !=3D NULL) {delete R1Obj;} if (R2Obj !=3D NULL) {delete R2Obj;} if > (R3Obj !=3D NULL) {delete R3Obj;} if (R4Obj !=3D NULL) {delete R4Obj;} if > (R5Obj !=3D NULL) {delete R5Obj;}>> >=20 > @@ -2511,20 +2528,20 @@ minMaxDateStepDefault[EFI_HII_DATE & D, > UINT8 KeyValue] : > { >=20 > "default" "=3D" N:Number "," << >=20 >=20 > switch (KeyValue) { >=20 > - case > 0: >=20 > + > case 0: >=20 >=20 > D.Year =3D _STOU16(N->getText(), N->getLine()); >=20 > if > (D.Year < _STOU16 (MinN->getText(), MinN->getLine()) || D.Year > _STOU16 > (MaxN->getText(), MaxN->getLine())) { >=20 >=20 > _PCATCH (VFR_RETURN_INVALID_PARAMETER, N->getLine(), "Year default > value must be between Min year and Max year."); >=20 > } >=20 >=20 > break; >=20 > - case > 1: >=20 > - > D.Month =3D _STOU8(N->getText(), N->getLine()); >=20 > + > case 1: >=20 > + > D.Month =3D _STOU8(N->getText(), N->getLine()); >=20 > if > (D.Month < 1 || D.Month > 12) { >=20 >=20 > _PCATCH (VFR_RETURN_INVALID_PARAMETER, N->getLine(), "Month default > value must be between 1 and 12."); >=20 > } >=20 >=20 > break; >=20 > - case > 2: >=20 > - > D.Day =3D _STOU8(N->getText(), N->getLine()); >=20 > + > case 2: >=20 > + > D.Day =3D _STOU8(N->getText(), N->getLine()); >=20 > if > (D.Day < 1 || D.Day > 31) { >=20 >=20 > _PCATCH (VFR_RETURN_INVALID_PARAMETER, N->getLine(), "Day default > value must be between 1 and 31."); >=20 > } >=20 > @@ -2570,7 +2587,7 @@ vfrSetMinMaxStep[CIfrMinMaxStepData & > MMSDObj] : > BOOLEAN MinNegative =3D FALSE; >=20 > BOOLEAN MaxNegative =3D FALSE; >=20 > >> >=20 > - Minimum "=3D" >=20 > + Minimum "=3D" >=20 > { >=20 > "\-" << > MinNegative =3D TRUE; >> >=20 > } >=20 > @@ -2659,8 +2676,8 @@ vfrSetMinMaxStep[CIfrMinMaxStepData & > MMSDObj] : > } >=20 > } >=20 > >> >=20 > - Maximum "=3D" >=20 > - { >=20 > + Maximum "=3D" >=20 > + { >=20 > "\-" << > MaxNegative =3D TRUE; >> >=20 > } >=20 > A:Number "," << >=20 > @@ -2889,7 +2906,7 @@ vfrStatementNumeric : > } >=20 > >> >=20 > vfrStatementQuestionOptionList >=20 > - E:EndNumeric << >=20 > + E:EndNumeric << >=20 >=20 > CRT_END_OP (E); >=20 > if > (GuidObj !=3D NULL) { >=20 >=20 > GuidObj->SetScope(1); >=20 > @@ -3131,7 +3148,7 @@ vfrStatementString : > { >=20 > Key "=3D" KN:Number "," << > AssignQuestionKey (SObj, KN); >> >=20 > } >=20 > - MinSize "=3D" MIN:Number "," << >=20 > + MinSize "=3D" MIN:Number "," << >=20 >=20 > VarArraySize =3D _GET_CURRQEST_ARRAY_SIZE(); >=20 >=20 > StringMinSize =3D _STOU8(MIN->getText(), MIN->getLine()); >=20 > if > (_STOU64(MIN->getText(), MIN->getLine()) > StringMinSize) { >=20 > @@ -3141,7 +3158,7 @@ vfrStatementString : > } >=20 >=20 > SObj.SetMinSize (StringMinSize); >=20 > >> >=20 > - MaxSize "=3D" MAX:Number "," << >=20 > + MaxSize "=3D" MAX:Number "," << >=20 >=20 > StringMaxSize =3D _STOU8(MAX->getText(), MAX->getLine()); >=20 > if > (_STOU64(MAX->getText(), MAX->getLine()) > StringMaxSize) { >=20 >=20 > _PCATCH (VFR_RETURN_INVALID_PARAMETER, MAX->getLine(), "String > MaxSize takes only one byte, which can't be larger than 0xFF."); >=20 > @@ -3185,7 +3202,7 @@ vfrStatementPassword : > { >=20 > Key "=3D" KN:Number "," << > AssignQuestionKey (PObj, KN); >> >=20 > } >=20 > - MinSize "=3D" MIN:Number "," << >=20 > + MinSize "=3D" MIN:Number "," << >=20 >=20 > VarArraySize =3D _GET_CURRQEST_ARRAY_SIZE(); >=20 >=20 > PasswordMinSize =3D _STOU16(MIN->getText(), MIN->getLine()); >=20 > if > (_STOU64(MIN->getText(), MIN->getLine()) > PasswordMinSize) { >=20 > @@ -3195,7 +3212,7 @@ vfrStatementPassword : > } >=20 >=20 > PObj.SetMinSize (PasswordMinSize); >=20 > >> >=20 > - MaxSize "=3D" MAX:Number "," << >=20 > + MaxSize "=3D" MAX:Number "," << >=20 >=20 > PasswordMaxSize =3D _STOU16(MAX->getText(), MAX->getLine()); >=20 > if > (_STOU64(MAX->getText(), MAX->getLine()) > PasswordMaxSize) { >=20 >=20 > _PCATCH (VFR_RETURN_INVALID_PARAMETER, MAX->getLine(), "Password > MaxSize takes only two byte, which can't be larger than 0xFFFF."); >=20 > @@ -3230,12 +3247,12 @@ vfrStatementOrderedList : > >> >=20 > L:OrderedList << > OLObj.SetLineNo(L->getLine()); gIsOrderedList =3D TRUE;>> >=20 > vfrQuestionHeader[OLObj] "," >=20 > - << >=20 > + << >=20 >=20 > VarArraySize =3D _GET_CURRQEST_ARRAY_SIZE(); >=20 >=20 > OLObj.SetMaxContainers ((UINT8) (VarArraySize > 0xFF ? 0xFF : > VarArraySize)); >=20 > >> >=20 > { >=20 > - MaxContainers "=3D" M:Number "," << >=20 > + MaxContainers "=3D" M:Number "," << >=20 > if > (_STOU64(M->getText(), M->getLine()) > _STOU8(M->getText(), M->getLine())= ) > { >=20 >=20 > _PCATCH (VFR_RETURN_INVALID_PARAMETER, M->getLine(), "OrderedList > MaxContainers takes only one byte, which can't be larger than 0xFF."); >=20 > } > else if (VarArraySize !=3D 0 && _STOU8(M->getText(), M->getLine()) > > VarArraySize) { >=20 > @@ -3328,19 +3345,19 @@ minMaxTimeStepDefault[EFI_HII_TIME & T, > UINT8 KeyValue] : > { >=20 > "default" "=3D" N:Number "," << >=20 >=20 > switch (KeyValue) { >=20 > - case > 0: >=20 > - > T.Hour =3D _STOU8(N->getText(), N->getLine()); >=20 > + > case 0: >=20 > + > T.Hour =3D _STOU8(N->getText(), N->getLine()); >=20 > if > (T.Hour > 23) { >=20 >=20 > _PCATCH (VFR_RETURN_INVALID_PARAMETER, N->getLine(), "Hour default > value must be between 0 and 23."); >=20 > } >=20 >=20 > break; >=20 > - case > 1: >=20 > - > T.Minute =3D _STOU8(N->getText(), N->getLine()); >=20 > + > case 1: >=20 > + > T.Minute =3D _STOU8(N->getText(), N->getLine()); >=20 > if > (T.Minute > 59) { >=20 >=20 > _PCATCH (VFR_RETURN_INVALID_PARAMETER, N->getLine(), "Minute > default value must be between 0 and 59."); >=20 > } >=20 >=20 > break; >=20 > - case > 2: >=20 > + > case 2: >=20 >=20 > T.Second =3D _STOU8(N->getText(), N->getLine()); >=20 > if > (T.Second > 59) { >=20 >=20 > _PCATCH (VFR_RETURN_INVALID_PARAMETER, N->getLine(), "Second default > value must be between 0 and 59."); >=20 > @@ -3419,11 +3436,11 @@ vfrStatementStatListOld : > ; >=20 >=20 >=20 > vfrStatementDisableIfStat : >=20 > - << >=20 > - CIfrDisableIf DIObj; >=20 > + << >=20 > + CIfrDisableIf DIObj; >=20 > >> >=20 > L:DisableIf << > DIObj.SetLineNo(L->getLine()); >> >=20 > - vfrStatementExpression[0] ";" >=20 > + vfrStatementExpression[0] ";" >=20 > ( vfrStatementStatList )* >=20 > E:EndIf << > CRT_END_OP (E); >> >=20 > ";" >=20 > @@ -3548,8 +3565,8 @@ vfrStatementWarningIf : > ; >=20 >=20 >=20 > vfrStatementDisableIfQuest : >=20 > - << >=20 > - CIfrDisableIf DIObj; >=20 > + << >=20 > + CIfrDisableIf DIObj; >=20 > >> >=20 > L:DisableIf << > DIObj.SetLineNo(L->getLine()); >> >=20 > vfrStatementExpression[0] ";" >=20 > @@ -3616,15 +3633,15 @@ vfrStatementOneOfOption : > UINT32 *Type32 =3D (UINT32 *) ValueList; >=20 > UINT64 *Type64 =3D (UINT64 *) ValueList; >=20 > >> >=20 > - L:Option << >=20 > + L:Option << >=20 > if > (_GET_CURRQEST_DATATYPE() =3D=3D EFI_IFR_TYPE_OTHER) { >=20 >=20 > _PCATCH (VFR_RETURN_FATAL_ERROR, L->getLine(), "Get data type error."); >=20 > } >=20 >=20 >=20 > >> >=20 > - Text "=3D" "STRING_TOKEN" "\(" S:Number "\)" "," >=20 > + Text "=3D" "STRING_TOKEN" "\(" S:Number "\)" "," >=20 > Value "=3D" vfrConstantValueField[_GET_CURRQEST_DATATYPE(), *Val, > ArrayType] "," >=20 > - << >=20 > + << >=20 > if > (gCurrentMinMaxData !=3D NULL) { >=20 >=20 > //set min/max value for oneof opcode >=20 >=20 > UINT64 Step =3D > gCurrentMinMaxData->GetStepData(_GET_CURRQEST_DATATYPE(), > _GET_CURRQEST_VARTINFO().mIsBitVar); >=20 > @@ -3696,7 +3713,7 @@ vfrStatementOneOfOption : > Size > +=3D OFFSET_OF (EFI_IFR_ONE_OF_OPTION, Value); >=20 >=20 > OOOObj =3D new CIfrOneOfOption((UINT8)Size); >=20 >=20 > OOOObj->SetLineNo(L->getLine()); >=20 > - > OOOObj->SetOption (_STOSID(S->getText(), S->getLine())); >=20 > + > OOOObj->SetOption (_STOSID(S->getText(), S->getLine())); >=20 > if > (ArrayType) { >=20 >=20 > OOOObj->SetType (EFI_IFR_TYPE_BUFFER); >=20 > } > else { >=20 > @@ -3706,7 +3723,7 @@ vfrStatementOneOfOption : >=20 > OOOObj->SetType (_GET_CURRQEST_DATATYPE()); >=20 > } >=20 > } >=20 > - > OOOObj->SetValue (*Val); >=20 > + > OOOObj->SetValue (*Val); >=20 > >> >=20 > F:FLAGS "=3D" vfrOneOfOptionFlags[*OOOObj, F->getLine()] >=20 > << >=20 > @@ -3790,7 +3807,12 @@ oneofoptionFlagsField [UINT8 & HFlags, UINT8 & > LFlags] : > | RestStyleFlag << $HFlags > |=3D 0x20; >> >=20 > | ReconnectRequiredFlag << $HFlags > |=3D 0x40; >> >=20 > | ManufacturingFlag << $LFlags > |=3D 0x20; >> >=20 > - | DefaultFlag << $LFlags > |=3D 0x10; >> >=20 > + | D:DefaultFlag << >=20 > + > $LFlags |=3D 0x10; >=20 > + if > (mIsCatchDefaultEnable) { >=20 > + > DefaultValueError(VFR_RETURN_UNSUPPORTED, D->getLine()); >=20 > + } >=20 > + >> >=20 > | A:NVAccessFlag << >=20 >=20 > gCVfrErrorHandle.HandleWarning ( >=20 >=20 > VFR_WARNING_OBSOLETED_FRAMEWORK_OPCODE, >=20 > @@ -3963,7 +3985,7 @@ vfrStatementExpression [UINT32 RootLevel, > UINT32 ExpOpCount =3D 0] : >=20 > } >=20 > } >=20 > } >=20 > - >=20 > + >=20 > if > ($RootLevel =3D=3D 0) { >=20 >=20 > _CLEAR_SAVED_OPHDR (); >=20 >=20 > mCIfrOpHdrIndex --; >=20 > @@ -4405,10 +4427,10 @@ ideqvallistExp[UINT32 & RootLevel, UINT32 & > ExpOpCount] : >=20 > for (Index =3D 0; Index < ListLen; Index++) { >=20 >=20 > EILObj.SetValueList (Index, ValueList[Index]); >=20 > } >=20 > - >=20 > + >=20 >=20 > EILObj.UpdateIfrBuffer(); >=20 > - > _SAVE_OPHDR_COND (EILObj, ($ExpOpCount =3D=3D 0), L->getLine()); >=20 > - >=20 > + > _SAVE_OPHDR_COND (EILObj, ($ExpOpCount =3D=3D 0), L->getLine()); >=20 > + >=20 > if > (QId =3D=3D EFI_QUESTION_ID_INVALID) { >=20 >=20 > EILObj.SetQuestionId (QId, VarIdStr, LineNo); >=20 > } >=20 > @@ -4458,9 +4480,9 @@ stringref1Exp[UINT32 & RootLevel, UINT32 & > ExpOpCount] : > >> >=20 > L:StringRef >=20 > "\(" >=20 > - ( >=20 > + ( >=20 > "STRING_TOKEN" >=20 > - "\(" >=20 > + "\(" >=20 > S:Number << RefStringId =3D _STOSID(S->getText(), > S->getLine()); >> >=20 > "\)" >=20 > | I:Number << RefStringId =3D _STOSID(I->getText(), I->getLine()= ); >> >=20 > @@ -4499,10 +4521,10 @@ getExp[UINT32 & RootLevel, UINT32 & > ExpOpCount] : > Info.mVarStoreId =3D 0; >=20 > >> >=20 > L:Get >=20 > - "\(" >=20 > + "\(" >=20 > vfrStorageVarId[Info, VarIdStr, FALSE] >=20 > {"\|" FLAGS "=3D" numericVarStoreType [VarType] } >=20 > - "\)" << >=20 > + "\)" << >=20 > { >=20 > if > (Info.mVarStoreId =3D=3D 0) { >=20 >=20 > // support Date/Time question >=20 > @@ -4549,9 +4571,9 @@ getExp[UINT32 & RootLevel, UINT32 & > ExpOpCount] : >=20 > _PCATCH(VFR_RETURN_UNSUPPORTED, L->getLine(), "Get/Set opcode don't > support data array"); >=20 >=20 > } >=20 > } >=20 > - > CIfrGet GObj(L->getLine()); >=20 > - > _SAVE_OPHDR_COND (GObj, ($ExpOpCount =3D=3D 0), L->getLine()); >=20 > - > GObj.SetVarInfo (&Info); >=20 > + > CIfrGet GObj(L->getLine()); >=20 > + > _SAVE_OPHDR_COND (GObj, ($ExpOpCount =3D=3D 0), L->getLine()); >=20 > + > GObj.SetVarInfo (&Info); >=20 >=20 > delete[] VarIdStr; >=20 >=20 > $ExpOpCount++; >=20 > } >=20 > @@ -4608,7 +4630,7 @@ question23refExp[UINT32 & RootLevel, UINT32 & > ExpOpCount] : > { >=20 > Uuid "=3D" guidDefinition[Guid] "," << > Type =3D 0x3; >> >=20 > } >=20 > - vfrStatementExpressionSub[$RootLevel + 1, $ExpOpCount] >=20 > + vfrStatementExpressionSub[$RootLevel + 1, $ExpOpCount] >=20 > "\)" >=20 > << >=20 >=20 > switch (Type) { >=20 > @@ -4675,9 +4697,9 @@ setExp[UINT32 & RootLevel, UINT32 & > ExpOpCount] : > "\(" >=20 > vfrStorageVarId[Info, VarIdStr, FALSE] >=20 > {"\|" FLAG "=3D" numericVarStoreType [VarType] } >=20 > - "," vfrStatementExpressionSub[$RootLevel + 1, $ExpOpCount] >=20 > + "," vfrStatementExpressionSub[$RootLevel + 1, $ExpOpCount] >=20 > "\)" >=20 > - << >=20 > + << >=20 > { >=20 > if > (Info.mVarStoreId =3D=3D 0) { >=20 >=20 > // support Date/Time question >=20 > @@ -4724,8 +4746,8 @@ setExp[UINT32 & RootLevel, UINT32 & > ExpOpCount] : >=20 > _PCATCH(VFR_RETURN_UNSUPPORTED, L->getLine(), "Get/Set opcode don't > support data array"); >=20 >=20 > } >=20 > } >=20 > - > CIfrSet TSObj(L->getLine()); >=20 > - > TSObj.SetVarInfo (&Info); >=20 > + > CIfrSet TSObj(L->getLine()); >=20 > + > TSObj.SetVarInfo (&Info); >=20 >=20 > delete[] VarIdStr; >=20 >=20 > $ExpOpCount++; >=20 > } >=20 > @@ -4808,9 +4830,9 @@ spanExp[UINT32 & RootLevel, UINT32 & > ExpOpCount] : > ; >=20 >=20 >=20 > vfrExpressionMap [UINT32 & RootLevel, UINT32 & ExpOpCount]: >=20 > - L:Map >=20 > - "\(" >=20 > - vfrStatementExpressionSub[$RootLevel + 1, $ExpOpCount] >=20 > + L:Map >=20 > + "\(" >=20 > + vfrStatementExpressionSub[$RootLevel + 1, $ExpOpCount] >=20 > ":" << > { CIfrMap MObj(L->getLine()); } >> >=20 > ( >=20 > vfrStatementExpression[0] >=20 > @@ -4837,6 +4859,7 @@ spanFlags [UINT8 & Flags] : > class EfiVfrParser { >=20 > << >=20 > private: >=20 > + BOOLEAN mIsCatchDefaultEnable; >=20 > UINT8 mParserStatus; >=20 > BOOLEAN mConstantOnlyInExpression; >=20 >=20 >=20 > @@ -4880,6 +4903,7 @@ public: > VOID _PCATCH (IN EFI_VFR_RETURN_CODE, IN > ANTLRTokenPtr); >=20 > VOID _PCATCH (IN EFI_VFR_RETURN_CODE, IN > UINT32); >=20 > VOID _PCATCH (IN EFI_VFR_RETURN_CODE, IN > UINT32, IN CONST CHAR8 *); >=20 > + VOID DefaultValueError (IN EFI_VFR_RETURN_CODE, > IN UINT32); >=20 >=20 >=20 > VOID syn (ANTLRAbstractToken *, ANTLRChar > *, SetWordType *, ANTLRTokenType, INT32); >=20 >=20 >=20 > @@ -4909,6 +4933,7 @@ public: > VOID IdEqIdDoSpecial (IN UINT32 &, IN > UINT32, IN EFI_QUESTION_ID, IN CHAR8 *, IN UINT32, IN EFI_QUESTION_ID, > IN CHAR8 *, IN UINT32, IN EFI_COMPARE_TYPE); >=20 > VOID IdEqListDoSpecial (IN UINT32 &, IN > UINT32, IN EFI_QUESTION_ID, IN CHAR8 *, IN UINT32, IN UINT16, IN > UINT16 *); >=20 > VOID SetOverrideClassGuid (IN EFI_GUID *); >=20 > + VOID SetIsCatchDefaultEnable (BOOLEAN > IsCatchDefaultEnable); >=20 > >> >=20 > } >=20 >=20 >=20 > @@ -5086,6 +5111,17 @@ EfiVfrParser::_PCATCH ( > mParserStatus =3D mParserStatus + gCVfrErrorHandle.HandleError > (ReturnCode, LineNum, (CHAR8 *) ErrorMsg); >=20 > } >=20 >=20 >=20 > +VOID >=20 > +EfiVfrParser::DefaultValueError ( >=20 > + IN EFI_VFR_RETURN_CODE ReturnCode, >=20 > + IN UINT32 LineNum >=20 > + ) >=20 > +{ >=20 > + CHAR8 ErrorMsg[100]; >=20 > + sprintf(ErrorMsg, "please remove the default value / defaultstore in > line %d", LineNum); >=20 > + mParserStatus =3D mParserStatus + gCVfrErrorHandle.HandleError > (ReturnCode, LineNum, ErrorMsg); >=20 > +} >=20 > + >=20 > VOID >=20 > EfiVfrParser::syn ( >=20 > ANTLRAbstractToken *Tok, >=20 > @@ -5682,12 +5718,18 @@ EfiVfrParser::IdEqListDoSpecial ( > } >=20 > } >=20 >=20 >=20 > -VOID >=20 > +VOID >=20 > EfiVfrParser::SetOverrideClassGuid (IN EFI_GUID *OverrideClassGuid) >=20 > { >=20 > mOverrideClassGuid =3D OverrideClassGuid; >=20 > } >=20 >=20 >=20 > +VOID >=20 > +EfiVfrParser::SetIsCatchDefaultEnable (BOOLEAN IsCatchDefaultEnable) >=20 > +{ >=20 > + mIsCatchDefaultEnable =3D IsCatchDefaultEnable; >=20 > +} >=20 > + >=20 > VOID >=20 > EfiVfrParser::CheckDuplicateDefaultValue ( >=20 > IN EFI_DEFAULT_ID DefaultId, >=20 > -- > 2.26.2.windows.1 -=3D-=3D-=3D-=3D-=3D-=3D-=3D-=3D-=3D-=3D-=3D- Groups.io Links: You receive all messages sent to this group. View/Reply Online (#112787): https://edk2.groups.io/g/devel/message/112787 Mute This Topic: https://groups.io/mt/103292536/7686176 Group Owner: devel+owner@edk2.groups.io Unsubscribe: https://edk2.groups.io/g/devel/unsub [rebecca@openfw.io] -=3D-=3D-=3D-=3D-=3D-=3D-=3D-=3D-=3D-=3D-=3D-