]> git.proxmox.com Git - mirror_edk2.git/blobdiff - BaseTools/Source/C/VfrCompile/VfrSyntax.g
Sync BaseTool trunk (version r2610) into EDKII BaseTools.
[mirror_edk2.git] / BaseTools / Source / C / VfrCompile / VfrSyntax.g
index 61b68f5fb7aeea3625bfb74be091c0b39b412ddc..6f15aaa452a38a4350a146c5231f336933338022 100644 (file)
@@ -136,6 +136,7 @@ VfrParserStart (
 #token MapTitle("maptitle")                     "maptitle"\r
 #token MapGuid("mapguid")                       "mapguid"\r
 #token Subtitle("subtitle")                     "subtitle"\r
+#token EndSubtitle("endsubtitle")               "endsubtitle"\r
 #token Help("help")                             "help"\r
 #token Text("text")                             "text"\r
 #token Option("option")                         "option"\r
@@ -1018,12 +1019,29 @@ vfrStatementVarStoreNameValue :
   <<\r
      EFI_GUID              Guid;\r
      CIfrVarStoreNameValue VSNVObj;\r
-     EFI_VARSTORE_ID       VarStoreId;\r
+     EFI_VARSTORE_ID       VarStoreId = EFI_VARSTORE_ID_INVALID;\r
+     BOOLEAN               Created    = FALSE;\r
   >>\r
   L:NameValueVarStore                               << VSNVObj.SetLineNo(L->getLine()); >>\r
-  SN:StringIdentifier ","                           << _PCATCH(mCVfrDataStorage.DeclareNameVarStoreBegin (SN->getText()), SN); >>\r
+  SN:StringIdentifier ","\r
+  {\r
+    VarId "=" ID:Number ","                         <<\r
+                                                       _PCATCH(\r
+                                                         (INTN)(VarStoreId = _STOU16(ID->getText())) != 0,\r
+                                                         (INTN)TRUE,\r
+                                                         ID,\r
+                                                         "varid 0 is not allowed."\r
+                                                         );\r
+                                                    >>\r
+  }\r
   (\r
-    Name "=" "STRING_TOKEN" "\(" N:Number "\)" ","  << _PCATCH(mCVfrDataStorage.NameTableAddItem (_STOSID(N->getText())), SN); >>\r
+    Name "=" "STRING_TOKEN" "\(" N:Number "\)" ","  << \r
+                                                       if (!Created) {\r
+                                                         _PCATCH(mCVfrDataStorage.DeclareNameVarStoreBegin (SN->getText(), VarStoreId), SN);\r
+                                                         Created = TRUE;\r
+                                                       }\r
+                                                       _PCATCH(mCVfrDataStorage.NameTableAddItem (_STOSID(N->getText())), SN); \r
+                                                    >>\r
   )+\r
   Uuid "=" guidDefinition[Guid]                     << _PCATCH(mCVfrDataStorage.DeclareNameVarStoreEnd (&Guid), SN); >>\r
                                                     <<\r
@@ -1628,8 +1646,14 @@ vfrStatementSubTitle :
   {\r
     "," FLAGS "=" vfrSubtitleFlags[SObj]\r
   }\r
-  { vfrStatementStatTagList "," }\r
-  E:";"                                                << CRT_END_OP (E); >>\r
+  (\r
+    {vfrStatementStatTagList "," }\r
+    E:";"                                               << CRT_END_OP (E); >>\r
+  |\r
+    { "," vfrStatementStatTagList}\r
+    { "," (vfrStatementStat | vfrStatementQuestions)*}\r
+    E: EndSubtitle ";"                                  << CRT_END_OP (E); >>\r
+  )\r
   ;\r
 \r
 vfrSubtitleFlags [CIfrSubtitle & SObj] :\r