]> git.proxmox.com Git - mirror_edk2.git/commitdiff
BaseTools: Enable Match2 Opcode.
authorEric Dong <eric.dong@intel.com>
Wed, 6 May 2015 10:38:04 +0000 (10:38 +0000)
committerydong10 <ydong10@Edk2>
Wed, 6 May 2015 10:38:04 +0000 (10:38 +0000)
Contributed-under: TianoCore Contribution Agreement 1.0
Signed-off-by: Eric Dong <eric.dong@intel.com>
Reviewed-by: Liming Gao <liming.gao@intel.com>
Reviewed-by: Samer El-Haj-Mahmoud <samer.el-haj-mahmoud@hp.com>
git-svn-id: https://svn.code.sf.net/p/edk2/code/trunk/edk2@17338 6f19259b-4bc3-4df7-8a09-765794883524

BaseTools/Source/C/Include/Common/UefiInternalFormRepresentation.h
BaseTools/Source/C/VfrCompile/VfrFormPkg.cpp
BaseTools/Source/C/VfrCompile/VfrFormPkg.h
BaseTools/Source/C/VfrCompile/VfrSyntax.g

index 2da3f547bdb0c390b7ac3ab64d2cd425c97b9b9b..d17b633c2e715a463c831af7276243577e6b9c18 100644 (file)
@@ -690,6 +690,7 @@ typedef union {
 #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
@@ -1268,6 +1269,11 @@ typedef struct _EFI_IFR_MATCH {
   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
index 376a454e02e25b725396738aedb0a3f0f0fee3ff..161221727275e88aed0337e47437aa4a5e0f5696 100644 (file)
@@ -1663,6 +1663,7 @@ static struct {
   { 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
@@ -1685,7 +1686,7 @@ static struct {
   "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
index 71ff02371bc89597201da17b458c8e224f6a49fe..d2d56cd110bb728cd19724d967597cbc09c1870a 100644 (file)
@@ -2656,6 +2656,21 @@ public:
   }\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
index 891effad79efb750da9b2b0718e0a7081d01b286..1c719aa755756744819b305063682eee5c13739b 100644 (file)
@@ -3401,6 +3401,7 @@ vfrStatementInvalidSaveRestoreDefaults :
 #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
@@ -3569,6 +3570,7 @@ castTerm [UINT32 & RootLevel, UINT32 & ExpOpCount]:
 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
@@ -3599,6 +3601,20 @@ vfrExpressionMatch [UINT32 & RootLevel, UINT32 & ExpOpCount]:
   "\)"                                                 << { 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