]> git.proxmox.com Git - mirror_edk2.git/blobdiff - EdkCompatibilityPkg/Sample/Tools/Source/UefiVfrCompile/VfrSyntax.g
Sync all bug fixes between EDK1.04 and EDK1.06 into EdkCompatibilityPkg.
[mirror_edk2.git] / EdkCompatibilityPkg / Sample / Tools / Source / UefiVfrCompile / VfrSyntax.g
index 1a31b2e41de6e25c4e6b982348f4ca91777298b2..85060c8e84f1ff8ba9e87208942e1c13230f7f23 100644 (file)
@@ -29,7 +29,7 @@ Abstract:
 #include "stdio.h"\r
 #include "PBlackBox.h"\r
 #include "DLexerBase.h"\r
-#include "VfrLexer.h"    \r
+#include "VfrLexer.h"\r
 #include "AToken.h"\r
 \r
 #define GET_LINENO(Obj)       ((Obj)->getLine())\r
@@ -42,9 +42,9 @@ class CVfrDLGLexer : public VfrLexer
 {\r
 public:\r
   CVfrDLGLexer (DLGFileInput *F) : VfrLexer (F) {};\r
-  INT32 errstd (char *Text) \r
-  { \r
-    printf ("unrecognized input '%s'\n", Text); \r
+  INT32 errstd (char *Text)\r
+  {\r
+    printf ("unrecognized input '%s'\n", Text);\r
   }\r
 };\r
 \r
@@ -70,7 +70,7 @@ VfrParserStart (
 // is not preceeded with a backslash.\r
 //\r
 #lexclass QUOTED_STRING\r
-#token TheString            "~[\"]*\"" << mode (START); >>     \r
+#token TheString            "~[\"]*\"" << mode (START); >>\r
 \r
 //\r
 // Define a lexclass for skipping over C++ style comments\r
@@ -92,7 +92,7 @@ VfrParserStart (
 //\r
 // Skip whitespace\r
 //\r
-#token "[\ \t]"   << skip (); >> \r
+#token "[\ \t]"   << skip (); >>\r
 \r
 //\r
 // Skip over newlines, but count them\r
@@ -128,13 +128,12 @@ VfrParserStart (
 #token Title("title")                           "title"\r
 #token FormId("formid")                         "formid"\r
 #token OneOf("oneof")                           "oneof"\r
-#token EndoneOf("endoneof")                     "endoneof"\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 EndOneOf("endoneof")                     "endoneof"\r
 #token Form("form")                             "form"\r
 #token Subtitle("subtitle")                     "subtitle"\r
 #token Help("help")                             "help"\r
@@ -157,26 +156,27 @@ VfrParserStart (
 #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"
 #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 GUID("guid")                             "guid"\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 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 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
@@ -198,6 +198,7 @@ VfrParserStart (
 #token OptionOnlyFlag("OPTIONS_ONLY")           "OPTIONS_ONLY"\r
 #token Class("class")                           "class"\r
 #token Subclass("subclass")                     "subclass"\r
+#token ClassGuid("classguid")                   "classguid"
 #token TypeDef("typedef")                       "typedef"\r
 #token Restore("restore")                       "restore"\r
 #token Save("save")                             "save"\r
@@ -253,36 +254,71 @@ VfrParserStart (
 //\r
 \r
 vfrProgram > [UINT8 Return] :\r
-  << mParserStatus = 0; >>\r
+  <<
+     mParserStatus = 0;\r
+     mConstantOnlyInExpression = FALSE;
+  >>\r
   (\r
-    (\r
-         "\#pragma" "pack" "\(" A:Number "\)"          << _PCATCH(mCVfrVarDataTypeDB.Pack (_STOU32(A->getText())), A); >>\r
-      vfrDataStructDefinition\r
-         "\#pragma" "pack" "\(" "\)"                   << mCVfrVarDataTypeDB.UnPack (); >>\r
-    )\r
-    |\r
-    (\r
-      vfrDataStructDefinition\r
-    )\r
+      vfrPragmaPackDefinition\r
+    | vfrDataStructDefinition\r
   )*\r
-  vfrFromSetDefinition\r
+  vfrFormSetDefinition\r
   << $Return = mParserStatus; >>\r
   ;\r
 \r
-//*****************************************************************************\r
-//\r
-// the syntax of data struct definition\r
-//\r
+pragmaPackShowDef :\r
+  L:"show"                                          << mCVfrVarDataTypeDB.Pack (L->getLine(), VFR_PACK_SHOW); >>
+  ;
+\r
+pragmaPackStackDef :\r
+  <<
+     UINT32 LineNum;
+     UINT8  PackAction;
+     INT8   *Identifier = NULL;
+     UINT32 PackNumber  = DEFAULT_PACK_ALIGN;
+  >>
+  (
+      L1:"push"                                     << LineNum = L1->getLine(); PackAction = VFR_PACK_PUSH; >>
+    | L2:"pop"                                      << LineNum = L2->getLine(); PackAction = VFR_PACK_POP; >>
+  )
+  {
+    "," ID:StringIdentifier                         << Identifier = ID->getText(); >>
+  }
+  {
+    "," N:Number                                    << PackAction |= VFR_PACK_ASSIGN; PackNumber = _STOU32(N->getText()); >>
+  }
+                                                    << mCVfrVarDataTypeDB.Pack (LineNum, PackAction, Identifier, PackNumber); >>
+  ;
+\r
+pragmaPackNumber :
+  <<
+     UINT32 LineNum;
+     UINT32 PackNumber = DEFAULT_PACK_ALIGN;
+  >>
+  N:Number                                          << LineNum = N->getLine(); PackNumber = _STOU32(N->getText()); >>
+                                                    << mCVfrVarDataTypeDB.Pack (LineNum, VFR_PACK_ASSIGN, NULL, PackNumber); >>
+  ;
+
+vfrPragmaPackDefinition :
+  "\#pragma" "pack" "\("
+  {
+      pragmaPackShowDef
+    | pragmaPackStackDef
+    | pragmaPackNumber
+  }
+  "\)"
+  ;
+
 vfrDataStructDefinition :\r
   { TypeDef } Struct                                << mCVfrVarDataTypeDB.DeclareDataTypeBegin (); >>\r
-  { NonNVDataMap }\r
+  { NonNvDataMap }\r
   {\r
     N1:StringIdentifier                             << _PCATCH(mCVfrVarDataTypeDB.SetNewTypeName (N1->getText()), N1); >>\r
   }\r
-  OpenBrace \r
+  OpenBrace\r
     vfrDataStructFields\r
-  CloseBrace \r
-  { \r
+  CloseBrace\r
+  {\r
     N2:StringIdentifier                             << _PCATCH(mCVfrVarDataTypeDB.SetNewTypeName (N2->getText()), N2); >>\r
   }\r
   ";"                                               << mCVfrVarDataTypeDB.DeclareDataTypeEnd (); >>\r
@@ -290,13 +326,13 @@ vfrDataStructDefinition :
 \r
 vfrDataStructFields :\r
   (\r
-     dataStructField64     | \r
-        dataStructField32     | \r
-        dataStructField16     | \r
-        dataStructField8      | \r
+     dataStructField64     |\r
+        dataStructField32     |\r
+        dataStructField16     |\r
+        dataStructField8      |\r
      dataStructFieldBool   |\r
         dataStructFieldString |\r
-        dataStructFieldDate   | \r
+        dataStructFieldDate   |\r
         dataStructFieldTime   |\r
      dataStructFieldUser\r
   )*\r
@@ -304,8 +340,8 @@ vfrDataStructFields :
 \r
 dataStructField64 :\r
   << UINT32 ArrayNum = 0; >>\r
-  "UINT64" \r
-  N:StringIdentifier \r
+  "UINT64"\r
+  N:StringIdentifier\r
   {\r
     OpenBracket I:Number CloseBracket               << ArrayNum = _STOU32(I->getText()); >>\r
   }\r
@@ -314,8 +350,8 @@ dataStructField64 :
 \r
 dataStructField32 :\r
   << UINT32 ArrayNum = 0; >>\r
-  "UINT32" \r
-  N:StringIdentifier \r
+  "UINT32"\r
+  N:StringIdentifier\r
   {\r
     OpenBracket I:Number CloseBracket               << ArrayNum = _STOU32(I->getText()); >>\r
   }\r
@@ -325,7 +361,7 @@ dataStructField32 :
 dataStructField16 :\r
   << UINT32 ArrayNum = 0; >>\r
   ("UINT16" | "CHAR16")\r
-  N:StringIdentifier \r
+  N:StringIdentifier\r
   {\r
     OpenBracket I:Number CloseBracket               << ArrayNum = _STOU32(I->getText()); >>\r
   }\r
@@ -335,7 +371,7 @@ dataStructField16 :
 dataStructField8 :\r
   << UINT32 ArrayNum = 0; >>\r
   "UINT8"\r
-  N:StringIdentifier \r
+  N:StringIdentifier\r
   {\r
     OpenBracket I:Number CloseBracket               << ArrayNum = _STOU32(I->getText()); >>\r
   }\r
@@ -345,7 +381,7 @@ dataStructField8 :
 dataStructFieldBool :\r
   << UINT32 ArrayNum = 0; >>\r
   "BOOLEAN"\r
-  N:StringIdentifier \r
+  N:StringIdentifier\r
   {\r
     OpenBracket I:Number CloseBracket               << ArrayNum = _STOU32(I->getText()); >>\r
   }\r
@@ -355,7 +391,7 @@ dataStructFieldBool :
 dataStructFieldString :\r
   << UINT32 ArrayNum = 0; >>\r
   "EFI_STRING_ID"\r
-  N:StringIdentifier \r
+  N:StringIdentifier\r
   {\r
     OpenBracket I:Number CloseBracket               << ArrayNum = _STOU32(I->getText()); >>\r
   }\r
@@ -364,8 +400,8 @@ dataStructFieldString :
 \r
 dataStructFieldDate :\r
   << UINT32 ArrayNum = 0; >>\r
-  "EFI_HII_DATE" \r
-  N:StringIdentifier \r
+  "EFI_HII_DATE"\r
+  N:StringIdentifier\r
   {\r
     OpenBracket I:Number CloseBracket               << ArrayNum = _STOU32(I->getText()); >>\r
   }\r
@@ -374,8 +410,8 @@ dataStructFieldDate :
 \r
 dataStructFieldTime :\r
   << UINT32 ArrayNum = 0; >>\r
-  "EFI_HII_TIME" \r
-  N:StringIdentifier \r
+  "EFI_HII_TIME"\r
+  N:StringIdentifier\r
   {\r
     OpenBracket I:Number CloseBracket               << ArrayNum = _STOU32(I->getText()); >>\r
   }\r
@@ -394,30 +430,89 @@ dataStructFieldUser :
 \r
 //*****************************************************************************\r
 //\r
-// the syntax of from set definition\r
+// the syntax of GUID definition\r
 //\r
-vfrFromSetDefinition :\r
+guidSubDefinition [EFI_GUID &Guid] :\r
+  G4:Number "," G5:Number "," G6:Number "," G7:Number "," G8:Number "," G9:Number "," G10:Number "," G11:Number
+                                                    <<\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());
+                                                                                                          Guid.Data4[4] = _STOU8(G8->getText());
+                                                                                                          Guid.Data4[5] = _STOU8(G9->getText());
+                                                                                                          Guid.Data4[6] = _STOU8(G10->getText());
+                                                                                                          Guid.Data4[7] = _STOU8(G11->getText());
+                                                    >>\r
+  ;\r
+\r
+guidDefinition [EFI_GUID &Guid] :
+  OpenBrace\r
+    G1:Number "," G2:Number "," G3:Number ","\r
+                                                    <<
+                                                       Guid.Data1 = _STOU32 (G1->getText());
+                                                       Guid.Data2 = _STOU16 (G2->getText());
+                                                       Guid.Data3 = _STOU16 (G3->getText());
+                                                    >>
+    (
+        OpenBrace guidSubDefinition[Guid] CloseBrace
+      | guidSubDefinition[Guid]
+    )
+  CloseBrace\r
+  ;
+
+//*****************************************************************************
+//
+// the syntax of form set definition
+//
+vfrFormSetDefinition :
   <<\r
      EFI_GUID    Guid;\r
-     CIfrFormSet FSObj;\r
-     UINT16      C, SC;\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
-  L:FormSet                                         << SET_LINE_INFO (FSObj, L); >>\r
-  GUID "=" \r
-  OpenBrace\r
-    G1:Number "," G2:Number "," G3:Number "," G4:Number "," G5:Number "," G6:Number "," \r
-    G7:Number "," G8:Number "," G9:Number "," G10:Number "," G11:Number\r
-  CloseBrace\r
-                                                    << \r
-                                                       _CRGUID (&Guid, G1->getText (), G2->getText (), G3->getText (), \r
-                                                                       G4->getText (), G5->getText (), G6->getText (), \r
-                                                                       G7->getText (), G8->getText (), G9->getText (), \r
-                                                                       G10->getText (), G11->getText ()); \r
-                                                       FSObj.SetGuid (&Guid);\r
-                                                    >>\r
-  ","\r
-  Title "=" "STRING_TOKEN" "\(" S1:Number "\)" ","  << FSObj.SetFormSetTitle (_STOSID(S1->getText())); >>\r
-  Help  "=" "STRING_TOKEN" "\(" S2:Number "\)" ","  << FSObj.SetHelp (_STOSID(S2->getText())); >>\r
+  L:FormSet
+  Uuid "=" guidDefinition[Guid] ","
+  Title "=" "STRING_TOKEN" "\(" S1:Number "\)" ","
+  Help  "=" "STRING_TOKEN" "\(" S2:Number "\)" ","
+  {
+    ClassGuid "=" guidDefinition[ClassGuids[ClassGuidNum]]        <<  ++ClassGuidNum; >>
+                  (
+                   "\|" guidDefinition[ClassGuids[ClassGuidNum]]  << ++ClassGuidNum; >>
+                  )*
+                  ","\r
+  }
+                                                    <<
+                                                      switch (ClassGuidNum) {
+                                                      case 0:
+                                                        FSObj = new CIfrFormSet(sizeof(EFI_IFR_FORM_SET));
+                                                        FSObj->SetClassGuid(&DefaultClassGuid);
+                                                        break;
+                                                      case 1:
+                                                        FSObj = new CIfrFormSet(sizeof(EFI_IFR_FORM_SET));
+                                                        FSObj->SetClassGuid(&ClassGuids[0]);
+                                                        break;
+                                                      case 2:
+                                                        FSObj = new CIfrFormSet(sizeof(EFI_IFR_FORM_SET) + sizeof(EFI_GUID));
+                                                        FSObj->SetClassGuid(&ClassGuids[0]);
+                                                        FSObj->SetClassGuid(&ClassGuids[1]);
+                                                        break;
+                                                      default:
+                                                        FSObj = new CIfrFormSet(sizeof(EFI_IFR_FORM_SET) + 2 * sizeof(EFI_GUID));
+                                                        FSObj->SetClassGuid(&ClassGuids[0]);
+                                                        FSObj->SetClassGuid(&ClassGuids[1]);
+                                                        FSObj->SetClassGuid(&ClassGuids[2]);
+                                                        break;
+                                                      }
+
+                                                      SET_LINE_INFO (*FSObj, L);
+                                                      FSObj->SetGuid (&Guid);
+                                                      FSObj->SetFormSetTitle (_STOSID(S1->getText()));\r
+                                                      FSObj->SetHelp (_STOSID(S2->getText()));\r
+                                                    >>
   {\r
     Class "=" classDefinition[C] ","                << {CIfrClass CObj; CObj.SetClass(C);} >>\r
   }\r
@@ -429,7 +524,7 @@ vfrFromSetDefinition :
                                                        //_DeclareDefaultLinearVarStore (GET_LINENO (L));\r
                                                     >>\r
   vfrFormSetList\r
-  E:EndFormSet                                      << CRT_END_OP (E); >>\r
+  E:EndFormSet                                      << CRT_END_OP (E); if (FSObj != NULL) {delete FSObj;}>>\r
   ";"\r
   ;\r
 \r
@@ -441,7 +536,7 @@ vfrFormSetList :
     vfrStatementVarStoreEfi       |\r
     vfrStatementVarStoreNameValue |\r
     vfrStatementDefaultStore      |\r
-    vfrStatementDisableIfFromSet\r
+    vfrStatementDisableIfFormSet\r
   )*\r
   ;\r
 \r
@@ -452,7 +547,7 @@ vfrStatementDefaultStore :
   {\r
     "," Attribute "=" A:Number                      << DefaultId = _STOU16(A->getText()); >>\r
   }\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
@@ -468,7 +563,7 @@ vfrStatementDefaultStore :
 \r
 vfrStatementVarStoreLinear :\r
   <<\r
-     EFI_GUID        Guid; \r
+     EFI_GUID        Guid;\r
      CIfrVarStore    VSObj;\r
      INT8            *TypeName;\r
         UINT32          LineNum;\r
@@ -487,31 +582,28 @@ vfrStatementVarStoreLinear :
   )\r
   { Key "=" Number "," }                            // Key is used to assign Varid in Framework VFR but no use in UEFI2.1 VFR\r
   {\r
-    VarId "=" ID:Number ","                         << VarStoreId = _STOU16(ID->getText()); >>\r
+    VarId "=" ID:Number ","                         <<
+                                                       _PCATCH(
+                                                         (INTN)(VarStoreId = _STOU16(ID->getText())) != 0,\r
+                                                         (INTN)TRUE,
+                                                         ID,
+                                                         "varid 0 is not allowed."
+                                                         );
+                                                    >>
   }\r
   Name "=" SN:StringIdentifier ","\r
-  GUID "="\r
-  OpenBrace\r
-    G1:Number "," G2:Number "," G3:Number "," G4:Number "," G5:Number "," G6:Number "," \r
-    G7:Number "," G8:Number "," G9:Number "," G10:Number "," G11:Number\r
-  CloseBrace\r
-                                                    << \r
-                                                       _CRGUID (&Guid, G1->getText (), G2->getText (), G3->getText (), \r
-                                                                       G4->getText (), G5->getText (), G6->getText (), \r
-                                                                       G7->getText (), G8->getText (), G9->getText (), \r
-                                                                       G10->getText (), G11->getText ()); \r
-                                                    >>\r
+  Uuid "=" guidDefinition[Guid]\r
                                                     <<\r
                                                        _PCATCH(mCVfrDataStorage.DeclareBufferVarStore (\r
-                                                                                  SN->getText(), \r
-                                                                                  &Guid, \r
-                                                                                  &mCVfrVarDataTypeDB, \r
+                                                                                  SN->getText(),\r
+                                                                                  &Guid,\r
+                                                                                  &mCVfrVarDataTypeDB,\r
                                                                                   TypeName,\r
                                                                                                                                                                  VarStoreId\r
                                                                                   ), LineNum);\r
                                                     >>\r
-                                                    << \r
-                                                       VSObj.SetGuid (&Guid); \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
@@ -534,22 +626,11 @@ vfrStatementVarStoreEfi :
                                                     << VSEObj.SetAttributes (Attr); >>\r
   Name "=" "STRING_TOKEN" "\(" VN:Number "\)" ","\r
   VarSize "=" N:Number ","\r
-  GUID "=" \r
-  OpenBrace\r
-    G1:Number "," G2:Number "," G3:Number "," G4:Number "," G5:Number "," G6:Number "," \r
-    G7:Number "," G8:Number "," G9:Number "," G10:Number "," G11:Number\r
-  CloseBrace\r
-                                                    << \r
-                                                       _CRGUID (&Guid, G1->getText (), G2->getText (), G3->getText (), \r
-                                                                       G4->getText (), G5->getText (), G6->getText (), \r
-                                                                       G7->getText (), G8->getText (), G9->getText (), \r
-                                                                       G10->getText (), G11->getText ()); \r
-                                                    >>\r
-                                                    << mCVfrDataStorage.DeclareEfiVarStore (SN->getText(), &Guid, _STOSID(VN->getText()), _STOU32(N->getText())); >>\r
-                                                    << \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
+                                                       VSEObj.SetVarStoreId (VarStoreId);\r
                                                     >>\r
   ";"\r
   ;\r
@@ -560,7 +641,7 @@ vfrVarStoreEfiAttr [UINT32 & Attr] :
 \r
 vfrStatementVarStoreNameValue :\r
   <<\r
-     EFI_GUID              Guid; \r
+     EFI_GUID              Guid;\r
      CIfrVarStoreNameValue VSNVObj;\r
      EFI_VARSTORE_ID       VarStoreId;\r
   >>\r
@@ -569,22 +650,11 @@ vfrStatementVarStoreNameValue :
   (\r
     Name "=" "STRING_TOKEN" "\(" N:Number "\)" ","  << _PCATCH(mCVfrDataStorage.NameTableAddItem (_STOSID(N->getText())), SN); >>\r
   )+\r
-  GUID "=" \r
-  OpenBrace\r
-    G1:Number "," G2:Number "," G3:Number "," G4:Number "," G5:Number "," G6:Number "," \r
-    G7:Number "," G8:Number "," G9:Number "," G10:Number "," G11:Number\r
-  CloseBrace\r
-                                                    << \r
-                                                       _CRGUID (&Guid, G1->getText (), G2->getText (), G3->getText (), \r
-                                                                       G4->getText (), G5->getText (), G6->getText (), \r
-                                                                       G7->getText (), G8->getText (), G9->getText (), \r
-                                                                       G10->getText (), G11->getText ()); \r
-                                                    >>\r
-                                                    << _PCATCH(mCVfrDataStorage.DeclareNameVarStoreEnd (&Guid), 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
+                                                       VSNVObj.SetVarStoreId (VarStoreId);\r
                                                     >>\r
   ";"\r
   ;\r
@@ -597,7 +667,7 @@ classDefinition[UINT16 & Class] :
   << $Class = 0; >>\r
   validClassNames[$Class] ( "\|" validClassNames[$Class] )*\r
   ;\r
-  \r
+\r
 validClassNames[UINT16 & Class] :\r
     ClassNonDevice                                  << $Class |= EFI_NON_DEVICE_CLASS; >>\r
   | ClassDiskDevice                                 << $Class |= EFI_DISK_DEVICE_CLASS; >>\r
@@ -618,10 +688,13 @@ subclassDefinition[UINT16 & SubClass] :
   | N:Number                                        << $SubClass |= _STOU16(N->getText()); >>\r
   ;\r
 \r
-vfrStatementDisableIfFromSet :\r
-  << CIfrDisableIf DIObj; >>\r
+vfrStatementDisableIfFormSet :\r
+  <<
+    CIfrDisableIf DIObj;\r
+    UINT32 ExpOpCount = 0;
+  >>
   D:DisableIf                                       << DIObj.SetLineNo(D->getLine()); >>\r
-  vfrStatementExpression[0] ";"\r
+  vfrStatementExpression[0, ExpOpCount] ";"         << mConstantOnlyInExpression = FALSE; >>\r
   vfrFormSetList\r
   E:EndIf                                           << CRT_END_OP (E); >>\r
   ";"\r
@@ -638,7 +711,7 @@ vfrStatementHeader[CIfrStatementHeader *SHObj] :
 \r
 vfrQuestionHeader[CIfrQuestionHeader & QHObj, EFI_QUESION_TYPE QType = QUESTION_NORMAL]:\r
   <<\r
-     EFI_VARSTORE_INFO Info; \r
+     EFI_VARSTORE_INFO Info;\r
         EFI_QUESTION_ID   QId       = EFI_QUESTION_ID_INVALID;\r
      INT8              *QName    = NULL;\r
      INT8              *VarIdStr = NULL;\r
@@ -653,10 +726,10 @@ vfrQuestionHeader[CIfrQuestionHeader & QHObj, EFI_QUESION_TYPE QType = QUESTION_
   {\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
+                                                       _PCATCH(mCVfrQuestionDB.FindQuestion (QId), VFR_RETURN_UNDEFINED, ID, "has already been used please assign another number");\r
                                                     >>\r
   }\r
-                                                    << \r
+                                                    <<\r
                                                        switch (QType) {\r
                                                        case QUESTION_NORMAL:\r
                                                          mCVfrQuestionDB.RegisterQuestion (QName, VarIdStr, QId);\r
@@ -692,10 +765,10 @@ vfrQuestionHeaderWithNoStorage[CIfrQuestionHeader *QHObj] :
   {\r
     QuestionId "=" ID:Number ","                    <<\r
                                                        QId = _STOQID(ID->getText());\r
-                                                       _PCATCH(mCVfrQuestionDB.FindQuestion (QId), VFR_RETURN_UNDEFINED, ID, "redefined quesiont ID"); \r
+                                                       _PCATCH(mCVfrQuestionDB.FindQuestion (QId), VFR_RETURN_UNDEFINED, ID, "redefined quesiont ID");\r
                                                     >>\r
   }\r
-                                                    << \r
+                                                    <<\r
                                                        mCVfrQuestionDB.RegisterQuestion (QName, NULL, QId);\r
                                                        $QHObj->SetQuestionId (QId);\r
                                                     >>\r
@@ -718,13 +791,14 @@ vfrStorageVarId[EFI_VARSTORE_INFO & Info, INT8 *&QuestVarIdStr] :
      INT8                  *VarStr      = NULL;\r
      INT8                  *SName       = NULL;\r
      INT8                  *TName       = NULL;\r
+     EFI_IFR_TYPE_VALUE    Dummy        = {0};
   >>\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.GetVarStoreId (SName, &$Info.mVarStoreId), SN1);\r
                                                                                                           _PCATCH(mCVfrDataStorage.GetNameVarStoreInfo (&$Info, Idx), SN1);\r
                                                                                                        >>\r
   )\r
@@ -739,7 +813,7 @@ vfrStorageVarId[EFI_VARSTORE_INFO & Info, INT8 *&QuestVarIdStr] :
                                                                                                                 _STRCAT(&VarStr, TName);\r
                                                                                                           }\r
                                                     >>\r
-  \r
+\r
     (\r
       "."                                           <<\r
                                                        _PCATCH(((VarStoreType != EFI_VFR_VARSTORE_BUFFER) ? VFR_RETURN_EFIVARSTORE_USE_ERROR : VFR_RETURN_SUCCESS), SN2);\r
@@ -750,7 +824,7 @@ vfrStorageVarId[EFI_VARSTORE_INFO & Info, INT8 *&QuestVarIdStr] :
         OpenBracket I2:Number CloseBracket          << _STRCAT(&VarIdStr, "["); _STRCAT(&VarIdStr, I2->getText()); _STRCAT(&VarIdStr, "]"); >>\r
                                                     << _STRCAT(&VarStr, "["); _STRCAT(&VarStr, I2->getText()); _STRCAT(&VarStr, "]"); >>\r
       }\r
-    )*                                              << \r
+    )*                                              <<\r
                                                        switch (VarStoreType) {\r
                                                        case EFI_VFR_VARSTORE_EFI:\r
                                                          _PCATCH(mCVfrDataStorage.GetEfiVarStoreInfo (&$Info), SN2);\r
@@ -758,6 +832,19 @@ vfrStorageVarId[EFI_VARSTORE_INFO & Info, INT8 *&QuestVarIdStr] :
                                                        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 (
+                                                                    SName,
+                                                                    NULL),
+                                                                 SN2->getLine());
+                                                         _PCATCH((EFI_VFR_RETURN_CODE)gCVfrBufferConfig.Write (
+                                                                    'a',
+                                                                    SName,
+                                                                    NULL,
+                                                                    $Info.mVarType,
+                                                                    $Info.mInfo.mVarOffset,
+                                                                    $Info.mVarTotalSize,
+                                                                    Dummy),
+                                                                 SN2->getLine());
                                                          break;\r
                                                        case EFI_VFR_VARSTORE_NAME:\r
                                                        default: break;\r
@@ -775,7 +862,11 @@ vfrQuestionDataFieldName [EFI_QUESTION_ID &QId, UINT32 &Mask, INT8 *&VarIdStr, U
     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
+  )                                                 <<\r
+                                                       if (mConstantOnlyInExpression) {
+                                                         _PCATCH(VFR_RETURN_CONSTANT_ONLY, LineNo);
+                                                       }
+                                                    >>
   |\r
   (\r
     SN2:StringIdentifier                            << _STRCAT (&VarIdStr, SN2->getText()); LineNo = SN2->getLine(); >>\r
@@ -787,11 +878,15 @@ vfrQuestionDataFieldName [EFI_QUESTION_ID &QId, UINT32 &Mask, INT8 *&VarIdStr, U
       }\r
     )*\r
                                                     << mCVfrQuestionDB.GetQuestionId (NULL, VarIdStr, $QId, $Mask); >>\r
-  )\r
+  )                                                 <<\r
+                                                       if (mConstantOnlyInExpression) {
+                                                         _PCATCH(VFR_RETURN_CONSTANT_ONLY, LineNo);
+                                                       }
+                                                    >>
   ;\r
 \r
 vfrConstantValueField[UINT8 Type] > [EFI_IFR_TYPE_VALUE Value] :\r
-    N1:Number                                       << \r
+    N1:Number                                       <<\r
                                                        switch ($Type) {\r
                                                        case EFI_IFR_TYPE_NUM_SIZE_8 :\r
                                                                                                             $Value.u8     = _STOU8(N1->getText());\r
@@ -815,7 +910,7 @@ vfrConstantValueField[UINT8 Type] > [EFI_IFR_TYPE_VALUE Value] :
                                                                                                           case EFI_IFR_TYPE_DATE :\r
                                                                                                           default :\r
                                                                                                                 break;\r
-                                                                                                          } \r
+                                                                                                          }\r
                                                     >>\r
   | B1:True                                         << $Value.b      = TRUE; >>\r
   | B2:False                                        << $Value.b      = FALSE; >>\r
