From 0d2711a69397d2971079121df4326d84736c181e Mon Sep 17 00:00:00 2001 From: lgao4 Date: Sat, 29 Oct 2011 06:59:30 +0000 Subject: Sync BaseTools Trunk (version r2387) to EDKII main trunk. Signed-off-by: lgao4 Reviewed-by: gikidy git-svn-id: https://edk2.svn.sourceforge.net/svnroot/edk2/trunk/edk2@12602 6f19259b-4bc3-4df7-8a09-765794883524 --- BaseTools/Source/C/VfrCompile/VfrFormPkg.cpp | 7 ++++++ BaseTools/Source/C/VfrCompile/VfrFormPkg.h | 8 ++----- BaseTools/Source/C/VfrCompile/VfrSyntax.g | 33 ++++++++++++++++++++-------- 3 files changed, 33 insertions(+), 15 deletions(-) (limited to 'BaseTools/Source/C/VfrCompile') diff --git a/BaseTools/Source/C/VfrCompile/VfrFormPkg.cpp b/BaseTools/Source/C/VfrCompile/VfrFormPkg.cpp index f0678ca3cb..94ad55b1bb 100644 --- a/BaseTools/Source/C/VfrCompile/VfrFormPkg.cpp +++ b/BaseTools/Source/C/VfrCompile/VfrFormPkg.cpp @@ -662,6 +662,13 @@ CFormPkg::DeclarePendingQuestion ( CNObj.SetQuestionId (QId); CNObj.SetVarStoreInfo (&Info); + // + // Numeric doesn't support BOOLEAN data type. + // BOOLEAN type has the same data size to UINT8. + // + if (Info.mVarType == EFI_IFR_TYPE_BOOLEAN) { + Info.mVarType = EFI_IFR_TYPE_NUM_SIZE_8; + } CNObj.SetFlags (0, Info.mVarType); // diff --git a/BaseTools/Source/C/VfrCompile/VfrFormPkg.h b/BaseTools/Source/C/VfrCompile/VfrFormPkg.h index f908718c02..92e47d97a3 100644 --- a/BaseTools/Source/C/VfrCompile/VfrFormPkg.h +++ b/BaseTools/Source/C/VfrCompile/VfrFormPkg.h @@ -847,7 +847,7 @@ private: public: CIfrImage () : CIfrObj (EFI_IFR_IMAGE_OP, (CHAR8 **)&mImage), - CIfrOpHeader (EFI_IFR_FORM_OP, &mImage->Header) { + CIfrOpHeader (EFI_IFR_IMAGE_OP, &mImage->Header) { mImage->Id = EFI_IMAGE_ID_INVALID; } @@ -1061,12 +1061,8 @@ public: mRef2->FormId = FormId; } - EFI_VFR_RETURN_CODE SetQuestionId (IN EFI_QUESTION_ID QuestionId) { - if (QuestionId == EFI_QUESTION_ID_INVALID) { - return VFR_RETURN_UNDEFINED; - } + VOID SetQuestionId (IN EFI_QUESTION_ID QuestionId) { mRef2->QuestionId = QuestionId; - return VFR_RETURN_SUCCESS; } }; diff --git a/BaseTools/Source/C/VfrCompile/VfrSyntax.g b/BaseTools/Source/C/VfrCompile/VfrSyntax.g index d9f8dd99a7..f27f05b689 100644 --- a/BaseTools/Source/C/VfrCompile/VfrSyntax.g +++ b/BaseTools/Source/C/VfrCompile/VfrSyntax.g @@ -524,28 +524,28 @@ vfrFormSetDefinition : FSObj->SetClassGuid(&DefaultClassGuid); if (mOverrideClassGuid != NULL) { FSObj->SetClassGuid(mOverrideClassGuid); - } + } break; case 1: if (mOverrideClassGuid != NULL) { ClassGuidNum ++; - } + } FSObj = new CIfrFormSet(sizeof(EFI_IFR_FORM_SET) + ClassGuidNum * sizeof(EFI_GUID)); FSObj->SetClassGuid(&ClassGuid1); if (mOverrideClassGuid != NULL) { FSObj->SetClassGuid(mOverrideClassGuid); - } + } break; case 2: if (mOverrideClassGuid != NULL) { ClassGuidNum ++; - } + } FSObj = new CIfrFormSet(sizeof(EFI_IFR_FORM_SET) + ClassGuidNum * sizeof(EFI_GUID)); FSObj->SetClassGuid(&ClassGuid1); FSObj->SetClassGuid(&ClassGuid2); if (mOverrideClassGuid != NULL) { FSObj->SetClassGuid(mOverrideClassGuid); - } + } break; case 3: FSObj = new CIfrFormSet(sizeof(EFI_IFR_FORM_SET) + ClassGuidNum * sizeof(EFI_GUID)); @@ -1646,6 +1646,7 @@ vfrStatementGoto : EFI_QUESTION_ID QId = EFI_QUESTION_ID_INVALID; UINT32 BitMask; CIfrQuestionHeader *QHObj = NULL; + CIfrOpHeader *OHObj = NULL; CIfrRef *R1Obj = NULL; CIfrRef2 *R2Obj = NULL; CIfrRef3 *R3Obj = NULL; @@ -1682,8 +1683,13 @@ vfrStatementGoto : FormId "=" F3:Number "," << RefType = 2; FId = _STOFID(F3->getText()); >> Question "=" ( - QN3:StringIdentifier "," << mCVfrQuestionDB.GetQuestionId (QN3->getText (), NULL, QId, BitMask); >> - | QN3:Number "," << QId = _STOQID(QN3->getText()); >> + QN3:StringIdentifier "," << + mCVfrQuestionDB.GetQuestionId (QN3->getText (), NULL, QId, BitMask); + if (QId == EFI_QUESTION_ID_INVALID) { + _PCATCH(VFR_RETURN_UNDEFINED, QN3); + } + >> + | QN4:Number "," << QId = _STOQID(QN4->getText()); >> ) ) | @@ -1700,6 +1706,7 @@ vfrStatementGoto : { R5Obj = new CIfrRef5; QHObj = R5Obj; + OHObj = R5Obj; R5Obj->SetLineNo(G->getLine()); break; } @@ -1707,6 +1714,7 @@ vfrStatementGoto : { R4Obj = new CIfrRef4; QHObj = R4Obj; + OHObj = R4Obj; R4Obj->SetLineNo(G->getLine()); R4Obj->SetDevicePath (DevPath); R4Obj->SetFormSetId (FSId); @@ -1718,6 +1726,7 @@ vfrStatementGoto : { R3Obj = new CIfrRef3; QHObj = R3Obj; + OHObj = R3Obj; R3Obj->SetLineNo(G->getLine()); R3Obj->SetFormSetId (FSId); R3Obj->SetFormId (FId); @@ -1728,15 +1737,17 @@ vfrStatementGoto : { R2Obj = new CIfrRef2; QHObj = R2Obj; + OHObj = R2Obj; R2Obj->SetLineNo(G->getLine()); R2Obj->SetFormId (FId); - _PCATCH(R2Obj->SetQuestionId (QId), QN3); + R2Obj->SetQuestionId (QId); break; } case 1: { R1Obj = new CIfrRef; QHObj = R1Obj; + OHObj = R1Obj; R1Obj->SetLineNo(G->getLine()); R1Obj->SetFormId (FId); break; @@ -1745,11 +1756,14 @@ vfrStatementGoto : } >> vfrQuestionHeader[*QHObj, QUESTION_REF] - { "," vfrStatementStatTagList } { "," F:FLAGS "=" vfrGotoFlags[QHObj, F->getLine()] } { "," Key "=" KN:Number << AssignQuestionKey (*QHObj, KN); >> } + { + E:"," + vfrStatementQuestionOptionList << OHObj->SetScope(1); CRT_END_OP (E);>> + } ";" << 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;}>> ; @@ -3615,6 +3629,7 @@ vfrExpressionUnaryOp[UINT32 & RootLevel, UINT32 & ExpOpCount] : | question2refExp[$RootLevel, $ExpOpCount] | stringref2Exp[$RootLevel, $ExpOpCount] | toboolExp[$RootLevel, $ExpOpCount] + | tostringExp[$RootLevel, $ExpOpCount] | unintExp[$RootLevel, $ExpOpCount] | toupperExp[$RootLevel, $ExpOpCount] | tolwerExp[$RootLevel, $ExpOpCount] -- cgit v1.2.3