]> 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 253834508ac42a49c61dfcedb548120735d6e010..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
@@ -184,6 +185,7 @@ VfrParserStart (
 #token Goto("goto")                             "goto"\r
 #token FormSetGuid("formsetguid")               "formsetguid"\r
 #token InconsistentIf("inconsistentif")         "inconsistentif"\r
+#token WarningIf("warningif")                   "warningif"\r
 #token NoSubmitIf("nosubmitif")                 "nosubmitif"\r
 #token EndIf("endif")                           "endif"\r
 #token Key("key")                               "key"\r
@@ -1017,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
@@ -1627,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
@@ -2627,7 +2652,8 @@ vfrStatementQuestionTag :
   vfrStatementRefresh           |\r
   vfrStatementVarstoreDevice    |\r
   vfrStatementExtension         |\r
-  vfrStatementRefreshEvent\r
+  vfrStatementRefreshEvent      |\r
+  vfrStatementWarningIf\r
   ;\r
 \r
 vfrStatementQuestionTagList :\r
@@ -2825,6 +2851,15 @@ vfrStatementNoSubmitIf :
   E:EndIf                                              << CRT_END_OP (E); >>\r
   ;\r
 \r
+vfrStatementWarningIf :\r
+  << CIfrWarningIf WIObj; >>\r
+  L:WarningIf                                          << WIObj.SetLineNo(L->getLine()); >>\r
+  Prompt "=" "STRING_TOKEN" "\(" S:Number "\)" ","     << WIObj.SetWarning (_STOSID(S->getText())); >>\r
+  {Timeout "=" T:Number ","                            << WIObj.SetTimeOut (_STOU8(T->getText())); >>}\r
+  vfrStatementExpression[0]\r
+  E:EndIf                                              << CRT_END_OP (E); >>\r
+  ;\r
+\r
 vfrStatementDisableIfQuest :\r
   << \r
     CIfrDisableIf DIObj; \r