]> git.proxmox.com Git - mirror_edk2.git/blobdiff - BaseTools/Source/C/VfrCompile/VfrSyntax.g
MdeModluePkg: Enable refresh opcode to refresh the entire form.
[mirror_edk2.git] / BaseTools / Source / C / VfrCompile / VfrSyntax.g
index 6f15aaa452a38a4350a146c5231f336933338022..8e9f32b81598047386ecca16a348d6c39cc6f7fa 100644 (file)
@@ -1,5 +1,7 @@
-/*++\r
-Copyright (c) 2004 - 2013, Intel Corporation. All rights reserved.<BR>\r
+/*++ @file\r
+Vfr Syntax\r
+\r
+Copyright (c) 2004 - 2014, 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
@@ -8,11 +10,6 @@ http://opensource.org/licenses/bsd-license.php
 THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS,\r
 WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED.\r
 \r
-Module Name:\r
-  VfrSyntax.g\r
-\r
-Abstract:\r
-\r
 --*/\r
 \r
 #header<<\r
@@ -295,7 +292,7 @@ pragmaPackStackDef :
     "," ID:StringIdentifier                         << Identifier = ID->getText(); >>\r
   }\r
   {\r
-    "," N:Number                                    << PackAction |= VFR_PACK_ASSIGN; PackNumber = _STOU32(N->getText()); >>\r
+    "," N:Number                                    << PackAction |= VFR_PACK_ASSIGN; PackNumber = _STOU32(N->getText(), N->getLine()); >>\r
   }\r
                                                     << gCVfrVarDataTypeDB.Pack (LineNum, PackAction, Identifier, PackNumber); >>\r
   ;\r
@@ -305,7 +302,7 @@ pragmaPackNumber :
      UINT32 LineNum;\r
      UINT32 PackNumber = DEFAULT_PACK_ALIGN;\r
   >>\r
-  N:Number                                          << LineNum = N->getLine(); PackNumber = _STOU32(N->getText()); >>\r
+  N:Number                                          << LineNum = N->getLine(); PackNumber = _STOU32(N->getText(), N->getLine()); >>\r
                                                     << gCVfrVarDataTypeDB.Pack (LineNum, VFR_PACK_ASSIGN, NULL, PackNumber); >>\r
   ;\r
 \r
@@ -354,7 +351,7 @@ dataStructField64 :
   D:"UINT64"\r
   N:StringIdentifier\r
   {\r
-    OpenBracket I:Number CloseBracket               << ArrayNum = _STOU32(I->getText()); >>\r
+    OpenBracket I:Number CloseBracket               << ArrayNum = _STOU32(I->getText(), I->getLine()); >>\r
   }\r
   ";"                                               << _PCATCH(gCVfrVarDataTypeDB.DataTypeAddField (N->getText(), D->getText(), ArrayNum), N); >>\r
   ;\r
@@ -364,7 +361,7 @@ dataStructField32 :
   D:"UINT32"\r
   N:StringIdentifier\r
   {\r
-    OpenBracket I:Number CloseBracket               << ArrayNum = _STOU32(I->getText()); >>\r
+    OpenBracket I:Number CloseBracket               << ArrayNum = _STOU32(I->getText(), I->getLine()); >>\r
   }\r
   ";"                                               << _PCATCH(gCVfrVarDataTypeDB.DataTypeAddField (N->getText(), D->getText(), ArrayNum), N); >>\r
   ;\r
@@ -376,7 +373,7 @@ dataStructField16 :
   ("UINT16" | "CHAR16")\r
   N:StringIdentifier\r
   {\r
-    OpenBracket I:Number CloseBracket               << ArrayNum = _STOU32(I->getText()); >>\r
+    OpenBracket I:Number CloseBracket               << ArrayNum = _STOU32(I->getText(), I->getLine()); >>\r
   }\r
   ";"                                               << _PCATCH(gCVfrVarDataTypeDB.DataTypeAddField (N->getText(), (CHAR8 *) "UINT16", ArrayNum), N); >>\r
   ;\r
@@ -386,7 +383,7 @@ dataStructField8 :
   D:"UINT8"\r
   N:StringIdentifier\r
   {\r
-    OpenBracket I:Number CloseBracket               << ArrayNum = _STOU32(I->getText()); >>\r
+    OpenBracket I:Number CloseBracket               << ArrayNum = _STOU32(I->getText(), I->getLine()); >>\r
   }\r
   ";"                                               << _PCATCH(gCVfrVarDataTypeDB.DataTypeAddField (N->getText(), D->getText(), ArrayNum), N); >>\r
   ;\r
@@ -396,7 +393,7 @@ dataStructFieldBool :
   D:"BOOLEAN"\r
   N:StringIdentifier\r
   {\r
-    OpenBracket I:Number CloseBracket               << ArrayNum = _STOU32(I->getText()); >>\r
+    OpenBracket I:Number CloseBracket               << ArrayNum = _STOU32(I->getText(), I->getLine()); >>\r
   }\r
   ";"                                               << _PCATCH(gCVfrVarDataTypeDB.DataTypeAddField (N->getText(), D->getText(), ArrayNum), N); >>\r
   ;\r
@@ -406,7 +403,7 @@ dataStructFieldString :
   D:"EFI_STRING_ID"\r
   N:StringIdentifier\r
   {\r
-    OpenBracket I:Number CloseBracket               << ArrayNum = _STOU32(I->getText()); >>\r
+    OpenBracket I:Number CloseBracket               << ArrayNum = _STOU32(I->getText(), I->getLine()); >>\r
   }\r
   ";"                                               << _PCATCH(gCVfrVarDataTypeDB.DataTypeAddField (N->getText(), D->getText(), ArrayNum), N); >>\r
   ;\r
@@ -416,7 +413,7 @@ dataStructFieldDate :
   D:"EFI_HII_DATE"\r
   N:StringIdentifier\r
   {\r
-    OpenBracket I:Number CloseBracket               << ArrayNum = _STOU32(I->getText()); >>\r
+    OpenBracket I:Number CloseBracket               << ArrayNum = _STOU32(I->getText(), I->getLine()); >>\r
   }\r
   ";"                                               << _PCATCH(gCVfrVarDataTypeDB.DataTypeAddField (N->getText(), D->getText(), ArrayNum), N); >>\r
   ;\r
@@ -426,7 +423,7 @@ dataStructFieldTime :
   D:"EFI_HII_TIME"\r
   N:StringIdentifier\r
   {\r
-    OpenBracket I:Number CloseBracket               << ArrayNum = _STOU32(I->getText()); >>\r
+    OpenBracket I:Number CloseBracket               << ArrayNum = _STOU32(I->getText(), I->getLine()); >>\r
   }\r
   ";"                                               << _PCATCH(gCVfrVarDataTypeDB.DataTypeAddField (N->getText(), D->getText(), ArrayNum), N); >>\r
   ;\r
@@ -436,7 +433,7 @@ dataStructFieldRef :
   D:"EFI_HII_REF"\r
   N:StringIdentifier\r
   {\r
-    OpenBracket I:Number CloseBracket               << ArrayNum = _STOU32(I->getText()); >>\r
+    OpenBracket I:Number CloseBracket               << ArrayNum = _STOU32(I->getText(), I->getLine()); >>\r
   }\r
   ";"                                               << _PCATCH(gCVfrVarDataTypeDB.DataTypeAddField (N->getText(), D->getText(), ArrayNum), N); >>\r
   ;\r
@@ -446,7 +443,7 @@ dataStructFieldUser :
   T:StringIdentifier\r
   N:StringIdentifier\r
   {\r
-    OpenBracket I:Number CloseBracket               << ArrayNum = _STOU32(I->getText()); >>\r
+    OpenBracket I:Number CloseBracket               << ArrayNum = _STOU32(I->getText(), I->getLine()); >>\r
   }\r
   ";"                                               << _PCATCH(gCVfrVarDataTypeDB.DataTypeAddField (N->getText(), T->getText(), ArrayNum), T); >>\r
   ;\r
@@ -458,14 +455,14 @@ dataStructFieldUser :
 guidSubDefinition [EFI_GUID &Guid] :\r
   G4:Number "," G5:Number "," G6:Number "," G7:Number "," G8:Number "," G9:Number "," G10:Number "," G11:Number\r
                                                     <<\r
-                                                       Guid.Data4[0] = _STOU8(G4->getText());\r
-                                                       Guid.Data4[1] = _STOU8(G5->getText());\r
-                                                       Guid.Data4[2] = _STOU8(G6->getText());\r
-                                                       Guid.Data4[3] = _STOU8(G7->getText());\r
-                                                       Guid.Data4[4] = _STOU8(G8->getText());\r
-                                                       Guid.Data4[5] = _STOU8(G9->getText());\r
-                                                       Guid.Data4[6] = _STOU8(G10->getText());\r
-                                                       Guid.Data4[7] = _STOU8(G11->getText());\r
+                                                       Guid.Data4[0] = _STOU8(G4->getText(), G4->getLine());\r
+                                                       Guid.Data4[1] = _STOU8(G5->getText(), G5->getLine());\r
+                                                       Guid.Data4[2] = _STOU8(G6->getText(), G6->getLine());\r
+                                                       Guid.Data4[3] = _STOU8(G7->getText(), G7->getLine());\r
+                                                       Guid.Data4[4] = _STOU8(G8->getText(), G8->getLine());\r
+                                                       Guid.Data4[5] = _STOU8(G9->getText(), G9->getLine());\r
+                                                       Guid.Data4[6] = _STOU8(G10->getText(), G10->getLine());\r
+                                                       Guid.Data4[7] = _STOU8(G11->getText(), G11->getLine());\r
                                                     >>\r
   ;\r
 \r
@@ -473,9 +470,9 @@ guidDefinition [EFI_GUID &Guid] :
   OpenBrace\r
     G1:Number "," G2:Number "," G3:Number ","\r
                                                     <<\r
