#include "stdio.h"\r
#include "PBlackBox.h"\r
#include "DLexerBase.h"\r
-#include "VfrLexer.h" \r
+#include "VfrLexer.h"\r
#include "AToken.h"\r
\r
#define GET_LINENO(Obj) ((Obj)->getLine())\r
{\r
public:\r
CVfrDLGLexer (DLGFileInput *F) : VfrLexer (F) {};\r
- INT32 errstd (char *Text) \r
- { \r
- printf ("unrecognized input '%s'\n", Text); \r
+ INT32 errstd (char *Text)\r
+ {\r
+ printf ("unrecognized input '%s'\n", Text);\r
}\r
};\r
\r
// is not preceeded with a backslash.\r
//\r
#lexclass QUOTED_STRING\r
-#token TheString "~[\"]*\"" << mode (START); >> \r
+#token TheString "~[\"]*\"" << mode (START); >>\r
\r
//\r
// Define a lexclass for skipping over C++ style comments\r
//\r
// Skip whitespace\r
//\r
-#token "[\ \t]" << skip (); >> \r
+#token "[\ \t]" << skip (); >>\r
\r
//\r
// Skip over newlines, but count them\r
#token Title("title") "title"\r
#token FormId("formid") "formid"\r
#token OneOf("oneof") "oneof"\r
-#token EndoneOf("endoneof") "endoneof"\r
+#token EndOneOf("endoneof") "endoneof"\r
#token Prompt("prompt") "prompt"\r
#token OrderedList("orderedlist") "orderedlist"\r
#token MaxContainers("maxcontainers") "maxcontainers"\r
#token EndList("endlist") "endlist"\r
#token EndForm("endform") "endform"\r
-#token EndOneOf("endoneof") "endoneof"\r
#token Form("form") "form"\r
#token Subtitle("subtitle") "subtitle"\r
#token Help("help") "help"\r
#token Inventory("inventory") "inventory"\r
#token NonNvDataMap("_NON_NV_DATA_MAP") "_NON_NV_DATA_MAP"\r
#token Struct("struct") "struct"\r
+#token Boolean("BOOLEAN") "BOOLEAN"
#token Uint64("UINT64") "UINT64"\r
#token Uint32("UINT32") "UINT32"\r
#token Uint16("UINT16") "UINT16"\r
#token Char16("CHAR16") "CHAR16"\r
#token Uint8("UINT8") "UINT8"\r
-#token GUID("guid") "guid"\r
+#token Uuid("guid") "guid"\r
#token CheckBox("checkbox") "checkbox"\r
#token EndCheckBox("endcheckbox") "endcheckbox"\r
#token Numeric("numeric") "numeric"\r
-#token EndNumeric("endnumeric") "endnumeric" \r
-#token Minimum("minimum") "minimum" \r
-#token Maximum("maximum") "maximum" \r
-#token STEP("step") "step" \r
-#token Default("default") "default" \r
-#token Password("password") "password" \r
-#token EndPassword("endpassword") "endpassword" \r
+#token EndNumeric("endnumeric") "endnumeric"\r
+#token Minimum("minimum") "minimum"\r
+#token Maximum("maximum") "maximum"\r
+#token STEP("step") "step"\r
+#token Default("default") "default"\r
+#token Password("password") "password"\r
+#token EndPassword("endpassword") "endpassword"\r
#token String("string") "string"\r
-#token EndString("endstring") "endstring" \r
-#token MinSize("minsize") "minsize" \r
-#token MaxSize("maxsize") "maxsize" \r
+#token EndString("endstring") "endstring"\r
+#token MinSize("minsize") "minsize"\r
+#token MaxSize("maxsize") "maxsize"\r
#token Encoding("encoding") "encoding"\r
#token SuppressIf("suppressif") "suppressif"\r
#token DisableIf("disableif") "disableif"\r
#token OptionOnlyFlag("OPTIONS_ONLY") "OPTIONS_ONLY"\r
#token Class("class") "class"\r
#token Subclass("subclass") "subclass"\r
+#token ClassGuid("classguid") "classguid"
#token TypeDef("typedef") "typedef"\r
#token Restore("restore") "restore"\r
#token Save("save") "save"\r
//\r
\r
vfrProgram > [UINT8 Return] :\r
- << mParserStatus = 0; >>\r
+ <<
+ mParserStatus = 0;\r
+ mConstantOnlyInExpression = FALSE;
+ >>\r
(\r
- (\r
- "\#pragma" "pack" "\(" A:Number "\)" << _PCATCH(mCVfrVarDataTypeDB.Pack (_STOU32(A->getText())), A); >>\r
- vfrDataStructDefinition\r
- "\#pragma" "pack" "\(" "\)" << mCVfrVarDataTypeDB.UnPack (); >>\r
- )\r
- |\r
- (\r
- vfrDataStructDefinition\r
- )\r
+ vfrPragmaPackDefinition\r
+ | vfrDataStructDefinition\r
)*\r
- vfrFromSetDefinition\r
+ vfrFormSetDefinition\r
<< $Return = mParserStatus; >>\r
;\r
\r
-//*****************************************************************************\r
-//\r
-// the syntax of data struct definition\r
-//\r
+pragmaPackShowDef :\r
+ L:"show" << mCVfrVarDataTypeDB.Pack (L->getLine(), VFR_PACK_SHOW); >>
+ ;
+\r
+pragmaPackStackDef :\r
+ <<
+ UINT32 LineNum;
+ UINT8 PackAction;
+ INT8 *Identifier = NULL;
+ UINT32 PackNumber = DEFAULT_PACK_ALIGN;
+ >>
+ (
+ L1:"push" << LineNum = L1->getLine(); PackAction = VFR_PACK_PUSH; >>
+ | L2:"pop" << LineNum = L2->getLine(); PackAction = VFR_PACK_POP; >>
+ )
+ {
+ "," ID:StringIdentifier << Identifier = ID->getText(); >>
+ }
+ {
+ "," N:Number << PackAction |= VFR_PACK_ASSIGN; PackNumber = _STOU32(N->getText()); >>
+ }
+ << mCVfrVarDataTypeDB.Pack (LineNum, PackAction, Identifier, PackNumber); >>
+ ;
+\r
+pragmaPackNumber :
+ <<
+ UINT32 LineNum;
+ UINT32 PackNumber = DEFAULT_PACK_ALIGN;
+ >>
+ N:Number << LineNum = N->getLine(); PackNumber = _STOU32(N->getText()); >>
+ << mCVfrVarDataTypeDB.Pack (LineNum, VFR_PACK_ASSIGN, NULL, PackNumber); >>
+ ;
+
+vfrPragmaPackDefinition :
+ "\#pragma" "pack" "\("
+ {
+ pragmaPackShowDef
+ | pragmaPackStackDef
+ | pragmaPackNumber
+ }
+ "\)"
+ ;
+
vfrDataStructDefinition :\r
{ TypeDef } Struct << mCVfrVarDataTypeDB.DeclareDataTypeBegin (); >>\r
- { NonNVDataMap }\r
+ { NonNvDataMap }\r
{\r
N1:StringIdentifier << _PCATCH(mCVfrVarDataTypeDB.SetNewTypeName (N1->getText()), N1); >>\r
}\r
- OpenBrace \r
+ OpenBrace\r
vfrDataStructFields\r
- CloseBrace \r
- { \r
+ CloseBrace\r
+ {\r
N2:StringIdentifier << _PCATCH(mCVfrVarDataTypeDB.SetNewTypeName (N2->getText()), N2); >>\r
}\r
";" << mCVfrVarDataTypeDB.DeclareDataTypeEnd (); >>\r
\r
vfrDataStructFields :\r
(\r
- dataStructField64 | \r
- dataStructField32 | \r
- dataStructField16 | \r
- dataStructField8 | \r
+ dataStructField64 |\r
+ dataStructField32 |\r
+ dataStructField16 |\r
+ dataStructField8 |\r
dataStructFieldBool |\r
dataStructFieldString |\r
- dataStructFieldDate | \r
+ dataStructFieldDate |\r
dataStructFieldTime |\r
dataStructFieldUser\r
)*\r
\r
dataStructField64 :\r
<< UINT32 ArrayNum = 0; >>\r
- "UINT64" \r
- N:StringIdentifier \r
+ "UINT64"\r
+ N:StringIdentifier\r
{\r
OpenBracket I:Number CloseBracket << ArrayNum = _STOU32(I->getText()); >>\r
}\r
\r
dataStructField32 :\r
<< UINT32 ArrayNum = 0; >>\r
- "UINT32" \r
- N:StringIdentifier \r
+ "UINT32"\r
+ N:StringIdentifier\r
{\r
OpenBracket I:Number CloseBracket << ArrayNum = _STOU32(I->getText()); >>\r
}\r
dataStructField16 :\r
<< UINT32 ArrayNum = 0; >>\r
("UINT16" | "CHAR16")\r
- N:StringIdentifier \r
+ N:StringIdentifier\r
{\r
OpenBracket I:Number CloseBracket << ArrayNum = _STOU32(I->getText()); >>\r
}\r
dataStructField8 :\r
<< UINT32 ArrayNum = 0; >>\r
"UINT8"\r
- N:StringIdentifier \r
+ N:StringIdentifier\r
{\r
OpenBracket I:Number CloseBracket << ArrayNum = _STOU32(I->getText()); >>\r
}\r
dataStructFieldBool :\r
<< UINT32 ArrayNum = 0; >>\r
"BOOLEAN"\r
- N:StringIdentifier \r
+ N:StringIdentifier\r
{\r
OpenBracket I:Number CloseBracket << ArrayNum = _STOU32(I->getText()); >>\r
}\r
dataStructFieldString :\r
<< UINT32 ArrayNum = 0; >>\r
"EFI_STRING_ID"\r
- N:StringIdentifier \r
+ N:StringIdentifier\r
{\r
OpenBracket I:Number CloseBracket << ArrayNum = _STOU32(I->getText()); >>\r
}\r
\r
dataStructFieldDate :\r
<< UINT32 ArrayNum = 0; >>\r
- "EFI_HII_DATE" \r
- N:StringIdentifier \r
+ "EFI_HII_DATE"\r
+ N:StringIdentifier\r
{\r
OpenBracket I:Number CloseBracket << ArrayNum = _STOU32(I->getText()); >>\r
}\r
\r
dataStructFieldTime :\r
<< UINT32 ArrayNum = 0; >>\r
- "EFI_HII_TIME" \r
- N:StringIdentifier \r
+ "EFI_HII_TIME"\r
+ N:StringIdentifier\r
{\r
OpenBracket I:Number CloseBracket << ArrayNum = _STOU32(I->getText()); >>\r
}\r
\r
//*****************************************************************************\r
//\r
-// the syntax of from set definition\r
+// the syntax of GUID definition\r
//\r
-vfrFromSetDefinition :\r
+guidSubDefinition [EFI_GUID &Guid] :\r
+ G4:Number "," G5:Number "," G6:Number "," G7:Number "," G8:Number "," G9:Number "," G10:Number "," G11:Number
+ <<\r
+ Guid.Data4[0] = _STOU8(G4->getText());\r
+ Guid.Data4[1] = _STOU8(G5->getText());\r
+ Guid.Data4[2] = _STOU8(G6->getText());\r
+ Guid.Data4[3] = _STOU8(G7->getText());
+ Guid.Data4[4] = _STOU8(G8->getText());
+ Guid.Data4[5] = _STOU8(G9->getText());
+ Guid.Data4[6] = _STOU8(G10->getText());
+ Guid.Data4[7] = _STOU8(G11->getText());
+ >>\r
+ ;\r
+\r
+guidDefinition [EFI_GUID &Guid] :
+ OpenBrace\r
+ G1:Number "," G2:Number "," G3:Number ","\r
+ <<
+ Guid.Data1 = _STOU32 (G1->getText());
+ Guid.Data2 = _STOU16 (G2->getText());
+ Guid.Data3 = _STOU16 (G3->getText());
+ >>
+ (
+ OpenBrace guidSubDefinition[Guid] CloseBrace
+ | guidSubDefinition[Guid]
+ )
+ CloseBrace\r
+ ;
+
+//*****************************************************************************
+//
+// the syntax of form set definition
+//
+vfrFormSetDefinition :
<<\r
EFI_GUID Guid;\r
- CIfrFormSet FSObj;\r
- UINT16 C, SC;\r
+ EFI_GUID DefaultClassGuid = EFI_HII_PLATFORM_SETUP_FORMSET_GUID;\r
+ EFI_GUID ClassGuids[10];\r
+ UINT8 ClassGuidNum = 0;\r
+ CIfrFormSet *FSObj = NULL;\r
+ UINT16 C, SC;
>>\r
- L:FormSet << SET_LINE_INFO (FSObj, L); >>\r
- GUID "=" \r
- OpenBrace\r
- G1:Number "," G2:Number "," G3:Number "," G4:Number "," G5:Number "," G6:Number "," \r
- G7:Number "," G8:Number "," G9:Number "," G10:Number "," G11:Number\r
- CloseBrace\r
- << \r
- _CRGUID (&Guid, G1->getText (), G2->getText (), G3->getText (), \r
- G4->getText (), G5->getText (), G6->getText (), \r
- G7->getText (), G8->getText (), G9->getText (), \r
- G10->getText (), G11->getText ()); \r
- FSObj.SetGuid (&Guid);\r
- >>\r
- ","\r
- Title "=" "STRING_TOKEN" "\(" S1:Number "\)" "," << FSObj.SetFormSetTitle (_STOSID(S1->getText())); >>\r
- Help "=" "STRING_TOKEN" "\(" S2:Number "\)" "," << FSObj.SetHelp (_STOSID(S2->getText())); >>\r
+ L:FormSet
+ Uuid "=" guidDefinition[Guid] ","
+ Title "=" "STRING_TOKEN" "\(" S1:Number "\)" ","
+ Help "=" "STRING_TOKEN" "\(" S2:Number "\)" ","
+ {
+ ClassGuid "=" guidDefinition[ClassGuids[ClassGuidNum]] << ++ClassGuidNum; >>
+ (
+ "\|" guidDefinition[ClassGuids[ClassGuidNum]] << ++ClassGuidNum; >>
+ )*
+ ","\r
+ }
+ <<
+ switch (ClassGuidNum) {
+ case 0:
+ FSObj = new CIfrFormSet(sizeof(EFI_IFR_FORM_SET));
+ FSObj->SetClassGuid(&DefaultClassGuid);
+ break;
+ case 1:
+ FSObj = new CIfrFormSet(sizeof(EFI_IFR_FORM_SET));
+ FSObj->SetClassGuid(&ClassGuids[0]);
+ break;
+ case 2:
+ FSObj = new CIfrFormSet(sizeof(EFI_IFR_FORM_SET) + sizeof(EFI_GUID));
+ FSObj->SetClassGuid(&ClassGuids[0]);
+ FSObj->SetClassGuid(&ClassGuids[1]);
+ break;
+ default:
+ FSObj = new CIfrFormSet(sizeof(EFI_IFR_FORM_SET) + 2 * sizeof(EFI_GUID));
+ FSObj->SetClassGuid(&ClassGuids[0]);
+ FSObj->SetClassGuid(&ClassGuids[1]);
+ FSObj->SetClassGuid(&ClassGuids[2]);
+ break;
+ }
+
+ SET_LINE_INFO (*FSObj, L);
+ FSObj->SetGuid (&Guid);
+ FSObj->SetFormSetTitle (_STOSID(S1->getText()));\r
+ FSObj->SetHelp (_STOSID(S2->getText()));\r
+ >>
{\r
Class "=" classDefinition[C] "," << {CIfrClass CObj; CObj.SetClass(C);} >>\r
}\r
//_DeclareDefaultLinearVarStore (GET_LINENO (L));\r
>>\r
vfrFormSetList\r
- E:EndFormSet << CRT_END_OP (E); >>\r
+ E:EndFormSet << CRT_END_OP (E); if (FSObj != NULL) {delete FSObj;}>>\r
";"\r
;\r
\r
vfrStatementVarStoreEfi |\r
vfrStatementVarStoreNameValue |\r
vfrStatementDefaultStore |\r
- vfrStatementDisableIfFromSet\r
+ vfrStatementDisableIfFormSet\r
)*\r
;\r
\r
{\r
"," Attribute "=" A:Number << DefaultId = _STOU16(A->getText()); >>\r
}\r
- << \r
+ <<\r
if (mCVfrDefaultStore.DefaultIdRegistered (DefaultId) == FALSE) {\r
CIfrDefaultStore DSObj;\r
_PCATCH(mCVfrDefaultStore.RegisterDefaultStore (DSObj.GetObjBinAddr(), N->getText(), _STOSID(S->getText()), DefaultId)), D->getLine();\r
\r
vfrStatementVarStoreLinear :\r
<<\r
- EFI_GUID Guid; \r
+ EFI_GUID Guid;\r
CIfrVarStore VSObj;\r
INT8 *TypeName;\r
UINT32 LineNum;\r
)\r
{ Key "=" Number "," } // Key is used to assign Varid in Framework VFR but no use in UEFI2.1 VFR\r
{\r
- VarId "=" ID:Number "," << VarStoreId = _STOU16(ID->getText()); >>\r
+ VarId "=" ID:Number "," <<
+ _PCATCH(
+ (INTN)(VarStoreId = _STOU16(ID->getText())) != 0,\r
+ (INTN)TRUE,
+ ID,
+ "varid 0 is not allowed."
+ );
+ >>
}\r
Name "=" SN:StringIdentifier ","\r
- GUID "="\r
- OpenBrace\r
- G1:Number "," G2:Number "," G3:Number "," G4:Number "," G5:Number "," G6:Number "," \r
- G7:Number "," G8:Number "," G9:Number "," G10:Number "," G11:Number\r
- CloseBrace\r
- << \r
- _CRGUID (&Guid, G1->getText (), G2->getText (), G3->getText (), \r
- G4->getText (), G5->getText (), G6->getText (), \r
- G7->getText (), G8->getText (), G9->getText (), \r
- G10->getText (), G11->getText ()); \r
- >>\r
+ Uuid "=" guidDefinition[Guid]\r
<<\r
_PCATCH(mCVfrDataStorage.DeclareBufferVarStore (\r
- SN->getText(), \r
- &Guid, \r
- &mCVfrVarDataTypeDB, \r
+ SN->getText(),\r
+ &Guid,\r
+ &mCVfrVarDataTypeDB,\r
TypeName,\r
VarStoreId\r
), LineNum);\r
>>\r
- << \r
- VSObj.SetGuid (&Guid); \r
+ <<\r
+ VSObj.SetGuid (&Guid);\r
_PCATCH(mCVfrDataStorage.GetVarStoreId(SN->getText(), &VarStoreId), SN);\r
VSObj.SetVarStoreId (VarStoreId);\r
_PCATCH(mCVfrVarDataTypeDB.GetDataTypeSize(TypeName, &Size), LineNum);\r
<< VSEObj.SetAttributes (Attr); >>\r
Name "=" "STRING_TOKEN" "\(" VN:Number "\)" ","\r
VarSize "=" N:Number ","\r
- GUID "=" \r
- OpenBrace\r
- G1:Number "," G2:Number "," G3:Number "," G4:Number "," G5:Number "," G6:Number "," \r
- G7:Number "," G8:Number "," G9:Number "," G10:Number "," G11:Number\r
- CloseBrace\r
- << \r
- _CRGUID (&Guid, G1->getText (), G2->getText (), G3->getText (), \r
- G4->getText (), G5->getText (), G6->getText (), \r
- G7->getText (), G8->getText (), G9->getText (), \r
- G10->getText (), G11->getText ()); \r
- >>\r
- << mCVfrDataStorage.DeclareEfiVarStore (SN->getText(), &Guid, _STOSID(VN->getText()), _STOU32(N->getText())); >>\r
- << \r
+ Uuid "=" guidDefinition[Guid] << mCVfrDataStorage.DeclareEfiVarStore (SN->getText(), &Guid, _STOSID(VN->getText()), _STOU32(N->getText())); >>\r
+ <<\r
VSEObj.SetGuid (&Guid);\r
_PCATCH(mCVfrDataStorage.GetVarStoreId(SN->getText(), &VarStoreId), SN);\r
- VSEObj.SetVarStoreId (VarStoreId); \r
+ VSEObj.SetVarStoreId (VarStoreId);\r
>>\r
";"\r
;\r
\r
vfrStatementVarStoreNameValue :\r
<<\r
- EFI_GUID Guid; \r
+ EFI_GUID Guid;\r
CIfrVarStoreNameValue VSNVObj;\r
EFI_VARSTORE_ID VarStoreId;\r
>>\r
(\r
Name "=" "STRING_TOKEN" "\(" N:Number "\)" "," << _PCATCH(mCVfrDataStorage.NameTableAddItem (_STOSID(N->getText())), SN); >>\r
)+\r
- GUID "=" \r
- OpenBrace\r
- G1:Number "," G2:Number "," G3:Number "," G4:Number "," G5:Number "," G6:Number "," \r
- G7:Number "," G8:Number "," G9:Number "," G10:Number "," G11:Number\r
- CloseBrace\r
- << \r
- _CRGUID (&Guid, G1->getText (), G2->getText (), G3->getText (), \r
- G4->getText (), G5->getText (), G6->getText (), \r
- G7->getText (), G8->getText (), G9->getText (), \r
- G10->getText (), G11->getText ()); \r
- >>\r
- << _PCATCH(mCVfrDataStorage.DeclareNameVarStoreEnd (&Guid), SN); >>\r
- << \r
+ Uuid "=" guidDefinition[Guid] << _PCATCH(mCVfrDataStorage.DeclareNameVarStoreEnd (&Guid), SN); >>\r
+ <<\r
VSNVObj.SetGuid (&Guid);\r
_PCATCH(mCVfrDataStorage.GetVarStoreId(SN->getText(), &VarStoreId), SN);\r
- VSNVObj.SetVarStoreId (VarStoreId); \r
+ VSNVObj.SetVarStoreId (VarStoreId);\r
>>\r
";"\r
;\r
<< $Class = 0; >>\r
validClassNames[$Class] ( "\|" validClassNames[$Class] )*\r
;\r
- \r
+\r
validClassNames[UINT16 & Class] :\r
ClassNonDevice << $Class |= EFI_NON_DEVICE_CLASS; >>\r
| ClassDiskDevice << $Class |= EFI_DISK_DEVICE_CLASS; >>\r
| N:Number << $SubClass |= _STOU16(N->getText()); >>\r
;\r
\r
-vfrStatementDisableIfFromSet :\r
- << CIfrDisableIf DIObj; >>\r
+vfrStatementDisableIfFormSet :\r
+ <<
+ CIfrDisableIf DIObj;\r
+ UINT32 ExpOpCount = 0;
+ >>
D:DisableIf << DIObj.SetLineNo(D->getLine()); >>\r
- vfrStatementExpression[0] ";"\r
+ vfrStatementExpression[0, ExpOpCount] ";" << mConstantOnlyInExpression = FALSE; >>\r
vfrFormSetList\r
E:EndIf << CRT_END_OP (E); >>\r
";"\r
\r
vfrQuestionHeader[CIfrQuestionHeader & QHObj, EFI_QUESION_TYPE QType = QUESTION_NORMAL]:\r
<<\r
- EFI_VARSTORE_INFO Info; \r
+ EFI_VARSTORE_INFO Info;\r
EFI_QUESTION_ID QId = EFI_QUESTION_ID_INVALID;\r
INT8 *QName = NULL;\r
INT8 *VarIdStr = NULL;\r
{\r
QuestionId "=" ID:Number "," <<\r
QId = _STOQID(ID->getText());\r
- _PCATCH(mCVfrQuestionDB.FindQuestion (QId), VFR_RETURN_UNDEFINED, ID, "has already been used please assign another number"); \r
+ _PCATCH(mCVfrQuestionDB.FindQuestion (QId), VFR_RETURN_UNDEFINED, ID, "has already been used please assign another number");\r
>>\r
}\r
- << \r
+ <<\r
switch (QType) {\r
case QUESTION_NORMAL:\r
mCVfrQuestionDB.RegisterQuestion (QName, VarIdStr, QId);\r
{\r
QuestionId "=" ID:Number "," <<\r
QId = _STOQID(ID->getText());\r
- _PCATCH(mCVfrQuestionDB.FindQuestion (QId), VFR_RETURN_UNDEFINED, ID, "redefined quesiont ID"); \r
+ _PCATCH(mCVfrQuestionDB.FindQuestion (QId), VFR_RETURN_UNDEFINED, ID, "redefined quesiont ID");\r
>>\r
}\r
- << \r
+ <<\r
mCVfrQuestionDB.RegisterQuestion (QName, NULL, QId);\r
$QHObj->SetQuestionId (QId);\r
>>\r
INT8 *VarStr = NULL;\r
INT8 *SName = NULL;\r
INT8 *TName = NULL;\r
+ EFI_IFR_TYPE_VALUE Dummy = {0};
>>\r
(\r
SN1:StringIdentifier << SName = SN1->getText(); _STRCAT(&VarIdStr, SN1->getText()); >>\r
OpenBracket I1:Number CloseBracket << Idx = _STOU32(I1->getText()); _STRCAT(&VarIdStr, "["); _STRCAT(&VarIdStr, I1->getText()); _STRCAT(&VarIdStr, "]"); >>\r
<<\r
_PCATCH(mCVfrDataStorage.GetVarStoreType (SName, VarStoreType), SN1);\r
- _PCATCH(mCVfrDataStorage.GetVarStoreId (SName, &$Info.mVarStoreId), SN1); \r
+ _PCATCH(mCVfrDataStorage.GetVarStoreId (SName, &$Info.mVarStoreId), SN1);\r
_PCATCH(mCVfrDataStorage.GetNameVarStoreInfo (&$Info, Idx), SN1);\r
>>\r
)\r
_STRCAT(&VarStr, TName);\r
}\r
>>\r
- \r
+\r
(\r
"." <<\r
_PCATCH(((VarStoreType != EFI_VFR_VARSTORE_BUFFER) ? VFR_RETURN_EFIVARSTORE_USE_ERROR : VFR_RETURN_SUCCESS), SN2);\r
OpenBracket I2:Number CloseBracket << _STRCAT(&VarIdStr, "["); _STRCAT(&VarIdStr, I2->getText()); _STRCAT(&VarIdStr, "]"); >>\r
<< _STRCAT(&VarStr, "["); _STRCAT(&VarStr, I2->getText()); _STRCAT(&VarStr, "]"); >>\r
}\r
- )* << \r
+ )* <<\r
switch (VarStoreType) {\r
case EFI_VFR_VARSTORE_EFI:\r
_PCATCH(mCVfrDataStorage.GetEfiVarStoreInfo (&$Info), SN2);\r
case EFI_VFR_VARSTORE_BUFFER:\r
_PCATCH(mCVfrVarDataTypeDB.GetDataFieldInfo (VarStr, $Info.mInfo.mVarOffset, $Info.mVarType, $Info.mVarTotalSize), SN2->getLine());\r
//_PCATCH(mCVfrDataStorage.BufferVarStoreRequestElementAdd (SName, Info), SN2);\r
+ _PCATCH((EFI_VFR_RETURN_CODE)gCVfrBufferConfig.Register (
+ SName,
+ NULL),
+ SN2->getLine());
+ _PCATCH((EFI_VFR_RETURN_CODE)gCVfrBufferConfig.Write (
+ 'a',
+ SName,
+ NULL,
+ $Info.mVarType,
+ $Info.mInfo.mVarOffset,
+ $Info.mVarTotalSize,
+ Dummy),
+ SN2->getLine());
break;\r
case EFI_VFR_VARSTORE_NAME:\r
default: break;\r
SN1:StringIdentifier << _STRCAT(&VarIdStr, SN1->getText()); LineNo = SN1->getLine(); >>\r
OpenBracket I1:Number CloseBracket << _STRCAT(&VarIdStr, "["); _STRCAT(&VarIdStr, I1->getText()); _STRCAT(&VarIdStr, "]"); >>\r
<< mCVfrQuestionDB.GetQuestionId (NULL, VarIdStr, $QId, $Mask); >>\r
- )\r
+ ) <<\r
+ if (mConstantOnlyInExpression) {
+ _PCATCH(VFR_RETURN_CONSTANT_ONLY, LineNo);
+ }
+ >>
|\r
(\r
SN2:StringIdentifier << _STRCAT (&VarIdStr, SN2->getText()); LineNo = SN2->getLine(); >>\r
}\r
)*\r
<< mCVfrQuestionDB.GetQuestionId (NULL, VarIdStr, $QId, $Mask); >>\r
- )\r
+ ) <<\r
+ if (mConstantOnlyInExpression) {
+ _PCATCH(VFR_RETURN_CONSTANT_ONLY, LineNo);
+ }
+ >>
;\r
\r
vfrConstantValueField[UINT8 Type] > [EFI_IFR_TYPE_VALUE Value] :\r
- N1:Number << \r
+ N1:Number <<\r
switch ($Type) {\r
case EFI_IFR_TYPE_NUM_SIZE_8 :\r
$Value.u8 = _STOU8(N1->getText());\r
case EFI_IFR_TYPE_DATE :\r
default :\r
break;\r
- } \r
+ }\r
>>\r
| B1:True << $Value.b = TRUE; >>\r
| B2:False << $Value.b = FALSE; >>\r
vfrStatementQuestions |\r
vfrStatementConditional |\r
vfrStatementLabel |\r
- vfrStatementBanner \r
+ vfrStatementBanner\r
// Just for framework vfr compatibility\r
//vfrStatementInvalid\r
)*\r
";"\r
;\r
\r
-vfrStatementRules : \r
- << CIfrRule RObj; >>\r
+vfrStatementRules :\r
+ <<
+ CIfrRule RObj;\r
+ UINT32 ExpOpCount = 0;
+ >>
R:Rule << RObj.SetLineNo(R->getLine()); >>\r
S1:StringIdentifier "," <<\r
mCVfrRulesDB.RegisterRule (S1->getText());\r
- RObj.SetRuleId (mCVfrRulesDB.GetRuleId(S1->getText())); \r
+ RObj.SetRuleId (mCVfrRulesDB.GetRuleId(S1->getText()));\r
>>\r
- vfrStatementExpression[0]\r
+ vfrStatementExpression[0, ExpOpCount]\r
E:EndRule << CRT_END_OP (E); >>\r
";"\r
;\r
vfrStatementDefault :\r
<<\r
BOOLEAN IsExp = FALSE;\r
- EFI_IFR_TYPE_VALUE Val; \r
+ EFI_IFR_TYPE_VALUE Val = {0};\r
CIfrDefault DObj;\r
EFI_DEFAULT_ID DefaultId = EFI_HII_DEFAULT_CLASS_STANDARD;\r
INT8 *VarStoreName = NULL;\r
D:Default << DObj.SetLineNo(D->getLine()); >>\r
(\r
(\r
- vfrStatementValue "," << IsExp = TRUE; DObj.SetScope (1); >>\r
- | "=" vfrConstantValueField[_GET_CURRQEST_DATATYPE()] > [Val] "," \r
- << DObj.SetType (_GET_CURRQEST_DATATYPE()); DObj.SetValue(Val); >>\r
+ vfrStatementValue "," << IsExp = TRUE; DObj.SetScope (1); CIfrEnd EndObj1; EndObj1.SetLineNo(D->getLine()); >>\r
+ | "=" vfrConstantValueField[_GET_CURRQEST_DATATYPE()] > [Val] "," << \r
+ if (gCurrentMinMaxData != NULL && gCurrentMinMaxData->IsNumericOpcode()) {
+ //check default value is valid for Numeric Opcode
+ if (Val.u64 < gCurrentMinMaxData->GetMinData(_GET_CURRQEST_DATATYPE()) || Val.u64 > gCurrentMinMaxData->GetMaxData(_GET_CURRQEST_DATATYPE())) {
+ _PCATCH (VFR_RETURN_INVALID_PARAMETER, D->getLine(), "Numeric default value must be between MinValue and MaxValue.");
+ }
+ }
+ DObj.SetType (_GET_CURRQEST_DATATYPE()); \r
+ DObj.SetValue(Val);
+ >>
)\r
{\r
DefaultStore "=" SN:StringIdentifier "," << _PCATCH(mCVfrDefaultStore.GetDefaultId (SN->getText(), &DefaultId), SN); DObj.SetDefaultId (DefaultId); >>\r
}\r
- << \r
- _PCATCH(mCVfrDataStorage.GetVarStoreName (_GET_CURRQEST_VARTINFO().mVarStoreId, &VarStoreName), D->getLine());\r
- _PCATCH(mCVfrDataStorage.GetVarStoreType (VarStoreName, VarStoreType), D->getLine());\r
- if ((IsExp == FALSE) && (VarStoreType == EFI_VFR_VARSTORE_BUFFER)) { \r
- _PCATCH(mCVfrDefaultStore.BufferVarStoreAltConfigAdd (\r
- DefaultId, \r
- _GET_CURRQEST_VARTINFO(), \r
- VarStoreName, \r
- _GET_CURRQEST_DATATYPE (), \r
- Val), D->getLine()); \r
- }\r
- >>\r
+ <<\r
+ _PCATCH(mCVfrDataStorage.GetVarStoreName (_GET_CURRQEST_VARTINFO().mVarStoreId, &VarStoreName), D->getLine());\r
+ _PCATCH(mCVfrDataStorage.GetVarStoreType (VarStoreName, VarStoreType), D->getLine());\r
+ if ((IsExp == FALSE) && (VarStoreType == EFI_VFR_VARSTORE_BUFFER)) {\r
+ _PCATCH(mCVfrDefaultStore.BufferVarStoreAltConfigAdd (\r
+ DefaultId,\r
+ _GET_CURRQEST_VARTINFO(),\r
+ VarStoreName,\r
+ _GET_CURRQEST_DATATYPE (),\r
+ Val),
+ D->getLine()\r
+ );
+ }\r
+ >>\r
)\r
;\r
\r
vfrStatementStat :\r
- vfrStatementSubTitle | \r
+ vfrStatementSubTitle |\r
vfrStatementStaticText |\r
vfrStatementCrossReference\r
;\r
;\r
\r
flagsField :\r
- Number | InteractiveFlag | ManufacturingFlag | DefaultFlag | \r
+ Number | InteractiveFlag | ManufacturingFlag | DefaultFlag |\r
NVAccessFlag | ResetRequiredFlag | LateCheckFlag\r
;\r
\r
vfrStatementValue :\r
- << CIfrValue VObj; >>\r
+ <<
+ CIfrValue VObj;\r
+ UINT32 ExpOpCount = 0;
+ >>
V:Value << VObj.SetLineNo(V->getLine()); >>\r
- "=" vfrStatementExpression[0]\r
+ "=" vfrStatementExpression[0, ExpOpCount]\r
+ << { CIfrEnd EndObj; EndObj.SetLineNo(0); } >>
;\r
\r
vfrStatementSubTitle :\r
;\r
\r
vfrStatementStaticText :\r
- << \r
+ <<\r
UINT8 Flags = 0;\r
EFI_QUESTION_ID QId = EFI_QUESTION_ID_INVALID;\r
EFI_STRING_ID TxtTwo = EFI_STRING_ID_INVALID;\r
<<\r
if (Flags & EFI_IFR_FLAG_CALLBACK) {\r
CIfrAction AObj;\r
+ AObj.SetLineNo (T->getLine());
mCVfrQuestionDB.RegisterQuestion (NULL, NULL, QId);\r
AObj.SetQuestionId (QId);\r
AObj.SetPrompt (_STOSID(S2->getText()));\r
;\r
\r
vfrStatementGoto :\r
- << \r
+ <<\r
UINT8 RefType = 1;\r
EFI_STRING_ID DevPath;\r
EFI_GUID FSId;\r
(\r
(\r
DevicePath "=" "STRING_TOKEN" "\(" P:Number "\)" ","\r
- FormSetGuid "=" \r
- OpenBrace\r
- G11:Number "," G12:Number "," G13:Number "," G14:Number "," G15:Number "," G16:Number "," \r
- G17:Number "," G18:Number "," G19:Number "," G110:Number "," G111:Number\r
- CloseBrace ","\r
+ FormSetGuid "=" guidDefinition[FSId] ","\r
FormId "=" F1:Number ","\r
Question "=" QN1:Number ","\r
- << \r
+ <<\r
RefType = 4;\r
- _CRGUID (&FSId, G11->getText (), G12->getText (), G13->getText (), \r
- G14->getText (), G15->getText (), G16->getText (), \r
- G17->getText (), G18->getText (), G19->getText (), \r
- G110->getText (), G111->getText ()); \r
- DevPath = _STOSID(P->getText()); \r
+ DevPath = _STOSID(P->getText());\r
FId = _STOFID(F1->getText());\r
QId = _STOQID(QN1->getText());\r
>>\r
)\r
|\r
(\r
- FormSetGuid "="\r
- OpenBrace\r
- G21:Number "," G22:Number "," G23:Number "," G24:Number "," G25:Number "," G26:Number "," \r
- G27:Number "," G28:Number "," G29:Number "," G210:Number "," G211:Number\r
- CloseBrace ","\r
+ FormSetGuid "=" guidDefinition[FSId] ","\r
FormId "=" F2:Number ","\r
Question "=" QN2:Number ","\r
<<\r
RefType = 3;\r
- _CRGUID (&FSId, G21->getText (), G22->getText (), G23->getText (), \r
- G24->getText (), G25->getText (), G26->getText (), \r
- G27->getText (), G28->getText (), G29->getText (), \r
- G210->getText (), G211->getText ()); \r
FId = _STOFID(F2->getText());\r
QId = _STOQID(QN2->getText());\r
>>\r
|\r
(\r
FormId "=" F3:Number "," << RefType = 2; FId = _STOFID(F3->getText()); >>\r
- Question "=" \r
+ Question "="\r
(\r
QN3:StringIdentifier "," << mCVfrQuestionDB.GetQuestionId (QN3->getText (), NULL, QId, BitMask); >>\r
| QN4:Number "," << QId = _STOQID(QN4->getText()); >>\r
)\r
|\r
(\r
- F4:Number "," << \r
+ F4:Number "," <<\r
RefType = 1;\r
FId = _STOFID(F4->getText());\r
>>\r
switch (RefType) {\r
case 4:\r
{\r
- R4Obj = new CIfrRef4; \r
- QHObj = R4Obj; \r
- R4Obj->SetLineNo(G->getLine()); \r
- R4Obj->SetDevicePath (DevPath); \r
- R4Obj->SetFormSetId (FSId); \r
- R4Obj->SetFormId (FId); \r
- R4Obj->SetQuestionId (QId); \r
+ R4Obj = new CIfrRef4;\r
+ QHObj = R4Obj;\r
+ R4Obj->SetLineNo(G->getLine());\r
+ R4Obj->SetDevicePath (DevPath);\r
+ R4Obj->SetFormSetId (FSId);\r
+ R4Obj->SetFormId (FId);\r
+ R4Obj->SetQuestionId (QId);\r
break;\r
}\r
case 3:\r
{\r
- R3Obj = new CIfrRef3; \r
- QHObj = R3Obj; \r
- R3Obj->SetLineNo(G->getLine()); \r
- R3Obj->SetFormSetId (FSId); \r
- R3Obj->SetFormId (FId); \r
- R3Obj->SetQuestionId (QId); \r
+ R3Obj = new CIfrRef3;\r
+ QHObj = R3Obj;\r
+ R3Obj->SetLineNo(G->getLine());\r
+ R3Obj->SetFormSetId (FSId);\r
+ R3Obj->SetFormId (FId);\r
+ R3Obj->SetQuestionId (QId);\r
break;\r
}\r
case 2:\r
{\r
- R2Obj = new CIfrRef2; \r
- QHObj = R2Obj; \r
- R2Obj->SetLineNo(G->getLine()); \r
- R2Obj->SetFormId (FId); \r
+ R2Obj = new CIfrRef2;\r
+ QHObj = R2Obj;\r
+ R2Obj->SetLineNo(G->getLine());\r
+ R2Obj->SetFormId (FId);\r
_PCATCH(R2Obj->SetQuestionId (QId), QN3);\r
break;\r
}\r
\r
vfrStatementResetButton :\r
<<\r
- CIfrResetButton RBObj; \r
+ CIfrResetButton RBObj;\r
UINT16 DefaultId;\r
>>\r
L:ResetButton << RBObj.SetLineNo(L->getLine()); >>\r
- DefaultStore \r
- "=" N:StringIdentifier "," << \r
+ DefaultStore\r
+ "=" N:StringIdentifier "," <<\r
_PCATCH(mCVfrDefaultStore.GetDefaultId (N->getText(), &DefaultId), N->getLine());\r
RBObj.SetDefaultId (DefaultId);\r
>>\r
// prompt = STRING_TOKEN(STR_CHECK_BOX_PROMPT),\r
// help = STRING_TOKEN(STR_CHECK_BOX_HELP),\r
// flags = CHECKBOX_DEFAULT | CALLBACK,\r
-// default value = TRUE, defaultstore = MyDefaultStore, \r
+// default value = TRUE, defaultstore = MyDefaultStore,\r
// endcheckbox;\r
//\r
vfrStatementCheckBox :\r
<<\r
- CIfrCheckBox CBObj;\r
+ CIfrCheckBox CBObj;\r
+ EFI_IFR_TYPE_VALUE Val = {0};
+ INT8 *VarStoreName = NULL;
>>\r
L:CheckBox << CBObj.SetLineNo(L->getLine()); >>\r
vfrQuestionHeader[CBObj] ","\r
- { F:FLAGS "=" vfrCheckBoxFlags[CBObj, F->getLine()] "," }\r
+ {
+ F:FLAGS "=" vfrCheckBoxFlags[CBObj, F->getLine()] ","\r
+ <<
+ _PCATCH(mCVfrDataStorage.GetVarStoreName (_GET_CURRQEST_VARTINFO().mVarStoreId, &VarStoreName), VFR_RETURN_SUCCESS, L, "Failed to retrieve varstore name");
+ Val.b = TRUE;
+ if (CBObj.GetFlags () & 0x01) {
+ _PCATCH(
+ mCVfrDefaultStore.BufferVarStoreAltConfigAdd (
+ EFI_HII_DEFAULT_CLASS_STANDARD,
+ _GET_CURRQEST_VARTINFO(),
+ VarStoreName,
+ _GET_CURRQEST_DATATYPE (),
+ Val
+ ),
+ VFR_RETURN_SUCCESS,
+ L,
+ "No standard default storage found"
+ );
+ }
+ if (CBObj.GetFlags () & 0x02) {
+ _PCATCH(
+ mCVfrDefaultStore.BufferVarStoreAltConfigAdd (
+ EFI_HII_DEFAULT_CLASS_MANUFACTURING,
+ _GET_CURRQEST_VARTINFO(),
+ VarStoreName,
+ _GET_CURRQEST_DATATYPE (),
+ Val
+ ),
+ VFR_RETURN_SUCCESS,
+ L,
+ "No manufacturing default storage found"
+ );
+ }
+ >>
+ }
{\r
Key "=" KN:Number "," << AssignQuestionKey (CBObj, KN); >>\r
}\r
vfrStatementQuestionOptionList\r
E:EndCheckBox << CRT_END_OP (E); >>\r
";"\r
- ; \r
+ ;\r
\r
vfrCheckBoxFlags [CIfrCheckBox & CBObj, UINT32 LineNum] :\r
<<\r
EFI_QUESTION_ID QId = EFI_QUESTION_ID_INVALID;\r
INT8 *VarIdStr[3] = {NULL, };\r
CIfrDate DObj;\r
- EFI_IFR_TYPE_VALUE Val;\r
+ EFI_IFR_TYPE_VALUE Val = {0};\r
>>\r
L:Date << DObj.SetLineNo(L->getLine()); >>\r
(\r
Help "=" "STRING_TOKEN" "\(" DH:Number "\)" ","\r
minMaxDateStepDefault[Val.date, 2]\r
<<\r
- mCVfrQuestionDB.RegisterOldDateQuestion (VarIdStr[0], VarIdStr[1], VarIdStr[2], QId); \r
+ mCVfrQuestionDB.RegisterOldDateQuestion (VarIdStr[0], VarIdStr[1], VarIdStr[2], QId);\r
DObj.SetQuestionId (QId);\r
DObj.SetFlags (EFI_IFR_QUESTION_FLAG_DEFAULT, QF_DATE_STORAGE_TIME);\r
DObj.SetPrompt (_STOSID(YP->getText()));\r
DObj.SetHelp (_STOSID(YH->getText()));\r
if (VarIdStr[0] != NULL) { delete VarIdStr[0]; } if (VarIdStr[1] != NULL) { delete VarIdStr[1]; } if (VarIdStr[2] != NULL) { delete VarIdStr[2]; }\r
>>\r
- << {CIfrDefault DObj(EFI_HII_DEFAULT_CLASS_STANDARD, EFI_IFR_TYPE_DATE, Val);} >>\r
+ << {CIfrDefault DObj(EFI_HII_DEFAULT_CLASS_STANDARD, EFI_IFR_TYPE_DATE, Val); DObj.SetLineNo (D1Y->getLine());} >>\r
( vfrStatementInconsistentIf )*\r
)\r
)\r
{\r
"default" "=" N:Number "," <<\r
switch (KeyValue) {\r
- case 0: D.Year = _STOU16(N->getText()); break; \r
- case 1: D.Month = _STOU8(N->getText()); break; \r
+ case 0: D.Year = _STOU16(N->getText()); break;\r
+ case 1: D.Month = _STOU8(N->getText()); break;\r
case 2: D.Day = _STOU8(N->getText()); break;\r
- } \r
+ }\r
>>\r
}\r
;\r
\r
vfrNumericFlags [CIfrNumeric & NObj, UINT32 LineNum] :\r
<<\r
- UINT8 LFlags = _GET_CURRQEST_DATATYPE();\r
+ UINT8 LFlags = _GET_CURRQEST_DATATYPE() & EFI_IFR_NUMERIC_SIZE;\r
UINT8 HFlags = 0;\r
+ EFI_VFR_VARSTORE_TYPE VarStoreType = EFI_VFR_VARSTORE_INVALID;
>>\r
numericFlagsField[HFlags, LFlags] ( "\|" numericFlagsField[HFlags, LFlags] )*\r
- << _PCATCH(NObj.SetFlags (HFlags, LFlags), LineNum); >>\r
+ <<
+ //check data type flag
+ VarStoreType = mCVfrDataStorage.GetVarStoreType (_GET_CURRQEST_VARTINFO().mVarStoreId);
+ if (VarStoreType == EFI_VFR_VARSTORE_BUFFER || VarStoreType == EFI_VFR_VARSTORE_EFI) {
+ if (_GET_CURRQEST_DATATYPE() != (LFlags & EFI_IFR_NUMERIC_SIZE)) {
+ _PCATCH(VFR_RETURN_INVALID_PARAMETER, LineNum, "Numeric Flag is not same to Numeric VarData type");
+ }
+ } else {
+ // update data type for name/value store
+ UINT32 DataTypeSize;
+ _GET_CURRQEST_VARTINFO().mVarType = LFlags & EFI_IFR_NUMERIC_SIZE;
+ mCVfrVarDataTypeDB.GetDataTypeSize (_GET_CURRQEST_DATATYPE(), &DataTypeSize);
+ _GET_CURRQEST_VARTINFO().mVarTotalSize = DataTypeSize;
+ }
+ _PCATCH(NObj.SetFlags (HFlags, LFlags), LineNum);\r
+ >>
;\r
\r
numericFlagsField [UINT8 & HFlags, UINT8 & LFlags] :\r
N:Number << _PCATCH(_STOU8(N->getText()) == 0 ? VFR_RETURN_SUCCESS : VFR_RETURN_UNSUPPORTED, N->getLine()); >>\r
- | "DISPLAY_INT_DEC" << $LFlags |= 0x00; >>\r
- | "DISPLAY_UINT_DEC" << $LFlags |= 0x10; >>\r
- | "DISPLAY_UINT_HEX" << $LFlags |= 0x20; >>\r
+ | "NUMERIC_SIZE_1" << $LFlags = ($LFlags & ~EFI_IFR_NUMERIC_SIZE) | EFI_IFR_NUMERIC_SIZE_1; >>\r
+ | "NUMERIC_SIZE_2" << $LFlags = ($LFlags & ~EFI_IFR_NUMERIC_SIZE) | EFI_IFR_NUMERIC_SIZE_2; >>\r
+ | "NUMERIC_SIZE_4" << $LFlags = ($LFlags & ~EFI_IFR_NUMERIC_SIZE) | EFI_IFR_NUMERIC_SIZE_4; >>\r
+ | "NUMERIC_SIZE_8" << $LFlags = ($LFlags & ~EFI_IFR_NUMERIC_SIZE) | EFI_IFR_NUMERIC_SIZE_8; >>
+ | "DISPLAY_INT_DEC" << $LFlags = ($LFlags & ~EFI_IFR_DISPLAY) | EFI_IFR_DISPLAY_INT_DEC; >>
+ | "DISPLAY_UINT_DEC" << $LFlags = ($LFlags & ~EFI_IFR_DISPLAY) | EFI_IFR_DISPLAY_UINT_DEC; >>
+ | "DISPLAY_UINT_HEX" << $LFlags = ($LFlags & ~EFI_IFR_DISPLAY) | EFI_IFR_DISPLAY_UINT_HEX; >>
| questionheaderFlagsField[HFlags]\r
;\r
\r
CIfrOneOf OObj;\r
>>\r
L:OneOf << OObj.SetLineNo(L->getLine()); >>\r
- vfrQuestionHeader[OObj] ","\r
+ vfrQuestionHeader[OObj] "," << _PCATCH(OObj.SetFlags (OObj.FLAGS(), _GET_CURRQEST_DATATYPE()), L->getLine()); >>\r
{ F:FLAGS "=" vfrOneofFlagsField[OObj, F->getLine()] "," }\r
- { \r
+ {\r
vfrSetMinMaxStep[OObj]\r
}\r
vfrStatementQuestionOptionList\r
\r
vfrOneofFlagsField [CIfrOneOf & OObj, UINT32 LineNum] :\r
<<\r
- UINT8 LFlags = _GET_CURRQEST_DATATYPE();\r
+ UINT8 LFlags = _GET_CURRQEST_DATATYPE() & EFI_IFR_NUMERIC_SIZE;\r
UINT8 HFlags = 0;\r
+ EFI_VFR_VARSTORE_TYPE VarStoreType = EFI_VFR_VARSTORE_INVALID;
>>\r
numericFlagsField[HFlags, LFlags] ( "\|" numericFlagsField[HFlags, LFlags] )*\r
- << _PCATCH(OObj.SetFlags (HFlags, LFlags), LineNum); >>\r
+ <<
+ //check data type flag
+ VarStoreType = mCVfrDataStorage.GetVarStoreType (_GET_CURRQEST_VARTINFO().mVarStoreId);
+ if (VarStoreType == EFI_VFR_VARSTORE_BUFFER || VarStoreType == EFI_VFR_VARSTORE_EFI) {
+ if (_GET_CURRQEST_DATATYPE() != (LFlags & EFI_IFR_NUMERIC_SIZE)) {
+ _PCATCH(VFR_RETURN_INVALID_PARAMETER, LineNum, "Numeric Flag is not same to Numeric VarData type");
+ }
+ } else {
+ // update data type for Name/Value store
+ UINT32 DataTypeSize;
+ _GET_CURRQEST_VARTINFO().mVarType = LFlags & EFI_IFR_NUMERIC_SIZE;
+ mCVfrVarDataTypeDB.GetDataTypeSize (_GET_CURRQEST_DATATYPE(), &DataTypeSize);
+ _GET_CURRQEST_VARTINFO().mVarTotalSize = DataTypeSize;
+ }
+ _PCATCH(OObj.SetFlags (HFlags, LFlags), LineNum);\r
+ >>
;\r
\r
vfrStatementStringType :\r
CIfrString SObj;\r
>>\r
L:String << SObj.SetLineNo(L->getLine()); >>\r
- vfrQuestionHeader[SObj] "," << _PCATCH(SObj.SetFlags (SObj.FLAGS(), _GET_CURRQEST_DATATYPE()), L->getLine()); >>\r
+ vfrQuestionHeader[SObj] ","\r
{ F:FLAGS "=" vfrStringFlagsField[SObj, F->getLine()] "," }\r
{\r
Key "=" KN:Number "," << AssignQuestionKey (SObj, KN); >>\r
\r
vfrStatementPassword :\r
<<\r
- CIfrPassword PObj; \r
+ CIfrPassword PObj;\r
>>\r
L:Password << PObj.SetLineNo(L->getLine()); >>\r
vfrQuestionHeader[PObj] ","\r
\r
vfrStatementOrderedList :\r
<<\r
- CIfrOrderedList OLObj; \r
+ CIfrOrderedList OLObj;\r
>>\r
L:OrderedList << OLObj.SetLineNo(L->getLine()); >>\r
vfrQuestionHeader[OLObj] ","\r
- << OLObj.SetMaxContainers ((UINT8)_GET_CURRQEST_VARSIZE()); >>\r
- { \r
+ << OLObj.SetMaxContainers ((UINT8)_GET_CURRQEST_ARRAY_SIZE()); >>\r
+ {\r
MaxContainers "=" M:Number "," << OLObj.SetMaxContainers (_STOU8(M->getText())); >>\r
}\r
{ F:FLAGS "=" vfrOrderedListFlags[OLObj, F->getLine()] }\r
EFI_QUESTION_ID QId = EFI_QUESTION_ID_INVALID;\r
INT8 *VarIdStr[3] = {NULL, };\r
CIfrTime TObj;\r
- EFI_IFR_TYPE_VALUE Val;\r
+ EFI_IFR_TYPE_VALUE Val = {0};\r
>>\r
L:Time << TObj.SetLineNo(L->getLine()); >>\r
(\r
(\r
vfrQuestionHeader[TObj, QUESTION_TIME] ","\r
{ F:FLAGS "=" vfrTimeFlags[TObj, F->getLine()] "," }\r
- vfrStatementDefault\r
+ vfrStatementQuestionOptionList\r
)\r
|\r
(\r
Help "=" "STRING_TOKEN" "\(" SH:Number "\)" ","\r
minMaxTimeStepDefault[Val.time, 2]\r
<<\r
- mCVfrQuestionDB.RegisterOldTimeQuestion (VarIdStr[0], VarIdStr[1], VarIdStr[2], QId); \r
+ mCVfrQuestionDB.RegisterOldTimeQuestion (VarIdStr[0], VarIdStr[1], VarIdStr[2], QId);\r
TObj.SetQuestionId (QId);\r
TObj.SetFlags (EFI_IFR_QUESTION_FLAG_DEFAULT, QF_TIME_STORAGE_TIME);\r
TObj.SetPrompt (_STOSID(HP->getText()));\r
TObj.SetHelp (_STOSID(HH->getText()));\r
if (VarIdStr[0] != NULL) { delete VarIdStr[0]; } if (VarIdStr[1] != NULL) { delete VarIdStr[1]; } if (VarIdStr[2] != NULL) { delete VarIdStr[2]; }\r
>>\r
- << {CIfrDefault DObj(EFI_HII_DEFAULT_CLASS_STANDARD, EFI_IFR_TYPE_TIME, Val);} >>\r
+ << {CIfrDefault DObj(EFI_HII_DEFAULT_CLASS_STANDARD, EFI_IFR_TYPE_TIME, Val); DObj.SetLineNo (T1H->getLine());} >>\r
)\r
)\r
E:EndTime << CRT_END_OP (E); >>\r
{\r
"default" "=" N:Number "," <<\r
switch (KeyValue) {\r
- case 0: T.Hour = _STOU8(N->getText()); break; \r
- case 1: T.Minute = _STOU8(N->getText()); break; \r
+ case 0: T.Hour = _STOU8(N->getText()); break;\r
+ case 1: T.Minute = _STOU8(N->getText()); break;\r
case 2: T.Second = _STOU8(N->getText()); break;\r
- } \r
+ }\r
>>\r
}\r
;\r
vfrStatementNoSubmitIf |\r
vfrStatementDisableIfQuest |\r
vfrStatementRefresh |\r
- vfrStatementVarstoreDevice \r
+ vfrStatementVarstoreDevice\r
;\r
\r
vfrStatementQuestionTagList :\r
vfrStatementQuestionOptionList :\r
(\r
vfrStatementQuestionTag |\r
- vfrStatementQuestionOptionTag \r
+ vfrStatementQuestionOptionTag\r
)*\r
;\r
\r
vfrStatementQuestions |\r
vfrStatementConditional |\r
// Just for framework vfr compatibility\r
- vfrStatementLabel \r
+ vfrStatementLabel\r
//vfrStatementInvalid\r
;\r
\r
vfrStatementDisableIfStat :\r
- << CIfrDisableIf DIObj; >>\r
+ <<
+ CIfrDisableIf DIObj;\r
+ UINT32 ExpOpCount = 0;
+ >>
L:DisableIf << DIObj.SetLineNo(L->getLine()); >>\r
- vfrStatementExpression[0] ";"\r
+ vfrStatementExpression[0, ExpOpCount] ";" << mConstantOnlyInExpression = FALSE; >>\r
( vfrStatementStatList )*\r
E:EndIf << CRT_END_OP (E); >>\r
";"\r
;\r
\r
vfrStatementSuppressIfStat :\r
- << CIfrSuppressIf SIObj; >>\r
+ <<
+ CIfrSuppressIf SIObj;\r
+ UINT32 ExpOpCount = 0;
+ >>
L:SuppressIf << SIObj.SetLineNo(L->getLine()); >>\r
{ FLAGS "=" flagsField ( "\|" flagsField )* "," }\r
- vfrStatementExpression[0] ";"\r
+ vfrStatementExpression[0, ExpOpCount] ";"\r
( vfrStatementStatList )*\r
E:EndIf << CRT_END_OP (E); >>\r
";"\r
;\r
\r
vfrStatementGrayOutIfStat :\r
- << CIfrGrayOutIf GOIObj; >>\r
+ <<
+ CIfrGrayOutIf GOIObj;\r
+ UINT32 ExpOpCount = 0;
+ >>
L:GrayOutIf << GOIObj.SetLineNo(L->getLine()); >>\r
{ FLAGS "=" flagsField ( "\|" flagsField )* "," }\r
- vfrStatementExpression[0]\r
+ vfrStatementExpression[0, ExpOpCount]\r
";"\r
( vfrStatementStatList )*\r
E:EndIf << CRT_END_OP (E); >>\r
;\r
\r
vfrStatementInconsistentIf :\r
- << CIfrInconsistentIf IIObj; >>\r
+ <<
+ CIfrInconsistentIf IIObj;\r
+ UINT32 ExpOpCount = 0;
+ >>
L:InconsistentIf << IIObj.SetLineNo(L->getLine()); >>\r
Prompt "=" "STRING_TOKEN" "\(" S:Number "\)" "," << IIObj.SetError (_STOSID(S->getText())); >>\r
{ FLAGS "=" flagsField ( "\|" flagsField )* "," }\r
- vfrStatementExpression[0]\r
+ vfrStatementExpression[0, ExpOpCount]\r
E:EndIf << CRT_END_OP (E); >>\r
;\r
\r
vfrStatementNoSubmitIf :\r
- << CIfrNoSubmitIf NSIObj; >>\r
+ <<
+ CIfrNoSubmitIf NSIObj;\r
+ UINT32 ExpOpCount = 0;
+ >>
L:NoSubmitIf << NSIObj.SetLineNo(L->getLine()); >>\r
Prompt "=" "STRING_TOKEN" "\(" S:Number "\)" "," << NSIObj.SetError (_STOSID(S->getText())); >>\r
{ FLAGS "=" flagsField ( "\|" flagsField )* "," }\r
- vfrStatementExpression[0]\r
+ vfrStatementExpression[0, ExpOpCount]\r
E:EndIf << CRT_END_OP (E); >>\r
;\r
\r
vfrStatementDisableIfQuest :\r
- << CIfrDisableIf DIObj; >>\r
+ <<
+ CIfrDisableIf DIObj;\r
+ UINT32 ExpOpCount = 0;
+ >>
L:DisableIf << DIObj.SetLineNo(L->getLine()); >>\r
- vfrStatementExpression[0] ";"\r
+ vfrStatementExpression[0, ExpOpCount] ";" << mConstantOnlyInExpression = FALSE; >>\r
vfrStatementQuestionOptionList\r
E:EndIf << CRT_END_OP (E); >>\r
;\r
;\r
\r
vfrStatementSuppressIfQuest :\r
- << CIfrSuppressIf SIObj; >>\r
+ <<
+ CIfrSuppressIf SIObj;\r
+ UINT32 ExpOpCount = 0;
+ >>
L:SuppressIf << SIObj.SetLineNo(L->getLine()); >>\r
{ FLAGS "=" flagsField ( "\|" flagsField )* "," }\r
- vfrStatementExpression[0] ";"\r
+ vfrStatementExpression[0, ExpOpCount] ";"\r
vfrStatementQuestionOptionList\r
E:EndIf << CRT_END_OP (E); >>\r
;\r
\r
vfrStatementOneOfOption :\r
<<\r
- EFI_IFR_TYPE_VALUE Val;\r
+ EFI_IFR_TYPE_VALUE Val = {0};\r
CIfrOneOfOption OOOObj;\r
INT8 *VarStoreName = NULL;\r
- \r
+\r
>>\r
L:Option << OOOObj.SetLineNo(L->getLine()); >>\r
Text "=" "STRING_TOKEN" "\(" S:Number "\)" "," << OOOObj.SetOption (_STOSID(S->getText())); >>\r
- Value "=" vfrConstantValueField[_GET_CURRQEST_DATATYPE()] >[Val] "," << OOOObj.SetType (_GET_CURRQEST_DATATYPE()); OOOObj.SetValue (Val); >>\r
+ Value "=" vfrConstantValueField[_GET_CURRQEST_DATATYPE()] >[Val] "," \r
+ <<
+ if (gCurrentMinMaxData != NULL) {
+ //set min/max value for oneof opcode
+ UINT64 Step = gCurrentMinMaxData->GetStepData(_GET_CURRQEST_DATATYPE());
+ switch (_GET_CURRQEST_DATATYPE()) {
+ case EFI_IFR_TYPE_NUM_SIZE_64:
+ gCurrentMinMaxData->SetMinMaxStepData(Val.u64, Val.u64, Step);
+ break;
+ case EFI_IFR_TYPE_NUM_SIZE_32:
+ gCurrentMinMaxData->SetMinMaxStepData(Val.u32, Val.u32, (UINT32) Step);
+ break;
+ case EFI_IFR_TYPE_NUM_SIZE_16:
+ gCurrentMinMaxData->SetMinMaxStepData(Val.u16, Val.u16, (UINT16) Step);
+ break;
+ case EFI_IFR_TYPE_NUM_SIZE_8:
+ gCurrentMinMaxData->SetMinMaxStepData(Val.u8, Val.u8, (UINT8) Step);
+ break;
+ default:
+ break;
+ }
+ }
+ OOOObj.SetType (_GET_CURRQEST_DATATYPE());
+ OOOObj.SetValue (Val);
+ >>
F:FLAGS "=" vfrOneOfOptionFlags[OOOObj, F->getLine()]\r
<<\r
if (OOOObj.GetFlags () & 0x10) {\r
_PCATCH(mCVfrDataStorage.GetVarStoreName (_GET_CURRQEST_VARTINFO().mVarStoreId, &VarStoreName), L->getLine());\r
_PCATCH(mCVfrDefaultStore.BufferVarStoreAltConfigAdd (\r
- EFI_HII_DEFAULT_CLASS_STANDARD, \r
- _GET_CURRQEST_VARTINFO(), \r
- VarStoreName, \r
- _GET_CURRQEST_DATATYPE (), \r
+ EFI_HII_DEFAULT_CLASS_STANDARD,\r
+ _GET_CURRQEST_VARTINFO(),\r
+ VarStoreName,\r
+ _GET_CURRQEST_DATATYPE (),\r
Val\r
), L->getLine());\r
}\r
>>\r
- { "," Key "=" Number } // no use in UEFI2.1 VFR\r
(\r
"," vfrImageTag << OOOObj.SetScope (1); CIfrEnd EOOOObj; >>\r
)*\r
\r
vfrOneOfOptionFlags [CIfrOneOfOption & OOOObj, UINT32 LineNum] :\r
<<\r
- UINT8 LFlags = _GET_CURRQEST_DATATYPE();\r
+ UINT8 LFlags = 0;\r
UINT8 HFlags = 0;\r
>>\r
oneofoptionFlagsField[HFlags, LFlags] ( "\|" oneofoptionFlagsField[HFlags, LFlags] )*\r
| DefaultFlag << $LFlags |= 0x10; >>\r
;\r
\r
-//vfrStatementGuid :\r
-// <<\r
-// EFI_GUID Guid; \r
-// CIfrGuid GObj;\r
-// >>\r
-// GuidAction\r
-// GUID "=" \r
-// OpenBrace\r
-// G1:Number "," G2:Number "," G3:Number "," G4:Number "," G5:Number "," G6:Number "," \r
-// G7:Number "," G8:Number "," G9:Number "," G10:Number "," G11:Number\r
-// CloseBrace\r
-// << \r
-// _CRGUID (&Guid, G1->getText (), G2->getText (), G3->getText (), \r
-// G4->getText (), G5->getText (), G6->getText (), \r
-// G7->getText (), G8->getText (), G9->getText (), \r
-// G10->getText (), G11->getText ()); \r
-// >>\r
-// << GObj.SetGuid (&Guid); >>\r
-// ";"\r
-// ;\r
-\r
vfrStatementLabel :\r
<< CIfrLabel LObj; >>\r
L:Label << LObj.SetLineNo(L->getLine()); >>\r
B:Banner { "," } << BObj.SetLineNo(B->getLine()); >>\r
Title "=" "STRING_TOKEN" "\(" S:Number "\)" "," << BObj.SetTitle (_STOSID(S->getText())); >>\r
(\r
- ( \r
+ (\r
Line L:Number "," << BObj.SetLine (_STOU16(L->getText())); >>\r
- Align \r
+ Align\r
(\r
Left << BObj.SetAlign (0); >>\r
| Center << BObj.SetAlign (1); >>\r
//\r
// keep some syntax for compatibility but not generate any IFR object\r
//\r
-vfrStatementInvalidHidden : \r
+vfrStatementInvalidHidden :\r
Hidden\r
Value "=" Number ","\r
Key "=" Number ";"\r
;\r
\r
vfrStatementInvalidInconsistentIf :\r
+ << UINT32 ExpOpCount = 0; >>
InconsistentIf\r
Prompt "=" "STRING_TOKEN" "\(" S:Number "\)" ","\r
{ FLAGS "=" flagsField ( "\|" flagsField )* "," }\r
- vfrStatementExpression[0]\r
+ vfrStatementExpression[0, ExpOpCount]\r
EndIf\r
";"\r
;\r
{\r
Text "=" "STRING_TOKEN" "\(" Number "\)"\r
}\r
- ";" \r
+ ";"\r
;\r
\r
-vfrStatementInvalidSaveRestoreDefaults : \r
+vfrStatementInvalidSaveRestoreDefaults :\r
(Save | Restore)\r
Defaults ","\r
FormId "=" Number ","\r
Prompt "=" "STRING_TOKEN" "\(" Number "\)" ","\r
- Help "=" "STRING_TOKEN" "\(" Number "\)" \r
+ Help "=" "STRING_TOKEN" "\(" Number "\)"\r
{ "," FLAGS "=" flagsField ( "\|" flagsField )* }\r
{ "," Key "=" Number }\r
";"\r
#token QuestionRefVal("questionrefval") "questionrefval"\r
#token StringRefVal("stringrefval") "stringrefval"\r
\r
-vfrStatementExpression [UINT32 RootLevel, UINT32 ExpOpCount = 0] :\r
+vfrStatementExpression [UINT32 RootLevel, UINT32 & ExpOpCount] :\r
<< if ($RootLevel == 0) {_CLEAR_SAVED_OPHDR ();} >>\r
andTerm[$RootLevel, $ExpOpCount]\r
(\r
L:OR andTerm[$RootLevel, $ExpOpCount] << $ExpOpCount++; CIfrOr OObj(L->getLine()); >>\r
)*\r
- << if (($RootLevel == 0) && ($ExpOpCount > 1)) {_SET_SAVED_OPHDR_SCOPE(); CIfrEnd EObj; } >>\r
+ << if (($RootLevel == 0) && ($ExpOpCount > 1)) {_SET_SAVED_OPHDR_SCOPE(); CIfrEnd EObj; EObj.SetLineNo (0);} >>\r
;\r
\r
andTerm[UINT32 & RootLevel, UINT32 & ExpOpCount] :\r
;\r
\r
bitwiseorTerm [UINT32 & RootLevel, UINT32 & ExpOpCount]:\r
- bitwiseandTerm[$RootLevel, $ExpOpCount] \r
+ bitwiseandTerm[$RootLevel, $ExpOpCount]\r
(\r
L:"\|" bitwiseandTerm[$RootLevel, $ExpOpCount] << $ExpOpCount++; CIfrBitWiseOr BWOObj(L->getLine()); >>\r
)*\r
;\r
\r
shiftTerm [UINT32 & RootLevel, UINT32 & ExpOpCount]:\r
- addMinusTerm[$RootLevel, $ExpOpCount] \r
+ addMinusTerm[$RootLevel, $ExpOpCount]\r
(\r
(\r
L1:"\<<" addMinusTerm[$RootLevel, $ExpOpCount] << $ExpOpCount++; CIfrShiftLeft SLObj(L1->getLine()); >>\r
;\r
\r
multdivmodTerm [UINT32 & RootLevel, UINT32 & ExpOpCount]:\r
- atomTerm[$RootLevel, $ExpOpCount]\r
- ( \r
+ castTerm[$RootLevel, $ExpOpCount]\r
+ (\r
(\r
- L1:"\*" atomTerm[$RootLevel, $ExpOpCount] << $ExpOpCount++; CIfrMultiply MObj(L1->getLine()); >>\r
+ L1:"\*" castTerm[$RootLevel, $ExpOpCount] << $ExpOpCount++; CIfrMultiply MObj(L1->getLine()); >>\r
)\r
|\r
(\r
- L2:"/" atomTerm[$RootLevel, $ExpOpCount] << $ExpOpCount++; CIfrDivide DObj(L2->getLine()); >>\r
+ L2:"/" castTerm[$RootLevel, $ExpOpCount] << $ExpOpCount++; CIfrDivide DObj(L2->getLine()); >>\r
)\r
|\r
(\r
- L3:"%" atomTerm[$RootLevel, $ExpOpCount] << $ExpOpCount++; CIfrModulo MObj(L3->getLine()); >>\r
- ) \r
+ L3:"%" castTerm[$RootLevel, $ExpOpCount] << $ExpOpCount++; CIfrModulo MObj(L3->getLine()); >>\r
+ )\r
)*\r
+ ;
+
+castTerm [UINT32 & RootLevel, UINT32 & ExpOpCount]:
+ << UINT8 CastType = 0xFF; >>
+ (
+ L:"\("
+ (
+ Boolean << CastType = 0; >>
+ | Uint64 << CastType = 1; >>
+ | Uint32 << CastType = 1; >>
+ | Uint16 << CastType = 1; >>
+ | Uint8 << CastType = 1; >>
+ )
+ "\)"
+ )*
+ atomTerm[$RootLevel, $ExpOpCount]
+ <<
+ switch (CastType) {
+ case 0: { CIfrToBoolean TBObj(L->getLine()); $ExpOpCount++; } break;
+ case 1: { CIfrToUint TUObj(L->getLine()); $ExpOpCount++; } break;
+ }
+ >>
;\r
\r
atomTerm [UINT32 & RootLevel, UINT32 & ExpOpCount]:\r
_SAVE_OPHDR_COND (EIVObj, ($ExpOpCount == 0));\r
EIVObj.SetQuestionId (QId, VarIdStr, LineNo);\r
EIVObj.SetValue (ConstVal);\r
- $ExpOpCount++; \r
+ $ExpOpCount++;\r
} else {\r
IdEqValDoSpecial ($ExpOpCount, L->getLine(), QId, VarIdStr, Mask, ConstVal, EQUAL);\r
}\r
vfrQuestionDataFieldName[QId[0], Mask[0], VarIdStr[0], LineNo[0]]\r
(\r
(\r
- "==" \r
+ "=="\r
vfrQuestionDataFieldName[QId[1], Mask[1], VarIdStr[1], LineNo[1]]\r
<<\r
if (Mask[0] & Mask[1]) {\r
_SAVE_OPHDR_COND (EIIObj, ($ExpOpCount == 0));\r
EIIObj.SetQuestionId1 (QId[0], VarIdStr[0], LineNo[0]);\r
EIIObj.SetQuestionId2 (QId[1], VarIdStr[1], LineNo[1]);\r
- $ExpOpCount++; \r
+ $ExpOpCount++;\r
}\r
>>\r
)\r
>>\r
L:IdEqValList\r
vfrQuestionDataFieldName[QId, Mask, VarIdStr, LineNo]\r
- "==" \r
+ "=="\r
(\r
V:Number << ValueList[ListLen] = _STOU16(V->getText()); ListLen++; >>\r
)+\r
vareqvarlExp[UINT32 & RootLevel, UINT32 & ExpOpCount] :\r
L:VarEqVal Var "\(" V1:Number "\)" "==" V2:Number <<\r
{\r
- CIfrUint64 U64Obj1(L->getLine()), U64Obj2(L->getLine()); \r
- _SAVE_OPHDR_COND (U64Obj1, ($ExpOpCount == 0)); \r
- U64Obj1.SetValue (_STOU64(V1->getText())); \r
+ CIfrUint64 U64Obj1(L->getLine()), U64Obj2(L->getLine());\r
+ _SAVE_OPHDR_COND (U64Obj1, ($ExpOpCount == 0));\r
+ U64Obj1.SetValue (_STOU64(V1->getText()));\r
U64Obj2.SetValue (_STOU64(V2->getText()));\r
}\r
>>\r
Path "=" "STRING_TOKEN" "\(" S:Number "\)" << Type = 0x4; DevPath = _STOSID(S->getText()); >>\r
}\r
{\r
- GUID "=" \r
- OpenBrace\r
- G1:Number "," G2:Number "," G3:Number "," G4:Number "," G5:Number "," G6:Number "," \r
- G7:Number "," G8:Number "," G9:Number "," G10:Number "," G11:Number\r
- CloseBrace\r
- <<\r
- Type = 0x5;\r
- _CRGUID (&Guid, G1->getText (), G2->getText (), G3->getText (), \r
- G4->getText (), G5->getText (), G6->getText (), \r
- G7->getText (), G8->getText (), G9->getText (), \r
- G10->getText (), G11->getText ()); \r
- >>\r
+ Uuid "=" guidDefinition[Guid] << Type = 0x5; >>\r
}\r
)\r
|\r
(\r
"\("\r
(\r
- QN:StringIdentifier << \r
+ QN:StringIdentifier <<\r
QName = QN->getText();\r
LineNo = QN->getLine();\r
mCVfrQuestionDB.GetQuestionId (QN->getText(), NULL, QId, BitMask);\r
| bitwisenotExp[$RootLevel, $ExpOpCount]\r
| question2refExp[$RootLevel, $ExpOpCount]\r
| stringref2Exp[$RootLevel, $ExpOpCount]\r
+ | toboolExp[$RootLevel, $ExpOpCount]
| unintExp[$RootLevel, $ExpOpCount]\r
| toupperExp[$RootLevel, $ExpOpCount]\r
| tolwerExp[$RootLevel, $ExpOpCount]\r
findFormat[Format] ( "\|" findFormat[Format] )*\r
","\r
vfrStatementExpression[$RootLevel + 1, $ExpOpCount]\r
- "," \r
+ ","\r
vfrStatementExpression[$RootLevel + 1, $ExpOpCount]\r
","\r
vfrStatementExpression[$RootLevel + 1, $ExpOpCount]\r
vfrStatementExpression[$RootLevel + 1, $ExpOpCount]\r
","\r
vfrStatementExpression[$RootLevel + 1, $ExpOpCount]\r
- "," \r
+ ","\r
vfrStatementExpression[$RootLevel + 1, $ExpOpCount]\r
"\)" << { CIfrToken TObj(L->getLine()); $ExpOpCount++; } >>\r
;\r
\r
//******************************************************************************\r
//\r
-// Parser class definition. \r
-// \r
+// Parser class definition.\r
+//\r
class EfiVfrParser {\r
<<\r
private:\r
UINT8 mParserStatus;\r
+ BOOLEAN mConstantOnlyInExpression;
\r
CVfrDefaultStore mCVfrDefaultStore;\r
CVfrVarDataTypeDB mCVfrVarDataTypeDB;\r
\r
UINT8 _GET_CURRQEST_DATATYPE ();\r
UINT32 _GET_CURRQEST_VARSIZE ();\r
+ UINT32 _GET_CURRQEST_ARRAY_SIZE ();
\r
public:\r
- VOID _PCATCH (IN EFI_VFR_RETURN_CODE, IN EFI_VFR_RETURN_CODE, IN ANTLRTokenPtr, IN INT8 *);\r
+ VOID _PCATCH (IN INTN, IN INTN, IN ANTLRTokenPtr, IN INT8 *);\r
VOID _PCATCH (IN EFI_VFR_RETURN_CODE);\r
VOID _PCATCH (IN EFI_VFR_RETURN_CODE, IN ANTLRTokenPtr);\r
VOID _PCATCH (IN EFI_VFR_RETURN_CODE, IN UINT32);\r
+ VOID _PCATCH (IN EFI_VFR_RETURN_CODE, IN UINT32, IN INT8 *);
\r
VOID syn (ANTLRAbstractToken *, ANTLRChar *, SetWordType *, ANTLRTokenType, INT32);\r
\r
<<\r
VOID\r
EfiVfrParser::_SAVE_OPHDR_COND (\r
- IN CIfrOpHeader &OpHdr, \r
+ IN CIfrOpHeader &OpHdr,\r
IN BOOLEAN Cond\r
)\r
{\r
return mCurrQestVarInfo.mVarTotalSize;\r
}\r
\r
+UINT32
+EfiVfrParser::_GET_CURRQEST_ARRAY_SIZE (
+ VOID
+ )
+{
+ UINT8 Size = 1;
+
+ switch (mCurrQestVarInfo.mVarType) {
+ case EFI_IFR_TYPE_NUM_SIZE_8:
+ Size = 1;
+ break;
+
+ case EFI_IFR_TYPE_NUM_SIZE_16:
+ Size = 2;
+ break;
+
+ case EFI_IFR_TYPE_NUM_SIZE_32:
+ Size = 4;
+ break;
+
+ case EFI_IFR_TYPE_NUM_SIZE_64:
+ Size = 8;
+ break;
+
+ default:
+ break;
+ }
+
+ return (mCurrQestVarInfo.mVarTotalSize / Size);
+}
+
VOID\r
EfiVfrParser::_PCATCH (\r
- IN EFI_VFR_RETURN_CODE ReturnCode,\r
- IN EFI_VFR_RETURN_CODE ExpectCode,\r
+ IN INTN ReturnCode,\r
+ IN INTN ExpectCode,\r
IN ANTLRTokenPtr Tok,\r
IN INT8 *ErrorMsg\r
)\r
{\r
if (ReturnCode != ExpectCode) {\r
mParserStatus++;\r
- gCVfrErrorHandle.PrintError (Tok->getLine(), Tok->getText(), ErrorMsg);\r
+ gCVfrErrorHandle.PrintMsg (Tok->getLine(), Tok->getText(), "Error", ErrorMsg);\r
}\r
}\r
\r
)\r
{\r
mParserStatus += gCVfrErrorHandle.HandleError (ReturnCode, LineNum);\r
+}
+
+VOID
+EfiVfrParser::_PCATCH (
+ IN EFI_VFR_RETURN_CODE ReturnCode,
+ IN UINT32 LineNum,
+ IN INT8 *ErrorMsg
+ )
+{
+ mParserStatus = mParserStatus + gCVfrErrorHandle.HandleError (ReturnCode, LineNum, ErrorMsg);
}\r
\r
-VOID \r
+VOID\r
EfiVfrParser::syn (\r
- ANTLRAbstractToken *Tok, \r
- ANTLRChar *Egroup, \r
- SetWordType *Eset, \r
- ANTLRTokenType ETok, \r
+ ANTLRAbstractToken *Tok,\r
+ ANTLRChar *Egroup,\r
+ SetWordType *Eset,\r
+ ANTLRTokenType ETok,\r
INT32 Huh\r
)\r
{\r
}\r
if (c >= '0' && c <= '9') {\r
Value += (c - '0');\r
- } \r
+ }\r
}\r
\r
return Value;\r
}\r
if (c >= '0' && c <= '9') {\r
Value += (c - '0');\r
- } \r
+ }\r
}\r
\r
return Value;\r
}\r
if (c >= '0' && c <= '9') {\r
Value += (c - '0');\r
- } \r
+ }\r
}\r
\r
return Value;\r
EfiVfrParser::_STOU64 (\r
IN INT8 *Str\r
)\r
-{ \r
+{\r
BOOLEAN IsHex;\r
UINT64 Value;\r
INT8 c;\r
}\r
if (c >= '0' && c <= '9') {\r
Value += (c - '0');\r
- } \r
+ }\r
}\r
\r
return Value;\r
-} \r
+}\r
\r
EFI_HII_DATE\r
EfiVfrParser::_STOD (\r
- IN INT8 *Year, \r
- IN INT8 *Month, \r
+ IN INT8 *Year,\r
+ IN INT8 *Month,\r
IN INT8 *Day\r
)\r
{\r
\r
EFI_HII_TIME\r
EfiVfrParser::_STOT (\r
- IN INT8 *Hour, \r
- IN INT8 *Minute, \r
+ IN INT8 *Hour,\r
+ IN INT8 *Minute,\r
IN INT8 *Second\r
)\r
{\r
return (EFI_FORM_ID)_STOU16(Str);\r
}\r
\r
-EFI_QUESTION_ID \r
+EFI_QUESTION_ID\r
EfiVfrParser::_STOQID (\r
IN INT8 *Str\r
)\r
\r
VOID\r
EfiVfrParser::_CRGUID (\r
- IN EFI_GUID *Guid, \r
- IN INT8 *G1, \r
- IN INT8 *G2, \r
- IN INT8 *G3, \r
- IN INT8 *G4, \r
- IN INT8 *G5, \r
- IN INT8 *G6, \r
- IN INT8 *G7, \r
- IN INT8 *G8, \r
- IN INT8 *G9, \r
- IN INT8 *G10, \r
+ IN EFI_GUID *Guid,\r
+ IN INT8 *G1,\r
+ IN INT8 *G2,\r
+ IN INT8 *G3,\r
+ IN INT8 *G4,\r
+ IN INT8 *G5,\r
+ IN INT8 *G6,\r
+ IN INT8 *G7,\r
+ IN INT8 *G8,\r
+ IN INT8 *G9,\r
+ IN INT8 *G10,\r
IN INT8 *G11\r
)\r
{\r
\r
VSObj.SetLineNo (LineNo);\r
mCVfrDataStorage.DeclareBufferVarStore (\r
- TypeNameList[Index], \r
- &DefaultGuid, \r
- &mCVfrVarDataTypeDB, \r
+ TypeNameList[Index],\r
+ &DefaultGuid,\r
+ &mCVfrVarDataTypeDB,\r
TypeNameList[Index],\r
EFI_VARSTORE_ID_INVALID\r
);\r
\r
VSObj.SetLineNo (LineNo);\r
mCVfrDataStorage.DeclareBufferVarStore (\r
- "Date", \r
- &DefaultGuid, \r
- &mCVfrVarDataTypeDB, \r
+ "Date",\r
+ &DefaultGuid,\r
+ &mCVfrVarDataTypeDB,\r
"EFI_HII_DATE",\r
EFI_VARSTORE_ID_INVALID\r
);\r
\r
VSObj.SetLineNo (LineNo);\r
mCVfrDataStorage.DeclareBufferVarStore (\r
- "Time", \r
- &DefaultGuid, \r
- &mCVfrVarDataTypeDB, \r
+ "Time",\r
+ &DefaultGuid,\r
+ &mCVfrVarDataTypeDB,\r
"EFI_HII_TIME",\r
EFI_VARSTORE_ID_INVALID\r
);\r
IN UINT32 LineNo\r
)\r
{\r
- CIfrDefaultStore DSObj; \r
+ CIfrDefaultStore DSObj;\r
\r
mCVfrDefaultStore.RegisterDefaultStore (DSObj.GetObjBinAddr(), "Standard Defaults", EFI_STRING_ID_INVALID, EFI_HII_DEFAULT_CLASS_STANDARD);\r
DSObj.SetLineNo (LineNo);\r
\r
VOID\r
EfiVfrParser::AssignQuestionKey (\r
- IN CIfrQuestionHeader &QHObj, \r
+ IN CIfrQuestionHeader &QHObj,\r
IN ANTLRTokenPtr KeyTok\r
)\r
{\r
\r
VOID\r
EfiVfrParser::ConvertIdExpr (\r
- IN UINT32 &ExpOpCount, \r
+ IN UINT32 &ExpOpCount,\r
IN UINT32 LineNo,\r
IN EFI_QUESTION_ID QId,\r
IN INT8 *VarIdStr,\r
\r
VOID\r
EfiVfrParser::IdEqValDoSpecial (\r
- IN UINT32 &ExpOpCount, \r
+ IN UINT32 &ExpOpCount,\r
IN UINT32 LineNo,\r
IN EFI_QUESTION_ID QId,\r
IN INT8 *VarIdStr,\r
\r
VOID\r
EfiVfrParser::IdEqIdDoSpecial (\r
- IN UINT32 &ExpOpCount, \r
+ IN UINT32 &ExpOpCount,\r
IN UINT32 LineNo,\r
IN EFI_QUESTION_ID QId1,\r
IN INT8 *VarId1Str,\r
\r
VOID\r
EfiVfrParser::IdEqListDoSpecial (\r
- IN UINT32 &ExpOpCount, \r
+ IN UINT32 &ExpOpCount,\r
IN UINT32 LineNo,\r
IN EFI_QUESTION_ID QId,\r
IN INT8 *VarIdStr,\r