@@ -845,7 +940,7 @@ vfrFormDefinition :
     vfrStatementQuestions                    |\r
     vfrStatementConditional                  |\r
     vfrStatementLabel                        |\r
-    vfrStatementBanner                       \r
+    vfrStatementBanner\r
     // Just for framework vfr compatibility\r
     //vfrStatementInvalid\r
   )*\r
@@ -853,14 +948,17 @@ vfrFormDefinition :
   ";"\r
   ;\r
 \r
-vfrStatementRules : \r
-  << CIfrRule RObj; >>\r
+vfrStatementRules :\r
+  << 
+    CIfrRule RObj;\r
+    UINT32 ExpOpCount = 0;
+  >>
   R:Rule                                            << RObj.SetLineNo(R->getLine()); >>\r
   S1:StringIdentifier ","                           <<\r
                                                        mCVfrRulesDB.RegisterRule (S1->getText());\r
-                                                       RObj.SetRuleId (mCVfrRulesDB.GetRuleId(S1->getText())); \r
+                                                       RObj.SetRuleId (mCVfrRulesDB.GetRuleId(S1->getText()));\r
                                                     >>\r
-  vfrStatementExpression[0]\r
+  vfrStatementExpression[0, ExpOpCount]\r
   E:EndRule                                         << CRT_END_OP (E); >>\r
   ";"\r
   ;\r
