Allocate a FORM_EXPRESSION node.\r
\r
@param Form The Form associated with this Expression\r
+ @param OpCode The binary opcode data.\r
\r
@return Pointer to a FORM_EXPRESSION data structure.\r
\r
**/\r
FORM_EXPRESSION *\r
CreateExpression (\r
- IN OUT FORM_BROWSER_FORM *Form\r
+ IN OUT FORM_BROWSER_FORM *Form,\r
+ IN UINT8 *OpCode\r
)\r
{\r
FORM_EXPRESSION *Expression;\r
ASSERT (Expression != NULL);\r
Expression->Signature = FORM_EXPRESSION_SIGNATURE;\r
InitializeListHead (&Expression->OpCodeListHead);\r
+ Expression->OpCode = (EFI_IFR_OP_HEADER *) OpCode;\r
\r
return Expression;\r
}\r
// Create sub expression nested in MAP opcode\r
//\r
if (CurrentExpression == NULL && MapScopeDepth > 0) {\r
- CurrentExpression = CreateExpression (CurrentForm);\r
+ CurrentExpression = CreateExpression (CurrentForm, OpCodeData);\r
ASSERT (MapExpressionList != NULL);\r
InsertTailList (MapExpressionList, &CurrentExpression->Link);\r
if (Scope == 0) {\r
//\r
// Create an Expression node\r
//\r
- CurrentExpression = CreateExpression (CurrentForm);\r
+ CurrentExpression = CreateExpression (CurrentForm, OpCodeData);\r
CopyMem (&CurrentExpression->Error, &((EFI_IFR_INCONSISTENT_IF *) OpCodeData)->Error, sizeof (EFI_STRING_ID));\r
\r
if (Operand == EFI_IFR_NO_SUBMIT_IF_OP) {\r
//\r
// Create an Expression node\r
//\r
- CurrentExpression = CreateExpression (CurrentForm);\r
+ CurrentExpression = CreateExpression (CurrentForm, OpCodeData);\r
CopyMem (&CurrentExpression->Error, &((EFI_IFR_WARNING_IF *) OpCodeData)->Warning, sizeof (EFI_STRING_ID));\r
CurrentExpression->TimeOut = ((EFI_IFR_WARNING_IF *) OpCodeData)->TimeOut;\r
CurrentExpression->Type = EFI_HII_EXPRESSION_WARNING_IF;\r
//\r
// Question and Option will appear in scope of this OpCode\r
//\r
- CurrentExpression = CreateExpression (CurrentForm);\r
+ CurrentExpression = CreateExpression (CurrentForm, OpCodeData);\r
CurrentExpression->Type = EFI_HII_EXPRESSION_SUPPRESS_IF;\r
\r
if (CurrentForm == NULL) {\r
//\r
// Questions will appear in scope of this OpCode\r
//\r
- CurrentExpression = CreateExpression (CurrentForm);\r
+ CurrentExpression = CreateExpression (CurrentForm, OpCodeData);\r
CurrentExpression->Type = EFI_HII_EXPRESSION_GRAY_OUT_IF;\r
InsertTailList (&CurrentForm->ExpressionListHead, &CurrentExpression->Link);\r
PushConditionalExpression(CurrentExpression, ExpressStatement);\r
// Expression\r
//\r
case EFI_IFR_VALUE_OP:\r
- CurrentExpression = CreateExpression (CurrentForm);\r
+ CurrentExpression = CreateExpression (CurrentForm, OpCodeData);\r
CurrentExpression->Type = EFI_HII_EXPRESSION_VALUE;\r
InsertTailList (&CurrentForm->ExpressionListHead, &CurrentExpression->Link);\r
\r
break;\r
\r
case EFI_IFR_RULE_OP:\r
- CurrentExpression = CreateExpression (CurrentForm);\r
+ CurrentExpression = CreateExpression (CurrentForm, OpCodeData);\r
CurrentExpression->Type = EFI_HII_EXPRESSION_RULE;\r
\r
CurrentExpression->RuleId = ((EFI_IFR_RULE *) OpCodeData)->RuleId;\r
break;\r
\r
case EFI_IFR_READ_OP:\r
- CurrentExpression = CreateExpression (CurrentForm);\r
+ CurrentExpression = CreateExpression (CurrentForm, OpCodeData);\r
CurrentExpression->Type = EFI_HII_EXPRESSION_READ;\r
InsertTailList (&CurrentForm->ExpressionListHead, &CurrentExpression->Link);\r
\r
break;\r
\r
case EFI_IFR_WRITE_OP:\r
- CurrentExpression = CreateExpression (CurrentForm);\r
+ CurrentExpression = CreateExpression (CurrentForm, OpCodeData);\r
CurrentExpression->Type = EFI_HII_EXPRESSION_WRITE;\r
InsertTailList (&CurrentForm->ExpressionListHead, &CurrentExpression->Link);\r
\r
//\r
// Parent statement end tag found, update ParentStatement info.\r
//\r
- if (IsStatementOpCode(ScopeOpCode) && ParentStatement->Operand == ScopeOpCode) {\r
+ if (IsStatementOpCode(ScopeOpCode) && (ParentStatement != NULL) && (ParentStatement->Operand == ScopeOpCode)) {\r
ParentStatement = ParentStatement->ParentStatement;\r
}\r
\r