public inbox for devel@edk2.groups.io
 help / color / mirror / Atom feed
From: "Zhang, Zifeng" <zifeng.zhang@intel.com>
To: gaoliming <gaoliming@byosoft.com.cn>,
	"devel@edk2.groups.io" <devel@edk2.groups.io>,
	"Yang, Yuting2" <yuting2.yang@intel.com>
Cc: "Chen, Christine" <yuwei.chen@intel.com>,
	"Chen, Arthur G" <arthur.g.chen@intel.com>
Subject: Re: [edk2-devel] [Patch V2] BaseTools: VfrCompiler Adds DefaultValueError Feature
Date: Thu, 25 Jan 2024 09:27:16 +0000	[thread overview]
Message-ID: <SN6PR11MB2815A831EF06465AD4DED5B8827A2@SN6PR11MB2815.namprd11.prod.outlook.com> (raw)
In-Reply-To: <02c801da488d$2bcee960$836cbc20$@byosoft.com.cn>

Hi Liming,

We adopt the solution to send option from module level.
We will add --catch_default option into INF for module which need to do VFR default flag check.
Thus, VFR Compiler only need to catch one option then do module check.
@Yuting, could you help to update the patch for review?

Best Regards,
Zifeng

-----Original Message-----
From: gaoliming <gaoliming@byosoft.com.cn> 
Sent: Tuesday, January 16, 2024 11:04 PM
To: devel@edk2.groups.io; Zhang, Zifeng <zifeng.zhang@intel.com>; Yang, Yuting2 <yuting2.yang@intel.com>
Cc: Chen, Christine <yuwei.chen@intel.com>
Subject: 回复: [edk2-devel] [Patch V2] BaseTools: VfrCompiler Adds DefaultValueError Feature


This option is for the module check. I suggest to set this option in INF instead of DSC. 
If so, DSC is not required to configure the additional options. And, this module will have the same build result when it is specified in the different platform DSC files.

I understand your requirement to enable this option for the modules in some specific package. 
I think you can easily find those modules those have VFR/HFR, then update their INFs with new check option. 

