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/VfrSyntax.g | 33 ++++++++++++++++++++++--------- 1 file changed, 24 insertions(+), 9 deletions(-) (limited to 'BaseTools/Source/C/VfrCompile/VfrSyntax.g') 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