#define EFI_IFR_MODAL_TAG_OP 0x61\r
#define EFI_IFR_REFRESH_ID_OP 0x62\r
#define EFI_IFR_WARNING_IF_OP 0x63\r
+#define EFI_IFR_MATCH2_OP 0x64\r
\r
\r
typedef struct _EFI_IFR_OP_HEADER {\r
EFI_IFR_OP_HEADER Header;\r
} EFI_IFR_MATCH;\r
\r
+typedef struct _EFI_IFR_MATCH2 {\r
+ EFI_IFR_OP_HEADER Header;\r
+ EFI_GUID SyntaxType;\r
+} EFI_IFR_MATCH2;\r
+\r
typedef struct _EFI_IFR_MULTIPLY {\r
EFI_IFR_OP_HEADER Header;\r
} EFI_IFR_MULTIPLY;\r
{ sizeof (EFI_IFR_MODAL_TAG), 0}, // EFI_IFR_MODAL_TAG_OP - 0x61\r
{ sizeof (EFI_IFR_REFRESH_ID), 0}, // EFI_IFR_REFRESH_ID_OP - 0x62\r
{ sizeof (EFI_IFR_WARNING_IF), 1}, // EFI_IFR_WARNING_IF_OP - 0x63\r
+ { sizeof (EFI_IFR_MATCH2), 0 }, // EFI_IFR_MATCH2_OP - 0x64\r
};\r
\r
#ifdef CIFROBJ_DEUBG\r
"EFI_IFR_STRING_REF1","EFI_IFR_STRING_REF2", "EFI_IFR_CONDITIONAL", "EFI_IFR_QUESTION_REF3", "EFI_IFR_ZERO", "EFI_IFR_ONE",\r
"EFI_IFR_ONES", "EFI_IFR_UNDEFINED", "EFI_IFR_LENGTH", "EFI_IFR_DUP", "EFI_IFR_THIS", "EFI_IFR_SPAN",\r
"EFI_IFR_VALUE", "EFI_IFR_DEFAULT", "EFI_IFR_DEFAULTSTORE", "EFI_IFR_FORM_MAP", "EFI_IFR_CATENATE", "EFI_IFR_GUID",\r
- "EFI_IFR_SECURITY", "EFI_IFR_MODAL_TAG", "EFI_IFR_REFRESH_ID", "EFI_IFR_WARNING_IF",\r
+ "EFI_IFR_SECURITY", "EFI_IFR_MODAL_TAG", "EFI_IFR_REFRESH_ID", "EFI_IFR_WARNING_IF", "EFI_IFR_MATCH2",\r
};\r
\r
VOID\r
}\r
};\r
\r
+class CIfrMatch2 : public CIfrObj, public CIfrOpHeader {\r
+private:\r
+ EFI_IFR_MATCH2 *mMatch2;\r
+\r
+public:\r
+ CIfrMatch2 (\r
+ IN UINT32 LineNo,\r
+ IN EFI_GUID *Guid\r
+ ) : CIfrObj (EFI_IFR_MATCH2_OP, (CHAR8 **)&mMatch2),\r
+ CIfrOpHeader (EFI_IFR_MATCH2_OP, &mMatch2->Header) {\r
+ SetLineNo (LineNo);\r
+ memmove (&mMatch2->SyntaxType, Guid, sizeof (EFI_GUID));\r
+ }\r
+};\r
+\r
class CIfrMultiply : public CIfrObj, public CIfrOpHeader {\r
private:\r
EFI_IFR_MULTIPLY *mMultiply;\r
#token ToUpper("toupper") "toupper"\r
#token ToLower("tolower") "tolower"\r
#token Match("match") "match"\r
+#token Match2("match2") "match2"\r
#token Catenate("catenate") "catenate"\r
#token QuestionRefVal("questionrefval") "questionrefval"\r
#token StringRefVal("stringrefval") "stringrefval"\r
atomTerm [UINT32 & RootLevel, UINT32 & ExpOpCount]:\r
vfrExpressionCatenate[$RootLevel, $ExpOpCount]\r
| vfrExpressionMatch[$RootLevel, $ExpOpCount]\r
+ | vfrExpressionMatch2[$RootLevel, $ExpOpCount]\r
| vfrExpressionParen[$RootLevel, $ExpOpCount]\r
| vfrExpressionBuildInFunction[$RootLevel, $ExpOpCount]\r
| vfrExpressionConstant[$RootLevel, $ExpOpCount]\r
"\)" << { CIfrMatch MObj(L->getLine()); $ExpOpCount++; } >>\r
;\r
\r
+vfrExpressionMatch2 [UINT32 & RootLevel, UINT32 & ExpOpCount]:\r
+ <<\r
+ EFI_GUID Guid;\r
+ >>\r
+ L:Match2\r
+ "\("\r
+ vfrStatementExpressionSub[$RootLevel + 1, $ExpOpCount]\r
+ ","\r
+ vfrStatementExpressionSub[$RootLevel + 1, $ExpOpCount]\r
+ ","\r
+ guidDefinition[Guid]\r
+ "\)" << { CIfrMatch2 M2Obj(L->getLine(), &Guid); $ExpOpCount++; } >>\r
+ ;\r
+\r
vfrExpressionParen [UINT32 & RootLevel, UINT32 & ExpOpCount]:\r
"\("\r
vfrStatementExpressionSub[$RootLevel + 1, $ExpOpCount]\r