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