-                                                       Guid.Data1 = _STOU32 (G1->getText());\r
-                                                       Guid.Data2 = _STOU16 (G2->getText());\r
-                                                       Guid.Data3 = _STOU16 (G3->getText());\r
+                                                       Guid.Data1 = _STOU32 (G1->getText(), G1->getLine());\r
+                                                       Guid.Data2 = _STOU16 (G2->getText(), G2->getLine());\r
+                                                       Guid.Data3 = _STOU16 (G3->getText(), G3->getLine());\r
                                                     >>\r
     (\r
         OpenBrace guidSubDefinition[Guid] CloseBrace\r
@@ -505,10 +502,10 @@ vfrFormSetDefinition :
   {\r
     ClassGuid "=" guidDefinition[ClassGuid1]        << ++ClassGuidNum; >>\r
                   {\r
-                   "\|" guidDefinition[ClassGuid2]  << ++ClassGuidNum; >>\r
-                  }\r
-                  {\r
-                   "\|" guidDefinition[ClassGuid3]  << ++ClassGuidNum; >>\r
+                     "\|" guidDefinition[ClassGuid2]  << ++ClassGuidNum; >>\r
+                     {\r
+                      "\|" guidDefinition[ClassGuid3]  << ++ClassGuidNum; >>\r
+                     }\r
                   }\r
                   ","\r
   }\r
@@ -568,8 +565,8 @@ vfrFormSetDefinition :
                                                       if (mCompatibleMode) {\r
                                                         memcpy (&mFormsetGuid, &Guid, sizeof (EFI_GUID));\r
                                                       }\r
-                                                      FSObj->SetFormSetTitle (_STOSID(S1->getText()));\r
-                                                      FSObj->SetHelp (_STOSID(S2->getText()));\r
+                                                      FSObj->SetFormSetTitle (_STOSID(S1->getText(), S1->getLine()));\r
+                                                      FSObj->SetHelp (_STOSID(S2->getText(), S2->getLine()));\r
                                                     >>\r
   {\r
     FC:Class "=" classDefinition[C] ","             << {CIfrClass CObj;SET_LINE_INFO (CObj, FC); CObj.SetClass(C);} >>\r
@@ -656,25 +653,25 @@ vfrStatementExtension:
   Uuid "=" guidDefinition[Guid]\r
   {"," DataType "=" \r
     (\r
-        U64:"UINT64" {OpenBracket AN1:Number CloseBracket <<ArrayNum = _STOU32(AN1->getText());>>}\r
+        U64:"UINT64" {OpenBracket AN1:Number CloseBracket <<ArrayNum = _STOU32(AN1->getText(), AN1->getLine());>>}\r
                                                       << TypeName = U64->getText(); LineNum = U64->getLine(); >>\r
-      | U32:"UINT32" {OpenBracket AN2:Number CloseBracket <<ArrayNum = _STOU32(AN2->getText());>>}\r
+      | U32:"UINT32" {OpenBracket AN2:Number CloseBracket <<ArrayNum = _STOU32(AN2->getText(), AN2->getLine());>>}\r
                                                       << TypeName = U32->getText(); LineNum = U32->getLine(); >>\r
-      | U16:"UINT16" {OpenBracket AN3:Number CloseBracket <<ArrayNum = _STOU32(AN3->getText());>>}\r
+      | U16:"UINT16" {OpenBracket AN3:Number CloseBracket <<ArrayNum = _STOU32(AN3->getText(), AN3->getLine());>>}\r
                                                       << TypeName = U16->getText(); LineNum = U16->getLine(); >>\r
-      | U8:"UINT8"   {OpenBracket AN4:Number CloseBracket <<ArrayNum = _STOU32(AN4->getText());>>}\r
+      | U8:"UINT8"   {OpenBracket AN4:Number CloseBracket <<ArrayNum = _STOU32(AN4->getText(), AN4->getLine());>>}\r
                                                       << TypeName = U8->getText(); LineNum = U8->getLine(); >>\r
-      | BL:"BOOLEAN" {OpenBracket AN5:Number CloseBracket <<ArrayNum = _STOU32(AN5->getText());>>}\r
+      | BL:"BOOLEAN" {OpenBracket AN5:Number CloseBracket <<ArrayNum = _STOU32(AN5->getText(), AN5->getLine());>>}\r
                                                       << TypeName = BL->getText(); LineNum = BL->getLine(); >>\r
-      | SI:"EFI_STRING_ID" {OpenBracket AN6:Number CloseBracket <<ArrayNum = _STOU32(AN6->getText());>>}\r
+      | SI:"EFI_STRING_ID" {OpenBracket AN6:Number CloseBracket <<ArrayNum = _STOU32(AN6->getText(), AN6->getLine());>>}\r
                                                       << TypeName = SI->getText(); LineNum = SI->getLine(); >>\r
-      | D:"EFI_HII_DATE" {OpenBracket AN7:Number CloseBracket <<ArrayNum = _STOU32(AN7->getText());>>}\r
+      | D:"EFI_HII_DATE" {OpenBracket AN7:Number CloseBracket <<ArrayNum = _STOU32(AN7->getText(), AN7->getLine());>>}\r
                                                       << TypeName = D->getText(); LineNum = D->getLine(); IsStruct = TRUE;>>\r
-      | T:"EFI_HII_TIME" {OpenBracket AN8:Number CloseBracket <<ArrayNum = _STOU32(AN8->getText());>>}\r
+      | T:"EFI_HII_TIME" {OpenBracket AN8:Number CloseBracket <<ArrayNum = _STOU32(AN8->getText(), AN8->getLine());>>}\r
                                                       << TypeName = T->getText(); LineNum = T->getLine(); IsStruct = TRUE;>>\r
-      | R:"EFI_HII_REF" {OpenBracket AN9:Number CloseBracket <<ArrayNum = _STOU32(AN9->getText());>>}\r
+      | R:"EFI_HII_REF" {OpenBracket AN9:Number CloseBracket <<ArrayNum = _STOU32(AN9->getText(), AN9->getLine());>>}\r
                                                       << TypeName = R->getText(); LineNum = R->getLine(); IsStruct = TRUE;>>                                                \r
-      | TN:StringIdentifier {OpenBracket AN10:Number CloseBracket <<ArrayNum = _STOU32(AN10->getText());>>}\r
+      | TN:StringIdentifier {OpenBracket AN10:Number CloseBracket <<ArrayNum = _STOU32(AN10->getText(), AN10->getLine());>>}\r
                                                       << TypeName = TN->getText(); LineNum = TN->getLine(); IsStruct = TRUE;>>\r
     )\r
                                                       <<\r
@@ -738,7 +735,7 @@ vfrExtensionData[UINT8 *DataBuff, UINT32 Size, CHAR8 *TypeName, UINT32 TypeSize,
           <<\r
             ArrayIdx = 0;\r
             if (IsArray == TRUE) {\r
-              ArrayIdx = _STOU8(IDX1->getText());\r
+              ArrayIdx = _STOU8(IDX1->getText(), IDX1->getLine());\r
               if (ArrayIdx >= ArrayNum) return;\r
               IsArray = FALSE;\r
             }\r
@@ -769,49 +766,49 @@ vfrExtensionData[UINT8 *DataBuff, UINT32 Size, CHAR8 *TypeName, UINT32 TypeSize,
           <<\r
             if (IsStruct == FALSE) {\r
               if (strcmp ("UINT64", TypeName) == 0) {\r
-                Data_U64 = _STOU64(RD->getText());\r
+                Data_U64 = _STOU64(RD->getText(), RD->getLine());\r
                 memcpy (ByteOffset, &Data_U64, TypeSize);\r
               }else if (strcmp ("UINT32", TypeName) == 0) {\r
-                Data_U32 = _STOU32(RD->getText());\r
+                Data_U32 = _STOU32(RD->getText(), RD->getLine());\r
                 memcpy (ByteOffset, &Data_U32, TypeSize);                                                    \r
               }else if (strcmp ("UINT16", TypeName) == 0) {\r
-                Data_U16 = _STOU16(RD->getText());\r
+                Data_U16 = _STOU16(RD->getText(), RD->getLine());\r
                 memcpy (ByteOffset, &Data_U16, TypeSize);                                                    \r
               }else if (strcmp ("UINT8", TypeName) == 0) {\r
-                Data_U8 = _STOU8(RD->getText());\r
+                Data_U8 = _STOU8(RD->getText(), RD->getLine());\r
                 memcpy (ByteOffset, &Data_U8, TypeSize);                                                    \r
               }else if (strcmp ("BOOLEAN", TypeName)== 0) {\r
-                Data_BL = _STOU8(RD->getText());\r
+                Data_BL = _STOU8(RD->getText(), RD->getLine());\r
                 memcpy (ByteOffset, &Data_BL, TypeSize);                                                    \r
               }else if (strcmp ("EFI_STRING_ID", TypeName) == 0) {\r
-                Data_SID = _STOSID(RD->getText());\r
+                Data_SID = _STOSID(RD->getText(), RD->getLine());\r
                 memcpy (ByteOffset, &Data_SID, TypeSize);                                                    \r
               }\r
             } else {\r
               gCVfrVarDataTypeDB.GetDataFieldInfo(TFName, FieldOffset, FieldType, FieldSize);\r
               switch (FieldType) {\r
               case EFI_IFR_TYPE_NUM_SIZE_8:\r
-                 Data_U8 = _STOU8(RD->getText());\r
+                 Data_U8 = _STOU8(RD->getText(), RD->getLine());\r
                  memcpy (ByteOffset + FieldOffset, &Data_U8, FieldSize);\r
                  break;\r
               case EFI_IFR_TYPE_NUM_SIZE_16:\r
-                 Data_U16 = _STOU16(RD->getText());\r
+                 Data_U16 = _STOU16(RD->getText(), RD->getLine());\r
                  memcpy (ByteOffset + FieldOffset, &Data_U16, FieldSize);\r
                  break;\r
               case EFI_IFR_TYPE_NUM_SIZE_32:\r
-                 Data_U32 = _STOU32(RD->getText());\r
+                 Data_U32 = _STOU32(RD->getText(), RD->getLine());\r
                  memcpy (ByteOffset + FieldOffset, &Data_U32, FieldSize);\r
                  break;\r
               case EFI_IFR_TYPE_NUM_SIZE_64:\r
-                 Data_U64 = _STOU64(RD->getText());\r
+                 Data_U64 = _STOU64(RD->getText(), RD->getLine());\r
                  memcpy (ByteOffset + FieldOffset, &Data_U64, FieldSize);\r
                  break;\r
               case EFI_IFR_TYPE_BOOLEAN:\r
-                 Data_BL = _STOU8(RD->getText());\r
+                 Data_BL = _STOU8(RD->getText(), RD->getLine());\r
                  memcpy (ByteOffset + FieldOffset, &Data_BL, FieldSize);\r
                  break;\r
               case EFI_IFR_TYPE_STRING:\r
-                 Data_SID = _STOSID(RD->getText());\r
+                 Data_SID = _STOSID(RD->getText(), RD->getLine());\r
                  memcpy (ByteOffset + FieldOffset, &Data_SID, FieldSize);\r
                  break;\r
               default:\r
@@ -830,17 +827,17 @@ vfrStatementDefaultStore :
   D:DefaultStore N:StringIdentifier ","\r
   Prompt "=" "STRING_TOKEN" "\(" S:Number "\)"\r
   {\r
-    "," Attribute "=" A:Number                      << DefaultId = _STOU16(A->getText()); >>\r
+    "," Attribute "=" A:Number                      << DefaultId = _STOU16(A->getText(), A->getLine()); >>\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
+                                                         _PCATCH(mCVfrDefaultStore.RegisterDefaultStore (DSObj.GetObjBinAddr(), N->getText(), _STOSID(S->getText(), S->getLine()), DefaultId)), D->getLine();\r
                                                          DSObj.SetLineNo(D->getLine());\r
-                                                         DSObj.SetDefaultName (_STOSID(S->getText()));\r
+                                                         DSObj.SetDefaultName (_STOSID(S->getText(), S->getLine()));\r
                                                          DSObj.SetDefaultId (DefaultId);\r
                                                        } else {\r
-                                                         _PCATCH(mCVfrDefaultStore.ReRegisterDefaultStoreById (DefaultId, N->getText(), _STOSID(S->getText()))), D->getLine();\r
+                                                         _PCATCH(mCVfrDefaultStore.ReRegisterDefaultStoreById (DefaultId, N->getText(), _STOSID(S->getText(), S->getLine()))), D->getLine();\r
                                                        }\r
                                                     >>\r
   ";"\r
@@ -870,14 +867,14 @@ vfrStatementVarStoreLinear :
   )\r
   { Key "=" FID:Number ","                          << // Key is used to assign Varid in Framework VFR but no use in UEFI2.1 VFR\r
                                                        if (mCompatibleMode) {\r
-                                                         VarStoreId = _STOU16(FID->getText());\r
+                                                         VarStoreId = _STOU16(FID->getText(), FID->getLine());\r
                                                        }\r
                                                     >>\r
   }\r
   {\r
     VarId "=" ID:Number ","                         <<\r
                                                        _PCATCH(\r
-                                                         (INTN)(VarStoreId = _STOU16(ID->getText())) != 0,\r
+                                                         (INTN)(VarStoreId = _STOU16(ID->getText(), ID->getLine())) != 0,\r
                                                          (INTN)TRUE,\r
                                                          ID,\r
                                                          "varid 0 is not allowed."\r
@@ -920,10 +917,11 @@ vfrStatementVarStoreEfi :
      CHAR8           *TypeName;\r
      UINT32          LineNum;\r
      CHAR8           *StoreName = NULL;\r
+     BOOLEAN         CustomizedName = FALSE;\r
   >>\r
   E:Efivarstore                                     << VSEObj.SetLineNo(E->getLine()); >>\r
   (\r
-      TN:StringIdentifier ","                       << TypeName = TN->getText(); LineNum = TN->getLine(); >>\r
+      TN:StringIdentifier ","                       << TypeName = TN->getText(); LineNum = TN->getLine(); CustomizedName = TRUE; >>\r
     | U8:"UINT8" ","                                << TypeName = U8->getText(); LineNum = U8->getLine(); >>\r
     | U16:"UINT16" ","                              << TypeName = U16->getText(); LineNum = U16->getLine(); >>\r
     | C16:"CHAR16" ","                              << TypeName = (CHAR8 *) "UINT16"; LineNum = C16->getLine(); >>\r
@@ -936,7 +934,7 @@ vfrStatementVarStoreEfi :
   {\r
     VarId "=" ID:Number ","                         <<\r
                                                        _PCATCH(\r
-                                                         (INTN)(VarStoreId = _STOU16(ID->getText())) != 0,\r
+                                                         (INTN)(VarStoreId = _STOU16(ID->getText(), ID->getLine())) != 0,\r
                                                          (INTN)TRUE,\r
                                                          ID,\r
                                                          "varid 0 is not allowed."\r
@@ -952,11 +950,15 @@ vfrStatementVarStoreEfi :
     Name    "=" "STRING_TOKEN" "\(" VN:Number "\)" ","  \r
     VarSize "=" N:Number ","                        << \r
                                                        IsUEFI23EfiVarstore = FALSE;\r
-                                                       StoreName = gCVfrStringDB.GetVarStoreNameFormStringId(_STOSID(VN->getText()));\r
+                                                       StoreName = gCVfrStringDB.GetVarStoreNameFormStringId(_STOSID(VN->getText(), VN->getLine()));\r
                                                        if (StoreName == NULL) {\r
                                                          _PCATCH (VFR_RETURN_UNSUPPORTED, VN->getLine(), "Can't get varstore name for this StringId!");\r
                                                        }\r
-                                                       Size = _STOU32(N->getText());\r
+                                                       if (!CustomizedName) {\r
+                                                         _PCATCH (VFR_RETURN_UNSUPPORTED, E->getLine(), "Old style efivarstore must have String Identifier!");\r
+                                                         return;\r
+                                                       }\r
+                                                       Size = _STOU32(N->getText(), N->getLine());\r
                                                        switch (Size) {\r
                                                        case 1:\r
                                                         TypeName = (CHAR8 *) "UINT8";\r
@@ -1012,7 +1014,7 @@ vfrStatementVarStoreEfi :
   ;\r
 \r
 vfrVarStoreEfiAttr [UINT32 & Attr] :\r
-  N:Number                                          << $Attr |= _STOU32(N->getText()); >>\r
+  N:Number                                          << $Attr |= _STOU32(N->getText(), N->getLine()); >>\r
   ;\r
 \r
 vfrStatementVarStoreNameValue :\r
@@ -1027,7 +1029,7 @@ vfrStatementVarStoreNameValue :
   {\r
     VarId "=" ID:Number ","                         <<\r
                                                        _PCATCH(\r
-                                                         (INTN)(VarStoreId = _STOU16(ID->getText())) != 0,\r
+                                                         (INTN)(VarStoreId = _STOU16(ID->getText(), ID->getLine())) != 0,\r
                                                          (INTN)TRUE,\r
                                                          ID,\r
                                                          "varid 0 is not allowed."\r
@@ -1040,7 +1042,7 @@ vfrStatementVarStoreNameValue :
                                                          _PCATCH(mCVfrDataStorage.DeclareNameVarStoreBegin (SN->getText(), VarStoreId), SN);\r
                                                          Created = TRUE;\r
                                                        }\r
-                                                       _PCATCH(mCVfrDataStorage.NameTableAddItem (_STOSID(N->getText())), SN); \r
+                                                       _PCATCH(mCVfrDataStorage.NameTableAddItem (_STOSID(N->getText(), N->getLine())), SN); \r
                                                     >>\r
   )+\r
   Uuid "=" guidDefinition[Guid]                     << _PCATCH(mCVfrDataStorage.DeclareNameVarStoreEnd (&Guid), SN); >>\r
@@ -1069,7 +1071,7 @@ validClassNames[UINT16 & Class] :
   | ClassInputDevice                                << $Class |= EFI_INPUT_DEVICE_CLASS; >>\r
   | ClassOnBoardDevice                              << $Class |= EFI_ON_BOARD_DEVICE_CLASS; >>\r
   | ClassOtherDevice                                << $Class |= EFI_OTHER_DEVICE_CLASS; >>\r
-  | N:Number                                        << $Class |= _STOU16(N->getText()); >>\r
+  | N:Number                                        << $Class |= _STOU16(N->getText(), N->getLine()); >>\r
   ;\r
 \r
 subclassDefinition[UINT16 & SubClass] :\r
@@ -1078,7 +1080,7 @@ subclassDefinition[UINT16 & SubClass] :
   | SubclassGeneralApplication                      << $SubClass |= EFI_GENERAL_APPLICATION_SUBCLASS; >>\r
   | SubclassFrontPage                               << $SubClass |= EFI_FRONT_PAGE_SUBCLASS; >>\r
   | SubclassSingleUse                               << $SubClass |= EFI_SINGLE_USE_SUBCLASS; >>\r
-  | N:Number                                        << $SubClass |= _STOU16(N->getText()); >>\r
+  | N:Number                                        << $SubClass |= _STOU16(N->getText(), N->getLine()); >>\r
   ;\r
 \r
 vfrStatementDisableIfFormSet :\r
@@ -1113,8 +1115,8 @@ vfrStatementSuppressIfFormSet :
 // the syntax of question header and statement header\r
 //\r
 vfrStatementHeader[CIfrStatementHeader *SHObj] :\r
-  Prompt "=" "STRING_TOKEN" "\(" S1:Number "\)" "," << $SHObj->SetPrompt (_STOSID(S1->getText())); >>\r
-  Help   "=" "STRING_TOKEN" "\(" S2:Number "\)"     << $SHObj->SetHelp (_STOSID(S2->getText())); >>\r
+  Prompt "=" "STRING_TOKEN" "\(" S1:Number "\)" "," << $SHObj->SetPrompt (_STOSID(S1->getText(), S1->getLine())); >>\r
+  Help   "=" "STRING_TOKEN" "\(" S2:Number "\)"     << $SHObj->SetHelp (_STOSID(S2->getText(), S2->getLine())); >>\r
   ;\r
 \r
 vfrQuestionHeader[CIfrQuestionHeader & QHObj, EFI_QUESION_TYPE QType = QUESTION_NORMAL]:\r
@@ -1138,7 +1140,7 @@ vfrQuestionHeader[CIfrQuestionHeader & QHObj, EFI_QUESION_TYPE QType = QUESTION_
   { V:VarId "=" vfrStorageVarId[Info, VarIdStr] "," }\r
   {\r
     QuestionId "=" ID:Number ","                    <<\r
-                                                       QId = _STOQID(ID->getText());\r
+                                                       QId = _STOQID(ID->getText(), ID->getLine());\r
                                                        _PCATCH(mCVfrQuestionDB.FindQuestion (QId), VFR_RETURN_UNDEFINED, ID, "has already been used please assign another number");\r
                                                     >>\r
   }\r
@@ -1184,9 +1186,35 @@ questionheaderFlagsField[UINT8 & Flags] :
     ReadOnlyFlag                                    << $Flags |= 0x01; >>\r
   | InteractiveFlag                                 << $Flags |= 0x04; >>\r
   | ResetRequiredFlag                               << $Flags |= 0x10; >>\r
-  | OptionOnlyFlag                                  << $Flags |= 0x80; >>\r
-  | NVAccessFlag\r
-  | LateCheckFlag\r
+  | O:OptionOnlyFlag                                << \r
+                                                       if (mCompatibleMode) {\r
+                                                         $Flags |= 0x80;\r
+                                                       } else {\r
+                                                         gCVfrErrorHandle.HandleWarning (\r
+                                                            VFR_WARNING_OBSOLETED_FRAMEWORK_OPCODE,\r
+                                                            O->getLine(),\r
+                                                            O->getText()\r
+                                                            );\r
+                                                       }\r
+                                                    >>\r
+  | N:NVAccessFlag                                  << \r
+                                                       if (!mCompatibleMode) {\r
+                                                          gCVfrErrorHandle.HandleWarning (\r
+                                                            VFR_WARNING_OBSOLETED_FRAMEWORK_OPCODE,\r
+                                                            N->getLine(),\r
+                                                            N->getText()\r
+                                                            );\r
+                                                       }\r
+                                                    >>\r
+  | L:LateCheckFlag                                 << \r
+                                                       if (!mCompatibleMode) {\r
+                                                          gCVfrErrorHandle.HandleWarning (\r
+                                                            VFR_WARNING_OBSOLETED_FRAMEWORK_OPCODE,\r
+                                                            L->getLine(),\r
+                                                            L->getText()\r
+                                                            );\r
+                                                       }\r
+                                                    >>\r
   ;\r
 \r
 vfrStorageVarId[EFI_VARSTORE_INFO & Info, CHAR8 *&QuestVarIdStr, BOOLEAN CheckFlag = TRUE] :\r
@@ -1205,7 +1233,7 @@ vfrStorageVarId[EFI_VARSTORE_INFO & Info, CHAR8 *&QuestVarIdStr, BOOLEAN CheckFl
   (\r
     SN1:StringIdentifier                            << SName = SN1->getText(); _STRCAT(&VarIdStr, SN1->getText()); >>\r
     OpenBracket I1:Number CloseBracket              <<\r
-                                                       Idx = _STOU32(I1->getText());\r
+                                                       Idx = _STOU32(I1->getText(), I1->getLine());\r
                                                        _STRCAT(&VarIdStr, "[");\r
                                                        _STRCAT(&VarIdStr, I1->getText());\r
                                                        _STRCAT(&VarIdStr, "]");\r
@@ -1267,7 +1295,7 @@ vfrStorageVarId[EFI_VARSTORE_INFO & Info, CHAR8 *&QuestVarIdStr, BOOLEAN CheckFl
       SF:StringIdentifier                           << _STRCAT(&VarIdStr, SF->getText()); _STRCAT(&VarStr, SF->getText()); >>\r
       {\r
         OpenBracket I2:Number CloseBracket          <<\r
-                                                       Idx = _STOU32(I2->getText());\r
+                                                       Idx = _STOU32(I2->getText(), I2->getLine());\r
                                                        if (mCompatibleMode) Idx --;\r
                                                        if (Idx > 0) {\r
                                                          //\r
@@ -1347,7 +1375,7 @@ vfrQuestionDataFieldName [EFI_QUESTION_ID &QId, UINT32 &Mask, CHAR8 *&VarIdStr,
       SF:StringIdentifier                           << _STRCAT (&VarIdStr, SF->getText()); >>\r
       {\r
         OpenBracket I2:Number CloseBracket          <<\r
-                                                       Idx = _STOU32(I2->getText());\r
+                                                       Idx = _STOU32(I2->getText(), I2->getLine());\r
                                                        if (mCompatibleMode) Idx --;\r
                                                        if (Idx > 0) {\r
                                                          //\r
@@ -1372,22 +1400,22 @@ vfrConstantValueField[UINT8 Type] > [EFI_IFR_TYPE_VALUE Value] :
     N1:Number                                       <<\r
                                                        switch ($Type) {\r
                                                        case EFI_IFR_TYPE_NUM_SIZE_8 :\r
-                                                         $Value.u8     = _STOU8(N1->getText());\r
+                                                         $Value.u8     = _STOU8(N1->getText(), N1->getLine());\r
                                                        break;\r
                                                        case EFI_IFR_TYPE_NUM_SIZE_16 :\r
-                                                         $Value.u16    = _STOU16(N1->getText());\r
+                                                         $Value.u16    = _STOU16(N1->getText(), N1->getLine());\r
                                                        break;\r
                                                        case EFI_IFR_TYPE_NUM_SIZE_32 :\r
-                                                         $Value.u32    = _STOU32(N1->getText());\r
+                                                         $Value.u32    = _STOU32(N1->getText(), N1->getLine());\r
                                                        break;\r
                                                        case EFI_IFR_TYPE_NUM_SIZE_64 :\r
-                                                         $Value.u64    = _STOU64(N1->getText());\r
+                                                         $Value.u64    = _STOU64(N1->getText(), N1->getLine());\r
                                                        break;\r
                                                        case EFI_IFR_TYPE_BOOLEAN :\r
-                                                         $Value.b      = _STOU8(N1->getText());\r
+                                                         $Value.b      = _STOU8(N1->getText(), N1->getLine());\r
                                                        break;\r
                                                        case EFI_IFR_TYPE_STRING :\r
-                                                         $Value.string = _STOU16(N1->getText());\r
+                                                         $Value.string = _STOU16(N1->getText(), N1->getLine());\r
                                                        break;\r
                                                        case EFI_IFR_TYPE_TIME :\r
                                                        case EFI_IFR_TYPE_DATE :\r
@@ -1398,14 +1426,14 @@ vfrConstantValueField[UINT8 Type] > [EFI_IFR_TYPE_VALUE Value] :
                                                     >>\r
   | B1:True                                         << $Value.b      = TRUE; >>\r
   | B2:False                                        << $Value.b      = FALSE; >>\r
-  | O1:One                                          << $Value.u8     = _STOU8(O1->getText()); >>\r
-  | O2:Ones                                         << $Value.u64    = _STOU64(O2->getText()); >>\r
-  | Z:Zero                                          << $Value.u8     = _STOU8(Z->getText()); >>\r
-  | HOUR:Number ":" MINUTE:Number ":" SECOND:Number << $Value.time   = _STOT(HOUR->getText(), MINUTE->getText(), SECOND->getText()); >>\r
-  | YEAR:Number "/" MONTH:Number "/" DAY:Number     << $Value.date   = _STOD(YEAR->getText(), MONTH->getText(), DAY->getText()); >>\r
+  | O1:One                                          << $Value.u8     = _STOU8(O1->getText(), O1->getLine()); >>\r
+  | O2:Ones                                         << $Value.u64    = _STOU64(O2->getText(), O2->getLine()); >>\r
+  | Z:Zero                                          << $Value.u8     = _STOU8(Z->getText(), Z->getLine()); >>\r
+  | HOUR:Number ":" MINUTE:Number ":" SECOND:Number << $Value.time   = _STOT(HOUR->getText(), MINUTE->getText(),SECOND->getText(), HOUR->getLine()); >>\r
+  | YEAR:Number "/" MONTH:Number "/" DAY:Number     << $Value.date   = _STOD(YEAR->getText(), MONTH->getText(), DAY->getText(), YEAR->getLine()); >>\r
   | QI:Number";" FI:Number";" guidDefinition[Guid] ";" "STRING_TOKEN" "\(" DP:Number "\)" \r
-                                                    << $Value.ref    = _STOR(QI->getText(), FI->getText(), &Guid, DP->getText()); >>\r
-  | "STRING_TOKEN" "\(" S1:Number "\)"              << $Value.string = _STOSID(S1->getText()); >>\r
+                                                    << $Value.ref    = _STOR(QI->getText(), FI->getText(), &Guid, DP->getText(), QI->getLine()); >>\r
+  | "STRING_TOKEN" "\(" S1:Number "\)"              << $Value.string = _STOSID(S1->getText(), S1->getLine()); >>\r
   ;\r
 \r
 //*****************************************************************************\r
@@ -1415,8 +1443,8 @@ vfrConstantValueField[UINT8 Type] > [EFI_IFR_TYPE_VALUE Value] :
 vfrFormDefinition :\r
   << CIfrForm FObj; >>\r
   F:Form                                            << FObj.SetLineNo(F->getLine()); >>\r
-  FormId "=" S1:Number ","                          << _PCATCH(FObj.SetFormId (_STOFID(S1->getText())), S1); >>\r
-  Title "=" "STRING_TOKEN" "\(" S2:Number "\)" ";"  << FObj.SetFormTitle (_STOSID(S2->getText())); >>\r
+  FormId "=" S1:Number ","                          << _PCATCH(FObj.SetFormId (_STOFID(S1->getText(), S1->getLine())), S1); >>\r
+  Title "=" "STRING_TOKEN" "\(" S2:Number "\)" ";"  << FObj.SetFormTitle (_STOSID(S2->getText(), S2->getLine())); >>\r
   (\r
     vfrStatementImage                        |\r
     vfrStatementLocked                       |\r
@@ -1430,7 +1458,8 @@ vfrFormDefinition :
     // Just for framework vfr compatibility\r
     vfrStatementInvalid                      |\r
     vfrStatementExtension                    |\r
-    vfrStatementModal\r
+    vfrStatementModal                        |\r
+    vfrStatementRefreshEvent ";"\r
   )*\r
   E:EndForm                                         <<\r
                                                       if (mCompatibleMode) {\r
@@ -1460,10 +1489,10 @@ vfrFormMapDefinition :
     EFI_GUID    Guid;\r
   >>\r
   F:FormMap                                         << FMapObj = new CIfrFormMap(); FMapObj->SetLineNo(F->getLine()); >>\r
-  FormId "=" S1:Number ","                          << _PCATCH(FMapObj->SetFormId (_STOFID(S1->getText())), S1); >>\r
+  FormId "=" S1:Number ","                          << _PCATCH(FMapObj->SetFormId (_STOFID(S1->getText(), S1->getLine())), S1); >>\r
   (\r
     MapTitle "=" "STRING_TOKEN" "\(" S2:Number "\)" ";"\r
-    MapGuid  "=" guidDefinition[Guid] ";"           << FMapObj->SetFormMapMethod (_STOFID(S2->getText()), &Guid); FormMapMethodNumber ++; >>\r
+    MapGuid  "=" guidDefinition[Guid] ";"           << FMapObj->SetFormMapMethod (_STOFID(S2->getText(), S2->getLine()), &Guid); FormMapMethodNumber ++; >>\r
   )*                                                << if (FormMapMethodNumber == 0) {_PCATCH (VFR_RETURN_INVALID_PARAMETER, F->getLine(), "No MapMethod is set for FormMap!");} delete FMapObj;>>\r
   (\r
     vfrStatementImage                        |\r
@@ -1476,7 +1505,8 @@ vfrFormMapDefinition :
     vfrStatementLabel                        |\r
     vfrStatementBanner                       |\r
     vfrStatementExtension                    |\r
-    vfrStatementModal\r
+    vfrStatementModal                        |\r
+    vfrStatementRefreshEvent ";"\r
   )*\r
   E:EndForm                                         << CRT_END_OP (E); >>\r
   ";"\r
@@ -1617,8 +1647,29 @@ vfrStatementInvalid :
   ;\r
 \r
 flagsField :\r
-  Number | InteractiveFlag | ManufacturingFlag | DefaultFlag |\r
-  NVAccessFlag | ResetRequiredFlag | LateCheckFlag\r
+  Number \r
+  | InteractiveFlag \r
+  | ManufacturingFlag \r
+  | DefaultFlag \r
+  | ResetRequiredFlag \r
+  | N:NVAccessFlag                                     << \r
+                                                          if (!mCompatibleMode) {\r
+                                                            gCVfrErrorHandle.HandleWarning (\r
+                                                              VFR_WARNING_OBSOLETED_FRAMEWORK_OPCODE,\r
+                                                              N->getLine(),\r
+                                                              N->getText()\r
+                                                              );\r
+                                                          }\r
+                                                       >>\r
+  | L:LateCheckFlag                                    << \r
+                                                          if (!mCompatibleMode) {\r
+                                                            gCVfrErrorHandle.HandleWarning (\r
+                                                              VFR_WARNING_OBSOLETED_FRAMEWORK_OPCODE,\r
+                                                              L->getLine(),\r
+                                                              L->getText()\r
+                                                              );\r
+                                                          }\r
+                                                       >> \r
   ;\r
 \r
 vfrStatementValue :\r
@@ -1642,7 +1693,7 @@ vfrStatementWrite :
 vfrStatementSubTitle :\r
   << CIfrSubtitle SObj; >>\r
   L:Subtitle                                           << SObj.SetLineNo(L->getLine()); >>\r
-  Text "=" "STRING_TOKEN" "\(" S:Number "\)"           << SObj.SetPrompt (_STOSID(S->getText())); >>\r
+  Text "=" "STRING_TOKEN" "\(" S:Number "\)"           << SObj.SetPrompt (_STOSID(S->getText(), S->getLine())); >>\r
   {\r
     "," FLAGS "=" vfrSubtitleFlags[SObj]\r
   }\r
@@ -1652,7 +1703,7 @@ vfrStatementSubTitle :
   |\r
     { "," vfrStatementStatTagList}\r
     { "," (vfrStatementStat | vfrStatementQuestions)*}\r
-    E: EndSubtitle ";"                                  << CRT_END_OP (E); >>\r
+    D: EndSubtitle ";"                                  << CRT_END_OP (D); >>\r
   )\r
   ;\r
 \r
@@ -1663,7 +1714,7 @@ vfrSubtitleFlags [CIfrSubtitle & SObj] :
   ;\r
 \r
 subtitleFlagsField [UINT8 & Flags] :\r
-    N:Number                                           << $Flags |= _STOU8(N->getText()); >>\r
+    N:Number                                           << $Flags |= _STOU8(N->getText(), N->getLine()); >>\r
   | "HORIZONTAL"                                       << $Flags |= 0x01; >>\r
   ;\r
 \r
@@ -1677,7 +1728,7 @@ vfrStatementStaticText :
   Help "=" "STRING_TOKEN" "\(" S1:Number "\)" ","\r
   Text "=" "STRING_TOKEN" "\(" S2:Number "\)"\r
   {\r
-    "," Text "=" "STRING_TOKEN" "\(" S3:Number "\)"    << TxtTwo = _STOSID(S3->getText()); >>\r
+    "," Text "=" "STRING_TOKEN" "\(" S3:Number "\)"    << TxtTwo = _STOSID(S3->getText(), S3->getLine()); >>\r
   }\r
   {\r
     "," F:FLAGS "=" staticTextFlagsField[Flags] ( "\|" staticTextFlagsField[Flags] )*\r
@@ -1685,20 +1736,27 @@ vfrStatementStaticText :
   }\r
                                                        <<\r
                                                           if (Flags & EFI_IFR_FLAG_CALLBACK) {\r
+                                                            if (TxtTwo != EFI_STRING_ID_INVALID) {\r
+                                                              gCVfrErrorHandle.HandleWarning (\r
+                                                                                VFR_WARNING_ACTION_WITH_TEXT_TWO,\r
+                                                                                S3->getLine(),\r
+                                                                                S3->getText()\r
+                                                                                );\r
+                                                            }\r
                                                             CIfrAction AObj;\r
                                                             mCVfrQuestionDB.RegisterQuestion (NULL, NULL, QId);\r
                                                             AObj.SetLineNo (F->getLine());\r
                                                             AObj.SetQuestionId (QId);\r
-                                                            AObj.SetPrompt (_STOSID(S2->getText()));\r
-                                                            AObj.SetHelp (_STOSID(S1->getText()));\r
+                                                            AObj.SetPrompt (_STOSID(S2->getText(), S2->getLine()));\r
+                                                            AObj.SetHelp (_STOSID(S1->getText(), S1->getLine()));\r
                                                             _PCATCH(AObj.SetFlags (Flags), F->getLine());\r
                                                             AssignQuestionKey (AObj, KN);\r
                                                             CRT_END_OP (KN);\r
                                                           } else {\r
                                                             CIfrText TObj;\r
                                                             TObj.SetLineNo (T->getLine());\r
-                                                            TObj.SetHelp (_STOSID(S1->getText()));\r
-                                                            TObj.SetPrompt (_STOSID(S2->getText()));\r
+                                                            TObj.SetHelp (_STOSID(S1->getText(), S1->getLine()));\r
+                                                            TObj.SetPrompt (_STOSID(S2->getText(), S2->getLine()));\r
                                                             TObj.SetTextTwo (TxtTwo);\r
                                                           }\r
                                                        >>\r
@@ -1707,7 +1765,7 @@ vfrStatementStaticText :
   ;\r
 \r
 staticTextFlagsField[UINT8 & HFlags] :\r
-    N:Number                                           << _PCATCH(_STOU8(N->getText()) == 0 ? VFR_RETURN_SUCCESS : VFR_RETURN_UNSUPPORTED, N->getLine()); >>\r
+    N:Number                                           << _PCATCH(_STOU8(N->getText(), N->getLine()) == 0 ? VFR_RETURN_SUCCESS : VFR_RETURN_UNSUPPORTED, N->getLine()); >>\r
   | questionheaderFlagsField[HFlags]\r
   ;\r
 \r
@@ -1741,9 +1799,9 @@ vfrStatementGoto :
       Question "=" QN1:Number ","\r
                                                        <<\r
                                                           RefType = 4;\r
-                                                          DevPath = _STOSID(P->getText());\r
-                                                          FId = _STOFID(F1->getText());\r
-                                                          QId = _STOQID(QN1->getText());\r
+                                                          DevPath = _STOSID(P->getText(), P->getLine());\r
+                                                          FId = _STOFID(F1->getText(), F1->getLine());\r
+                                                          QId = _STOQID(QN1->getText(), QN1->getLine());\r
                                                        >>\r
     )\r
     |\r
@@ -1753,13 +1811,13 @@ vfrStatementGoto :
       Question "=" QN2:Number ","\r
                                                        <<\r
                                                           RefType = 3;\r
-                                                          FId = _STOFID(F2->getText());\r
-                                                          QId = _STOQID(QN2->getText());\r
+                                                          FId = _STOFID(F2->getText(), F2->getLine());\r
+                                                          QId = _STOQID(QN2->getText(), QN2->getLine());\r
                                                        >>\r
     )\r
     |\r
     (\r
-      FormId "=" F3:Number ","                         << RefType = 2; FId = _STOFID(F3->getText()); >>\r
+      FormId "=" F3:Number ","                         << RefType = 2; FId = _STOFID(F3->getText(), F3->getLine()); >>\r
       Question "="\r
       (\r
           QN3:StringIdentifier ","                     << \r
@@ -1768,14 +1826,14 @@ vfrStatementGoto :
                                                             _PCATCH(VFR_RETURN_UNDEFINED, QN3);\r
                                                           }\r
                                                        >>\r
-        | QN4:Number ","                               << QId = _STOQID(QN4->getText()); >>\r
+        | QN4:Number ","                               << QId = _STOQID(QN4->getText(), QN4->getLine()); >>\r
       )\r
     )\r
     |\r
     (\r
       F4:Number ","                                    <<\r
                                                           RefType = 1;\r
-                                                          FId = _STOFID(F4->getText());\r
+                                                          FId = _STOFID(F4->getText(), F4->getLine());\r
                                                        >>\r
     )\r
   }\r
@@ -1857,7 +1915,7 @@ vfrGotoFlags [CIfrQuestionHeader *QHObj, UINT32 LineNum] :
   ;\r
 \r
 gotoFlagsField[UINT8 & HFlags] :\r
-    N:Number                                           << _PCATCH(_STOU8(N->getText()) == 0 ? VFR_RETURN_SUCCESS : VFR_RETURN_UNSUPPORTED, N->getLine()); >>\r
+    N:Number                                           << _PCATCH(_STOU8(N->getText(), N->getLine()) == 0 ? VFR_RETURN_SUCCESS : VFR_RETURN_UNSUPPORTED, N->getLine()); >>\r
   | questionheaderFlagsField[HFlags]\r
   ;\r
 \r
@@ -1989,9 +2047,9 @@ checkboxFlagsField[UINT8 & LFlags, UINT8 & HFlags] :
                                                             //\r
                                                             // set question flag\r
                                                             //\r
-                                                            $LFlags |= _STOU8(N->getText());\r
+                                                            $LFlags |= _STOU8(N->getText(), N->getLine());\r
                                                           } else {\r
-                                                            _PCATCH(_STOU8(N->getText()) == 0 ? VFR_RETURN_SUCCESS : VFR_RETURN_UNSUPPORTED, N->getLine());\r
+                                                            _PCATCH(_STOU8(N->getText(), N->getLine()) == 0 ? VFR_RETURN_SUCCESS : VFR_RETURN_UNSUPPORTED, N->getLine());\r
                                                           }\r
                                                        >>\r
   | D:"DEFAULT"                                        <<\r
@@ -2035,7 +2093,7 @@ vfrStatementAction :
   L:Action                                             << AObj.SetLineNo(L->getLine()); >>\r
   vfrQuestionHeader[AObj] ","\r
   { F:FLAGS "=" vfrActionFlags[AObj, F->getLine()] "," }\r
-  Config "=" "STRING_TOKEN" "\(" S:Number "\)" ","     << AObj.SetQuestionConfig (_STOSID(S->getText())); >>\r
+  Config "=" "STRING_TOKEN" "\(" S:Number "\)" ","     << AObj.SetQuestionConfig (_STOSID(S->getText(), S->getLine())); >>\r
   vfrStatementQuestionTagList\r
   E:EndAction                                          << CRT_END_OP (E); >>\r
   ";"\r
@@ -2048,7 +2106,7 @@ vfrActionFlags[CIfrAction & AObj, UINT32 LineNum] :
   ;\r
 \r
 actionFlagsField[UINT8 & HFlags] :\r
-    N:Number                                           << _PCATCH(_STOU8(N->getText()) == 0 ? VFR_RETURN_SUCCESS : VFR_RETURN_UNSUPPORTED, N->getLine()); >>\r
+    N:Number                                           << _PCATCH(_STOU8(N->getText(), N->getLine()) == 0 ? VFR_RETURN_SUCCESS : VFR_RETURN_UNSUPPORTED, N->getLine()); >>\r
   | questionheaderFlagsField[HFlags]\r
   ;\r
 \r
@@ -2095,8 +2153,8 @@ vfrStatementDate :
                                                           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
+                                                          DObj.SetPrompt (_STOSID(YP->getText(), YP->getLine()));\r
+                                                          DObj.SetHelp (_STOSID(YH->getText(), YH->getLine()));\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 DefaultObj(Size, EFI_HII_DEFAULT_CLASS_STANDARD, EFI_IFR_TYPE_DATE, Val); DefaultObj.SetLineNo(L->getLine());} >>\r
@@ -2115,19 +2173,19 @@ minMaxDateStepDefault[EFI_HII_DATE & D, UINT8 KeyValue] :
     "default" "=" N:Number ","                         <<\r
                                                           switch (KeyValue) {\r
                                                           case 0: \r
-                                                            D.Year  = _STOU16(N->getText());\r
-                                                            if (D.Year < _STOU16 (MinN->getText()) || D.Year > _STOU16 (MaxN->getText())) {\r
+                                                            D.Year  = _STOU16(N->getText(), N->getLine());\r
+                                                            if (D.Year < _STOU16 (MinN->getText(), MinN->getLine()) || D.Year > _STOU16 (MaxN->getText(), MaxN->getLine())) {\r
                                                               _PCATCH (VFR_RETURN_INVALID_PARAMETER, N->getLine(), "Year default value must be between Min year and Max year.");\r
                                                             }\r
                                                             break;\r
                                                           case 1: \r
-                                                            D.Month = _STOU8(N->getText()); \r
+                                                            D.Month = _STOU8(N->getText(), N->getLine()); \r
                                                             if (D.Month < 1 || D.Month > 12) {\r
                                                               _PCATCH (VFR_RETURN_INVALID_PARAMETER, N->getLine(), "Month default value must be between 1 and 12.");\r
                                                             }\r
                                                             break;\r
                                                           case 2: \r
-                                                            D.Day = _STOU8(N->getText()); \r
+                                                            D.Day = _STOU8(N->getText(), N->getLine()); \r
                                                             if (D.Day < 1 || D.Day > 31) {\r
                                                               _PCATCH (VFR_RETURN_INVALID_PARAMETER, N->getLine(), "Day default value must be between 1 and 31.");\r
                                                             }\r
@@ -2144,7 +2202,7 @@ vfrDateFlags [CIfrDate & DObj, UINT32 LineNum] :
   ;\r
 \r
 dateFlagsField [UINT8 & Flags] :\r
-    N:Number                                           << $Flags |= _STOU8(N->getText()); >>\r
+    N:Number                                           << $Flags |= _STOU8(N->getText(), N->getLine()); >>\r
   | "YEAR_SUPPRESS"                                    << $Flags |= 0x01; >>\r
   | "MONTH_SUPPRESS"                                   << $Flags |= 0x02; >>\r
   | "DAY_SUPPRESS"                                     << $Flags |= 0x04; >>\r
@@ -2168,35 +2226,35 @@ vfrSetMinMaxStep[CIfrMinMaxStepData & MMSDObj] :
   Minimum   "=" I:Number ","\r
                                                        <<\r
                                                           switch (_GET_CURRQEST_DATATYPE()) {\r
-                                                          case EFI_IFR_TYPE_NUM_SIZE_64 : MinU8 = _STOU64(I->getText()); break;\r
-                                                          case EFI_IFR_TYPE_NUM_SIZE_32 : MinU4 = _STOU32(I->getText()); break;\r
-                                                          case EFI_IFR_TYPE_NUM_SIZE_16 : MinU2 = _STOU16(I->getText()); break;\r
-                                                          case EFI_IFR_TYPE_NUM_SIZE_8 :  MinU1 = _STOU8(I->getText());  break;\r
+                                                          case EFI_IFR_TYPE_NUM_SIZE_64 : MinU8 = _STOU64(I->getText(), I->getLine()); break;\r
+                                                          case EFI_IFR_TYPE_NUM_SIZE_32 : MinU4 = _STOU32(I->getText(), I->getLine()); break;\r
+                                                          case EFI_IFR_TYPE_NUM_SIZE_16 : MinU2 = _STOU16(I->getText(), I->getLine()); break;\r
+                                                          case EFI_IFR_TYPE_NUM_SIZE_8 :  MinU1 = _STOU8(I->getText(), I->getLine());  break;\r
                                                           }\r
                                                        >>\r
   Maximum   "=" A:Number ","\r
                                                        <<\r
                                                           switch (_GET_CURRQEST_DATATYPE()) {\r
                                                           case EFI_IFR_TYPE_NUM_SIZE_64 : \r
-                                                            MaxU8 = _STOU64(A->getText()); \r
+                                                            MaxU8 = _STOU64(A->getText(), A->getLine()); \r
                                                             if (MaxU8 < MinU8) {\r
                                                               _PCATCH (VFR_RETURN_INVALID_PARAMETER, A->getLine(), "Maximum can't be less than Minimum");\r
                                                             }\r
                                                             break;\r
                                                           case EFI_IFR_TYPE_NUM_SIZE_32 : \r
-                                                            MaxU4 = _STOU32(A->getText()); \r
+                                                            MaxU4 = _STOU32(A->getText(), A->getLine()); \r
                                                             if (MaxU4 < MinU4) {\r
                                                               _PCATCH (VFR_RETURN_INVALID_PARAMETER, A->getLine(), "Maximum can't be less than Minimum");\r
                                                             }\r
                                                             break;\r
                                                           case EFI_IFR_TYPE_NUM_SIZE_16 : \r
-                                                            MaxU2 = _STOU16(A->getText()); \r
+                                                            MaxU2 = _STOU16(A->getText(), A->getLine()); \r
                                                             if (MaxU2 < MinU2) {\r
                                                               _PCATCH (VFR_RETURN_INVALID_PARAMETER, A->getLine(), "Maximum can't be less than Minimum");\r
                                                             }\r
                                                             break;\r
                                                           case EFI_IFR_TYPE_NUM_SIZE_8 :  \r
-                                                            MaxU1 = _STOU8(A->getText());  \r
+                                                            MaxU1 = _STOU8(A->getText(), A->getLine());  \r
                                                             if (MaxU1 < MinU1) {\r
                                                               _PCATCH (VFR_RETURN_INVALID_PARAMETER, A->getLine(), "Maximum can't be less than Minimum");\r
                                                             }\r
@@ -2207,10 +2265,10 @@ vfrSetMinMaxStep[CIfrMinMaxStepData & MMSDObj] :
     STEP    "=" S:Number ","\r
                                                        <<\r
                                                           switch (_GET_CURRQEST_DATATYPE()) {\r
-                                                          case EFI_IFR_TYPE_NUM_SIZE_64 : StepU8 = _STOU64(S->getText()); break;\r
-                                                          case EFI_IFR_TYPE_NUM_SIZE_32 : StepU4 = _STOU32(S->getText()); break;\r
-                                                          case EFI_IFR_TYPE_NUM_SIZE_16 : StepU2 = _STOU16(S->getText()); break;\r
-                                                          case EFI_IFR_TYPE_NUM_SIZE_8 :  StepU1 = _STOU8(S->getText());  break;\r
+                                                          case EFI_IFR_TYPE_NUM_SIZE_64 : StepU8 = _STOU64(S->getText(), S->getLine()); break;\r
+                                                          case EFI_IFR_TYPE_NUM_SIZE_32 : StepU4 = _STOU32(S->getText(), S->getLine()); break;\r
+                                                          case EFI_IFR_TYPE_NUM_SIZE_16 : StepU2 = _STOU16(S->getText(), S->getLine()); break;\r
+                                                          case EFI_IFR_TYPE_NUM_SIZE_8 :  StepU1 = _STOU8(S->getText(), S->getLine());  break;\r
                                                           }\r
                                                        >>\r
   }\r
@@ -2277,8 +2335,9 @@ vfrNumericFlags [CIfrNumeric & NObj, UINT32 LineNum] :
      UINT8 HFlags = 0;\r
      EFI_VFR_VARSTORE_TYPE VarStoreType = EFI_VFR_VARSTORE_INVALID;\r
      BOOLEAN IsSetType = FALSE;\r
+     BOOLEAN IsDisplaySpecified = FALSE;\r
   >>\r
-  numericFlagsField[HFlags, LFlags, IsSetType] ( "\|" numericFlagsField[HFlags, LFlags, IsSetType] )*\r
+  numericFlagsField[HFlags, LFlags, IsSetType, IsDisplaySpecified] ( "\|" numericFlagsField[HFlags, LFlags, IsSetType, IsDisplaySpecified ] )*\r
                                                        <<\r
                                                           //check data type flag\r
                                                           if (_GET_CURRQEST_VARTINFO().mVarStoreId != EFI_VARSTORE_ID_INVALID) {\r
@@ -2297,19 +2356,19 @@ vfrNumericFlags [CIfrNumeric & NObj, UINT32 LineNum] :
                                                           } else if (IsSetType){\r
                                                             _GET_CURRQEST_VARTINFO().mVarType = LFlags & EFI_IFR_NUMERIC_SIZE;\r
                                                           }\r
-                                                          _PCATCH(NObj.SetFlags (HFlags, LFlags), LineNum);\r
+                                                          _PCATCH(NObj.SetFlags (HFlags, LFlags, IsDisplaySpecified), LineNum);\r
                                                        >>\r
   ;\r
 \r
-numericFlagsField [UINT8 & HFlags, UINT8 & LFlags, BOOLEAN & IsSetType] :\r
-    N:Number                                           << _PCATCH(_STOU8(N->getText()) == 0 ? VFR_RETURN_SUCCESS : VFR_RETURN_UNSUPPORTED, N->getLine()); >>\r
+numericFlagsField [UINT8 & HFlags, UINT8 & LFlags, BOOLEAN & IsSetType, BOOLEAN & IsDisplaySpecified] :\r
+    N:Number                                           << _PCATCH(_STOU8(N->getText(), N->getLine()) == 0 ? VFR_RETURN_SUCCESS : VFR_RETURN_UNSUPPORTED, N->getLine()); >>\r
   | "NUMERIC_SIZE_1"                                   << $LFlags = ($LFlags & ~EFI_IFR_NUMERIC_SIZE) | EFI_IFR_NUMERIC_SIZE_1; IsSetType = TRUE;>>\r
   | "NUMERIC_SIZE_2"                                   << $LFlags = ($LFlags & ~EFI_IFR_NUMERIC_SIZE) | EFI_IFR_NUMERIC_SIZE_2; IsSetType = TRUE;>>\r
   | "NUMERIC_SIZE_4"                                   << $LFlags = ($LFlags & ~EFI_IFR_NUMERIC_SIZE) | EFI_IFR_NUMERIC_SIZE_4; IsSetType = TRUE;>>\r
   | "NUMERIC_SIZE_8"                                   << $LFlags = ($LFlags & ~EFI_IFR_NUMERIC_SIZE) | EFI_IFR_NUMERIC_SIZE_8; IsSetType = TRUE;>>\r
-  | "DISPLAY_INT_DEC"                                  << $LFlags = ($LFlags & ~EFI_IFR_DISPLAY) | EFI_IFR_DISPLAY_INT_DEC; >>\r
-  | "DISPLAY_UINT_DEC"                                 << $LFlags = ($LFlags & ~EFI_IFR_DISPLAY) | EFI_IFR_DISPLAY_UINT_DEC; >>\r
-  | "DISPLAY_UINT_HEX"                                 << $LFlags = ($LFlags & ~EFI_IFR_DISPLAY) | EFI_IFR_DISPLAY_UINT_HEX; >>\r
+  | "DISPLAY_INT_DEC"                                  << $LFlags = ($LFlags & ~EFI_IFR_DISPLAY) | EFI_IFR_DISPLAY_INT_DEC; IsDisplaySpecified = TRUE;>>\r
+  | "DISPLAY_UINT_DEC"                                 << $LFlags = ($LFlags & ~EFI_IFR_DISPLAY) | EFI_IFR_DISPLAY_UINT_DEC; IsDisplaySpecified = TRUE;>>\r
+  | "DISPLAY_UINT_HEX"                                 << $LFlags = ($LFlags & ~EFI_IFR_DISPLAY) | EFI_IFR_DISPLAY_UINT_HEX; IsDisplaySpecified = TRUE;>>\r
   | questionheaderFlagsField[HFlags]\r
   ;\r
 \r
@@ -2366,8 +2425,9 @@ vfrOneofFlagsField [CIfrOneOf & OObj, UINT32 LineNum] :
      UINT8 HFlags = 0;\r
      EFI_VFR_VARSTORE_TYPE VarStoreType = EFI_VFR_VARSTORE_INVALID;\r
      BOOLEAN IsSetType = FALSE;\r
+     BOOLEAN IsDisplaySpecified = FALSE;\r
   >>\r
-  numericFlagsField[HFlags, LFlags, IsSetType] ( "\|" numericFlagsField[HFlags, LFlags, IsSetType] )*\r
+  numericFlagsField[HFlags, LFlags, IsSetType, IsDisplaySpecified] ( "\|" numericFlagsField[HFlags, LFlags, IsSetType, IsDisplaySpecified] )*\r
                                                        <<\r
                                                           //check data type flag\r
                                                           if (_GET_CURRQEST_VARTINFO().mVarStoreId != EFI_VARSTORE_ID_INVALID) {\r
@@ -2410,8 +2470,8 @@ vfrStatementString :
   }\r
   MinSize "=" MIN:Number ","                           << \r
                                                           VarArraySize = _GET_CURRQEST_ARRAY_SIZE();\r
-                                                          StringMinSize = _STOU8(MIN->getText());\r
-                                                          if (_STOU64(MIN->getText()) > StringMinSize) {\r
+                                                          StringMinSize = _STOU8(MIN->getText(), MIN->getLine());\r
+                                                          if (_STOU64(MIN->getText(), MIN->getLine()) > StringMinSize) {\r
                                                             _PCATCH (VFR_RETURN_INVALID_PARAMETER, MIN->getLine(), "String MinSize takes only one byte, which can't be larger than 0xFF.");\r
                                                           } else if (VarArraySize != 0 && StringMinSize > VarArraySize) {\r
                                                             _PCATCH (VFR_RETURN_INVALID_PARAMETER, MIN->getLine(), "String MinSize can't be larger than the max number of elements in string array.");\r
@@ -2419,8 +2479,8 @@ vfrStatementString :
                                                           SObj.SetMinSize (StringMinSize);\r
                                                        >>\r
   MaxSize "=" MAX:Number ","                           << \r
-                                                          StringMaxSize = _STOU8(MAX->getText());\r
-                                                          if (_STOU64(MAX->getText()) > StringMaxSize) {\r
+                                                          StringMaxSize = _STOU8(MAX->getText(), MAX->getLine());\r
+                                                          if (_STOU64(MAX->getText(), MAX->getLine()) > StringMaxSize) {\r
                                                             _PCATCH (VFR_RETURN_INVALID_PARAMETER, MAX->getLine(), "String MaxSize takes only one byte, which can't be larger than 0xFF.");\r
                                                           } else if (VarArraySize != 0 && StringMaxSize > VarArraySize) {\r
                                                             _PCATCH (VFR_RETURN_INVALID_PARAMETER, MAX->getLine(), "String MaxSize can't be larger than the max number of elements in string array.");\r
@@ -2444,7 +2504,7 @@ vfrStringFlagsField [CIfrString & SObj, UINT32 LineNum] :
   ;\r
 \r
 stringFlagsField [UINT8 & HFlags, UINT8 & LFlags] :\r
-    N:Number                                           << _PCATCH(_STOU8(N->getText()) == 0 ? VFR_RETURN_SUCCESS : VFR_RETURN_UNSUPPORTED, N->getLine()); >>\r
+    N:Number                                           << _PCATCH(_STOU8(N->getText(), N->getLine()) == 0 ? VFR_RETURN_SUCCESS : VFR_RETURN_UNSUPPORTED, N->getLine()); >>\r
   | "MULTI_LINE"                                       << $LFlags = 0x01; >>\r
   | questionheaderFlagsField[HFlags]\r
   ;\r
@@ -2464,8 +2524,8 @@ vfrStatementPassword :
   }\r
   MinSize "=" MIN:Number ","                           << \r
                                                           VarArraySize = _GET_CURRQEST_ARRAY_SIZE();\r
-                                                          PasswordMinSize = _STOU16(MIN->getText());\r
-                                                          if (_STOU64(MIN->getText()) > PasswordMinSize) {\r
+                                                          PasswordMinSize = _STOU16(MIN->getText(), MIN->getLine());\r
+                                                          if (_STOU64(MIN->getText(), MIN->getLine()) > PasswordMinSize) {\r
                                                             _PCATCH (VFR_RETURN_INVALID_PARAMETER, MIN->getLine(), "Password MinSize takes only two byte, which can't be larger than 0xFFFF.");\r
                                                           } else if (VarArraySize != 0 && PasswordMinSize > VarArraySize) {\r
                                                             _PCATCH (VFR_RETURN_INVALID_PARAMETER, MIN->getLine(), "Password MinSize can't be larger than the max number of elements in password array.");\r
@@ -2473,8 +2533,8 @@ vfrStatementPassword :
                                                           PObj.SetMinSize (PasswordMinSize);\r
                                                        >>\r
   MaxSize "=" MAX:Number ","                           << \r
-                                                          PasswordMaxSize = _STOU16(MAX->getText());\r
-                                                          if (_STOU64(MAX->getText()) > PasswordMaxSize) {\r
+                                                          PasswordMaxSize = _STOU16(MAX->getText(), MAX->getLine());\r
+                                                          if (_STOU64(MAX->getText(), MAX->getLine()) > PasswordMaxSize) {\r
                                                             _PCATCH (VFR_RETURN_INVALID_PARAMETER, MAX->getLine(), "Password MaxSize takes only two byte, which can't be larger than 0xFFFF.");\r
                                                           } else if (VarArraySize != 0 && PasswordMaxSize > VarArraySize) {\r
                                                             _PCATCH (VFR_RETURN_INVALID_PARAMETER, MAX->getLine(), "Password MaxSize can't be larger than the max number of elements in password array.");\r
@@ -2496,7 +2556,7 @@ vfrPasswordFlagsField [CIfrPassword & PObj, UINT32 LineNum] :
   ;\r
 \r
 passwordFlagsField [UINT8 & HFlags] :\r
-    N:Number                                           << _PCATCH(_STOU8(N->getText()) == 0 ? VFR_RETURN_SUCCESS : VFR_RETURN_UNSUPPORTED, N->getLine()); >>\r
+    N:Number                                           << _PCATCH(_STOU8(N->getText(), N->getLine()) == 0 ? VFR_RETURN_SUCCESS : VFR_RETURN_UNSUPPORTED, N->getLine()); >>\r
   | questionheaderFlagsField[HFlags]\r
   ;\r
 \r
@@ -2513,15 +2573,15 @@ vfrStatementOrderedList :
                                                        >>\r
   {\r
     MaxContainers "=" M:Number ","                     << \r
-                                                          if (_STOU64(M->getText()) > _STOU8(M->getText())) {\r
+                                                          if (_STOU64(M->getText(), M->getLine()) > _STOU8(M->getText(), M->getLine())) {\r
                                                             _PCATCH (VFR_RETURN_INVALID_PARAMETER, M->getLine(), "OrderedList MaxContainers takes only one byte, which can't be larger than 0xFF.");\r
-                                                          } else if (VarArraySize != 0 && _STOU8(M->getText()) > VarArraySize) {\r
+                                                          } else if (VarArraySize != 0 && _STOU8(M->getText(), M->getLine()) > VarArraySize) {\r
                                                             _PCATCH (VFR_RETURN_INVALID_PARAMETER, M->getLine(), "OrderedList MaxContainers can't be larger than the max number of elements in array.");\r
                                                           }\r
-                                                          OLObj.SetMaxContainers (_STOU8(M->getText()));\r
+                                                          OLObj.SetMaxContainers (_STOU8(M->getText(), M->getLine()));\r
                                                        >>\r
   }\r
-  { F:FLAGS "=" vfrOrderedListFlags[OLObj, F->getLine()] }\r
+  { F:FLAGS "=" vfrOrderedListFlags[OLObj, F->getLine()] {","}}\r
   vfrStatementQuestionOptionList\r
   E:EndList                                            << CRT_END_OP (E); >>\r
   ";"\r
@@ -2537,7 +2597,7 @@ vfrOrderedListFlags [CIfrOrderedList & OLObj, UINT32 LineNum] :
   ;\r
 \r
 orderedlistFlagsField [UINT8 & HFlags, UINT8 & LFlags] :\r
-    N:Number                                           << _PCATCH(_STOU8(N->getText()) == 0 ? VFR_RETURN_SUCCESS : VFR_RETURN_UNSUPPORTED, N->getLine()); >>\r
+    N:Number                                           << _PCATCH(_STOU8(N->getText(), N->getLine()) == 0 ? VFR_RETURN_SUCCESS : VFR_RETURN_UNSUPPORTED, N->getLine()); >>\r
   | "UNIQUE"                                           << $LFlags |= 0x01; >>\r
   | "NOEMPTY"                                          << $LFlags |= 0x02; >>\r
   | questionheaderFlagsField[HFlags]\r
@@ -2586,8 +2646,8 @@ vfrStatementTime :
                                                           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
+                                                          TObj.SetPrompt (_STOSID(HP->getText(), HP->getLine()));\r
+                                                          TObj.SetHelp (_STOSID(HH->getText(), HH->getLine()));\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 DefaultObj(Size, EFI_HII_DEFAULT_CLASS_STANDARD, EFI_IFR_TYPE_TIME, Val); DefaultObj.SetLineNo(L->getLine());} >>\r
@@ -2606,19 +2666,19 @@ minMaxTimeStepDefault[EFI_HII_TIME & T, UINT8 KeyValue] :
     "default" "=" N:Number ","                         <<\r
                                                           switch (KeyValue) {\r
                                                           case 0: \r
-                                                            T.Hour   = _STOU8(N->getText()); \r
+                                                            T.Hour   = _STOU8(N->getText(), N->getLine()); \r
                                                             if (T.Hour > 23) {\r
                                                               _PCATCH (VFR_RETURN_INVALID_PARAMETER, N->getLine(), "Hour default value must be between 0 and 23.");\r
                                                             }\r
                                                             break;\r
                                                           case 1: \r
-                                                            T.Minute = _STOU8(N->getText()); \r
+                                                            T.Minute = _STOU8(N->getText(), N->getLine()); \r
                                                             if (T.Minute > 59) {\r
                                                               _PCATCH (VFR_RETURN_INVALID_PARAMETER, N->getLine(), "Minute default value must be between 0 and 59.");\r
                                                             }\r
                                                             break;\r
                                                           case 2: \r
-                                                            T.Second = _STOU8(N->getText());\r
+                                                            T.Second = _STOU8(N->getText(), N->getLine());\r
                                                             if (T.Second > 59) {\r
                                                               _PCATCH (VFR_RETURN_INVALID_PARAMETER, N->getLine(), "Second default value must be between 0 and 59.");\r
                                                             }\r
@@ -2635,7 +2695,7 @@ vfrTimeFlags [CIfrTime & TObj, UINT32 LineNum] :
   ;\r
 \r
 timeFlagsField [UINT8 & Flags] :\r
-    N:Number                                           << $Flags |= _STOU8(N->getText()); >>\r
+    N:Number                                           << $Flags |= _STOU8(N->getText(), N->getLine()); >>\r
   | "HOUR_SUPPRESS"                                    << $Flags |= 0x01; >>\r
   | "MINUTE_SUPPRESS"                                  << $Flags |= 0x02; >>\r
   | "SECOND_SUPPRESS"                                  << $Flags |= 0x04; >>\r
@@ -2652,7 +2712,7 @@ vfrStatementQuestionTag :
   vfrStatementRefresh           |\r
   vfrStatementVarstoreDevice    |\r
   vfrStatementExtension         |\r
-  vfrStatementRefreshEvent      |\r
+  vfrStatementRefreshEvent ","  |\r
   vfrStatementWarningIf\r
   ;\r
 \r
@@ -2714,7 +2774,7 @@ vfrStatementInconsistentIfStat :
                                                           }\r
                                                           IIObj.SetLineNo(L->getLine());\r
                                                        >>\r
-  Prompt "=" "STRING_TOKEN" "\(" S:Number "\)" ","     << IIObj.SetError (_STOSID(S->getText())); >>\r
+  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
@@ -2796,7 +2856,7 @@ vfrStatementGrayOutIfStatOld :
 \r
 vfrImageTag :\r
   << CIfrImage IObj; >>\r
-  L:Image "=" "IMAGE_TOKEN" "\(" S1:Number "\)"        << IObj.SetImageId (_STOSID(S1->getText())); IObj.SetLineNo(L->getLine()); >>\r
+  L:Image "=" "IMAGE_TOKEN" "\(" S1:Number "\)"        << IObj.SetImageId (_STOSID(S1->getText(), S1->getLine())); IObj.SetLineNo(L->getLine()); >>\r
   ;\r
 \r
 vfrLockedTag :\r
@@ -2836,7 +2896,7 @@ vfrStatementLocked :
 vfrStatementInconsistentIf :\r
   << CIfrInconsistentIf IIObj; >>\r
   L:InconsistentIf                                     << IIObj.SetLineNo(L->getLine()); >>\r
-  Prompt "=" "STRING_TOKEN" "\(" S:Number "\)" ","     << IIObj.SetError (_STOSID(S->getText())); >>\r
+  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
@@ -2845,7 +2905,7 @@ vfrStatementInconsistentIf :
 vfrStatementNoSubmitIf :\r
   << CIfrNoSubmitIf NSIObj; >>\r
   L:NoSubmitIf                                         << NSIObj.SetLineNo(L->getLine()); >>\r
-  Prompt "=" "STRING_TOKEN" "\(" S:Number "\)" ","     << NSIObj.SetError (_STOSID(S->getText())); >>\r
+  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
@@ -2854,8 +2914,8 @@ vfrStatementNoSubmitIf :
 vfrStatementWarningIf :\r
   << CIfrWarningIf WIObj; >>\r
   L:WarningIf                                          << WIObj.SetLineNo(L->getLine()); >>\r
-  Prompt "=" "STRING_TOKEN" "\(" S:Number "\)" ","     << WIObj.SetWarning (_STOSID(S->getText())); >>\r
-  {Timeout "=" T:Number ","                            << WIObj.SetTimeOut (_STOU8(T->getText())); >>}\r
+  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
   ;\r
@@ -2873,7 +2933,7 @@ vfrStatementDisableIfQuest :
 vfrStatementRefresh :\r
   << CIfrRefresh RObj; >>\r
   L:Refresh                                            << RObj.SetLineNo(L->getLine()); >>\r
-  Interval "=" I:Number                                << RObj.SetRefreshInterval (_STOU8(I->getText())); >>\r
+  Interval "=" I:Number                                << RObj.SetRefreshInterval (_STOU8(I->getText(), I->getLine())); >>\r
   ;\r
 \r
 vfrStatementRefreshEvent :\r
@@ -2882,13 +2942,13 @@ vfrStatementRefreshEvent :
     EFI_GUID      Guid;\r
   >>\r
   L:RefreshGuid                                        << RiObj.SetLineNo(L->getLine()); >>\r
-  "="  guidDefinition[Guid] ","                        << RiObj.SetRefreshEventGroutId (&Guid);  >>\r
+  "="  guidDefinition[Guid]                            << RiObj.SetRefreshEventGroutId (&Guid);  >>\r
   ;\r
 \r
 vfrStatementVarstoreDevice :\r
   << CIfrVarStoreDevice VDObj; >>\r
   L:VarstoreDevice                                     << VDObj.SetLineNo(L->getLine()); >>\r
-  "=" "STRING_TOKEN" "\(" S:Number "\)" ","            << VDObj.SetDevicePath (_STOSID(S->getText())); >>\r
+  "=" "STRING_TOKEN" "\(" S:Number "\)" ","            << VDObj.SetDevicePath (_STOSID(S->getText(), S->getLine())); >>\r
   ;\r
 \r
 vfrStatementSuppressIfQuest :\r
@@ -2941,7 +3001,7 @@ vfrStatementOneOfOption :
                                                             _PCATCH (ReturnCode, L->getLine());\r
                                                           }\r
                                                        >>\r
-  Text  "=" "STRING_TOKEN" "\(" S:Number "\)" ","      << OOOObj.SetOption (_STOSID(S->getText())); >>\r
+  Text  "=" "STRING_TOKEN" "\(" S:Number "\)" ","      << OOOObj.SetOption (_STOSID(S->getText(), S->getLine())); >>\r
   Value "=" vfrConstantValueField[_GET_CURRQEST_DATATYPE()] >[Val] ","    \r
                                                        << \r
                                                           if (gCurrentMinMaxData != NULL) {\r
@@ -3007,7 +3067,7 @@ vfrStatementOneOfOption :
                                                          CIfrOptionKey IfrOptionKey (\r
                                                                          gCurrentQuestion->QUESTION_ID(),\r
                                                                          Val,\r
-                                                                         _STOQID(KN->getText())\r
+                                                                         _STOQID(KN->getText(), KN->getLine())\r
                                                                          );\r
                                                          SET_LINE_INFO (IfrOptionKey, KN);\r
                                                        >>\r
@@ -3029,15 +3089,35 @@ vfrOneOfOptionFlags [CIfrOneOfOption & OOOObj, UINT32 LineNum] :
   ;\r
 \r
 oneofoptionFlagsField [UINT8 & HFlags, UINT8 & LFlags] :\r
-    N:Number                                           << $LFlags |= _STOU8(N->getText()); >>\r
+    N:Number                                           << $LFlags |= _STOU8(N->getText(), N->getLine()); >>\r
   | "OPTION_DEFAULT"                                   << $LFlags |= 0x10; >>\r
   | "OPTION_DEFAULT_MFG"                               << $LFlags |= 0x20; >>\r
   | InteractiveFlag                                    << $HFlags |= 0x04; >>\r
-  | NVAccessFlag                                       << $HFlags |= 0x08; >>\r
   | ResetRequiredFlag                                  << $HFlags |= 0x10; >>\r
-  | LateCheckFlag                                      << $HFlags |= 0x20; >>\r
   | ManufacturingFlag                                  << $LFlags |= 0x20; >>\r
   | DefaultFlag                                        << $LFlags |= 0x10; >>\r
+  | A:NVAccessFlag                                     << \r
+                                                          if (mCompatibleMode) {\r
+                                                            $HFlags |= 0x08;\r
+                                                          } else {\r
+                                                            gCVfrErrorHandle.HandleWarning (\r
+                                                              VFR_WARNING_OBSOLETED_FRAMEWORK_OPCODE,\r
+                                                              A->getLine(),\r
+                                                              A->getText()\r
+                                                              );\r
+                                                          }\r
+                                                       >>\r
+  | L:LateCheckFlag                                    << \r
+                                                          if (mCompatibleMode) {\r
+                                                            $HFlags |= 0x20;\r
+                                                          } else {\r
+                                                            gCVfrErrorHandle.HandleWarning (\r
+                                                              VFR_WARNING_OBSOLETED_FRAMEWORK_OPCODE,\r
+                                                              L->getLine(),\r
+                                                              L->getText()\r
+                                                              );\r
+                                                          }\r
+                                                       >>\r
   ;\r
 \r
 vfrStatementLabel :\r
@@ -3055,7 +3135,7 @@ vfrStatementLabel :
                                                           {\r
                                                             CIfrLabel LObj2;\r
                                                             LObj2.SetLineNo(L->getLine());\r
-                                                            LObj2.SetNumber (_STOU16(N->getText()));\r
+                                                            LObj2.SetNumber (_STOU16(N->getText(), N->getLine()));\r
                                                           }\r
                                                        >>\r
   ";"\r
@@ -3064,10 +3144,10 @@ vfrStatementLabel :
 vfrStatementBanner :\r
   << CIfrBanner BObj; >>\r
   B:Banner { "," }                                     << BObj.SetLineNo(B->getLine()); >>\r
-  Title "=" "STRING_TOKEN" "\(" S:Number "\)" ","      << BObj.SetTitle (_STOSID(S->getText())); >>\r
+  Title "=" "STRING_TOKEN" "\(" S:Number "\)" ","      << BObj.SetTitle (_STOSID(S->getText(), S->getLine())); >>\r
   (\r
     (\r
-      Line L:Number ","                                << BObj.SetLine (_STOU16(L->getText())); >>\r
+      Line L:Number ","                                << BObj.SetLine (_STOU16(L->getText(), L->getLine())); >>\r
       Align\r
       (\r
           Left                                         << BObj.SetAlign (0); >>\r
@@ -3077,7 +3157,7 @@ vfrStatementBanner :
     )\r
     |\r
     (\r
-      Timeout "=" T:Number ";"                         << {CIfrTimeout TObj(_STOU16(T->getText()));} >>\r
+      Timeout "=" T:Number ";"                         << {CIfrTimeout TObj(_STOU16(T->getText(), T->getLine()));} >>\r
     )\r
   )\r
   ;\r
@@ -3423,7 +3503,7 @@ vareqvalExp [UINT32 & RootLevel, UINT32 & ExpOpCount] :
                                                             _PCATCH (mCVfrDataStorage.DeclareEfiVarStore (\r
                                                                                         VarIdStr,\r
                                                                                         &mFormsetGuid,\r
-                                                                                        _STOSID(VN->getText()),\r
+                                                                                        _STOSID(VN->getText(), VN->getLine()),\r
                                                                                         0x2,   //default type is UINT16\r
                                                                                         FALSE\r
                                                                                         ), VN);\r
@@ -3437,7 +3517,7 @@ vareqvalExp [UINT32 & RootLevel, UINT32 & ExpOpCount] :
   (\r
     (\r
       "=="\r
-      V1:Number                                        << ConstVal = _STOU16(V1->getText()); >>\r
+      V1:Number                                        << ConstVal = _STOU16(V1->getText(), V1->getLine()); >>\r
                                                        <<\r
                                                           if (Mask == 0) {\r
                                                             CIfrEqIdVal EIVObj (L->getLine());\r
@@ -3453,25 +3533,25 @@ vareqvalExp [UINT32 & RootLevel, UINT32 & ExpOpCount] :
     |\r
     (\r
       "<="\r
-      V2:Number                                        << ConstVal = _STOU16(V2->getText()); >>\r
+      V2:Number                                        << ConstVal = _STOU16(V2->getText(), V2->getLine()); >>\r
                                                        << IdEqValDoSpecial ($ExpOpCount, L->getLine(), QId, VarIdStr, Mask, ConstVal, LESS_EQUAL); >>\r
     )\r
     |\r
     (\r
       "<"\r
-      V3:Number                                        << ConstVal = _STOU16(V3->getText()); >>\r
+      V3:Number                                        << ConstVal = _STOU16(V3->getText(), V3->getLine()); >>\r
                                                        << IdEqValDoSpecial ($ExpOpCount, L->getLine(), QId, VarIdStr, Mask, ConstVal, LESS_THAN); >>\r
     )\r
     |\r
     (\r
       ">="\r
-      V4:Number                                        << ConstVal = _STOU16(V4->getText()); >>\r
+      V4:Number                                        << ConstVal = _STOU16(V4->getText(), V4->getLine()); >>\r
                                                        << IdEqValDoSpecial ($ExpOpCount, L->getLine(), QId, VarIdStr, Mask, ConstVal, GREATER_EQUAL); >>\r
     )\r
     |\r
     (\r
       ">"\r
-      V5:Number                                        << ConstVal = _STOU16(V5->getText()); >>\r
+      V5:Number                                        << ConstVal = _STOU16(V5->getText(), V5->getLine()); >>\r
                                                        << IdEqValDoSpecial ($ExpOpCount, L->getLine(), QId, VarIdStr, Mask, ConstVal, GREATER_THAN); >>\r
     )\r
   )\r
@@ -3490,7 +3570,7 @@ ideqvalExp [UINT32 & RootLevel, UINT32 & ExpOpCount] :
   (\r
     (\r
       "=="\r
-      V1:Number                                        << ConstVal = _STOU16(V1->getText()); >>\r
+      V1:Number                                        << ConstVal = _STOU16(V1->getText(), V1->getLine()); >>\r
                                                        <<\r
                                                           if (Mask == 0) {\r
                                                             CIfrEqIdVal EIVObj (L->getLine());\r
@@ -3506,25 +3586,25 @@ ideqvalExp [UINT32 & RootLevel, UINT32 & ExpOpCount] :
     |\r
     (\r
       "<="\r
-      V2:Number                                        << ConstVal = _STOU16(V2->getText()); >>\r
+      V2:Number                                        << ConstVal = _STOU16(V2->getText(), V2->getLine()); >>\r
                                                        << IdEqValDoSpecial ($ExpOpCount, L->getLine(), QId, VarIdStr, Mask, ConstVal, LESS_EQUAL); >>\r
     )\r
     |\r
     (\r
       "<"\r
-      V3:Number                                        << ConstVal = _STOU16(V3->getText()); >>\r
+      V3:Number                                        << ConstVal = _STOU16(V3->getText(), V3->getLine()); >>\r
                                                        << IdEqValDoSpecial ($ExpOpCount, L->getLine(), QId, VarIdStr, Mask, ConstVal, LESS_THAN); >>\r
     )\r
     |\r
     (\r
       ">="\r
-      V4:Number                                        << ConstVal = _STOU16(V4->getText()); >>\r
+      V4:Number                                        << ConstVal = _STOU16(V4->getText(), V4->getLine()); >>\r
                                                        << IdEqValDoSpecial ($ExpOpCount, L->getLine(), QId, VarIdStr, Mask, ConstVal, GREATER_EQUAL); >>\r
     )\r
     |\r
     (\r
       ">"\r
-      V5:Number                                        << ConstVal = _STOU16(V5->getText()); >>\r
+      V5:Number                                        << ConstVal = _STOU16(V5->getText(), V5->getLine()); >>\r
                                                        << IdEqValDoSpecial ($ExpOpCount, L->getLine(), QId, VarIdStr, Mask, ConstVal, GREATER_THAN); >>\r
     )\r
   )\r
@@ -3595,7 +3675,7 @@ ideqvallistExp[UINT32 & RootLevel, UINT32 & ExpOpCount] :
   vfrQuestionDataFieldName[QId, Mask, VarIdStr, LineNo]\r
   "=="\r
   (\r
-    V:Number                                           << ValueList[ListLen] = _STOU16(V->getText()); ListLen++; >>\r
+    V:Number                                           << ValueList[ListLen] = _STOU16(V->getText(), V->getLine()); ListLen++; >>\r
   )+\r
                                                        <<\r
                                                           if (Mask != 0) {\r
@@ -3637,7 +3717,7 @@ questionref1Exp[UINT32 & RootLevel, UINT32 & ExpOpCount] :
                                                           LineNo = QN->getLine();\r
                                                           mCVfrQuestionDB.GetQuestionId (QN->getText(), NULL, QId, BitMask);\r
                                                        >>\r
-        | ID:Number                                    << QId = _STOQID(ID->getText()); >>\r
+        | ID:Number                                    << QId = _STOQID(ID->getText(), ID->getLine()); >>\r
       )\r
   "\)"\r
                                                        <<\r
@@ -3662,9 +3742,9 @@ stringref1Exp[UINT32 & RootLevel, UINT32 & ExpOpCount] :
       ( \r
         "STRING_TOKEN"\r
         "\(" \r
-          S:Number << RefStringId = _STOSID(S->getText()); >>\r
+          S:Number << RefStringId = _STOSID(S->getText(), S->getLine()); >>\r
         "\)"\r
-        | I:Number << RefStringId = _STOSID(I->getText()); >>\r
+        | I:Number << RefStringId = _STOSID(I->getText(), I->getLine()); >>\r
       )\r
   "\)" << { CIfrStringRef1 SR1Obj(L->getLine()); _SAVE_OPHDR_COND (SR1Obj, ($ExpOpCount == 0), L->getLine()); SR1Obj.SetStringId (RefStringId); $ExpOpCount++; } >>\r
   ;\r
@@ -3767,7 +3847,7 @@ vfrExpressionConstant[UINT32 & RootLevel, UINT32 & ExpOpCount] :
   | L5:Zero                                            << CIfrZero ZObj(L5->getLine()); _SAVE_OPHDR_COND (ZObj, ($ExpOpCount == 0), L5->getLine()); $ExpOpCount++; >>\r
   | L6:Undefined                                       << CIfrUndefined UObj(L6->getLine()); _SAVE_OPHDR_COND (UObj, ($ExpOpCount == 0), L6->getLine()); $ExpOpCount++; >>\r
   | L7:Version                                         << CIfrVersion VObj(L7->getLine()); _SAVE_OPHDR_COND (VObj, ($ExpOpCount == 0), L7->getLine()); $ExpOpCount++; >>\r
-  | V:Number                                           << CIfrUint64 U64Obj(V->getLine()); U64Obj.SetValue (_STOU64(V->getText())); _SAVE_OPHDR_COND (U64Obj, ($ExpOpCount == 0), V->getLine()); $ExpOpCount++; >>\r
+  | V:Number                                           << CIfrUint64 U64Obj(V->getLine()); U64Obj.SetValue (_STOU64(V->getText(), V->getLine())); _SAVE_OPHDR_COND (U64Obj, ($ExpOpCount == 0), V->getLine()); $ExpOpCount++; >>\r
   ;\r
 \r
 vfrExpressionUnaryOp[UINT32 & RootLevel, UINT32 & ExpOpCount] :\r
@@ -3804,7 +3884,7 @@ question23refExp[UINT32 & RootLevel, UINT32 & ExpOpCount] :
   L:QuestionRefVal\r
   "\("\r
       {\r
-        DevicePath "=" "STRING_TOKEN" "\(" S:Number "\)" ","    << Type = 0x2; DevPath = _STOSID(S->getText()); >>\r
+        DevicePath "=" "STRING_TOKEN" "\(" S:Number "\)" ","    << Type = 0x2; DevPath = _STOSID(S->getText(), S->getLine()); >>\r
       }\r
       {\r
         Uuid "=" guidDefinition[Guid] ","                       << Type = 0x3; >>\r
@@ -3837,7 +3917,7 @@ tostringExp[UINT32 & RootLevel, UINT32 & ExpOpCount] :
   << UINT8 Fmt = 0; >>\r
   L:StringVal\r
   {\r
-    Format "=" F:Number ","                            << Fmt = _STOU8(F->getText()); >>\r
+    Format "=" F:Number ","                            << Fmt = _STOU8(F->getText(), F->getLine()); >>\r
   }\r
   "\(" vfrStatementExpressionSub[$RootLevel + 1, $ExpOpCount] "\)"\r
                                                        << { CIfrToString TSObj(L->getLine()); TSObj.SetFormat (Fmt); $ExpOpCount++; } >>\r
@@ -4023,7 +4103,7 @@ vfrExpressionMap [UINT32 & RootLevel, UINT32 & ExpOpCount]:
   ;\r
 \r
 spanFlags [UINT8 & Flags] :\r
-    N:Number                                           << $Flags |= _STOU8(N->getText()); >>\r
+    N:Number                                           << $Flags |= _STOU8(N->getText(), N->getLine()); >>\r
   | "LAST_NON_MATCH"                                   << $Flags |= 0x00; >>\r
   | "FIRST_NON_MATCH"                                  << $Flags |= 0x01; >>\r
   ;\r
@@ -4091,17 +4171,17 @@ public:
 \r
   CHAR8*              TrimHex (IN CHAR8 *, OUT BOOLEAN *);\r
   CHAR8*              _U32TOS (IN UINT32);\r
-  UINT8               _STOU8  (IN CHAR8 *);\r
-  UINT16              _STOU16 (IN CHAR8 *);\r
-  UINT32              _STOU32 (IN CHAR8 *);\r
-  UINT64              _STOU64 (IN CHAR8 *);\r
-  EFI_HII_DATE        _STOD   (IN CHAR8 *, IN CHAR8 *, IN CHAR8 *);\r
-  EFI_HII_TIME        _STOT   (IN CHAR8 *, IN CHAR8 *, IN CHAR8 *);\r
-  EFI_HII_REF         _STOR   (IN CHAR8 *, IN CHAR8 *, IN EFI_GUID *, IN CHAR8 *);\r
-\r
-  EFI_STRING_ID       _STOSID (IN CHAR8 *);\r
-  EFI_FORM_ID         _STOFID (IN CHAR8 *);\r
-  EFI_QUESTION_ID     _STOQID (IN CHAR8 *);\r
+  UINT8               _STOU8  (IN CHAR8 *, IN UINT32);\r
+  UINT16              _STOU16 (IN CHAR8 *, IN UINT32);\r
+  UINT32              _STOU32 (IN CHAR8 *, IN UINT32);\r
+  UINT64              _STOU64 (IN CHAR8 *, IN UINT32);\r
+  EFI_HII_DATE        _STOD   (IN CHAR8 *, IN CHAR8 *, IN CHAR8 *, IN UINT32);\r
+  EFI_HII_TIME        _STOT   (IN CHAR8 *, IN CHAR8 *, IN CHAR8 *, IN UINT32);\r
+  EFI_HII_REF         _STOR   (IN CHAR8 *, IN CHAR8 *, IN EFI_GUID *, IN CHAR8 *, IN UINT32);\r
+\r
+  EFI_STRING_ID       _STOSID (IN CHAR8 *, IN UINT32);\r
+  EFI_FORM_ID         _STOFID (IN CHAR8 *, IN UINT32);\r
+  EFI_QUESTION_ID     _STOQID (IN CHAR8 *, IN UINT32);\r
 \r
   VOID                _STRCAT (IN OUT CHAR8 **, IN CONST CHAR8 *);\r
 \r
@@ -4335,18 +4415,21 @@ EfiVfrParser::_U32TOS (
 \r
 UINT8\r
 EfiVfrParser::_STOU8 (\r
-  IN CHAR8*Str\r
+  IN CHAR8  *Str,\r
+  IN UINT32 LineNum\r
   )\r
 {\r
   BOOLEAN IsHex;\r
   UINT8   Value;\r
   CHAR8   c;\r
 \r
+  UINT8 PreviousValue;\r
+  CHAR8 *OrigString = Str;\r
+  CHAR8 ErrorMsg[100];\r
+\r
   Str = TrimHex (Str, &IsHex);\r
   for (Value = 0; (c = *Str) != '\0'; Str++) {\r
-    //\r
-    // BUG: does not handle overflow here\r
-    //\r
+    PreviousValue = Value;\r
     (IsHex == TRUE) ? (Value <<= 4) : (Value *= 10);\r
 \r
     if ((IsHex == TRUE) && (c >= 'a') && (c <= 'f')) {\r
@@ -4358,6 +4441,10 @@ EfiVfrParser::_STOU8 (
     if (c >= '0' && c <= '9') {\r
       Value += (c - '0');\r
     }\r
+    if((IsHex && ((Value/16) != PreviousValue)) || (!IsHex && ((Value/10) != PreviousValue))) {\r
+      sprintf(ErrorMsg, "Overflow: Value %s is too large to store in a UINT8", OrigString);\r
+      gCVfrErrorHandle.HandleWarning (VFR_WARNING_STRING_TO_UINT_OVERFLOW, LineNum, ErrorMsg);\r
+    }\r
   }\r
 \r
   return Value;\r
@@ -4365,18 +4452,21 @@ EfiVfrParser::_STOU8 (
 \r
 UINT16\r
 EfiVfrParser::_STOU16 (\r
-  IN CHAR8*Str\r
+  IN CHAR8  *Str,\r
+  IN UINT32 LineNum\r
   )\r
 {\r
   BOOLEAN IsHex;\r
   UINT16  Value;\r
   CHAR8   c;\r
 \r
+  UINT16 PreviousValue;\r
+  CHAR8 *OrigString = Str;\r
+  CHAR8 ErrorMsg[100];\r
+\r
   Str = TrimHex (Str, &IsHex);\r
   for (Value = 0; (c = *Str) != '\0'; Str++) {\r
-    //\r
-    // BUG: does not handle overflow here\r
-    //\r
+    PreviousValue = Value;\r
     (IsHex == TRUE) ? (Value <<= 4) : (Value *= 10);\r
 \r
     if ((IsHex == TRUE) && (c >= 'a') && (c <= 'f')) {\r
@@ -4388,6 +4478,10 @@ EfiVfrParser::_STOU16 (
     if (c >= '0' && c <= '9') {\r
       Value += (c - '0');\r
     }\r
+    if((IsHex && ((Value/16) != PreviousValue)) || (!IsHex && ((Value/10) != PreviousValue))) {\r
+      sprintf(ErrorMsg, "Overflow: Value %s is too large to store in a UINT16", OrigString);\r
+      gCVfrErrorHandle.HandleWarning (VFR_WARNING_STRING_TO_UINT_OVERFLOW, LineNum, ErrorMsg);\r
+    }\r
   }\r
 \r
   return Value;\r
@@ -4395,18 +4489,21 @@ EfiVfrParser::_STOU16 (
 \r
 UINT32\r
 EfiVfrParser::_STOU32 (\r
-  IN CHAR8*Str\r
+  IN CHAR8  *Str,\r
+  IN UINT32 LineNum\r
   )\r
 {\r
   BOOLEAN IsHex;\r
   UINT32  Value;\r
   CHAR8   c;\r
 \r
+  UINT32 PreviousValue;\r
+  CHAR8 *OrigString = Str;\r
+  CHAR8 ErrorMsg[100];\r
+\r
   Str = TrimHex (Str, &IsHex);\r
   for (Value = 0; (c = *Str) != '\0'; Str++) {\r
-    //\r
-    // BUG: does not handle overflow here\r
-    //\r
+    PreviousValue = Value;\r
     (IsHex == TRUE) ? (Value <<= 4) : (Value *= 10);\r
 \r
     if ((IsHex == TRUE) && (c >= 'a') && (c <= 'f')) {\r
@@ -4418,6 +4515,10 @@ EfiVfrParser::_STOU32 (
     if (c >= '0' && c <= '9') {\r
       Value += (c - '0');\r
     }\r
+    if((IsHex && ((Value/16) != PreviousValue)) || (!IsHex && ((Value/10) != PreviousValue ))) {\r
+      sprintf(ErrorMsg, "Overflow: Value %s is too large to store in a UINT32", OrigString);\r
+      gCVfrErrorHandle.HandleWarning (VFR_WARNING_STRING_TO_UINT_OVERFLOW, LineNum, ErrorMsg);\r
+    }\r
   }\r
 \r
   return Value;\r
@@ -4425,18 +4526,20 @@ EfiVfrParser::_STOU32 (
 \r
 UINT64\r
 EfiVfrParser::_STOU64 (\r
-  IN CHAR8*Str\r
+  IN CHAR8  *Str,\r
+  IN UINT32 LineNum\r
   )\r
 {\r
   BOOLEAN IsHex;\r
   UINT64  Value;\r
   CHAR8   c;\r
+  UINT64 PreviousValue;\r
+  CHAR8 *OrigString = Str;\r
+  CHAR8 ErrorMsg[100];\r
 \r
   Str = TrimHex (Str, &IsHex);\r
   for (Value = 0; (c = *Str) != '\0'; Str++) {\r
-    //\r
-    // BUG: does not handle overflow here\r
-    //\r
+    PreviousValue = Value;\r
     (IsHex == TRUE) ? (Value <<= 4) : (Value *= 10);\r
 \r
     if ((IsHex == TRUE) && (c >= 'a') && (c <= 'f')) {\r
@@ -4448,6 +4551,10 @@ EfiVfrParser::_STOU64 (
     if (c >= '0' && c <= '9') {\r
       Value += (c - '0');\r
     }\r
+    if((IsHex && ((Value/16) != PreviousValue)) || ((!IsHex && (Value/10) != PreviousValue))) {\r
+      sprintf(ErrorMsg, "Overflow: Value %s is too large to store in a UINT64", OrigString);\r
+      gCVfrErrorHandle.HandleWarning (VFR_WARNING_STRING_TO_UINT_OVERFLOW, LineNum, ErrorMsg);\r
+    }\r
   }\r
 \r
   return Value;\r
@@ -4457,14 +4564,15 @@ EFI_HII_DATE
 EfiVfrParser::_STOD (\r
   IN CHAR8 *Year,\r
   IN CHAR8 *Month,\r
-  IN CHAR8 *Day\r
+  IN CHAR8 *Day,\r
+  IN UINT32 LineNum\r
   )\r
 {\r
   EFI_HII_DATE Date;\r
 \r
-  Date.Year  = _STOU16 (Year);\r
-  Date.Month = _STOU8 (Month);\r
-  Date.Day   = _STOU8 (Day);\r
+  Date.Year  = _STOU16 (Year, LineNum);\r
+  Date.Month = _STOU8 (Month, LineNum);\r
+  Date.Day   = _STOU8 (Day, LineNum);\r
 \r
   return Date;\r
 }\r
@@ -4473,40 +4581,44 @@ EFI_HII_TIME
 EfiVfrParser::_STOT (\r
   IN CHAR8 *Hour,\r
   IN CHAR8 *Minute,\r
-  IN CHAR8 *Second\r
+  IN CHAR8 *Second,\r
+  IN UINT32 LineNum\r
   )\r
 {\r
   EFI_HII_TIME Time;\r
 \r
-  Time.Hour   = _STOU8 (Hour);\r
-  Time.Minute = _STOU8 (Minute);\r
-  Time.Second = _STOU8 (Second);\r
+  Time.Hour   = _STOU8 (Hour, LineNum);\r
+  Time.Minute = _STOU8 (Minute, LineNum);\r
+  Time.Second = _STOU8 (Second, LineNum);\r
 \r
   return Time;\r
 }\r
 \r
 EFI_STRING_ID\r
 EfiVfrParser::_STOSID (\r
-  IN CHAR8 *Str\r
+  IN CHAR8  *Str,\r
+  IN UINT32 LineNum\r
   )\r
 {\r
-  return (EFI_STRING_ID)_STOU16(Str);\r
+  return (EFI_STRING_ID)_STOU16(Str, LineNum);\r
 }\r
 \r
 EFI_FORM_ID\r
 EfiVfrParser::_STOFID (\r
-  IN CHAR8 *Str\r
+  IN CHAR8 *Str,\r
+  IN UINT32 LineNum\r
   )\r
 {\r
-  return (EFI_FORM_ID)_STOU16(Str);\r
+  return (EFI_FORM_ID)_STOU16(Str, LineNum);\r
 }\r
 \r
 EFI_QUESTION_ID\r
 EfiVfrParser::_STOQID (\r
-  IN CHAR8 *Str\r
+  IN CHAR8 *Str,\r
+  IN UINT32 LineNum\r
   )\r
 {\r
-  return (EFI_QUESTION_ID)_STOU16(Str);\r
+  return (EFI_QUESTION_ID)_STOU16(Str, LineNum);\r
 }\r
 \r
 VOID\r
@@ -4542,16 +4654,17 @@ EfiVfrParser::_STOR (
   IN CHAR8    *QuestionId,\r
   IN CHAR8    *FormId,\r
   IN EFI_GUID *FormSetGuid,\r
-  IN CHAR8    *DevicePath\r
+  IN CHAR8    *DevicePath,\r
+  IN UINT32   LineNum\r
   )\r
 {\r
   EFI_HII_REF Ref;\r
   UINT32      Index;\r
 \r
   memcpy (&Ref.FormSetGuid, FormSetGuid, sizeof (EFI_GUID));\r
-  Ref.QuestionId  = _STOQID (QuestionId);\r
-  Ref.FormId      = _STOFID (FormId);\r
-  Ref.DevicePath  = _STOSID (DevicePath);\r
+  Ref.QuestionId  = _STOQID (QuestionId, LineNum);\r
+  Ref.FormId      = _STOFID (FormId, LineNum);\r
+  Ref.DevicePath  = _STOSID (DevicePath, LineNum);\r
 \r
   return Ref;\r
 }\r
@@ -4755,7 +4868,7 @@ EfiVfrParser::AssignQuestionKey (
     return;\r
   }\r
 \r
-  KeyValue = _STOU16 (KeyTok->getText());\r
+  KeyValue = _STOU16 (KeyTok->getText(), KeyTok->getLine());\r
 \r
   if (QHObj.FLAGS () & EFI_IFR_FLAG_CALLBACK) {\r
     /*\r