mirror of https://github.com/acidanthera/audk.git
Enhance the browser parse opcode logic, skip the opcode which is not defined in UEFI spec.
Contributed-under: TianoCore Contribution Agreement 1.0 Signed-off-by: Eric Dong <eric.dong@intel.com> Reviewed-by: Gao, Liming <liming,gao@intel.com> git-svn-id: https://svn.code.sf.net/p/edk2/code/trunk/edk2@15475 6f19259b-4bc3-4df7-8a09-765794883524
This commit is contained in:
parent
147113644f
commit
7e2f32894b
|
@ -1073,6 +1073,23 @@ IsStatementOpCode (
|
|||
}
|
||||
}
|
||||
|
||||
/**
|
||||
Tell whether this Operand is an known OpCode.
|
||||
|
||||
@param Operand Operand of an IFR OpCode.
|
||||
|
||||
@retval TRUE This is an Statement OpCode.
|
||||
@retval FALSE Not an Statement OpCode.
|
||||
|
||||
**/
|
||||
BOOLEAN
|
||||
IsUnKnownOpCode (
|
||||
IN UINT8 Operand
|
||||
)
|
||||
{
|
||||
return Operand > EFI_IFR_WARNING_IF_OP ? TRUE : FALSE;
|
||||
}
|
||||
|
||||
/**
|
||||
Calculate number of Statemens(Questions) and Expression OpCodes.
|
||||
|
||||
|
@ -1165,6 +1182,8 @@ ParseOpCodes (
|
|||
EFI_VARSTORE_ID TempVarstoreId;
|
||||
BOOLEAN InScopeDisable;
|
||||
INTN ConditionalExprCount;
|
||||
BOOLEAN InUnknownScope;
|
||||
UINT8 UnknownDepth;
|
||||
|
||||
SuppressForQuestion = FALSE;
|
||||
SuppressForOption = FALSE;
|
||||
|
@ -1184,6 +1203,8 @@ ParseOpCodes (
|
|||
MapExpressionList = NULL;
|
||||
TempVarstoreId = 0;
|
||||
ConditionalExprCount = 0;
|
||||
InUnknownScope = FALSE;
|
||||
UnknownDepth = 0;
|
||||
|
||||
//
|
||||
// Get the number of Statements and Expressions
|
||||
|
@ -1226,6 +1247,31 @@ ParseOpCodes (
|
|||
Operand = ((EFI_IFR_OP_HEADER *) OpCodeData)->OpCode;
|
||||
Scope = ((EFI_IFR_OP_HEADER *) OpCodeData)->Scope;
|
||||
|
||||
if (InUnknownScope) {
|
||||
if (Operand == EFI_IFR_END_OP) {
|
||||
UnknownDepth --;
|
||||
|
||||
if (UnknownDepth == 0) {
|
||||
InUnknownScope = FALSE;
|
||||
}
|
||||
} else {
|
||||
if (Scope != 0) {
|
||||
UnknownDepth ++;
|
||||
}
|
||||
}
|
||||
|
||||
continue;
|
||||
}
|
||||
|
||||
if (IsUnKnownOpCode(Operand)) {
|
||||
if (Scope != 0) {
|
||||
InUnknownScope = TRUE;
|
||||
UnknownDepth ++;
|
||||
}
|
||||
|
||||
continue;
|
||||
}
|
||||
|
||||
//
|
||||
// If scope bit set, push onto scope stack
|
||||
//
|
||||
|
|
Loading…
Reference in New Issue