@@ -868,7 +966,7 @@ vfrStatementRules :
 vfrStatementDefault :\r
   <<\r
      BOOLEAN               IsExp         = FALSE;\r
-     EFI_IFR_TYPE_VALUE    Val\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
@@ -877,30 +975,40 @@ vfrStatementDefault :
   D:Default                                         << DObj.SetLineNo(D->getLine()); >>\r
   (\r
     (\r
-        vfrStatementValue ","                       << IsExp = TRUE; DObj.SetScope (1); >>\r
-      | "=" vfrConstantValueField[_GET_CURRQEST_DATATYPE()] > [Val] ","  \r
-                                                    << DObj.SetType (_GET_CURRQEST_DATATYPE()); DObj.SetValue(Val); >>\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()) {
+                                                          //check default value is valid for Numeric Opcode
+                                                          if (Val.u64 < gCurrentMinMaxData->GetMinData(_GET_CURRQEST_DATATYPE()) || Val.u64 > gCurrentMinMaxData->GetMaxData(_GET_CURRQEST_DATATYPE())) {
+                                                            _PCATCH (VFR_RETURN_INVALID_PARAMETER, D->getLine(), "Numeric default value must be between MinValue and MaxValue.");
+                                                          }
+                                                        }
+                                                        DObj.SetType (_GET_CURRQEST_DATATYPE()); \r
+                                                        DObj.SetValue(Val);
+                                                    >>
     )\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), D->getLine()); \r
