-/*++\r
-Copyright (c) 2004 - 2011, 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
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
#token MapTitle("maptitle") "maptitle"\r
#token MapGuid("mapguid") "mapguid"\r
#token Subtitle("subtitle") "subtitle"\r
+#token EndSubtitle("endsubtitle") "endsubtitle"\r
#token Help("help") "help"\r
#token Text("text") "text"\r
#token Option("option") "option"\r
#token Goto("goto") "goto"\r
#token FormSetGuid("formsetguid") "formsetguid"\r
#token InconsistentIf("inconsistentif") "inconsistentif"\r
+#token WarningIf("warningif") "warningif"\r
#token NoSubmitIf("nosubmitif") "nosubmitif"\r
#token EndIf("endif") "endif"\r
#token Key("key") "key"\r
"," 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
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
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
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
("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
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
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
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
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
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
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
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
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
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
UINT8 ClassGuidNum = 0;\r
CIfrFormSet *FSObj = NULL;\r
UINT16 C, SC;\r
+ CHAR8* InsertOpcodeAddr = NULL;\r
>>\r
L:FormSet\r
Uuid "=" guidDefinition[Guid] ","\r
{\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
FSObj->SetClassGuid(&DefaultClassGuid);\r
if (mOverrideClassGuid != NULL) {\r
FSObj->SetClassGuid(mOverrideClassGuid);\r
- } \r
+ }\r
break;\r
case 1:\r
if (mOverrideClassGuid != NULL) {\r
ClassGuidNum ++;\r
- } \r
+ }\r
FSObj = new CIfrFormSet(sizeof(EFI_IFR_FORM_SET) + ClassGuidNum * sizeof(EFI_GUID));\r
FSObj->SetClassGuid(&ClassGuid1);\r
if (mOverrideClassGuid != NULL) {\r
FSObj->SetClassGuid(mOverrideClassGuid);\r
- } \r
+ }\r
break;\r
case 2:\r
if (mOverrideClassGuid != NULL) {\r
ClassGuidNum ++;\r
- } \r
+ }\r
FSObj = new CIfrFormSet(sizeof(EFI_IFR_FORM_SET) + ClassGuidNum * sizeof(EFI_GUID));\r
FSObj->SetClassGuid(&ClassGuid1);\r
FSObj->SetClassGuid(&ClassGuid2);\r
if (mOverrideClassGuid != NULL) {\r
FSObj->SetClassGuid(mOverrideClassGuid);\r
- } \r
+ }\r
break;\r
case 3:\r
FSObj = new CIfrFormSet(sizeof(EFI_IFR_FORM_SET) + ClassGuidNum * sizeof(EFI_GUID));\r
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
//\r
_DeclareDefaultFrameworkVarStore (GET_LINENO(E));\r
}\r
- CRT_END_OP (E); if (FSObj != NULL) delete FSObj;\r
+ \r
+ //\r
+ // Declare undefined Question so that they can be used in expression.\r
+ //\r
+ if (gCFormPkg.HavePendingUnassigned()) {\r
+ mParserStatus += gCFormPkg.DeclarePendingQuestion (\r
+ gCVfrVarDataTypeDB,\r
+ mCVfrDataStorage,\r
+ mCVfrQuestionDB,\r
+ &mFormsetGuid,\r
+ E->getLine(),\r
+ &InsertOpcodeAddr\r
+ );\r
+ gNeedAdjustOpcode = TRUE;\r
+ }\r
+\r
+ CRT_END_OP (E);\r
+\r
+ //\r
+ // Adjust the pending question position.\r
+ // Move the position from current to before the end of the last form in the form set.\r
+ //\r
+ if (gNeedAdjustOpcode) {\r
+ gCFormPkg.AdjustDynamicInsertOpcode (\r
+ mLastFormEndAddr,\r
+ InsertOpcodeAddr\r
+ );\r
+ }\r
+\r
+ if (FSObj != NULL) {\r
+ delete FSObj;\r
+ }\r
>>\r
";"\r
;\r
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
<<\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
<<\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
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
)\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
VarStoreId\r
), LineNum);\r
VSObj.SetGuid (&Guid);\r
- _PCATCH(mCVfrDataStorage.GetVarStoreId(StoreName, &VarStoreId), SN);\r
+ _PCATCH(mCVfrDataStorage.GetVarStoreId(StoreName, &VarStoreId, &Guid), SN);\r
VSObj.SetVarStoreId (VarStoreId);\r
_PCATCH(gCVfrVarDataTypeDB.GetDataTypeSize(TypeName, &Size), LineNum);\r
VSObj.SetSize ((UINT16) Size);\r
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
{\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
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
TypeName,\r
VarStoreId\r
), LineNum); \r
- _PCATCH(mCVfrDataStorage.GetVarStoreId(StoreName, &VarStoreId), SN);\r
+ _PCATCH(mCVfrDataStorage.GetVarStoreId(StoreName, &VarStoreId, &Guid), SN);\r
_PCATCH(gCVfrVarDataTypeDB.GetDataTypeSize(TypeName, &Size), LineNum);\r
} else {\r
_PCATCH(mCVfrDataStorage.DeclareBufferVarStore (\r
TypeName,\r
VarStoreId\r
), LineNum); \r
- _PCATCH(mCVfrDataStorage.GetVarStoreId(TN->getText(), &VarStoreId), VN);\r
+ _PCATCH(mCVfrDataStorage.GetVarStoreId(TN->getText(), &VarStoreId, &Guid), VN);\r
_PCATCH(gCVfrVarDataTypeDB.GetDataTypeSize(TypeName, &Size), N->getLine());\r
}\r
VSEObj.SetGuid (&Guid); \r
;\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
<<\r
EFI_GUID Guid;\r
CIfrVarStoreNameValue VSNVObj;\r
- EFI_VARSTORE_ID VarStoreId;\r
+ EFI_VARSTORE_ID VarStoreId = EFI_VARSTORE_ID_INVALID;\r
+ BOOLEAN Created = FALSE;\r
>>\r
L:NameValueVarStore << VSNVObj.SetLineNo(L->getLine()); >>\r
- SN:StringIdentifier "," << _PCATCH(mCVfrDataStorage.DeclareNameVarStoreBegin (SN->getText()), SN); >>\r
+ SN:StringIdentifier ","\r
+ {\r
+ VarId "=" ID:Number "," <<\r
+ _PCATCH(\r
+ (INTN)(VarStoreId = _STOU16(ID->getText(), ID->getLine())) != 0,\r
+ (INTN)TRUE,\r
+ ID,\r
+ "varid 0 is not allowed."\r
+ );\r
+ >>\r
+ }\r
(\r
- Name "=" "STRING_TOKEN" "\(" N:Number "\)" "," << _PCATCH(mCVfrDataStorage.NameTableAddItem (_STOSID(N->getText())), SN); >>\r
+ Name "=" "STRING_TOKEN" "\(" N:Number "\)" "," << \r
+ if (!Created) {\r
+ _PCATCH(mCVfrDataStorage.DeclareNameVarStoreBegin (SN->getText(), VarStoreId), SN);\r
+ Created = TRUE;\r
+ }\r
+ _PCATCH(mCVfrDataStorage.NameTableAddItem (_STOSID(N->getText(), N->getLine())), SN); \r
+ >>\r
)+\r
Uuid "=" guidDefinition[Guid] << _PCATCH(mCVfrDataStorage.DeclareNameVarStoreEnd (&Guid), SN); >>\r
<<\r
VSNVObj.SetGuid (&Guid);\r
- _PCATCH(mCVfrDataStorage.GetVarStoreId(SN->getText(), &VarStoreId), SN);\r
+ _PCATCH(mCVfrDataStorage.GetVarStoreId(SN->getText(), &VarStoreId, &Guid), SN);\r
VSNVObj.SetVarStoreId (VarStoreId);\r
>>\r
";"\r
| ClassInputDevice << $Class |= EFI_INPUT_DEVICE_CLASS; >>\r
| ClassOnBoardDevice << $Class |= EFI_ON_BOARD_DEVICE_CLASS; >>\r
| ClassOtherDevice << $Class |= EFI_OTHER_DEVICE_CLASS; >>\r
- | N:Number << $Class |= _STOU16(N->getText()); >>\r
+ | N:Number << $Class |= _STOU16(N->getText(), N->getLine()); >>\r
;\r
\r
subclassDefinition[UINT16 & SubClass] :\r
| SubclassGeneralApplication << $SubClass |= EFI_GENERAL_APPLICATION_SUBCLASS; >>\r
| SubclassFrontPage << $SubClass |= EFI_FRONT_PAGE_SUBCLASS; >>\r
| SubclassSingleUse << $SubClass |= EFI_SINGLE_USE_SUBCLASS; >>\r
- | N:Number << $SubClass |= _STOU16(N->getText()); >>\r
+ | N:Number << $SubClass |= _STOU16(N->getText(), N->getLine()); >>\r
;\r
\r
vfrStatementDisableIfFormSet :\r
// the syntax of question header and statement header\r
//\r
vfrStatementHeader[CIfrStatementHeader *SHObj] :\r
- Prompt "=" "STRING_TOKEN" "\(" S1:Number "\)" "," << $SHObj->SetPrompt (_STOSID(S1->getText())); >>\r
- Help "=" "STRING_TOKEN" "\(" S2:Number "\)" << $SHObj->SetHelp (_STOSID(S2->getText())); >>\r
+ 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
<<\r
EFI_VARSTORE_INFO Info;\r
+ Info.mVarType = EFI_IFR_TYPE_OTHER;\r
+ Info.mVarTotalSize = 0;\r
+ Info.mInfo.mVarOffset = EFI_VAROFFSET_INVALID;\r
+ Info.mVarStoreId = EFI_VARSTORE_ID_INVALID;\r
EFI_QUESTION_ID QId = EFI_QUESTION_ID_INVALID;\r
CHAR8 *QName = NULL;\r
CHAR8 *VarIdStr = NULL;\r
+ mUsedDefaultCount = 0;\r
>>\r
{\r
Name "=" QN:StringIdentifier "," <<\r
{ 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
<< \r
if (VarIdStr != NULL) {\r
delete VarIdStr; \r
- _SAVE_CURRQEST_VARINFO (Info);\r
}\r
+ _SAVE_CURRQEST_VARINFO (Info);\r
>>\r
;\r
\r
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
CHAR8 *TName = NULL;\r
EFI_VFR_RETURN_CODE VfrReturnCode = VFR_RETURN_SUCCESS;\r
EFI_IFR_TYPE_VALUE Dummy = gZeroEfiIfrTypeValue;\r
+ EFI_GUID *VarGuid = NULL;\r
>>\r
(\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
>>\r
<<\r
- VfrReturnCode = mCVfrDataStorage.GetVarStoreType (SName, VarStoreType);\r
+ VfrReturnCode = mCVfrDataStorage.GetVarStoreId(SName, &$Info.mVarStoreId);\r
if (mCompatibleMode && VfrReturnCode == VFR_RETURN_UNDEFINED) {\r
mCVfrDataStorage.DeclareBufferVarStore (\r
SName,\r
EFI_VARSTORE_ID_INVALID,\r
FALSE\r
);\r
- VfrReturnCode = mCVfrDataStorage.GetVarStoreType (SName, VarStoreType);\r
+ VfrReturnCode = mCVfrDataStorage.GetVarStoreId(SName, &$Info.mVarStoreId, &mFormsetGuid);\r
}\r
if (CheckFlag || VfrReturnCode == VFR_RETURN_SUCCESS) {\r
_PCATCH(VfrReturnCode, SN1);\r
- _PCATCH(mCVfrDataStorage.GetVarStoreId (SName, &$Info.mVarStoreId), SN1);\r
_PCATCH(mCVfrDataStorage.GetNameVarStoreInfo (&$Info, Idx), SN1);\r
}\r
\r
(\r
SN2:StringIdentifier << SName = SN2->getText(); _STRCAT(&VarIdStr, SName); >>\r
<<\r
- VfrReturnCode = mCVfrDataStorage.GetVarStoreType (SName, VarStoreType);\r
+ VfrReturnCode = mCVfrDataStorage.GetVarStoreId(SName, &$Info.mVarStoreId);\r
if (mCompatibleMode && VfrReturnCode == VFR_RETURN_UNDEFINED) {\r
mCVfrDataStorage.DeclareBufferVarStore (\r
SName,\r
EFI_VARSTORE_ID_INVALID,\r
FALSE\r
);\r
- VfrReturnCode = mCVfrDataStorage.GetVarStoreType (SName, VarStoreType);\r
+ VfrReturnCode = mCVfrDataStorage.GetVarStoreId(SName, &$Info.mVarStoreId, &mFormsetGuid);\r
}\r
if (CheckFlag || VfrReturnCode == VFR_RETURN_SUCCESS) {\r
_PCATCH(VfrReturnCode, SN2);\r
- _PCATCH(mCVfrDataStorage.GetVarStoreId (SName, &$Info.mVarStoreId), SN2);\r
+ VarStoreType = mCVfrDataStorage.GetVarStoreType ($Info.mVarStoreId);\r
if (VarStoreType == EFI_VFR_VARSTORE_BUFFER) {\r
- _PCATCH(mCVfrDataStorage.GetBufferVarStoreDataTypeName(SName, &TName), SN2);\r
+ _PCATCH(mCVfrDataStorage.GetBufferVarStoreDataTypeName(Info.mVarStoreId, &TName), SN2);\r
_STRCAT(&VarStr, TName);\r
}\r
}\r
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
break;\r
case EFI_VFR_VARSTORE_BUFFER:\r
_PCATCH(gCVfrVarDataTypeDB.GetDataFieldInfo (VarStr, $Info.mInfo.mVarOffset, $Info.mVarType, $Info.mVarTotalSize), SN2->getLine(), VarStr);\r
+ VarGuid = mCVfrDataStorage.GetVarStoreGuid($Info.mVarStoreId);\r
_PCATCH((EFI_VFR_RETURN_CODE)gCVfrBufferConfig.Register (\r
SName,\r
+ VarGuid,\r
NULL),\r
SN2->getLine());\r
_PCATCH((EFI_VFR_RETURN_CODE)gCVfrBufferConfig.Write (\r
'a',\r
SName,\r
+ VarGuid,\r
NULL,\r
$Info.mVarType,\r
$Info.mInfo.mVarOffset,\r
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
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
>>\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
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
// Just for framework vfr compatibility\r
vfrStatementInvalid |\r
vfrStatementExtension |\r
- vfrStatementModal\r
+ vfrStatementModal |\r
+ vfrStatementRefreshEvent ";"\r
)*\r
E:EndForm <<\r
if (mCompatibleMode) {\r
LObj3.SetNumber (0xffff); //add end label for UEFI, label number hardcode 0xffff\r
}\r
\r
- //\r
- // Declare undefined Question so that they can be used in expression.\r
- //\r
- if (gCFormPkg.HavePendingUnassigned()) {\r
- gCFormPkg.DeclarePendingQuestion (\r
- gCVfrVarDataTypeDB,\r
- mCVfrDataStorage,\r
- mCVfrQuestionDB,\r
- &mFormsetGuid,\r
- E->getLine()\r
- );\r
- }\r
-\r
- //\r
- // mCVfrQuestionDB.PrintAllQuestion();\r
- //\r
- CRT_END_OP (E);\r
+ {CIfrEnd EObj; EObj.SetLineNo (E->getLine()); mLastFormEndAddr = EObj.GetObjBinAddr (); gAdjustOpcodeOffset = EObj.GetObjBinOffset ();}\r
>>\r
";"\r
;\r
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
vfrStatementLabel |\r
vfrStatementBanner |\r
vfrStatementExtension |\r
- vfrStatementModal\r
+ vfrStatementModal |\r
+ vfrStatementRefreshEvent ";"\r
)*\r
E:EndForm << CRT_END_OP (E); >>\r
";"\r
<<\r
BOOLEAN IsExp = FALSE;\r
EFI_IFR_TYPE_VALUE Val = gZeroEfiIfrTypeValue;\r
- CIfrDefault DObj;\r
+ CIfrDefault *DObj = NULL;\r
+ CIfrDefault2 *DObj2 = NULL;\r
EFI_DEFAULT_ID DefaultId = EFI_HII_DEFAULT_CLASS_STANDARD;\r
CHAR8 *VarStoreName = NULL;\r
EFI_VFR_VARSTORE_TYPE VarStoreType = EFI_VFR_VARSTORE_INVALID;\r
+ UINT32 Size = 0;\r
+ EFI_GUID *VarGuid = NULL;\r
>>\r
- D:Default << DObj.SetLineNo(D->getLine()); >>\r
+ D:Default \r
(\r
(\r
- vfrStatementValue "," << IsExp = TRUE; DObj.SetScope (1); CIfrEnd EndObj1; EndObj1.SetLineNo(D->getLine()); >>\r
- | "=" vfrConstantValueField[_GET_CURRQEST_DATATYPE()] > [Val] "," << \r
+ "=" vfrConstantValueField[_GET_CURRQEST_DATATYPE()] > [Val] "," \r
+ << \r
if (gCurrentMinMaxData != NULL && gCurrentMinMaxData->IsNumericOpcode()) {\r
//check default value is valid for Numeric Opcode\r
if (Val.u64 < gCurrentMinMaxData->GetMinData(_GET_CURRQEST_DATATYPE()) || Val.u64 > gCurrentMinMaxData->GetMaxData(_GET_CURRQEST_DATATYPE())) {\r
_PCATCH (VFR_RETURN_INVALID_PARAMETER, D->getLine(), "Numeric default value must be between MinValue and MaxValue.");\r
}\r
}\r
- DObj.SetType (_GET_CURRQEST_DATATYPE()); \r
- DObj.SetValue(Val);\r
+ if (_GET_CURRQEST_DATATYPE() == EFI_IFR_TYPE_OTHER) {\r
+ _PCATCH (VFR_RETURN_FATAL_ERROR, D->getLine(), "Default data type error.");\r
+ Size = sizeof (EFI_IFR_TYPE_VALUE);\r
+ } else {\r
+ _PCATCH (gCVfrVarDataTypeDB.GetDataTypeSize (_GET_CURRQEST_DATATYPE(), &Size), D->getLine());\r
+ }\r
+ Size += OFFSET_OF (EFI_IFR_DEFAULT, Value);\r
+ DObj = new CIfrDefault ((UINT8)Size);\r
+ DObj->SetLineNo(D->getLine());\r
+ DObj->SetType (_GET_CURRQEST_DATATYPE()); \r
+ DObj->SetValue(Val);\r
>>\r
+ | << IsExp = TRUE; DObj2 = new CIfrDefault2; DObj2->SetLineNo(D->getLine()); DObj2->SetScope (1); >>\r
+ vfrStatementValue "," << CIfrEnd EndObj1; EndObj1.SetLineNo(D->getLine()); >>\r
)\r
{\r
- DefaultStore "=" SN:StringIdentifier "," << _PCATCH(mCVfrDefaultStore.GetDefaultId (SN->getText(), &DefaultId), SN); DObj.SetDefaultId (DefaultId); >>\r
+ DefaultStore "=" SN:StringIdentifier "," << \r
+ _PCATCH(mCVfrDefaultStore.GetDefaultId (SN->getText(), &DefaultId), SN); \r
+ if (DObj != NULL) {\r
+ DObj->SetDefaultId (DefaultId); \r
+ } \r
+\r
+ if (DObj2 != NULL) {\r
+ DObj2->SetDefaultId (DefaultId); \r
+ }\r
+ >>\r
}\r
<<\r
+ CheckDuplicateDefaultValue (DefaultId, D);\r
+ if (_GET_CURRQEST_VARTINFO().mVarStoreId != EFI_VARSTORE_ID_INVALID) {\r
_PCATCH(mCVfrDataStorage.GetVarStoreName (_GET_CURRQEST_VARTINFO().mVarStoreId, &VarStoreName), D->getLine());\r
- _PCATCH(mCVfrDataStorage.GetVarStoreType (VarStoreName, VarStoreType), D->getLine());\r
+ VarGuid = mCVfrDataStorage.GetVarStoreGuid(_GET_CURRQEST_VARTINFO().mVarStoreId);\r
+ VarStoreType = mCVfrDataStorage.GetVarStoreType (_GET_CURRQEST_VARTINFO().mVarStoreId);\r
if ((IsExp == FALSE) && (VarStoreType == EFI_VFR_VARSTORE_BUFFER)) {\r
_PCATCH(mCVfrDefaultStore.BufferVarStoreAltConfigAdd (\r
DefaultId,\r
_GET_CURRQEST_VARTINFO(),\r
VarStoreName,\r
+ VarGuid,\r
_GET_CURRQEST_DATATYPE (),\r
- Val),\r
- D->getLine()\r
- );\r
+ Val),\r
+ D->getLine()\r
+ );\r
+ }\r
}\r
+ if (DObj != NULL) {delete DObj;} \r
+ if (DObj2 != NULL) {delete DObj2;} \r
>>\r
)\r
;\r
;\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
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
- { vfrStatementStatTagList "," }\r
- E:";" << CRT_END_OP (E); >>\r
+ (\r
+ {vfrStatementStatTagList "," }\r
+ E:";" << CRT_END_OP (E); >>\r
+ |\r
+ { "," vfrStatementStatTagList}\r
+ { "," (vfrStatementStat | vfrStatementQuestions)*}\r
+ D: EndSubtitle ";" << CRT_END_OP (D); >>\r
+ )\r
;\r
\r
vfrSubtitleFlags [CIfrSubtitle & SObj] :\r
;\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
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
}\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
;\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
EFI_QUESTION_ID QId = EFI_QUESTION_ID_INVALID;\r
UINT32 BitMask;\r
CIfrQuestionHeader *QHObj = NULL;\r
+ CIfrOpHeader *OHObj = NULL;\r
CIfrRef *R1Obj = NULL;\r
CIfrRef2 *R2Obj = NULL;\r
CIfrRef3 *R3Obj = NULL;\r
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
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 "," << mCVfrQuestionDB.GetQuestionId (QN3->getText (), NULL, QId, BitMask); >>\r
- | QN3:Number "," << QId = _STOQID(QN3->getText()); >>\r
+ QN3:StringIdentifier "," << \r
+ mCVfrQuestionDB.GetQuestionId (QN3->getText (), NULL, QId, BitMask);\r
+ if (QId == EFI_QUESTION_ID_INVALID) {\r
+ _PCATCH(VFR_RETURN_UNDEFINED, QN3);\r
+ }\r
+ >>\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
{\r
R5Obj = new CIfrRef5;\r
QHObj = R5Obj;\r
+ OHObj = R5Obj;\r
R5Obj->SetLineNo(G->getLine());\r
break;\r
}\r
{\r
R4Obj = new CIfrRef4;\r
QHObj = R4Obj;\r
+ OHObj = R4Obj;\r
R4Obj->SetLineNo(G->getLine());\r
R4Obj->SetDevicePath (DevPath);\r
R4Obj->SetFormSetId (FSId);\r
{\r
R3Obj = new CIfrRef3;\r
QHObj = R3Obj;\r
+ OHObj = R3Obj;\r
R3Obj->SetLineNo(G->getLine());\r
R3Obj->SetFormSetId (FSId);\r
R3Obj->SetFormId (FId);\r
{\r
R2Obj = new CIfrRef2;\r
QHObj = R2Obj;\r
+ OHObj = R2Obj;\r
R2Obj->SetLineNo(G->getLine());\r
R2Obj->SetFormId (FId);\r
- _PCATCH(R2Obj->SetQuestionId (QId), QN3);\r
+ R2Obj->SetQuestionId (QId);\r
break;\r
}\r
case 1:\r
{\r
R1Obj = new CIfrRef;\r
QHObj = R1Obj;\r
+ OHObj = R1Obj;\r
R1Obj->SetLineNo(G->getLine());\r
R1Obj->SetFormId (FId);\r
break;\r
default: break;\r
}\r
>>\r
- vfrQuestionHeader[*QHObj, QUESTION_REF]\r
- { "," vfrStatementStatTagList }\r
+ vfrQuestionHeader[*QHObj, QUESTION_REF] <<\r
+ if (_GET_CURRQEST_DATATYPE() == EFI_IFR_TYPE_OTHER) {\r
+ _GET_CURRQEST_VARTINFO().mVarType = EFI_IFR_TYPE_REF;\r
+ }\r
+ >>\r
{ "," F:FLAGS "=" vfrGotoFlags[QHObj, F->getLine()] }\r
{\r
"," Key "=" KN:Number << AssignQuestionKey (*QHObj, KN); >>\r
}\r
+ {\r
+ E:"," \r
+ vfrStatementQuestionOptionList << OHObj->SetScope(1); CRT_END_OP (E);>>\r
+ }\r
";" << if (R1Obj != NULL) {delete R1Obj;} if (R2Obj != NULL) {delete R2Obj;} if (R3Obj != NULL) {delete R3Obj;} if (R4Obj != NULL) {delete R4Obj;} if (R5Obj != NULL) {delete R5Obj;}>>\r
;\r
\r
;\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
EFI_IFR_TYPE_VALUE Val = gZeroEfiIfrTypeValue;\r
CHAR8 *VarStoreName = NULL;\r
UINT32 DataTypeSize;\r
+ EFI_GUID *VarStoreGuid = NULL;\r
>>\r
L:CheckBox << CBObj.SetLineNo(L->getLine()); >>\r
vfrQuestionHeader[CBObj] "," << //check data type\r
- _PCATCH (gCVfrVarDataTypeDB.GetDataTypeSize (_GET_CURRQEST_DATATYPE(), &DataTypeSize), L->getLine(), "CheckBox varid is not the valid data type");\r
- if (DataTypeSize != 0 && DataTypeSize != _GET_CURRQEST_VARSIZE()) {\r
- _PCATCH (VFR_RETURN_INVALID_PARAMETER, L->getLine(), "CheckBox varid doesn't support array");\r
- } else if ((mCVfrDataStorage.GetVarStoreType (_GET_CURRQEST_VARTINFO().mVarStoreId) == EFI_VFR_VARSTORE_BUFFER) &&\r
- (_GET_CURRQEST_VARSIZE() != sizeof (BOOLEAN))) {\r
- _PCATCH (VFR_RETURN_INVALID_PARAMETER, L->getLine(), "CheckBox varid only support BOOLEAN data type");\r
+ if (_GET_CURRQEST_DATATYPE() == EFI_IFR_TYPE_OTHER) {\r
+ _GET_CURRQEST_VARTINFO().mVarType = EFI_IFR_TYPE_BOOLEAN;\r
+ }\r
+ if (_GET_CURRQEST_VARTINFO().mVarStoreId != EFI_VARSTORE_ID_INVALID) {\r
+ _PCATCH (gCVfrVarDataTypeDB.GetDataTypeSize (_GET_CURRQEST_DATATYPE(), &DataTypeSize), L->getLine(), "CheckBox varid is not the valid data type");\r
+ if (DataTypeSize != 0 && DataTypeSize != _GET_CURRQEST_VARSIZE()) {\r
+ _PCATCH (VFR_RETURN_INVALID_PARAMETER, L->getLine(), "CheckBox varid doesn't support array");\r
+ } else if ((mCVfrDataStorage.GetVarStoreType (_GET_CURRQEST_VARTINFO().mVarStoreId) == EFI_VFR_VARSTORE_BUFFER) &&\r
+ (_GET_CURRQEST_VARSIZE() != sizeof (BOOLEAN))) {\r
+ _PCATCH (VFR_RETURN_INVALID_PARAMETER, L->getLine(), "CheckBox varid only support BOOLEAN data type");\r
+ }\r
}\r
>>\r
{\r
F:FLAGS "=" vfrCheckBoxFlags[CBObj, F->getLine()] ","\r
<<\r
- _PCATCH(mCVfrDataStorage.GetVarStoreName (_GET_CURRQEST_VARTINFO().mVarStoreId, &VarStoreName), VFR_RETURN_SUCCESS, L, "Failed to retrieve varstore name");\r
- Val.b = TRUE;\r
- if (CBObj.GetFlags () & 0x01) {\r
- _PCATCH(\r
- mCVfrDefaultStore.BufferVarStoreAltConfigAdd (\r
- EFI_HII_DEFAULT_CLASS_STANDARD,\r
- _GET_CURRQEST_VARTINFO(),\r
- VarStoreName,\r
- _GET_CURRQEST_DATATYPE (),\r
- Val\r
- ),\r
- VFR_RETURN_SUCCESS,\r
- L,\r
- "No standard default storage found"\r
- );\r
- }\r
- if (CBObj.GetFlags () & 0x02) {\r
- _PCATCH(\r
- mCVfrDefaultStore.BufferVarStoreAltConfigAdd (\r
- EFI_HII_DEFAULT_CLASS_MANUFACTURING,\r
- _GET_CURRQEST_VARTINFO(),\r
- VarStoreName,\r
- _GET_CURRQEST_DATATYPE (),\r
- Val\r
- ),\r
- VFR_RETURN_SUCCESS,\r
- L,\r
- "No manufacturing default storage found"\r
- );\r
+ if (_GET_CURRQEST_VARTINFO().mVarStoreId != EFI_VARSTORE_ID_INVALID) {\r
+ _PCATCH(mCVfrDataStorage.GetVarStoreName (_GET_CURRQEST_VARTINFO().mVarStoreId, &VarStoreName), VFR_RETURN_SUCCESS, L, "Failed to retrieve varstore name");\r
+ VarStoreGuid = mCVfrDataStorage.GetVarStoreGuid(_GET_CURRQEST_VARTINFO().mVarStoreId);\r
+ Val.b = TRUE;\r
+ if (CBObj.GetFlags () & 0x01) {\r
+ CheckDuplicateDefaultValue (EFI_HII_DEFAULT_CLASS_STANDARD, F);\r
+ _PCATCH(\r
+ mCVfrDefaultStore.BufferVarStoreAltConfigAdd (\r
+ EFI_HII_DEFAULT_CLASS_STANDARD,\r
+ _GET_CURRQEST_VARTINFO(),\r
+ VarStoreName,\r
+ VarStoreGuid,\r
+ _GET_CURRQEST_DATATYPE (),\r
+ Val\r
+ ),\r
+ VFR_RETURN_SUCCESS,\r
+ L,\r
+ "No standard default storage found"\r
+ );\r
+ }\r
+ if (CBObj.GetFlags () & 0x02) {\r
+ CheckDuplicateDefaultValue (EFI_HII_DEFAULT_CLASS_MANUFACTURING, F);\r
+ _PCATCH(\r
+ mCVfrDefaultStore.BufferVarStoreAltConfigAdd (\r
+ EFI_HII_DEFAULT_CLASS_MANUFACTURING,\r
+ _GET_CURRQEST_VARTINFO(),\r
+ VarStoreName,\r
+ VarStoreGuid,\r
+ _GET_CURRQEST_DATATYPE (),\r
+ Val\r
+ ),\r
+ VFR_RETURN_SUCCESS,\r
+ L,\r
+ "No manufacturing default storage found"\r
+ );\r
+ }\r
}\r
>>\r
}\r
//\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
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
;\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
CHAR8 *VarIdStr[3] = {NULL, };\r
CIfrDate DObj;\r
EFI_IFR_TYPE_VALUE Val = gZeroEfiIfrTypeValue;\r
+ UINT8 Size = OFFSET_OF (EFI_IFR_DEFAULT, Value) + sizeof (EFI_HII_DATE);\r
>>\r
L:Date << DObj.SetLineNo(L->getLine()); >>\r
(\r
(\r
- vfrQuestionHeader[DObj, QUESTION_DATE] ","\r
+ vfrQuestionHeader[DObj, QUESTION_DATE] "," <<\r
+ if (_GET_CURRQEST_DATATYPE() == EFI_IFR_TYPE_OTHER) {\r
+ _GET_CURRQEST_VARTINFO().mVarType = EFI_IFR_TYPE_DATE;\r
+ }\r
+ >>\r
{ F:FLAGS "=" vfrDateFlags[DObj, F->getLine()] "," }\r
vfrStatementQuestionOptionList\r
)\r
Prompt "=" "STRING_TOKEN" "\(" DP:Number "\)" ","\r
Help "=" "STRING_TOKEN" "\(" DH:Number "\)" ","\r
minMaxDateStepDefault[Val.date, 2]\r
+ { G:FLAGS "=" vfrDateFlags[DObj, G->getLine()] "," }\r
<<\r
mCVfrQuestionDB.RegisterOldDateQuestion (VarIdStr[0], VarIdStr[1], VarIdStr[2], QId);\r
DObj.SetQuestionId (QId);\r
DObj.SetFlags (EFI_IFR_QUESTION_FLAG_DEFAULT, QF_DATE_STORAGE_TIME);\r
- DObj.SetPrompt (_STOSID(YP->getText()));\r
- DObj.SetHelp (_STOSID(YH->getText()));\r
+ 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(EFI_HII_DEFAULT_CLASS_STANDARD, EFI_IFR_TYPE_DATE, Val); DefaultObj.SetLineNo(L->getLine());} >>\r
+ << {CIfrDefault DefaultObj(Size, EFI_HII_DEFAULT_CLASS_STANDARD, EFI_IFR_TYPE_DATE, Val); DefaultObj.SetLineNo(L->getLine());} >>\r
)\r
( vfrStatementInconsistentIf )*\r
)\r
"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
;\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
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
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
vfrStatementNumeric :\r
<<\r
CIfrNumeric NObj;\r
- UINT32 DataTypeSize;\r
- BOOLEAN IsSupported;\r
+ UINT32 DataTypeSize;\r
+ BOOLEAN IsSupported = TRUE;\r
+ UINT8 ShrinkSize = 0;\r
>>\r
L:Numeric << NObj.SetLineNo(L->getLine()); >>\r
vfrQuestionHeader[NObj] "," << // check data type\r
- _PCATCH (gCVfrVarDataTypeDB.GetDataTypeSize (_GET_CURRQEST_DATATYPE(), &DataTypeSize), L->getLine(), "Numeric varid is not the valid data type");\r
- if (DataTypeSize != 0 && DataTypeSize != _GET_CURRQEST_VARSIZE()) {\r
- _PCATCH (VFR_RETURN_INVALID_PARAMETER, L->getLine(), "Numeric varid doesn't support array");\r
+ if (_GET_CURRQEST_VARTINFO().mVarStoreId != EFI_VARSTORE_ID_INVALID) {\r
+ _PCATCH (gCVfrVarDataTypeDB.GetDataTypeSize (_GET_CURRQEST_DATATYPE(), &DataTypeSize), L->getLine(), "Numeric varid is not the valid data type");\r
+ if (DataTypeSize != 0 && DataTypeSize != _GET_CURRQEST_VARSIZE()) {\r
+ _PCATCH (VFR_RETURN_INVALID_PARAMETER, L->getLine(), "Numeric varid doesn't support array");\r
+ }\r
+ _PCATCH(NObj.SetFlags (NObj.FLAGS(), _GET_CURRQEST_DATATYPE()), L->getLine());\r
}\r
- _PCATCH(NObj.SetFlags (NObj.FLAGS(), _GET_CURRQEST_DATATYPE()), L->getLine());\r
>>\r
{ F:FLAGS "=" vfrNumericFlags[NObj, F->getLine()] "," }\r
{\r
Key "=" KN:Number "," << AssignQuestionKey (NObj, KN); >>\r
}\r
- vfrSetMinMaxStep[NObj]\r
- vfrStatementQuestionOptionList\r
- E:EndNumeric << \r
- IsSupported = FALSE;\r
+ vfrSetMinMaxStep[NObj] <<\r
switch (_GET_CURRQEST_DATATYPE()) {\r
- case EFI_IFR_TYPE_NUM_SIZE_8:\r
- case EFI_IFR_TYPE_NUM_SIZE_16:\r
- case EFI_IFR_TYPE_NUM_SIZE_32:\r
- case EFI_IFR_TYPE_NUM_SIZE_64:\r
- IsSupported = TRUE;\r
- break;\r
- default:\r
+ //\r
+ // Base on the type to know the actual used size,shrink the buffer \r
+ // size allocate before.\r
+ //\r
+ case EFI_IFR_TYPE_NUM_SIZE_8: ShrinkSize = 21;break;\r
+ case EFI_IFR_TYPE_NUM_SIZE_16:ShrinkSize = 18;break;\r
+ case EFI_IFR_TYPE_NUM_SIZE_32:ShrinkSize = 12;break;\r
+ case EFI_IFR_TYPE_NUM_SIZE_64:break;\r
+ default: \r
+ IsSupported = FALSE;\r
break;\r
}\r
+ NObj.ShrinkBinSize (ShrinkSize);\r
if (!IsSupported) {\r
_PCATCH (VFR_RETURN_INVALID_PARAMETER, L->getLine(), "Numeric question only support UINT8, UINT16, UINT32 and UINT64 data type.");\r
}\r
+ >>\r
+ vfrStatementQuestionOptionList\r
+ E:EndNumeric << \r
CRT_END_OP (E); \r
>>\r
";"\r
UINT8 LFlags = _GET_CURRQEST_DATATYPE() & EFI_IFR_NUMERIC_SIZE;\r
UINT8 HFlags = 0;\r
EFI_VFR_VARSTORE_TYPE VarStoreType = EFI_VFR_VARSTORE_INVALID;\r
+ BOOLEAN IsSetType = FALSE;\r
+ BOOLEAN IsDisplaySpecified = FALSE;\r
>>\r
- numericFlagsField[HFlags, LFlags] ( "\|" numericFlagsField[HFlags, LFlags] )*\r
+ numericFlagsField[HFlags, LFlags, IsSetType, IsDisplaySpecified] ( "\|" numericFlagsField[HFlags, LFlags, IsSetType, IsDisplaySpecified ] )*\r
<<\r
//check data type flag\r
- VarStoreType = mCVfrDataStorage.GetVarStoreType (_GET_CURRQEST_VARTINFO().mVarStoreId);\r
- if (VarStoreType == EFI_VFR_VARSTORE_BUFFER || VarStoreType == EFI_VFR_VARSTORE_EFI) {\r
- if (_GET_CURRQEST_DATATYPE() != (LFlags & EFI_IFR_NUMERIC_SIZE)) {\r
- _PCATCH(VFR_RETURN_INVALID_PARAMETER, LineNum, "Numeric Flag is not same to Numeric VarData type");\r
+ if (_GET_CURRQEST_VARTINFO().mVarStoreId != EFI_VARSTORE_ID_INVALID) {\r
+ VarStoreType = mCVfrDataStorage.GetVarStoreType (_GET_CURRQEST_VARTINFO().mVarStoreId);\r
+ if (VarStoreType == EFI_VFR_VARSTORE_BUFFER || VarStoreType == EFI_VFR_VARSTORE_EFI) {\r
+ if (_GET_CURRQEST_DATATYPE() != (LFlags & EFI_IFR_NUMERIC_SIZE)) {\r
+ _PCATCH(VFR_RETURN_INVALID_PARAMETER, LineNum, "Numeric Flag is not same to Numeric VarData type");\r
+ }\r
+ } else {\r
+ // update data type for name/value store\r
+ UINT32 DataTypeSize;\r
+ _GET_CURRQEST_VARTINFO().mVarType = LFlags & EFI_IFR_NUMERIC_SIZE;\r
+ gCVfrVarDataTypeDB.GetDataTypeSize (_GET_CURRQEST_DATATYPE(), &DataTypeSize);\r
+ _GET_CURRQEST_VARTINFO().mVarTotalSize = DataTypeSize;\r
}\r
- } else {\r
- // update data type for name/value store\r
- UINT32 DataTypeSize;\r
+ } else if (IsSetType){\r
_GET_CURRQEST_VARTINFO().mVarType = LFlags & EFI_IFR_NUMERIC_SIZE;\r
- gCVfrVarDataTypeDB.GetDataTypeSize (_GET_CURRQEST_DATATYPE(), &DataTypeSize);\r
- _GET_CURRQEST_VARTINFO().mVarTotalSize = DataTypeSize;\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] :\r
- N:Number << _PCATCH(_STOU8(N->getText()) == 0 ? VFR_RETURN_SUCCESS : VFR_RETURN_UNSUPPORTED, N->getLine()); >>\r
- | "NUMERIC_SIZE_1" << $LFlags = ($LFlags & ~EFI_IFR_NUMERIC_SIZE) | EFI_IFR_NUMERIC_SIZE_1; >>\r
- | "NUMERIC_SIZE_2" << $LFlags = ($LFlags & ~EFI_IFR_NUMERIC_SIZE) | EFI_IFR_NUMERIC_SIZE_2; >>\r
- | "NUMERIC_SIZE_4" << $LFlags = ($LFlags & ~EFI_IFR_NUMERIC_SIZE) | EFI_IFR_NUMERIC_SIZE_4; >>\r
- | "NUMERIC_SIZE_8" << $LFlags = ($LFlags & ~EFI_IFR_NUMERIC_SIZE) | EFI_IFR_NUMERIC_SIZE_8; >>\r
- | "DISPLAY_INT_DEC" << $LFlags = ($LFlags & ~EFI_IFR_DISPLAY) | EFI_IFR_DISPLAY_INT_DEC; >>\r
- | "DISPLAY_UINT_DEC" << $LFlags = ($LFlags & ~EFI_IFR_DISPLAY) | EFI_IFR_DISPLAY_UINT_DEC; >>\r
- | "DISPLAY_UINT_HEX" << $LFlags = ($LFlags & ~EFI_IFR_DISPLAY) | EFI_IFR_DISPLAY_UINT_HEX; >>\r
+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; 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
<<\r
CIfrOneOf OObj;\r
UINT32 DataTypeSize;\r
- BOOLEAN IsSupported;\r
+ BOOLEAN IsSupported = TRUE;\r
+ UINT8 ShrinkSize = 0;\r
>>\r
L:OneOf << OObj.SetLineNo(L->getLine()); >>\r
vfrQuestionHeader[OObj] "," << //check data type\r
- _PCATCH (gCVfrVarDataTypeDB.GetDataTypeSize (_GET_CURRQEST_DATATYPE(), &DataTypeSize), L->getLine(), "OneOf varid is not the valid data type");\r
- if (DataTypeSize != 0 && DataTypeSize != _GET_CURRQEST_VARSIZE()) {\r
- _PCATCH (VFR_RETURN_INVALID_PARAMETER, L->getLine(), "OneOf varid doesn't support array");\r
+ if (_GET_CURRQEST_VARTINFO().mVarStoreId != EFI_VARSTORE_ID_INVALID) {\r
+ _PCATCH (gCVfrVarDataTypeDB.GetDataTypeSize (_GET_CURRQEST_DATATYPE(), &DataTypeSize), L->getLine(), "OneOf varid is not the valid data type");\r
+ if (DataTypeSize != 0 && DataTypeSize != _GET_CURRQEST_VARSIZE()) {\r
+ _PCATCH (VFR_RETURN_INVALID_PARAMETER, L->getLine(), "OneOf varid doesn't support array");\r
+ }\r
+ _PCATCH(OObj.SetFlags (OObj.FLAGS(), _GET_CURRQEST_DATATYPE()), L->getLine());\r
}\r
- _PCATCH(OObj.SetFlags (OObj.FLAGS(), _GET_CURRQEST_DATATYPE()), L->getLine());\r
>>\r
{ F:FLAGS "=" vfrOneofFlagsField[OObj, F->getLine()] "," }\r
{\r
vfrSetMinMaxStep[OObj]\r
}\r
- vfrStatementQuestionOptionList\r
- E:EndOneOf << \r
- IsSupported = FALSE;\r
+ <<\r
switch (_GET_CURRQEST_DATATYPE()) {\r
- case EFI_IFR_TYPE_NUM_SIZE_8:\r
- case EFI_IFR_TYPE_NUM_SIZE_16:\r
- case EFI_IFR_TYPE_NUM_SIZE_32:\r
- case EFI_IFR_TYPE_NUM_SIZE_64:\r
- IsSupported = TRUE;\r
- break;\r
+ //\r
+ // Base on the type to know the actual used size,shrink the buffer \r
+ // size allocate before.\r
+ //\r
+ case EFI_IFR_TYPE_NUM_SIZE_8: ShrinkSize = 21;break;\r
+ case EFI_IFR_TYPE_NUM_SIZE_16:ShrinkSize = 18;break;\r
+ case EFI_IFR_TYPE_NUM_SIZE_32:ShrinkSize = 12;break;\r
+ case EFI_IFR_TYPE_NUM_SIZE_64:break;\r
default:\r
+ IsSupported = FALSE;\r
break;\r
}\r
+ OObj.ShrinkBinSize (ShrinkSize);\r
if (!IsSupported) {\r
_PCATCH (VFR_RETURN_INVALID_PARAMETER, L->getLine(), "OneOf question only support UINT8, UINT16, UINT32 and UINT64 data type.");\r
}\r
+ >>\r
+ vfrStatementQuestionOptionList\r
+ E:EndOneOf <<\r
CRT_END_OP (E); \r
>>\r
";"\r
UINT8 LFlags = _GET_CURRQEST_DATATYPE() & EFI_IFR_NUMERIC_SIZE;\r
UINT8 HFlags = 0;\r
EFI_VFR_VARSTORE_TYPE VarStoreType = EFI_VFR_VARSTORE_INVALID;\r
+ BOOLEAN IsSetType = FALSE;\r
+ BOOLEAN IsDisplaySpecified = FALSE;\r
>>\r
- numericFlagsField[HFlags, LFlags] ( "\|" numericFlagsField[HFlags, LFlags] )*\r
+ numericFlagsField[HFlags, LFlags, IsSetType, IsDisplaySpecified] ( "\|" numericFlagsField[HFlags, LFlags, IsSetType, IsDisplaySpecified] )*\r
<<\r
//check data type flag\r
- VarStoreType = mCVfrDataStorage.GetVarStoreType (_GET_CURRQEST_VARTINFO().mVarStoreId);\r
- if (VarStoreType == EFI_VFR_VARSTORE_BUFFER || VarStoreType == EFI_VFR_VARSTORE_EFI) {\r
- if (_GET_CURRQEST_DATATYPE() != (LFlags & EFI_IFR_NUMERIC_SIZE)) {\r
- _PCATCH(VFR_RETURN_INVALID_PARAMETER, LineNum, "Numeric Flag is not same to Numeric VarData type");\r
+ if (_GET_CURRQEST_VARTINFO().mVarStoreId != EFI_VARSTORE_ID_INVALID) {\r
+ VarStoreType = mCVfrDataStorage.GetVarStoreType (_GET_CURRQEST_VARTINFO().mVarStoreId);\r
+ if (VarStoreType == EFI_VFR_VARSTORE_BUFFER || VarStoreType == EFI_VFR_VARSTORE_EFI) {\r
+ if (_GET_CURRQEST_DATATYPE() != (LFlags & EFI_IFR_NUMERIC_SIZE)) {\r
+ _PCATCH(VFR_RETURN_INVALID_PARAMETER, LineNum, "Numeric Flag is not same to Numeric VarData type");\r
+ }\r
+ } else {\r
+ // update data type for Name/Value store\r
+ UINT32 DataTypeSize;\r
+ _GET_CURRQEST_VARTINFO().mVarType = LFlags & EFI_IFR_NUMERIC_SIZE;\r
+ gCVfrVarDataTypeDB.GetDataTypeSize (_GET_CURRQEST_DATATYPE(), &DataTypeSize);\r
+ _GET_CURRQEST_VARTINFO().mVarTotalSize = DataTypeSize;\r
}\r
- } else {\r
- // update data type for Name/Value store\r
- UINT32 DataTypeSize;\r
+ } else if (IsSetType){\r
_GET_CURRQEST_VARTINFO().mVarType = LFlags & EFI_IFR_NUMERIC_SIZE;\r
- gCVfrVarDataTypeDB.GetDataTypeSize (_GET_CURRQEST_DATATYPE(), &DataTypeSize);\r
- _GET_CURRQEST_VARTINFO().mVarTotalSize = DataTypeSize;\r
}\r
_PCATCH(OObj.SetFlags (HFlags, LFlags), LineNum);\r
>>\r
}\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
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
;\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
}\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
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
;\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
>>\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
;\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
CHAR8 *VarIdStr[3] = {NULL, };\r
CIfrTime TObj;\r
EFI_IFR_TYPE_VALUE Val = gZeroEfiIfrTypeValue;\r
+ UINT8 Size = OFFSET_OF (EFI_IFR_DEFAULT, Value) + sizeof (EFI_HII_TIME);\r
>>\r
L:Time << TObj.SetLineNo(L->getLine()); >>\r
(\r
(\r
- vfrQuestionHeader[TObj, QUESTION_TIME] ","\r
+ vfrQuestionHeader[TObj, QUESTION_TIME] "," <<\r
+ if (_GET_CURRQEST_DATATYPE() == EFI_IFR_TYPE_OTHER) {\r
+ _GET_CURRQEST_VARTINFO().mVarType = EFI_IFR_TYPE_TIME;\r
+ }\r
+ >>\r
{ F:FLAGS "=" vfrTimeFlags[TObj, F->getLine()] "," }\r
vfrStatementQuestionOptionList\r
)\r
Prompt "=" "STRING_TOKEN" "\(" SP:Number "\)" ","\r
Help "=" "STRING_TOKEN" "\(" SH:Number "\)" ","\r
minMaxTimeStepDefault[Val.time, 2]\r
+ { G:FLAGS "=" vfrTimeFlags[TObj, G->getLine()] "," }\r
<<\r
mCVfrQuestionDB.RegisterOldTimeQuestion (VarIdStr[0], VarIdStr[1], VarIdStr[2], QId);\r
TObj.SetQuestionId (QId);\r
TObj.SetFlags (EFI_IFR_QUESTION_FLAG_DEFAULT, QF_TIME_STORAGE_TIME);\r
- TObj.SetPrompt (_STOSID(HP->getText()));\r
- TObj.SetHelp (_STOSID(HH->getText()));\r
+ 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(EFI_HII_DEFAULT_CLASS_STANDARD, EFI_IFR_TYPE_TIME, Val); DefaultObj.SetLineNo(L->getLine());} >>\r
+ << {CIfrDefault DefaultObj(Size, EFI_HII_DEFAULT_CLASS_STANDARD, EFI_IFR_TYPE_TIME, Val); DefaultObj.SetLineNo(L->getLine());} >>\r
)\r
( vfrStatementInconsistentIf )*\r
)\r
"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
;\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
vfrStatementRefresh |\r
vfrStatementVarstoreDevice |\r
vfrStatementExtension |\r
- vfrStatementRefreshEvent\r
+ vfrStatementRefreshEvent "," |\r
+ vfrStatementWarningIf\r
;\r
\r
vfrStatementQuestionTagList :\r
}\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
\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
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
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
;\r
\r
+vfrStatementWarningIf :\r
+ << CIfrWarningIf WIObj; >>\r
+ L:WarningIf << WIObj.SetLineNo(L->getLine()); >>\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
+\r
vfrStatementDisableIfQuest :\r
<< \r
CIfrDisableIf DIObj; \r
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
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
\r
vfrStatementOneOfOption :\r
<<\r
- EFI_IFR_TYPE_VALUE Val = gZeroEfiIfrTypeValue;\r
- CIfrOneOfOption OOOObj;\r
+ EFI_IFR_TYPE_VALUE Val = gZeroEfiIfrTypeValue;\r
CHAR8 *VarStoreName = NULL;\r
+ UINT32 Size = 0;\r
+ BOOLEAN TypeError = FALSE;\r
+ EFI_VFR_RETURN_CODE ReturnCode = VFR_RETURN_SUCCESS;\r
+ EFI_GUID *VarStoreGuid = NULL;\r
+ \r
+ if (_GET_CURRQEST_DATATYPE() == EFI_IFR_TYPE_OTHER) {\r
+ TypeError = TRUE;\r
+ Size = sizeof (EFI_IFR_TYPE_VALUE);\r
+ } else {\r
+ ReturnCode = gCVfrVarDataTypeDB.GetDataTypeSize (_GET_CURRQEST_DATATYPE(), &Size);\r
+ }\r
+\r
+ Size += OFFSET_OF (EFI_IFR_ONE_OF_OPTION, Value);\r
+ CIfrOneOfOption OOOObj ((UINT8)Size);\r
>>\r
- L:Option << OOOObj.SetLineNo(L->getLine()); >>\r
- Text "=" "STRING_TOKEN" "\(" S:Number "\)" "," << OOOObj.SetOption (_STOSID(S->getText())); >>\r
+ L:Option << \r
+ OOOObj.SetLineNo(L->getLine());\r
+ if (TypeError) {\r
+ _PCATCH (VFR_RETURN_FATAL_ERROR, L->getLine(), "Get data type error.");\r
+ }\r
+ if (ReturnCode != VFR_RETURN_SUCCESS) {\r
+ _PCATCH (ReturnCode, L->getLine());\r
+ }\r
+ >>\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
>>\r
F:FLAGS "=" vfrOneOfOptionFlags[OOOObj, F->getLine()]\r
<<\r
- _PCATCH(mCVfrDataStorage.GetVarStoreName (_GET_CURRQEST_VARTINFO().mVarStoreId, &VarStoreName), L->getLine());\r
- if (OOOObj.GetFlags () & 0x10) {\r
- _PCATCH(mCVfrDefaultStore.BufferVarStoreAltConfigAdd (\r
- EFI_HII_DEFAULT_CLASS_STANDARD,\r
- _GET_CURRQEST_VARTINFO(),\r
- VarStoreName,\r
- _GET_CURRQEST_DATATYPE (),\r
- Val\r
- ), L->getLine());\r
- }\r
- if (OOOObj.GetFlags () & 0x20) {\r
- _PCATCH(mCVfrDefaultStore.BufferVarStoreAltConfigAdd (\r
- EFI_HII_DEFAULT_CLASS_MANUFACTURING,\r
- _GET_CURRQEST_VARTINFO(),\r
- VarStoreName,\r
- _GET_CURRQEST_DATATYPE (),\r
- Val\r
- ), L->getLine());\r
+ if (_GET_CURRQEST_VARTINFO().mVarStoreId != EFI_VARSTORE_ID_INVALID) {\r
+ _PCATCH(mCVfrDataStorage.GetVarStoreName (_GET_CURRQEST_VARTINFO().mVarStoreId, &VarStoreName), L->getLine());\r
+ VarStoreGuid = mCVfrDataStorage.GetVarStoreGuid(_GET_CURRQEST_VARTINFO().mVarStoreId);\r
+ if (OOOObj.GetFlags () & 0x10) {\r
+ CheckDuplicateDefaultValue (EFI_HII_DEFAULT_CLASS_STANDARD, F);\r
+ _PCATCH(mCVfrDefaultStore.BufferVarStoreAltConfigAdd (\r
+ EFI_HII_DEFAULT_CLASS_STANDARD,\r
+ _GET_CURRQEST_VARTINFO(),\r
+ VarStoreName,\r
+ VarStoreGuid,\r
+ _GET_CURRQEST_DATATYPE (),\r
+ Val\r
+ ), L->getLine());\r
+ }\r
+ if (OOOObj.GetFlags () & 0x20) {\r
+ CheckDuplicateDefaultValue (EFI_HII_DEFAULT_CLASS_MANUFACTURING, F);\r
+ _PCATCH(mCVfrDefaultStore.BufferVarStoreAltConfigAdd (\r
+ EFI_HII_DEFAULT_CLASS_MANUFACTURING,\r
+ _GET_CURRQEST_VARTINFO(),\r
+ VarStoreName,\r
+ VarStoreGuid,\r
+ _GET_CURRQEST_DATATYPE (),\r
+ Val\r
+ ), L->getLine());\r
+ }\r
}\r
>>\r
{\r
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
;\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
{\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
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
)\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
| ideqvalExp[$RootLevel, $ExpOpCount]\r
| ideqidExp[$RootLevel, $ExpOpCount]\r
| ideqvallistExp[$RootLevel, $ExpOpCount]\r
- | questionref13Exp[$RootLevel, $ExpOpCount]\r
+ | questionref1Exp[$RootLevel, $ExpOpCount]\r
| rulerefExp[$RootLevel, $ExpOpCount]\r
| stringref1Exp[$RootLevel, $ExpOpCount]\r
| pushthisExp[$RootLevel, $ExpOpCount]\r
UINT16 ConstVal;\r
CHAR8 *VarIdStr;\r
UINT32 LineNo;\r
- EFI_VFR_VARSTORE_TYPE VarStoreType = EFI_VFR_VARSTORE_INVALID;\r
EFI_VFR_RETURN_CODE VfrReturnCode = VFR_RETURN_SUCCESS;\r
+ EFI_VARSTORE_ID VarStoreId = EFI_VARSTORE_ID_INVALID;\r
>>\r
L:VarEqVal <<\r
if (!mCompatibleMode) {\r
OpenParen\r
VN:Number <<\r
VarIdStr = NULL; _STRCAT(&VarIdStr, VK->getText()); _STRCAT(&VarIdStr, VN->getText());\r
- VfrReturnCode = mCVfrDataStorage.GetVarStoreType (VarIdStr, VarStoreType);\r
+ VfrReturnCode = mCVfrDataStorage.GetVarStoreId (VarIdStr, &VarStoreId);\r
if (VfrReturnCode == VFR_RETURN_UNDEFINED) {\r
_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
(\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
|\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
(\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
|\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
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
>>\r
;\r
\r
-questionref13Exp[UINT32 & RootLevel, UINT32 & ExpOpCount] :\r
+questionref1Exp[UINT32 & RootLevel, UINT32 & ExpOpCount] :\r
<<\r
- UINT8 Type = 0x1;\r
- EFI_STRING_ID DevPath = EFI_STRING_ID_INVALID;\r
- EFI_GUID Guid = {0,};\r
EFI_QUESTION_ID QId = EFI_QUESTION_ID_INVALID;\r
UINT32 BitMask;\r
CHAR8 *QName = NULL;\r
UINT32 LineNo = 0;\r
>>\r
L:QuestionRef\r
- (\r
- (\r
- << Type = 0x3; >>\r
- {\r
- Path "=" "STRING_TOKEN" "\(" S:Number "\)" << Type = 0x4; DevPath = _STOSID(S->getText()); >>\r
- }\r
- {\r
- Uuid "=" guidDefinition[Guid] << Type = 0x5; >>\r
- }\r
- )\r
- |\r
- (\r
- "\("\r
- (\r
+ "\("\r
+ (\r
QN:StringIdentifier <<\r
QName = QN->getText();\r
- LineNo = QN->getLine();\r
+ 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
- )\r
+ "\)"\r
<<\r
- switch (Type) {\r
- case 0x1: {CIfrQuestionRef1 QR1Obj(L->getLine()); _SAVE_OPHDR_COND (QR1Obj, ($ExpOpCount == 0), L->getLine()); QR1Obj.SetQuestionId (QId, QName, LineNo); break;}\r
- case 0x3: {CIfrQuestionRef3 QR3Obj(L->getLine()); _SAVE_OPHDR_COND (QR3Obj, ($ExpOpCount == 0), L->getLine()); break;}\r
- case 0x4: {CIfrQuestionRef3_2 QR3_2Obj(L->getLine()); _SAVE_OPHDR_COND (QR3_2Obj, ($ExpOpCount == 0), L->getLine()); QR3_2Obj.SetDevicePath (DevPath); break;}\r
- case 0x5: {CIfrQuestionRef3_3 QR3_3Obj(L->getLine()); _SAVE_OPHDR_COND (QR3_3Obj, ($ExpOpCount == 0), L->getLine()); QR3_3Obj.SetDevicePath (DevPath); QR3_3Obj.SetGuid (&Guid); break;}\r
- }\r
- $ExpOpCount++;\r
- >>\r
+ { CIfrQuestionRef1 QR1Obj(L->getLine()); _SAVE_OPHDR_COND (QR1Obj, ($ExpOpCount == 0), L->getLine()); QR1Obj.SetQuestionId (QId, QName, LineNo); } $ExpOpCount++; >>\r
;\r
\r
rulerefExp[UINT32 & RootLevel, UINT32 & ExpOpCount] :\r
( \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
| 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
lengthExp[$RootLevel, $ExpOpCount]\r
| bitwisenotExp[$RootLevel, $ExpOpCount]\r
- | question2refExp[$RootLevel, $ExpOpCount]\r
+ | question23refExp[$RootLevel, $ExpOpCount]\r
| stringref2Exp[$RootLevel, $ExpOpCount]\r
| toboolExp[$RootLevel, $ExpOpCount]\r
+ | tostringExp[$RootLevel, $ExpOpCount]\r
| unintExp[$RootLevel, $ExpOpCount]\r
| toupperExp[$RootLevel, $ExpOpCount]\r
| tolwerExp[$RootLevel, $ExpOpCount]\r
<< { CIfrBitWiseNot BWNObj(L->getLine()); $ExpOpCount++; } >>\r
;\r
\r
-question2refExp[UINT32 & RootLevel, UINT32 & ExpOpCount] :\r
+question23refExp[UINT32 & RootLevel, UINT32 & ExpOpCount] :\r
+ <<\r
+ UINT8 Type = 0x1;\r
+ EFI_STRING_ID DevPath = EFI_STRING_ID_INVALID;\r
+ EFI_GUID Guid = {0,};\r
+ >>\r
L:QuestionRefVal\r
- "\(" vfrStatementExpressionSub[$RootLevel + 1, $ExpOpCount] "\)"\r
- << { CIfrQuestionRef2 QR2Obj(L->getLine()); $ExpOpCount++; } >>\r
+ "\("\r
+ {\r
+ DevicePath "=" "STRING_TOKEN" "\(" S:Number "\)" "," << Type = 0x2; DevPath = _STOSID(S->getText(), S->getLine()); >>\r
+ }\r
+ {\r
+ Uuid "=" guidDefinition[Guid] "," << Type = 0x3; >>\r
+ }\r
+ vfrStatementExpressionSub[$RootLevel + 1, $ExpOpCount] \r
+ "\)"\r
+ <<\r
+ switch (Type) {\r
+ case 0x1: {CIfrQuestionRef2 QR2Obj(L->getLine()); _SAVE_OPHDR_COND (QR2Obj, ($ExpOpCount == 0), L->getLine()); break;}\r
+ case 0x2: {CIfrQuestionRef3_2 QR3_2Obj(L->getLine()); _SAVE_OPHDR_COND (QR3_2Obj, ($ExpOpCount == 0), L->getLine()); QR3_2Obj.SetDevicePath (DevPath); break;}\r
+ case 0x3: {CIfrQuestionRef3_3 QR3_3Obj(L->getLine()); _SAVE_OPHDR_COND (QR3_3Obj, ($ExpOpCount == 0), L->getLine()); QR3_3Obj.SetDevicePath (DevPath); QR3_3Obj.SetGuid (&Guid); break;}\r
+ }\r
+ $ExpOpCount++;\r
+ >>\r
;\r
\r
stringref2Exp[UINT32 & RootLevel, UINT32 & ExpOpCount] :\r
<< 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
;\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
\r
EFI_VARSTORE_INFO mCurrQestVarInfo;\r
EFI_GUID *mOverrideClassGuid;\r
+ CHAR8* mLastFormEndAddr;\r
+\r
+//\r
+// Whether the question already has default value.\r
+//\r
+ UINT16 mUsedDefaultArray[EFI_IFR_MAX_DEFAULT_TYPE];\r
+ UINT16 mUsedDefaultCount;\r
\r
//\r
// For framework vfr compatibility\r
UINT8 _GET_CURRQEST_DATATYPE ();\r
UINT32 _GET_CURRQEST_VARSIZE ();\r
UINT32 _GET_CURRQEST_ARRAY_SIZE();\r
+ VOID CheckDuplicateDefaultValue (IN EFI_DEFAULT_ID, IN ANTLRTokenPtr);\r
\r
public:\r
VOID _PCATCH (IN INTN, IN INTN, IN ANTLRTokenPtr, IN CONST CHAR8 *);\r
\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
\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
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
\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
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
\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
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
\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
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
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
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
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
TypeNameList[Index],\r
EFI_VARSTORE_ID_INVALID\r
);\r
- mCVfrDataStorage.GetVarStoreId(TypeNameList[Index], &VarStoreId);\r
+ mCVfrDataStorage.GetVarStoreId(TypeNameList[Index], &VarStoreId, &mFormsetGuid);\r
VSObj.SetVarStoreId (VarStoreId);\r
gCVfrVarDataTypeDB.GetDataTypeSize(TypeNameList[Index], &Size);\r
VSObj.SetSize ((UINT16) Size);\r
(CHAR8 *) DateType,\r
EFI_VARSTORE_ID_INVALID\r
);\r
- mCVfrDataStorage.GetVarStoreId((CHAR8 *) DateName, &VarStoreId);\r
+ mCVfrDataStorage.GetVarStoreId((CHAR8 *) DateName, &VarStoreId, &mFormsetGuid);\r
VSObj.SetVarStoreId (VarStoreId);\r
gCVfrVarDataTypeDB.GetDataTypeSize((CHAR8 *) DateType, &Size);\r
VSObj.SetSize ((UINT16) Size);\r
(CHAR8 *) TimeType,\r
EFI_VARSTORE_ID_INVALID\r
);\r
- mCVfrDataStorage.GetVarStoreId((CHAR8 *) TimeName, &VarStoreId);\r
+ mCVfrDataStorage.GetVarStoreId((CHAR8 *) TimeName, &VarStoreId, &mFormsetGuid);\r
VSObj.SetVarStoreId (VarStoreId);\r
gCVfrVarDataTypeDB.GetDataTypeSize((CHAR8 *) TimeType, &Size);\r
VSObj.SetSize ((UINT16) Size);\r
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
mCompatibleMode = Mode;\r
mCVfrQuestionDB.SetCompatibleMode (Mode);\r
}\r
+\r
+VOID\r
+EfiVfrParser::CheckDuplicateDefaultValue (\r
+ IN EFI_DEFAULT_ID DefaultId,\r
+ IN ANTLRTokenPtr Tok\r
+ )\r
+{\r
+ UINT16 Index;\r
+\r
+ for(Index = 0; Index < mUsedDefaultCount; Index++) {\r
+ if (mUsedDefaultArray[Index] == DefaultId) {\r
+ gCVfrErrorHandle.HandleWarning (VFR_WARNING_DEFAULT_VALUE_REDEFINED, Tok->getLine(), Tok->getText());\r
+ }\r
+ }\r
+\r
+ if (mUsedDefaultCount >= EFI_IFR_MAX_DEFAULT_TYPE - 1) {\r
+ gCVfrErrorHandle.HandleError (VFR_RETURN_FATAL_ERROR, Tok->getLine(), Tok->getText());\r
+ }\r
+\r
+ mUsedDefaultArray[mUsedDefaultCount++] = DefaultId;\r
+}\r
>>\r