Reviewed-by: Liming Gao <[email protected]>

-----Original Message-----
From: edk2-devel [mailto:[email protected]] On Behalf Of Dandan Bi
Sent: Wednesday, August 26, 2015 4:46 PM
To: Dong, Eric; Gao, Liming; [email protected]
Subject: [edk2] [patch 1/2] BaseTools:To generate string default type correctly 
in VfrCompiler

Contributed-under: TianoCore Contribution Agreement 1.0
Signed-off-by: Dandan Bi <[email protected]>
---
 BaseTools/Source/C/VfrCompile/VfrFormPkg.h | 1 +  
BaseTools/Source/C/VfrCompile/VfrSyntax.g  | 6 ++++--
 2 files changed, 5 insertions(+), 2 deletions(-)

diff --git a/BaseTools/Source/C/VfrCompile/VfrFormPkg.h 
b/BaseTools/Source/C/VfrCompile/VfrFormPkg.h
index 84300a7..644dfdd 100644
--- a/BaseTools/Source/C/VfrCompile/VfrFormPkg.h
+++ b/BaseTools/Source/C/VfrCompile/VfrFormPkg.h
@@ -602,10 +602,11 @@ public:
 };
 
 static CIfrQuestionHeader *gCurrentQuestion  = NULL;  static 
CIfrMinMaxStepData *gCurrentMinMaxData = NULL;
 static BOOLEAN            gIsOrderedList = FALSE;
+static BOOLEAN            gIsStringOp = FALSE;
 
 /*
  * The definition of all of the UEFI IFR Objects
  */
 class CIfrFormSet : public CIfrObj, public CIfrOpHeader { diff --git 
a/BaseTools/Source/C/VfrCompile/VfrSyntax.g 
b/BaseTools/Source/C/VfrCompile/VfrSyntax.g
index fba8967..ad839b2 100644
--- a/BaseTools/Source/C/VfrCompile/VfrSyntax.g
+++ b/BaseTools/Source/C/VfrCompile/VfrSyntax.g
@@ -1744,10 +1744,12 @@ vfrStatementDefault :
                                                         Size += OFFSET_OF 
(EFI_IFR_DEFAULT, Value);
                                                         DObj = new CIfrDefault 
((UINT8)Size);
                                                         
DObj->SetLineNo(D->getLine());
                                                         if (ArrayType) {
                                                           DObj->SetType 
(EFI_IFR_TYPE_BUFFER);
+                                                        } else if 
(gIsStringOp) {
+                                                          DObj->SetType 
+ (EFI_IFR_TYPE_STRING);
                                                         } else {
                                                           DObj->SetType 
(_GET_CURRQEST_DATATYPE());
                                                         }
                                                         DObj->SetValue(*Val);
                                                     >> @@ -2817,11 +2819,11 @@ 
vfrStatementString :
      CIfrString SObj;
      UINT32 VarArraySize;
      UINT8 StringMinSize;
      UINT8 StringMaxSize;
   >>
-  L:String                                             << 
SObj.SetLineNo(L->getLine()); >>
+  L:String                                             << 
SObj.SetLineNo(L->getLine()); gIsStringOp = TRUE;>>
   vfrQuestionHeader[SObj] ","
   { F:FLAGS "=" vfrStringFlagsField[SObj, F->getLine()] "," }
   {
     Key "=" KN:Number ","                              << AssignQuestionKey 
(SObj, KN); >>
   }
@@ -2845,11 +2847,11 @@ vfrStatementString :
                                                             _PCATCH 
(VFR_RETURN_INVALID_PARAMETER, MAX->getLine(), "String MaxSize can't be less 
than String MinSize.");
                                                           }
                                                           SObj.SetMaxSize 
(StringMaxSize);
                                                        >>
   vfrStatementQuestionOptionList
-  E:EndString                                          << CRT_END_OP (E); >>
+  E:EndString                                          << CRT_END_OP (E); 
gIsStringOp = FALSE;>>
   ";"
   ;
 
 vfrStringFlagsField [CIfrString & SObj, UINT32 LineNum] :
   <<
--
1.9.5.msysgit.1

_______________________________________________
edk2-devel mailing list
[email protected]
https://lists.01.org/mailman/listinfo/edk2-devel
_______________________________________________
edk2-devel mailing list
[email protected]
https://lists.01.org/mailman/listinfo/edk2-devel

Reply via email to