-                                                                                                          }\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),
+                                                                   D->getLine()\r
+                                                                   );
+                                                       }\r
+                                                    >>\r
   )\r
   ;\r
 \r
 vfrStatementStat :\r
-  vfrStatementSubTitle        | \r
+  vfrStatementSubTitle        |\r
   vfrStatementStaticText      |\r
   vfrStatementCrossReference\r
   ;\r
@@ -932,14 +1040,18 @@ vfrStatementInvalid :
   ;\r
 \r
 flagsField :\r
-  Number | InteractiveFlag | ManufacturingFlag | DefaultFlag | \r
+  Number | InteractiveFlag | ManufacturingFlag | DefaultFlag |\r
   NVAccessFlag | ResetRequiredFlag | LateCheckFlag\r
   ;\r
 \r
 vfrStatementValue :\r
-  << CIfrValue VObj; >>\r
+  << 
+    CIfrValue VObj;\r
+    UINT32 ExpOpCount = 0;
+  >>
   V:Value                                              << VObj.SetLineNo(V->getLine()); >>\r
-  "=" vfrStatementExpression[0]\r
+  "=" vfrStatementExpression[0, ExpOpCount]\r
+                                                       << { CIfrEnd EndObj; EndObj.SetLineNo(0); } >>
   ;\r
 \r
 vfrStatementSubTitle :\r
@@ -965,7 +1077,7 @@ subtitleFlagsField [UINT8 & Flags] :
   ;\r
 \r
 vfrStatementStaticText :\r
-  << \r
+  <<\r
      UINT8           Flags   = 0;\r
      EFI_QUESTION_ID QId     = EFI_QUESTION_ID_INVALID;\r
      EFI_STRING_ID   TxtTwo  = EFI_STRING_ID_INVALID;\r
