Hi Liming, Thanks for solution, but we have a concern for it. Add --catch_default option in INF from module level will bring much effort to maintain, since the number of modules in Intel package is big and we need to update for new modules in further code change. So we prefer to transfer build option from package level. Would you like to share your opinion?
Best Regards, Zifeng -----Original Message----- From: gaoliming <gaolim...@byosoft.com.cn> Sent: Monday, December 25, 2023 9:23 AM To: Zhang, Zifeng <zifeng.zh...@intel.com>; Yang, Yuting2 <yuting2.y...@intel.com> Cc: 'Rebecca Cran' <rebe...@bsdio.com>; Feng, Bob C <bob.c.f...@intel.com>; Chen, Arthur G <arthur.g.c...@intel.com>; devel@edk2.groups.io; Chen, Christine <yuwei.c...@intel.com> Subject: 回复: [Patch V2] BaseTools: VfrCompiler Adds DefaultValueError Feature Zifeng: VFR_FLAGS can be set in the module INF for this module only. So, you can set --catch_default option in the modules those you want to remove the default opcode for. With this usage, --except_list option is not required. For example, module INF can add below section to enable this option. [BuildOptions] *_*_*_VFR_FLAGS = --catch_default Thanks Liming > -----邮件原件----- > 发件人: Zhang, Zifeng <zifeng.zh...@intel.com> > 发送时间: 2023年12月21日 14:44 > 收件人: Gao, Liming <gaolim...@byosoft.com.cn>; Yang, Yuting2 > <yuting2.y...@intel.com> > 抄送: Rebecca Cran <rebe...@bsdio.com>; Feng, Bob C > <bob.c.f...@intel.com>; Chen, Arthur G <arthur.g.c...@intel.com>; > devel@edk2.groups.io; Chen, Christine <yuwei.c...@intel.com> > 主题: RE: [Patch V2] BaseTools: VfrCompiler Adds DefaultValueError > Feature > > Hi Liming, > > Thanks for reviewing. > For background of this change, we will remove default flags in VFR/HFR > in new platform. So we need help from VFR complier to make a default > flag check to avoid manually adding. > @Yang, Yuting2, could you help to create a BZ for this feature and > share in > mail thread? > Then let me make a clarification for your questions. > > #1: The purpose of --catch_default > We send --catch_default flag in build option to indicate which > platform should > check default flag in VFR/HFR. > Actually maybe some platforms used same EDK2 downstream branch, so we > only send --catch_default flag for the platforms which need this check. > > #2: The purpose of --except_list > VFR compiler will receive VFR/HFR configurations from all folders including > Intel and EDK2. But in our expectation VFR compiler only do this check > in Intel. > So We use --except_list to deliver package list in EDK2 to avoid this check. > > Best Regards, > Zifeng > > -----Original Message----- > From: Yang, Yuting2 <yuting2.y...@intel.com> > Sent: Tuesday, December 12, 2023 5:12 PM > To: Zhang, Zifeng <zifeng.zh...@intel.com>; Chen, Arthur G > <arthur.g.c...@intel.com>; devel@edk2.groups.io > Cc: Rebecca Cran <rebe...@bsdio.com>; Gao, Liming > <gaolim...@byosoft.com.cn>; Feng, Bob C <bob.c.f...@intel.com> > Subject: RE: [Patch V2] BaseTools: VfrCompiler Adds DefaultValueError > Feature > > +Cc Zhang, Zifeng, Chen, Arthur G > > -----Original Message----- > From: Chen, Christine <yuwei.c...@intel.com> > Sent: Tuesday, December 12, 2023 5:04 PM > To: Yang, Yuting2 <yuting2.y...@intel.com>; devel@edk2.groups.io > Cc: Rebecca Cran <rebe...@bsdio.com>; Gao, Liming > <gaolim...@byosoft.com.cn>; Feng, Bob C <bob.c.f...@intel.com> > Subject: RE: [Patch V2] BaseTools: VfrCompiler Adds DefaultValueError > Feature > > +Cc Yang, Yuting2 > > > -----Original Message----- > > From: Yang, Yuting2 <yuting2.y...@intel.com> > > Sent: Tuesday, December 12, 2023 5:01 PM > > To: devel@edk2.groups.io > > Cc: Rebecca Cran <rebe...@bsdio.com>; Gao, Liming > > <gaolim...@byosoft.com.cn>; Feng, Bob C <bob.c.f...@intel.com>; > > Chen, Christine <yuwei.c...@intel.com> > > Subject: [Patch V2] BaseTools: VfrCompiler Adds DefaultValueError > > Feature > > > > Add --catch_default option > > Raise a DefaultValueError when encountering VFR default definitions > > to help remove default variables. > > Add --except_list option > > Exclude packages that don't require enabling the catch_default function. > > > > Cc: Rebecca Cran <rebe...@bsdio.com> > > Cc: Liming Gao <gaolim...@byosoft.com.cn> > > Cc: Bob Feng <bob.c.f...@intel.com> > > Cc: Christine Chen <yuwei.c...@intel.com> > > Cc: Yuting Yang <yuting2.y...@intel.com> > > > > Signed-off-by: Yuting Yang <yuting2.y...@intel.com> > > --- > > 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(-) > > > > 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 = FALSE; > mOptions.AutoDefault > > = FALSE; mOptions.CheckDefault = FALSE;+ > > mOptions.IsCatchDefaultEnable = FALSE;+ > mOptions.ExceptionList > > = NULL;+ mOptions.ExceptionListSize = 0; memset > > (&mOptions.OverrideClassGuid, 0, sizeof (EFI_GUID)); if (Argc == 1) > {@@ - > > 95,6 +98,23 @@ CVfrCompiler::OptionInitialization ( > > Version (); SET_RUN_STATUS (STATUS_DEAD); > return;+ } else if > > (stricmp(Argv[Index], "--catch_default") == 0){+ > > mOptions.IsCatchDefaultEnable = TRUE;+ } else if (stricmp(Argv[Index], > "-- > > except_list") == 0){+ INT32 Start = ++Index;+ if ((Start >= Argc) > || > > (Argv[Start][0] == '-')) {+ DebugError (NULL, 0, 1001, "Missing > option", "- > > exception_list missing except list");+ goto Fail;+ }+ > while > > ((Argv[Index][0] != '-') && (Index < Argc - 1)) {+ Index++;+ }+ > INT32 > > End = Index--;+ mOptions.ExceptionListSize = End - Start;+ for > (INT32 i = > > Start; i < End; i++) {+ mOptions.ExceptionList = (CHAR8**) > > realloc(mOptions.ExceptionList, (i - Start + 1) * sizeof(CHAR8*));+ > > mOptions.ExceptionList[i-Start] = Argv[i];+ } } else if > (stricmp(Argv[Index], > > "-l") == 0) { mOptions.CreateRecordListFile = TRUE; > > gCIfrRecordInfoDB.TurnOn ();@@ -179,7 +199,11 @@ > > CVfrCompiler::OptionInitialization ( > > goto Fail; } strcpy (mOptions.VfrFileName, > Argv[Index]);-+ for (int i = > > 0; i < mOptions.ExceptionListSize; i++) {+ if > (strstr(mOptions.VfrFileName, > > mOptions.ExceptionList[i]) != NULL) {+ > mOptions.IsCatchDefaultEnable = > > FALSE;+ }+ } if (mOptions.OutputDirectory == NULL) > > { mOptions.OutputDirectory = (CHAR8 *) malloc (1); if > > (mOptions.OutputDirectory == NULL) {@@ -217,6 +241,11 @@ Fail: > > free (mOptions.VfrFileName); mOptions.VfrFileName > = > > NULL; }+ if (mOptions.ExceptionList != NULL) {+ > > free(mOptions.ExceptionList);+ mOptions.ExceptionList > = NULL;++ } > > if (mOptions.VfrBaseFileName != NULL) { free > (mOptions.VfrBaseFileName); > > mOptions.VfrBaseFileName = NULL;@@ -496,6 +525,11 > @@ > > CVfrCompiler::~CVfrCompiler ( > > mOptions.VfrBaseFileName = NULL; } + if > (mOptions.ExceptionList != > > NULL) {+ free (mOptions.ExceptionList);+ mOptions.ExceptionList = > > NULL;+ }+ if (mOptions.OutputDirectory != NULL) { free > > (mOptions.OutputDirectory); mOptions.OutputDirectory = NULL;@@ > -679,7 > > +713,7 @@ CVfrCompiler::Compile ( > > DebugError (NULL, 0, 0001, "Error opening the input file", "%s", > > InFileName); goto Fail; }-+ InputInfo.IsCatchDefaultEnable = > > mOptions.IsCatchDefaultEnable; if (mOptions.HasOverrideClassGuid) > > { InputInfo.OverrideClassGuid = &mOptions.OverrideClassGuid; } > else > > {@@ -937,5 +971,3 @@ main ( > > return GetUtilityStatus (); }--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; BOOLEAN AutoDefault; BOOLEAN > > CheckDefault;+ BOOLEAN IsCatchDefaultEnable;+ CHAR8** > ExceptionList;+ > > INT16 ExceptionListSize; } OPTIONS; typedef enum {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 > > [] = { > > { VFR_WARNING_DEFAULT_VALUE_REDEFINED, ": default value > re-defined > > with different value"}, { VFR_WARNING_ACTION_WITH_TEXT_TWO, ": > Action > > opcode should not have TextTwo part"}, { > > VFR_WARNING_OBSOLETED_FRAMEWORK_OPCODE, ": Not recommend to > use > > obsoleted framework opcode"},- { VFR_WARNING_CODEUNDEFINED, ": > > undefined Warning Code" }+ { VFR_WARNING_CODEUNDEFINED, ": > > undefined Warning Code" },+ { VFR_WARNING_UNSUPPORTED, ": pls > remove > > the default values if necessary" } }; > > CVfrErrorHandle::CVfrErrorHandle (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 = 0, > > VFR_WARNING_ACTION_WITH_TEXT_TWO, > > VFR_WARNING_OBSOLETED_FRAMEWORK_OPCODE,- > > VFR_WARNING_CODEUNDEFINED+ VFR_WARNING_CODEUNDEFINED,+ > > VFR_WARNING_UNSUPPORTED } EFI_VFR_WARNING_CODE; typedef > struct > > _SVFR_ERROR_HANDLE {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 { > > typedef struct { EFI_GUID *OverrideClassGuid;+ BOOLEAN > > IsCatchDefaultEnable; } INPUT_INFO_TO_SYNTAX; class CFormPkg {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 ( > > { ParserBlackBox<CVfrDLGLexer, EfiVfrParser, ANTLRToken> > VfrParser(File); > > VfrParser.parser()->SetOverrideClassGuid > > (InputInfo->OverrideClassGuid);+ > > VfrParser.parser()->SetIsCatchDefaultEnable(InputInfo- > > >IsCatchDefaultEnable); return > VfrParser.parser()->vfrProgram(); } >>@@ - > > 386,8 +387,8 @@ dataStructField32 [BOOLEAN FieldInUnion]: > > ; dataStructField16 [BOOLEAN FieldInUnion]:- << - UINT32 > ArrayNum = 0; > > + <<+ UINT32 ArrayNum = 0; >> ("UINT16" | "CHAR16") > > N:StringIdentifier@@ -737,7 +738,7 @@ vfrFormSetList : > > ; vfrStatementExtension:- << + << EFI_GUID Guid; > CIfrGuid *GuidObj > > = NULL; CHAR8 *TypeName = NULL;@@ -751,7 +752,7 @@ > > vfrStatementExtension: > > >> L:GuidOp Uuid "=" guidDefinition[Guid]- {"," DataType "=" + > {"," > > DataType "=" ( U64:"UINT64" {OpenBracket AN1:Number > CloseBracket > > <<ArrayNum = _STOU32(AN1->getText(), AN1->getLine());>>} << TypeName > = > > U64->getText(); LineNum = U64->getLine(); >>@@ -770,7 > > +771,7 @@ vfrStatementExtension: > > | T:"EFI_HII_TIME" {OpenBracket AN8:Number CloseBracket > > <<ArrayNum = _STOU32(AN8->getText(), AN8->getLine());>>} << TypeName > > = T->getText(); LineNum = T->getLine(); IsStruct = TRUE;>> > | > > R:"EFI_HII_REF" {OpenBracket AN9:Number CloseBracket <<ArrayNum = > > _STOU32(AN9->getText(), AN9->getLine());>>}- << TypeName = > > R->getText(); LineNum = R->getLine(); IsStruct = TRUE;>> > > + << > TypeName = > > + R->getText(); LineNum = R- > > >getLine(); IsStruct = TRUE;>> | TN:StringIdentifier {OpenBracket > > AN10:Number CloseBracket <<ArrayNum = _STOU32(AN10->getText(), > AN10- > > >getLine());>>} > << TypeName = TN->getText(); > > LineNum = TN->getLine(); IsStruct = TRUE;>> )@@ -875,19 +876,19 > @@ > > vfrExtensionData[UINT8 *DataBuff, UINT32 Size, CHAR8 *TypeName, > UINT32 > > TypeSize, > > memcpy (ByteOffset, &Data_U64, > TypeSize); }else if (strcmp > > ("UINT32", TypeName) == 0) { Data_U32 = > _STOU32(RD->getText(), > > RD->getLine());- memcpy (ByteOffset, &Data_U32, > TypeSize); > > + memcpy (ByteOffset, &Data_U32, > TypeSize); }else if (strcmp > > ("UINT16", TypeName) == 0) { Data_U16 = > _STOU16(RD->getText(), > > RD->getLine());- memcpy (ByteOffset, &Data_U16, > TypeSize); > > + memcpy (ByteOffset, &Data_U16, > TypeSize); }else if (strcmp > > ("UINT8", TypeName) == 0) { Data_U8 = > _STOU8(RD->getText(), RD- > > >getLine());- memcpy (ByteOffset, &Data_U8, TypeSize); > > + memcpy (ByteOffset, &Data_U8, > TypeSize); }else if (strcmp > > ("BOOLEAN", TypeName)== 0) { Data_BL = > _STOU8(RD->getText(), > > RD->getLine());- memcpy (ByteOffset, &Data_BL, > TypeSize); > > + memcpy (ByteOffset, &Data_BL, > TypeSize); }else if (strcmp > > ("EFI_STRING_ID", TypeName) == 0) { Data_SID = > _STOSID(RD- > > >getText(), RD->getLine());- memcpy (ByteOffset, > &Data_SID, > > TypeSize); > + memcpy (ByteOffset, > > &Data_SID, TypeSize); } } else > > { gCVfrVarDataTypeDB.GetDataFieldInfo(TFName, > FieldOffset, > > FieldType, FieldSize, BitField);@@ -975,7 +976,15 @@ > > vfrExtensionData[UINT8 *DataBuff, UINT32 Size, CHAR8 *TypeName, > UINT32 > > TypeSize, > > vfrStatementDefaultStore : << UINT16 DefaultId = > > EFI_HII_DEFAULT_CLASS_STANDARD; >>- D:DefaultStore > N:StringIdentifier > > ","+ D:DefaultStore N:StringIdentifier "," <<+ > > if (mIsCatchDefaultEnable) {+ > > gCVfrErrorHandle.HandleWarning (+ > > VFR_WARNING_UNSUPPORTED,+ > D- > > >getLine(),+ > D- > > >getText()+ > );+ > }+ > > >> > Prompt "=" "STRING_TOKEN" "\(" S:Number > > "\)" { "," Attribute "=" A:Number << > DefaultId = _STOU16(A- > > >getText(), A->getLine()); >>@@ -1074,7 +1083,7 @@ > > vfrStatementVarStoreEfi : > > | U64:"UINT64" "," << > TypeName = U64->getText(); > > LineNum = U64->getLine(); >> | D:"EFI_HII_DATE" "," > << > > TypeName = D->getText(); LineNum = D->getLine(); >> | > T:"EFI_HII_TIME" > > "," << TypeName = T->getText(); LineNum = > T->getLine(); >>- | > > R:"EFI_HII_REF" "," << TypeName = > R->getText(); LineNum = R- > > >getLine(); >> + | R:"EFI_HII_REF" "," > << TypeName = R- > > >getText(); LineNum = R->getLine(); >> ) { VarId "=" ID:Number > "," > > <<@@ -1092,8 +1101,8 @@ vfrStatementVarStoreEfi : > > ( Name "=" SN:StringIdentifier "," << > StoreName = SN- > > >getText(); >> |- Name "=" "STRING_TOKEN" "\(" > VN:Number "\)" "," - > > VarSize "=" N:Number "," << + Name > "=" "STRING_TOKEN" > > "\(" VN:Number "\)" ","+ VarSize "=" N:Number "," > << > > IsUEFI23EfiVarstore = FALSE; > StoreName = > > gCVfrStringDB.GetVarStoreNameFormStringId(_STOSID(VN->getText(), VN- > > >getLine())); > if (StoreName == NULL) {@@ - > > 1116,7 +1125,7 @@ vfrStatementVarStoreEfi : > > > break; > case 8: > > TypeName = (CHAR8 *) "UINT64";- > break; + > > break; > default: > > _PCATCH (VFR_RETURN_UNSUPPORTED, N); break;@@ -1124,7 +1133,7 @@ > > vfrStatementVarStoreEfi : > > >> ) - > Uuid "=" guidDefinition[Guid] > > << + Uuid "=" guidDefinition[Guid] << > > if (IsUEFI23EfiVarstore) > > > { _PCAT > CH(gCVfrDataStorage.DeclareBufferVarS > > tore > ( > StoreName,@@ -1150,7 > > +1159,7 @@ vfrStatementVarStoreEfi : > > } > > VSEObj.SetGuid (&Guid); > VSEObj.SetVarStoreId > > (VarStoreId);- > + > > VSEObj.SetSize ((UINT16) Size); > > VSEObj.SetName (StoreName); > if > > (IsUEFI23EfiVarstore == FALSE && StoreName != NULL) {@@ -1184,7 > > +1193,7 @@ vfrStatementVarStoreNameValue : > > >> } > (- Name "=" "STRING_TOKEN" "\(" > > N:Number "\)" "," << + Name "=" "STRING_TOKEN" "\(" N:Number > "\)" "," > > << if > (!Created) > > > { _PC > ATCH(gCVfrDataStorage.DeclareNameVar > > StoreBegin (SN->getText(), VarStoreId), SN); Created = TRUE;@@ > > -1245,12 +1254,12 @@ vfrStatementDisableIfFormSet : > > vfrStatementSuppressIfFormSet : << CIfrSuppressIf SIObj;>> > L:SuppressIf > > <<- > SIObj.SetLineNo(L->getLine()); + > > > SIObj.SetLineNo(L->getLine()); > >> { FLAGS "=" > > flagsField ( "\|" flagsField )* "," } vfrStatementExpression[0] ";" > > vfrFormSetList- E: EndIf + E: EndIf ";" > << > > CRT_END_OP (E); >> ; @@ -1491,7 +1500,7 @@ > vfrQuestionDataFieldName > > [EFI_QUESTION_ID &QId, UINT32 &Mask, CHAR8 *&VarIdStr, > > ( SN2:StringIdentifier << > _STRCAT (&VarIdStr, SN2- > > >getText()); LineNo = SN2->getLine(); >> (- "." > << + > > "." << > _STRCAT > > (&VarIdStr, "."); > if > > (mConstantOnlyInExpression) > > > { _PC > ATCH(VFR_RETURN_CONSTANT_ONLY, > > LineNo);@@ -1518,7 +1527,7 @@ vfrQuestionDataFieldName > > [EFI_QUESTION_ID &QId, UINT32 &Mask, CHAR8 *&VarIdStr, > > ; vfrConstantValueField[UINT8 Type, EFI_IFR_TYPE_VALUE &Value, > > BOOLEAN &ListType] :- << + << EFI_GUID Guid; > BOOLEAN Negative = > > FALSE; BOOLEAN IntDecStyle = FALSE;@@ -1634,11 +1643,11 > @@ > > vfrConstantValueField[UINT8 Type, EFI_IFR_TYPE_VALUE &Value, > BOOLEAN > > &ListType] > > | Z:Zero << > $Value.u8 = _STOU8(Z->getText(), Z- > > >getLine()); >> | HOUR:Number ":" MINUTE:Number ":" > SECOND:Number << > > $Value.time = _STOT(HOUR->getText(), MINUTE->getText(),SECOND- > > >getText(), HOUR->getLine()); >> | YEAR:Number "/" MONTH:Number > "/" > > DAY:Number << $Value.date = _STOD(YEAR->getText(), > MONTH->getText(), > > DAY->getText(), YEAR->getLine()); >>- | QI:Number";" FI:Number";" > > guidDefinition[Guid] ";" "STRING_TOKEN" "\(" DP:Number "\)" + | > > QI:Number";" FI:Number";" guidDefinition[Guid] ";" "STRING_TOKEN" "\(" > > DP:Number "\)" > << $Value.ref = _STOR(QI- > > >getText(), FI->getText(), &Guid, DP->getText(), QI->getLine()); >> | > > "STRING_TOKEN" "\(" S1:Number "\)" << $Value.string = > _STOSID(S1- > > >getText(), S1->getLine()); >> | "\{" > << ListType = > > TRUE; >>- L1:Number > << + L1:Number > > << > switch (Type) > > > { case > EFI_IFR_TYPE_NUM_SIZE_8 : > > Type8[Index] = _STOU8(L1->getText(), L1->getLine());@@ -1658,8 > > +1667,8 @@ vfrConstantValueField[UINT8 Type, EFI_IFR_TYPE_VALUE > > &Value, BOOLEAN &ListType] > > > Index++; >> > (- > > "," - L2:Number << + > ","+ L2:Number > > << > switch (Type) > > > { case > EFI_IFR_TYPE_NUM_SIZE_8 : > > Type8[Index] = _STOU8(L2->getText(), L2->getLine());@@ -1679,7 > > +1688,7 @@ vfrConstantValueField[UINT8 Type, EFI_IFR_TYPE_VALUE > > &Value, BOOLEAN &ListType] > > > > > Index++; >> > )*- "\}" + > > "\}" ; > > > //************************************************************ > ** > > ***************@@ -1714,7 +1723,7 @@ vfrFormDefinition : > > ; vfrFormMapDefinition :- << + << CIfrFormMap *FMapObj = > NULL; > > UINT32 FormMapMethodNumber = 0; EFI_GUID Guid;@@ > -1775,11 > > +1784,15 @@ vfrStatementDefault : > > CIfrNumeric *NumericQst = NULL; >>- > D:Default > > + D:Default <<+ > if > > (mIsCatchDefaultEnable) {+ > > DefaultValueError(VFR_RETURN_UNSUPPORTED, D- > > >getLine());+ > }+ >> > > ( (- "=" vfrConstantValueField[_GET_CURRQEST_DATATYPE(), > *Val, > > ArrayType] "," - > << + "=" > > vfrConstantValueField[_GET_CURRQEST_DATATYPE(), *Val, ArrayType] ","+ > > << if > (gCurrentMinMaxData != NULL && > > gCurrentMinMaxData->IsNumericOpcode()) > > > { //c > heck default value is valid for Numeric > > Opcode > NumericQst = (CIfrNumeric *) > > gCurrentQuestion;@@ -1888,14 +1901,14 @@ vfrStatementDefault : > > vfrStatementValue "," << CIfrEnd > EndObj1; > > EndObj1.SetLineNo(D->getLine()); >> ) {- DefaultStore "=" > > SN:StringIdentifier "," << + DefaultStore "=" SN:StringIdentifier > "," << > > _PCATCH(gCVfrDefaultStore.GetDefaultId (SN->getText(), &DefaultId), > > SN); if (DObj != NULL) {- > DObj->SetDefaultId > > (DefaultId); > - } + > > DObj->SetDefaultId > (DefaultId);+ > } > > if (DObj2 != NULL) {- > DObj2->SetDefaultId > > (DefaultId); + > DObj2->SetDefaultId > > > (DefaultId); > } >> > > }@@ -1917,8 +1930,8 @@ vfrStatementDefault : > > > ); > } > > }- > if (DObj != NULL) > > {delete DObj;} - > if (DObj2 != NULL) {delete > > DObj2;} + > if (DObj != NULL) {delete DObj;}+ > > if (DObj2 != NULL) {delete > DObj2;} >> > ) ;@@ - > > 1970,11 +1983,15 @@ vfrStatementInvalid : > > ; flagsField :- Number - | InteractiveFlag - | > > ManufacturingFlag - | DefaultFlag - | ResetRequiredFlag + Number+ > > | InteractiveFlag+ | > > ManufacturingFlag+ | D:DefaultFlag > <<+ > > if (mIsCatchDefaultEnable) {+ > > DefaultValueError(VFR_RETURN_UNSUPPORTED, D- > > >getLine());+ > }+ > > >>+ | ResetRequiredFlag | ReconnectRequiredFlag | > N:NVAccessFlag > > << > gCVfrErrorHandle.HandleWarning (@@ - > > 1989,7 +2006,7 @@ flagsField : > > > > L->getLine(), > > > L->getText() > );- > > >> > + >> ; > > vfrStatementValue :@@ -2001,13 +2018,13 @@ vfrStatementValue : > > vfrStatementRead : << CIfrRead RObj; >> R:Read > > << RObj.SetLineNo(R->getLine()); >>- vfrStatementExpression[0] ";" + > > vfrStatementExpression[0] ";" ; vfrStatementWrite : << CIfrWrite > WObj; >> > > W:Write << > WObj.SetLineNo(W->getLine()); >>- > > vfrStatementExpression[0] ";" + vfrStatementExpression[0] ";" ; > > vfrStatementSubTitle :@@ -2140,7 +2157,7 @@ vfrStatementGoto : > > FormId "=" F3:Number "," << > RefType = 2; FId = _STOFID(F3- > > >getText(), F3->getLine()); >> Question "=" (- > QN3:StringIdentifier > > "," << + QN3:StringIdentifier "," > << > > mCVfrQuestionDB.GetQuestionId (QN3->getText (), NULL, QId, BitMask); > > if (QId == EFI_QUESTION_ID_INVALID) > > > { > _PCATCH(VFR_RETURN_UNDEFINED, > > QN3);@@ -2222,7 +2239,7 @@ vfrStatementGoto : > > "," Key "=" KN:Number << > AssignQuestionKey (*QHObj, > > KN); >> } {- E:"," + E:"," > vfrStatementQuestionOptionList << > > OHObj->SetScope(1); CRT_END_OP (E);>> } ";" > > << if (R1Obj != NULL) {delete R1Obj;} if (R2Obj != NULL) {delete > > R2Obj;} if (R3Obj != NULL) {delete R3Obj;} if (R4Obj != NULL) > > {delete R4Obj;} if (R5Obj != > > NULL) {delete R5Obj;}>>@@ -2511,20 +2528,20 @@ > > minMaxDateStepDefault[EFI_HII_DATE & D, UINT8 KeyValue] : > > { "default" "=" N:Number "," << > > switch (KeyValue) {- > case 0: + > > case 0: > D.Year = _STOU16(N->getText(), N- > > >getLine()); > if (D.Year < _STOU16 (MinN- > > >getText(), MinN->getLine()) || D.Year > _STOU16 (MaxN->getText(), > > >MaxN- > > >getLine())) > { > _PCATCH > > (VFR_RETURN_INVALID_PARAMETER, N->getLine(), "Year default value > must > > be between Min year and Max > year."); > } > > break;- > case 1: - > > D.Month = _STOU8(N->getText(), N->getLine()); + case 1:+ > D.Month = _STOU8(N->getText(), N- > > >getLine()); > if (D.Month < 1 || D.Month > 12) > > > { > _PCATCH > > (VFR_RETURN_INVALID_PARAMETER, N->getLine(), "Month default value > > must be between 1 and > 12."); > } > > break;- > case 2: - > > D.Day = _STOU8(N->getText(), N->getLine()); + case 2:+ > D.Day = _STOU8(N->getText(), N- > > >getLine()); > if (D.Day < 1 || D.Day > 31) > > > { > _PCATCH > > (VFR_RETURN_INVALID_PARAMETER, N->getLine(), "Day default value > must > > be between 1 and > 31."); > }@@ -2570,7 > > +2587,7 @@ vfrSetMinMaxStep[CIfrMinMaxStepData & MMSDObj] : > > BOOLEAN MinNegative = FALSE; BOOLEAN MaxNegative = > FALSE; >>- > > Minimum "=" + Minimum "=" { "\-" > << > > MinNegative = TRUE; >> }@@ -2659,8 +2676,8 @@ > > vfrSetMinMaxStep[CIfrMinMaxStepData & MMSDObj] : > > > } } > > >>- Maximum "=" - > { + Maximum "="+ { "\-" > > << MaxNegative = TRUE; >> } A:Number "," > <<@@ - > > 2889,7 +2906,7 @@ vfrStatementNumeric : > > } > >> > > vfrStatementQuestionOptionList- E:EndNumeric > << + > > E:EndNumeric << > > CRT_END_OP (E); > if (GuidObj != NULL) > > > { > GuidObj->SetScope(1);@@ -3131,7 > > +3148,7 @@ vfrStatementString : > > { Key "=" KN:Number "," << > AssignQuestionKey (SObj, > > KN); >> }- MinSize "=" MIN:Number "," > << + MinSize "=" > > MIN:Number "," << > > VarArraySize = _GET_CURRQEST_ARRAY_SIZE(); StringMinSize = > > _STOU8(MIN->getText(), MIN->getLine()); if (_STOU64(MIN->getText(), > > MIN->getLine()) > StringMinSize) {@@ -3141,7 > > +3158,7 @@ vfrStatementString : > > } > > SObj.SetMinSize > (StringMinSize); > >>- MaxSize > > "=" MAX:Number "," << + MaxSize "=" > MAX:Number "," > > << > StringMaxSize = _STOU8(MAX->getText(), > > MAX->getLine()); > if (_STOU64(MAX- > > >getText(), MAX->getLine()) > StringMaxSize) > > > { > _PCATCH > > (VFR_RETURN_INVALID_PARAMETER, MAX->getLine(), "String MaxSize > takes > > only one byte, which can't be larger than 0xFF.");@@ -3185,7 +3202,7 > > @@ vfrStatementPassword : > > { Key "=" KN:Number "," << > AssignQuestionKey (PObj, > > KN); >> }- MinSize "=" MIN:Number "," > << + MinSize "=" > > MIN:Number "," << > > VarArraySize = _GET_CURRQEST_ARRAY_SIZE(); PasswordMinSize = > > _STOU16(MIN->getText(), MIN->getLine()); if (_STOU64(MIN->getText(), > > MIN->getLine()) > PasswordMinSize) {@@ - > > 3195,7 +3212,7 @@ vfrStatementPassword : > > } > > PObj.SetMinSize > (PasswordMinSize); > >>- > > MaxSize "=" MAX:Number "," << + > MaxSize "=" MAX:Number > > "," << > PasswordMaxSize = > > _STOU16(MAX->getText(), MAX->getLine()); > if > > (_STOU64(MAX->getText(), MAX->getLine()) > PasswordMaxSize) > > > { > _PCATCH > > (VFR_RETURN_INVALID_PARAMETER, MAX->getLine(), "Password MaxSize > takes > > only two byte, which can't be larger than 0xFFFF.");@@ -3230,12 > > +3247,12 @@ vfrStatementOrderedList : > > >> L:OrderedList > << OLObj.SetLineNo(L->getLine()); > > gIsOrderedList = TRUE;>> vfrQuestionHeader[OLObj] ","- > > << + << > > VarArraySize = _GET_CURRQEST_ARRAY_SIZE(); OLObj.SetMaxContainers > > ((UINT8) (VarArraySize > 0xFF ? 0xFF : > > > VarArraySize)); > >> {- MaxContainers "=" > > M:Number "," << + MaxContainers "=" > M:Number "," > > << > if (_STOU64(M->getText(), M->getLine()) > > > _STOU8(M->getText(), M->getLine())) > > > { > _PCATCH > > (VFR_RETURN_INVALID_PARAMETER, M->getLine(), "OrderedList > > MaxContainers takes only one byte, which can't be larger than > > > 0xFF."); > } else if (VarArraySize != 0 && > > _STOU8(M->getText(), M->getLine()) > VarArraySize) {@@ -3328,19 > > +3345,19 @@ minMaxTimeStepDefault[EFI_HII_TIME & T, UINT8 > KeyValue] : > > { "default" "=" N:Number "," << > > switch (KeyValue) {- > case 0: - > > T.Hour = _STOU8(N->getText(), N->getLine()); + > > case 0:+ > T.Hour = _STOU8(N->getText(), N- > > >getLine()); > if (T.Hour > 23) > > > { > _PCATCH > > (VFR_RETURN_INVALID_PARAMETER, N->getLine(), "Hour default value > must > > be between 0 and > 23."); > } > > break;- > case 1: - > > T.Minute = _STOU8(N->getText(), N->getLine()); + case 1:+ > T.Minute = _STOU8(N->getText(), N- > > >getLine()); > if (T.Minute > 59) > > > { > _PCATCH > > (VFR_RETURN_INVALID_PARAMETER, N->getLine(), "Minute default value > > must be between 0 and > 59."); > } > > break;- > case 2: + > > case 2: > T.Second = _STOU8(N->getText(), N- > > >getLine()); > if (T.Second > 59) > > > { > _PCATCH > > (VFR_RETURN_INVALID_PARAMETER, N->getLine(), "Second default value > > must be between 0 and 59.");@@ -3419,11 +3436,11 @@ > > vfrStatementStatListOld : > > ; vfrStatementDisableIfStat :- << - CIfrDisableIf DIObj; + <<+ > > CIfrDisableIf DIObj; >> L:DisableIf > << > > DIObj.SetLineNo(L->getLine()); >>- vfrStatementExpression[0] ";" + > > vfrStatementExpression[0] ";" ( vfrStatementStatList )* E:EndIf > > << CRT_END_OP (E); >> ";"@@ -3548,8 +3565,8 @@ > > vfrStatementWarningIf : > > ; vfrStatementDisableIfQuest :- << - CIfrDisableIf DIObj; + > <<+ > > CIfrDisableIf DIObj; >> L:DisableIf > << > > DIObj.SetLineNo(L->getLine()); >> vfrStatementExpression[0] ";"@@ - > > 3616,15 +3633,15 @@ vfrStatementOneOfOption : > > UINT32 *Type32 = (UINT32 *) ValueList; > UINT64 > > *Type64 = (UINT64 *) ValueList; >>- L:Option > << > > + L:Option << > if > > (_GET_CURRQEST_DATATYPE() == EFI_IFR_TYPE_OTHER) > > > { > _PCATCH (VFR_RETURN_FATAL_ERROR, L- > > >getLine(), "Get data type > > > error."); > } > > >- > > Text "=" "STRING_TOKEN" "\(" S:Number "\)" "," + Text "=" > > "STRING_TOKEN" "\(" S:Number "\)" "," Value "=" > > vfrConstantValueField[_GET_CURRQEST_DATATYPE(), *Val, ArrayType] ","- > > << + << > if > > (gCurrentMinMaxData != NULL) > { > //set > > min/max value for oneof opcode > UINT64 > > Step = gCurrentMinMaxData->GetStepData(_GET_CURRQEST_DATATYPE(), > > _GET_CURRQEST_VARTINFO().mIsBitVar);@@ -3696,7 +3713,7 @@ > > vfrStatementOneOfOption : > > > Size += OFFSET_OF > > (EFI_IFR_ONE_OF_OPTION, Value); > OOOObj = > > new CIfrOneOfOption((UINT8)Size); > OOOObj- > > >SetLineNo(L->getLine());- > OOOObj- > > >SetOption (_STOSID(S->getText(), S->getLine())); + > > OOOObj->SetOption (_STOSID(S->getText(), S->getLine())); > > if (ArrayType) > { > OOOObj->SetType > > > (EFI_IFR_TYPE_BUFFER); > } else {@@ -3706,7 > > +3723,7 @@ vfrStatementOneOfOption : > > > OOOObj->SetType > > > (_GET_CURRQEST_DATATYPE()); > } > > }- > OOOObj->SetValue > > (*Val); + > OOOObj->SetValue > > > (*Val); >> > F:FLAGS "=" > > vfrOneOfOptionFlags[*OOOObj, F->getLine()] <<@@ -3790,7 +3807,12 @@ > > oneofoptionFlagsField [UINT8 & HFlags, UINT8 & LFlags] : > > | RestStyleFlag << > $HFlags |= 0x20; >> | > > ReconnectRequiredFlag << $HFlags |= > 0x40; >> | > > ManufacturingFlag << $LFlags |= > 0x20; >>- | DefaultFlag > > << $LFlags |= 0x10; >>+ | D:DefaultFlag > <<+ > > $LFlags |= 0x10;+ > if (mIsCatchDefaultEnable) > > {+ > > DefaultValueError(VFR_RETURN_UNSUPPORTED, D- > > >getLine());+ > }+ > > >> | A:NVAccessFlag << > > gCVfrErrorHandle.HandleWarning > > > ( > VFR_WARNING_OBSOLETED_FRAMEWORK > > _OPCODE,@@ -3963,7 +3985,7 @@ vfrStatementExpression [UINT32 > > RootLevel, UINT32 ExpOpCount = 0] : > > > } > } > > }- > + > > if ($RootLevel == 0) > { > _CLEAR_SAVED_OPHDR > > (); > mCIfrOpHdrIndex --;@@ -4405,10 > > +4427,10 @@ ideqvallistExp[UINT32 & RootLevel, UINT32 & ExpOpCount] : > > > for (Index = 0; Index < ListLen; Index++) > > > { > EILObj.SetValueList (Index, > > > ValueList[Index]); > }- > > + > > + EILObj.UpdateIfrBuffer();- > > _SAVE_OPHDR_COND (EILObj, ($ExpOpCount == 0), L->getLine()); > > - > + > > _SAVE_OPHDR_COND (EILObj, ($ExpOpCount == 0), L->getLine());+ if > > (QId == EFI_QUESTION_ID_INVALID) > > > { > EILObj.SetQuestionId (QId, VarIdStr, > > > LineNo); > }@@ -4458,9 +4480,9 @@ > > stringref1Exp[UINT32 & RootLevel, UINT32 & ExpOpCount] : > > >> L:StringRef "\("- ( + > ( "STRING_TOKEN"- "\(" + "\(" > > S:Number << RefStringId = _STOSID(S->getText(), S->getLine()); >> > "\)" > > | I:Number << RefStringId = _STOSID(I->getText(), I->getLine()); > > | >>@@ > > | - > > 4499,10 +4521,10 @@ getExp[UINT32 & RootLevel, UINT32 & > ExpOpCount] : > > Info.mVarStoreId = 0; >> L:Get- "\(" + "\(" > vfrStorageVarId[Info, > > VarIdStr, FALSE] {"\|" FLAGS "=" numericVarStoreType [VarType] }- > "\)" > > << + "\)" << > > > { i > f (Info.mVarStoreId == 0) > > > { > // support Date/Time question@@ - > > 4549,9 +4571,9 @@ getExp[UINT32 & RootLevel, UINT32 & ExpOpCount] : > > > > _PCATCH(VFR_RETURN_UNSUPPORTED, L- > > >getLine(), "Get/Set opcode don't support data > > > array"); > } > } > > - > CIfrGet GObj(L->getLine()); - > > _SAVE_OPHDR_COND (GObj, ($ExpOpCount == 0), L->getLine()); - > > GObj.SetVarInfo (&Info); + > CIfrGet GObj(L- > > >getLine());+ > _SAVE_OPHDR_COND (GObj, > > ($ExpOpCount == 0), L->getLine());+ > > GObj.SetVarInfo (&Info); > delete[] VarIdStr; > > > $ExpOpCount++; > }@@ -4608,7 +4630,7 @@ > > question23refExp[UINT32 & RootLevel, UINT32 & ExpOpCount] : > > { Uuid "=" guidDefinition[Guid] "," > << Type = 0x3; >> }- > > vfrStatementExpressionSub[$RootLevel + 1, $ExpOpCount] + > > vfrStatementExpressionSub[$RootLevel + 1, $ExpOpCount] "\)" > > << > switch (Type) {@@ -4675,9 +4697,9 @@ > > setExp[UINT32 & RootLevel, UINT32 & ExpOpCount] : > > "\(" vfrStorageVarId[Info, VarIdStr, FALSE] {"\|" FLAG "=" > > numericVarStoreType [VarType] }- "," > > vfrStatementExpressionSub[$RootLevel + 1, $ExpOpCount] + "," > > vfrStatementExpressionSub[$RootLevel + 1, $ExpOpCount] "\)"- > > << + << > > > { i > f (Info.mVarStoreId == 0) > > > { > // support Date/Time question@@ - > > 4724,8 +4746,8 @@ setExp[UINT32 & RootLevel, UINT32 & ExpOpCount] : > > > > _PCATCH(VFR_RETURN_UNSUPPORTED, L- > > >getLine(), "Get/Set opcode don't support data > > > array"); > } > } > > - > CIfrSet TSObj(L->getLine()); - > > TSObj.SetVarInfo (&Info); + > CIfrSet TSObj(L- > > >getLine());+ > TSObj.SetVarInfo (&Info); > > delete[] VarIdStr; > > > $ExpOpCount++; > }@@ -4808,9 +4830,9 @@ > > spanExp[UINT32 & RootLevel, UINT32 & ExpOpCount] : > > ; vfrExpressionMap [UINT32 & RootLevel, UINT32 & ExpOpCount]:- > > L:Map > > - "\(" - vfrStatementExpressionSub[$RootLevel + 1, $ExpOpCount] + > L:Map+ > > "\("+ vfrStatementExpressionSub[$RootLevel + 1, $ExpOpCount] ":" > > << { CIfrMap MObj(L->getLine()); } >> > ( vfrStatementExpression[0]@@ - > > 4837,6 +4859,7 @@ spanFlags [UINT8 & Flags] : > > class EfiVfrParser { << private:+ BOOLEAN > mIsCatchDefaultEnable; > > UINT8 mParserStatus; BOOLEAN > mConstantOnlyInExpression; > > @@ -4880,6 +4903,7 @@ public: > > VOID _PCATCH (IN EFI_VFR_RETURN_CODE, IN > ANTLRTokenPtr); > > VOID _PCATCH (IN EFI_VFR_RETURN_CODE, IN UINT32); > VOID > > _PCATCH (IN EFI_VFR_RETURN_CODE, IN UINT32, IN CONST CHAR8 *);+ > VOID > > DefaultValueError (IN EFI_VFR_RETURN_CODE, IN UINT32); VOID > > syn (ANTLRAbstractToken *, ANTLRChar *, SetWordType *, > > ANTLRTokenType, INT32); @@ -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); VOID > IdEqListDoSpecial (IN > > UINT32 &, IN UINT32, IN EFI_QUESTION_ID, IN CHAR8 *, IN UINT32, IN > > UINT16, IN UINT16 *); VOID SetOverrideClassGuid > (IN EFI_GUID *);+ > > VOID SetIsCatchDefaultEnable (BOOLEAN > IsCatchDefaultEnable); >> } > > @@ -5086,6 +5111,17 @@ EfiVfrParser::_PCATCH ( > > mParserStatus = mParserStatus + gCVfrErrorHandle.HandleError > > (ReturnCode, LineNum, (CHAR8 *) ErrorMsg); } > > +VOID+EfiVfrParser::DefaultValueError (+ IN EFI_VFR_RETURN_CODE > > ReturnCode,+ IN UINT32 LineNum+ )+{+ CHAR8 > ErrorMsg[100];+ > > sprintf(ErrorMsg, "please remove the default value / defaultstore in > > line %d", LineNum);+ mParserStatus = mParserStatus + > > gCVfrErrorHandle.HandleError (ReturnCode, LineNum, ErrorMsg);+}+ > > VOID > EfiVfrParser::syn > > ( ANTLRAbstractToken *Tok,@@ -5682,12 +5718,18 @@ > > EfiVfrParser::IdEqListDoSpecial ( > > } } -VOID +VOID EfiVfrParser::SetOverrideClassGuid (IN EFI_GUID > > *OverrideClassGuid) { mOverrideClassGuid = OverrideClassGuid; } > > +VOID+EfiVfrParser::SetIsCatchDefaultEnable (BOOLEAN > > IsCatchDefaultEnable)+{+ mIsCatchDefaultEnable = > IsCatchDefaultEnable;+}+ > > VOID EfiVfrParser::CheckDuplicateDefaultValue ( IN EFI_DEFAULT_ID > > DefaultId,-- > > 2.26.2.windows.1 -=-=-=-=-=-=-=-=-=-=-=- Groups.io Links: You receive all messages sent to this group. View/Reply Online (#112922): https://edk2.groups.io/g/devel/message/112922 Mute This Topic: https://groups.io/mt/103369619/21656 Group Owner: devel+ow...@edk2.groups.io Unsubscribe: https://edk2.groups.io/g/devel/unsub [arch...@mail-archive.com] -=-=-=-=-=-=-=-=-=-=-=-