]> git.proxmox.com Git - mirror_edk2.git/blobdiff - EdkCompatibilityPkg/Sample/Tools/Source/UefiVfrCompile/VfrSyntax.g
EdkCompatibilityPkg: Remove EdkCompatibilityPkg
[mirror_edk2.git] / EdkCompatibilityPkg / Sample / Tools / Source / UefiVfrCompile / VfrSyntax.g
diff --git a/EdkCompatibilityPkg/Sample/Tools/Source/UefiVfrCompile/VfrSyntax.g b/EdkCompatibilityPkg/Sample/Tools/Source/UefiVfrCompile/VfrSyntax.g
deleted file mode 100644 (file)
index f5b7d5d..0000000
+++ /dev/null
@@ -1,3467 +0,0 @@
-/*++\r
-Copyright (c) 2004 - 2010, Intel Corporation. All rights reserved.<BR>\r
-This program and the accompanying materials\r
-are licensed and made available under the terms and conditions of the BSD License\r
-which accompanies this distribution.  The full text of the license may be found at\r
-http://opensource.org/licenses/bsd-license.php\r
-\r
-THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS,\r
-WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED.\r
-\r
-Module Name:\r
-  VfrSyntax.g\r
-\r
-Abstract:\r
-\r
---*/\r
-\r
-#header<<\r
-\r
-#include "EfiVfr.h"\r
-#include "VfrFormPkg.h"\r
-#include "VfrError.h"\r
-#include "VfrUtilityLib.h"\r
-#include "AToken.h"\r
-#include "ATokPtr.h"\r
->>\r
-\r
-<<\r
-#include "stdio.h"\r
-#include "PBlackBox.h"\r
-#include "DLexerBase.h"\r
-#include "VfrLexer.h"\r
-#include "AToken.h"\r
-\r
-#define GET_LINENO(Obj)       ((Obj)->getLine())\r
-#define SET_LINE_INFO(Obj, L) {(Obj).SetLineNo((L)->getLine());} while (0)\r
-#define CRT_END_OP(Obj)       {CIfrEnd EObj; EObj.SetLineNo ((Obj)->getLine());} while (0)\r
-\r
-typedef ANTLRCommonToken ANTLRToken;\r
-\r
-class CVfrDLGLexer : public VfrLexer\r
-{\r
-public:\r
-  CVfrDLGLexer (DLGFileInput *F) : VfrLexer (F) {};\r
-  INT32 errstd (char *Text)\r
-  {\r
-    printf ("unrecognized input '%s'\n", Text);\r
-  }\r
-};\r
-\r
-UINT8\r
-VfrParserStart (\r
-  IN FILE *File\r
-  )\r
-{\r
-  ParserBlackBox<CVfrDLGLexer, EfiVfrParser, ANTLRToken> VfrParser(File);\r
-  return VfrParser.parser()->vfrProgram();\r
-}\r
->>\r
-\r
-#lexaction\r
-<<\r
-#include <Error.h>\r
-\r
->>\r
-\r
-//\r
-// Define a lexical class for parsing quoted strings. Basically\r
-// starts with a double quote, and ends with a double quote that\r
-// is not preceeded with a backslash.\r
-//\r
-#lexclass QUOTED_STRING\r
-#token TheString            "~[\"]*\"" << mode (START); >>\r
-\r
-//\r
-// Define a lexclass for skipping over C++ style comments\r
-//\r
-#lexclass CPP_COMMENT\r
-#token "~[\n]*"       << skip (); >>\r
-#token "\n"           << skip (); mode (START); newline (); >>\r
-\r
-//\r
-// Standard lexclass is START\r
-//\r
-#lexclass START\r
-\r
-//\r
-// Find start of C++ style comments\r
-//\r
-#token "//"       << skip (); mode (CPP_COMMENT); >>\r
-\r
-//\r
-// Skip whitespace\r
-//\r
-#token "[\ \t]"   << skip (); >>\r
-\r
-//\r
-// Skip over newlines, but count them\r
-//\r
-#token "\n"       << skip (); newline (); >>\r
-\r
-//\r
-// Skip over 'extern' in any included .H file\r
-//\r
-#token "extern"   << skip (); mode (CPP_COMMENT); >>\r
-\r
-//\r
-// Tokens for the different keywords. Syntax is:\r
-// TokenName("ErrorMessageText")    "TokenString"\r
-//   where:\r
-//     TokenName is the token name (must be capitalized) that is used in the rules\r
-//     ErrorMessageText is the string the compiler emits when it detects a syntax error\r
-//     TokenString is the actual matching string used in the user script\r
-//\r
-#token FormPkgType("formpkgtype")               "formpkgtype"\r
-#token OpenBrace("{")                           "\{"\r
-#token CloseBrace("}")                          "\}"\r
-#token OpenParen("(")                           "\("\r
-#token CloseParen(")")                          "\)"\r
-#token OpenBracket("[")                         "\["\r
-#token CloseBracket("]")                        "\]"\r
-\r
-#token LineDefinition                           "#line\ [0-9]+\ \"~[\"]+\"[\ \t]*\n" << gCVfrErrorHandle.ParseFileScopeRecord (begexpr (), line ()); skip (); newline (); >>\r
-#token DevicePath("devicepath")                 "devicepath"\r
-#token FormSet("formset")                       "formset"\r
-#token FormSetId("formsetid")                   "formsetid"\r
-#token EndFormSet("endformset")                 "endformset"\r
-#token Title("title")                           "title"\r
-#token FormId("formid")                         "formid"\r
-#token OneOf("oneof")                           "oneof"\r
-#token EndOneOf("endoneof")                     "endoneof"\r
-#token Prompt("prompt")                         "prompt"\r
-#token OrderedList("orderedlist")               "orderedlist"\r
-#token MaxContainers("maxcontainers")           "maxcontainers"\r
-#token EndList("endlist")                       "endlist"\r
-#token EndForm("endform")                       "endform"\r
-#token Form("form")                             "form"\r
-#token Subtitle("subtitle")                     "subtitle"\r
-#token Help("help")                             "help"\r
-#token Text("text")                             "text"\r
-#token Option("option")                         "option"\r
-#token FLAGS("flags")                           "flags"\r
-#token Date("date")                             "date"\r
-#token EndDate("enddate")                       "enddate"\r
-#token Year("year")                             "year"\r
-#token Month("month")                           "month"\r
-#token Day("day")                               "day"\r
-#token Time("time")                             "time"\r
-#token EndTime("endtime")                       "endtime"\r
-#token Hour("hour")                             "hour"\r
-#token Minute("minute")                         "minute"\r
-#token Second("second")                         "second"\r
-#token GrayOutIf("grayoutif")                   "grayoutif"\r
-#token Label("label")                           "label"\r
-#token Timeout("timeout")                       "timeout"\r
-#token Inventory("inventory")                   "inventory"\r
-#token NonNvDataMap("_NON_NV_DATA_MAP")         "_NON_NV_DATA_MAP"\r
-#token Struct("struct")                         "struct"\r
-#token Boolean("BOOLEAN")                       "BOOLEAN"\r
-#token Uint64("UINT64")                         "UINT64"\r
-#token Uint32("UINT32")                         "UINT32"\r
-#token Uint16("UINT16")                         "UINT16"\r
-#token Char16("CHAR16")                         "CHAR16"\r
-#token Uint8("UINT8")                           "UINT8"\r
-#token Uuid("guid")                             "guid"\r
-#token CheckBox("checkbox")                     "checkbox"\r
-#token EndCheckBox("endcheckbox")               "endcheckbox"\r
-#token Numeric("numeric")                       "numeric"\r
-#token EndNumeric("endnumeric")                 "endnumeric"\r
-#token Minimum("minimum")                       "minimum"\r
-#token Maximum("maximum")                       "maximum"\r
-#token STEP("step")                             "step"\r
-#token Default("default")                       "default"\r
-#token Password("password")                     "password"\r
-#token EndPassword("endpassword")               "endpassword"\r
-#token String("string")                         "string"\r
-#token EndString("endstring")                   "endstring"\r
-#token MinSize("minsize")                       "minsize"\r
-#token MaxSize("maxsize")                       "maxsize"\r
-#token Encoding("encoding")                     "encoding"\r
-#token SuppressIf("suppressif")                 "suppressif"\r
-#token DisableIf("disableif")                   "disableif"\r
-#token Hidden("hidden")                         "hidden"\r
-#token Goto("goto")                             "goto"\r
-#token FormSetGuid("formsetguid")               "formsetguid"\r
-#token InconsistentIf("inconsistentif")         "inconsistentif"\r
-#token NoSubmitIf("nosubmitif")                 "nosubmitif"\r
-#token EndIf("endif")                           "endif"\r
-#token Key("key")                               "key"\r
-#token DefaultFlag("DEFAULT")                   "DEFAULT"\r
-#token ManufacturingFlag("MANUFACTURING")       "MANUFACTURING"\r
-#token InteractiveFlag("INTERACTIVE")           "INTERACTIVE"\r
-#token NVAccessFlag("NV_ACCESS")                "NV_ACCESS"\r
-#token ResetRequiredFlag("RESET_REQUIRED")      "RESET_REQUIRED"\r
-#token LateCheckFlag("LATE_CHECK")              "LATE_CHECK"\r
-#token ReadOnlyFlag("READ_ONLY")                "READ_ONLY"\r
-#token CallBackFlag("INTERACTIVE")              "INTERACTIVE"\r
-#token OptionOnlyFlag("OPTIONS_ONLY")           "OPTIONS_ONLY"\r
-#token Class("class")                           "class"\r
-#token Subclass("subclass")                     "subclass"\r
-#token ClassGuid("classguid")                   "classguid"\r
-#token TypeDef("typedef")                       "typedef"\r
-#token Restore("restore")                       "restore"\r
-#token Save("save")                             "save"\r
-#token Defaults("defaults")                     "defaults"\r
-#token Banner("banner")                         "banner"\r
-#token Align("align")                           "align"\r
-#token Left("left")                             "left"\r
-#token Right("right")                           "right"\r
-#token Center("center")                         "center"\r
-#token Line("line")                             "line"\r
-#token Name("name")                             "name"\r
-\r
-#token VarId("varid")                           "varid"\r
-#token Question("question")                     "question"\r
-#token QuestionId("questionid")                 "questionid"\r
-#token Image("image")                           "image"\r
-#token Locked("locked")                         "locked"\r
-#token Rule("rule")                             "rule"\r
-#token EndRule("endrule")                       "endrule"\r
-#token Value("value")                           "value"\r
-#token ResetButton("resetbutton")               "resetbutton"\r
-#token EndResetButton("endresetbutton")         "endresetbutton"\r
-#token DefaultStore("defaultstore")             "defaultstore"\r
-#token Attribute("attribute")                   "attribute"\r
-#token Varstore("varstore")                     "varstore"\r
-#token Efivarstore("efivarstore")               "efivarstore"\r
-#token VarSize("varsize")                       "varsize"\r
-#token NameValueVarStore("namevaluevarstore")   "namevaluevarstore"\r
-#token Action("action")                         "action"\r
-#token Config("config")                         "config"\r
-#token EndAction("endaction")                   "endaction"\r
-#token Refresh("refresh")                       "refresh"\r
-#token Interval("interval")                     "interval"\r
-#token VarstoreDevice("varstoredevice")         "varstoredevice"\r
-//\r
-// Define the class and subclass tokens\r
-//\r
-#token ClassNonDevice("NONDEVICE")                        "NON_DEVICE"\r
-#token ClassDiskDevice("DISK_DEVICE")                     "DISK_DEVICE"\r
-#token ClassVideoDevice("VIDEO_DEVICE")                   "VIDEO_DEVICE"\r
-#token ClassNetworkDevice("NETWORK_DEVICE")               "NETWORK_DEVICE"\r
-#token ClassInputDevice("INPUT_DEVICE")                   "INPUT_DEVICE"\r
-#token ClassOnBoardDevice("ONBOARD_DEVICE")               "ONBOARD_DEVICE"\r
-#token ClassOtherDevice("OTHER_DEVICE")                   "OTHER_DEVICE"\r
-\r
-#token SubclassSetupApplication("SETUP_APPLICATION")      "SETUP_APPLICATION"\r
-#token SubclassGeneralApplication("GENERAL_APPLICATION")  "GENERAL_APPLICATION"\r
-#token SubclassFrontPage("FRONT_PAGE")                    "FRONT_PAGE"\r
-#token SubclassSingleUse("SINGLE_USE")                    "SINGLE_USE"\r
-\r
-//\r
-// This is the overall definition of a VFR form definition script.\r
-//\r
-\r
-vfrProgram > [UINT8 Return] :\r
-  <<\r
-     mParserStatus = 0;\r
-     mConstantOnlyInExpression = FALSE;\r
-  >>\r
-  (\r
-      vfrPragmaPackDefinition\r
-    | vfrDataStructDefinition\r
-  )*\r
-  vfrFormSetDefinition\r
-  << $Return = mParserStatus; >>\r
-  ;\r
-\r
-pragmaPackShowDef :\r
-  L:"show"                                          << mCVfrVarDataTypeDB.Pack (L->getLine(), VFR_PACK_SHOW); >>\r
-  ;\r
-\r
-pragmaPackStackDef :\r
-  <<\r
-     UINT32 LineNum;\r
-     UINT8  PackAction;\r
-     INT8   *Identifier = NULL;\r
-     UINT32 PackNumber  = DEFAULT_PACK_ALIGN;\r
-  >>\r
-  (\r
-      L1:"push"                                     << LineNum = L1->getLine(); PackAction = VFR_PACK_PUSH; >>\r
-    | L2:"pop"                                      << LineNum = L2->getLine(); PackAction = VFR_PACK_POP; >>\r
-  )\r
-  {\r
-    "," ID:StringIdentifier                         << Identifier = ID->getText(); >>\r
-  }\r
-  {\r
-    "," N:Number                                    << PackAction |= VFR_PACK_ASSIGN; PackNumber = _STOU32(N->getText()); >>\r
-  }\r
-                                                    << mCVfrVarDataTypeDB.Pack (LineNum, PackAction, Identifier, PackNumber); >>\r
-  ;\r
-\r
-pragmaPackNumber :\r
-  <<\r
-     UINT32 LineNum;\r
-     UINT32 PackNumber = DEFAULT_PACK_ALIGN;\r
-  >>\r
-  N:Number                                          << LineNum = N->getLine(); PackNumber = _STOU32(N->getText()); >>\r
-                                                    << mCVfrVarDataTypeDB.Pack (LineNum, VFR_PACK_ASSIGN, NULL, PackNumber); >>\r
-  ;\r
-\r
-vfrPragmaPackDefinition :\r
-  "\#pragma" "pack" "\("\r
-  {\r
-      pragmaPackShowDef\r
-    | pragmaPackStackDef\r
-    | pragmaPackNumber\r
-  }\r
-  "\)"\r
-  ;\r
-\r
-vfrDataStructDefinition :\r
-  { TypeDef } Struct                                << mCVfrVarDataTypeDB.DeclareDataTypeBegin (); >>\r
-  { NonNvDataMap }\r
-  {\r
-    N1:StringIdentifier                             << _PCATCH(mCVfrVarDataTypeDB.SetNewTypeName (N1->getText()), N1); >>\r
-  }\r
-  OpenBrace\r
-    vfrDataStructFields\r
-  CloseBrace\r
-  {\r
-    N2:StringIdentifier                             << _PCATCH(mCVfrVarDataTypeDB.SetNewTypeName (N2->getText()), N2); >>\r
-  }\r
-  ";"                                               << mCVfrVarDataTypeDB.DeclareDataTypeEnd (); >>\r
-  ;\r
-\r
-vfrDataStructFields :\r
-  (\r
-     dataStructField64     |\r
-        dataStructField32     |\r
-        dataStructField16     |\r
-        dataStructField8      |\r
-     dataStructFieldBool   |\r
-        dataStructFieldString |\r
-        dataStructFieldDate   |\r
-        dataStructFieldTime   |\r
-     dataStructFieldUser\r
-  )*\r
-  ;\r
-\r
-dataStructField64 :\r
-  << UINT32 ArrayNum = 0; >>\r
-  "UINT64"\r
-  N:StringIdentifier\r
-  {\r
-    OpenBracket I:Number CloseBracket               << ArrayNum = _STOU32(I->getText()); >>\r
-  }\r
-  ";"                                               << _PCATCH(mCVfrVarDataTypeDB.DataTypeAddField (N->getText(), "UINT64", ArrayNum), N); >>\r
-  ;\r
-\r
-dataStructField32 :\r
-  << UINT32 ArrayNum = 0; >>\r
-  "UINT32"\r
-  N:StringIdentifier\r
-  {\r
-    OpenBracket I:Number CloseBracket               << ArrayNum = _STOU32(I->getText()); >>\r
-  }\r
-  ";"                                               << _PCATCH(mCVfrVarDataTypeDB.DataTypeAddField (N->getText(), "UINT32", ArrayNum), N); >>\r
-  ;\r
-\r
-dataStructField16 :\r
-  << UINT32 ArrayNum = 0; >>\r
-  ("UINT16" | "CHAR16")\r
-  N:StringIdentifier\r
-  {\r
-    OpenBracket I:Number CloseBracket               << ArrayNum = _STOU32(I->getText()); >>\r
-  }\r
-  ";"                                               << _PCATCH(mCVfrVarDataTypeDB.DataTypeAddField (N->getText(), "UINT16", ArrayNum), N); >>\r
-  ;\r
-\r
-dataStructField8 :\r
-  << UINT32 ArrayNum = 0; >>\r
-  "UINT8"\r
-  N:StringIdentifier\r
-  {\r
-    OpenBracket I:Number CloseBracket               << ArrayNum = _STOU32(I->getText()); >>\r
-  }\r
-  ";"                                               << _PCATCH(mCVfrVarDataTypeDB.DataTypeAddField (N->getText(), "UINT8", ArrayNum), N); >>\r
-  ;\r
-\r
-dataStructFieldBool :\r
-  << UINT32 ArrayNum = 0; >>\r
-  "BOOLEAN"\r
-  N:StringIdentifier\r
-  {\r
-    OpenBracket I:Number CloseBracket               << ArrayNum = _STOU32(I->getText()); >>\r
-  }\r
-  ";"                                               << _PCATCH(mCVfrVarDataTypeDB.DataTypeAddField (N->getText(), "BOOLEAN", ArrayNum), N); >>\r
-  ;\r
-\r
-dataStructFieldString :\r
-  << UINT32 ArrayNum = 0; >>\r
-  "EFI_STRING_ID"\r
-  N:StringIdentifier\r
-  {\r
-    OpenBracket I:Number CloseBracket               << ArrayNum = _STOU32(I->getText()); >>\r
-  }\r
-  ";"                                               << _PCATCH(mCVfrVarDataTypeDB.DataTypeAddField (N->getText(), "EFI_STRING_ID", ArrayNum), N); >>\r
-  ;\r
-\r
-dataStructFieldDate :\r
-  << UINT32 ArrayNum = 0; >>\r
-  "EFI_HII_DATE"\r
-  N:StringIdentifier\r
-  {\r
-    OpenBracket I:Number CloseBracket               << ArrayNum = _STOU32(I->getText()); >>\r
-  }\r
-  ";"                                               << _PCATCH(mCVfrVarDataTypeDB.DataTypeAddField (N->getText(), "EFI_HII_DATE", ArrayNum), N); >>\r
-  ;\r
-\r
-dataStructFieldTime :\r
-  << UINT32 ArrayNum = 0; >>\r
-  "EFI_HII_TIME"\r
-  N:StringIdentifier\r
-  {\r
-    OpenBracket I:Number CloseBracket               << ArrayNum = _STOU32(I->getText()); >>\r
-  }\r
-  ";"                                               << _PCATCH(mCVfrVarDataTypeDB.DataTypeAddField (N->getText(), "EFI_HII_TIME", ArrayNum), N); >>\r
-  ;\r
-\r
-dataStructFieldUser :\r
-  << UINT32 ArrayNum = 0; >>\r
-  T:StringIdentifier\r
-  N:StringIdentifier\r
-  {\r
-    OpenBracket I:Number CloseBracket               << ArrayNum = _STOU32(I->getText()); >>\r
-  }\r
-  ";"                                               << _PCATCH(mCVfrVarDataTypeDB.DataTypeAddField (N->getText(), T->getText(), ArrayNum), T); >>\r
-  ;\r
-\r
-//*****************************************************************************\r
-//\r
-// the syntax of GUID definition\r
-//\r
-guidSubDefinition [EFI_GUID &Guid] :\r
-  G4:Number "," G5:Number "," G6:Number "," G7:Number "," G8:Number "," G9:Number "," G10:Number "," G11:Number\r
-                                                    <<\r
-                                                                                                          Guid.Data4[0] = _STOU8(G4->getText());\r
-                                                                                                          Guid.Data4[1] = _STOU8(G5->getText());\r
-                                                                                                          Guid.Data4[2] = _STOU8(G6->getText());\r
-                                                                                                          Guid.Data4[3] = _STOU8(G7->getText());\r
-                                                                                                          Guid.Data4[4] = _STOU8(G8->getText());\r
-                                                                                                          Guid.Data4[5] = _STOU8(G9->getText());\r
-                                                                                                          Guid.Data4[6] = _STOU8(G10->getText());\r
-                                                                                                          Guid.Data4[7] = _STOU8(G11->getText());\r
-                                                    >>\r
-  ;\r
-\r
-guidDefinition [EFI_GUID &Guid] :\r
-  OpenBrace\r
-    G1:Number "," G2:Number "," G3:Number ","\r
-                                                    <<\r
-                                                       Guid.Data1 = _STOU32 (G1->getText());\r
-                                                       Guid.Data2 = _STOU16 (G2->getText());\r
-                                                       Guid.Data3 = _STOU16 (G3->getText());\r
-                                                    >>\r
-    (\r
-        OpenBrace guidSubDefinition[Guid] CloseBrace\r
-      | guidSubDefinition[Guid]\r
-    )\r
-  CloseBrace\r
-  ;\r
-\r
-//*****************************************************************************\r
-//\r
-// the syntax of form set definition\r
-//\r
-vfrFormSetDefinition :\r
-  <<\r
-     EFI_GUID    Guid;\r
-     EFI_GUID    DefaultClassGuid = EFI_HII_PLATFORM_SETUP_FORMSET_GUID;\r
-     EFI_GUID    ClassGuids[10];\r
-     UINT8       ClassGuidNum = 0;\r
-     CIfrFormSet *FSObj = NULL;\r
-     UINT16      C, SC;\r
-  >>\r
-  L:FormSet\r
-  Uuid "=" guidDefinition[Guid] ","\r
-  Title "=" "STRING_TOKEN" "\(" S1:Number "\)" ","\r
-  Help  "=" "STRING_TOKEN" "\(" S2:Number "\)" ","\r
-  {\r
-    ClassGuid "=" guidDefinition[ClassGuids[ClassGuidNum]]        <<  ++ClassGuidNum; >>\r
-                  (\r
-                   "\|" guidDefinition[ClassGuids[ClassGuidNum]]  << ++ClassGuidNum; >>\r
-                  )*\r
-                  ","\r
-  }\r
-                                                    <<\r
-                                                      switch (ClassGuidNum) {\r
-                                                      case 0:\r
-                                                        FSObj = new CIfrFormSet(sizeof(EFI_IFR_FORM_SET));\r
-                                                        FSObj->SetClassGuid(&DefaultClassGuid);\r
-                                                        break;\r
-                                                      case 1:\r
-                                                        FSObj = new CIfrFormSet(sizeof(EFI_IFR_FORM_SET));\r
-                                                        FSObj->SetClassGuid(&ClassGuids[0]);\r
-                                                        break;\r
-                                                      case 2:\r
-                                                        FSObj = new CIfrFormSet(sizeof(EFI_IFR_FORM_SET) + sizeof(EFI_GUID));\r
-                                                        FSObj->SetClassGuid(&ClassGuids[0]);\r
-                                                        FSObj->SetClassGuid(&ClassGuids[1]);\r
-                                                        break;\r
-                                                      default:\r
-                                                        FSObj = new CIfrFormSet(sizeof(EFI_IFR_FORM_SET) + 2 * sizeof(EFI_GUID));\r
-                                                        FSObj->SetClassGuid(&ClassGuids[0]);\r
-                                                        FSObj->SetClassGuid(&ClassGuids[1]);\r
-                                                        FSObj->SetClassGuid(&ClassGuids[2]);\r
-                                                        break;\r
-                                                      }\r
-\r
-                                                      SET_LINE_INFO (*FSObj, L);\r
-                                                      FSObj->SetGuid (&Guid);\r
-                                                      FSObj->SetFormSetTitle (_STOSID(S1->getText()));\r
-                                                      FSObj->SetHelp (_STOSID(S2->getText()));\r
-                                                    >>\r
-  {\r
-    Class "=" classDefinition[C] ","                << {CIfrClass CObj; CObj.SetClass(C);} >>\r
-  }\r
-  {\r
-    Subclass "=" subclassDefinition[SC] ","         << {CIfrSubClass SCObj; SCObj.SetSubClass(SC);} >>\r
-  }\r
-                                                    <<\r
-                                                       _DeclareStandardDefaultStorage (GET_LINENO (L));\r
-                                                       //_DeclareDefaultLinearVarStore (GET_LINENO (L));\r
-                                                    >>\r
-  vfrFormSetList\r
-  E:EndFormSet                                      << CRT_END_OP (E); if (FSObj != NULL) {delete FSObj;}>>\r
-  ";"\r
-  ;\r
-\r
-vfrFormSetList :\r
-  (\r
-    vfrFormDefinition             |\r
-    vfrStatementImage             |\r
-    vfrStatementVarStoreLinear    |\r
-    vfrStatementVarStoreEfi       |\r
-    vfrStatementVarStoreNameValue |\r
-    vfrStatementDefaultStore      |\r
-    vfrStatementDisableIfFormSet\r
-  )*\r
-  ;\r
-\r
-vfrStatementDefaultStore :\r
-  << UINT16  DefaultId = EFI_HII_DEFAULT_CLASS_STANDARD; >>\r
-  D:DefaultStore N:StringIdentifier ","\r
-  Prompt "=" "STRING_TOKEN" "\(" S:Number "\)"\r
-  {\r
-    "," Attribute "=" A:Number                      << DefaultId = _STOU16(A->getText()); >>\r
-  }\r
-                                                    <<\r
-                                                       if (mCVfrDefaultStore.DefaultIdRegistered (DefaultId) == FALSE) {\r
-                                                         CIfrDefaultStore DSObj;\r
-                                                         _PCATCH(mCVfrDefaultStore.RegisterDefaultStore (DSObj.GetObjBinAddr(), N->getText(), _STOSID(S->getText()), DefaultId)), D->getLine();\r
-                                                                                                                DSObj.SetLineNo(D->getLine());\r
-                                                         DSObj.SetDefaultName (_STOSID(S->getText()));\r
-                                                         DSObj.SetDefaultId (DefaultId);\r
-                                                                                                          } else {\r
-                                                         _PCATCH(mCVfrDefaultStore.ReRegisterDefaultStoreById (DefaultId, N->getText(), _STOSID(S->getText()))), D->getLine();\r
-                                                                                                          }\r
-                                                    >>\r
-  ";"\r
-  ;\r
-\r
-vfrStatementVarStoreLinear :\r
-  <<\r
-     EFI_GUID        Guid;\r
-     CIfrVarStore    VSObj;\r
-     INT8            *TypeName;\r
-        UINT32          LineNum;\r
-     EFI_VARSTORE_ID VarStoreId = EFI_VARSTORE_ID_INVALID;\r
-     UINT32          Size;\r
-  >>\r
-  V:Varstore                                        << VSObj.SetLineNo(V->getLine()); >>\r
-  (\r
-      TN:StringIdentifier ","                       << TypeName = TN->getText(); LineNum = TN->getLine(); >>\r
-       | U8:"UINT8" ","                                << TypeName = "UINT8"; LineNum = U8->getLine(); >>\r
-       | U16:"UINT16" ","                              << TypeName = "UINT16"; LineNum = U16->getLine(); >>\r
-       | U32:"UINT32" ","                              << TypeName = "UINT32"; LineNum = U32->getLine(); >>\r
-       | U64:"UINT64" ","                              << TypeName = "UINT64"; LineNum = U64->getLine(); >>\r
-       | D:"EFI_HII_DATE" ","                          << TypeName = "EFI_HII_DATE"; LineNum = D->getLine(); >>\r
-       | T:"EFI_HII_TIME" ","                          << TypeName = "EFI_HII_TIME"; LineNum = T->getLine(); >>\r
-  )\r
-  { Key "=" Number "," }                            // Key is used to assign Varid in Framework VFR but no use in UEFI2.1 VFR\r
-  {\r
-    VarId "=" ID:Number ","                         <<\r
-                                                       _PCATCH(\r
-                                                         (INTN)(VarStoreId = _STOU16(ID->getText())) != 0,\r
-                                                         (INTN)TRUE,\r
-                                                         ID,\r
-                                                         "varid 0 is not allowed."\r
-                                                         );\r
-                                                    >>\r
-  }\r
-  Name "=" SN:StringIdentifier ","\r
-  Uuid "=" guidDefinition[Guid]\r
-                                                    <<\r
-                                                       _PCATCH(mCVfrDataStorage.DeclareBufferVarStore (\r
-                                                                                  SN->getText(),\r
-                                                                                  &Guid,\r
-                                                                                  &mCVfrVarDataTypeDB,\r
-                                                                                  TypeName,\r
-                                                                                                                                                                 VarStoreId\r
-                                                                                  ), LineNum);\r
-                                                    >>\r
-                                                    <<\r
-                                                       VSObj.SetGuid (&Guid);\r
-                                                       _PCATCH(mCVfrDataStorage.GetVarStoreId(SN->getText(), &VarStoreId), SN);\r
-                                                       VSObj.SetVarStoreId (VarStoreId);\r
-                                                       _PCATCH(mCVfrVarDataTypeDB.GetDataTypeSize(TypeName, &Size), LineNum);\r
-                                                       VSObj.SetSize (Size);\r
-                                                       VSObj.SetName (SN->getText());\r
-                                                    >>\r
-  ";"\r
-  ;\r
-\r
-vfrStatementVarStoreEfi :\r
-  <<\r
-     EFI_GUID        Guid;\r
-     CIfrVarStoreEfi VSEObj;\r
-     EFI_VARSTORE_ID VarStoreId;\r
-     UINT32          Attr = 0;\r
-  >>\r
-  E:Efivarstore                                     << VSEObj.SetLineNo(E->getLine()); >>\r
-  SN:StringIdentifier ","\r
-  Attribute "=" vfrVarStoreEfiAttr[Attr] ( "\|" vfrVarStoreEfiAttr[Attr] )* ","\r
-                                                    << VSEObj.SetAttributes (Attr); >>\r
-  Name "=" "STRING_TOKEN" "\(" VN:Number "\)" ","\r
-  VarSize "=" N:Number ","\r
-  Uuid "=" guidDefinition[Guid]                     << mCVfrDataStorage.DeclareEfiVarStore (SN->getText(), &Guid, _STOSID(VN->getText()), _STOU32(N->getText())); >>\r
-                                                    <<\r
-                                                       VSEObj.SetGuid (&Guid);\r
-                                                       _PCATCH(mCVfrDataStorage.GetVarStoreId(SN->getText(), &VarStoreId), SN);\r
-                                                       VSEObj.SetVarStoreId (VarStoreId);\r
-                                                    >>\r
-  ";"\r
-  ;\r
-\r
-vfrVarStoreEfiAttr [UINT32 & Attr] :\r
-  N:Number                                          << $Attr |= _STOU32(N->getText()); >>\r
-  ;\r
-\r
-vfrStatementVarStoreNameValue :\r
-  <<\r
-     EFI_GUID              Guid;\r
-     CIfrVarStoreNameValue VSNVObj;\r
-     EFI_VARSTORE_ID       VarStoreId;\r
-  >>\r
-  L:NameValueVarStore                               << VSNVObj.SetLineNo(L->getLine()); >>\r
-  SN:StringIdentifier ","                           << _PCATCH(mCVfrDataStorage.DeclareNameVarStoreBegin (SN->getText()), SN); >>\r
-  (\r
-    Name "=" "STRING_TOKEN" "\(" N:Number "\)" ","  << _PCATCH(mCVfrDataStorage.NameTableAddItem (_STOSID(N->getText())), SN); >>\r
-  )+\r
-  Uuid "=" guidDefinition[Guid]                     << _PCATCH(mCVfrDataStorage.DeclareNameVarStoreEnd (&Guid), SN); >>\r
-                                                    <<\r
-                                                       VSNVObj.SetGuid (&Guid);\r
-                                                       _PCATCH(mCVfrDataStorage.GetVarStoreId(SN->getText(), &VarStoreId), SN);\r
-                                                       VSNVObj.SetVarStoreId (VarStoreId);\r
-                                                    >>\r
-  ";"\r
-  ;\r
-\r
-//\r
-// keep classDeinition and validClassNames for compatibility but not generate\r
-// any IFR object\r
-//\r
-classDefinition[UINT16 & Class] :\r
-  << $Class = 0; >>\r
-  validClassNames[$Class] ( "\|" validClassNames[$Class] )*\r
-  ;\r
-\r
-validClassNames[UINT16 & Class] :\r
-    ClassNonDevice                                  << $Class |= EFI_NON_DEVICE_CLASS; >>\r
-  | ClassDiskDevice                                 << $Class |= EFI_DISK_DEVICE_CLASS; >>\r
-  | ClassVideoDevice                                << $Class |= EFI_VIDEO_DEVICE_CLASS; >>\r
-  | ClassNetworkDevice                              << $Class |= EFI_NETWORK_DEVICE_CLASS; >>\r
-  | ClassInputDevice                                << $Class |= EFI_INPUT_DEVICE_CLASS; >>\r
-  | ClassOnBoardDevice                              << $Class |= EFI_ON_BOARD_DEVICE_CLASS; >>\r
-  | ClassOtherDevice                                << $Class |= EFI_OTHER_DEVICE_CLASS; >>\r
-  | N:Number                                        << $Class |= _STOU16(N->getText()); >>\r
-  ;\r
-\r
-subclassDefinition[UINT16 & SubClass] :\r
-  << $SubClass = 0; >>\r
-    SubclassSetupApplication                        << $SubClass |= EFI_SETUP_APPLICATION_SUBCLASS; >>\r
-  | SubclassGeneralApplication                      << $SubClass |= EFI_GENERAL_APPLICATION_SUBCLASS; >>\r
-  | SubclassFrontPage                               << $SubClass |= EFI_FRONT_PAGE_SUBCLASS; >>\r
-  | SubclassSingleUse                               << $SubClass |= EFI_SINGLE_USE_SUBCLASS; >>\r
-  | N:Number                                        << $SubClass |= _STOU16(N->getText()); >>\r
-  ;\r
-\r
-vfrStatementDisableIfFormSet :\r
-  <<\r
-    CIfrDisableIf DIObj;\r
-    UINT32 ExpOpCount = 0;\r
-  >>\r
-  D:DisableIf                                       << DIObj.SetLineNo(D->getLine()); >>\r
-  vfrStatementExpression[0, ExpOpCount] ";"         << mConstantOnlyInExpression = FALSE; >>\r
-  vfrFormSetList\r
-  E:EndIf                                           << CRT_END_OP (E); >>\r
-  ";"\r
-  ;\r
-\r
-//*****************************************************************************\r
-//\r
-// the syntax of question header and statement header\r
-//\r
-vfrStatementHeader[CIfrStatementHeader *SHObj] :\r
-  Prompt "=" "STRING_TOKEN" "\(" S1:Number "\)" "," << $SHObj->SetPrompt (_STOSID(S1->getText())); >>\r
-  Help   "=" "STRING_TOKEN" "\(" S2:Number "\)"     << $SHObj->SetHelp (_STOSID(S2->getText())); >>\r
-  ;\r
-\r
-vfrQuestionHeader[CIfrQuestionHeader & QHObj, EFI_QUESION_TYPE QType = QUESTION_NORMAL]:\r
-  <<\r
-     EFI_VARSTORE_INFO Info;\r
-        EFI_QUESTION_ID   QId       = EFI_QUESTION_ID_INVALID;\r
-     INT8              *QName    = NULL;\r
-     INT8              *VarIdStr = NULL;\r
-  >>\r
-  {\r
-    Name "=" QN:StringIdentifier ","                <<\r
-                                                       QName = QN->getText();\r
-                                                       _PCATCH(mCVfrQuestionDB.FindQuestion (QName), VFR_RETURN_UNDEFINED, QN, "has already been used please used anther name");\r
-                                                    >>\r
-  }\r
-  { V:VarId "=" vfrStorageVarId[Info, VarIdStr] "," }\r
-  {\r
-    QuestionId "=" ID:Number ","                    <<\r
-                                                       QId = _STOQID(ID->getText());\r
-                                                       _PCATCH(mCVfrQuestionDB.FindQuestion (QId), VFR_RETURN_UNDEFINED, ID, "has already been used please assign another number");\r
-                                                    >>\r
-  }\r
-                                                    <<\r
-                                                       switch (QType) {\r
-                                                       case QUESTION_NORMAL:\r
-                                                         mCVfrQuestionDB.RegisterQuestion (QName, VarIdStr, QId);\r
-                                                         break;\r
-                                                                                                          case QUESTION_DATE:\r
-                                                                                                                mCVfrQuestionDB.RegisterNewDateQuestion (QName, VarIdStr, QId);\r
-                                                                                                                break;\r
-                                                                                                          case QUESTION_TIME:\r
-                                                                                                                mCVfrQuestionDB.RegisterNewTimeQuestion (QName, VarIdStr, QId);\r
-                                                                                                                break;\r
-                                                                                                          default:\r
-                                                                                                                _PCATCH(VFR_RETURN_FATAL_ERROR);\r
-                                                                                                          }\r
-                                                       $QHObj.SetQuestionId (QId);\r
-                                                       $QHObj.SetVarStoreInfo (&Info);\r
-                                                    >>\r
-  vfrStatementHeader[&$QHObj]\r
-                                                    << _SAVE_CURRQEST_VARINFO (Info); >>\r
-                                                                                                       << if (VarIdStr != NULL) delete VarIdStr; >>\r
-  ;\r
-\r
-vfrQuestionHeaderWithNoStorage[CIfrQuestionHeader *QHObj] :\r
-  <<\r
-        EFI_QUESTION_ID   QId = EFI_QUESTION_ID_INVALID;\r
-     INT8              *QName = NULL;\r
-  >>\r
-  {\r
-    Name "=" QN:StringIdentifier ","                <<\r
-                                                       QName = QN->getText();\r
-                                                       _PCATCH(mCVfrQuestionDB.FindQuestion (QName), VFR_RETURN_UNDEFINED, QN, "has already been used please used anther name");\r
-                                                    >>\r
-  }\r
-  {\r
-    QuestionId "=" ID:Number ","                    <<\r
-                                                       QId = _STOQID(ID->getText());\r
-                                                       _PCATCH(mCVfrQuestionDB.FindQuestion (QId), VFR_RETURN_UNDEFINED, ID, "redefined quesiont ID");\r
-                                                    >>\r
-  }\r
-                                                    <<\r
-                                                       mCVfrQuestionDB.RegisterQuestion (QName, NULL, QId);\r
-                                                       $QHObj->SetQuestionId (QId);\r
-                                                    >>\r
-  vfrStatementHeader[$QHObj]\r
-  ;\r
-\r
-questionheaderFlagsField[UINT8 & Flags] :\r
-    ReadOnlyFlag                                    << $Flags |= 0x01; >>\r
-  | CallBackFlag                                    << $Flags |= 0x04; >>\r
-  | ResetRequiredFlag                               << $Flags |= 0x10; >>\r
-  | OptionOnlyFlag                                  << $Flags |= 0x80; >>\r
-  ;\r
-\r
-vfrStorageVarId[EFI_VARSTORE_INFO & Info, INT8 *&QuestVarIdStr] :\r
-  <<\r
-     UINT32                Idx;\r
-     UINT32                LineNo;\r
-     EFI_VFR_VARSTORE_TYPE VarStoreType = EFI_VFR_VARSTORE_INVALID;\r
-     INT8                  *VarIdStr    = NULL;\r
-     INT8                  *VarStr      = NULL;\r
-     INT8                  *SName       = NULL;\r
-     INT8                  *TName       = NULL;\r
-     EFI_IFR_TYPE_VALUE    Dummy        = {0};\r
-  >>\r
-  (\r
-    SN1:StringIdentifier                            << SName = SN1->getText(); _STRCAT(&VarIdStr, SN1->getText()); >>\r
-    OpenBracket I1:Number CloseBracket              << Idx = _STOU32(I1->getText()); _STRCAT(&VarIdStr, "["); _STRCAT(&VarIdStr, I1->getText()); _STRCAT(&VarIdStr, "]"); >>\r
-                                                    <<\r
-                                                       _PCATCH(mCVfrDataStorage.GetVarStoreType (SName, VarStoreType), SN1);\r
-                                                       _PCATCH(mCVfrDataStorage.GetVarStoreId (SName, &$Info.mVarStoreId), SN1);\r
-                                                                                                          _PCATCH(mCVfrDataStorage.GetNameVarStoreInfo (&$Info, Idx), SN1);\r
-                                                                                                       >>\r
-  )\r
-  |\r
-  (\r
-    SN2:StringIdentifier                            << SName = SN2->getText(); _STRCAT(&VarIdStr, SName); >>\r
-                                                    <<\r
-                                                       _PCATCH(mCVfrDataStorage.GetVarStoreType (SName, VarStoreType), SN2);\r
-                                                       _PCATCH(mCVfrDataStorage.GetVarStoreId (SName, &$Info.mVarStoreId), SN2);\r
-                                                                                                          if (VarStoreType == EFI_VFR_VARSTORE_BUFFER) {\r
-                                                         _PCATCH(mCVfrDataStorage.GetBufferVarStoreDataTypeName(SName, &TName), SN2);\r
-                                                                                                                _STRCAT(&VarStr, TName);\r
-                                                                                                          }\r
-                                                    >>\r
-\r
-    (\r
-      "."                                           <<\r
-                                                       _PCATCH(((VarStoreType != EFI_VFR_VARSTORE_BUFFER) ? VFR_RETURN_EFIVARSTORE_USE_ERROR : VFR_RETURN_SUCCESS), SN2);\r
-                                                                                                          _STRCAT(&VarIdStr, "."); _STRCAT(&VarStr, ".");\r
-                                                                                                       >>\r
-      SF:StringIdentifier                           << _STRCAT(&VarIdStr, SF->getText()); _STRCAT(&VarStr, SF->getText()); >>\r
-      {\r
-        OpenBracket I2:Number CloseBracket          << _STRCAT(&VarIdStr, "["); _STRCAT(&VarIdStr, I2->getText()); _STRCAT(&VarIdStr, "]"); >>\r
-                                                    << _STRCAT(&VarStr, "["); _STRCAT(&VarStr, I2->getText()); _STRCAT(&VarStr, "]"); >>\r
-      }\r
-    )*                                              <<\r
-                                                       switch (VarStoreType) {\r
-                                                       case EFI_VFR_VARSTORE_EFI:\r
-                                                         _PCATCH(mCVfrDataStorage.GetEfiVarStoreInfo (&$Info), SN2);\r
-                                                         break;\r
-                                                       case EFI_VFR_VARSTORE_BUFFER:\r
-                                                         _PCATCH(mCVfrVarDataTypeDB.GetDataFieldInfo (VarStr, $Info.mInfo.mVarOffset, $Info.mVarType, $Info.mVarTotalSize), SN2->getLine());\r
-                                                         //_PCATCH(mCVfrDataStorage.BufferVarStoreRequestElementAdd (SName, Info), SN2);\r
-                                                         _PCATCH((EFI_VFR_RETURN_CODE)gCVfrBufferConfig.Register (\r
-                                                                    SName,\r
-                                                                    NULL),\r
-                                                                 SN2->getLine());\r
-                                                         _PCATCH((EFI_VFR_RETURN_CODE)gCVfrBufferConfig.Write (\r
-                                                                    'a',\r
-                                                                    SName,\r
-                                                                    NULL,\r
-                                                                    $Info.mVarType,\r
-                                                                    $Info.mInfo.mVarOffset,\r
-                                                                    $Info.mVarTotalSize,\r
-                                                                    Dummy),\r
-                                                                 SN2->getLine());\r
-                                                         break;\r
-                                                       case EFI_VFR_VARSTORE_NAME:\r
-                                                       default: break;\r
-                                                       }\r
-\r
-                                                       QuestVarIdStr = VarIdStr;\r
-                                                       if (VarStr != NULL) {delete VarStr;}\r
-                                                    >>\r
-  )\r
-  ;\r
-\r
-vfrQuestionDataFieldName [EFI_QUESTION_ID &QId, UINT32 &Mask, INT8 *&VarIdStr, UINT32 &LineNo] :\r
-                                                    << VarIdStr = NULL; LineNo = 0; >>\r
-  (\r
-    SN1:StringIdentifier                            << _STRCAT(&VarIdStr, SN1->getText()); LineNo = SN1->getLine(); >>\r
-    OpenBracket I1:Number CloseBracket              << _STRCAT(&VarIdStr, "["); _STRCAT(&VarIdStr, I1->getText()); _STRCAT(&VarIdStr, "]"); >>\r
-                                                    << mCVfrQuestionDB.GetQuestionId (NULL, VarIdStr, $QId, $Mask); >>\r
-  )                                                 <<\r
-                                                       if (mConstantOnlyInExpression) {\r
-                                                         _PCATCH(VFR_RETURN_CONSTANT_ONLY, LineNo);\r
-                                                       }\r
-                                                    >>\r
-  |\r
-  (\r
-    SN2:StringIdentifier                            << _STRCAT (&VarIdStr, SN2->getText()); LineNo = SN2->getLine(); >>\r
-    (\r
-      "."                                           << _STRCAT (&VarIdStr, "."); >>\r
-      SF:StringIdentifier                           << _STRCAT(&VarIdStr, SF->getText()); >>\r
-      {\r
-        OpenBracket I2:Number CloseBracket          << _STRCAT(&VarIdStr, "["); _STRCAT(&VarIdStr, I2->getText()); _STRCAT(&VarIdStr, "]"); >>\r
-      }\r
-    )*\r
-                                                    << mCVfrQuestionDB.GetQuestionId (NULL, VarIdStr, $QId, $Mask); >>\r
-  )                                                 <<\r
-                                                       if (mConstantOnlyInExpression) {\r
-                                                         _PCATCH(VFR_RETURN_CONSTANT_ONLY, LineNo);\r
-                                                       }\r
-                                                    >>\r
-  ;\r
-\r
-vfrConstantValueField[UINT8 Type] > [EFI_IFR_TYPE_VALUE Value] :\r
-    N1:Number                                       <<\r
-                                                       switch ($Type) {\r
-                                                       case EFI_IFR_TYPE_NUM_SIZE_8 :\r
-                                                                                                            $Value.u8     = _STOU8(N1->getText());\r
-                                                                                                                break;\r
-                                                                                                          case EFI_IFR_TYPE_NUM_SIZE_16 :\r
-                                                                                                            $Value.u16    = _STOU16(N1->getText());\r
-                                                                                                                break;\r
-                                                                                                          case EFI_IFR_TYPE_NUM_SIZE_32 :\r
-                                                                                                            $Value.u32    = _STOU32(N1->getText());\r
-                                                                                                                break;\r
-                                                                                                          case EFI_IFR_TYPE_NUM_SIZE_64 :\r
-                                                                                                            $Value.u64    = _STOU64(N1->getText());\r
-                                                                                                                break;\r
-                                                                                                          case EFI_IFR_TYPE_BOOLEAN :\r
-                                                                                                            $Value.b      = _STOU8(N1->getText());\r
-                                                                                                                break;\r
-                                                                                                          case EFI_IFR_TYPE_STRING :\r
-                                                                                                            $Value.string = _STOU16(N1->getText());\r
-                                                                                                                break;\r
-                                                                                                          case EFI_IFR_TYPE_TIME :\r
-                                                                                                          case EFI_IFR_TYPE_DATE :\r
-                                                                                                          default :\r
-                                                                                                                break;\r
-                                                                                                          }\r
-                                                    >>\r
-  | B1:True                                         << $Value.b      = TRUE; >>\r
-  | B2:False                                        << $Value.b      = FALSE; >>\r
-  | O1:One                                          << $Value.u8     = _STOU8(O1->getText()); >>\r
-  | O2:Ones                                         << $Value.u64    = _STOU64(O2->getText()); >>\r
-  | Z:Zero                                          << $Value.u8     = _STOU8(Z->getText()); >>\r
-  | HOUR:Number ":" MINUTE:Number ":" SECOND:Number << $Value.time   = _STOT(HOUR->getText(), MINUTE->getText(), SECOND->getText()); >>\r
-  | YEAR:Number "/" MONTH:Number "/" DAY:Number     << $Value.date   = _STOD(YEAR->getText(), MONTH->getText(), DAY->getText()); >>\r
-  | "STRING_TOKEN" "\(" S1:Number "\)"              << $Value.string = _STOSID(S1->getText()); >>\r
-  ;\r
-\r
-//*****************************************************************************\r
-//\r
-// the syntax of form definition\r
-//\r
-vfrFormDefinition :\r
-  << CIfrForm FObj; >>\r
-  F:Form                                            << FObj.SetLineNo(F->getLine()); >>\r
-  FormId "=" S1:Number ","                          << _PCATCH(FObj.SetFormId (_STOFID(S1->getText())), S1); >>\r
-  Title "=" "STRING_TOKEN" "\(" S2:Number "\)" ";"  << FObj.SetFormTitle (_STOSID(S2->getText())); >>\r
-  (\r
-    vfrStatementImage                        |\r
-    vfrStatementLocked                       |\r
-    vfrStatementRules                        |\r
-    vfrStatementDefault                      |\r
-    vfrStatementStat                         |\r
-    vfrStatementQuestions                    |\r
-    vfrStatementConditional                  |\r
-    vfrStatementLabel                        |\r
-    vfrStatementBanner\r
-    // Just for framework vfr compatibility\r
-    //vfrStatementInvalid\r
-  )*\r
-  E:EndForm                                         << CRT_END_OP (E); >>\r
-  ";"\r
-  ;\r
-\r
-vfrStatementRules :\r
-  << \r
-    CIfrRule RObj;\r
-    UINT32 ExpOpCount = 0;\r
-  >>\r
-  R:Rule                                            << RObj.SetLineNo(R->getLine()); >>\r
-  S1:StringIdentifier ","                           <<\r
-                                                       mCVfrRulesDB.RegisterRule (S1->getText());\r
-                                                       RObj.SetRuleId (mCVfrRulesDB.GetRuleId(S1->getText()));\r
-                                                    >>\r
-  vfrStatementExpression[0, ExpOpCount]\r
-  E:EndRule                                         << CRT_END_OP (E); >>\r
-  ";"\r
-  ;\r
-\r
-vfrStatementDefault :\r
-  <<\r
-     BOOLEAN               IsExp         = FALSE;\r
-     EFI_IFR_TYPE_VALUE    Val = {0};\r
-     CIfrDefault           DObj;\r
-     EFI_DEFAULT_ID        DefaultId     = EFI_HII_DEFAULT_CLASS_STANDARD;\r
-     INT8                  *VarStoreName = NULL;\r
-     EFI_VFR_VARSTORE_TYPE VarStoreType  = EFI_VFR_VARSTORE_INVALID;\r
-  >>\r
-  D:Default                                         << DObj.SetLineNo(D->getLine()); >>\r
-  (\r
-    (\r
-        vfrStatementValue ","                       << IsExp = TRUE; DObj.SetScope (1); CIfrEnd EndObj1; EndObj1.SetLineNo(D->getLine()); >>\r
-      | "=" vfrConstantValueField[_GET_CURRQEST_DATATYPE()] > [Val] ","  << \r
-                                                        if (gCurrentMinMaxData != NULL && gCurrentMinMaxData->IsNumericOpcode()) {\r
-                                                          //check default value is valid for Numeric Opcode\r
-                                                          if (Val.u64 < gCurrentMinMaxData->GetMinData(_GET_CURRQEST_DATATYPE()) || Val.u64 > gCurrentMinMaxData->GetMaxData(_GET_CURRQEST_DATATYPE())) {\r
-                                                            _PCATCH (VFR_RETURN_INVALID_PARAMETER, D->getLine(), "Numeric default value must be between MinValue and MaxValue.");\r
-                                                          }\r
-                                                        }\r
-                                                        DObj.SetType (_GET_CURRQEST_DATATYPE()); \r
-                                                        DObj.SetValue(Val);\r
-                                                    >>\r
-    )\r
-    {\r
-      DefaultStore "=" SN:StringIdentifier ","      << _PCATCH(mCVfrDefaultStore.GetDefaultId (SN->getText(), &DefaultId), SN); DObj.SetDefaultId (DefaultId); >>\r
-    }\r
-                                                    <<\r
-                                                       _PCATCH(mCVfrDataStorage.GetVarStoreName (_GET_CURRQEST_VARTINFO().mVarStoreId, &VarStoreName), D->getLine());\r
-                                                       _PCATCH(mCVfrDataStorage.GetVarStoreType (VarStoreName, VarStoreType), D->getLine());\r
-                                                       if ((IsExp == FALSE) && (VarStoreType == EFI_VFR_VARSTORE_BUFFER)) {\r
-                                                         _PCATCH(mCVfrDefaultStore.BufferVarStoreAltConfigAdd (\r
-                                                                   DefaultId,\r
-                                                                   _GET_CURRQEST_VARTINFO(),\r
-                                                                   VarStoreName,\r
-                                                                   _GET_CURRQEST_DATATYPE (),\r
-                                                                   Val),\r
-                                                                   D->getLine()\r
-                                                                   );\r
-                                                       }\r
-                                                    >>\r
-  )\r
-  ;\r
-\r
-vfrStatementStat :\r
-  vfrStatementSubTitle        |\r
-  vfrStatementStaticText      |\r
-  vfrStatementCrossReference\r
-  ;\r
-\r
-vfrStatementQuestions :\r
-  vfrStatementBooleanType     |\r
-  vfrStatementDate            |\r
-  vfrStatementNumericType     |\r
-  vfrStatementStringType      |\r
-  vfrStatementOrderedList     |\r
-  vfrStatementTime\r
-  ;\r
-\r
-vfrStatementConditional :\r
-  vfrStatementDisableIfStat   |\r
-  vfrStatementSuppressIfStat  |\r
-  vfrStatementGrayOutIfStat\r
-  ;\r
-\r
-vfrStatementInvalid :\r
-                                                       << _CRT_OP (FALSE); >>\r
-  (\r
-    vfrStatementInvalidHidden          |\r
-    vfrStatementInvalidInconsistentIf  |\r
-    vfrStatementInvalidInventory       |\r
-    vfrStatementInvalidSaveRestoreDefaults\r
-  )\r
-                                                       << _CRT_OP (TRUE); >>\r
-  ;\r
-\r
-flagsField :\r
-  Number | InteractiveFlag | ManufacturingFlag | DefaultFlag |\r
-  NVAccessFlag | ResetRequiredFlag | LateCheckFlag\r
-  ;\r
-\r
-vfrStatementValue :\r
-  << \r
-    CIfrValue VObj;\r
-    UINT32 ExpOpCount = 0;\r
-  >>\r
-  V:Value                                              << VObj.SetLineNo(V->getLine()); >>\r
-  "=" vfrStatementExpression[0, ExpOpCount]\r
-                                                       << { CIfrEnd EndObj; EndObj.SetLineNo(0); } >>\r
-  ;\r
-\r
-vfrStatementSubTitle :\r
-  << CIfrSubtitle SObj; >>\r
-  L:Subtitle                                           << SObj.SetLineNo(L->getLine()); >>\r
-  Text "=" "STRING_TOKEN" "\(" S:Number "\)"           << SObj.SetPrompt (_STOSID(S->getText())); >>\r
-  {\r
-    "," FLAGS "=" vfrSubtitleFlags[SObj]\r
-  }\r
-  { vfrStatementStatTagList "," }\r
-  E:";"                                                << CRT_END_OP (E); >>\r
-  ;\r
-\r
-vfrSubtitleFlags [CIfrSubtitle & SObj] :\r
-  << UINT8 LFlags = 0; >>\r
-  subtitleFlagsField[LFlags] ( "\|" subtitleFlagsField[LFlags] )*\r
-                                                       << _PCATCH(SObj.SetFlags (LFlags)); >>\r
-  ;\r
-\r
-subtitleFlagsField [UINT8 & Flags] :\r
-    N:Number                                           << $Flags |= _STOU8(N->getText()); >>\r
-  | "HORIZONTAL"                                       << $Flags |= 0x01; >>\r
-  ;\r
-\r
-vfrStatementStaticText :\r
-  <<\r
-     UINT8           Flags   = 0;\r
-     EFI_QUESTION_ID QId     = EFI_QUESTION_ID_INVALID;\r
-     EFI_STRING_ID   TxtTwo  = EFI_STRING_ID_INVALID;\r
-   >>\r
-  T:Text\r
-  Help "=" "STRING_TOKEN" "\(" S1:Number "\)" ","\r
-  Text "=" "STRING_TOKEN" "\(" S2:Number "\)"\r
-  {\r
-    "," Text "=" "STRING_TOKEN" "\(" S3:Number "\)"    << TxtTwo = _STOSID(S3->getText()); >>\r
-  }\r
-  {\r
-    "," F:FLAGS "=" staticTextFlagsField[Flags] ( "\|" staticTextFlagsField[Flags] )*\r
-    "," Key "=" KN:Number\r
-  }\r
-                                                       <<\r
-                                                          if (Flags & EFI_IFR_FLAG_CALLBACK) {\r
-                                                            CIfrAction AObj;\r
-                                                            AObj.SetLineNo (T->getLine());\r
-                                                            mCVfrQuestionDB.RegisterQuestion (NULL, NULL, QId);\r
-                                                            AObj.SetQuestionId (QId);\r
-                                                            AObj.SetPrompt (_STOSID(S2->getText()));\r
-                                                            AObj.SetHelp (_STOSID(S1->getText()));\r
-                                                            _PCATCH(AObj.SetFlags (Flags), F->getLine());\r
-                                                            AssignQuestionKey (AObj, KN);\r
-                                                            CRT_END_OP (T);\r
-                                                          } else {\r
-                                                                                                                   CIfrText TObj;\r
-                                                                                                                   TObj.SetLineNo (T->getLine());\r
-                                                                                                                       TObj.SetHelp (_STOSID(S1->getText()));\r
-                                                                                                                       TObj.SetPrompt (_STOSID(S2->getText()));\r
-                                                                                                                       TObj.SetTextTwo (TxtTwo);\r
-                                                                                                                 }\r
-                                                       >>\r
-  { "," vfrStatementStatTagList }\r
-  ";"\r
-  ;\r
-\r
-staticTextFlagsField[UINT8 & HFlags] :\r
-    N:Number                                           << _PCATCH(_STOU8(N->getText()) == 0 ? VFR_RETURN_SUCCESS : VFR_RETURN_UNSUPPORTED, N->getLine()); >>\r
-  | questionheaderFlagsField[HFlags]\r
-  ;\r
-\r
-vfrStatementCrossReference :\r
-  vfrStatementGoto            |\r
-  vfrStatementResetButton\r
-  ;\r
-\r
-vfrStatementGoto :\r
-  <<\r
-     UINT8               RefType = 1;\r
-     EFI_STRING_ID       DevPath;\r
-     EFI_GUID            FSId;\r
-     EFI_FORM_ID         FId;\r
-        EFI_QUESTION_ID     QId    = EFI_QUESTION_ID_INVALID;\r
-     UINT32              BitMask;\r
-     CIfrQuestionHeader  *QHObj = NULL;\r
-     CIfrRef             *R1Obj = NULL;\r
-     CIfrRef2            *R2Obj = NULL;\r
-     CIfrRef3            *R3Obj = NULL;\r
-     CIfrRef4            *R4Obj = NULL;\r
-  >>\r
-  G:Goto\r
-  (\r
-    (\r
-      DevicePath "=" "STRING_TOKEN" "\(" P:Number "\)" ","\r
-      FormSetGuid "=" guidDefinition[FSId] ","\r
-      FormId "=" F1:Number ","\r
-      Question "=" QN1:Number ","\r
-                                                       <<\r
-                                                          RefType = 4;\r
-                                                          DevPath = _STOSID(P->getText());\r
-                                                          FId = _STOFID(F1->getText());\r
-                                                          QId = _STOQID(QN1->getText());\r
-                                                       >>\r
-    )\r
-    |\r
-    (\r
-      FormSetGuid "=" guidDefinition[FSId] ","\r
-      FormId "=" F2:Number ","\r
-      Question "=" QN2:Number ","\r
-                                                       <<\r
-                                                          RefType = 3;\r
-                                                          FId = _STOFID(F2->getText());\r
-                                                          QId = _STOQID(QN2->getText());\r
-                                                       >>\r
-    )\r
-    |\r
-    (\r
-      FormId "=" F3:Number ","                         << RefType = 2; FId = _STOFID(F3->getText()); >>\r
-      Question "="\r
-      (\r
-          QN3:StringIdentifier ","                     << mCVfrQuestionDB.GetQuestionId (QN3->getText (), NULL, QId, BitMask); >>\r
-        | QN4:Number ","                               << QId = _STOQID(QN4->getText()); >>\r
-      )\r
-    )\r
-    |\r
-    (\r
-      F4:Number ","                                    <<\r
-                                                          RefType = 1;\r
-                                                          FId = _STOFID(F4->getText());\r
-                                                       >>\r
-    )\r
-  )\r
-                                                       <<\r
-                                                          switch (RefType) {\r
-                                                          case 4:\r
-                                                            {\r
-                                                              R4Obj = new CIfrRef4;\r
-                                                              QHObj = R4Obj;\r
-                                                              R4Obj->SetLineNo(G->getLine());\r
-                                                              R4Obj->SetDevicePath (DevPath);\r
-                                                              R4Obj->SetFormSetId (FSId);\r
-                                                              R4Obj->SetFormId (FId);\r
-                                                              R4Obj->SetQuestionId (QId);\r
-                                                              break;\r
-                                                            }\r
-                                                          case 3:\r
-                                                            {\r
-                                                              R3Obj = new CIfrRef3;\r
-                                                              QHObj = R3Obj;\r
-                                                              R3Obj->SetLineNo(G->getLine());\r
-                                                              R3Obj->SetFormSetId (FSId);\r
-                                                              R3Obj->SetFormId (FId);\r
-                                                              R3Obj->SetQuestionId (QId);\r
-                                                              break;\r
-                                                            }\r
-                                                          case 2:\r
-                                                            {\r
-                                                              R2Obj = new CIfrRef2;\r
-                                                              QHObj = R2Obj;\r
-                                                              R2Obj->SetLineNo(G->getLine());\r
-                                                              R2Obj->SetFormId (FId);\r
-                                                              _PCATCH(R2Obj->SetQuestionId (QId), QN3);\r
-                                                              break;\r
-                                                            }\r
-                                                          case 1:\r
-                                                            {\r
-                                                              R1Obj = new CIfrRef;\r
-                                                              QHObj = R1Obj;\r
-                                                              R1Obj->SetLineNo(G->getLine());\r
-                                                              R1Obj->SetFormId (FId);\r
-                                                              break;\r
-                                                            }\r
-                                                          default: break;\r
-                                                          }\r
-                                                       >>\r
-  vfrQuestionHeaderWithNoStorage[QHObj]\r
-  { "," vfrStatementStatTagList }\r
-  { "," F:FLAGS  "=" vfrGotoFlags[QHObj, F->getLine()] }\r
-  {\r
-    "," Key "=" KN:Number                              << AssignQuestionKey (*QHObj, KN); >>\r
-  }\r
-  ";"                                                  << if (R1Obj != NULL) {delete R1Obj;} if (R2Obj != NULL) {delete R2Obj;} if (R3Obj != NULL) {delete R3Obj;} if (R4Obj != NULL) {delete R4Obj;} >>\r
-  ;\r
-\r
-vfrGotoFlags [CIfrQuestionHeader *QHObj, UINT32 LineNum] :\r
-  << UINT8 HFlags = 0; >>\r
-  gotoFlagsField[HFlags] ( "\|" gotoFlagsField[HFlags] )*\r
-                                                       << _PCATCH(QHObj->SetFlags (HFlags), LineNum); >>\r
-  ;\r
-\r
-gotoFlagsField[UINT8 & HFlags] :\r
-    N:Number                                           << _PCATCH(_STOU8(N->getText()) == 0 ? VFR_RETURN_SUCCESS : VFR_RETURN_UNSUPPORTED, N->getLine()); >>\r
-  | questionheaderFlagsField[HFlags]\r
-  ;\r
-\r
-getStringId :\r
-  "STRING_TOKEN" "\("\r
-  IdVal:Number\r
-  "\)"\r
-  ;\r
-\r
-vfrStatementResetButton :\r
-  <<\r
-     CIfrResetButton RBObj;\r
-     UINT16          DefaultId;\r
-  >>\r
-  L:ResetButton                                        << RBObj.SetLineNo(L->getLine()); >>\r
-  DefaultStore\r
-  "=" N:StringIdentifier ","                           <<\r
-                                                          _PCATCH(mCVfrDefaultStore.GetDefaultId (N->getText(), &DefaultId), N->getLine());\r
-                                                          RBObj.SetDefaultId (DefaultId);\r
-                                                       >>\r
-  vfrStatementHeader[&RBObj] ","\r
-  { vfrStatementStatTagList "," }\r
-  E:EndResetButton                                     << CRT_END_OP (E); >>\r
-  ";"\r
-  ;\r
-\r
-vfrStatementBooleanType :\r
-  vfrStatementCheckBox |\r
-  vfrStatementAction\r
-  ;\r
-\r
-//*****************************************************\r
-// Syntax of checkbox\r
-//\r
-// Example:\r
-//   checkbox\r
-//     varid       = MySTestData.mField1,\r
-//     prompt      = STRING_TOKEN(STR_CHECK_BOX_PROMPT),\r
-//     help        = STRING_TOKEN(STR_CHECK_BOX_HELP),\r
-//     flags       = CHECKBOX_DEFAULT | CALLBACK,\r
-//     default value = TRUE, defaultstore = MyDefaultStore,\r
-//   endcheckbox;\r
-//\r
-vfrStatementCheckBox :\r
-  <<\r
-     CIfrCheckBox       CBObj;\r
-     EFI_IFR_TYPE_VALUE Val = {0};\r
-     INT8               *VarStoreName = NULL;\r
-  >>\r
-  L:CheckBox                                           << CBObj.SetLineNo(L->getLine()); >>\r
-  vfrQuestionHeader[CBObj] ","\r
-  {\r
-    F:FLAGS "=" vfrCheckBoxFlags[CBObj, F->getLine()] ","\r
-                                                       <<\r
-                                                          _PCATCH(mCVfrDataStorage.GetVarStoreName (_GET_CURRQEST_VARTINFO().mVarStoreId, &VarStoreName), VFR_RETURN_SUCCESS, L, "Failed to retrieve varstore name");\r
-                                                          Val.b = TRUE;\r
-                                                          if (CBObj.GetFlags () & 0x01) {\r
-                                                            _PCATCH(\r
-                                                              mCVfrDefaultStore.BufferVarStoreAltConfigAdd (\r
-                                                                                  EFI_HII_DEFAULT_CLASS_STANDARD,\r
-                                                                                  _GET_CURRQEST_VARTINFO(),\r
-                                                                                  VarStoreName,\r
-                                                                                  _GET_CURRQEST_DATATYPE (),\r
-                                                                                  Val\r
-                                                                                  ),\r
-                                                              VFR_RETURN_SUCCESS,\r
-                                                              L,\r
-                                                              "No standard default storage found"\r
-                                                              );\r
-                                                          }\r
-                                                          if (CBObj.GetFlags () & 0x02) {\r
-                                                            _PCATCH(\r
-                                                              mCVfrDefaultStore.BufferVarStoreAltConfigAdd (\r
-                                                                                  EFI_HII_DEFAULT_CLASS_MANUFACTURING,\r
-                                                                                  _GET_CURRQEST_VARTINFO(),\r
-                                                                                  VarStoreName,\r
-                                                                                  _GET_CURRQEST_DATATYPE (),\r
-                                                                                  Val\r
-                                                                                  ),\r
-                                                              VFR_RETURN_SUCCESS,\r
-                                                              L,\r
-                                                              "No manufacturing default storage found"\r
-                                                              );\r
-                                                                                                                 }\r
-                                                                                                          >>\r
-  }\r
-  {\r
-    Key "=" KN:Number  ","                             << AssignQuestionKey (CBObj, KN); >>\r
-  }\r
-  vfrStatementQuestionOptionList\r
-  E:EndCheckBox                                        << CRT_END_OP (E); >>\r
-  ";"\r
-  ;\r
-\r
-vfrCheckBoxFlags [CIfrCheckBox & CBObj, UINT32 LineNum] :\r
-  <<\r
-     UINT8 LFlags = 0;\r
-     UINT8 HFlags = 0;\r
-  >>\r
-  checkboxFlagsField[LFlags, HFlags] ( "\|" checkboxFlagsField[LFlags, HFlags] )*\r
-                                                       << _PCATCH(CBObj.SetFlags (HFlags, LFlags), LineNum); >>\r
-  ;\r
-\r
-checkboxFlagsField[UINT8 & LFlags, UINT8 & HFlags] :\r
-    N:Number                                           << _PCATCH(_STOU8(N->getText()) == 0 ? VFR_RETURN_SUCCESS : VFR_RETURN_UNSUPPORTED, N->getLine()); >>\r
-  | "CHECKBOX_DEFAULT"                                 << $LFlags |= 0x01; >>\r
-  | "CHECKBOX_DEFAULT_MFG"                             << $LFlags |= 0x02; >>\r
-  | questionheaderFlagsField[HFlags]\r
-  ;\r
-\r
-//*****************************************************\r
-// Syntax of action\r
-//\r
-// Example:\r
-//   action\r
-//     prompt      = STRING_TOKEN(STR_ACTION_PROMPT),\r
-//     help        = STRING_TOKEN(STR_ACTION_HELP),\r
-//     flags       = CALLBACK,\r
-//     config      = STRING_TOKEN(STR_ACTION_CONFIG),\r
-//   endaction;\r
-//\r
-vfrStatementAction :\r
-  << CIfrAction AObj; >>\r
-  L:Action                                             << AObj.SetLineNo(L->getLine()); >>\r
-  vfrQuestionHeaderWithNoStorage[&AObj] ","\r
-  { F:FLAGS "=" vfrActionFlags[AObj, F->getLine()] "," }\r
-  Config "=" "STRING_TOKEN" "\(" S:Number "\)" ","     << AObj.SetQuestionConfig (_STOSID(S->getText())); >>\r
-  vfrStatementQuestionTagList\r
-  E:EndAction                                          << CRT_END_OP (E); >>\r
-  ";"\r
-  ;\r
-\r
-vfrActionFlags[CIfrAction & AObj, UINT32 LineNum] :\r
-  << UINT8 HFlags = 0; >>\r
-  actionFlagsField[HFlags] ( "\|" actionFlagsField[HFlags] )*\r
-                                                       << _PCATCH(AObj.SetFlags (HFlags), LineNum); >>\r
-  ;\r
-\r
-actionFlagsField[UINT8 & HFlags] :\r
-    N:Number                                           << _PCATCH(_STOU8(N->getText()) == 0 ? VFR_RETURN_SUCCESS : VFR_RETURN_UNSUPPORTED, N->getLine()); >>\r
-  | questionheaderFlagsField[HFlags]\r
-  ;\r
-\r
-vfrStatementDate :\r
-  <<\r
-     EFI_QUESTION_ID    QId          = EFI_QUESTION_ID_INVALID;\r
-     INT8               *VarIdStr[3] = {NULL, };\r
-     CIfrDate           DObj;\r
-     EFI_IFR_TYPE_VALUE Val = {0};\r
-  >>\r
-  L:Date                                               << DObj.SetLineNo(L->getLine()); >>\r
-  (\r
-    (\r
-      vfrQuestionHeader[DObj, QUESTION_DATE] ","\r
-         { F:FLAGS "=" vfrDateFlags[DObj, F->getLine()] "," }\r
-      vfrStatementQuestionOptionList\r
-    )\r
-    |\r
-    (\r
-      Year VarId "=" D1:StringIdentifier "." D1Y:StringIdentifier ","\r
-                                                       << _STRCAT(&VarIdStr[0], D1->getText()); _STRCAT(&VarIdStr[0], "."); _STRCAT(&VarIdStr[0], D1Y->getText()); >>\r
-      Prompt "=" "STRING_TOKEN" "\(" YP:Number "\)" ","\r
-      Help   "=" "STRING_TOKEN" "\(" YH:Number "\)" ","\r
-      minMaxDateStepDefault[Val.date, 0]\r
-\r
-      Month VarId "=" D2:StringIdentifier "." D2M:StringIdentifier ","\r
-                                                       << _STRCAT(&VarIdStr[1], D2->getText()); _STRCAT(&VarIdStr[1], "."); _STRCAT(&VarIdStr[1], D2M->getText()); >>\r
-      Prompt "=" "STRING_TOKEN" "\(" MP:Number "\)" ","\r
-      Help   "=" "STRING_TOKEN" "\(" MH:Number "\)" ","\r
-      minMaxDateStepDefault[Val.date, 1]\r
-\r
-      Day VarId "=" D3:StringIdentifier "." D3D:StringIdentifier ","\r
-                                                       << _STRCAT(&VarIdStr[2], D3->getText()); _STRCAT(&VarIdStr[2], "."); _STRCAT(&VarIdStr[2], D3D->getText()); >>\r
-      Prompt "=" "STRING_TOKEN" "\(" DP:Number "\)" ","\r
-      Help   "=" "STRING_TOKEN" "\(" DH:Number "\)" ","\r
-      minMaxDateStepDefault[Val.date, 2]\r
-                                                       <<\r
-                                                          mCVfrQuestionDB.RegisterOldDateQuestion (VarIdStr[0], VarIdStr[1], VarIdStr[2], QId);\r
-                                                          DObj.SetQuestionId (QId);\r
-                                                          DObj.SetFlags (EFI_IFR_QUESTION_FLAG_DEFAULT, QF_DATE_STORAGE_TIME);\r
-                                                                                                                 DObj.SetPrompt (_STOSID(YP->getText()));\r
-                                                                                                                 DObj.SetHelp (_STOSID(YH->getText()));\r
-                                                                                                                 if (VarIdStr[0] != NULL) { delete VarIdStr[0]; } if (VarIdStr[1] != NULL) { delete VarIdStr[1]; } if (VarIdStr[2] != NULL) { delete VarIdStr[2]; }\r
-                                                       >>\r
-                                                          << {CIfrDefault DObj(EFI_HII_DEFAULT_CLASS_STANDARD, EFI_IFR_TYPE_DATE, Val); DObj.SetLineNo (D1Y->getLine());} >>\r
-      ( vfrStatementInconsistentIf )*\r
-    )\r
-  )\r
-  E:EndDate                                            << CRT_END_OP (E); >>\r
-  ";"\r
-  ;\r
-\r
-minMaxDateStepDefault[EFI_HII_DATE & D, UINT8 KeyValue] :\r
-  Minimum   "=" Number ","\r
-  Maximum   "=" Number ","\r
-  { "step"    "=" Number "," }\r
-  {\r
-    "default" "=" N:Number ","                         <<\r
-                                                          switch (KeyValue) {\r
-                                                          case 0: D.Year  = _STOU16(N->getText()); break;\r
-                                                          case 1: D.Month = _STOU8(N->getText()); break;\r
-                                                          case 2: D.Day   = _STOU8(N->getText()); break;\r
-                                                                                                                 }\r
-                                                       >>\r
-  }\r
-  ;\r
-\r
-vfrDateFlags [CIfrDate & DObj, UINT32 LineNum] :\r
-  << UINT8 LFlags = 0; >>\r
-  dateFlagsField[LFlags] ( "\|" dateFlagsField[LFlags] )*\r
-                                                       << _PCATCH(DObj.SetFlags (EFI_IFR_QUESTION_FLAG_DEFAULT, LFlags), LineNum); >>\r
-  ;\r
-\r
-dateFlagsField [UINT8 & Flags] :\r
-    N:Number                                           << $Flags |= _STOU8(N->getText()); >>\r
-  | "YEAR_SUPPRESS"                                    << $Flags |= 0x01; >>\r
-  | "MONTH_SUPPRESS"                                   << $Flags |= 0x02; >>\r
-  | "DAY_SUPPRESS"                                     << $Flags |= 0x04; >>\r
-  | "STORAGE_NORMAL"                                   << $Flags |= 0x00; >>\r
-  | "STORAGE_TIME"                                     << $Flags |= 0x10; >>\r
-  | "STORAGE_WAKEUP"                                   << $Flags |= 0x20; >>\r
-  ;\r
-\r
-vfrStatementNumericType :\r
-  vfrStatementNumeric   |\r
-  vfrStatementOneOf\r
-  ;\r
-\r
-vfrSetMinMaxStep[CIfrMinMaxStepData & MMSDObj] :\r
-  <<\r
-     UINT64 MaxU8 = 0, MinU8 = 0, StepU8 = 0;\r
-     UINT32 MaxU4 = 0, MinU4 = 0, StepU4 = 0;\r
-     UINT16 MaxU2 = 0, MinU2 = 0, StepU2 = 0;\r
-     UINT8  MaxU1 = 0, MinU1 = 0, StepU1 = 0;\r
-  >>\r
-  Minimum   "=" I:Number ","\r
-                                                       <<\r
-                                                          switch (_GET_CURRQEST_DATATYPE ()) {\r
-                                                          case EFI_IFR_TYPE_NUM_SIZE_64 : MinU8 = _STOU64(I->getText()); break;\r
-                                                          case EFI_IFR_TYPE_NUM_SIZE_32 : MinU4 = _STOU32(I->getText()); break;\r
-                                                          case EFI_IFR_TYPE_NUM_SIZE_16 : MinU2 = _STOU16(I->getText()); break;\r
-                                                          case EFI_IFR_TYPE_NUM_SIZE_8 :  MinU1 = _STOU8(I->getText());  break;\r
-                                                          }\r
-                                                                                                          >>\r
-  Maximum   "=" A:Number ","\r
-                                                       <<\r
-                                                          switch (_GET_CURRQEST_DATATYPE ()) {\r
-                                                          case EFI_IFR_TYPE_NUM_SIZE_64 : MaxU8 = _STOU64(A->getText()); break;\r
-                                                          case EFI_IFR_TYPE_NUM_SIZE_32 : MaxU4 = _STOU32(A->getText()); break;\r
-                                                          case EFI_IFR_TYPE_NUM_SIZE_16 : MaxU2 = _STOU16(A->getText()); break;\r
-                                                          case EFI_IFR_TYPE_NUM_SIZE_8 :  MaxU1 = _STOU8(A->getText());  break;\r
-                                                          }\r
-                                                                                                          >>\r
-  {\r
-    STEP    "=" S:Number ","\r
-                                                       <<\r
-                                                          switch (_GET_CURRQEST_DATATYPE ()) {\r
-                                                          case EFI_IFR_TYPE_NUM_SIZE_64 : StepU8 = _STOU64(S->getText()); break;\r
-                                                          case EFI_IFR_TYPE_NUM_SIZE_32 : StepU4 = _STOU32(S->getText()); break;\r
-                                                          case EFI_IFR_TYPE_NUM_SIZE_16 : StepU2 = _STOU16(S->getText()); break;\r
-                                                          case EFI_IFR_TYPE_NUM_SIZE_8 :  StepU1 = _STOU8(S->getText());  break;\r
-                                                          }\r
-                                                                                                          >>\r
-  }\r
-                                                       <<\r
-                                                          switch (_GET_CURRQEST_DATATYPE ()) {\r
-                                                          case EFI_IFR_TYPE_NUM_SIZE_64 : $MMSDObj.SetMinMaxStepData (MinU8, MaxU8, StepU8); break;\r
-                                                          case EFI_IFR_TYPE_NUM_SIZE_32 : $MMSDObj.SetMinMaxStepData (MinU4, MaxU4, StepU4); break;\r
-                                                          case EFI_IFR_TYPE_NUM_SIZE_16 : $MMSDObj.SetMinMaxStepData (MinU2, MaxU2, StepU2); break;\r
-                                                          case EFI_IFR_TYPE_NUM_SIZE_8 :  $MMSDObj.SetMinMaxStepData (MinU1, MaxU1, StepU1);  break;\r
-                                                          }\r
-                                                                                                          >>\r
-  ;\r
-\r
-vfrStatementNumeric :\r
-  <<\r
-     CIfrNumeric NObj;\r
-  >>\r
-  L:Numeric                                            << NObj.SetLineNo(L->getLine()); >>\r
-  vfrQuestionHeader[NObj] ","                          << _PCATCH(NObj.SetFlags (NObj.FLAGS(), _GET_CURRQEST_DATATYPE()), L->getLine()); >>\r
-  { F:FLAGS "=" vfrNumericFlags[NObj, F->getLine()] "," }\r
-  {\r
-    Key   "=" KN:Number ","                            << AssignQuestionKey (NObj, KN); >>\r
-  }\r
-  vfrSetMinMaxStep[NObj]\r
-  vfrStatementQuestionOptionList\r
-  E:EndNumeric                                         << CRT_END_OP (E); >>\r
-  ";"\r
-  ;\r
-\r
-vfrNumericFlags [CIfrNumeric & NObj, UINT32 LineNum] :\r
-  <<\r
-     UINT8 LFlags = _GET_CURRQEST_DATATYPE() & EFI_IFR_NUMERIC_SIZE;\r
-     UINT8 HFlags = 0;\r
-     EFI_VFR_VARSTORE_TYPE VarStoreType = EFI_VFR_VARSTORE_INVALID;\r
-  >>\r
-  numericFlagsField[HFlags, LFlags] ( "\|" numericFlagsField[HFlags, LFlags] )*\r
-                                                       <<\r
-                                                          //check data type flag\r
-                                                          VarStoreType = mCVfrDataStorage.GetVarStoreType (_GET_CURRQEST_VARTINFO().mVarStoreId);\r
-                                                          if (VarStoreType == EFI_VFR_VARSTORE_BUFFER || VarStoreType == EFI_VFR_VARSTORE_EFI) {\r
-                                                            if (_GET_CURRQEST_DATATYPE() != (LFlags & EFI_IFR_NUMERIC_SIZE)) {\r
-                                                              _PCATCH(VFR_RETURN_INVALID_PARAMETER, LineNum, "Numeric Flag is not same to Numeric VarData type");\r
-                                                            }\r
-                                                          } else {\r
-                                                            // update data type for name/value store\r
-                                                            UINT32 DataTypeSize;\r
-                                                            _GET_CURRQEST_VARTINFO().mVarType = LFlags & EFI_IFR_NUMERIC_SIZE;\r
-                                                            mCVfrVarDataTypeDB.GetDataTypeSize (_GET_CURRQEST_DATATYPE(), &DataTypeSize);\r
-                                                            _GET_CURRQEST_VARTINFO().mVarTotalSize = DataTypeSize;\r
-                                                          }\r
-                                                          _PCATCH(NObj.SetFlags (HFlags, LFlags), LineNum);\r
-                                                       >>\r
-  ;\r
-\r
-numericFlagsField [UINT8 & HFlags, UINT8 & LFlags] :\r
-    N:Number                                           << _PCATCH(_STOU8(N->getText()) == 0 ? VFR_RETURN_SUCCESS : VFR_RETURN_UNSUPPORTED, N->getLine()); >>\r
-  | "NUMERIC_SIZE_1"                                   << $LFlags = ($LFlags & ~EFI_IFR_NUMERIC_SIZE) | EFI_IFR_NUMERIC_SIZE_1; >>\r
-  | "NUMERIC_SIZE_2"                                   << $LFlags = ($LFlags & ~EFI_IFR_NUMERIC_SIZE) | EFI_IFR_NUMERIC_SIZE_2; >>\r
-  | "NUMERIC_SIZE_4"                                   << $LFlags = ($LFlags & ~EFI_IFR_NUMERIC_SIZE) | EFI_IFR_NUMERIC_SIZE_4; >>\r
-  | "NUMERIC_SIZE_8"                                   << $LFlags = ($LFlags & ~EFI_IFR_NUMERIC_SIZE) | EFI_IFR_NUMERIC_SIZE_8; >>\r
-  | "DISPLAY_INT_DEC"                                  << $LFlags = ($LFlags & ~EFI_IFR_DISPLAY) | EFI_IFR_DISPLAY_INT_DEC; >>\r
-  | "DISPLAY_UINT_DEC"                                 << $LFlags = ($LFlags & ~EFI_IFR_DISPLAY) | EFI_IFR_DISPLAY_UINT_DEC; >>\r
-  | "DISPLAY_UINT_HEX"                                 << $LFlags = ($LFlags & ~EFI_IFR_DISPLAY) | EFI_IFR_DISPLAY_UINT_HEX; >>\r
-  | questionheaderFlagsField[HFlags]\r
-  ;\r
-\r
-vfrStatementOneOf :\r
-  <<\r
-     CIfrOneOf OObj;\r
-  >>\r
-  L:OneOf                                              << OObj.SetLineNo(L->getLine()); >>\r
-  vfrQuestionHeader[OObj] ","                          << _PCATCH(OObj.SetFlags (OObj.FLAGS(), _GET_CURRQEST_DATATYPE()), L->getLine()); >>\r
-  { F:FLAGS "=" vfrOneofFlagsField[OObj, F->getLine()] "," }\r
-  {\r
-    vfrSetMinMaxStep[OObj]\r
-  }\r
-  vfrStatementQuestionOptionList\r
-  E:EndOneOf                                           << CRT_END_OP (E); >>\r
-  ";"\r
-  ;\r
-\r
-vfrOneofFlagsField [CIfrOneOf & OObj, UINT32 LineNum] :\r
-  <<\r
-     UINT8 LFlags = _GET_CURRQEST_DATATYPE() & EFI_IFR_NUMERIC_SIZE;\r
-     UINT8 HFlags = 0;\r
-     EFI_VFR_VARSTORE_TYPE VarStoreType = EFI_VFR_VARSTORE_INVALID;\r
-  >>\r
-  numericFlagsField[HFlags, LFlags] ( "\|" numericFlagsField[HFlags, LFlags] )*\r
-                                                       <<\r
-                                                          //check data type flag\r
-                                                          VarStoreType = mCVfrDataStorage.GetVarStoreType (_GET_CURRQEST_VARTINFO().mVarStoreId);\r
-                                                          if (VarStoreType == EFI_VFR_VARSTORE_BUFFER || VarStoreType == EFI_VFR_VARSTORE_EFI) {\r
-                                                            if (_GET_CURRQEST_DATATYPE() != (LFlags & EFI_IFR_NUMERIC_SIZE)) {\r
-                                                              _PCATCH(VFR_RETURN_INVALID_PARAMETER, LineNum, "Numeric Flag is not same to Numeric VarData type");\r
-                                                            }\r
-                                                          } else {\r
-                                                            // update data type for Name/Value store\r
-                                                            UINT32 DataTypeSize;\r
-                                                            _GET_CURRQEST_VARTINFO().mVarType = LFlags & EFI_IFR_NUMERIC_SIZE;\r
-                                                            mCVfrVarDataTypeDB.GetDataTypeSize (_GET_CURRQEST_DATATYPE(), &DataTypeSize);\r
-                                                            _GET_CURRQEST_VARTINFO().mVarTotalSize = DataTypeSize;\r
-                                                          }\r
-                                                          _PCATCH(OObj.SetFlags (HFlags, LFlags), LineNum);\r
-                                                       >>\r
-  ;\r
-\r
-vfrStatementStringType :\r
-  vfrStatementString    |\r
-  vfrStatementPassword\r
-  ;\r
-\r
-vfrStatementString :\r
-  <<\r
-     CIfrString SObj;\r
-  >>\r
-  L:String                                             << SObj.SetLineNo(L->getLine()); >>\r
-  vfrQuestionHeader[SObj] ","\r
-  { F:FLAGS "=" vfrStringFlagsField[SObj, F->getLine()] "," }\r
-  {\r
-    Key "=" KN:Number ","                              << AssignQuestionKey (SObj, KN); >>\r
-  }\r
-  MinSize "=" MIN:Number ","                           << SObj.SetMinSize (_STOU8(MIN->getText())); >>\r
-  MaxSize "=" MAX:Number ","                           << SObj.SetMaxSize (_STOU8(MAX->getText())); >>\r
-  vfrStatementQuestionOptionList\r
-  E:EndString                                          << CRT_END_OP (E); >>\r
-  ";"\r
-  ;\r
-\r
-vfrStringFlagsField [CIfrString & SObj, UINT32 LineNum] :\r
-  <<\r
-     UINT8 LFlags = 0;\r
-     UINT8 HFlags = 0;\r
-  >>\r
-  stringFlagsField[HFlags, LFlags] ( "\|" stringFlagsField[HFlags, LFlags] )*\r
-                                                       << _PCATCH(SObj.SetFlags (HFlags, LFlags), LineNum); >>\r
-  ;\r
-\r
-stringFlagsField [UINT8 & HFlags, UINT8 & LFlags] :\r
-    N:Number                                           << _PCATCH(_STOU8(N->getText()) == 0 ? VFR_RETURN_SUCCESS : VFR_RETURN_UNSUPPORTED, N->getLine()); >>\r
-  | "MULTI_LINE"                                       << $LFlags = 0x01; >>\r
-  | questionheaderFlagsField[HFlags]\r
-  ;\r
-\r
-vfrStatementPassword :\r
-  <<\r
-     CIfrPassword PObj;\r
-  >>\r
-  L:Password                                           << PObj.SetLineNo(L->getLine()); >>\r
-  vfrQuestionHeader[PObj] ","\r
-  { F:FLAGS "=" vfrPasswordFlagsField[PObj, F->getLine()] "," }\r
-  {\r
-    Key "=" KN:Number ","                              << AssignQuestionKey (PObj, KN); >>\r
-  }\r
-  MinSize "=" MIN:Number ","                           << PObj.SetMinSize (_STOU16(MIN->getText())); >>\r
-  MaxSize "=" MAX:Number ","                           << PObj.SetMaxSize (_STOU16(MAX->getText())); >>\r
-  { Encoding "=" Number "," }\r
-  vfrStatementQuestionOptionList\r
-  E:EndPassword                                        << CRT_END_OP (E); >>\r
-  ";"\r
-  ;\r
-\r
-vfrPasswordFlagsField [CIfrPassword & PObj, UINT32 LineNum] :\r
-  << UINT8 HFlags = 0; >>\r
-  passwordFlagsField[HFlags] ( "\|" passwordFlagsField[HFlags] )*\r
-                                                       << _PCATCH(PObj.SetFlags(HFlags), LineNum); >>\r
-  ;\r
-\r
-passwordFlagsField [UINT8 & HFlags] :\r
-    N:Number                                           << _PCATCH(_STOU8(N->getText()) == 0 ? VFR_RETURN_SUCCESS : VFR_RETURN_UNSUPPORTED, N->getLine()); >>\r
-  | questionheaderFlagsField[HFlags]\r
-  ;\r
-\r
-vfrStatementOrderedList :\r
-  <<\r
-     CIfrOrderedList OLObj;\r
-  >>\r
-  L:OrderedList                                        << OLObj.SetLineNo(L->getLine()); >>\r
-  vfrQuestionHeader[OLObj] ","\r
-                                                       << OLObj.SetMaxContainers ((UINT8)_GET_CURRQEST_ARRAY_SIZE()); >>\r
-  {\r
-    MaxContainers "=" M:Number ","                     << OLObj.SetMaxContainers (_STOU8(M->getText())); >>\r
-  }\r
-  { F:FLAGS "=" vfrOrderedListFlags[OLObj, F->getLine()] }\r
-  vfrStatementQuestionOptionList\r
-  E:EndList                                            << CRT_END_OP (E); >>\r
-  ";"\r
-  ;\r
-\r
-vfrOrderedListFlags [CIfrOrderedList & OLObj, UINT32 LineNum] :\r
-  <<\r
-     UINT8 HFlags = 0;\r
-     UINT8 LFlags = 0;\r
-  >>\r
-  orderedlistFlagsField[HFlags, LFlags] ( "\|" orderedlistFlagsField[HFlags, LFlags] )*\r
-                                                       << _PCATCH(OLObj.SetFlags (HFlags, LFlags), LineNum); >>\r
-  ;\r
-\r
-orderedlistFlagsField [UINT8 & HFlags, UINT8 & LFlags] :\r
-    N:Number                                           << _PCATCH(_STOU8(N->getText()) == 0 ? VFR_RETURN_SUCCESS : VFR_RETURN_UNSUPPORTED, N->getLine()); >>\r
-  | "UNIQUE"                                           << $LFlags |= 0x01; >>\r
-  | "NOEMPTY"                                          << $LFlags |= 0x02; >>\r
-  | questionheaderFlagsField[HFlags]\r
-  ;\r
-\r
-vfrStatementTime :\r
-  <<\r
-     EFI_QUESTION_ID    QId          = EFI_QUESTION_ID_INVALID;\r
-     INT8               *VarIdStr[3] = {NULL, };\r
-     CIfrTime           TObj;\r
-     EFI_IFR_TYPE_VALUE Val = {0};\r
-  >>\r
-  L:Time                                               << TObj.SetLineNo(L->getLine()); >>\r
-  (\r
-    (\r
-      vfrQuestionHeader[TObj, QUESTION_TIME] ","\r
-         { F:FLAGS "=" vfrTimeFlags[TObj, F->getLine()] "," }\r
-      vfrStatementQuestionOptionList\r
-    )\r
-    |\r
-    (\r
-      Hour VarId "=" T1:StringIdentifier "." T1H:StringIdentifier ","\r
-                                                       << _STRCAT(&VarIdStr[0], T1->getText()); _STRCAT(&VarIdStr[0], "."); _STRCAT(&VarIdStr[0], T1H->getText()); >>\r
-      Prompt "=" "STRING_TOKEN" "\(" HP:Number "\)" ","\r
-      Help   "=" "STRING_TOKEN" "\(" HH:Number "\)" ","\r
-      minMaxTimeStepDefault[Val.time, 0]\r
-\r
-      Minute VarId "=" T2:StringIdentifier "." T2M:StringIdentifier ","\r
-                                                       << _STRCAT(&VarIdStr[1], T2->getText()); _STRCAT(&VarIdStr[1], "."); _STRCAT(&VarIdStr[1], T2M->getText()); >>\r
-      Prompt "=" "STRING_TOKEN" "\(" MP:Number "\)" ","\r
-      Help   "=" "STRING_TOKEN" "\(" MH:Number "\)" ","\r
-      minMaxTimeStepDefault[Val.time, 1]\r
-\r
-      Second VarId "=" T3:StringIdentifier "." T3S:StringIdentifier ","\r
-                                                       << _STRCAT(&VarIdStr[2], T3->getText()); _STRCAT(&VarIdStr[2], "."); _STRCAT(&VarIdStr[2], T3S->getText()); >>\r
-      Prompt "=" "STRING_TOKEN" "\(" SP:Number "\)" ","\r
-      Help   "=" "STRING_TOKEN" "\(" SH:Number "\)" ","\r
-      minMaxTimeStepDefault[Val.time, 2]\r
-                                                       <<\r
-                                                          mCVfrQuestionDB.RegisterOldTimeQuestion (VarIdStr[0], VarIdStr[1], VarIdStr[2], QId);\r
-                                                          TObj.SetQuestionId (QId);\r
-                                                          TObj.SetFlags (EFI_IFR_QUESTION_FLAG_DEFAULT, QF_TIME_STORAGE_TIME);\r
-                                                                                                                 TObj.SetPrompt (_STOSID(HP->getText()));\r
-                                                                                                                 TObj.SetHelp (_STOSID(HH->getText()));\r
-                                                                                                                 if (VarIdStr[0] != NULL) { delete VarIdStr[0]; } if (VarIdStr[1] != NULL) { delete VarIdStr[1]; } if (VarIdStr[2] != NULL) { delete VarIdStr[2]; }\r
-                                                       >>\r
-                                                       << {CIfrDefault DObj(EFI_HII_DEFAULT_CLASS_STANDARD, EFI_IFR_TYPE_TIME, Val); DObj.SetLineNo (T1H->getLine());} >>\r
-    )\r
-  )\r
-  E:EndTime                                            << CRT_END_OP (E); >>\r
-  ";"\r
-  ;\r
-\r
-minMaxTimeStepDefault[EFI_HII_TIME & T, UINT8 KeyValue] :\r
-  Minimum   "=" Number ","\r
-  Maximum   "=" Number ","\r
-  { "step"    "=" Number "," }\r
-  {\r
-    "default" "=" N:Number ","                         <<\r
-                                                          switch (KeyValue) {\r
-                                                          case 0: T.Hour   = _STOU8(N->getText()); break;\r
-                                                          case 1: T.Minute = _STOU8(N->getText()); break;\r
-                                                          case 2: T.Second = _STOU8(N->getText()); break;\r
-                                                                                                                 }\r
-                                                       >>\r
-  }\r
-  ;\r
-\r
-vfrTimeFlags [CIfrTime & TObj, UINT32 LineNum] :\r
-  << UINT8 LFlags = 0; >>\r
-  timeFlagsField[LFlags] ( "\|" timeFlagsField[LFlags] )*\r
-                                                       << _PCATCH(TObj.SetFlags(EFI_IFR_QUESTION_FLAG_DEFAULT, LFlags), LineNum); >>\r
-  ;\r
-\r
-timeFlagsField [UINT8 & Flags] :\r
-    N:Number                                           << $Flags |= _STOU8(N->getText()); >>\r
-  | "HOUR_SUPPRESS"                                    << $Flags |= 0x01; >>\r
-  | "MINUTE_SUPPRESS"                                  << $Flags |= 0x02; >>\r
-  | "SECOND_SUPPRESS"                                  << $Flags |= 0x04; >>\r
-  | "STORAGE_NORMAL"                                   << $Flags |= 0x00; >>\r
-  | "STORAGE_TIME"                                     << $Flags |= 0x10; >>\r
-  | "STORAGE_WAKEUP"                                   << $Flags |= 0x20; >>\r
-  ;\r
-\r
-vfrStatementQuestionTag :\r
-  vfrStatementStatTag ","       |\r
-  vfrStatementInconsistentIf    |\r
-  vfrStatementNoSubmitIf        |\r
-  vfrStatementDisableIfQuest    |\r
-  vfrStatementRefresh           |\r
-  vfrStatementVarstoreDevice\r
-  ;\r
-\r
-vfrStatementQuestionTagList :\r
-  ( vfrStatementQuestionTag )*\r
-  ;\r
-\r
-vfrStatementQuestionOptionTag :\r
-  vfrStatementSuppressIfQuest   |\r
-  vfrStatementValue             |\r
-  vfrStatementDefault           |\r
-  vfrStatementOptions\r
-  ;\r
-\r
-vfrStatementQuestionOptionList :\r
-  (\r
-    vfrStatementQuestionTag     |\r
-    vfrStatementQuestionOptionTag\r
-  )*\r
-  ;\r
-\r
-vfrStatementStatList :\r
-  vfrStatementStat                        |\r
-  vfrStatementQuestions                   |\r
-  vfrStatementConditional                 |\r
-  // Just for framework vfr compatibility\r
-  vfrStatementLabel\r
-  //vfrStatementInvalid\r
-  ;\r
-\r
-vfrStatementDisableIfStat :\r
-  <<\r
-    CIfrDisableIf DIObj;\r
-    UINT32 ExpOpCount = 0;\r
-  >>\r
-  L:DisableIf                                          << DIObj.SetLineNo(L->getLine()); >>\r
-  vfrStatementExpression[0, ExpOpCount] ";"            << mConstantOnlyInExpression = FALSE; >>\r
-  ( vfrStatementStatList )*\r
-  E:EndIf                                              << CRT_END_OP (E); >>\r
-  ";"\r
-  ;\r
-\r
-vfrStatementSuppressIfStat :\r
-  <<\r
-    CIfrSuppressIf SIObj;\r
-    UINT32 ExpOpCount = 0;\r
-  >>\r
-  L:SuppressIf                                         << SIObj.SetLineNo(L->getLine()); >>\r
-  { FLAGS "=" flagsField ( "\|" flagsField )* "," }\r
-  vfrStatementExpression[0, ExpOpCount] ";"\r
-  ( vfrStatementStatList )*\r
-  E:EndIf                                              << CRT_END_OP (E); >>\r
-  ";"\r
-  ;\r
-\r
-vfrStatementGrayOutIfStat :\r
-  <<\r
-    CIfrGrayOutIf GOIObj;\r
-    UINT32 ExpOpCount = 0;\r
-  >>\r
-  L:GrayOutIf                                          << GOIObj.SetLineNo(L->getLine()); >>\r
-  { FLAGS "=" flagsField ( "\|" flagsField )* "," }\r
-  vfrStatementExpression[0, ExpOpCount]\r
-  ";"\r
-  ( vfrStatementStatList )*\r
-  E:EndIf                                              << CRT_END_OP (E); >>\r
-  ";"\r
-  ;\r
-\r
-vfrImageTag :\r
-  << CIfrImage IObj; >>\r
-  L:Image "=" "IMAGE_TOKEN" "\(" S1:Number "\)"        << IObj.SetImageId (_STOSID(S1->getText())); IObj.SetLineNo(L->getLine()); >>\r
-  ;\r
-\r
-vfrLockedTag :\r
-  << CIfrLocked LObj; >>\r
-  L:Locked                                             << LObj.SetLineNo(L->getLine()); >>\r
-  ;\r
-\r
-vfrStatementStatTag :\r
-  vfrImageTag  |\r
-  vfrLockedTag\r
-  ;\r
-\r
-vfrStatementStatTagList :\r
-  vfrStatementStatTag ( "," vfrStatementStatTag )*\r
-  ;\r
-\r
-vfrStatementImage :\r
-  vfrImageTag\r
-  ";"\r
-  ;\r
-\r
-vfrStatementLocked :\r
-  vfrLockedTag\r
-  ";"\r
-  ;\r
-\r
-vfrStatementInconsistentIf :\r
-  <<\r
-    CIfrInconsistentIf IIObj;\r
-    UINT32 ExpOpCount = 0;\r
-  >>\r
-  L:InconsistentIf                                     << IIObj.SetLineNo(L->getLine()); >>\r
-  Prompt "=" "STRING_TOKEN" "\(" S:Number "\)" ","     << IIObj.SetError (_STOSID(S->getText())); >>\r
-  { FLAGS "=" flagsField ( "\|" flagsField )* "," }\r
-  vfrStatementExpression[0, ExpOpCount]\r
-  E:EndIf                                              << CRT_END_OP (E); >>\r
-  ;\r
-\r
-vfrStatementNoSubmitIf :\r
-  <<\r
-    CIfrNoSubmitIf NSIObj;\r
-    UINT32 ExpOpCount = 0;\r
-  >>\r
-  L:NoSubmitIf                                         << NSIObj.SetLineNo(L->getLine()); >>\r
-  Prompt "=" "STRING_TOKEN" "\(" S:Number "\)" ","     << NSIObj.SetError (_STOSID(S->getText())); >>\r
-  { FLAGS "=" flagsField ( "\|" flagsField )* "," }\r
-  vfrStatementExpression[0, ExpOpCount]\r
-  E:EndIf                                              << CRT_END_OP (E); >>\r
-  ;\r
-\r
-vfrStatementDisableIfQuest :\r
-  <<\r
-    CIfrDisableIf DIObj;\r
-    UINT32 ExpOpCount = 0;\r
-  >>\r
-  L:DisableIf                                          << DIObj.SetLineNo(L->getLine()); >>\r
-  vfrStatementExpression[0, ExpOpCount] ";"            << mConstantOnlyInExpression = FALSE; >>\r
-  vfrStatementQuestionOptionList\r
-  E:EndIf                                              << CRT_END_OP (E); >>\r
-  ;\r
-\r
-vfrStatementRefresh :\r
-  << CIfrRefresh RObj; >>\r
-  L:Refresh                                            << RObj.SetLineNo(L->getLine()); >>\r
-  Interval "=" I:Number                                << RObj.SetRefreshInterval (_STOU8(I->getText())); >>\r
-  ;\r
-\r
-vfrStatementVarstoreDevice :\r
-  << CIfrVarStoreDevice VDObj; >>\r
-  L:VarstoreDevice                                     << VDObj.SetLineNo(L->getLine()); >>\r
-  "=" "STRING_TOKEN" "\(" S:Number "\)" ","            << VDObj.SetDevicePath (_STOSID(S->getText())); >>\r
-  ;\r
-\r
-vfrStatementSuppressIfQuest :\r
-  <<\r
-    CIfrSuppressIf SIObj;\r
-    UINT32 ExpOpCount = 0;\r
-  >>\r
-  L:SuppressIf                                         << SIObj.SetLineNo(L->getLine()); >>\r
-  { FLAGS "=" flagsField ( "\|" flagsField )* "," }\r
-  vfrStatementExpression[0, ExpOpCount] ";"\r
-  vfrStatementQuestionOptionList\r
-  E:EndIf                                              << CRT_END_OP (E); >>\r
-  ;\r
-\r
-vfrStatementOptions :\r
-  vfrStatementOneOfOption\r
-  ;\r
-\r
-vfrStatementOneOfOption :\r
-  <<\r
-     EFI_IFR_TYPE_VALUE Val = {0};\r
-     CIfrOneOfOption    OOOObj;\r
-     INT8               *VarStoreName = NULL;\r
-\r
-  >>\r
-  L:Option                                             << OOOObj.SetLineNo(L->getLine()); >>\r
-  Text  "=" "STRING_TOKEN" "\(" S:Number "\)" ","      << OOOObj.SetOption (_STOSID(S->getText())); >>\r
-  Value "=" vfrConstantValueField[_GET_CURRQEST_DATATYPE()] >[Val] ","    \r
-                                                       << \r
-                                                          if (gCurrentMinMaxData != NULL) {\r
-                                                            //set min/max value for oneof opcode\r
-                                                            UINT64 Step = gCurrentMinMaxData->GetStepData(_GET_CURRQEST_DATATYPE());\r
-                                                            switch (_GET_CURRQEST_DATATYPE()) {\r
-                                                            case EFI_IFR_TYPE_NUM_SIZE_64:\r
-                                                              gCurrentMinMaxData->SetMinMaxStepData(Val.u64, Val.u64, Step);\r
-                                                              break;\r
-                                                            case EFI_IFR_TYPE_NUM_SIZE_32:\r
-                                                              gCurrentMinMaxData->SetMinMaxStepData(Val.u32, Val.u32, (UINT32) Step);\r
-                                                              break;\r
-                                                            case EFI_IFR_TYPE_NUM_SIZE_16:\r
-                                                              gCurrentMinMaxData->SetMinMaxStepData(Val.u16, Val.u16, (UINT16) Step);\r
-                                                              break;\r
-                                                            case EFI_IFR_TYPE_NUM_SIZE_8:\r
-                                                              gCurrentMinMaxData->SetMinMaxStepData(Val.u8, Val.u8, (UINT8) Step);\r
-                                                              break;\r
-                                                            default:\r
-                                                              break;\r
-                                                            }\r
-                                                          }\r
-                                                          OOOObj.SetType (_GET_CURRQEST_DATATYPE()); \r
-                                                          OOOObj.SetValue (Val); \r
-                                                       >>\r
-  F:FLAGS "=" vfrOneOfOptionFlags[OOOObj, F->getLine()]\r
-                                                       <<\r
-                                                          if (OOOObj.GetFlags () & 0x10) {\r
-                                                            _PCATCH(mCVfrDataStorage.GetVarStoreName (_GET_CURRQEST_VARTINFO().mVarStoreId, &VarStoreName), L->getLine());\r
-                                                            _PCATCH(mCVfrDefaultStore.BufferVarStoreAltConfigAdd (\r
-                                                                                                                                                   EFI_HII_DEFAULT_CLASS_STANDARD,\r
-                                                                                                                                                                       _GET_CURRQEST_VARTINFO(),\r
-                                                                                                                                                                       VarStoreName,\r
-                                                                                                                                                                   _GET_CURRQEST_DATATYPE (),\r
-                                                                                                                                                                       Val\r
-                                                                                                                                                                       ), L->getLine());\r
-                                                          }\r
-                                                       >>\r
-  (\r
-    "," vfrImageTag                                    << OOOObj.SetScope (1); CIfrEnd EOOOObj; >>\r
-  )*\r
-  ";"\r
-  ;\r
-\r
-vfrOneOfOptionFlags [CIfrOneOfOption & OOOObj, UINT32 LineNum] :\r
-  <<\r
-     UINT8 LFlags = 0;\r
-     UINT8 HFlags = 0;\r
-  >>\r
-  oneofoptionFlagsField[HFlags, LFlags] ( "\|" oneofoptionFlagsField[HFlags, LFlags] )*\r
-                                                       << _PCATCH(gCurrentQuestion->SetFlags(HFlags), LineNum); >>\r
-                                                       << _PCATCH(OOOObj.SetFlags(LFlags), LineNum); >>\r
-  ;\r
-\r
-oneofoptionFlagsField [UINT8 & HFlags, UINT8 & LFlags] :\r
-    N:Number                                           << $LFlags |= _STOU8(N->getText()); >>\r
-  | "OPTION_DEFAULT"                                   << $LFlags |= 0x10; >>\r
-  | "OPTION_DEFAULT_MFG"                               << $LFlags |= 0x20; >>\r
-  | InteractiveFlag                                    << $HFlags |= 0x04; >>\r
-  | NVAccessFlag                                       << $HFlags |= 0x08; >>\r
-  | ResetRequiredFlag                                  << $HFlags |= 0x10; >>\r
-  | LateCheckFlag                                      << $HFlags |= 0x20; >>\r
-  | ManufacturingFlag                                  << $LFlags |= 0x20; >>\r
-  | DefaultFlag                                        << $LFlags |= 0x10; >>\r
-  ;\r
-\r
-vfrStatementLabel :\r
-  << CIfrLabel LObj; >>\r
-  L:Label                                              << LObj.SetLineNo(L->getLine()); >>\r
-  N:Number                                             << LObj.SetNumber (_STOU16(N->getText())); >>\r
-  ";"\r
-  ;\r
-\r
-vfrStatementBanner :\r
-  << CIfrBanner BObj; >>\r
-  B:Banner { "," }                                     << BObj.SetLineNo(B->getLine()); >>\r
-  Title "=" "STRING_TOKEN" "\(" S:Number "\)" ","      << BObj.SetTitle (_STOSID(S->getText())); >>\r
-  (\r
-    (\r
-      Line L:Number ","                                << BObj.SetLine (_STOU16(L->getText())); >>\r
-      Align\r
-      (\r
-          Left                                         << BObj.SetAlign (0); >>\r
-        | Center                                       << BObj.SetAlign (1); >>\r
-        | Right                                        << BObj.SetAlign (2); >>\r
-      ) ";"\r
-    )\r
-    |\r
-    (\r
-      Timeout "=" T:Number ";"                         << {CIfrTimeout TObj(_STOU16(T->getText()));} >>\r
-    )\r
-  )\r
-  ;\r
-\r
-//******************************************************************************\r
-//\r
-// keep some syntax for compatibility but not generate any IFR object\r
-//\r
-vfrStatementInvalidHidden :\r
-  Hidden\r
-  Value "=" Number ","\r
-  Key "=" Number ";"\r
-  ;\r
-\r
-vfrStatementInvalidInconsistentIf :\r
-  << UINT32 ExpOpCount = 0; >>\r
-  InconsistentIf\r
-  Prompt "=" "STRING_TOKEN" "\(" S:Number "\)" ","\r
-  { FLAGS "=" flagsField ( "\|" flagsField )* "," }\r
-  vfrStatementExpression[0, ExpOpCount]\r
-  EndIf\r
-  ";"\r
-  ;\r
-\r
-vfrStatementInvalidInventory :\r
-  Inventory\r
-  Help "=" "STRING_TOKEN" "\(" Number "\)" ","\r
-  Text "=" "STRING_TOKEN" "\(" Number "\)" ","\r
-  {\r
-    Text  "=" "STRING_TOKEN" "\(" Number "\)"\r
-  }\r
-  ";"\r
-  ;\r
-\r
-vfrStatementInvalidSaveRestoreDefaults :\r
-  (Save | Restore)\r
-  Defaults ","\r
-  FormId "=" Number  ","\r
-  Prompt "=" "STRING_TOKEN" "\(" Number "\)" ","\r
-  Help   "=" "STRING_TOKEN" "\(" Number "\)"\r
-  { "," FLAGS "=" flagsField ( "\|" flagsField )* }\r
-  { "," Key   "=" Number }\r
-  ";"\r
-  ;\r
-\r
-//******************************************************************************\r
-//\r
-// The syntax of expression\r
-//\r
-#token Dup("dup")                               "dup"\r
-#token VarEqVal("vareqval")                     "vareqval"\r
-#token Var("var")                               "var"\r
-#token IdEqVal("ideqval")                       "ideqval"\r
-#token IdEqId("ideqid")                         "ideqid"\r
-#token IdEqValList("ideqvallist")               "ideqvallist"\r
-#token QuestionRef("questionref")               "questionref"\r
-#token RuleRef("ruleref")                       "ruleref"\r
-#token StringRef("stringref")                   "stringref"\r
-#token PushThis("pushthis")                     "pushthis"\r
-#token True("TRUE")                             "TRUE"\r
-#token False("FALSE")                           "FALSE"\r
-#token One("ONE")                               "ONE"\r
-#token Ones("ONES")                             "ONES"\r
-#token Zero("ZERO")                             "ZERO"\r
-#token Undefined("UNDEFINED")                   "UNDEFINED"\r
-#token Version("VERSOPM")                       "VERSION"\r
-#token Length("length")                         "length"\r
-#token AND("AND")                               "AND"\r
-#token OR("OR")                                 "OR"\r
-#token NOT("NOT")                               "NOT"\r
-#token BitWiseNot("~")                          "\~"\r
-#token BoolVal("boolval")                       "boolval"\r
-#token StringVal("stringval")                   "stringval"\r
-#token UnIntVal("unintval")                     "unintval"\r
-#token ToUpper("toupper")                       "toupper"\r
-#token ToLower("tolower")                       "tolower"\r
-#token Match("match")                           "match"\r
-#token Catenate("catenate")                     "catenate"\r
-#token QuestionRefVal("questionrefval")         "questionrefval"\r
-#token StringRefVal("stringrefval")             "stringrefval"\r
-\r
-vfrStatementExpression [UINT32 RootLevel, UINT32 & ExpOpCount] :\r
-                                                                                                          << if ($RootLevel == 0) {_CLEAR_SAVED_OPHDR ();} >>\r
-  andTerm[$RootLevel, $ExpOpCount]\r
-  (\r
-    L:OR andTerm[$RootLevel, $ExpOpCount]              << $ExpOpCount++; CIfrOr OObj(L->getLine()); >>\r
-  )*\r
-                                                       << if (($RootLevel == 0) && ($ExpOpCount > 1)) {_SET_SAVED_OPHDR_SCOPE(); CIfrEnd EObj; EObj.SetLineNo (0);} >>\r
-  ;\r
-\r
-andTerm[UINT32 & RootLevel, UINT32 & ExpOpCount] :\r
-  bitwiseorTerm[$RootLevel, $ExpOpCount]\r
-  (\r
-    L:AND bitwiseorTerm [$RootLevel, $ExpOpCount]       << $ExpOpCount++; CIfrAnd AObj(L->getLine()); >>\r
-  )*\r
-  ;\r
-\r
-bitwiseorTerm [UINT32 & RootLevel, UINT32 & ExpOpCount]:\r
-  bitwiseandTerm[$RootLevel, $ExpOpCount]\r
-  (\r
-    L:"\|" bitwiseandTerm[$RootLevel, $ExpOpCount]      << $ExpOpCount++; CIfrBitWiseOr BWOObj(L->getLine()); >>\r
-  )*\r
-  ;\r
-\r
-bitwiseandTerm [UINT32 & RootLevel, UINT32 & ExpOpCount]:\r
-  equalTerm[$RootLevel, $ExpOpCount]\r
-  (\r
-    L:"&" equalTerm[$RootLevel, $ExpOpCount]            << $ExpOpCount++; CIfrBitWiseAnd BWAObj(L->getLine()); >>\r
-  )*\r
-  ;\r
-\r
-equalTerm [UINT32 & RootLevel, UINT32 & ExpOpCount]:\r
-  compareTerm[$RootLevel, $ExpOpCount]\r
-  (\r
-    (\r
-      L1:"==" compareTerm[$RootLevel, $ExpOpCount]      << $ExpOpCount++; CIfrEqual EObj(L1->getLine()); >>\r
-    )\r
-    |\r
-    (\r
-      L2:"!=" compareTerm[$RootLevel, $ExpOpCount]      << $ExpOpCount++; CIfrNotEqual NEObj(L2->getLine()); >>\r
-    )\r
-  )*\r
-  ;\r
-\r
-compareTerm [UINT32 & RootLevel, UINT32 & ExpOpCount]:\r
-  shiftTerm[$RootLevel, $ExpOpCount]\r
-  (\r
-    (\r
-      L1:"<" shiftTerm[$RootLevel, $ExpOpCount]         << $ExpOpCount++; CIfrLessThan LTObj(L1->getLine()); >>\r
-    )\r
-    |\r
-    (\r
-      L2:"<=" shiftTerm[$RootLevel, $ExpOpCount]        << $ExpOpCount++; CIfrLessEqual LEObj(L2->getLine()); >>\r
-    )\r
-    |\r
-    (\r
-      L3:">" shiftTerm[$RootLevel, $ExpOpCount]         << $ExpOpCount++; CIfrGreaterThan GTObj(L3->getLine()); >>\r
-    )\r
-    |\r
-    (\r
-      L4:">=" shiftTerm[$RootLevel, $ExpOpCount]        << $ExpOpCount++; CIfrGreaterEqual GEObj(L4->getLine()); >>\r
-    )\r
-  )*\r
-  ;\r
-\r
-shiftTerm [UINT32 & RootLevel, UINT32 & ExpOpCount]:\r
-  addMinusTerm[$RootLevel, $ExpOpCount]\r
-  (\r
-    (\r
-      L1:"\<<" addMinusTerm[$RootLevel, $ExpOpCount]    << $ExpOpCount++; CIfrShiftLeft SLObj(L1->getLine()); >>\r
-    )\r
-    |\r
-    (\r
-      L2:"\>>" addMinusTerm[$RootLevel, $ExpOpCount]    << $ExpOpCount++; CIfrShiftRight SRObj(L2->getLine()); >>\r
-    )\r
-  )*\r
-  ;\r
-\r
-addMinusTerm [UINT32 & RootLevel, UINT32 & ExpOpCount]:\r
-  multdivmodTerm[$RootLevel, $ExpOpCount]\r
-  (\r
-    (\r
-      L1:"\+" multdivmodTerm[$RootLevel, $ExpOpCount]   << $ExpOpCount++; CIfrAdd AObj(L1->getLine()); >>\r
-    )\r
-    |\r
-    (\r
-      L2:"\-" multdivmodTerm[$RootLevel, $ExpOpCount]   << $ExpOpCount++; CIfrSubtract SObj(L2->getLine()); >>\r
-    )\r
-  )*\r
-  ;\r
-\r
-multdivmodTerm [UINT32 & RootLevel, UINT32 & ExpOpCount]:\r
-  castTerm[$RootLevel, $ExpOpCount]\r
-  (\r
-    (\r
-      L1:"\*" castTerm[$RootLevel, $ExpOpCount]         << $ExpOpCount++; CIfrMultiply MObj(L1->getLine()); >>\r
-    )\r
-    |\r
-    (\r
-      L2:"/" castTerm[$RootLevel, $ExpOpCount]          << $ExpOpCount++; CIfrDivide DObj(L2->getLine()); >>\r
-    )\r
-    |\r
-    (\r
-      L3:"%" castTerm[$RootLevel, $ExpOpCount]          << $ExpOpCount++; CIfrModulo MObj(L3->getLine()); >>\r
-    )\r
-  )*\r
-  ;\r
-\r
-castTerm [UINT32 & RootLevel, UINT32 & ExpOpCount]:\r
-  << UINT8 CastType = 0xFF; >>\r
-  (\r
-    L:"\("\r
-    (\r
-        Boolean                                         << CastType = 0; >>\r
-      | Uint64                                          << CastType = 1; >>\r
-      | Uint32                                          << CastType = 1; >>\r
-      | Uint16                                          << CastType = 1; >>\r
-      | Uint8                                           << CastType = 1; >>\r
-    )\r
-    "\)"\r
-  )*\r
-  atomTerm[$RootLevel, $ExpOpCount]\r
-                                                        <<\r
-                                                           switch (CastType) {\r
-                                                           case 0: { CIfrToBoolean TBObj(L->getLine()); $ExpOpCount++; } break;\r
-                                                           case 1: { CIfrToUint TUObj(L->getLine()); $ExpOpCount++; } break;\r
-                                                           }\r
-                                                                                                               >>\r
-  ;\r
-\r
-atomTerm [UINT32 & RootLevel, UINT32 & ExpOpCount]:\r
-    vfrExpressionCatenate[$RootLevel, $ExpOpCount]\r
-  | vfrExpressionMatch[$RootLevel, $ExpOpCount]\r
-  | vfrExpressionParen[$RootLevel, $ExpOpCount]\r
-  | vfrExpressionBuildInFunction[$RootLevel, $ExpOpCount]\r
-  | vfrExpressionConstant[$RootLevel, $ExpOpCount]\r
-  | vfrExpressionUnaryOp[$RootLevel, $ExpOpCount]\r
-  | vfrExpressionTernaryOp[$RootLevel, $ExpOpCount]\r
-  | (\r
-      L:NOT\r
-      atomTerm[$RootLevel, $ExpOpCount]                 << { CIfrNot NObj(L->getLine()); $ExpOpCount++; } >>\r
-    )\r
-  ;\r
-\r
-vfrExpressionCatenate [UINT32 & RootLevel, UINT32 & ExpOpCount]:\r
-  L:Catenate\r
-  "\("\r
-  vfrStatementExpression[$RootLevel + 1, $ExpOpCount]\r
-  ","\r
-  vfrStatementExpression[$RootLevel + 1, $ExpOpCount]\r
-  "\)"                                                 << { CIfrCatenate CObj(L->getLine()); $ExpOpCount++; } >>\r
-  ;\r
-\r
-vfrExpressionMatch [UINT32 & RootLevel, UINT32 & ExpOpCount]:\r
-  L:Match\r
-  "\("\r
-  vfrStatementExpression[$RootLevel + 1, $ExpOpCount]\r
-  ","\r
-  vfrStatementExpression[$RootLevel + 1, $ExpOpCount]\r
-  "\)"                                                 << { CIfrMatch MObj(L->getLine()); $ExpOpCount++; } >>\r
-  ;\r
-\r
-vfrExpressionParen [UINT32 & RootLevel, UINT32 & ExpOpCount]:\r
-  "\("\r
-  vfrStatementExpression[$RootLevel + 1, $ExpOpCount]\r
-  "\)"\r
-  ;\r
-\r
-vfrExpressionBuildInFunction [UINT32 & RootLevel, UINT32 & ExpOpCount] :\r
-    dupExp[$RootLevel, $ExpOpCount]\r
-  | ideqvalExp[$RootLevel, $ExpOpCount]\r
-  | ideqidExp[$RootLevel, $ExpOpCount]\r
-  | ideqvallistExp[$RootLevel, $ExpOpCount]\r
-  | questionref13Exp[$RootLevel, $ExpOpCount]\r
-  | rulerefExp[$RootLevel, $ExpOpCount]\r
-  | stringref1Exp[$RootLevel, $ExpOpCount]\r
-  | pushthisExp[$RootLevel, $ExpOpCount]\r
-  ;\r
-\r
-dupExp [UINT32 & RootLevel, UINT32 & ExpOpCount] :\r
-  L:Dup                                                << { CIfrDup DObj(L->getLine()); _SAVE_OPHDR_COND(DObj, ($ExpOpCount == 0)); $ExpOpCount++; } >>\r
-  ;\r
-\r
-ideqvalExp [UINT32 & RootLevel, UINT32 & ExpOpCount] :\r
-  <<\r
-     EFI_QUESTION_ID QId;\r
-     UINT32          Mask;\r
-     UINT16          ConstVal;\r
-     INT8            *VarIdStr;\r
-     UINT32          LineNo;\r
-  >>\r
-  L:IdEqVal\r
-  vfrQuestionDataFieldName[QId, Mask, VarIdStr, LineNo]\r
-  (\r
-    (\r
-      "=="\r
-      V1:Number                                        << ConstVal = _STOU16(V1->getText()); >>\r
-                                                       <<\r
-                                                                                                             if (Mask == 0) {\r
-                                                                                                                       CIfrEqIdVal EIVObj (L->getLine());\r
-                                                                                                                       _SAVE_OPHDR_COND (EIVObj, ($ExpOpCount == 0));\r
-                                                                                                                       EIVObj.SetQuestionId (QId, VarIdStr, LineNo);\r
-                                                                                                                       EIVObj.SetValue (ConstVal);\r
-                                                                                                                       $ExpOpCount++;\r
-                                                                                                                 } else {\r
-                                                                                                                       IdEqValDoSpecial ($ExpOpCount, L->getLine(), QId, VarIdStr, Mask, ConstVal, EQUAL);\r
-                                                                                                                 }\r
-                                                                                                          >>\r
-    )\r
-    |\r
-    (\r
-      "<="\r
-      V2:Number                                        << ConstVal = _STOU16(V2->getText()); >>\r
-                                                       << IdEqValDoSpecial ($ExpOpCount, L->getLine(), QId, VarIdStr, Mask, ConstVal, LESS_EQUAL); >>\r
-    )\r
-    |\r
-    (\r
-      "<"\r
-      V3:Number                                        << ConstVal = _STOU16(V3->getText()); >>\r
-                                                       << IdEqValDoSpecial ($ExpOpCount, L->getLine(), QId, VarIdStr, Mask, ConstVal, LESS_THAN); >>\r
-    )\r
-    |\r
-    (\r
-      ">="\r
-      V4:Number                                        << ConstVal = _STOU16(V4->getText()); >>\r
-                                                       << IdEqValDoSpecial ($ExpOpCount, L->getLine(), QId, VarIdStr, Mask, ConstVal, GREATER_EQUAL); >>\r
-    )\r
-    |\r
-    (\r
-      ">"\r
-      V5:Number                                        << ConstVal = _STOU16(V5->getText()); >>\r
-                                                       << IdEqValDoSpecial ($ExpOpCount, L->getLine(), QId, VarIdStr, Mask, ConstVal, GREATER_THAN); >>\r
-    )\r
-  )\r
-  ;\r
-\r
-ideqidExp[UINT32 & RootLevel, UINT32 & ExpOpCount] :\r
-  <<\r
-     EFI_QUESTION_ID QId[2];\r
-     UINT32          Mask[2];\r
-     INT8            *VarIdStr[2];\r
-     UINT32          LineNo[2];\r
-  >>\r
-  L:IdEqId\r
-  vfrQuestionDataFieldName[QId[0], Mask[0], VarIdStr[0], LineNo[0]]\r
-  (\r
-    (\r
-      "=="\r
-      vfrQuestionDataFieldName[QId[1], Mask[1], VarIdStr[1], LineNo[1]]\r
-                                                       <<\r
-                                                                                                             if (Mask[0] & Mask[1]) {\r
-                                                                                                                       IdEqIdDoSpecial ($ExpOpCount, L->getLine(), QId[0], VarIdStr[0], Mask[0], QId[1], VarIdStr[1], Mask[1], EQUAL);\r
-                                                                                                                 } else {\r
-                                                            CIfrEqIdId      EIIObj(L->getLine());\r
-                                                                                                                       _SAVE_OPHDR_COND (EIIObj, ($ExpOpCount == 0));\r
-                                                            EIIObj.SetQuestionId1 (QId[0], VarIdStr[0], LineNo[0]);\r
-                                                                                                                       EIIObj.SetQuestionId2 (QId[1], VarIdStr[1], LineNo[1]);\r
-                                                                                                                       $ExpOpCount++;\r
-                                                                                                                 }\r
-                                                                                                          >>\r
-    )\r
-    |\r
-    (\r
-      "<="\r
-      vfrQuestionDataFieldName[QId[1], Mask[1], VarIdStr[1], LineNo[1]]\r
-                                                       << IdEqIdDoSpecial ($ExpOpCount, L->getLine(), QId[0], VarIdStr[0], Mask[0], QId[1], VarIdStr[1], Mask[1], LESS_EQUAL); >>\r
-    )\r
-    |\r
-    (\r
-      "<"\r
-      vfrQuestionDataFieldName[QId[1], Mask[1], VarIdStr[1], LineNo[1]]\r
-                                                       << IdEqIdDoSpecial ($ExpOpCount, L->getLine(), QId[0], VarIdStr[0], Mask[0], QId[1], VarIdStr[1], Mask[1], LESS_THAN); >>\r
-    )\r
-    |\r
-    (\r
-      ">="\r
-      vfrQuestionDataFieldName[QId[1], Mask[1], VarIdStr[1], LineNo[1]]\r
-                                                       << IdEqIdDoSpecial ($ExpOpCount, L->getLine(), QId[0], VarIdStr[0], Mask[0], QId[1], VarIdStr[1], Mask[1], GREATER_EQUAL); >>\r
-    )\r
-    |\r
-    (\r
-      ">"\r
-      vfrQuestionDataFieldName[QId[1], Mask[1], VarIdStr[1], LineNo[1]]\r
-                                                       << IdEqIdDoSpecial ($ExpOpCount, L->getLine(), QId[0], VarIdStr[0], Mask[0], QId[1], VarIdStr[1], Mask[1], GREATER_THAN); >>\r
-    )\r
-  )\r
-  ;\r
-\r
-ideqvallistExp[UINT32 & RootLevel, UINT32 & ExpOpCount] :\r
-  <<\r
-     UINT16          ListLen = 0;\r
-     EFI_QUESTION_ID QId;\r
-     UINT32          Mask;\r
-     UINT16          ValueList[EFI_IFR_MAX_LENGTH] = {0,};\r
-     INT8            *VarIdStr;\r
-     UINT32          LineNo;\r
-  >>\r
-  L:IdEqValList\r
-  vfrQuestionDataFieldName[QId, Mask, VarIdStr, LineNo]\r
-  "=="\r
-  (\r
-    V:Number                                           << ValueList[ListLen] = _STOU16(V->getText()); ListLen++; >>\r
-  )+\r
-                                                       <<\r
-                                                                                                             if (Mask != 0) {\r
-                                                            IdEqListDoSpecial ($ExpOpCount, LineNo, QId, VarIdStr, Mask, ListLen, ValueList);\r
-                                                                                                                 } else {\r
-                                                                                           UINT16       Index;\r
-                                                            CIfrEqIdList EILObj(L->getLine());\r
-                                                                                                                       _SAVE_OPHDR_COND (EILObj, ($ExpOpCount == 0));\r
-                                                            EILObj.SetQuestionId (QId, VarIdStr, LineNo);\r
-                                                                                                                       EILObj.SetListLength (ListLen);\r
-                                                                                                                       for (Index = 0; Index < ListLen; Index++) {\r
-                                                                                                                         EILObj.SetValueList (Index, ValueList[Index]);\r
-                                                                                                                       }\r
-                                                                                                                       $ExpOpCount++;\r
-                                                                                                                 }\r
-                                                                                                          >>\r
-  ;\r
-\r
-vareqvarlExp[UINT32 & RootLevel, UINT32 & ExpOpCount] :\r
-  L:VarEqVal Var "\(" V1:Number "\)" "==" V2:Number    <<\r
-                                                          {\r
-                                                            CIfrUint64 U64Obj1(L->getLine()), U64Obj2(L->getLine());\r
-                                                            _SAVE_OPHDR_COND (U64Obj1, ($ExpOpCount == 0));\r
-                                                            U64Obj1.SetValue (_STOU64(V1->getText()));\r
-                                                            U64Obj2.SetValue (_STOU64(V2->getText()));\r
-                                                          }\r
-                                                       >>\r
-                                                       << {CIfrEqual EObj(L->getLine()); } >>\r
-                                                                                                          << $ExpOpCount += 3; >>\r
-  ;\r
-\r
-questionref13Exp[UINT32 & RootLevel, UINT32 & ExpOpCount] :\r
-  <<\r
-     UINT8           Type = 0x1;\r
-     EFI_STRING_ID   DevPath;\r
-     EFI_GUID        Guid;\r
-        EFI_QUESTION_ID QId = EFI_QUESTION_ID_INVALID;\r
-     UINT32          BitMask;\r
-     INT8            *QName = NULL;\r
-     UINT32          LineNo = 0;\r
-  >>\r
-  L:QuestionRef\r
-  (\r
-    (\r
-                                                       << Type = 0x3; >>\r
-      {\r
-        Path "=" "STRING_TOKEN" "\(" S:Number "\)"     << Type = 0x4; DevPath = _STOSID(S->getText()); >>\r
-      }\r
-      {\r
-        Uuid "=" guidDefinition[Guid]                  << Type = 0x5; >>\r
-      }\r
-    )\r
-    |\r
-    (\r
-      "\("\r
-         (\r
-          QN:StringIdentifier                          <<\r
-                                                          QName  = QN->getText();\r
-                                                                                                                 LineNo = QN->getLine();\r
-                                                          mCVfrQuestionDB.GetQuestionId (QN->getText(), NULL, QId, BitMask);\r
-                                                       >>\r
-        | ID:Number                                    << QId = _STOQID(ID->getText()); >>\r
-      )\r
-      "\)"\r
-    )\r
-  )\r
-                                                       <<\r
-                                                          switch (Type) {\r
-                                                          case 0x1: {CIfrQuestionRef1 QR1Obj(L->getLine()); _SAVE_OPHDR_COND (QR1Obj, ($ExpOpCount == 0)); QR1Obj.SetQuestionId (QId, QName, LineNo); break;}\r
-                                                          case 0x3: {CIfrQuestionRef3 QR3Obj(L->getLine()); _SAVE_OPHDR_COND (QR3Obj, ($ExpOpCount == 0)); break;}\r
-                                                          case 0x4: {CIfrQuestionRef3_2 QR3_2Obj(L->getLine()); _SAVE_OPHDR_COND (QR3_2Obj, ($ExpOpCount == 0)); QR3_2Obj.SetDevicePath (DevPath); break;}\r
-                                                          case 0x5: {CIfrQuestionRef3_3 QR3_3Obj(L->getLine()); _SAVE_OPHDR_COND (QR3_3Obj, ($ExpOpCount == 0)); QR3_3Obj.SetDevicePath (DevPath); QR3_3Obj.SetGuid (&Guid); break;}\r
-                                                          }\r
-                                                          $ExpOpCount++;\r
-                                                       >>\r
-  ;\r
-\r
-rulerefExp[UINT32 & RootLevel, UINT32 & ExpOpCount] :\r
-  L:RuleRef\r
-  "\(" RN:StringIdentifier "\)"                        << { CIfrRuleRef RRObj(L->getLine()); _SAVE_OPHDR_COND (RRObj, ($ExpOpCount == 0)); RRObj.SetRuleId (mCVfrRulesDB.GetRuleId (RN->getText())); } $ExpOpCount++; >>\r
-  ;\r
-\r
-//******************************************************\r
-// PARSE:\r
-//   stringref (STR_FORM_SET_TITLE)\r
-//\r
-stringref1Exp[UINT32 & RootLevel, UINT32 & ExpOpCount] :\r
-  L:StringRef\r
-  "\(" S:Number "\)"                                   << { CIfrStringRef1 SR1Obj(L->getLine()); _SAVE_OPHDR_COND (SR1Obj, ($ExpOpCount == 0)); SR1Obj.SetStringId (_STOSID(S->getText())); $ExpOpCount++; } >>\r
-  ;\r
-\r
-pushthisExp[UINT32 & RootLevel, UINT32 & ExpOpCount] :\r
-  L:PushThis                                           << { CIfrThis TObj(L->getLine()); _SAVE_OPHDR_COND (TObj, ($ExpOpCount == 0)); $ExpOpCount++; } >>\r
-  ;\r
-\r
-vfrExpressionConstant[UINT32 & RootLevel, UINT32 & ExpOpCount] :\r
-    L1:True                                            << CIfrTrue TObj(L1->getLine()); _SAVE_OPHDR_COND (TObj, ($ExpOpCount == 0)); $ExpOpCount++; >>\r
-  | L2:False                                           << CIfrFalse FObj(L2->getLine()); _SAVE_OPHDR_COND (FObj, ($ExpOpCount == 0)); $ExpOpCount++; >>\r
-  | L3:One                                             << CIfrOne OObj(L3->getLine()); _SAVE_OPHDR_COND (OObj, ($ExpOpCount == 0)); $ExpOpCount++; >>\r
-  | L4:Ones                                            << CIfrOnes OObj(L4->getLine()); _SAVE_OPHDR_COND (OObj, ($ExpOpCount == 0)); $ExpOpCount++; >>\r
-  | L5:Zero                                            << CIfrZero ZObj(L5->getLine()); _SAVE_OPHDR_COND (ZObj, ($ExpOpCount == 0)); $ExpOpCount++; >>\r
-  | L6:Undefined                                       << CIfrUndefined UObj(L6->getLine()); _SAVE_OPHDR_COND (UObj, ($ExpOpCount == 0)); $ExpOpCount++; >>\r
-  | L7:Version                                         << CIfrVersion VObj(L7->getLine()); _SAVE_OPHDR_COND (VObj, ($ExpOpCount == 0)); $ExpOpCount++; >>\r
-  | V:Number                                           << CIfrUint64 U64Obj(V->getLine()); U64Obj.SetValue (_STOU64(V->getText())); _SAVE_OPHDR_COND (U64Obj, ($ExpOpCount == 0)); $ExpOpCount++; >>\r
-  ;\r
-\r
-vfrExpressionUnaryOp[UINT32 & RootLevel, UINT32 & ExpOpCount] :\r
-    lengthExp[$RootLevel, $ExpOpCount]\r
-  | bitwisenotExp[$RootLevel, $ExpOpCount]\r
-  | question2refExp[$RootLevel, $ExpOpCount]\r
-  | stringref2Exp[$RootLevel, $ExpOpCount]\r
-  | toboolExp[$RootLevel, $ExpOpCount]\r
-  | unintExp[$RootLevel, $ExpOpCount]\r
-  | toupperExp[$RootLevel, $ExpOpCount]\r
-  | tolwerExp[$RootLevel, $ExpOpCount]\r
-  ;\r
-\r
-lengthExp[UINT32 & RootLevel, UINT32 & ExpOpCount] :\r
-  L:Length\r
-  "\(" vfrStatementExpression[$RootLevel + 1, $ExpOpCount] "\)"\r
-                                                       << { CIfrLength LObj(L->getLine()); $ExpOpCount++; } >>\r
-  ;\r
-\r
-bitwisenotExp[UINT32 & RootLevel, UINT32 & ExpOpCount] :\r
-  L:BitWiseNot\r
-  "\(" vfrStatementExpression[$RootLevel + 1, $ExpOpCount] "\)"\r
-                                                       << { CIfrBitWiseNot BWNObj(L->getLine()); $ExpOpCount++; } >>\r
-  ;\r
-\r
-question2refExp[UINT32 & RootLevel, UINT32 & ExpOpCount] :\r
-  L:QuestionRefVal\r
-  "\(" vfrStatementExpression[$RootLevel + 1, $ExpOpCount] "\)"\r
-                                                       << { CIfrQuestionRef2 QR2Obj(L->getLine()); $ExpOpCount++; } >>\r
-  ;\r
-\r
-stringref2Exp[UINT32 & RootLevel, UINT32 & ExpOpCount] :\r
-  L:StringRefVal\r
-  "\(" vfrStatementExpression[$RootLevel + 1, $ExpOpCount] "\)"\r
-                                                       << { CIfrStringRef2 SR2Obj(L->getLine()); $ExpOpCount++; } >>\r
-  ;\r
-\r
-toboolExp[UINT32 & RootLevel, UINT32 & ExpOpCount] :\r
-  L:BoolVal\r
-  "\(" vfrStatementExpression[$RootLevel + 1, $ExpOpCount] "\)"\r
-                                                       << { CIfrToBoolean TBObj(L->getLine()); $ExpOpCount++; } >>\r
-  ;\r
-\r
-tostringExp[UINT32 & RootLevel, UINT32 & ExpOpCount] :\r
-  << UINT8 Fmt = 0; >>\r
-  L:StringVal\r
-  {\r
-    Format "=" F:Number ","                            << Fmt = _STOU8(F->getText()); >>\r
-  }\r
-  "\(" vfrStatementExpression[$RootLevel + 1, $ExpOpCount] "\)"\r
-                                                       << { CIfrToString TSObj(L->getLine()); TSObj.SetFormat (Fmt); $ExpOpCount++; } >>\r
-  ;\r
-\r
-unintExp[UINT32 & RootLevel, UINT32 & ExpOpCount] :\r
-  L:UnIntVal\r
-  "\(" vfrStatementExpression[$RootLevel + 1, $ExpOpCount] "\)"\r
-                                                       << { CIfrToUint TUObj(L->getLine()); $ExpOpCount++; } >>\r
-  ;\r
-\r
-toupperExp[UINT32 & RootLevel, UINT32 & ExpOpCount] :\r
-  L:ToUpper\r
-  "\(" vfrStatementExpression[$RootLevel + 1, $ExpOpCount] "\)"\r
-                                                       << { CIfrToUpper TUObj(L->getLine()); $ExpOpCount++; } >>\r
-  ;\r
-\r
-tolwerExp[UINT32 & RootLevel, UINT32 & ExpOpCount] :\r
-  L:ToLower\r
-  "\(" vfrStatementExpression[$RootLevel + 1, $ExpOpCount] "\)"\r
-                                                       << { CIfrToLower TLObj(L->getLine()); $ExpOpCount++; } >>\r
-  ;\r
-\r
-vfrExpressionTernaryOp[UINT32 & RootLevel, UINT32 & ExpOpCount] :\r
-    conditionalExp[$RootLevel, $ExpOpCount]\r
-  | findExp[$RootLevel, $ExpOpCount]\r
-  | midExp[$RootLevel, $ExpOpCount]\r
-  | tokenExp[$RootLevel, $ExpOpCount]\r
-  | spanExp[$RootLevel, $ExpOpCount]\r
-  ;\r
-\r
-#token Cond("cond")                                    "cond"\r
-#token Find("find")                                    "find"\r
-#token Mid("mid")                                      "mid"\r
-#token Tok("token")                                    "token"\r
-#token Span("span")                                    "span"\r
-\r
-conditionalExp[UINT32 & RootLevel, UINT32 & ExpOpCount] :\r
-  L:Cond "\("\r
-  vfrStatementExpression[$RootLevel + 1, $ExpOpCount]\r
-  "?"\r
-  vfrStatementExpression[$RootLevel + 1, $ExpOpCount]\r
-  ":"\r
-  vfrStatementExpression[$RootLevel + 1, $ExpOpCount]\r
-  "\)"                                                 << { CIfrConditional CObj(L->getLine()); $ExpOpCount++; } >>\r
-  ;\r
-\r
-findExp[UINT32 & RootLevel, UINT32 & ExpOpCount] :\r
-  << UINT8 Format; >>\r
-  L:Find "\("\r
-  findFormat[Format] ( "\|" findFormat[Format] )*\r
-  ","\r
-  vfrStatementExpression[$RootLevel + 1, $ExpOpCount]\r
-  ","\r
-  vfrStatementExpression[$RootLevel + 1, $ExpOpCount]\r
-  ","\r
-  vfrStatementExpression[$RootLevel + 1, $ExpOpCount]\r
-  "\)"                                                 << { CIfrFind FObj(L->getLine()); FObj.SetFormat (Format); $ExpOpCount++; } >>\r
-  ;\r
-\r
-findFormat [UINT8 & Format] :\r
-    "SENSITIVE"                                        << $Format = 0x00; >>\r
-  | "INSENSITIVE"                                      << $Format = 0x01; >>\r
-  ;\r
-\r
-midExp[UINT32 & RootLevel, UINT32 & ExpOpCount] :\r
-  L:Mid "\("\r
-  vfrStatementExpression[$RootLevel + 1, $ExpOpCount]\r
-  ","\r
-  vfrStatementExpression[$RootLevel + 1, $ExpOpCount]\r
-  ","\r
-  vfrStatementExpression[$RootLevel + 1, $ExpOpCount]\r
-  "\)"                                                 << { CIfrMid MObj(L->getLine()); $ExpOpCount++; } >>\r
-  ;\r
-\r
-tokenExp[UINT32 & RootLevel, UINT32 & ExpOpCount] :\r
-  L:Tok "\("\r
-  vfrStatementExpression[$RootLevel + 1, $ExpOpCount]\r
-  ","\r
-  vfrStatementExpression[$RootLevel + 1, $ExpOpCount]\r
-  ","\r
-  vfrStatementExpression[$RootLevel + 1, $ExpOpCount]\r
-  "\)"                                                 << { CIfrToken TObj(L->getLine()); $ExpOpCount++; } >>\r
-  ;\r
-\r
-spanExp[UINT32 & RootLevel, UINT32 & ExpOpCount] :\r
-  << UINT8 Flags = 0; >>\r
-  S:Span "\("\r
-  FLAGS "=" spanFlags[Flags] ( "\|" spanFlags[Flags] )*\r
-  ","\r
-  vfrStatementExpression[$RootLevel + 1, $ExpOpCount]\r
-  ","\r
-  vfrStatementExpression[$RootLevel + 1, $ExpOpCount]\r
-  ","\r
-  vfrStatementExpression[$RootLevel + 1, $ExpOpCount]\r
-  "\)"                                                 << { CIfrSpan SObj(S->getLine()); SObj.SetFlags(Flags); $ExpOpCount++; } >>\r
-  ;\r
-\r
-spanFlags [UINT8 & Flags] :\r
-    N:Number                                           << $Flags |= _STOU8(N->getText()); >>\r
-  | "LAST_NON_MATCH"                                   << $Flags |= 0x00; >>\r
-  | "FIRST_NON_MATCH"                                  << $Flags |= 0x01; >>\r
-  ;\r
-\r
-#token StringIdentifier("string identifier")    "[A-Za-z_][A-Za-z_0-9]*"\r
-#token Number("numeric value")                  "(0x[0-9A-Fa-f]+) | [0-9]+"\r
-\r
-//******************************************************************************\r
-//\r
-// Parser class definition.\r
-//\r
-class EfiVfrParser {\r
-<<\r
-private:\r
-  UINT8               mParserStatus;\r
-  BOOLEAN             mConstantOnlyInExpression;\r
-\r
-  CVfrDefaultStore    mCVfrDefaultStore;\r
-  CVfrVarDataTypeDB   mCVfrVarDataTypeDB;\r
-  CVfrDataStorage     mCVfrDataStorage;\r
-  CVfrQuestionDB      mCVfrQuestionDB;\r
-  CVfrRulesDB         mCVfrRulesDB;\r
-\r
-  CIfrOpHeader        *mCIfrOpHdr;\r
-  VOID                _SAVE_OPHDR_COND (IN CIfrOpHeader &, IN BOOLEAN);\r
-  VOID                _CLEAR_SAVED_OPHDR (VOID);\r
-  VOID                _SET_SAVED_OPHDR_SCOPE (VOID);\r
-\r
-\r
-  EFI_VARSTORE_INFO   mCurrQestVarInfo;\r
-\r
-  VOID                _CRT_OP (IN BOOLEAN);\r
-\r
-  VOID                _SAVE_CURRQEST_VARINFO (IN EFI_VARSTORE_INFO &);\r
-  EFI_VARSTORE_INFO & _GET_CURRQEST_VARTINFO (VOID);\r
-\r
-  UINT8               _GET_CURRQEST_DATATYPE ();\r
-  UINT32              _GET_CURRQEST_VARSIZE ();\r
-  UINT32              _GET_CURRQEST_ARRAY_SIZE ();\r
-\r
-public:\r
-  VOID                _PCATCH (IN INTN, IN INTN, IN ANTLRTokenPtr, IN INT8 *);\r
-  VOID                _PCATCH (IN EFI_VFR_RETURN_CODE);\r
-  VOID                _PCATCH (IN EFI_VFR_RETURN_CODE, IN ANTLRTokenPtr);\r
-  VOID                _PCATCH (IN EFI_VFR_RETURN_CODE, IN UINT32);\r
-  VOID                _PCATCH (IN EFI_VFR_RETURN_CODE, IN UINT32, IN INT8 *);\r
-\r
-  VOID                syn     (ANTLRAbstractToken  *, ANTLRChar *, SetWordType *, ANTLRTokenType, INT32);\r
-\r
-  INT8 *              TrimHex (IN INT8 *, OUT BOOLEAN *);\r
-  UINT8               _STOU8  (IN INT8 *);\r
-  UINT16              _STOU16 (IN INT8 *);\r
-  UINT32              _STOU32 (IN INT8 *);\r
-  UINT64              _STOU64 (IN INT8 *);\r
-  EFI_HII_DATE        _STOD   (IN INT8 *, IN INT8 *, IN INT8 *);\r
-  EFI_HII_TIME        _STOT   (IN INT8 *, IN INT8 *, IN INT8 *);\r
-\r
-  EFI_STRING_ID       _STOSID (IN INT8 *);\r
-  EFI_FORM_ID         _STOFID (IN INT8 *);\r
-  EFI_QUESTION_ID     _STOQID (IN INT8 *);\r
-\r
-  VOID                _STRCAT (IN OUT INT8 **, IN INT8 *);\r
-\r
-  VOID                _CRGUID (EFI_GUID *, INT8 *, INT8 *, INT8 *, INT8 *, INT8 *, INT8 *, INT8 *, INT8 *, INT8 *, INT8 *, INT8 *);\r
-  VOID                _DeclareDefaultLinearVarStore (IN UINT32);\r
-  VOID                _DeclareStandardDefaultStorage (IN UINT32);\r
-\r
-\r
-  VOID                AssignQuestionKey (IN CIfrQuestionHeader &, IN ANTLRTokenPtr);\r
-\r
-  VOID                ConvertIdExpr         (IN UINT32 &, IN UINT32, IN EFI_QUESTION_ID, IN INT8 *, IN UINT32);\r
-  VOID                IdEqValDoSpecial      (IN UINT32 &, IN UINT32, IN EFI_QUESTION_ID, IN INT8 *, IN UINT32, IN UINT16, IN EFI_COMPARE_TYPE);\r
-  VOID                IdEqIdDoSpecial       (IN UINT32 &, IN UINT32, IN EFI_QUESTION_ID, IN INT8 *, IN UINT32, IN EFI_QUESTION_ID, IN INT8 *, IN UINT32, IN EFI_COMPARE_TYPE);\r
-  VOID                IdEqListDoSpecial     (IN UINT32 &, IN UINT32, IN EFI_QUESTION_ID, IN INT8 *, IN UINT32, IN UINT16, IN UINT16 *);\r
->>\r
-}\r
-\r
-<<\r
-VOID\r
-EfiVfrParser::_SAVE_OPHDR_COND (\r
-  IN CIfrOpHeader &OpHdr,\r
-  IN BOOLEAN      Cond\r
-  )\r
-{\r
-  if (Cond == TRUE) {\r
-#ifdef VFREXP_DEBUG\r
-    printf ("######_SAVE_OPHDR_COND\n");\r
-#endif\r
-    if (mCIfrOpHdr != NULL) {\r
-#ifdef VFREXP_DEBUG\r
-      printf ("######_SAVE_OPHDR_COND Error\n");\r
-#endif\r
-      return ;\r
-    }\r
-       mCIfrOpHdr = new CIfrOpHeader(OpHdr);\r
-  }\r
-}\r
-\r
-VOID\r
-EfiVfrParser::_CLEAR_SAVED_OPHDR (\r
-  VOID\r
-  )\r
-{\r
-#ifdef VFREXP_DEBUG\r
-  printf ("######_CLEAR_SAVED_OPHDR\n");\r
-#endif\r
-  mCIfrOpHdr = NULL;\r
-}\r
-\r
-VOID\r
-EfiVfrParser::_SET_SAVED_OPHDR_SCOPE (\r
-  VOID\r
-  )\r
-{\r
-#ifdef VFREXP_DEBUG\r
-  printf ("#######_SET_SAVED_OPHDR_SCOPE\n");\r
-#endif\r
-  mCIfrOpHdr->SetScope (1);\r
-}\r
-\r
-VOID\r
-EfiVfrParser::_CRT_OP (\r
-  IN BOOLEAN Crt\r
-  )\r
-{\r
-  gCreateOp = Crt;\r
-}\r
-\r
-VOID\r
-EfiVfrParser::_SAVE_CURRQEST_VARINFO (\r
-  IN EFI_VARSTORE_INFO &Info\r
-  )\r
-{\r
-  mCurrQestVarInfo = Info;\r
-}\r
-\r
-EFI_VARSTORE_INFO &\r
-EfiVfrParser::_GET_CURRQEST_VARTINFO (\r
-  VOID\r
-  )\r
-{\r
-  return mCurrQestVarInfo;\r
-}\r
-\r
-UINT8\r
-EfiVfrParser::_GET_CURRQEST_DATATYPE (\r
-  VOID\r
-  )\r
-{\r
-  return mCurrQestVarInfo.mVarType;\r
-}\r
-\r
-UINT32\r
-EfiVfrParser::_GET_CURRQEST_VARSIZE (\r
-  VOID\r
-  )\r
-{\r
-  return mCurrQestVarInfo.mVarTotalSize;\r
-}\r
-\r
-UINT32\r
-EfiVfrParser::_GET_CURRQEST_ARRAY_SIZE (\r
-  VOID\r
-  )\r
-{\r
-  UINT8 Size = 1;\r
-\r
-  switch (mCurrQestVarInfo.mVarType) {\r
-  case EFI_IFR_TYPE_NUM_SIZE_8:\r
-    Size = 1;\r
-    break;\r
-\r
-  case EFI_IFR_TYPE_NUM_SIZE_16:\r
-    Size = 2;\r
-    break;\r
-\r
-  case EFI_IFR_TYPE_NUM_SIZE_32:\r
-    Size = 4;\r
-    break;\r
-\r
-  case EFI_IFR_TYPE_NUM_SIZE_64:\r
-    Size = 8;\r
-    break;\r
-\r
-  default:\r
-    break;\r
-  }\r
-\r
-  return (mCurrQestVarInfo.mVarTotalSize / Size);\r
-}\r
-\r
-VOID\r
-EfiVfrParser::_PCATCH (\r
-  IN INTN                ReturnCode,\r
-  IN INTN                ExpectCode,\r
-  IN ANTLRTokenPtr       Tok,\r
-  IN INT8                *ErrorMsg\r
-  )\r
-{\r
-  if (ReturnCode != ExpectCode) {\r
-    mParserStatus++;\r
-    gCVfrErrorHandle.PrintMsg (Tok->getLine(), Tok->getText(), "Error", ErrorMsg);\r
-  }\r
-}\r
-\r
-VOID\r
-EfiVfrParser::_PCATCH (\r
-  IN EFI_VFR_RETURN_CODE ReturnCode\r
-  )\r
-{\r
-  mParserStatus += gCVfrErrorHandle.HandleError (ReturnCode);\r
-}\r
-\r
-VOID\r
-EfiVfrParser::_PCATCH (\r
-  IN EFI_VFR_RETURN_CODE ReturnCode,\r
-  IN ANTLRTokenPtr       Tok\r
-  )\r
-{\r
-  mParserStatus += gCVfrErrorHandle.HandleError (ReturnCode, Tok->getLine(), Tok->getText());\r
-}\r
-\r
-VOID\r
-EfiVfrParser::_PCATCH (\r
-  IN EFI_VFR_RETURN_CODE ReturnCode,\r
-  IN UINT32              LineNum\r
-  )\r
-{\r
-  mParserStatus += gCVfrErrorHandle.HandleError (ReturnCode, LineNum);\r
-}\r
-\r
-VOID\r
-EfiVfrParser::_PCATCH (\r
-  IN EFI_VFR_RETURN_CODE ReturnCode,\r
-  IN UINT32              LineNum,\r
-  IN INT8                *ErrorMsg\r
-  )\r
-{\r
-  mParserStatus = mParserStatus + gCVfrErrorHandle.HandleError (ReturnCode, LineNum, ErrorMsg);\r
-}\r
-\r
-VOID\r
-EfiVfrParser::syn (\r
-  ANTLRAbstractToken  *Tok,\r
-  ANTLRChar           *Egroup,\r
-  SetWordType         *Eset,\r
-  ANTLRTokenType      ETok,\r
-  INT32               Huh\r
-  )\r
-{\r
-  gCVfrErrorHandle.HandleError (VFR_RETURN_MISMATCHED, Tok->getLine(), Tok->getText());\r
-\r
-  mParserStatus += 1;\r
-}\r
-\r
-INT8 *\r
-EfiVfrParser::TrimHex (\r
-  IN  INT8    *Str,\r
-  OUT BOOLEAN *IsHex\r
-  )\r
-{\r
-  *IsHex = FALSE;\r
-\r
-  while (*Str && *Str == ' ') {\r
-    Str++;\r
-  }\r
-  while (*Str && *Str == '0') {\r
-    Str++;\r
-  }\r
-  if (*Str && (*Str == 'x' || *Str == 'X')) {\r
-    Str++;\r
-    *IsHex = TRUE;\r
-  }\r
-\r
-  return Str;\r
-}\r
-\r
-UINT8\r
-EfiVfrParser::_STOU8 (\r
-  IN INT8 *Str\r
-  )\r
-{\r
-  BOOLEAN IsHex;\r
-  UINT8   Value;\r
-  INT8    c;\r
-\r
-  Str = TrimHex (Str, &IsHex);\r
-  for (Value = 0; (c = *Str) != '\0'; Str++) {\r
-    //\r
-    // BUG: does not handle overflow here\r
-    //\r
-       (IsHex == TRUE) ? (Value <<= 4) : (Value *= 10);\r
-\r
-    if ((IsHex == TRUE) && (c >= 'a') && (c <= 'f')) {\r
-      Value += (c - 'a' + 10);\r
-    }\r
-    if ((IsHex == TRUE) && (c >= 'A') && (c <= 'F')) {\r
-      Value += (c - 'A' + 10);\r
-    }\r
-    if (c >= '0' && c <= '9') {\r
-      Value += (c - '0');\r
-    }\r
-  }\r
-\r
-  return Value;\r
-}\r
-\r
-UINT16\r
-EfiVfrParser::_STOU16 (\r
-  IN INT8 *Str\r
-  )\r
-{\r
-  BOOLEAN IsHex;\r
-  UINT16  Value;\r
-  INT8    c;\r
-\r
-  Str = TrimHex (Str, &IsHex);\r
-  for (Value = 0; (c = *Str) != '\0'; Str++) {\r
-    //\r
-    // BUG: does not handle overflow here\r
-    //\r
-       (IsHex == TRUE) ? (Value <<= 4) : (Value *= 10);\r
-\r
-    if ((IsHex == TRUE) && (c >= 'a') && (c <= 'f')) {\r
-      Value += (c - 'a' + 10);\r
-    }\r
-    if ((IsHex == TRUE) && (c >= 'A') && (c <= 'F')) {\r
-      Value += (c - 'A' + 10);\r
-    }\r
-    if (c >= '0' && c <= '9') {\r
-      Value += (c - '0');\r
-    }\r
-  }\r
-\r
-  return Value;\r
-}\r
-\r
-UINT32\r
-EfiVfrParser::_STOU32 (\r
-  IN INT8 *Str\r
-  )\r
-{\r
-  BOOLEAN IsHex;\r
-  UINT32  Value;\r
-  INT8    c;\r
-\r
-  Str = TrimHex (Str, &IsHex);\r
-  for (Value = 0; (c = *Str) != '\0'; Str++) {\r
-    //\r
-    // BUG: does not handle overflow here\r
-    //\r
-       (IsHex == TRUE) ? (Value <<= 4) : (Value *= 10);\r
-\r
-    if ((IsHex == TRUE) && (c >= 'a') && (c <= 'f')) {\r
-      Value += (c - 'a' + 10);\r
-    }\r
-    if ((IsHex == TRUE) && (c >= 'A') && (c <= 'F')) {\r
-      Value += (c - 'A' + 10);\r
-    }\r
-    if (c >= '0' && c <= '9') {\r
-      Value += (c - '0');\r
-    }\r
-  }\r
-\r
-  return Value;\r
-}\r
-\r
-UINT64\r
-EfiVfrParser::_STOU64 (\r
-  IN INT8 *Str\r
-  )\r
-{\r
-  BOOLEAN IsHex;\r
-  UINT64  Value;\r
-  INT8    c;\r
-\r
-  Str = TrimHex (Str, &IsHex);\r
-  for (Value = 0; (c = *Str) != '\0'; Str++) {\r
-    //\r
-    // BUG: does not handle overflow here\r
-    //\r
-       (IsHex == TRUE) ? (Value <<= 4) : (Value *= 10);\r
-\r
-    if ((IsHex == TRUE) && (c >= 'a') && (c <= 'f')) {\r
-      Value += (c - 'a' + 10);\r
-    }\r
-    if ((IsHex == TRUE) && (c >= 'A') && (c <= 'F')) {\r
-      Value += (c - 'A' + 10);\r
-    }\r
-    if (c >= '0' && c <= '9') {\r
-      Value += (c - '0');\r
-    }\r
-  }\r
-\r
-  return Value;\r
-}\r
-\r
-EFI_HII_DATE\r
-EfiVfrParser::_STOD (\r
-  IN INT8 *Year,\r
-  IN INT8 *Month,\r
-  IN INT8 *Day\r
-  )\r
-{\r
-  EFI_HII_DATE Date;\r
-\r
-  Date.Year  = _STOU16 (Year);\r
-  Date.Month = _STOU8 (Month);\r
-  Date.Day   = _STOU8 (Day);\r
-\r
-  return Date;\r
-}\r
-\r
-EFI_HII_TIME\r
-EfiVfrParser::_STOT (\r
-  IN INT8 *Hour,\r
-  IN INT8 *Minute,\r
-  IN INT8 *Second\r
-  )\r
-{\r
-  EFI_HII_TIME Time;\r
-\r
-  Time.Hour   = _STOU8 (Hour);\r
-  Time.Minute = _STOU8 (Minute);\r
-  Time.Second = _STOU8 (Second);\r
-\r
-  return Time;\r
-}\r
-\r
-EFI_STRING_ID\r
-EfiVfrParser::_STOSID (\r
-  IN INT8 *Str\r
-  )\r
-{\r
-  return (EFI_STRING_ID)_STOU16(Str);\r
-}\r
-\r
-EFI_FORM_ID\r
-EfiVfrParser::_STOFID (\r
-  IN INT8 *Str\r
-  )\r
-{\r
-  return (EFI_FORM_ID)_STOU16(Str);\r
-}\r
-\r
-EFI_QUESTION_ID\r
-EfiVfrParser::_STOQID (\r
-  IN INT8 *Str\r
-  )\r
-{\r
-  return (EFI_QUESTION_ID)_STOU16(Str);\r
-}\r
-\r
-VOID\r
-EfiVfrParser::_STRCAT (\r
-  IN OUT INT8 **Dest,\r
-  IN INT8     *Src\r
-  )\r
-{\r
-  INT8   *NewStr;\r
-  UINT32 Len;\r
-\r
-  if ((Dest == NULL) || (Src == NULL)) {\r
-    return;\r
-  }\r
-\r
-  Len = (*Dest == NULL) ? 0 : strlen (*Dest);\r
-  Len += strlen (Src);\r
-  if ((NewStr = new INT8[Len + 1]) == NULL) {\r
-    return;\r
-  }\r
-  NewStr[0] = '\0';\r
-  if (*Dest != NULL) {\r
-    strcpy (NewStr, *Dest);\r
-  }\r
-  strcat (NewStr, Src);\r
-\r
-  *Dest = NewStr;\r
-}\r
-\r
-VOID\r
-EfiVfrParser::_CRGUID (\r
-  IN EFI_GUID *Guid,\r
-  IN INT8     *G1,\r
-  IN INT8     *G2,\r
-  IN INT8     *G3,\r
-  IN INT8     *G4,\r
-  IN INT8     *G5,\r
-  IN INT8     *G6,\r
-  IN INT8     *G7,\r
-  IN INT8     *G8,\r
-  IN INT8     *G9,\r
-  IN INT8     *G10,\r
-  IN INT8     *G11\r
-  )\r
-{\r
-  Guid->Data1 = _STOU32 (G1);\r
-  Guid->Data2 = _STOU16 (G2);\r
-  Guid->Data3 = _STOU16 (G3);\r
-  Guid->Data4[0] = _STOU8(G4);\r
-  Guid->Data4[1] = _STOU8(G5);\r
-  Guid->Data4[2] = _STOU8(G6);\r
-  Guid->Data4[3] = _STOU8(G7);\r
-  Guid->Data4[4] = _STOU8(G8);\r
-  Guid->Data4[5] = _STOU8(G9);\r
-  Guid->Data4[6] = _STOU8(G10);\r
-  Guid->Data4[7] = _STOU8(G11);\r
-}\r
-\r
-VOID\r
-EfiVfrParser::_DeclareDefaultLinearVarStore (\r
-  IN UINT32 LineNo\r
-  )\r
-{\r
-  UINT32            Index;\r
-  INT8              **TypeNameList;\r
-  UINT32            ListSize;\r
-  EFI_GUID          DefaultGuid =  { 0x9db3c415, 0xda00, 0x4233, { 0xae, 0xc6, 0x79, 0xb, 0x4f, 0x5b, 0x45, 0x66 } };\r
-\r
-  mCVfrVarDataTypeDB.GetUserDefinedTypeNameList (&TypeNameList, &ListSize);\r
-\r
-  for (Index = 0; Index < ListSize; Index++) {\r
-    UINT32            Size;\r
-    EFI_VARSTORE_ID   VarStoreId;\r
-    CIfrVarStore      VSObj;\r
-\r
-    VSObj.SetLineNo (LineNo);\r
-    mCVfrDataStorage.DeclareBufferVarStore (\r
-                       TypeNameList[Index],\r
-                       &DefaultGuid,\r
-                       &mCVfrVarDataTypeDB,\r
-                       TypeNameList[Index],\r
-                       EFI_VARSTORE_ID_INVALID\r
-                       );\r
-    mCVfrDataStorage.GetVarStoreId(TypeNameList[Index], &VarStoreId);\r
-    VSObj.SetVarStoreId (VarStoreId);\r
-    mCVfrVarDataTypeDB.GetDataTypeSize(TypeNameList[Index], &Size);\r
-    VSObj.SetSize (Size);\r
-    VSObj.SetName (TypeNameList[Index]);\r
-    VSObj.SetGuid (&DefaultGuid);\r
-  }\r
-\r
-  if (mCVfrVarDataTypeDB.IsTypeNameDefined ("Date") == FALSE) {\r
-    UINT32            Size;\r
-    EFI_VARSTORE_ID   VarStoreId;\r
-    CIfrVarStore      VSObj;\r
-\r
-    VSObj.SetLineNo (LineNo);\r
-    mCVfrDataStorage.DeclareBufferVarStore (\r
-                       "Date",\r
-                                          &DefaultGuid,\r
-                                          &mCVfrVarDataTypeDB,\r
-                                          "EFI_HII_DATE",\r
-                       EFI_VARSTORE_ID_INVALID\r
-                       );\r
-    mCVfrDataStorage.GetVarStoreId("Date", &VarStoreId);\r
-    VSObj.SetVarStoreId (VarStoreId);\r
-    mCVfrVarDataTypeDB.GetDataTypeSize("EFI_HII_DATE", &Size);\r
-    VSObj.SetSize (Size);\r
-    VSObj.SetName ("Date");\r
-    VSObj.SetGuid (&DefaultGuid);\r
-  }\r
-\r
-  if (mCVfrVarDataTypeDB.IsTypeNameDefined ("Time") == FALSE) {\r
-    UINT32            Size;\r
-    EFI_VARSTORE_ID   VarStoreId;\r
-    CIfrVarStore      VSObj;\r
-\r
-    VSObj.SetLineNo (LineNo);\r
-    mCVfrDataStorage.DeclareBufferVarStore (\r
-                       "Time",\r
-                       &DefaultGuid,\r
-                       &mCVfrVarDataTypeDB,\r
-                       "EFI_HII_TIME",\r
-                       EFI_VARSTORE_ID_INVALID\r
-                       );\r
-    mCVfrDataStorage.GetVarStoreId("Time", &VarStoreId);\r
-    VSObj.SetVarStoreId (VarStoreId);\r
-    mCVfrVarDataTypeDB.GetDataTypeSize("EFI_HII_TIME", &Size);\r
-    VSObj.SetSize (Size);\r
-       VSObj.SetName ("Time");\r
-    VSObj.SetGuid (&DefaultGuid);\r
-  }\r
-}\r
-\r
-VOID\r
-EfiVfrParser::_DeclareStandardDefaultStorage (\r
-  IN UINT32 LineNo\r
-  )\r
-{\r
-  CIfrDefaultStore DSObj;\r
-\r
-  mCVfrDefaultStore.RegisterDefaultStore (DSObj.GetObjBinAddr(), "Standard Defaults", EFI_STRING_ID_INVALID, EFI_HII_DEFAULT_CLASS_STANDARD);\r
-  DSObj.SetLineNo (LineNo);\r
-  DSObj.SetDefaultName (EFI_STRING_ID_INVALID);\r
-  DSObj.SetDefaultId (EFI_HII_DEFAULT_CLASS_STANDARD);\r
-}\r
-\r
-VOID\r
-EfiVfrParser::AssignQuestionKey (\r
-  IN CIfrQuestionHeader   &QHObj,\r
-  IN ANTLRTokenPtr        KeyTok\r
-  )\r
-{\r
-  UINT16 KeyValue;\r
-\r
-  if (KeyTok == NULL) {\r
-    return;\r
-  }\r
-\r
-  KeyValue = _STOU16 (KeyTok->getText());\r
-\r
-  if (QHObj.FLAGS () & EFI_IFR_FLAG_CALLBACK) {\r
-  /*\r
-   * if the question is not CALLBACK ignore the key.\r
-   */\r
-    _PCATCH(mCVfrQuestionDB.UpdateQuestionId (QHObj.QUESTION_ID(), KeyValue), KeyTok);\r
-    QHObj.SetQuestionId (KeyValue);\r
-  }\r
-}\r
-\r
-VOID\r
-EfiVfrParser::ConvertIdExpr (\r
-  IN UINT32          &ExpOpCount,\r
-  IN UINT32          LineNo,\r
-  IN EFI_QUESTION_ID QId,\r
-  IN INT8            *VarIdStr,\r
-  IN UINT32          BitMask\r
-  )\r
-{\r
-  CIfrQuestionRef1 QR1Obj(LineNo);\r
-  QR1Obj.SetQuestionId (QId, VarIdStr, LineNo);\r
-  _SAVE_OPHDR_COND (QR1Obj, (ExpOpCount == 0));\r
-\r
-  if (BitMask != 0) {\r
-    CIfrUint32       U32Obj(LineNo);\r
-    U32Obj.SetValue (BitMask);\r
-\r
-    CIfrBitWiseAnd   BWAObj(LineNo);\r
-\r
-    CIfrUint8        U8Obj(LineNo);\r
-    switch (BitMask) {\r
-    case DATE_YEAR_BITMASK   : U8Obj.SetValue (0); break;\r
-    case TIME_SECOND_BITMASK : U8Obj.SetValue (0x10); break;\r
-    case DATE_DAY_BITMASK    : U8Obj.SetValue (0x18); break;\r
-    case TIME_HOUR_BITMASK   : U8Obj.SetValue (0); break;\r
-    case TIME_MINUTE_BITMASK : U8Obj.SetValue (0x8); break;\r
-    }\r
-\r
-    CIfrShiftRight   SRObj(LineNo);\r
-  }\r
-\r
-  ExpOpCount += 4;\r
-}\r
-\r
-VOID\r
-EfiVfrParser::IdEqValDoSpecial (\r
-  IN UINT32           &ExpOpCount,\r
-  IN UINT32           LineNo,\r
-  IN EFI_QUESTION_ID  QId,\r
-  IN INT8             *VarIdStr,\r
-  IN UINT32           BitMask,\r
-  IN UINT16           ConstVal,\r
-  IN EFI_COMPARE_TYPE CompareType\r
-  )\r
-{\r
-  ConvertIdExpr (ExpOpCount, LineNo, QId, VarIdStr, BitMask);\r
-\r
-  if (ConstVal > 0xFF) {\r
-    CIfrUint16       U16Obj(LineNo);\r
-    U16Obj.SetValue (ConstVal);\r
-  } else {\r
-    CIfrUint8        U8Obj(LineNo);\r
-    U8Obj.SetValue ((UINT8)ConstVal);\r
-  }\r
-\r
-  switch (CompareType) {\r
-  case EQUAL :\r
-    {\r
-      CIfrEqual EObj(LineNo);\r
-      break;\r
-    }\r
-  case LESS_EQUAL :\r
-    {\r
-      CIfrLessEqual LEObj(LineNo);\r
-      break;\r
-    }\r
-  case LESS_THAN :\r
-    {\r
-      CIfrLessThan LTObj(LineNo);\r
-      break;\r
-    }\r
-  case GREATER_EQUAL :\r
-    {\r
-      CIfrGreaterEqual GEObj(LineNo);\r
-      break;\r
-    }\r
-  case GREATER_THAN :\r
-    {\r
-      CIfrGreaterThan GTObj(LineNo);\r
-      break;\r
-    }\r
-  }\r
-\r
-  ExpOpCount += 2;\r
-}\r
-\r
-VOID\r
-EfiVfrParser::IdEqIdDoSpecial (\r
-  IN UINT32           &ExpOpCount,\r
-  IN UINT32           LineNo,\r
-  IN EFI_QUESTION_ID  QId1,\r
-  IN INT8             *VarId1Str,\r
-  IN UINT32           BitMask1,\r
-  IN EFI_QUESTION_ID  QId2,\r
-  IN INT8             *VarId2Str,\r
-  IN UINT32           BitMask2,\r
-  IN EFI_COMPARE_TYPE CompareType\r
-  )\r
-{\r
-  ConvertIdExpr (ExpOpCount, LineNo, QId1, VarId1Str, BitMask1);\r
-  ConvertIdExpr (ExpOpCount, LineNo, QId2, VarId2Str, BitMask2);\r
-\r
-  switch (CompareType) {\r
-  case EQUAL :\r
-    {\r
-      CIfrEqual EObj(LineNo);\r
-      break;\r
-    }\r
-  case LESS_EQUAL :\r
-    {\r
-      CIfrLessEqual LEObj(LineNo);\r
-      break;\r
-    }\r
-  case LESS_THAN :\r
-    {\r
-      CIfrLessThan LTObj(LineNo);\r
-      break;\r
-    }\r
-  case GREATER_EQUAL :\r
-    {\r
-      CIfrGreaterEqual GEObj(LineNo);\r
-      break;\r
-    }\r
-  case GREATER_THAN :\r
-    {\r
-      CIfrGreaterThan GTObj(LineNo);\r
-      break;\r
-    }\r
-  }\r
-\r
-  ExpOpCount++;\r
-}\r
-\r
-VOID\r
-EfiVfrParser::IdEqListDoSpecial (\r
-  IN UINT32          &ExpOpCount,\r
-  IN UINT32          LineNo,\r
-  IN EFI_QUESTION_ID QId,\r
-  IN INT8            *VarIdStr,\r
-  IN UINT32          BitMask,\r
-  IN UINT16          ListLen,\r
-  IN UINT16          *ValueList\r
-  )\r
-{\r
-  UINT16 Index;\r
-\r
-  if (ListLen == 0) {\r
-    return;\r
-  }\r
-\r
-  IdEqValDoSpecial (ExpOpCount, LineNo, QId, VarIdStr, BitMask, ValueList[0], EQUAL);\r
-  for (Index = 1; Index < ListLen; Index++) {\r
-    IdEqValDoSpecial (ExpOpCount, LineNo, QId, VarIdStr, BitMask, ValueList[Index], EQUAL);\r
-    CIfrOr OObj (LineNo);\r
-    ExpOpCount++;\r
-  }\r
-}\r
-\r
->>\r