Thanks
Liming
> -----邮件原件-----
> 发件人: devel@edk2.groups.io <devel@edk2.groups.io> 代表 Zhang, Zifeng
> 发送时间: 2024年1月12日 13:20
> 收件人: Yang, Yuting2 <yuting2.yang@intel.com>; Gao, Liming 
> <gaoliming@byosoft.com.cn>
> 抄送: Chen, Christine <yuwei.chen@intel.com>; devel@edk2.groups.io
> 主题: Re: [edk2-devel] [Patch V2] BaseTools: VfrCompiler Adds 
> DefaultValueError Feature
> 
> Hi Liming,
> 
> Could you help to share the update for this patch solution?
> 
> Best Regards,
> Zifeng
> 
> -----Original Message-----
> From: Yang, Yuting2 <yuting2.yang@intel.com>
> Sent: Monday, December 25, 2023 3:10 PM
> To: Gao, Liming <gaoliming@byosoft.com.cn>
> Cc: Zhang, Zifeng <zifeng.zhang@intel.com>; Chen, Christine 
> <yuwei.chen@intel.com>; devel@edk2.groups.io
> Subject: RE: [Patch V2] BaseTools: VfrCompiler Adds DefaultValueError 
> Feature
> 
> Hi Liming,
> 
> Thank you for adding  the account for me.
> I have created a Bugzilla 
> https://bugzilla.tianocore.org/show_bug.cgi?id=4629
> for this feature ~
> 
> Best Regards,,
> Yuting
> 
> -----Original Message-----
> From: gaoliming <gaoliming@byosoft.com.cn>
> Sent: Monday, December 25, 2023 9:14 AM
> To: Yang, Yuting2 <yuting2.yang@intel.com>
> Subject: 回复: [Patch V2] BaseTools: VfrCompiler Adds DefaultValueError 
> Feature
> 
> Your account yuting2.yang@intel.com has been added. PW: tiano@123
> 
> > -----邮件原件-----
> > 发件人: Yang, Yuting2 <yuting2.yang@intel.com>
> > 发送时间: 2023年12月22日 13:41
> > 收件人: Gao, Liming <gaoliming@byosoft.com.cn>
> > 抄送: Rebecca Cran <rebecca@bsdio.com>; Feng, Bob C 
> > <bob.c.feng@intel.com>; Chen, Arthur G <arthur.g.chen@intel.com>; 
> > Chen, Christine <yuwei.chen@intel.com>; Zhang, Zifeng 
> > <zifeng.zhang@intel.com>; devel@edk2.groups.io
> > 主题: RE: [Patch V2] BaseTools: VfrCompiler Adds DefaultValueError 
> > Feature
> >
> > Hi Liming,
> >
> > Thank you for reviewing ~
> > Could you please help me create a Bugzilla account? Currently, I do 
> > not
> have
> > access to the Bugzilla.
> >
> > Best Regards,
> > Yuting
> >
> > -----Original Message-----
> > From: Zhang, Zifeng <zifeng.zhang@intel.com>
> > Sent: Thursday, December 21, 2023 2:44 PM
> > To: Gao, Liming <gaoliming@byosoft.com.cn>; Yang, Yuting2 
> > <yuting2.yang@intel.com>
> > Cc: Rebecca Cran <rebecca@bsdio.com>; Feng, Bob C 
> > <bob.c.feng@intel.com>; Chen, Arthur G <arthur.g.chen@intel.com>; 
> > devel@edk2.groups.io; Chen, Christine <yuwei.chen@intel.com>
> > Subject: 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.yang@intel.com>
> > Sent: Tuesday, December 12, 2023 5:12 PM
> > To: Zhang, Zifeng <zifeng.zhang@intel.com>; Chen, Arthur G 
> > <arthur.g.chen@intel.com>; devel@edk2.groups.io
> > Cc: Rebecca Cran <rebecca@bsdio.com>; Gao, Liming 
> > <gaoliming@byosoft.com.cn>; Feng, Bob C <bob.c.feng@intel.com>
> > Subject: RE: [Patch V2] BaseTools: VfrCompiler Adds 
> > DefaultValueError Feature
> >
> > +Cc Zhang, Zifeng, Chen, Arthur G
> >
> > -----Original Message-----
> > From: Chen, Christine <yuwei.chen@intel.com>
> > Sent: Tuesday, December 12, 2023 5:04 PM
> > To: Yang, Yuting2 <yuting2.yang@intel.com>; devel@edk2.groups.io
> > Cc: Rebecca Cran <rebecca@bsdio.com>; Gao, Liming 
> > <gaoliming@byosoft.com.cn>; Feng, Bob C <bob.c.feng@intel.com>
> > Subject: RE: [Patch V2] BaseTools: VfrCompiler Adds 
> > DefaultValueError Feature
> >
> > +Cc Yang, Yuting2
> >
> > > -----Original Message-----
> > > From: Yang, Yuting2 <yuting2.yang@intel.com>
> > > Sent: Tuesday, December 12, 2023 5:01 PM
> > > To: devel@edk2.groups.io
> > > Cc: Rebecca Cran <rebecca@bsdio.com>; Gao, Liming 
> > > <gaoliming@byosoft.com.cn>; Feng, Bob C <bob.c.feng@intel.com>; 
> > > Chen, Christine <yuwei.chen@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 <rebecca@bsdio.com>
> > > Cc: Liming Gao <gaoliming@byosoft.com.cn>
> > > Cc: Bob Feng <bob.c.feng@intel.com>
> > > Cc: Christine Chen <yuwei.chen@intel.com>
> > > Cc: Yuting Yang <yuting2.yang@intel.com>
> > >
> > > Signed-off-by: Yuting Yang <yuting2.yang@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 (#114396): https://edk2.groups.io/g/devel/message/114396
Mute This Topic: https://groups.io/mt/103952468/7686176
Group Owner: devel+owner@edk2.groups.io
Unsubscribe: https://edk2.groups.io/g/devel/unsub [rebecca@openfw.io]
-=-=-=-=-=-=-=-=-=-=-=-



  parent reply	other threads:[~2024-01-25 12:10 UTC|newest]

Thread overview: 12+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2023-12-12  9:01 [edk2-devel] [Patch V2] BaseTools: VfrCompiler Adds DefaultValueError Feature Yuting Yang
2023-12-12  9:04 ` Yuwei Chen
2023-12-12  9:12   ` Yuting Yang
2023-12-21  6:43     ` Zhang, Zifeng
2023-12-22  5:41       ` Yuting Yang
     [not found]         ` <023101da36cf$a50bb8f0$ef232ad0$@byosoft.com.cn>
2023-12-25  7:10           ` Yuting Yang
2024-01-12  5:20             ` Zhang, Zifeng
2024-01-16 15:03               ` 回复: " gaoliming via groups.io
2024-01-17  2:18                 ` Zhang, Zifeng
2024-01-25  9:27                 ` Zhang, Zifeng [this message]
2023-12-25  1:23       ` [edk2-devel] 回复: " gaoliming via groups.io
2023-12-25  7:14         ` [edk2-devel] " Zhang, Zifeng

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-list from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=SN6PR11MB2815A831EF06465AD4DED5B8827A2@SN6PR11MB2815.namprd11.prod.outlook.com \
    --to=devel@edk2.groups.io \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox