]> git.proxmox.com Git - mirror_edk2.git/blobdiff - BaseTools/Source/C/VfrCompile/VfrSyntax.g
VfrCompile: fix invalid comparison between pointer and integer
[mirror_edk2.git] / BaseTools / Source / C / VfrCompile / VfrSyntax.g
index 17a62b409ae6c9f7610d1b879c28f0f311b0d002..406dbc5988a1c604c9186901ab3b0e5d191d4460 100644 (file)
@@ -1,7 +1,7 @@
 /*++ @file\r
 Vfr Syntax\r
 \r
-Copyright (c) 2004 - 2015, Intel Corporation. All rights reserved.<BR>\r
+Copyright (c) 2004 - 2017, Intel Corporation. All rights reserved.<BR>\r
 This program and the accompanying materials\r
 are licensed and made available under the terms and conditions of the BSD License\r
 which accompanies this distribution.  The full text of the license may be found at\r
@@ -23,6 +23,9 @@ WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED.
 >>\r
 \r
 <<\r
+#ifdef UINT8_MAX\r
+#undef UINT8_MAX\r
+#endif\r
 #include "stdio.h"\r
 #include "PBlackBox.h"\r
 #include "DLexerBase.h"\r
@@ -30,8 +33,8 @@ WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED.
 #include "AToken.h"\r
 \r
 #define GET_LINENO(Obj)       ((Obj)->getLine())\r
-#define SET_LINE_INFO(Obj, L) {(Obj).SetLineNo((L)->getLine());} while (0)\r
-#define CRT_END_OP(Obj)       {CIfrEnd EObj; if (Obj != NULL) EObj.SetLineNo ((Obj)->getLine());} while (0)\r
+#define SET_LINE_INFO(Obj, L) do {(Obj).SetLineNo((L)->getLine());} while (0)\r
+#define CRT_END_OP(Obj)       do {CIfrEnd EObj; if (Obj != NULL) EObj.SetLineNo ((Obj)->getLine());} while (0)\r
 \r
 typedef ANTLRCommonToken ANTLRToken;\r
 \r
@@ -191,6 +194,7 @@ VfrParserStart (
 #token InteractiveFlag("INTERACTIVE")           "INTERACTIVE"\r
 #token NVAccessFlag("NV_ACCESS")                "NV_ACCESS"\r
 #token ResetRequiredFlag("RESET_REQUIRED")      "RESET_REQUIRED"\r
+#token ReconnectRequiredFlag("RECONNECT_REQUIRED") "RECONNECT_REQUIRED"\r
 #token LateCheckFlag("LATE_CHECK")              "LATE_CHECK"\r
 #token ReadOnlyFlag("READ_ONLY")                "READ_ONLY"\r
 #token OptionOnlyFlag("OPTIONS_ONLY")           "OPTIONS_ONLY"\r
@@ -592,7 +596,7 @@ vfrFormSetDefinition :
                                                       if (gCFormPkg.HavePendingUnassigned()) {\r
                                                         mParserStatus += gCFormPkg.DeclarePendingQuestion (\r
                                                                     gCVfrVarDataTypeDB,\r
-                                                                    mCVfrDataStorage,\r
+                                                                    gCVfrDataStorage,\r
                                                                     mCVfrQuestionDB,\r
                                                                     &mFormsetGuid,\r
                                                                     E->getLine(),\r
@@ -610,7 +614,8 @@ vfrFormSetDefinition :
                                                       if (gNeedAdjustOpcode) {\r
                                                         gCFormPkg.AdjustDynamicInsertOpcode (\r
                                                           mLastFormEndAddr,\r
-                                                          InsertOpcodeAddr\r
+                                                          InsertOpcodeAddr,\r
+                                                          FALSE\r
                                                         );\r
                                                       }\r
 \r
@@ -830,14 +835,14 @@ vfrStatementDefaultStore :
     "," Attribute "=" A:Number                      << DefaultId = _STOU16(A->getText(), A->getLine()); >>\r
   }\r
                                                     <<\r
-                                                       if (mCVfrDefaultStore.DefaultIdRegistered (DefaultId) == FALSE) {\r
+                                                       if (gCVfrDefaultStore.DefaultIdRegistered (DefaultId) == FALSE) {\r
                                                          CIfrDefaultStore DSObj;\r
-                                                         _PCATCH(mCVfrDefaultStore.RegisterDefaultStore (DSObj.GetObjBinAddr(), N->getText(), _STOSID(S->getText(), S->getLine()), DefaultId)), D->getLine();\r
+                                                         _PCATCH(gCVfrDefaultStore.RegisterDefaultStore (DSObj.GetObjBinAddr(), N->getText(), _STOSID(S->getText(), S->getLine()), DefaultId)), D->getLine();\r
                                                          DSObj.SetLineNo(D->getLine());\r
                                                          DSObj.SetDefaultName (_STOSID(S->getText(), S->getLine()));\r
                                                          DSObj.SetDefaultId (DefaultId);\r
                                                        } else {\r
-                                                         _PCATCH(mCVfrDefaultStore.ReRegisterDefaultStoreById (DefaultId, N->getText(), _STOSID(S->getText(), S->getLine()))), D->getLine();\r
+                                                         _PCATCH(gCVfrDefaultStore.ReRegisterDefaultStoreById (DefaultId, N->getText(), _STOSID(S->getText(), S->getLine()))), D->getLine();\r
                                                        }\r
                                                     >>\r
   ";"\r
@@ -889,7 +894,7 @@ vfrStatementVarStoreLinear :
                                                        } else {\r
                                                          StoreName = SN->getText();\r
                                                        }\r
-                                                       _PCATCH(mCVfrDataStorage.DeclareBufferVarStore (\r
+                                                       _PCATCH(gCVfrDataStorage.DeclareBufferVarStore (\r
                                                                                   StoreName,\r
                                                                                   &Guid,\r
                                                                                   &gCVfrVarDataTypeDB,\r
@@ -897,7 +902,7 @@ vfrStatementVarStoreLinear :
                                                                                   VarStoreId\r
                                                                                   ), LineNum);\r
                                                        VSObj.SetGuid (&Guid);\r
-                                                       _PCATCH(mCVfrDataStorage.GetVarStoreId(StoreName, &VarStoreId, &Guid), SN);\r
+                                                       _PCATCH(gCVfrDataStorage.GetVarStoreId(StoreName, &VarStoreId, &Guid), SN);\r
                                                        VSObj.SetVarStoreId (VarStoreId);\r
                                                        _PCATCH(gCVfrVarDataTypeDB.GetDataTypeSize(TypeName, &Size), LineNum);\r
                                                        VSObj.SetSize ((UINT16) Size);\r
@@ -981,24 +986,24 @@ vfrStatementVarStoreEfi :
 \r
   Uuid "=" guidDefinition[Guid]                     << \r
                                                        if (IsUEFI23EfiVarstore) {\r
-                                                       _PCATCH(mCVfrDataStorage.DeclareBufferVarStore (\r
+                                                       _PCATCH(gCVfrDataStorage.DeclareBufferVarStore (\r
                                                                                   StoreName,\r
                                                                                   &Guid,\r
                                                                                   &gCVfrVarDataTypeDB,\r
                                                                                   TypeName,\r
                                                                                   VarStoreId\r
                                                                                   ), LineNum);                                                        \r
-                                                         _PCATCH(mCVfrDataStorage.GetVarStoreId(StoreName, &VarStoreId, &Guid), SN);\r
+                                                         _PCATCH(gCVfrDataStorage.GetVarStoreId(StoreName, &VarStoreId, &Guid), SN);\r
                                                          _PCATCH(gCVfrVarDataTypeDB.GetDataTypeSize(TypeName, &Size), LineNum);\r
                                                        } else {\r
-                                                        _PCATCH(mCVfrDataStorage.DeclareBufferVarStore (\r
+                                                        _PCATCH(gCVfrDataStorage.DeclareBufferVarStore (\r
                                                                                   TN->getText(),\r
                                                                                   &Guid,\r
                                                                                   &gCVfrVarDataTypeDB,\r
                                                                                   TypeName,\r
                                                                                   VarStoreId\r
                                                                                   ), LineNum);                                                      \r
-                                                         _PCATCH(mCVfrDataStorage.GetVarStoreId(TN->getText(), &VarStoreId, &Guid), VN);\r
+                                                         _PCATCH(gCVfrDataStorage.GetVarStoreId(TN->getText(), &VarStoreId, &Guid), VN);\r
                                                          _PCATCH(gCVfrVarDataTypeDB.GetDataTypeSize(TypeName, &Size), N->getLine());\r
                                                        }\r
                                                        VSEObj.SetGuid (&Guid);                                                       \r
@@ -1039,16 +1044,16 @@ vfrStatementVarStoreNameValue :
   (\r
     Name "=" "STRING_TOKEN" "\(" N:Number "\)" ","  << \r
                                                        if (!Created) {\r
-                                                         _PCATCH(mCVfrDataStorage.DeclareNameVarStoreBegin (SN->getText(), VarStoreId), SN);\r
+                                                         _PCATCH(gCVfrDataStorage.DeclareNameVarStoreBegin (SN->getText(), VarStoreId), SN);\r
                                                          Created = TRUE;\r
                                                        }\r
-                                                       _PCATCH(mCVfrDataStorage.NameTableAddItem (_STOSID(N->getText(), N->getLine())), SN); \r
+                                                       _PCATCH(gCVfrDataStorage.NameTableAddItem (_STOSID(N->getText(), N->getLine())), SN);\r
                                                     >>\r
   )+\r
-  Uuid "=" guidDefinition[Guid]                     << _PCATCH(mCVfrDataStorage.DeclareNameVarStoreEnd (&Guid), SN); >>\r
+  Uuid "=" guidDefinition[Guid]                     << _PCATCH(gCVfrDataStorage.DeclareNameVarStoreEnd (&Guid), SN); >>\r
                                                     <<\r
                                                        VSNVObj.SetGuid (&Guid);\r
-                                                       _PCATCH(mCVfrDataStorage.GetVarStoreId(SN->getText(), &VarStoreId, &Guid), SN);\r
+                                                       _PCATCH(gCVfrDataStorage.GetVarStoreId(SN->getText(), &VarStoreId, &Guid), SN);\r
                                                        VSNVObj.SetVarStoreId (VarStoreId);\r
                                                     >>\r
   ";"\r
@@ -1186,6 +1191,7 @@ questionheaderFlagsField[UINT8 & Flags] :
     ReadOnlyFlag                                    << $Flags |= 0x01; >>\r
   | InteractiveFlag                                 << $Flags |= 0x04; >>\r
   | ResetRequiredFlag                               << $Flags |= 0x10; >>\r
+  | ReconnectRequiredFlag                           << $Flags |= 0x40; >>\r
   | O:OptionOnlyFlag                                << \r
                                                        if (mCompatibleMode) {\r
                                                          $Flags |= 0x80;\r
@@ -1239,9 +1245,9 @@ vfrStorageVarId[EFI_VARSTORE_INFO & Info, CHAR8 *&QuestVarIdStr, BOOLEAN CheckFl
                                                        _STRCAT(&VarIdStr, "]");\r
                                                     >>\r
                                                     <<\r
-                                                       VfrReturnCode = mCVfrDataStorage.GetVarStoreId(SName, &$Info.mVarStoreId);\r
+                                                       VfrReturnCode = gCVfrDataStorage.GetVarStoreId(SName, &$Info.mVarStoreId);\r
                                                        if (mCompatibleMode && VfrReturnCode == VFR_RETURN_UNDEFINED) {\r
-                                                          mCVfrDataStorage.DeclareBufferVarStore (\r
+                                                          gCVfrDataStorage.DeclareBufferVarStore (\r
                                                                              SName,\r
                                                                              &mFormsetGuid,\r
                                                                              &gCVfrVarDataTypeDB,\r
@@ -1249,11 +1255,11 @@ vfrStorageVarId[EFI_VARSTORE_INFO & Info, CHAR8 *&QuestVarIdStr, BOOLEAN CheckFl
                                                                              EFI_VARSTORE_ID_INVALID,\r
                                                                              FALSE\r
                                                                              );\r
-                                                          VfrReturnCode = mCVfrDataStorage.GetVarStoreId(SName, &$Info.mVarStoreId, &mFormsetGuid);\r
+                                                          VfrReturnCode = gCVfrDataStorage.GetVarStoreId(SName, &$Info.mVarStoreId, &mFormsetGuid);\r
                                                        }\r
                                                        if (CheckFlag || VfrReturnCode == VFR_RETURN_SUCCESS) {\r
                                                          _PCATCH(VfrReturnCode, SN1);\r
-                                                         _PCATCH(mCVfrDataStorage.GetNameVarStoreInfo (&$Info, Idx), SN1);\r
+                                                         _PCATCH(gCVfrDataStorage.GetNameVarStoreInfo (&$Info, Idx), SN1);\r
                                                        }\r
 \r
                                                        QuestVarIdStr = VarIdStr;\r
@@ -1263,9 +1269,9 @@ vfrStorageVarId[EFI_VARSTORE_INFO & Info, CHAR8 *&QuestVarIdStr, BOOLEAN CheckFl
   (\r
     SN2:StringIdentifier                            << SName = SN2->getText(); _STRCAT(&VarIdStr, SName); >>\r
                                                     <<\r
-                                                       VfrReturnCode = mCVfrDataStorage.GetVarStoreId(SName, &$Info.mVarStoreId);\r
+                                                       VfrReturnCode = gCVfrDataStorage.GetVarStoreId(SName, &$Info.mVarStoreId);\r
                                                        if (mCompatibleMode && VfrReturnCode == VFR_RETURN_UNDEFINED) {\r
-                                                          mCVfrDataStorage.DeclareBufferVarStore (\r
+                                                          gCVfrDataStorage.DeclareBufferVarStore (\r
                                                                              SName,\r
                                                                              &mFormsetGuid,\r
                                                                              &gCVfrVarDataTypeDB,\r
@@ -1273,13 +1279,13 @@ vfrStorageVarId[EFI_VARSTORE_INFO & Info, CHAR8 *&QuestVarIdStr, BOOLEAN CheckFl
                                                                              EFI_VARSTORE_ID_INVALID,\r
                                                                              FALSE\r
                                                                              );\r
-                                                          VfrReturnCode = mCVfrDataStorage.GetVarStoreId(SName, &$Info.mVarStoreId, &mFormsetGuid);\r
+                                                          VfrReturnCode = gCVfrDataStorage.GetVarStoreId(SName, &$Info.mVarStoreId, &mFormsetGuid);\r
                                                        }\r
                                                        if (CheckFlag || VfrReturnCode == VFR_RETURN_SUCCESS) {\r
                                                          _PCATCH(VfrReturnCode, SN2);\r
-                                                         VarStoreType = mCVfrDataStorage.GetVarStoreType ($Info.mVarStoreId);\r
+                                                         VarStoreType = gCVfrDataStorage.GetVarStoreType ($Info.mVarStoreId);\r
                                                          if (VarStoreType == EFI_VFR_VARSTORE_BUFFER) {\r
-                                                           _PCATCH(mCVfrDataStorage.GetBufferVarStoreDataTypeName(Info.mVarStoreId, &TName), SN2);\r
+                                                           _PCATCH(gCVfrDataStorage.GetBufferVarStoreDataTypeName(Info.mVarStoreId, &TName), SN2);\r
                                                            _STRCAT(&VarStr, TName);\r
                                                          }\r
                                                        }\r
@@ -1314,11 +1320,11 @@ vfrStorageVarId[EFI_VARSTORE_INFO & Info, CHAR8 *&QuestVarIdStr, BOOLEAN CheckFl
     )*                                              <<\r
                                                        switch (VarStoreType) {\r
                                                        case EFI_VFR_VARSTORE_EFI:\r
-                                                         _PCATCH(mCVfrDataStorage.GetEfiVarStoreInfo (&$Info), SN2);\r
+                                                         _PCATCH(gCVfrDataStorage.GetEfiVarStoreInfo (&$Info), SN2);\r
                                                          break;\r
                                                        case EFI_VFR_VARSTORE_BUFFER:\r
                                                          _PCATCH(gCVfrVarDataTypeDB.GetDataFieldInfo (VarStr, $Info.mInfo.mVarOffset, $Info.mVarType, $Info.mVarTotalSize), SN2->getLine(), VarStr);\r
-                                                         VarGuid = mCVfrDataStorage.GetVarStoreGuid($Info.mVarStoreId);\r
+                                                         VarGuid = gCVfrDataStorage.GetVarStoreGuid($Info.mVarStoreId);\r
                                                          _PCATCH((EFI_VFR_RETURN_CODE)gCVfrBufferConfig.Register (\r
                                                                     SName,\r
                                                                     VarGuid,\r
@@ -1334,6 +1340,7 @@ vfrStorageVarId[EFI_VARSTORE_INFO & Info, CHAR8 *&QuestVarIdStr, BOOLEAN CheckFl
                                                                     $Info.mVarTotalSize,\r
                                                                     Dummy),\r
                                                                  SN2->getLine());\r
+                                                         _PCATCH(gCVfrDataStorage.AddBufferVarStoreFieldInfo(&$Info ),SN2->getLine());\r
                                                          break;\r
                                                        case EFI_VFR_VARSTORE_NAME:\r
                                                        default: break;\r
@@ -1744,6 +1751,8 @@ vfrStatementDefault :
                                                         DObj->SetLineNo(D->getLine());\r
                                                         if (ArrayType) {\r
                                                           DObj->SetType (EFI_IFR_TYPE_BUFFER);\r
+                                                        } else if (gIsStringOp) {\r
+                                                          DObj->SetType (EFI_IFR_TYPE_STRING);\r
                                                         } else {\r
                                                           DObj->SetType (_GET_CURRQEST_DATATYPE());\r
                                                         }\r
@@ -1754,7 +1763,7 @@ vfrStatementDefault :
     )\r
     {\r
       DefaultStore "=" SN:StringIdentifier ","      << \r
-                                                        _PCATCH(mCVfrDefaultStore.GetDefaultId (SN->getText(), &DefaultId), SN); \r
+                                                        _PCATCH(gCVfrDefaultStore.GetDefaultId (SN->getText(), &DefaultId), SN);\r
                                                         if (DObj != NULL) {\r
                                                           DObj->SetDefaultId (DefaultId); \r
                                                         } \r
@@ -1767,11 +1776,11 @@ vfrStatementDefault :
                                                     <<\r
                                                       CheckDuplicateDefaultValue (DefaultId, D);\r
                                                       if (_GET_CURRQEST_VARTINFO().mVarStoreId != EFI_VARSTORE_ID_INVALID) {\r
-                                                       _PCATCH(mCVfrDataStorage.GetVarStoreName (_GET_CURRQEST_VARTINFO().mVarStoreId, &VarStoreName), D->getLine());\r
-                                                       VarGuid = mCVfrDataStorage.GetVarStoreGuid(_GET_CURRQEST_VARTINFO().mVarStoreId);\r
-                                                       VarStoreType = mCVfrDataStorage.GetVarStoreType (_GET_CURRQEST_VARTINFO().mVarStoreId);\r
+                                                       _PCATCH(gCVfrDataStorage.GetVarStoreName (_GET_CURRQEST_VARTINFO().mVarStoreId, &VarStoreName), D->getLine());\r
+                                                       VarGuid = gCVfrDataStorage.GetVarStoreGuid(_GET_CURRQEST_VARTINFO().mVarStoreId);\r
+                                                       VarStoreType = gCVfrDataStorage.GetVarStoreType (_GET_CURRQEST_VARTINFO().mVarStoreId);\r
                                                        if ((IsExp == FALSE) && (VarStoreType == EFI_VFR_VARSTORE_BUFFER)) {\r
-                                                         _PCATCH(mCVfrDefaultStore.BufferVarStoreAltConfigAdd (\r
+                                                         _PCATCH(gCVfrDefaultStore.BufferVarStoreAltConfigAdd (\r
                                                                    DefaultId,\r
                                                                    _GET_CURRQEST_VARTINFO(),\r
                                                                    VarStoreName,\r
@@ -1842,6 +1851,7 @@ flagsField :
   | ManufacturingFlag \r
   | DefaultFlag \r
   | ResetRequiredFlag \r
+  | ReconnectRequiredFlag\r
   | N:NVAccessFlag                                     << \r
                                                           if (!mCompatibleMode) {\r
                                                             gCVfrErrorHandle.HandleWarning (\r
@@ -2123,7 +2133,7 @@ vfrStatementResetButton :
   L:ResetButton                                        << RBObj.SetLineNo(L->getLine()); >>\r
   DefaultStore\r
   "=" N:StringIdentifier ","                           <<\r
-                                                          _PCATCH(mCVfrDefaultStore.GetDefaultId (N->getText(), &DefaultId), N->getLine());\r
+                                                          _PCATCH(gCVfrDefaultStore.GetDefaultId (N->getText(), &DefaultId), N->getLine());\r
                                                           RBObj.SetDefaultId (DefaultId);\r
                                                        >>\r
   vfrStatementHeader[&RBObj] ","\r
@@ -2166,7 +2176,7 @@ vfrStatementCheckBox :
                                                             _PCATCH (gCVfrVarDataTypeDB.GetDataTypeSize (_GET_CURRQEST_DATATYPE(), &DataTypeSize), L->getLine(), "CheckBox varid is not the valid data type");\r
                                                             if (DataTypeSize != 0 && DataTypeSize != _GET_CURRQEST_VARSIZE()) {\r
                                                               _PCATCH (VFR_RETURN_INVALID_PARAMETER, L->getLine(), "CheckBox varid doesn't support array");\r
-                                                            } else if ((mCVfrDataStorage.GetVarStoreType (_GET_CURRQEST_VARTINFO().mVarStoreId) == EFI_VFR_VARSTORE_BUFFER) &&\r
+                                                            } else if ((gCVfrDataStorage.GetVarStoreType (_GET_CURRQEST_VARTINFO().mVarStoreId) == EFI_VFR_VARSTORE_BUFFER) &&\r
                                                                       (_GET_CURRQEST_VARSIZE() != sizeof (BOOLEAN))) {\r
                                                               _PCATCH (VFR_RETURN_INVALID_PARAMETER, L->getLine(), "CheckBox varid only support BOOLEAN data type");\r
                                                             }\r
@@ -2176,13 +2186,13 @@ vfrStatementCheckBox :
     F:FLAGS "=" vfrCheckBoxFlags[CBObj, F->getLine()] ","\r
                                                        <<\r
                                                          if (_GET_CURRQEST_VARTINFO().mVarStoreId != EFI_VARSTORE_ID_INVALID) {\r
-                                                            _PCATCH(mCVfrDataStorage.GetVarStoreName (_GET_CURRQEST_VARTINFO().mVarStoreId, &VarStoreName), VFR_RETURN_SUCCESS, L, "Failed to retrieve varstore name");\r
-                                                            VarStoreGuid = mCVfrDataStorage.GetVarStoreGuid(_GET_CURRQEST_VARTINFO().mVarStoreId);\r
+                                                            _PCATCH(gCVfrDataStorage.GetVarStoreName (_GET_CURRQEST_VARTINFO().mVarStoreId, &VarStoreName), VFR_RETURN_SUCCESS, L, "Failed to retrieve varstore name");\r
+                                                            VarStoreGuid = gCVfrDataStorage.GetVarStoreGuid(_GET_CURRQEST_VARTINFO().mVarStoreId);\r
                                                             Val.b = TRUE;\r
                                                             if (CBObj.GetFlags () & 0x01) {\r
                                                               CheckDuplicateDefaultValue (EFI_HII_DEFAULT_CLASS_STANDARD, F);\r
                                                               _PCATCH(\r
-                                                                mCVfrDefaultStore.BufferVarStoreAltConfigAdd (\r
+                                                                gCVfrDefaultStore.BufferVarStoreAltConfigAdd (\r
                                                                                     EFI_HII_DEFAULT_CLASS_STANDARD,\r
                                                                                     _GET_CURRQEST_VARTINFO(),\r
                                                                                     VarStoreName,\r
@@ -2198,7 +2208,7 @@ vfrStatementCheckBox :
                                                             if (CBObj.GetFlags () & 0x02) {\r
                                                               CheckDuplicateDefaultValue (EFI_HII_DEFAULT_CLASS_MANUFACTURING, F);\r
                                                               _PCATCH(\r
-                                                                mCVfrDefaultStore.BufferVarStoreAltConfigAdd (\r
+                                                                gCVfrDefaultStore.BufferVarStoreAltConfigAdd (\r
                                                                                     EFI_HII_DEFAULT_CLASS_MANUFACTURING,\r
                                                                                     _GET_CURRQEST_VARTINFO(),\r
                                                                                     VarStoreName,\r
@@ -2695,7 +2705,7 @@ vfrNumericFlags [CIfrNumeric & NObj, UINT32 LineNum] :
                                                        <<\r
                                                           //check data type flag\r
                                                           if (_GET_CURRQEST_VARTINFO().mVarStoreId != EFI_VARSTORE_ID_INVALID) {\r
-                                                            VarStoreType = mCVfrDataStorage.GetVarStoreType (_GET_CURRQEST_VARTINFO().mVarStoreId);\r
+                                                            VarStoreType = gCVfrDataStorage.GetVarStoreType (_GET_CURRQEST_VARTINFO().mVarStoreId);\r
                                                             if (VarStoreType == EFI_VFR_VARSTORE_BUFFER || VarStoreType == EFI_VFR_VARSTORE_EFI) {\r
                                                               if (_GET_CURRQEST_DATATYPE() != (LFlags & EFI_IFR_NUMERIC_SIZE)) {\r
                                                                 _PCATCH(VFR_RETURN_INVALID_PARAMETER, LineNum, "Numeric Flag is not same to Numeric VarData type");\r
@@ -2785,7 +2795,7 @@ vfrOneofFlagsField [CIfrOneOf & OObj, UINT32 LineNum] :
                                                        <<\r
                                                           //check data type flag\r
                                                           if (_GET_CURRQEST_VARTINFO().mVarStoreId != EFI_VARSTORE_ID_INVALID) {\r
-                                                            VarStoreType = mCVfrDataStorage.GetVarStoreType (_GET_CURRQEST_VARTINFO().mVarStoreId);\r
+                                                            VarStoreType = gCVfrDataStorage.GetVarStoreType (_GET_CURRQEST_VARTINFO().mVarStoreId);\r
                                                             if (VarStoreType == EFI_VFR_VARSTORE_BUFFER || VarStoreType == EFI_VFR_VARSTORE_EFI) {\r
                                                               if (_GET_CURRQEST_DATATYPE() != (LFlags & EFI_IFR_NUMERIC_SIZE)) {\r
                                                                 _PCATCH(VFR_RETURN_INVALID_PARAMETER, LineNum, "Numeric Flag is not same to Numeric VarData type");\r
@@ -2816,7 +2826,7 @@ vfrStatementString :
      UINT8 StringMinSize;\r
      UINT8 StringMaxSize;\r
   >>\r
-  L:String                                             << SObj.SetLineNo(L->getLine()); >>\r
+  L:String                                             << SObj.SetLineNo(L->getLine()); gIsStringOp = TRUE;>>\r
   vfrQuestionHeader[SObj] ","\r
   { F:FLAGS "=" vfrStringFlagsField[SObj, F->getLine()] "," }\r
   {\r
@@ -2844,7 +2854,7 @@ vfrStatementString :
                                                           SObj.SetMaxSize (StringMaxSize);\r
                                                        >>\r
   vfrStatementQuestionOptionList\r
-  E:EndString                                          << CRT_END_OP (E); >>\r
+  E:EndString                                          << CRT_END_OP (E); gIsStringOp = FALSE;>>\r
   ";"\r
   ;\r
 \r
@@ -3253,7 +3263,7 @@ vfrStatementInconsistentIf :
   Prompt "=" "STRING_TOKEN" "\(" S:Number "\)" ","     << IIObj.SetError (_STOSID(S->getText(), S->getLine())); >>\r
   { FLAGS "=" flagsField ( "\|" flagsField )* "," }\r
   vfrStatementExpression[0]\r
-  E:EndIf                                              << CRT_END_OP (E); >>\r
+  E:EndIf {";"}                                        << CRT_END_OP (E); >>\r
   ;\r
 \r
 vfrStatementNoSubmitIf :\r
@@ -3262,7 +3272,7 @@ vfrStatementNoSubmitIf :
   Prompt "=" "STRING_TOKEN" "\(" S:Number "\)" ","     << NSIObj.SetError (_STOSID(S->getText(), S->getLine())); >>\r
   { FLAGS "=" flagsField ( "\|" flagsField )* "," }\r
   vfrStatementExpression[0]\r
-  E:EndIf                                              << CRT_END_OP (E); >>\r
+  E:EndIf {";"}                                        << CRT_END_OP (E); >>\r
   ;\r
 \r
 vfrStatementWarningIf :\r
@@ -3271,7 +3281,7 @@ vfrStatementWarningIf :
   Prompt "=" "STRING_TOKEN" "\(" S:Number "\)" ","     << WIObj.SetWarning (_STOSID(S->getText(), S->getLine())); >>\r
   {Timeout "=" T:Number ","                            << WIObj.SetTimeOut (_STOU8(T->getText(), T->getLine())); >>}\r
   vfrStatementExpression[0]\r
-  E:EndIf                                              << CRT_END_OP (E); >>\r
+  E:EndIf {";"}                                        << CRT_END_OP (E); >>\r
   ;\r
 \r
 vfrStatementDisableIfQuest :\r
@@ -3281,7 +3291,7 @@ vfrStatementDisableIfQuest :
   L:DisableIf                                          << DIObj.SetLineNo(L->getLine()); >>\r
   vfrStatementExpression[0] ";"\r
   vfrStatementQuestionOptionList\r
-  E:EndIf                                              << CRT_END_OP (E); >>\r
+  E:EndIf {";"}                                        << CRT_END_OP (E); >>\r
   ;\r
 \r
 vfrStatementRefresh :\r
@@ -3311,7 +3321,7 @@ vfrStatementSuppressIfQuest :
   { FLAGS "=" flagsField ( "\|" flagsField )* "," }\r
   vfrStatementExpression[0] ";"\r
   vfrStatementQuestionOptionList\r
-  E:EndIf                                              << CRT_END_OP (E); >>\r
+  E:EndIf {";"}                                        << CRT_END_OP (E); >>\r
   ;\r
 \r
 vfrStatementGrayOutIfQuest :\r
@@ -3320,7 +3330,7 @@ vfrStatementGrayOutIfQuest :
   { FLAGS "=" flagsField ( "\|" flagsField )* "," }\r
   vfrStatementExpression[0] ";"\r
   vfrStatementQuestionOptionList\r
-  E:EndIf                                              << CRT_END_OP (E); >>\r
+  E:EndIf {";"}                                        << CRT_END_OP (E); >>\r
   ;\r
 \r
 vfrStatementOptions :\r
@@ -3437,11 +3447,11 @@ vfrStatementOneOfOption :
                                                           }\r
 \r
                                                           if (_GET_CURRQEST_VARTINFO().mVarStoreId != EFI_VARSTORE_ID_INVALID) {\r
-                                                            _PCATCH(mCVfrDataStorage.GetVarStoreName (_GET_CURRQEST_VARTINFO().mVarStoreId, &VarStoreName), L->getLine());\r
-                                                            VarStoreGuid = mCVfrDataStorage.GetVarStoreGuid(_GET_CURRQEST_VARTINFO().mVarStoreId);\r
+                                                            _PCATCH(gCVfrDataStorage.GetVarStoreName (_GET_CURRQEST_VARTINFO().mVarStoreId, &VarStoreName), L->getLine());\r
+                                                            VarStoreGuid = gCVfrDataStorage.GetVarStoreGuid(_GET_CURRQEST_VARTINFO().mVarStoreId);\r
                                                             if (OOOObj->GetFlags () & EFI_IFR_OPTION_DEFAULT) {\r
                                                               CheckDuplicateDefaultValue (EFI_HII_DEFAULT_CLASS_STANDARD, F);\r
-                                                              _PCATCH(mCVfrDefaultStore.BufferVarStoreAltConfigAdd (\r
+                                                              _PCATCH(gCVfrDefaultStore.BufferVarStoreAltConfigAdd (\r
                                                                         EFI_HII_DEFAULT_CLASS_STANDARD,\r
                                                                          _GET_CURRQEST_VARTINFO(),\r
                                                                         VarStoreName,\r
@@ -3452,7 +3462,7 @@ vfrStatementOneOfOption :
                                                             }\r
                                                             if (OOOObj->GetFlags () & EFI_IFR_OPTION_DEFAULT_MFG) {\r
                                                               CheckDuplicateDefaultValue (EFI_HII_DEFAULT_CLASS_MANUFACTURING, F);\r
-                                                              _PCATCH(mCVfrDefaultStore.BufferVarStoreAltConfigAdd (\r
+                                                              _PCATCH(gCVfrDefaultStore.BufferVarStoreAltConfigAdd (\r
                                                                         EFI_HII_DEFAULT_CLASS_MANUFACTURING,\r
                                                                          _GET_CURRQEST_VARTINFO(),\r
                                                                         VarStoreName,\r
@@ -3501,6 +3511,7 @@ oneofoptionFlagsField [UINT8 & HFlags, UINT8 & LFlags] :
   | "OPTION_DEFAULT_MFG"                               << $LFlags |= 0x20; >>\r
   | InteractiveFlag                                    << $HFlags |= 0x04; >>\r
   | ResetRequiredFlag                                  << $HFlags |= 0x10; >>\r
+  | ReconnectRequiredFlag                              << $HFlags |= 0x40; >>\r
   | ManufacturingFlag                                  << $LFlags |= 0x20; >>\r
   | DefaultFlag                                        << $LFlags |= 0x10; >>\r
   | A:NVAccessFlag                                     << \r
@@ -3921,9 +3932,9 @@ vareqvalExp [UINT32 & RootLevel, UINT32 & ExpOpCount] :
   OpenParen\r
   VN:Number                                           <<\r
                                                           VarIdStr = NULL; _STRCAT(&VarIdStr, VK->getText()); _STRCAT(&VarIdStr, VN->getText());\r
-                                                          VfrReturnCode = mCVfrDataStorage.GetVarStoreId (VarIdStr, &VarStoreId);\r
+                                                          VfrReturnCode = gCVfrDataStorage.GetVarStoreId (VarIdStr, &VarStoreId);\r
                                                           if (VfrReturnCode == VFR_RETURN_UNDEFINED) {\r
-                                                            _PCATCH (mCVfrDataStorage.DeclareEfiVarStore (\r
+                                                            _PCATCH (gCVfrDataStorage.DeclareEfiVarStore (\r
                                                                                         VarIdStr,\r
                                                                                         &mFormsetGuid,\r
                                                                                         _STOSID(VN->getText(), VN->getLine()),\r
@@ -4240,7 +4251,7 @@ getExp[UINT32 & RootLevel, UINT32 & ExpOpCount] :
                                                                 break;\r
                                                               }\r
                                                             } else {\r
-                                                              if ((mCVfrDataStorage.GetVarStoreType(Info.mVarStoreId) == EFI_VFR_VARSTORE_NAME) && (VarType == EFI_IFR_TYPE_UNDEFINED)) {\r
+                                                              if ((gCVfrDataStorage.GetVarStoreType(Info.mVarStoreId) == EFI_VFR_VARSTORE_NAME) && (VarType == EFI_IFR_TYPE_UNDEFINED)) {\r
                                                                 _PCATCH(VFR_RETURN_UNSUPPORTED, L->getLine(), "Get/Set opcode don't support name string");\r
                                                               }\r
                                                               if (VarType != EFI_IFR_TYPE_UNDEFINED) {\r
@@ -4415,7 +4426,7 @@ setExp[UINT32 & RootLevel, UINT32 & ExpOpCount] :
                                                                 break;\r
                                                               }\r
                                                             } else {\r
-                                                              if ((mCVfrDataStorage.GetVarStoreType(Info.mVarStoreId) == EFI_VFR_VARSTORE_NAME) && (VarType == EFI_IFR_TYPE_UNDEFINED)) {\r
+                                                              if ((gCVfrDataStorage.GetVarStoreType(Info.mVarStoreId) == EFI_VFR_VARSTORE_NAME) && (VarType == EFI_IFR_TYPE_UNDEFINED)) {\r
                                                                 _PCATCH(VFR_RETURN_UNSUPPORTED, L->getLine(), "Get/Set opcode don't support name string");\r
                                                               }\r
                                                               if (VarType != EFI_IFR_TYPE_UNDEFINED) {\r
@@ -4544,8 +4555,6 @@ private:
   UINT8               mParserStatus;\r
   BOOLEAN             mConstantOnlyInExpression;\r
 \r
-  CVfrDefaultStore    mCVfrDefaultStore;\r
-  CVfrDataStorage     mCVfrDataStorage;\r
   CVfrQuestionDB      mCVfrQuestionDB;\r
   CVfrRulesDB         mCVfrRulesDB;\r
 \r
@@ -5106,7 +5115,7 @@ EfiVfrParser::_DeclareDefaultFrameworkVarStore (
   CONST CHAR8           VarName[] = "Setup";\r
 \r
   FirstNode = TRUE;\r
-  pNode = mCVfrDataStorage.GetBufferVarStoreList();\r
+  pNode = gCVfrDataStorage.GetBufferVarStoreList();\r
   if (pNode == NULL && gCVfrVarDataTypeDB.mFirstNewDataTypeName != NULL) {\r
     //\r
     // Create the default Buffer Var Store when no VarStore is defined.\r
@@ -5148,7 +5157,7 @@ EfiVfrParser::_DeclareDefaultFrameworkVarStore (
     }\r
   }\r
 \r
-  pNode = mCVfrDataStorage.GetEfiVarStoreList();\r
+  pNode = gCVfrDataStorage.GetEfiVarStoreList();\r
   for (; pNode != NULL; pNode = pNode->mNext) {\r
     //\r
     // create the default efi varstore opcode for not exist varstore\r
@@ -5191,14 +5200,14 @@ EfiVfrParser::_DeclareDefaultLinearVarStore (
     CIfrVarStore      VSObj;\r
 \r
     VSObj.SetLineNo (LineNo);\r
-    mCVfrDataStorage.DeclareBufferVarStore (\r
+    gCVfrDataStorage.DeclareBufferVarStore (\r
                        TypeNameList[Index],\r
                        &mFormsetGuid,\r
                        &gCVfrVarDataTypeDB,\r
                        TypeNameList[Index],\r
                        EFI_VARSTORE_ID_INVALID\r
                        );\r
-    mCVfrDataStorage.GetVarStoreId(TypeNameList[Index], &VarStoreId, &mFormsetGuid);\r
+    gCVfrDataStorage.GetVarStoreId(TypeNameList[Index], &VarStoreId, &mFormsetGuid);\r
     VSObj.SetVarStoreId (VarStoreId);\r
     gCVfrVarDataTypeDB.GetDataTypeSize(TypeNameList[Index], &Size);\r
     VSObj.SetSize ((UINT16) Size);\r
@@ -5216,14 +5225,14 @@ EfiVfrParser::_DeclareDefaultLinearVarStore (
     CIfrVarStore      VSObj;\r
 \r
     VSObj.SetLineNo (LineNo);\r
-    mCVfrDataStorage.DeclareBufferVarStore (\r
+    gCVfrDataStorage.DeclareBufferVarStore (\r
                        (CHAR8 *) DateName,\r
                        &mFormsetGuid,\r
                        &gCVfrVarDataTypeDB,\r
                        (CHAR8 *) DateType,\r
                        EFI_VARSTORE_ID_INVALID\r
                        );\r
-    mCVfrDataStorage.GetVarStoreId((CHAR8 *) DateName, &VarStoreId, &mFormsetGuid);\r
+    gCVfrDataStorage.GetVarStoreId((CHAR8 *) DateName, &VarStoreId, &mFormsetGuid);\r
     VSObj.SetVarStoreId (VarStoreId);\r
     gCVfrVarDataTypeDB.GetDataTypeSize((CHAR8 *) DateType, &Size);\r
     VSObj.SetSize ((UINT16) Size);\r
@@ -5237,14 +5246,14 @@ EfiVfrParser::_DeclareDefaultLinearVarStore (
     CIfrVarStore      VSObj;\r
 \r
     VSObj.SetLineNo (LineNo);\r
-    mCVfrDataStorage.DeclareBufferVarStore (\r
+    gCVfrDataStorage.DeclareBufferVarStore (\r
                        (CHAR8 *) TimeName,\r
                        &mFormsetGuid,\r
                        &gCVfrVarDataTypeDB,\r
                        (CHAR8 *) TimeType,\r
                        EFI_VARSTORE_ID_INVALID\r
                        );\r
-    mCVfrDataStorage.GetVarStoreId((CHAR8 *) TimeName, &VarStoreId, &mFormsetGuid);\r
+    gCVfrDataStorage.GetVarStoreId((CHAR8 *) TimeName, &VarStoreId, &mFormsetGuid);\r
     VSObj.SetVarStoreId (VarStoreId);\r
     gCVfrVarDataTypeDB.GetDataTypeSize((CHAR8 *) TimeType, &Size);\r
     VSObj.SetSize ((UINT16) Size);\r
@@ -5263,7 +5272,7 @@ EfiVfrParser::_DeclareStandardDefaultStorage (
   //\r
   CIfrDefaultStore DSObj;\r
 \r
-  mCVfrDefaultStore.RegisterDefaultStore (DSObj.GetObjBinAddr(), (CHAR8 *) "Standard Defaults", EFI_STRING_ID_INVALID, EFI_HII_DEFAULT_CLASS_STANDARD);\r
+  gCVfrDefaultStore.RegisterDefaultStore (DSObj.GetObjBinAddr(), (CHAR8 *) "Standard Defaults", EFI_STRING_ID_INVALID, EFI_HII_DEFAULT_CLASS_STANDARD);\r
   DSObj.SetLineNo (LineNo);\r
   DSObj.SetDefaultName (EFI_STRING_ID_INVALID);\r
   DSObj.SetDefaultId (EFI_HII_DEFAULT_CLASS_STANDARD);\r
@@ -5273,7 +5282,7 @@ EfiVfrParser::_DeclareStandardDefaultStorage (
   //\r
   CIfrDefaultStore DSObjMF;\r
 \r
-  mCVfrDefaultStore.RegisterDefaultStore (DSObjMF.GetObjBinAddr(), (CHAR8 *) "Standard ManuFacturing", EFI_STRING_ID_INVALID, EFI_HII_DEFAULT_CLASS_MANUFACTURING);\r
+  gCVfrDefaultStore.RegisterDefaultStore (DSObjMF.GetObjBinAddr(), (CHAR8 *) "Standard ManuFacturing", EFI_STRING_ID_INVALID, EFI_HII_DEFAULT_CLASS_MANUFACTURING);\r
   DSObjMF.SetLineNo (LineNo);\r
   DSObjMF.SetDefaultName (EFI_STRING_ID_INVALID);\r
   DSObjMF.SetDefaultId (EFI_HII_DEFAULT_CLASS_MANUFACTURING);\r