CIfrLabel LObj3;\r
LObj3.SetLineNo(E->getLine());\r
LObj3.SetNumber (0xffff); //add end label for UEFI, label number hardcode 0xffff\r
- //\r
- // Declare undefined Question\r
- //\r
- if (gCFormPkg.HavePendingUnassigned()) {\r
- gCFormPkg.DeclarePendingQuestion (\r
- gCVfrVarDataTypeDB,\r
- mCVfrDataStorage,\r
- mCVfrQuestionDB,\r
- &mFormsetGuid,\r
- E->getLine()\r
- );\r
- }\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
<<\r
CIfrNumeric NObj;\r
UINT32 DataTypeSize;\r
+ BOOLEAN IsSupported;\r
>>\r
L:Numeric << NObj.SetLineNo(L->getLine()); >>\r
vfrQuestionHeader[NObj] "," << // check data type\r
}\r
vfrSetMinMaxStep[NObj]\r
vfrStatementQuestionOptionList\r
- E:EndNumeric << CRT_END_OP (E); >>\r
+ E:EndNumeric << \r
+ IsSupported = FALSE;\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
+ break;\r
+ }\r
+ if (!IsSupported) {\r
+ _PCATCH (VFR_RETURN_INVALID_PARAMETER, L->getLine(), "Numeric question only support UINT8, UINT16, UINT32 and UINT64 data type.");\r
+ }\r
+ CRT_END_OP (E); \r
+ >>\r
";"\r
;\r
\r
<<\r
CIfrOneOf OObj;\r
UINT32 DataTypeSize;\r
+ BOOLEAN IsSupported;\r
>>\r
L:OneOf << OObj.SetLineNo(L->getLine()); >>\r
vfrQuestionHeader[OObj] "," << //check data type\r
vfrSetMinMaxStep[OObj]\r
}\r
vfrStatementQuestionOptionList\r
- E:EndOneOf << CRT_END_OP (E); >>\r
+ E:EndOneOf << \r
+ IsSupported = FALSE;\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
+ break;\r
+ }\r
+ if (!IsSupported) {\r
+ _PCATCH (VFR_RETURN_INVALID_PARAMETER, L->getLine(), "OneOf question only support UINT8, UINT16, UINT32 and UINT64 data type.");\r
+ }\r
+ CRT_END_OP (E); \r
+ >>\r
";"\r
;\r
\r