|
From: <lg...@us...> - 2010-02-08 05:50:22
|
Revision: 1849
http://edk2-buildtools.svn.sourceforge.net/edk2-buildtools/?rev=1849&view=rev
Author: lgao4
Date: 2010-02-08 05:50:15 +0000 (Mon, 08 Feb 2010)
Log Message:
-----------
Enhance StringRef to support STRING_TOKEN syntax.
Modified Paths:
--------------
trunk/BaseTools/Source/C/VfrCompile/VfrSyntax.g
Modified: trunk/BaseTools/Source/C/VfrCompile/VfrSyntax.g
===================================================================
--- trunk/BaseTools/Source/C/VfrCompile/VfrSyntax.g 2010-02-05 06:59:58 UTC (rev 1848)
+++ trunk/BaseTools/Source/C/VfrCompile/VfrSyntax.g 2010-02-08 05:50:15 UTC (rev 1849)
@@ -2993,8 +2993,19 @@
// stringref (STR_FORM_SET_TITLE)
//
stringref1Exp[UINT32 & RootLevel, UINT32 & ExpOpCount] :
+ <<
+ EFI_STRING_ID RefStringId = EFI_STRING_ID_INVALID;
+ >>
L:StringRef
- "\(" S:Number "\)" << { CIfrStringRef1 SR1Obj(L->getLine()); _SAVE_OPHDR_COND (SR1Obj, ($ExpOpCount == 0), L->getLine()); SR1Obj.SetStringId (_STOSID(S->getText())); $ExpOpCount++; } >>
+ "\("
+ (
+ "STRING_TOKEN"
+ "\("
+ S:Number << RefStringId = _STOSID(S->getText()); >>
+ "\)"
+ | I:Number << RefStringId = _STOSID(I->getText()); >>
+ )
+ "\)" << { CIfrStringRef1 SR1Obj(L->getLine()); _SAVE_OPHDR_COND (SR1Obj, ($ExpOpCount == 0), L->getLine()); SR1Obj.SetStringId (RefStringId); $ExpOpCount++; } >>
;
pushthisExp[UINT32 & RootLevel, UINT32 & ExpOpCount] :
This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site.
|
|
From: <lg...@us...> - 2010-04-20 06:25:58
|
Revision: 1954
http://edk2-buildtools.svn.sourceforge.net/edk2-buildtools/?rev=1954&view=rev
Author: lgao4
Date: 2010-04-20 06:25:51 +0000 (Tue, 20 Apr 2010)
Log Message:
-----------
1. Add check for Min/Max setting of String/Password opcode.
2. Add check for MaxContainers setting of OrderedList opcode.
Modified Paths:
--------------
trunk/BaseTools/Source/C/VfrCompile/VfrSyntax.g
Modified: trunk/BaseTools/Source/C/VfrCompile/VfrSyntax.g
===================================================================
--- trunk/BaseTools/Source/C/VfrCompile/VfrSyntax.g 2010-04-19 06:38:34 UTC (rev 1953)
+++ trunk/BaseTools/Source/C/VfrCompile/VfrSyntax.g 2010-04-20 06:25:51 UTC (rev 1954)
@@ -1900,6 +1900,9 @@
vfrStatementString :
<<
CIfrString SObj;
+ UINT32 VarArraySize;
+ UINT8 StringMinSize;
+ UINT8 StringMaxSize;
>>
L:String << SObj.SetLineNo(L->getLine()); >>
vfrQuestionHeader[SObj] ","
@@ -1907,8 +1910,27 @@
{
Key "=" KN:Number "," << AssignQuestionKey (SObj, KN); >>
}
- MinSize "=" MIN:Number "," << SObj.SetMinSize (_STOU8(MIN->getText())); >>
- MaxSize "=" MAX:Number "," << SObj.SetMaxSize (_STOU8(MAX->getText())); >>
+ MinSize "=" MIN:Number "," <<
+ VarArraySize = _GET_CURRQEST_ARRAY_SIZE();
+ StringMinSize = _STOU8(MIN->getText());
+ if (_STOU64(MIN->getText()) > StringMinSize) {
+ _PCATCH (VFR_RETURN_INVALID_PARAMETER, MIN->getLine(), "String MinSize takes only one byte, which can't be larger than 0xFF.");
+ } else if (VarArraySize != 0 && StringMinSize > VarArraySize) {
+ _PCATCH (VFR_RETURN_INVALID_PARAMETER, MIN->getLine(), "String MinSize can't be larger than the max number of elements in string array.");
+ }
+ SObj.SetMinSize (StringMinSize);
+ >>
+ MaxSize "=" MAX:Number "," <<
+ StringMaxSize = _STOU8(MAX->getText());
+ if (_STOU64(MAX->getText()) > StringMaxSize) {
+ _PCATCH (VFR_RETURN_INVALID_PARAMETER, MAX->getLine(), "String MaxSize takes only one byte, which can't be larger than 0xFF.");
+ } else if (VarArraySize != 0 && StringMaxSize > VarArraySize) {
+ _PCATCH (VFR_RETURN_INVALID_PARAMETER, MAX->getLine(), "String MaxSize can't be larger than the max number of elements in string array.");
+ } else if (StringMaxSize < StringMinSize) {
+ _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); >>
";"
@@ -1932,6 +1954,9 @@
vfrStatementPassword :
<<
CIfrPassword PObj;
+ UINT32 VarArraySize;
+ UINT16 PasswordMinSize;
+ UINT16 PasswordMaxSize;
>>
L:Password << PObj.SetLineNo(L->getLine()); >>
vfrQuestionHeader[PObj] ","
@@ -1939,8 +1964,27 @@
{
Key "=" KN:Number "," << AssignQuestionKey (PObj, KN); >>
}
- MinSize "=" MIN:Number "," << PObj.SetMinSize (_STOU16(MIN->getText())); >>
- MaxSize "=" MAX:Number "," << PObj.SetMaxSize (_STOU16(MAX->getText())); >>
+ MinSize "=" MIN:Number "," <<
+ VarArraySize = _GET_CURRQEST_ARRAY_SIZE();
+ PasswordMinSize = _STOU16(MIN->getText());
+ if (_STOU64(MIN->getText()) > PasswordMinSize) {
+ _PCATCH (VFR_RETURN_INVALID_PARAMETER, MIN->getLine(), "Password MinSize takes only two byte, which can't be larger than 0xFFFF.");
+ } else if (VarArraySize != 0 && PasswordMinSize > VarArraySize) {
+ _PCATCH (VFR_RETURN_INVALID_PARAMETER, MIN->getLine(), "Password MinSize can't be larger than the max number of elements in password array.");
+ }
+ PObj.SetMinSize (PasswordMinSize);
+ >>
+ MaxSize "=" MAX:Number "," <<
+ PasswordMaxSize = _STOU16(MAX->getText());
+ if (_STOU64(MAX->getText()) > PasswordMaxSize) {
+ _PCATCH (VFR_RETURN_INVALID_PARAMETER, MAX->getLine(), "Password MaxSize takes only two byte, which can't be larger than 0xFFFF.");
+ } else if (VarArraySize != 0 && PasswordMaxSize > VarArraySize) {
+ _PCATCH (VFR_RETURN_INVALID_PARAMETER, MAX->getLine(), "Password MaxSize can't be larger than the max number of elements in password array.");
+ } else if (PasswordMaxSize < PasswordMinSize) {
+ _PCATCH (VFR_RETURN_INVALID_PARAMETER, MAX->getLine(), "Password MaxSize can't be less than Password MinSize.");
+ }
+ PObj.SetMaxSize (PasswordMaxSize);
+ >>
{ Encoding "=" Number "," }
vfrStatementQuestionOptionList
E:EndPassword << CRT_END_OP (E); >>
@@ -1961,12 +2005,23 @@
vfrStatementOrderedList :
<<
CIfrOrderedList OLObj;
+ UINT32 VarArraySize;
>>
L:OrderedList << OLObj.SetLineNo(L->getLine()); >>
vfrQuestionHeader[OLObj] ","
- << OLObj.SetMaxContainers ((UINT8) _GET_CURRQEST_ARRAY_SIZE()); >>
+ <<
+ VarArraySize = _GET_CURRQEST_ARRAY_SIZE();
+ OLObj.SetMaxContainers ((UINT8) (VarArraySize > 0xFF ? 0xFF : VarArraySize));
+ >>
{
- MaxContainers "=" M:Number "," << OLObj.SetMaxContainers (_STOU8(M->getText())); >>
+ MaxContainers "=" M:Number "," <<
+ if (_STOU64(M->getText()) > _STOU8(M->getText())) {
+ _PCATCH (VFR_RETURN_INVALID_PARAMETER, M->getLine(), "OrderedList MaxContainers takes only one byte, which can't be larger than 0xFF.");
+ } else if (VarArraySize != 0 && _STOU8(M->getText()) > VarArraySize) {
+ _PCATCH (VFR_RETURN_INVALID_PARAMETER, M->getLine(), "OrderedList MaxContainers can't be larger than the max number of elements in array.");
+ }
+ OLObj.SetMaxContainers (_STOU8(M->getText()));
+ >>
}
{ F:FLAGS "=" vfrOrderedListFlags[OLObj, F->getLine()] }
vfrStatementQuestionOptionList
This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site.
|
|
From: <lg...@us...> - 2010-04-20 06:48:22
|
Revision: 1955
http://edk2-buildtools.svn.sourceforge.net/edk2-buildtools/?rev=1955&view=rev
Author: lgao4
Date: 2010-04-20 06:48:15 +0000 (Tue, 20 Apr 2010)
Log Message:
-----------
Allow inconsistentif check for EFI_IFR_DATE opcode.
Modified Paths:
--------------
trunk/BaseTools/Source/C/VfrCompile/VfrSyntax.g
Modified: trunk/BaseTools/Source/C/VfrCompile/VfrSyntax.g
===================================================================
--- trunk/BaseTools/Source/C/VfrCompile/VfrSyntax.g 2010-04-20 06:25:51 UTC (rev 1954)
+++ trunk/BaseTools/Source/C/VfrCompile/VfrSyntax.g 2010-04-20 06:48:15 UTC (rev 1955)
@@ -2057,7 +2057,7 @@
(
vfrQuestionHeader[TObj, QUESTION_TIME] ","
{ F:FLAGS "=" vfrTimeFlags[TObj, F->getLine()] "," }
- vfrStatementDefault
+ vfrStatementQuestionOptionList
)
|
(
This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site.
|
|
From: <lg...@us...> - 2011-04-22 02:05:50
|
Revision: 2142
http://edk2-buildtools.svn.sourceforge.net/edk2-buildtools/?rev=2142&view=rev
Author: lgao4
Date: 2011-04-22 02:05:44 +0000 (Fri, 22 Apr 2011)
Log Message:
-----------
1. Resolve one Antlr parser warning.
2. Add Guided opcode into FormMap and StatementTag. Then, Guided opcode can be used in FormMap and conditional statement.
Modified Paths:
--------------
trunk/BaseTools/Source/C/VfrCompile/VfrSyntax.g
Modified: trunk/BaseTools/Source/C/VfrCompile/VfrSyntax.g
===================================================================
--- trunk/BaseTools/Source/C/VfrCompile/VfrSyntax.g 2011-04-19 23:25:47 UTC (rev 2141)
+++ trunk/BaseTools/Source/C/VfrCompile/VfrSyntax.g 2011-04-22 02:05:44 UTC (rev 2142)
@@ -675,7 +675,7 @@
_STRCAT(&TFName, TypeName);
}
>>
- {("." FN:StringIdentifier
+ ("." FN:StringIdentifier
<<
if (IsStruct == TRUE) {
_STRCAT(&TFName, ".");
@@ -692,9 +692,7 @@
}
>>
}
- )*
- }
-
+ )*
"=" RD:Number
<<
if (IsStruct == FALSE) {
@@ -1311,7 +1309,8 @@
vfrStatementQuestions |
vfrStatementConditional |
vfrStatementLabel |
- vfrStatementBanner
+ vfrStatementBanner |
+ vfrStatementExtension
)*
E:EndForm << CRT_END_OP (E); >>
";"
@@ -2369,6 +2368,7 @@
vfrStatementQuestions |
vfrStatementConditionalNew |
vfrStatementLabel |
+ vfrStatementExtension |
// Just for framework vfr compatibility
vfrStatementInvalid
;
This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site.
|
|
From: <yd...@us...> - 2011-09-06 07:22:59
|
Revision: 2291
http://edk2-buildtools.svn.sourceforge.net/edk2-buildtools/?rev=2291&view=rev
Author: ydong10
Date: 2011-09-06 07:22:53 +0000 (Tue, 06 Sep 2011)
Log Message:
-----------
Add data type check for oneof and Numeric opcode
Signed-off-by: ydong10
Reviewed-by: lgao4
Modified Paths:
--------------
trunk/BaseTools/Source/C/VfrCompile/VfrSyntax.g
Modified: trunk/BaseTools/Source/C/VfrCompile/VfrSyntax.g
===================================================================
--- trunk/BaseTools/Source/C/VfrCompile/VfrSyntax.g 2011-09-06 06:59:08 UTC (rev 2290)
+++ trunk/BaseTools/Source/C/VfrCompile/VfrSyntax.g 2011-09-06 07:22:53 UTC (rev 2291)
@@ -2110,6 +2110,7 @@
<<
CIfrNumeric NObj;
UINT32 DataTypeSize;
+ BOOLEAN IsSupported;
>>
L:Numeric << NObj.SetLineNo(L->getLine()); >>
vfrQuestionHeader[NObj] "," << // check data type
@@ -2125,7 +2126,23 @@
}
vfrSetMinMaxStep[NObj]
vfrStatementQuestionOptionList
- E:EndNumeric << CRT_END_OP (E); >>
+ E:EndNumeric <<
+ IsSupported = FALSE;
+ switch (_GET_CURRQEST_DATATYPE()) {
+ case EFI_IFR_TYPE_NUM_SIZE_8:
+ case EFI_IFR_TYPE_NUM_SIZE_16:
+ case EFI_IFR_TYPE_NUM_SIZE_32:
+ case EFI_IFR_TYPE_NUM_SIZE_64:
+ IsSupported = TRUE;
+ break;
+ default:
+ break;
+ }
+ if (!IsSupported) {
+ _PCATCH (VFR_RETURN_INVALID_PARAMETER, L->getLine(), "Numeric question only support UINT8, UINT16, UINT32 and UINT64 data type.");
+ }
+ CRT_END_OP (E);
+ >>
";"
;
@@ -2170,6 +2187,7 @@
<<
CIfrOneOf OObj;
UINT32 DataTypeSize;
+ BOOLEAN IsSupported;
>>
L:OneOf << OObj.SetLineNo(L->getLine()); >>
vfrQuestionHeader[OObj] "," << //check data type
@@ -2184,7 +2202,23 @@
vfrSetMinMaxStep[OObj]
}
vfrStatementQuestionOptionList
- E:EndOneOf << CRT_END_OP (E); >>
+ E:EndOneOf <<
+ IsSupported = FALSE;
+ switch (_GET_CURRQEST_DATATYPE()) {
+ case EFI_IFR_TYPE_NUM_SIZE_8:
+ case EFI_IFR_TYPE_NUM_SIZE_16:
+ case EFI_IFR_TYPE_NUM_SIZE_32:
+ case EFI_IFR_TYPE_NUM_SIZE_64:
+ IsSupported = TRUE;
+ break;
+ default:
+ break;
+ }
+ if (!IsSupported) {
+ _PCATCH (VFR_RETURN_INVALID_PARAMETER, L->getLine(), "OneOf question only support UINT8, UINT16, UINT32 and UINT64 data type.");
+ }
+ CRT_END_OP (E);
+ >>
";"
;
This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site.
|
|
From: <yd...@us...> - 2011-09-29 05:08:52
|
Revision: 2333
http://edk2-buildtools.svn.sourceforge.net/edk2-buildtools/?rev=2333&view=rev
Author: ydong10
Date: 2011-09-29 05:08:46 +0000 (Thu, 29 Sep 2011)
Log Message:
-----------
Correct the line info record to avoid access violation.
Signed-off-by: ydong10
Reviewed-by: lgao4
Modified Paths:
--------------
trunk/BaseTools/Source/C/VfrCompile/VfrSyntax.g
Modified: trunk/BaseTools/Source/C/VfrCompile/VfrSyntax.g
===================================================================
--- trunk/BaseTools/Source/C/VfrCompile/VfrSyntax.g 2011-09-28 03:42:09 UTC (rev 2332)
+++ trunk/BaseTools/Source/C/VfrCompile/VfrSyntax.g 2011-09-29 05:08:46 UTC (rev 2333)
@@ -1683,7 +1683,7 @@
Question "="
(
QN3:StringIdentifier "," << mCVfrQuestionDB.GetQuestionId (QN3->getText (), NULL, QId, BitMask); >>
- | QN4:Number "," << QId = _STOQID(QN4->getText()); >>
+ | QN3:Number "," << QId = _STOQID(QN3->getText()); >>
)
)
|
This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site.
|
|
From: <yd...@us...> - 2011-10-11 02:33:56
|
Revision: 2365
http://edk2-buildtools.svn.sourceforge.net/edk2-buildtools/?rev=2365&view=rev
Author: ydong10
Date: 2011-10-11 02:33:50 +0000 (Tue, 11 Oct 2011)
Log Message:
-----------
Enable goto op-code to have the question option list
Signed-off-by: ydong10
Reviewed-by: lgao4
Modified Paths:
--------------
trunk/BaseTools/Source/C/VfrCompile/VfrSyntax.g
Modified: trunk/BaseTools/Source/C/VfrCompile/VfrSyntax.g
===================================================================
--- trunk/BaseTools/Source/C/VfrCompile/VfrSyntax.g 2011-10-10 14:38:38 UTC (rev 2364)
+++ trunk/BaseTools/Source/C/VfrCompile/VfrSyntax.g 2011-10-11 02:33:50 UTC (rev 2365)
@@ -1646,6 +1646,7 @@
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;
@@ -1705,6 +1706,7 @@
{
R5Obj = new CIfrRef5;
QHObj = R5Obj;
+ OHObj = R5Obj;
R5Obj->SetLineNo(G->getLine());
break;
}
@@ -1712,6 +1714,7 @@
{
R4Obj = new CIfrRef4;
QHObj = R4Obj;
+ OHObj = R4Obj;
R4Obj->SetLineNo(G->getLine());
R4Obj->SetDevicePath (DevPath);
R4Obj->SetFormSetId (FSId);
@@ -1723,6 +1726,7 @@
{
R3Obj = new CIfrRef3;
QHObj = R3Obj;
+ OHObj = R3Obj;
R3Obj->SetLineNo(G->getLine());
R3Obj->SetFormSetId (FSId);
R3Obj->SetFormId (FId);
@@ -1733,6 +1737,7 @@
{
R2Obj = new CIfrRef2;
QHObj = R2Obj;
+ OHObj = R2Obj;
R2Obj->SetLineNo(G->getLine());
R2Obj->SetFormId (FId);
R2Obj->SetQuestionId (QId);
@@ -1742,6 +1747,7 @@
{
R1Obj = new CIfrRef;
QHObj = R1Obj;
+ OHObj = R1Obj;
R1Obj->SetLineNo(G->getLine());
R1Obj->SetFormId (FId);
break;
@@ -1750,11 +1756,14 @@
}
>>
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;}>>
;
This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site.
|
|
From: <yd...@us...> - 2011-11-16 06:00:38
|
Revision: 2408
http://edk2-buildtools.svn.sourceforge.net/edk2-buildtools/?rev=2408&view=rev
Author: ydong10
Date: 2011-11-16 06:00:32 +0000 (Wed, 16 Nov 2011)
Log Message:
-----------
Enable flag field for date/time opcode.
Signed-off-by: ydong10
Reviewed-by: lgao4
Modified Paths:
--------------
trunk/BaseTools/Source/C/VfrCompile/VfrSyntax.g
Modified: trunk/BaseTools/Source/C/VfrCompile/VfrSyntax.g
===================================================================
--- trunk/BaseTools/Source/C/VfrCompile/VfrSyntax.g 2011-11-16 05:24:51 UTC (rev 2407)
+++ trunk/BaseTools/Source/C/VfrCompile/VfrSyntax.g 2011-11-16 06:00:32 UTC (rev 2408)
@@ -1989,6 +1989,7 @@
Prompt "=" "STRING_TOKEN" "\(" DP:Number "\)" ","
Help "=" "STRING_TOKEN" "\(" DH:Number "\)" ","
minMaxDateStepDefault[Val.date, 2]
+ { G:FLAGS "=" vfrDateFlags[DObj, G->getLine()] "," }
<<
mCVfrQuestionDB.RegisterOldDateQuestion (VarIdStr[0], VarIdStr[1], VarIdStr[2], QId);
DObj.SetQuestionId (QId);
@@ -2449,6 +2450,7 @@
Prompt "=" "STRING_TOKEN" "\(" SP:Number "\)" ","
Help "=" "STRING_TOKEN" "\(" SH:Number "\)" ","
minMaxTimeStepDefault[Val.time, 2]
+ { G:FLAGS "=" vfrTimeFlags[TObj, G->getLine()] "," }
<<
mCVfrQuestionDB.RegisterOldTimeQuestion (VarIdStr[0], VarIdStr[1], VarIdStr[2], QId);
TObj.SetQuestionId (QId);
This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site.
|
|
From: <yd...@us...> - 2013-01-08 07:40:00
|
Revision: 2567
http://edk2-buildtools.svn.sourceforge.net/edk2-buildtools/?rev=2567&view=rev
Author: ydong10
Date: 2013-01-08 07:39:52 +0000 (Tue, 08 Jan 2013)
Log Message:
-----------
Base on the varid info to save default value to the varstore.
Signed-off-by: Eric Dong <eri...@in...>
Reviewed-by: Liming Gao <lim...@in...>
Modified Paths:
--------------
trunk/BaseTools/Source/C/VfrCompile/VfrSyntax.g
Modified: trunk/BaseTools/Source/C/VfrCompile/VfrSyntax.g
===================================================================
--- trunk/BaseTools/Source/C/VfrCompile/VfrSyntax.g 2013-01-06 06:17:11 UTC (rev 2566)
+++ trunk/BaseTools/Source/C/VfrCompile/VfrSyntax.g 2013-01-08 07:39:52 UTC (rev 2567)
@@ -1097,6 +1097,10 @@
vfrQuestionHeader[CIfrQuestionHeader & QHObj, EFI_QUESION_TYPE QType = QUESTION_NORMAL]:
<<
EFI_VARSTORE_INFO Info;
+ Info.mVarType = EFI_IFR_TYPE_OTHER;
+ Info.mVarTotalSize = 0;
+ Info.mInfo.mVarOffset = EFI_VAROFFSET_INVALID;
+ Info.mVarStoreId = EFI_VARSTORE_ID_INVALID;
EFI_QUESTION_ID QId = EFI_QUESTION_ID_INVALID;
CHAR8 *QName = NULL;
CHAR8 *VarIdStr = NULL;
@@ -1147,8 +1151,8 @@
<<
if (VarIdStr != NULL) {
delete VarIdStr;
- _SAVE_CURRQEST_VARINFO (Info);
}
+ _SAVE_CURRQEST_VARINFO (Info);
>>
;
@@ -1472,8 +1476,7 @@
EFI_DEFAULT_ID DefaultId = EFI_HII_DEFAULT_CLASS_STANDARD;
CHAR8 *VarStoreName = NULL;
EFI_VFR_VARSTORE_TYPE VarStoreType = EFI_VFR_VARSTORE_INVALID;
- UINT8 Size = 0;
- BOOLEAN TypeError = FALSE;
+ UINT32 Size = 0;
>>
D:Default
(
@@ -1486,53 +1489,14 @@
_PCATCH (VFR_RETURN_INVALID_PARAMETER, D->getLine(), "Numeric default value must be between MinValue and MaxValue.");
}
}
- switch (_GET_CURRQEST_DATATYPE()) {
- case EFI_IFR_TYPE_NUM_SIZE_8:
- Size = 1;
- break;
-
- case EFI_IFR_TYPE_NUM_SIZE_16:
- Size = 2;
- break;
-
- case EFI_IFR_TYPE_NUM_SIZE_32:
- Size = 4;
- break;
-
- case EFI_IFR_TYPE_NUM_SIZE_64:
- Size = 8;
- break;
-
- case EFI_IFR_TYPE_DATE:
- Size = 4;
- break;
-
- case EFI_IFR_TYPE_TIME:
- Size = 3;
- break;
-
- case EFI_IFR_TYPE_REF:
- Size = 22;
- break;
-
- case EFI_IFR_TYPE_STRING:
- Size = 2;
- break;
-
- case EFI_IFR_TYPE_BOOLEAN:
- Size = 1;
- break;
-
- default:
- TypeError = TRUE;
- Size = sizeof (EFI_IFR_TYPE_VALUE);
- break;
- }
- if (TypeError) {
+ if (_GET_CURRQEST_DATATYPE() == EFI_IFR_TYPE_OTHER) {
_PCATCH (VFR_RETURN_FATAL_ERROR, D->getLine(), "Default data type error.");
+ Size = sizeof (EFI_IFR_TYPE_VALUE);
+ } else {
+ _PCATCH (gCVfrVarDataTypeDB.GetDataTypeSize (_GET_CURRQEST_DATATYPE(), &Size), D->getLine());
}
Size += OFFSET_OF (EFI_IFR_DEFAULT, Value);
- DObj = new CIfrDefault (Size);
+ DObj = new CIfrDefault ((UINT8)Size);
DObj->SetLineNo(D->getLine());
DObj->SetType (_GET_CURRQEST_DATATYPE());
DObj->SetValue(Val);
@@ -1553,19 +1517,20 @@
>>
}
<<
- _PCATCH(mCVfrDataStorage.GetVarStoreName (_GET_CURRQEST_VARTINFO().mVarStoreId, &VarStoreName), D->getLine());
- _PCATCH(mCVfrDataStorage.GetVarStoreType (VarStoreName, VarStoreType), D->getLine());
- if ((IsExp == FALSE) && (VarStoreType == EFI_VFR_VARSTORE_BUFFER)) {
- _PCATCH(mCVfrDefaultStore.BufferVarStoreAltConfigAdd (
- DefaultId,
- _GET_CURRQEST_VARTINFO(),
- VarStoreName,
- _GET_CURRQEST_DATATYPE (),
- Val),
- D->getLine()
- );
+ if (_GET_CURRQEST_VARTINFO().mVarStoreId != EFI_VARSTORE_ID_INVALID) {
+ _PCATCH(mCVfrDataStorage.GetVarStoreName (_GET_CURRQEST_VARTINFO().mVarStoreId, &VarStoreName), D->getLine());
+ _PCATCH(mCVfrDataStorage.GetVarStoreType (VarStoreName, VarStoreType), D->getLine());
+ if ((IsExp == FALSE) && (VarStoreType == EFI_VFR_VARSTORE_BUFFER)) {
+ _PCATCH(mCVfrDefaultStore.BufferVarStoreAltConfigAdd (
+ DefaultId,
+ _GET_CURRQEST_VARTINFO(),
+ VarStoreName,
+ _GET_CURRQEST_DATATYPE (),
+ Val),
+ D->getLine()
+ );
+ }
}
-
if (DObj != NULL) {delete DObj;}
if (DObj2 != NULL) {delete DObj2;}
>>
@@ -1832,7 +1797,11 @@
default: break;
}
>>
- vfrQuestionHeader[*QHObj, QUESTION_REF]
+ vfrQuestionHeader[*QHObj, QUESTION_REF] <<
+ if (_GET_CURRQEST_DATATYPE() == EFI_IFR_TYPE_OTHER) {
+ _GET_CURRQEST_VARTINFO().mVarType = EFI_IFR_TYPE_REF;
+ }
+ >>
{ "," F:FLAGS "=" vfrGotoFlags[QHObj, F->getLine()] }
{
"," Key "=" KN:Number << AssignQuestionKey (*QHObj, KN); >>
@@ -1904,6 +1873,9 @@
>>
L:CheckBox << CBObj.SetLineNo(L->getLine()); >>
vfrQuestionHeader[CBObj] "," << //check data type
+ if (_GET_CURRQEST_DATATYPE() == EFI_IFR_TYPE_OTHER) {
+ _GET_CURRQEST_VARTINFO().mVarType = EFI_IFR_TYPE_BOOLEAN;
+ }
_PCATCH (gCVfrVarDataTypeDB.GetDataTypeSize (_GET_CURRQEST_DATATYPE(), &DataTypeSize), L->getLine(), "CheckBox varid is not the valid data type");
if (DataTypeSize != 0 && DataTypeSize != _GET_CURRQEST_VARSIZE()) {
_PCATCH (VFR_RETURN_INVALID_PARAMETER, L->getLine(), "CheckBox varid doesn't support array");
@@ -2044,7 +2016,11 @@
L:Date << DObj.SetLineNo(L->getLine()); >>
(
(
- vfrQuestionHeader[DObj, QUESTION_DATE] ","
+ vfrQuestionHeader[DObj, QUESTION_DATE] "," <<
+ if (_GET_CURRQEST_DATATYPE() == EFI_IFR_TYPE_OTHER) {
+ _GET_CURRQEST_VARTINFO().mVarType = EFI_IFR_TYPE_DATE;
+ }
+ >>
{ F:FLAGS "=" vfrDateFlags[DObj, F->getLine()] "," }
vfrStatementQuestionOptionList
)
@@ -2517,7 +2493,11 @@
L:Time << TObj.SetLineNo(L->getLine()); >>
(
(
- vfrQuestionHeader[TObj, QUESTION_TIME] ","
+ vfrQuestionHeader[TObj, QUESTION_TIME] "," <<
+ if (_GET_CURRQEST_DATATYPE() == EFI_IFR_TYPE_OTHER) {
+ _GET_CURRQEST_VARTINFO().mVarType = EFI_IFR_TYPE_TIME;
+ }
+ >>
{ F:FLAGS "=" vfrTimeFlags[TObj, F->getLine()] "," }
vfrStatementQuestionOptionList
)
@@ -2866,32 +2846,28 @@
<<
EFI_IFR_TYPE_VALUE Val = gZeroEfiIfrTypeValue;
CHAR8 *VarStoreName = NULL;
+ UINT32 Size = 0;
BOOLEAN TypeError = FALSE;
- UINT8 Size = 0;
-
- switch (_GET_CURRQEST_DATATYPE()) {
- case EFI_IFR_TYPE_NUM_SIZE_8: Size = 1; break;
- case EFI_IFR_TYPE_NUM_SIZE_16: Size = 2; break;
- case EFI_IFR_TYPE_NUM_SIZE_32: Size = 4; break;
- case EFI_IFR_TYPE_NUM_SIZE_64: Size = 8; break;
- case EFI_IFR_TYPE_DATE: Size = 4; break;
- case EFI_IFR_TYPE_TIME: Size = 3; break;
- case EFI_IFR_TYPE_REF: Size = 22;break;
- case EFI_IFR_TYPE_STRING: Size = 2; break;
- case EFI_IFR_TYPE_BOOLEAN: Size = 1; break;
- default:
+ EFI_VFR_RETURN_CODE ReturnCode = VFR_RETURN_SUCCESS;
+
+ if (_GET_CURRQEST_DATATYPE() == EFI_IFR_TYPE_OTHER) {
TypeError = TRUE;
Size = sizeof (EFI_IFR_TYPE_VALUE);
- break;
+ } else {
+ ReturnCode = gCVfrVarDataTypeDB.GetDataTypeSize (_GET_CURRQEST_DATATYPE(), &Size);
}
+
Size += OFFSET_OF (EFI_IFR_ONE_OF_OPTION, Value);
- CIfrOneOfOption OOOObj (Size);
+ CIfrOneOfOption OOOObj ((UINT8)Size);
>>
- L:Option <<
+ L:Option <<
OOOObj.SetLineNo(L->getLine());
if (TypeError) {
_PCATCH (VFR_RETURN_FATAL_ERROR, L->getLine(), "Get data type error.");
}
+ if (ReturnCode != VFR_RETURN_SUCCESS) {
+ _PCATCH (ReturnCode, L->getLine());
+ }
>>
Text "=" "STRING_TOKEN" "\(" S:Number "\)" "," << OOOObj.SetOption (_STOSID(S->getText())); >>
Value "=" vfrConstantValueField[_GET_CURRQEST_DATATYPE()] >[Val] ","
This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site.
|
|
From: <yd...@us...> - 2013-08-12 07:10:53
|
Revision: 2596
http://sourceforge.net/p/edk2-buildtools/code/2596
Author: ydong10
Date: 2013-08-12 07:10:50 +0000 (Mon, 12 Aug 2013)
Log Message:
-----------
Update vfrcompiler to support opcode without storage info.
Signed-off-by: Eric Dong <eri...@in...>
Reviewed-by: Liming Gao <lim...@in...>
Modified Paths:
--------------
trunk/BaseTools/Source/C/VfrCompile/VfrSyntax.g
Modified: trunk/BaseTools/Source/C/VfrCompile/VfrSyntax.g
===================================================================
--- trunk/BaseTools/Source/C/VfrCompile/VfrSyntax.g 2013-08-12 01:32:58 UTC (rev 2595)
+++ trunk/BaseTools/Source/C/VfrCompile/VfrSyntax.g 2013-08-12 07:10:50 UTC (rev 2596)
@@ -1889,52 +1889,56 @@
if (_GET_CURRQEST_DATATYPE() == EFI_IFR_TYPE_OTHER) {
_GET_CURRQEST_VARTINFO().mVarType = EFI_IFR_TYPE_BOOLEAN;
}
- _PCATCH (gCVfrVarDataTypeDB.GetDataTypeSize (_GET_CURRQEST_DATATYPE(), &DataTypeSize), L->getLine(), "CheckBox varid is not the valid data type");
- if (DataTypeSize != 0 && DataTypeSize != _GET_CURRQEST_VARSIZE()) {
- _PCATCH (VFR_RETURN_INVALID_PARAMETER, L->getLine(), "CheckBox varid doesn't support array");
- } else if ((mCVfrDataStorage.GetVarStoreType (_GET_CURRQEST_VARTINFO().mVarStoreId) == EFI_VFR_VARSTORE_BUFFER) &&
- (_GET_CURRQEST_VARSIZE() != sizeof (BOOLEAN))) {
- _PCATCH (VFR_RETURN_INVALID_PARAMETER, L->getLine(), "CheckBox varid only support BOOLEAN data type");
+ if (_GET_CURRQEST_VARTINFO().mVarStoreId != EFI_VARSTORE_ID_INVALID) {
+ _PCATCH (gCVfrVarDataTypeDB.GetDataTypeSize (_GET_CURRQEST_DATATYPE(), &DataTypeSize), L->getLine(), "CheckBox varid is not the valid data type");
+ if (DataTypeSize != 0 && DataTypeSize != _GET_CURRQEST_VARSIZE()) {
+ _PCATCH (VFR_RETURN_INVALID_PARAMETER, L->getLine(), "CheckBox varid doesn't support array");
+ } else if ((mCVfrDataStorage.GetVarStoreType (_GET_CURRQEST_VARTINFO().mVarStoreId) == EFI_VFR_VARSTORE_BUFFER) &&
+ (_GET_CURRQEST_VARSIZE() != sizeof (BOOLEAN))) {
+ _PCATCH (VFR_RETURN_INVALID_PARAMETER, L->getLine(), "CheckBox varid only support BOOLEAN data type");
+ }
}
>>
{
F:FLAGS "=" vfrCheckBoxFlags[CBObj, F->getLine()] ","
<<
- _PCATCH(mCVfrDataStorage.GetVarStoreName (_GET_CURRQEST_VARTINFO().mVarStoreId, &VarStoreName), VFR_RETURN_SUCCESS, L, "Failed to retrieve varstore name");
- VarStoreGuid = mCVfrDataStorage.GetVarStoreGuid(_GET_CURRQEST_VARTINFO().mVarStoreId);
- Val.b = TRUE;
- if (CBObj.GetFlags () & 0x01) {
- CheckDuplicateDefaultValue (EFI_HII_DEFAULT_CLASS_STANDARD, F);
- _PCATCH(
- mCVfrDefaultStore.BufferVarStoreAltConfigAdd (
- EFI_HII_DEFAULT_CLASS_STANDARD,
- _GET_CURRQEST_VARTINFO(),
- VarStoreName,
- VarStoreGuid,
- _GET_CURRQEST_DATATYPE (),
- Val
- ),
- VFR_RETURN_SUCCESS,
- L,
- "No standard default storage found"
- );
+ if (_GET_CURRQEST_VARTINFO().mVarStoreId != EFI_VARSTORE_ID_INVALID) {
+ _PCATCH(mCVfrDataStorage.GetVarStoreName (_GET_CURRQEST_VARTINFO().mVarStoreId, &VarStoreName), VFR_RETURN_SUCCESS, L, "Failed to retrieve varstore name");
+ VarStoreGuid = mCVfrDataStorage.GetVarStoreGuid(_GET_CURRQEST_VARTINFO().mVarStoreId);
+ Val.b = TRUE;
+ if (CBObj.GetFlags () & 0x01) {
+ CheckDuplicateDefaultValue (EFI_HII_DEFAULT_CLASS_STANDARD, F);
+ _PCATCH(
+ mCVfrDefaultStore.BufferVarStoreAltConfigAdd (
+ EFI_HII_DEFAULT_CLASS_STANDARD,
+ _GET_CURRQEST_VARTINFO(),
+ VarStoreName,
+ VarStoreGuid,
+ _GET_CURRQEST_DATATYPE (),
+ Val
+ ),
+ VFR_RETURN_SUCCESS,
+ L,
+ "No standard default storage found"
+ );
+ }
+ if (CBObj.GetFlags () & 0x02) {
+ CheckDuplicateDefaultValue (EFI_HII_DEFAULT_CLASS_MANUFACTURING, F);
+ _PCATCH(
+ mCVfrDefaultStore.BufferVarStoreAltConfigAdd (
+ EFI_HII_DEFAULT_CLASS_MANUFACTURING,
+ _GET_CURRQEST_VARTINFO(),
+ VarStoreName,
+ VarStoreGuid,
+ _GET_CURRQEST_DATATYPE (),
+ Val
+ ),
+ VFR_RETURN_SUCCESS,
+ L,
+ "No manufacturing default storage found"
+ );
+ }
}
- if (CBObj.GetFlags () & 0x02) {
- CheckDuplicateDefaultValue (EFI_HII_DEFAULT_CLASS_MANUFACTURING, F);
- _PCATCH(
- mCVfrDefaultStore.BufferVarStoreAltConfigAdd (
- EFI_HII_DEFAULT_CLASS_MANUFACTURING,
- _GET_CURRQEST_VARTINFO(),
- VarStoreName,
- VarStoreGuid,
- _GET_CURRQEST_DATATYPE (),
- Val
- ),
- VFR_RETURN_SUCCESS,
- L,
- "No manufacturing default storage found"
- );
- }
>>
}
{
@@ -2204,11 +2208,13 @@
>>
L:Numeric << NObj.SetLineNo(L->getLine()); >>
vfrQuestionHeader[NObj] "," << // check data type
- _PCATCH (gCVfrVarDataTypeDB.GetDataTypeSize (_GET_CURRQEST_DATATYPE(), &DataTypeSize), L->getLine(), "Numeric varid is not the valid data type");
- if (DataTypeSize != 0 && DataTypeSize != _GET_CURRQEST_VARSIZE()) {
- _PCATCH (VFR_RETURN_INVALID_PARAMETER, L->getLine(), "Numeric varid doesn't support array");
+ if (_GET_CURRQEST_VARTINFO().mVarStoreId != EFI_VARSTORE_ID_INVALID) {
+ _PCATCH (gCVfrVarDataTypeDB.GetDataTypeSize (_GET_CURRQEST_DATATYPE(), &DataTypeSize), L->getLine(), "Numeric varid is not the valid data type");
+ if (DataTypeSize != 0 && DataTypeSize != _GET_CURRQEST_VARSIZE()) {
+ _PCATCH (VFR_RETURN_INVALID_PARAMETER, L->getLine(), "Numeric varid doesn't support array");
+ }
+ _PCATCH(NObj.SetFlags (NObj.FLAGS(), _GET_CURRQEST_DATATYPE()), L->getLine());
}
- _PCATCH(NObj.SetFlags (NObj.FLAGS(), _GET_CURRQEST_DATATYPE()), L->getLine());
>>
{ F:FLAGS "=" vfrNumericFlags[NObj, F->getLine()] "," }
{
@@ -2245,32 +2251,37 @@
UINT8 LFlags = _GET_CURRQEST_DATATYPE() & EFI_IFR_NUMERIC_SIZE;
UINT8 HFlags = 0;
EFI_VFR_VARSTORE_TYPE VarStoreType = EFI_VFR_VARSTORE_INVALID;
+ BOOLEAN IsSetType = FALSE;
>>
- numericFlagsField[HFlags, LFlags] ( "\|" numericFlagsField[HFlags, LFlags] )*
+ numericFlagsField[HFlags, LFlags, IsSetType] ( "\|" numericFlagsField[HFlags, LFlags, IsSetType] )*
<<
//check data type flag
- VarStoreType = mCVfrDataStorage.GetVarStoreType (_GET_CURRQEST_VARTINFO().mVarStoreId);
- if (VarStoreType == EFI_VFR_VARSTORE_BUFFER || VarStoreType == EFI_VFR_VARSTORE_EFI) {
- if (_GET_CURRQEST_DATATYPE() != (LFlags & EFI_IFR_NUMERIC_SIZE)) {
- _PCATCH(VFR_RETURN_INVALID_PARAMETER, LineNum, "Numeric Flag is not same to Numeric VarData type");
+ if (_GET_CURRQEST_VARTINFO().mVarStoreId != EFI_VARSTORE_ID_INVALID) {
+ VarStoreType = mCVfrDataStorage.GetVarStoreType (_GET_CURRQEST_VARTINFO().mVarStoreId);
+ if (VarStoreType == EFI_VFR_VARSTORE_BUFFER || VarStoreType == EFI_VFR_VARSTORE_EFI) {
+ if (_GET_CURRQEST_DATATYPE() != (LFlags & EFI_IFR_NUMERIC_SIZE)) {
+ _PCATCH(VFR_RETURN_INVALID_PARAMETER, LineNum, "Numeric Flag is not same to Numeric VarData type");
+ }
+ } else {
+ // update data type for name/value store
+ UINT32 DataTypeSize;
+ _GET_CURRQEST_VARTINFO().mVarType = LFlags & EFI_IFR_NUMERIC_SIZE;
+ gCVfrVarDataTypeDB.GetDataTypeSize (_GET_CURRQEST_DATATYPE(), &DataTypeSize);
+ _GET_CURRQEST_VARTINFO().mVarTotalSize = DataTypeSize;
}
- } else {
- // update data type for name/value store
- UINT32 DataTypeSize;
+ } else if (IsSetType){
_GET_CURRQEST_VARTINFO().mVarType = LFlags & EFI_IFR_NUMERIC_SIZE;
- gCVfrVarDataTypeDB.GetDataTypeSize (_GET_CURRQEST_DATATYPE(), &DataTypeSize);
- _GET_CURRQEST_VARTINFO().mVarTotalSize = DataTypeSize;
}
_PCATCH(NObj.SetFlags (HFlags, LFlags), LineNum);
>>
;
-numericFlagsField [UINT8 & HFlags, UINT8 & LFlags] :
+numericFlagsField [UINT8 & HFlags, UINT8 & LFlags, BOOLEAN & IsSetType] :
N:Number << _PCATCH(_STOU8(N->getText()) == 0 ? VFR_RETURN_SUCCESS : VFR_RETURN_UNSUPPORTED, N->getLine()); >>
- | "NUMERIC_SIZE_1" << $LFlags = ($LFlags & ~EFI_IFR_NUMERIC_SIZE) | EFI_IFR_NUMERIC_SIZE_1; >>
- | "NUMERIC_SIZE_2" << $LFlags = ($LFlags & ~EFI_IFR_NUMERIC_SIZE) | EFI_IFR_NUMERIC_SIZE_2; >>
- | "NUMERIC_SIZE_4" << $LFlags = ($LFlags & ~EFI_IFR_NUMERIC_SIZE) | EFI_IFR_NUMERIC_SIZE_4; >>
- | "NUMERIC_SIZE_8" << $LFlags = ($LFlags & ~EFI_IFR_NUMERIC_SIZE) | EFI_IFR_NUMERIC_SIZE_8; >>
+ | "NUMERIC_SIZE_1" << $LFlags = ($LFlags & ~EFI_IFR_NUMERIC_SIZE) | EFI_IFR_NUMERIC_SIZE_1; IsSetType = TRUE;>>
+ | "NUMERIC_SIZE_2" << $LFlags = ($LFlags & ~EFI_IFR_NUMERIC_SIZE) | EFI_IFR_NUMERIC_SIZE_2; IsSetType = TRUE;>>
+ | "NUMERIC_SIZE_4" << $LFlags = ($LFlags & ~EFI_IFR_NUMERIC_SIZE) | EFI_IFR_NUMERIC_SIZE_4; IsSetType = TRUE;>>
+ | "NUMERIC_SIZE_8" << $LFlags = ($LFlags & ~EFI_IFR_NUMERIC_SIZE) | EFI_IFR_NUMERIC_SIZE_8; IsSetType = TRUE;>>
| "DISPLAY_INT_DEC" << $LFlags = ($LFlags & ~EFI_IFR_DISPLAY) | EFI_IFR_DISPLAY_INT_DEC; >>
| "DISPLAY_UINT_DEC" << $LFlags = ($LFlags & ~EFI_IFR_DISPLAY) | EFI_IFR_DISPLAY_UINT_DEC; >>
| "DISPLAY_UINT_HEX" << $LFlags = ($LFlags & ~EFI_IFR_DISPLAY) | EFI_IFR_DISPLAY_UINT_HEX; >>
@@ -2286,11 +2297,13 @@
>>
L:OneOf << OObj.SetLineNo(L->getLine()); >>
vfrQuestionHeader[OObj] "," << //check data type
- _PCATCH (gCVfrVarDataTypeDB.GetDataTypeSize (_GET_CURRQEST_DATATYPE(), &DataTypeSize), L->getLine(), "OneOf varid is not the valid data type");
- if (DataTypeSize != 0 && DataTypeSize != _GET_CURRQEST_VARSIZE()) {
- _PCATCH (VFR_RETURN_INVALID_PARAMETER, L->getLine(), "OneOf varid doesn't support array");
+ if (_GET_CURRQEST_VARTINFO().mVarStoreId != EFI_VARSTORE_ID_INVALID) {
+ _PCATCH (gCVfrVarDataTypeDB.GetDataTypeSize (_GET_CURRQEST_DATATYPE(), &DataTypeSize), L->getLine(), "OneOf varid is not the valid data type");
+ if (DataTypeSize != 0 && DataTypeSize != _GET_CURRQEST_VARSIZE()) {
+ _PCATCH (VFR_RETURN_INVALID_PARAMETER, L->getLine(), "OneOf varid doesn't support array");
+ }
+ _PCATCH(OObj.SetFlags (OObj.FLAGS(), _GET_CURRQEST_DATATYPE()), L->getLine());
}
- _PCATCH(OObj.SetFlags (OObj.FLAGS(), _GET_CURRQEST_DATATYPE()), L->getLine());
>>
{ F:FLAGS "=" vfrOneofFlagsField[OObj, F->getLine()] "," }
{
@@ -2327,21 +2340,26 @@
UINT8 LFlags = _GET_CURRQEST_DATATYPE() & EFI_IFR_NUMERIC_SIZE;
UINT8 HFlags = 0;
EFI_VFR_VARSTORE_TYPE VarStoreType = EFI_VFR_VARSTORE_INVALID;
+ BOOLEAN IsSetType = FALSE;
>>
- numericFlagsField[HFlags, LFlags] ( "\|" numericFlagsField[HFlags, LFlags] )*
+ numericFlagsField[HFlags, LFlags, IsSetType] ( "\|" numericFlagsField[HFlags, LFlags, IsSetType] )*
<<
//check data type flag
- VarStoreType = mCVfrDataStorage.GetVarStoreType (_GET_CURRQEST_VARTINFO().mVarStoreId);
- if (VarStoreType == EFI_VFR_VARSTORE_BUFFER || VarStoreType == EFI_VFR_VARSTORE_EFI) {
- if (_GET_CURRQEST_DATATYPE() != (LFlags & EFI_IFR_NUMERIC_SIZE)) {
- _PCATCH(VFR_RETURN_INVALID_PARAMETER, LineNum, "Numeric Flag is not same to Numeric VarData type");
+ if (_GET_CURRQEST_VARTINFO().mVarStoreId != EFI_VARSTORE_ID_INVALID) {
+ VarStoreType = mCVfrDataStorage.GetVarStoreType (_GET_CURRQEST_VARTINFO().mVarStoreId);
+ if (VarStoreType == EFI_VFR_VARSTORE_BUFFER || VarStoreType == EFI_VFR_VARSTORE_EFI) {
+ if (_GET_CURRQEST_DATATYPE() != (LFlags & EFI_IFR_NUMERIC_SIZE)) {
+ _PCATCH(VFR_RETURN_INVALID_PARAMETER, LineNum, "Numeric Flag is not same to Numeric VarData type");
+ }
+ } else {
+ // update data type for Name/Value store
+ UINT32 DataTypeSize;
+ _GET_CURRQEST_VARTINFO().mVarType = LFlags & EFI_IFR_NUMERIC_SIZE;
+ gCVfrVarDataTypeDB.GetDataTypeSize (_GET_CURRQEST_DATATYPE(), &DataTypeSize);
+ _GET_CURRQEST_VARTINFO().mVarTotalSize = DataTypeSize;
}
- } else {
- // update data type for Name/Value store
- UINT32 DataTypeSize;
+ } else if (IsSetType){
_GET_CURRQEST_VARTINFO().mVarType = LFlags & EFI_IFR_NUMERIC_SIZE;
- gCVfrVarDataTypeDB.GetDataTypeSize (_GET_CURRQEST_DATATYPE(), &DataTypeSize);
- _GET_CURRQEST_VARTINFO().mVarTotalSize = DataTypeSize;
}
_PCATCH(OObj.SetFlags (HFlags, LFlags), LineNum);
>>
@@ -2916,30 +2934,32 @@
>>
F:FLAGS "=" vfrOneOfOptionFlags[OOOObj, F->getLine()]
<<
- _PCATCH(mCVfrDataStorage.GetVarStoreName (_GET_CURRQEST_VARTINFO().mVarStoreId, &VarStoreName), L->getLine());
- VarStoreGuid = mCVfrDataStorage.GetVarStoreGuid(_GET_CURRQEST_VARTINFO().mVarStoreId);
- if (OOOObj.GetFlags () & 0x10) {
- CheckDuplicateDefaultValue (EFI_HII_DEFAULT_CLASS_STANDARD, F);
- _PCATCH(mCVfrDefaultStore.BufferVarStoreAltConfigAdd (
- EFI_HII_DEFAULT_CLASS_STANDARD,
- _GET_CURRQEST_VARTINFO(),
- VarStoreName,
- VarStoreGuid,
- _GET_CURRQEST_DATATYPE (),
- Val
- ), L->getLine());
+ if (_GET_CURRQEST_VARTINFO().mVarStoreId != EFI_VARSTORE_ID_INVALID) {
+ _PCATCH(mCVfrDataStorage.GetVarStoreName (_GET_CURRQEST_VARTINFO().mVarStoreId, &VarStoreName), L->getLine());
+ VarStoreGuid = mCVfrDataStorage.GetVarStoreGuid(_GET_CURRQEST_VARTINFO().mVarStoreId);
+ if (OOOObj.GetFlags () & 0x10) {
+ CheckDuplicateDefaultValue (EFI_HII_DEFAULT_CLASS_STANDARD, F);
+ _PCATCH(mCVfrDefaultStore.BufferVarStoreAltConfigAdd (
+ EFI_HII_DEFAULT_CLASS_STANDARD,
+ _GET_CURRQEST_VARTINFO(),
+ VarStoreName,
+ VarStoreGuid,
+ _GET_CURRQEST_DATATYPE (),
+ Val
+ ), L->getLine());
+ }
+ if (OOOObj.GetFlags () & 0x20) {
+ CheckDuplicateDefaultValue (EFI_HII_DEFAULT_CLASS_MANUFACTURING, F);
+ _PCATCH(mCVfrDefaultStore.BufferVarStoreAltConfigAdd (
+ EFI_HII_DEFAULT_CLASS_MANUFACTURING,
+ _GET_CURRQEST_VARTINFO(),
+ VarStoreName,
+ VarStoreGuid,
+ _GET_CURRQEST_DATATYPE (),
+ Val
+ ), L->getLine());
+ }
}
- if (OOOObj.GetFlags () & 0x20) {
- CheckDuplicateDefaultValue (EFI_HII_DEFAULT_CLASS_MANUFACTURING, F);
- _PCATCH(mCVfrDefaultStore.BufferVarStoreAltConfigAdd (
- EFI_HII_DEFAULT_CLASS_MANUFACTURING,
- _GET_CURRQEST_VARTINFO(),
- VarStoreName,
- VarStoreGuid,
- _GET_CURRQEST_DATATYPE (),
- Val
- ), L->getLine());
- }
>>
{
"," Key "=" KN:Number <<
This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site.
|
|
From: <yd...@us...> - 2013-10-22 08:29:26
|
Revision: 2605
http://sourceforge.net/p/edk2-buildtools/code/2605
Author: ydong10
Date: 2013-10-22 08:29:24 +0000 (Tue, 22 Oct 2013)
Log Message:
-----------
Enable statement nest in subtitle opcode.
Signed-off-by: Eric Dong <eri...@in...>
Reviewed-by: Liming Gao <lim...@in...>
Modified Paths:
--------------
trunk/BaseTools/Source/C/VfrCompile/VfrSyntax.g
Modified: trunk/BaseTools/Source/C/VfrCompile/VfrSyntax.g
===================================================================
--- trunk/BaseTools/Source/C/VfrCompile/VfrSyntax.g 2013-10-22 08:04:43 UTC (rev 2604)
+++ trunk/BaseTools/Source/C/VfrCompile/VfrSyntax.g 2013-10-22 08:29:24 UTC (rev 2605)
@@ -136,6 +136,7 @@
#token MapTitle("maptitle") "maptitle"
#token MapGuid("mapguid") "mapguid"
#token Subtitle("subtitle") "subtitle"
+#token EndSubtitle("endsubtitle") "endsubtitle"
#token Help("help") "help"
#token Text("text") "text"
#token Option("option") "option"
@@ -1645,8 +1646,14 @@
{
"," FLAGS "=" vfrSubtitleFlags[SObj]
}
- { vfrStatementStatTagList "," }
- E:";" << CRT_END_OP (E); >>
+ (
+ {vfrStatementStatTagList "," }
+ E:";" << CRT_END_OP (E); >>
+ |
+ { "," vfrStatementStatTagList}
+ { "," (vfrStatementStat | vfrStatementQuestions)*}
+ E: EndSubtitle ";" << CRT_END_OP (E); >>
+ )
;
vfrSubtitleFlags [CIfrSubtitle & SObj] :
This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site.
|
|
From: <yd...@us...> - 2014-06-09 10:33:29
|
Revision: 2666
http://sourceforge.net/p/edk2-buildtools/code/2666
Author: ydong10
Date: 2014-06-09 10:33:24 +0000 (Mon, 09 Jun 2014)
Log Message:
-----------
Add report error message logic for string to integer functions in VfrCompiler (STOU8, STOU16, STOU32, STOU64).
Contributed-under: TianoCore Contribution Agreement 1.0
Signed-off-by: Aaron Pop <aa...@am...>
Reviewed-by: Eric Dong <eri...@in...>
Modified Paths:
--------------
trunk/BaseTools/Source/C/VfrCompile/VfrSyntax.g
Modified: trunk/BaseTools/Source/C/VfrCompile/VfrSyntax.g
===================================================================
--- trunk/BaseTools/Source/C/VfrCompile/VfrSyntax.g 2014-06-09 10:27:59 UTC (rev 2665)
+++ trunk/BaseTools/Source/C/VfrCompile/VfrSyntax.g 2014-06-09 10:33:24 UTC (rev 2666)
@@ -4344,11 +4344,13 @@
UINT8 Value;
CHAR8 c;
+ UINT8 PreviousValue;
+ CHAR8 *OrigString = Str;
+ CHAR8 ErrorMsg[100];
+
Str = TrimHex (Str, &IsHex);
for (Value = 0; (c = *Str) != '\0'; Str++) {
- //
- // BUG: does not handle overflow here
- //
+ PreviousValue = Value;
(IsHex == TRUE) ? (Value <<= 4) : (Value *= 10);
if ((IsHex == TRUE) && (c >= 'a') && (c <= 'f')) {
@@ -4360,6 +4362,10 @@
if (c >= '0' && c <= '9') {
Value += (c - '0');
}
+ if((IsHex && ((Value/16) != PreviousValue)) || (!IsHex && ((Value/10) != PreviousValue))) {
+ sprintf(ErrorMsg, "Overflow: Value %s is too large to store in a UINT8", OrigString);
+ _PCATCH (VFR_RETURN_INVALID_PARAMETER, 0, ErrorMsg);
+ }
}
return Value;
@@ -4374,11 +4380,13 @@
UINT16 Value;
CHAR8 c;
+ UINT16 PreviousValue;
+ CHAR8 *OrigString = Str;
+ CHAR8 ErrorMsg[100];
+
Str = TrimHex (Str, &IsHex);
for (Value = 0; (c = *Str) != '\0'; Str++) {
- //
- // BUG: does not handle overflow here
- //
+ PreviousValue = Value;
(IsHex == TRUE) ? (Value <<= 4) : (Value *= 10);
if ((IsHex == TRUE) && (c >= 'a') && (c <= 'f')) {
@@ -4390,6 +4398,10 @@
if (c >= '0' && c <= '9') {
Value += (c - '0');
}
+ if((IsHex && ((Value/16) != PreviousValue)) || (!IsHex && ((Value/10) != PreviousValue))) {
+ sprintf(ErrorMsg, "Overflow: Value %s is too large to store in a UINT16", OrigString);
+ _PCATCH (VFR_RETURN_INVALID_PARAMETER, 0, ErrorMsg);
+ }
}
return Value;
@@ -4404,11 +4416,13 @@
UINT32 Value;
CHAR8 c;
+ UINT32 PreviousValue;
+ CHAR8 *OrigString = Str;
+ CHAR8 ErrorMsg[100];
+
Str = TrimHex (Str, &IsHex);
for (Value = 0; (c = *Str) != '\0'; Str++) {
- //
- // BUG: does not handle overflow here
- //
+ PreviousValue = Value;
(IsHex == TRUE) ? (Value <<= 4) : (Value *= 10);
if ((IsHex == TRUE) && (c >= 'a') && (c <= 'f')) {
@@ -4420,6 +4434,10 @@
if (c >= '0' && c <= '9') {
Value += (c - '0');
}
+ if((IsHex && ((Value/16) != PreviousValue)) || (!IsHex && ((Value/10) != PreviousValue ))) {
+ sprintf(ErrorMsg, "Overflow: Value %s is too large to store in a UINT32", OrigString);
+ _PCATCH (VFR_RETURN_INVALID_PARAMETER, 0, ErrorMsg);
+ }
}
return Value;
@@ -4433,12 +4451,13 @@
BOOLEAN IsHex;
UINT64 Value;
CHAR8 c;
+ UINT64 PreviousValue;
+ CHAR8 *OrigString = Str;
+ CHAR8 ErrorMsg[100];
Str = TrimHex (Str, &IsHex);
for (Value = 0; (c = *Str) != '\0'; Str++) {
- //
- // BUG: does not handle overflow here
- //
+ PreviousValue = Value;
(IsHex == TRUE) ? (Value <<= 4) : (Value *= 10);
if ((IsHex == TRUE) && (c >= 'a') && (c <= 'f')) {
@@ -4450,6 +4469,10 @@
if (c >= '0' && c <= '9') {
Value += (c - '0');
}
+ if((IsHex && ((Value/16) != PreviousValue)) || ((!IsHex && (Value/10) != PreviousValue))) {
+ sprintf(ErrorMsg, "Overflow: Value %s is too large to store in a UINT64", OrigString);
+ _PCATCH (VFR_RETURN_INVALID_PARAMETER, 0, ErrorMsg);
+ }
}
return Value;
This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site.
|
|
From: <yd...@us...> - 2014-07-14 03:02:24
|
Revision: 2672
http://sourceforge.net/p/edk2-buildtools/code/2672
Author: ydong10
Date: 2014-07-14 03:02:20 +0000 (Mon, 14 Jul 2014)
Log Message:
-----------
Clean 1 build error and 1 warning for VfrCompiler.
Contributed-under: TianoCore Contribution Agreement 1.0
Signed-off-by: Eric Dong <eri...@in...>
Reviewed-by: Liming Gao <lim...@in...>
Modified Paths:
--------------
trunk/BaseTools/Source/C/VfrCompile/VfrSyntax.g
Modified: trunk/BaseTools/Source/C/VfrCompile/VfrSyntax.g
===================================================================
--- trunk/BaseTools/Source/C/VfrCompile/VfrSyntax.g 2014-07-09 02:47:47 UTC (rev 2671)
+++ trunk/BaseTools/Source/C/VfrCompile/VfrSyntax.g 2014-07-14 03:02:20 UTC (rev 2672)
@@ -505,11 +505,11 @@
{
ClassGuid "=" guidDefinition[ClassGuid1] << ++ClassGuidNum; >>
{
- "\|" guidDefinition[ClassGuid2] << ++ClassGuidNum; >>
+ "\|" guidDefinition[ClassGuid2] << ++ClassGuidNum; >>
+ {
+ "\|" guidDefinition[ClassGuid3] << ++ClassGuidNum; >>
+ }
}
- {
- "\|" guidDefinition[ClassGuid3] << ++ClassGuidNum; >>
- }
","
}
<<
@@ -1652,7 +1652,7 @@
|
{ "," vfrStatementStatTagList}
{ "," (vfrStatementStat | vfrStatementQuestions)*}
- E: EndSubtitle ";" << CRT_END_OP (E); >>
+ D: EndSubtitle ";" << CRT_END_OP (D); >>
)
;
This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site.
|