@@ -983,6 +1095,7 @@ vfrStatementStaticText :
                                                        <<\r
                                                           if (Flags & EFI_IFR_FLAG_CALLBACK) {\r
                                                             CIfrAction AObj;\r
+                                                            AObj.SetLineNo (T->getLine());
                                                             mCVfrQuestionDB.RegisterQuestion (NULL, NULL, QId);\r
                                                             AObj.SetQuestionId (QId);\r
                                                             AObj.SetPrompt (_STOSID(S2->getText()));\r
@@ -1013,7 +1126,7 @@ vfrStatementCrossReference :
   ;\r
 \r
 vfrStatementGoto :\r
-  << \r
+  <<\r
      UINT8               RefType = 1;\r
      EFI_STRING_ID       DevPath;\r
      EFI_GUID            FSId;\r
@@ -1030,39 +1143,23 @@ vfrStatementGoto :
   (\r
     (\r
       DevicePath "=" "STRING_TOKEN" "\(" P:Number "\)" ","\r
-      FormSetGuid "=" \r
-        OpenBrace\r
-          G11:Number "," G12:Number "," G13:Number "," G14:Number "," G15:Number "," G16:Number "," \r
-          G17:Number "," G18:Number "," G19:Number "," G110:Number "," G111:Number\r
-        CloseBrace ","\r
+      FormSetGuid "=" guidDefinition[FSId] ","\r
       FormId "=" F1:Number ","\r
       Question "=" QN1:Number ","\r
-                                                       << \r
+                                                       <<\r
                                                           RefType = 4;\r
-                                                          _CRGUID (&FSId, G11->getText (), G12->getText (), G13->getText (), \r
-                                                                          G14->getText (), G15->getText (), G16->getText (), \r
-                                                                          G17->getText (), G18->getText (), G19->getText (), \r
-                                                                          G110->getText (), G111->getText ()); \r
-                                                          DevPath = _STOSID(P->getText()); \r
+                                                          DevPath = _STOSID(P->getText());\r
                                                           FId = _STOFID(F1->getText());\r
                                                           QId = _STOQID(QN1->getText());\r
                                                        >>\r
     )\r
     |\r
     (\r
-      FormSetGuid "="\r
-        OpenBrace\r
-          G21:Number "," G22:Number "," G23:Number "," G24:Number "," G25:Number "," G26:Number "," \r
-          G27:Number "," G28:Number "," G29:Number "," G210:Number "," G211:Number\r
-        CloseBrace ","\r
+      FormSetGuid "=" guidDefinition[FSId] ","\r
       FormId "=" F2:Number ","\r
       Question "=" QN2:Number ","\r
                                                        <<\r
                                                           RefType = 3;\r
-                                                          _CRGUID (&FSId, G21->getText (), G22->getText (), G23->getText (), \r
-                                                                          G24->getText (), G25->getText (), G26->getText (), \r
-                                                                          G27->getText (), G28->getText (), G29->getText (), \r
-                                                                          G210->getText (), G211->getText ()); \r
                                                           FId = _STOFID(F2->getText());\r
                                                           QId = _STOQID(QN2->getText());\r
                                                        >>\r
@@ -1070,7 +1167,7 @@ vfrStatementGoto :
     |\r
     (\r
       FormId "=" F3:Number ","                         << RefType = 2; FId = _STOFID(F3->getText()); >>\r
-      Question "=" \r
+      Question "="\r
       (\r
           QN3:StringIdentifier ","                     << mCVfrQuestionDB.GetQuestionId (QN3->getText (), NULL, QId, BitMask); >>\r
         | QN4:Number ","                               << QId = _STOQID(QN4->getText()); >>\r
@@ -1078,7 +1175,7 @@ vfrStatementGoto :
     )\r
     |\r
     (\r
-      F4:Number ","                                    << \r
+      F4:Number ","                                    <<\r
                                                           RefType = 1;\r
                                                           FId = _STOFID(F4->getText());\r
                                                        >>\r
@@ -1088,31 +1185,31 @@ vfrStatementGoto :
                                                           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
+                                                              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
+                                                              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
+                                                              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
@@ -1155,12 +1252,12 @@ getStringId :
 \r
 vfrStatementResetButton :\r
   <<\r
-     CIfrResetButton RBObj; \r
+     CIfrResetButton RBObj;\r
      UINT16          DefaultId;\r
   >>\r
   L:ResetButton                                        << RBObj.SetLineNo(L->getLine()); >>\r
-  DefaultStore \r
-  "=" N:StringIdentifier ","                           << \r
+  DefaultStore\r
+  "=" N:StringIdentifier ","                           <<\r
                                                           _PCATCH(mCVfrDefaultStore.GetDefaultId (N->getText(), &DefaultId), N->getLine());\r
                                                           RBObj.SetDefaultId (DefaultId);\r
                                                        >>\r
@@ -1184,23 +1281,59 @@ vfrStatementBooleanType :
 //     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
+//     default value = TRUE, defaultstore = MyDefaultStore,\r
 //   endcheckbox;\r
 //\r
 vfrStatementCheckBox :\r
   <<\r
-     CIfrCheckBox CBObj;\r
+     CIfrCheckBox       CBObj;\r
+     EFI_IFR_TYPE_VALUE Val = {0};
+     INT8               *VarStoreName = NULL;
   >>\r
   L:CheckBox                                           << CBObj.SetLineNo(L->getLine()); >>\r
   vfrQuestionHeader[CBObj] ","\r
-  { F:FLAGS "=" vfrCheckBoxFlags[CBObj, F->getLine()] "," }\r
+  {
+    F:FLAGS "=" vfrCheckBoxFlags[CBObj, F->getLine()] ","\r
+                                                       <<
+                                                          _PCATCH(mCVfrDataStorage.GetVarStoreName (_GET_CURRQEST_VARTINFO().mVarStoreId, &VarStoreName), VFR_RETURN_SUCCESS, L, "Failed to retrieve varstore name");
+                                                          Val.b = TRUE;
+                                                          if (CBObj.GetFlags () & 0x01) {
+                                                            _PCATCH(
+                                                              mCVfrDefaultStore.BufferVarStoreAltConfigAdd (
+                                                                                  EFI_HII_DEFAULT_CLASS_STANDARD,
+                                                                                  _GET_CURRQEST_VARTINFO(),
+                                                                                  VarStoreName,
+                                                                                  _GET_CURRQEST_DATATYPE (),
+                                                                                  Val
+                                                                                  ),
+                                                              VFR_RETURN_SUCCESS,
+                                                              L,
+                                                              "No standard default storage found"
+                                                              );
+                                                          }
+                                                          if (CBObj.GetFlags () & 0x02) {
+                                                            _PCATCH(
+                                                              mCVfrDefaultStore.BufferVarStoreAltConfigAdd (
+                                                                                  EFI_HII_DEFAULT_CLASS_MANUFACTURING,
+                                                                                  _GET_CURRQEST_VARTINFO(),
+                                                                                  VarStoreName,
+                                                                                  _GET_CURRQEST_DATATYPE (),
+                                                                                  Val
+                                                                                  ),
+                                                              VFR_RETURN_SUCCESS,
+                                                              L,
+                                                              "No manufacturing default storage found"
+                                                              );
+                                                                                                                 }
+                                                                                                          >>
+  }
   {\r
     Key "=" KN:Number  ","                             << AssignQuestionKey (CBObj, KN); >>\r
   }\r
   vfrStatementQuestionOptionList\r
   E:EndCheckBox                                        << CRT_END_OP (E); >>\r
   ";"\r
-  ; \r
+  ;\r
 \r
 vfrCheckBoxFlags [CIfrCheckBox & CBObj, UINT32 LineNum] :\r
   <<\r
@@ -1256,7 +1389,7 @@ vfrStatementDate :
      EFI_QUESTION_ID    QId          = EFI_QUESTION_ID_INVALID;\r
      INT8               *VarIdStr[3] = {NULL, };\r
      CIfrDate           DObj;\r
-     EFI_IFR_TYPE_VALUE Val;\r
+     EFI_IFR_TYPE_VALUE Val = {0};\r
   >>\r
   L:Date                                               << DObj.SetLineNo(L->getLine()); >>\r
   (\r
@@ -1285,14 +1418,14 @@ vfrStatementDate :
       Help   "=" "STRING_TOKEN" "\(" DH:Number "\)" ","\r
       minMaxDateStepDefault[Val.date, 2]\r
                                                        <<\r
-                                                          mCVfrQuestionDB.RegisterOldDateQuestion (VarIdStr[0], VarIdStr[1], VarIdStr[2], QId); \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);} >>\r
+                                                          << {CIfrDefault DObj(EFI_HII_DEFAULT_CLASS_STANDARD, EFI_IFR_TYPE_DATE, Val); DObj.SetLineNo (D1Y->getLine());} >>\r
       ( vfrStatementInconsistentIf )*\r
     )\r
   )\r
@@ -1307,10 +1440,10 @@ minMaxDateStepDefault[EFI_HII_DATE & D, UINT8 KeyValue] :
   {\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 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
@@ -1400,18 +1533,38 @@ vfrStatementNumeric :
 \r
 vfrNumericFlags [CIfrNumeric & NObj, UINT32 LineNum] :\r
   <<\r
-     UINT8 LFlags = _GET_CURRQEST_DATATYPE();\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
   numericFlagsField[HFlags, LFlags] ( "\|" numericFlagsField[HFlags, LFlags] )*\r
-                                                       << _PCATCH(NObj.SetFlags (HFlags, LFlags), LineNum); >>\r
+                                                       <<
+                                                          //check data type flag
+                                                          VarStoreType = mCVfrDataStorage.GetVarStoreType (_GET_CURRQEST_VARTINFO().mVarStoreId);
+                                                          if (VarStoreType == EFI_VFR_VARSTORE_BUFFER || VarStoreType == EFI_VFR_VARSTORE_EFI) {
+                                                            if (_GET_CURRQEST_DATATYPE() != (LFlags & EFI_IFR_NUMERIC_SIZE)) {
+                                                              _PCATCH(VFR_RETURN_INVALID_PARAMETER, LineNum, "Numeric Flag is not same to Numeric VarData type");
+                                                            }
+                                                          } else {
+                                                            // update data type for name/value store
+                                                            UINT32 DataTypeSize;
+                                                            _GET_CURRQEST_VARTINFO().mVarType = LFlags & EFI_IFR_NUMERIC_SIZE;
+                                                            mCVfrVarDataTypeDB.GetDataTypeSize (_GET_CURRQEST_DATATYPE(), &DataTypeSize);
+                                                            _GET_CURRQEST_VARTINFO().mVarTotalSize = DataTypeSize;
+                                                          }
+                                                          _PCATCH(NObj.SetFlags (HFlags, LFlags), LineNum);\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
-  | "DISPLAY_INT_DEC"                                  << $LFlags |= 0x00; >>\r
-  | "DISPLAY_UINT_DEC"                                 << $LFlags |= 0x10; >>\r
-  | "DISPLAY_UINT_HEX"                                 << $LFlags |= 0x20; >>\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; >>
+  | "DISPLAY_INT_DEC"                                  << $LFlags = ($LFlags & ~EFI_IFR_DISPLAY) | EFI_IFR_DISPLAY_INT_DEC; >>
+  | "DISPLAY_UINT_DEC"                                 << $LFlags = ($LFlags & ~EFI_IFR_DISPLAY) | EFI_IFR_DISPLAY_UINT_DEC; >>
+  | "DISPLAY_UINT_HEX"                                 << $LFlags = ($LFlags & ~EFI_IFR_DISPLAY) | EFI_IFR_DISPLAY_UINT_HEX; >>
   | questionheaderFlagsField[HFlags]\r
   ;\r
 \r
@@ -1420,9 +1573,9 @@ vfrStatementOneOf :
      CIfrOneOf OObj;\r
   >>\r
   L:OneOf                                              << OObj.SetLineNo(L->getLine()); >>\r
-  vfrQuestionHeader[OObj] ","\r
+  vfrQuestionHeader[OObj] ","                          << _PCATCH(OObj.SetFlags (OObj.FLAGS(), _GET_CURRQEST_DATATYPE()), L->getLine()); >>\r
   { F:FLAGS "=" vfrOneofFlagsField[OObj, F->getLine()] "," }\r
-  { \r
+  {\r
     vfrSetMinMaxStep[OObj]\r
   }\r
   vfrStatementQuestionOptionList\r
@@ -1432,11 +1585,27 @@ vfrStatementOneOf :
 \r
 vfrOneofFlagsField [CIfrOneOf & OObj, UINT32 LineNum] :\r
   <<\r
-     UINT8 LFlags = _GET_CURRQEST_DATATYPE();\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
   numericFlagsField[HFlags, LFlags] ( "\|" numericFlagsField[HFlags, LFlags] )*\r
-                                                       << _PCATCH(OObj.SetFlags (HFlags, LFlags), LineNum); >>\r
+                                                       <<
+                                                          //check data type flag
+                                                          VarStoreType = mCVfrDataStorage.GetVarStoreType (_GET_CURRQEST_VARTINFO().mVarStoreId);
+                                                          if (VarStoreType == EFI_VFR_VARSTORE_BUFFER || VarStoreType == EFI_VFR_VARSTORE_EFI) {
+                                                            if (_GET_CURRQEST_DATATYPE() != (LFlags & EFI_IFR_NUMERIC_SIZE)) {
+                                                              _PCATCH(VFR_RETURN_INVALID_PARAMETER, LineNum, "Numeric Flag is not same to Numeric VarData type");
+                                                            }
+                                                          } else {
+                                                            // update data type for Name/Value store
+                                                            UINT32 DataTypeSize;
+                                                            _GET_CURRQEST_VARTINFO().mVarType = LFlags & EFI_IFR_NUMERIC_SIZE;
+                                                            mCVfrVarDataTypeDB.GetDataTypeSize (_GET_CURRQEST_DATATYPE(), &DataTypeSize);
+                                                            _GET_CURRQEST_VARTINFO().mVarTotalSize = DataTypeSize;
+                                                          }
+                                                          _PCATCH(OObj.SetFlags (HFlags, LFlags), LineNum);\r
+                                                       >>
   ;\r
 \r
 vfrStatementStringType :\r
@@ -1449,7 +1618,7 @@ vfrStatementString :
      CIfrString SObj;\r
   >>\r
   L:String                                             << SObj.SetLineNo(L->getLine()); >>\r
-  vfrQuestionHeader[SObj] ","                          << _PCATCH(SObj.SetFlags (SObj.FLAGS(), _GET_CURRQEST_DATATYPE()), L->getLine()); >>\r
+  vfrQuestionHeader[SObj] ","\r
   { F:FLAGS "=" vfrStringFlagsField[SObj, F->getLine()] "," }\r
   {\r
     Key "=" KN:Number ","                              << AssignQuestionKey (SObj, KN); >>\r
@@ -1478,7 +1647,7 @@ stringFlagsField [UINT8 & HFlags, UINT8 & LFlags] :
 \r
 vfrStatementPassword :\r
   <<\r
-     CIfrPassword PObj; \r
+     CIfrPassword PObj;\r
   >>\r
   L:Password                                           << PObj.SetLineNo(L->getLine()); >>\r
   vfrQuestionHeader[PObj] ","\r
@@ -1507,12 +1676,12 @@ passwordFlagsField [UINT8 & HFlags] :
 \r
 vfrStatementOrderedList :\r
   <<\r
-     CIfrOrderedList OLObj; \r
+     CIfrOrderedList OLObj;\r
   >>\r
   L:OrderedList                                        << OLObj.SetLineNo(L->getLine()); >>\r
   vfrQuestionHeader[OLObj] ","\r
-                                                       << OLObj.SetMaxContainers ((UINT8)_GET_CURRQEST_VARSIZE()); >>\r
-  { \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
@@ -1542,14 +1711,14 @@ vfrStatementTime :
      EFI_QUESTION_ID    QId          = EFI_QUESTION_ID_INVALID;\r
      INT8               *VarIdStr[3] = {NULL, };\r
      CIfrTime           TObj;\r
-     EFI_IFR_TYPE_VALUE Val;\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
-      vfrStatementDefault\r
+      vfrStatementQuestionOptionList\r
     )\r
     |\r
     (\r
@@ -1571,14 +1740,14 @@ vfrStatementTime :
       Help   "=" "STRING_TOKEN" "\(" SH:Number "\)" ","\r
       minMaxTimeStepDefault[Val.time, 2]\r
                                                        <<\r
-                                                          mCVfrQuestionDB.RegisterOldTimeQuestion (VarIdStr[0], VarIdStr[1], VarIdStr[2], QId); \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);} >>\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
@@ -1592,10 +1761,10 @@ minMaxTimeStepDefault[EFI_HII_TIME & T, UINT8 KeyValue] :
   {\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 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
@@ -1622,7 +1791,7 @@ vfrStatementQuestionTag :
   vfrStatementNoSubmitIf        |\r
   vfrStatementDisableIfQuest    |\r
   vfrStatementRefresh           |\r
-  vfrStatementVarstoreDevice \r
+  vfrStatementVarstoreDevice\r
   ;\r
 \r
 vfrStatementQuestionTagList :\r
@@ -1639,7 +1808,7 @@ vfrStatementQuestionOptionTag :
 vfrStatementQuestionOptionList :\r
   (\r
     vfrStatementQuestionTag     |\r
-    vfrStatementQuestionOptionTag \r
+    vfrStatementQuestionOptionTag\r
   )*\r
   ;\r
 \r
@@ -1648,34 +1817,43 @@ vfrStatementStatList :
   vfrStatementQuestions                   |\r
   vfrStatementConditional                 |\r
   // Just for framework vfr compatibility\r
-  vfrStatementLabel                       \r
+  vfrStatementLabel\r
   //vfrStatementInvalid\r
   ;\r
 \r
 vfrStatementDisableIfStat :\r
-  << CIfrDisableIf DIObj; >>\r
+  <<
+    CIfrDisableIf DIObj;\r
+    UINT32 ExpOpCount = 0;
+  >>
   L:DisableIf                                          << DIObj.SetLineNo(L->getLine()); >>\r
-  vfrStatementExpression[0] ";"\r
+  vfrStatementExpression[0, ExpOpCount] ";"            << mConstantOnlyInExpression = FALSE; >>\r
   ( vfrStatementStatList )*\r
   E:EndIf                                              << CRT_END_OP (E); >>\r
   ";"\r
   ;\r
 \r
 vfrStatementSuppressIfStat :\r
-  << CIfrSuppressIf SIObj; >>\r
+  <<
+    CIfrSuppressIf SIObj;\r
+    UINT32 ExpOpCount = 0;
+  >>
   L:SuppressIf                                         << SIObj.SetLineNo(L->getLine()); >>\r
   { FLAGS "=" flagsField ( "\|" flagsField )* "," }\r
-  vfrStatementExpression[0] ";"\r
+  vfrStatementExpression[0, ExpOpCount] ";"\r
   ( vfrStatementStatList )*\r
   E:EndIf                                              << CRT_END_OP (E); >>\r
   ";"\r
   ;\r
 \r
 vfrStatementGrayOutIfStat :\r
-  << CIfrGrayOutIf GOIObj; >>\r
+  <<
+    CIfrGrayOutIf GOIObj;\r
+    UINT32 ExpOpCount = 0;
+  >>
   L:GrayOutIf                                          << GOIObj.SetLineNo(L->getLine()); >>\r
   { FLAGS "=" flagsField ( "\|" flagsField )* "," }\r
-  vfrStatementExpression[0]\r
+  vfrStatementExpression[0, ExpOpCount]\r
   ";"\r
   ( vfrStatementStatList )*\r
   E:EndIf                                              << CRT_END_OP (E); >>\r
@@ -1712,27 +1890,36 @@ vfrStatementLocked :
   ;\r
 \r
 vfrStatementInconsistentIf :\r
-  << CIfrInconsistentIf IIObj; >>\r
+  <<
+    CIfrInconsistentIf IIObj;\r
+    UINT32 ExpOpCount = 0;
+  >>
   L:InconsistentIf                                     << IIObj.SetLineNo(L->getLine()); >>\r
   Prompt "=" "STRING_TOKEN" "\(" S:Number "\)" ","     << IIObj.SetError (_STOSID(S->getText())); >>\r
   { FLAGS "=" flagsField ( "\|" flagsField )* "," }\r
-  vfrStatementExpression[0]\r
+  vfrStatementExpression[0, ExpOpCount]\r
   E:EndIf                                              << CRT_END_OP (E); >>\r
   ;\r
 \r
 vfrStatementNoSubmitIf :\r
-  << CIfrNoSubmitIf NSIObj; >>\r
+  <<
+    CIfrNoSubmitIf NSIObj;\r
+    UINT32 ExpOpCount = 0;
+  >>
   L:NoSubmitIf                                         << NSIObj.SetLineNo(L->getLine()); >>\r
   Prompt "=" "STRING_TOKEN" "\(" S:Number "\)" ","     << NSIObj.SetError (_STOSID(S->getText())); >>\r
   { FLAGS "=" flagsField ( "\|" flagsField )* "," }\r
-  vfrStatementExpression[0]\r
+  vfrStatementExpression[0, ExpOpCount]\r
   E:EndIf                                              << CRT_END_OP (E); >>\r
   ;\r
 \r
 vfrStatementDisableIfQuest :\r
-  << CIfrDisableIf DIObj; >>\r
+  <<
+    CIfrDisableIf DIObj;\r
+    UINT32 ExpOpCount = 0;
+  >>
   L:DisableIf                                          << DIObj.SetLineNo(L->getLine()); >>\r
-  vfrStatementExpression[0] ";"\r
+  vfrStatementExpression[0, ExpOpCount] ";"            << mConstantOnlyInExpression = FALSE; >>\r
   vfrStatementQuestionOptionList\r
   E:EndIf                                              << CRT_END_OP (E); >>\r
   ;\r
@@ -1750,10 +1937,13 @@ vfrStatementVarstoreDevice :
   ;\r
 \r
 vfrStatementSuppressIfQuest :\r
-  << CIfrSuppressIf SIObj; >>\r
+  <<
+    CIfrSuppressIf SIObj;\r
+    UINT32 ExpOpCount = 0;
+  >>
   L:SuppressIf                                         << SIObj.SetLineNo(L->getLine()); >>\r
   { FLAGS "=" flagsField ( "\|" flagsField )* "," }\r
-  vfrStatementExpression[0] ";"\r
+  vfrStatementExpression[0, ExpOpCount] ";"\r
   vfrStatementQuestionOptionList\r
   E:EndIf                                              << CRT_END_OP (E); >>\r
   ;\r
@@ -1764,28 +1954,51 @@ vfrStatementOptions :
 \r
 vfrStatementOneOfOption :\r
   <<\r
-     EFI_IFR_TYPE_VALUE Val;\r
+     EFI_IFR_TYPE_VALUE Val = {0};\r
      CIfrOneOfOption    OOOObj;\r
      INT8               *VarStoreName = NULL;\r
-     \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] ","    << OOOObj.SetType (_GET_CURRQEST_DATATYPE()); OOOObj.SetValue (Val); >>\r
+  Value "=" vfrConstantValueField[_GET_CURRQEST_DATATYPE()] >[Val] ","    \r
+                                                       << 
+                                                          if (gCurrentMinMaxData != NULL) {
+                                                            //set min/max value for oneof opcode
+                                                            UINT64 Step = gCurrentMinMaxData->GetStepData(_GET_CURRQEST_DATATYPE());
+                                                            switch (_GET_CURRQEST_DATATYPE()) {
+                                                            case EFI_IFR_TYPE_NUM_SIZE_64:
+                                                              gCurrentMinMaxData->SetMinMaxStepData(Val.u64, Val.u64, Step);
+                                                              break;
+                                                            case EFI_IFR_TYPE_NUM_SIZE_32:
+                                                              gCurrentMinMaxData->SetMinMaxStepData(Val.u32, Val.u32, (UINT32) Step);
+                                                              break;
+                                                            case EFI_IFR_TYPE_NUM_SIZE_16:
+                                                              gCurrentMinMaxData->SetMinMaxStepData(Val.u16, Val.u16, (UINT16) Step);
+                                                              break;
+                                                            case EFI_IFR_TYPE_NUM_SIZE_8:
+                                                              gCurrentMinMaxData->SetMinMaxStepData(Val.u8, Val.u8, (UINT8) Step);
+                                                              break;
+                                                            default:
+                                                              break;
+                                                            }
+                                                          }
+                                                          OOOObj.SetType (_GET_CURRQEST_DATATYPE()); 
+                                                          OOOObj.SetValue (Val); 
+                                                       >>
   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
+                                                                                                                                                   EFI_HII_DEFAULT_CLASS_STANDARD,\r
+                                                                                                                                                                       _GET_CURRQEST_VARTINFO(),\r
+                                                                                                                                                                       VarStoreName,\r
+                                                                                                                                                                   _GET_CURRQEST_DATATYPE (),\r
                                                                                                                                                                        Val\r
                                                                                                                                                                        ), L->getLine());\r
                                                           }\r
                                                        >>\r
-  { "," Key "=" Number }                               // no use in UEFI2.1 VFR\r
   (\r
     "," vfrImageTag                                    << OOOObj.SetScope (1); CIfrEnd EOOOObj; >>\r
   )*\r
@@ -1794,7 +2007,7 @@ vfrStatementOneOfOption :
 \r
 vfrOneOfOptionFlags [CIfrOneOfOption & OOOObj, UINT32 LineNum] :\r
   <<\r
-     UINT8 LFlags = _GET_CURRQEST_DATATYPE();\r
+     UINT8 LFlags = 0;\r
      UINT8 HFlags = 0;\r
   >>\r
   oneofoptionFlagsField[HFlags, LFlags] ( "\|" oneofoptionFlagsField[HFlags, LFlags] )*\r
@@ -1814,27 +2027,6 @@ oneofoptionFlagsField [UINT8 & HFlags, UINT8 & LFlags] :
   | DefaultFlag                                        << $LFlags |= 0x10; >>\r
   ;\r
 \r
-//vfrStatementGuid :\r
-//  <<\r
-//     EFI_GUID Guid; \r
-//     CIfrGuid GObj;\r
-//  >>\r
-//  GuidAction\r
-//  GUID "=" \r
-//  OpenBrace\r
-//    G1:Number "," G2:Number "," G3:Number "," G4:Number "," G5:Number "," G6:Number "," \r
-//    G7:Number "," G8:Number "," G9:Number "," G10:Number "," G11:Number\r
-//  CloseBrace\r
-//                                                       << \r
-//                                                          _CRGUID (&Guid, G1->getText (), G2->getText (), G3->getText (), \r
-//                                                                          G4->getText (), G5->getText (), G6->getText (), \r
-//                                                                          G7->getText (), G8->getText (), G9->getText (), \r
-//                                                                          G10->getText (), G11->getText ()); \r
-//                                                       >>\r
-//                                                       << GObj.SetGuid (&Guid); >>\r
-//  ";"\r
-//  ;\r
-\r
 vfrStatementLabel :\r
   << CIfrLabel LObj; >>\r
   L:Label                                              << LObj.SetLineNo(L->getLine()); >>\r
@@ -1847,9 +2039,9 @@ vfrStatementBanner :
   B:Banner { "," }                                     << BObj.SetLineNo(B->getLine()); >>\r
   Title "=" "STRING_TOKEN" "\(" S:Number "\)" ","      << BObj.SetTitle (_STOSID(S->getText())); >>\r
   (\r
-    ( \r
+    (\r
       Line L:Number ","                                << BObj.SetLine (_STOU16(L->getText())); >>\r
-      Align \r
+      Align\r
       (\r
           Left                                         << BObj.SetAlign (0); >>\r
         | Center                                       << BObj.SetAlign (1); >>\r
@@ -1867,17 +2059,18 @@ vfrStatementBanner :
 //\r
 // keep some syntax for compatibility but not generate any IFR object\r
 //\r
-vfrStatementInvalidHidden : \r
+vfrStatementInvalidHidden :\r
   Hidden\r
   Value "=" Number ","\r
   Key "=" Number ";"\r
   ;\r
 \r
 vfrStatementInvalidInconsistentIf :\r
+  << UINT32 ExpOpCount = 0; >>
   InconsistentIf\r
   Prompt "=" "STRING_TOKEN" "\(" S:Number "\)" ","\r
   { FLAGS "=" flagsField ( "\|" flagsField )* "," }\r
-  vfrStatementExpression[0]\r
+  vfrStatementExpression[0, ExpOpCount]\r
   EndIf\r
   ";"\r
   ;\r
@@ -1889,15 +2082,15 @@ vfrStatementInvalidInventory :
   {\r
     Text  "=" "STRING_TOKEN" "\(" Number "\)"\r
   }\r
-  ";" \r
+  ";"\r
   ;\r
 \r
-vfrStatementInvalidSaveRestoreDefaults : \r
+vfrStatementInvalidSaveRestoreDefaults :\r
   (Save | Restore)\r
   Defaults ","\r
   FormId "=" Number  ","\r
   Prompt "=" "STRING_TOKEN" "\(" Number "\)" ","\r
-  Help   "=" "STRING_TOKEN" "\(" Number "\)" \r
+  Help   "=" "STRING_TOKEN" "\(" Number "\)"\r
   { "," FLAGS "=" flagsField ( "\|" flagsField )* }\r
   { "," Key   "=" Number }\r
   ";"\r
@@ -1939,13 +2132,13 @@ vfrStatementInvalidSaveRestoreDefaults :
 #token QuestionRefVal("questionrefval")         "questionrefval"\r
 #token StringRefVal("stringrefval")             "stringrefval"\r
 \r
-vfrStatementExpression [UINT32 RootLevel, UINT32 ExpOpCount = 0] :\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; } >>\r
+                                                       << if (($RootLevel == 0) && ($ExpOpCount > 1)) {_SET_SAVED_OPHDR_SCOPE(); CIfrEnd EObj; EObj.SetLineNo (0);} >>\r
   ;\r
 \r
 andTerm[UINT32 & RootLevel, UINT32 & ExpOpCount] :\r
@@ -1956,7 +2149,7 @@ andTerm[UINT32 & RootLevel, UINT32 & ExpOpCount] :
   ;\r
 \r
 bitwiseorTerm [UINT32 & RootLevel, UINT32 & ExpOpCount]:\r
-  bitwiseandTerm[$RootLevel, $ExpOpCount]          \r
+  bitwiseandTerm[$RootLevel, $ExpOpCount]\r
   (\r
     L:"\|" bitwiseandTerm[$RootLevel, $ExpOpCount]      << $ExpOpCount++; CIfrBitWiseOr BWOObj(L->getLine()); >>\r
   )*\r
@@ -2004,7 +2197,7 @@ compareTerm [UINT32 & RootLevel, UINT32 & ExpOpCount]:
   ;\r
 \r
 shiftTerm [UINT32 & RootLevel, UINT32 & ExpOpCount]:\r
-  addMinusTerm[$RootLevel, $ExpOpCount]           \r
+  addMinusTerm[$RootLevel, $ExpOpCount]\r
   (\r
     (\r
       L1:"\<<" addMinusTerm[$RootLevel, $ExpOpCount]    << $ExpOpCount++; CIfrShiftLeft SLObj(L1->getLine()); >>\r
@@ -2030,20 +2223,42 @@ addMinusTerm [UINT32 & RootLevel, UINT32 & ExpOpCount]:
   ;\r
 \r
 multdivmodTerm [UINT32 & RootLevel, UINT32 & ExpOpCount]:\r
-  atomTerm[$RootLevel, $ExpOpCount]\r
-  ( \r
+  castTerm[$RootLevel, $ExpOpCount]\r
+  (\r
     (\r
-      L1:"\*" atomTerm[$RootLevel, $ExpOpCount]         << $ExpOpCount++; CIfrMultiply MObj(L1->getLine()); >>\r
+      L1:"\*" castTerm[$RootLevel, $ExpOpCount]         << $ExpOpCount++; CIfrMultiply MObj(L1->getLine()); >>\r
     )\r
     |\r
     (\r
-      L2:"/" atomTerm[$RootLevel, $ExpOpCount]          << $ExpOpCount++; CIfrDivide DObj(L2->getLine()); >>\r
+      L2:"/" castTerm[$RootLevel, $ExpOpCount]          << $ExpOpCount++; CIfrDivide DObj(L2->getLine()); >>\r
     )\r
     |\r
     (\r
-      L3:"%" atomTerm[$RootLevel, $ExpOpCount]          << $ExpOpCount++; CIfrModulo MObj(L3->getLine()); >>\r
-    ) \r
+      L3:"%" castTerm[$RootLevel, $ExpOpCount]          << $ExpOpCount++; CIfrModulo MObj(L3->getLine()); >>\r
+    )\r
   )*\r
+  ;
+
+castTerm [UINT32 & RootLevel, UINT32 & ExpOpCount]:
+  << UINT8 CastType = 0xFF; >>
+  (
+    L:"\("
+    (
+        Boolean                                         << CastType = 0; >>
+      | Uint64                                          << CastType = 1; >>
+      | Uint32                                          << CastType = 1; >>
+      | Uint16                                          << CastType = 1; >>
+      | Uint8                                           << CastType = 1; >>
+    )
+    "\)"
+  )*
+  atomTerm[$RootLevel, $ExpOpCount]
+                                                        <<
+                                                           switch (CastType) {
+                                                           case 0: { CIfrToBoolean TBObj(L->getLine()); $ExpOpCount++; } break;
+                                                           case 1: { CIfrToUint TUObj(L->getLine()); $ExpOpCount++; } break;
+                                                           }
+                                                                                                               >>
   ;\r
 \r
 atomTerm [UINT32 & RootLevel, UINT32 & ExpOpCount]:\r
@@ -2119,7 +2334,7 @@ ideqvalExp [UINT32 & RootLevel, UINT32 & ExpOpCount] :
                                                                                                                        _SAVE_OPHDR_COND (EIVObj, ($ExpOpCount == 0));\r
                                                                                                                        EIVObj.SetQuestionId (QId, VarIdStr, LineNo);\r
                                                                                                                        EIVObj.SetValue (ConstVal);\r
-                                                                                                                       $ExpOpCount++;                                                                                                                  \r
+                                                                                                                       $ExpOpCount++;\r
                                                                                                                  } else {\r
                                                                                                                        IdEqValDoSpecial ($ExpOpCount, L->getLine(), QId, VarIdStr, Mask, ConstVal, EQUAL);\r
                                                                                                                  }\r
@@ -2163,7 +2378,7 @@ ideqidExp[UINT32 & RootLevel, UINT32 & ExpOpCount] :
   vfrQuestionDataFieldName[QId[0], Mask[0], VarIdStr[0], LineNo[0]]\r
   (\r
     (\r
-      "==" \r
+      "=="\r
       vfrQuestionDataFieldName[QId[1], Mask[1], VarIdStr[1], LineNo[1]]\r
                                                        <<\r
                                                                                                              if (Mask[0] & Mask[1]) {\r
@@ -2173,7 +2388,7 @@ ideqidExp[UINT32 & RootLevel, UINT32 & ExpOpCount] :
                                                                                                                        _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
+                                                                                                                       $ExpOpCount++;\r
                                                                                                                  }\r
                                                                                                           >>\r
     )\r
@@ -2215,7 +2430,7 @@ ideqvallistExp[UINT32 & RootLevel, UINT32 & ExpOpCount] :
   >>\r
   L:IdEqValList\r
   vfrQuestionDataFieldName[QId, Mask, VarIdStr, LineNo]\r
-  "==" \r
+  "=="\r
   (\r
     V:Number                                           << ValueList[ListLen] = _STOU16(V->getText()); ListLen++; >>\r
   )+\r
@@ -2239,9 +2454,9 @@ ideqvallistExp[UINT32 & RootLevel, UINT32 & ExpOpCount] :
 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
+                                                            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
@@ -2267,25 +2482,14 @@ questionref13Exp[UINT32 & RootLevel, UINT32 & ExpOpCount] :
         Path "=" "STRING_TOKEN" "\(" S:Number "\)"     << Type = 0x4; DevPath = _STOSID(S->getText()); >>\r
       }\r
       {\r
-        GUID "=" \r
-          OpenBrace\r
-            G1:Number "," G2:Number "," G3:Number "," G4:Number "," G5:Number "," G6:Number "," \r
-            G7:Number "," G8:Number "," G9:Number "," G10:Number "," G11:Number\r
-          CloseBrace\r
-                                                       <<\r
-                                                          Type = 0x5;\r
-                                                          _CRGUID (&Guid, G1->getText (), G2->getText (), G3->getText (), \r
-                                                                          G4->getText (), G5->getText (), G6->getText (), \r
-                                                                          G7->getText (), G8->getText (), G9->getText (), \r
-                                                                          G10->getText (), G11->getText ()); \r
-                                                       >>\r
+        Uuid "=" guidDefinition[Guid]                  << Type = 0x5; >>\r
       }\r
     )\r
     |\r
     (\r
       "\("\r
          (\r
-          QN:StringIdentifier                          << \r
+          QN:StringIdentifier                          <<\r
                                                           QName  = QN->getText();\r
                                                                                                                  LineNo = QN->getLine();\r
                                                           mCVfrQuestionDB.GetQuestionId (QN->getText(), NULL, QId, BitMask);\r
@@ -2340,6 +2544,7 @@ vfrExpressionUnaryOp[UINT32 & RootLevel, UINT32 & ExpOpCount] :
   | bitwisenotExp[$RootLevel, $ExpOpCount]\r
   | question2refExp[$RootLevel, $ExpOpCount]\r
   | stringref2Exp[$RootLevel, $ExpOpCount]\r
+  | toboolExp[$RootLevel, $ExpOpCount]
   | unintExp[$RootLevel, $ExpOpCount]\r
   | toupperExp[$RootLevel, $ExpOpCount]\r
   | tolwerExp[$RootLevel, $ExpOpCount]\r
@@ -2433,7 +2638,7 @@ findExp[UINT32 & RootLevel, UINT32 & ExpOpCount] :
   findFormat[Format] ( "\|" findFormat[Format] )*\r
   ","\r
   vfrStatementExpression[$RootLevel + 1, $ExpOpCount]\r
-  "," \r
+  ","\r
   vfrStatementExpression[$RootLevel + 1, $ExpOpCount]\r
   ","\r
   vfrStatementExpression[$RootLevel + 1, $ExpOpCount]\r
@@ -2460,7 +2665,7 @@ tokenExp[UINT32 & RootLevel, UINT32 & ExpOpCount] :
   vfrStatementExpression[$RootLevel + 1, $ExpOpCount]\r
   ","\r
   vfrStatementExpression[$RootLevel + 1, $ExpOpCount]\r
-  "," \r
+  ","\r
   vfrStatementExpression[$RootLevel + 1, $ExpOpCount]\r
   "\)"                                                 << { CIfrToken TObj(L->getLine()); $ExpOpCount++; } >>\r
   ;\r
@@ -2489,12 +2694,13 @@ spanFlags [UINT8 & Flags] :
 \r
 //******************************************************************************\r
 //\r
-// Parser class definition. \r
-//  \r
+// Parser class definition.\r
+//\r
 class EfiVfrParser {\r
 <<\r
 private:\r
   UINT8               mParserStatus;\r
+  BOOLEAN             mConstantOnlyInExpression;
 \r
   CVfrDefaultStore    mCVfrDefaultStore;\r
   CVfrVarDataTypeDB   mCVfrVarDataTypeDB;\r
@@ -2517,12 +2723,14 @@ private:
 \r
   UINT8               _GET_CURRQEST_DATATYPE ();\r
   UINT32              _GET_CURRQEST_VARSIZE ();\r
+  UINT32              _GET_CURRQEST_ARRAY_SIZE ();
 \r
 public:\r
-  VOID                _PCATCH (IN EFI_VFR_RETURN_CODE, IN EFI_VFR_RETURN_CODE, IN ANTLRTokenPtr, IN INT8 *);\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
   VOID                syn     (ANTLRAbstractToken  *, ANTLRChar *, SetWordType *, ANTLRTokenType, INT32);\r
 \r
@@ -2557,7 +2765,7 @@ public:
 <<\r
 VOID\r
 EfiVfrParser::_SAVE_OPHDR_COND (\r
-  IN CIfrOpHeader &OpHdr, \r
+  IN CIfrOpHeader &OpHdr,\r
   IN BOOLEAN      Cond\r
   )\r
 {\r
@@ -2637,17 +2845,48 @@ EfiVfrParser::_GET_CURRQEST_VARSIZE (
   return mCurrQestVarInfo.mVarTotalSize;\r
 }\r
 \r
+UINT32
+EfiVfrParser::_GET_CURRQEST_ARRAY_SIZE (
+  VOID
+  )
+{
+  UINT8 Size = 1;
+
+  switch (mCurrQestVarInfo.mVarType) {
+  case EFI_IFR_TYPE_NUM_SIZE_8:
+    Size = 1;
+    break;
+
+  case EFI_IFR_TYPE_NUM_SIZE_16:
+    Size = 2;
+    break;
+
+  case EFI_IFR_TYPE_NUM_SIZE_32:
+    Size = 4;
+    break;
+
+  case EFI_IFR_TYPE_NUM_SIZE_64:
+    Size = 8;
+    break;
+
+  default:
+    break;
+  }
+
+  return (mCurrQestVarInfo.mVarTotalSize / Size);
+}
+
 VOID\r
 EfiVfrParser::_PCATCH (\r
-  IN EFI_VFR_RETURN_CODE ReturnCode,\r
-  IN EFI_VFR_RETURN_CODE ExpectCode,\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.PrintError (Tok->getLine(), Tok->getText(), ErrorMsg);\r
+    gCVfrErrorHandle.PrintMsg (Tok->getLine(), Tok->getText(), "Error", ErrorMsg);\r
   }\r
 }\r
 \r
@@ -2675,14 +2914,24 @@ EfiVfrParser::_PCATCH (
   )\r
 {\r
   mParserStatus += gCVfrErrorHandle.HandleError (ReturnCode, LineNum);\r
+}
+
+VOID
+EfiVfrParser::_PCATCH (
+  IN EFI_VFR_RETURN_CODE ReturnCode,
+  IN UINT32              LineNum,
+  IN INT8                *ErrorMsg
+  )
+{
+  mParserStatus = mParserStatus + gCVfrErrorHandle.HandleError (ReturnCode, LineNum, ErrorMsg);
 }\r
 \r
-VOID \r
+VOID\r
 EfiVfrParser::syn (\r
-  ANTLRAbstractToken  *Tok, \r
-  ANTLRChar           *Egroup, \r
-  SetWordType         *Eset, \r
-  ANTLRTokenType      ETok, \r
+  ANTLRAbstractToken  *Tok,\r
+  ANTLRChar           *Egroup,\r
+  SetWordType         *Eset,\r
+  ANTLRTokenType      ETok,\r
   INT32               Huh\r
   )\r
 {\r
@@ -2737,7 +2986,7 @@ EfiVfrParser::_STOU8 (
     }\r
     if (c >= '0' && c <= '9') {\r
       Value += (c - '0');\r
-    } \r
+    }\r
   }\r
 \r
   return Value;\r
@@ -2767,7 +3016,7 @@ EfiVfrParser::_STOU16 (
     }\r
     if (c >= '0' && c <= '9') {\r
       Value += (c - '0');\r
-    } \r
+    }\r
   }\r
 \r
   return Value;\r
@@ -2797,7 +3046,7 @@ EfiVfrParser::_STOU32 (
     }\r
     if (c >= '0' && c <= '9') {\r
       Value += (c - '0');\r
-    } \r
+    }\r
   }\r
 \r
   return Value;\r
@@ -2807,7 +3056,7 @@ UINT64
 EfiVfrParser::_STOU64 (\r
   IN INT8 *Str\r
   )\r
-{ \r
+{\r
   BOOLEAN IsHex;\r
   UINT64  Value;\r
   INT8    c;\r
@@ -2827,16 +3076,16 @@ EfiVfrParser::_STOU64 (
     }\r
     if (c >= '0' && c <= '9') {\r
       Value += (c - '0');\r
-    } \r
+    }\r
   }\r
 \r
   return Value;\r
-} \r
+}\r
 \r
 EFI_HII_DATE\r
 EfiVfrParser::_STOD (\r
-  IN INT8 *Year, \r
-  IN INT8 *Month, \r
+  IN INT8 *Year,\r
+  IN INT8 *Month,\r
   IN INT8 *Day\r
   )\r
 {\r
@@ -2851,8 +3100,8 @@ EfiVfrParser::_STOD (
 \r
 EFI_HII_TIME\r
 EfiVfrParser::_STOT (\r
-  IN INT8 *Hour, \r
-  IN INT8 *Minute, \r
+  IN INT8 *Hour,\r
+  IN INT8 *Minute,\r
   IN INT8 *Second\r
   )\r
 {\r
@@ -2881,7 +3130,7 @@ EfiVfrParser::_STOFID (
   return (EFI_FORM_ID)_STOU16(Str);\r
 }\r
 \r
-EFI_QUESTION_ID \r
+EFI_QUESTION_ID\r
 EfiVfrParser::_STOQID (\r
   IN INT8 *Str\r
   )\r
@@ -2918,17 +3167,17 @@ EfiVfrParser::_STRCAT (
 \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 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
@@ -2964,9 +3213,9 @@ EfiVfrParser::_DeclareDefaultLinearVarStore (
 \r
     VSObj.SetLineNo (LineNo);\r
     mCVfrDataStorage.DeclareBufferVarStore (\r
-                       TypeNameList[Index], \r
-                       &DefaultGuid, \r
-                       &mCVfrVarDataTypeDB, \r
+                       TypeNameList[Index],\r
+                       &DefaultGuid,\r
+                       &mCVfrVarDataTypeDB,\r
                        TypeNameList[Index],\r
                        EFI_VARSTORE_ID_INVALID\r
                        );\r
@@ -2985,9 +3234,9 @@ EfiVfrParser::_DeclareDefaultLinearVarStore (
 \r
     VSObj.SetLineNo (LineNo);\r
     mCVfrDataStorage.DeclareBufferVarStore (\r
-                       "Date", \r
-                                          &DefaultGuid, \r
-                                          &mCVfrVarDataTypeDB, \r
+                       "Date",\r
+                                          &DefaultGuid,\r
+                                          &mCVfrVarDataTypeDB,\r
                                           "EFI_HII_DATE",\r
                        EFI_VARSTORE_ID_INVALID\r
                        );\r
@@ -3006,9 +3255,9 @@ EfiVfrParser::_DeclareDefaultLinearVarStore (
 \r
     VSObj.SetLineNo (LineNo);\r
     mCVfrDataStorage.DeclareBufferVarStore (\r
-                       "Time", \r
-                       &DefaultGuid, \r
-                       &mCVfrVarDataTypeDB, \r
+                       "Time",\r
+                       &DefaultGuid,\r
+                       &mCVfrVarDataTypeDB,\r
                        "EFI_HII_TIME",\r
                        EFI_VARSTORE_ID_INVALID\r
                        );\r
@@ -3026,7 +3275,7 @@ EfiVfrParser::_DeclareStandardDefaultStorage (
   IN UINT32 LineNo\r
   )\r
 {\r
-  CIfrDefaultStore DSObj; \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
@@ -3036,7 +3285,7 @@ EfiVfrParser::_DeclareStandardDefaultStorage (
 \r
 VOID\r
 EfiVfrParser::AssignQuestionKey (\r
-  IN CIfrQuestionHeader   &QHObj, \r
+  IN CIfrQuestionHeader   &QHObj,\r
   IN ANTLRTokenPtr        KeyTok\r
   )\r
 {\r
@@ -3059,7 +3308,7 @@ EfiVfrParser::AssignQuestionKey (
 \r
 VOID\r
 EfiVfrParser::ConvertIdExpr (\r
-  IN UINT32          &ExpOpCount, \r
+  IN UINT32          &ExpOpCount,\r
   IN UINT32          LineNo,\r
   IN EFI_QUESTION_ID QId,\r
   IN INT8            *VarIdStr,\r
@@ -3093,7 +3342,7 @@ EfiVfrParser::ConvertIdExpr (
 \r
 VOID\r
 EfiVfrParser::IdEqValDoSpecial (\r
-  IN UINT32           &ExpOpCount, \r
+  IN UINT32           &ExpOpCount,\r
   IN UINT32           LineNo,\r
   IN EFI_QUESTION_ID  QId,\r
   IN INT8             *VarIdStr,\r
@@ -3145,7 +3394,7 @@ EfiVfrParser::IdEqValDoSpecial (
 \r
 VOID\r
 EfiVfrParser::IdEqIdDoSpecial (\r
-  IN UINT32           &ExpOpCount, \r
+  IN UINT32           &ExpOpCount,\r
   IN UINT32           LineNo,\r
   IN EFI_QUESTION_ID  QId1,\r
   IN INT8             *VarId1Str,\r
@@ -3192,7 +3441,7 @@ EfiVfrParser::IdEqIdDoSpecial (
 \r
 VOID\r
 EfiVfrParser::IdEqListDoSpecial (\r
-  IN UINT32          &ExpOpCount, \r
+  IN UINT32          &ExpOpCount,\r
   IN UINT32          LineNo,\r
   IN EFI_QUESTION_ID QId,\r
   IN INT8            *VarIdStr,\r