#token Inventory("inventory") "inventory"\r
#token NonNvDataMap("_NON_NV_DATA_MAP") "_NON_NV_DATA_MAP"\r
#token Struct("struct") "struct"\r
+#token Union("union") "union"\r
#token Boolean("BOOLEAN") "BOOLEAN"\r
#token Uint64("UINT64") "UINT64"\r
#token Uint32("UINT32") "UINT32"\r
(\r
vfrPragmaPackDefinition\r
| vfrDataStructDefinition\r
+ | vfrDataUnionDefinition\r
)*\r
vfrFormSetDefinition\r
<< $Return = mParserStatus; >>\r
"\)"\r
;\r
\r
+ vfrDataUnionDefinition :\r
+ { TypeDef } Union << gCVfrVarDataTypeDB.DeclareDataTypeBegin (); >>\r
+ { NonNvDataMap }\r
+ {\r
+ N1:StringIdentifier << _PCATCH(gCVfrVarDataTypeDB.SetNewTypeName (N1->getText()), N1); >>\r
+ }\r
+ OpenBrace\r
+ vfrDataStructFields[TRUE]\r
+ CloseBrace\r
+ {\r
+ N2:StringIdentifier << _PCATCH(gCVfrVarDataTypeDB.SetNewTypeName (N2->getText()), N2); >>\r
+ }\r
+ ";" << gCVfrVarDataTypeDB.DeclareDataTypeEnd ();>>\r
+ ;\r
+\r
vfrDataStructDefinition :\r
{ TypeDef } Struct << gCVfrVarDataTypeDB.DeclareDataTypeBegin (); >>\r
{ NonNvDataMap }\r
N1:StringIdentifier << _PCATCH(gCVfrVarDataTypeDB.SetNewTypeName (N1->getText()), N1); >>\r
}\r
OpenBrace\r
- vfrDataStructFields\r
+ vfrDataStructFields[FALSE]\r
CloseBrace\r
{\r
N2:StringIdentifier << _PCATCH(gCVfrVarDataTypeDB.SetNewTypeName (N2->getText()), N2); >>\r
";" << gCVfrVarDataTypeDB.DeclareDataTypeEnd (); >>\r
;\r
\r
-vfrDataStructFields :\r
+vfrDataStructFields [BOOLEAN FieldInUnion]:\r
(\r
- dataStructField64 |\r
- dataStructField32 |\r
- dataStructField16 |\r
- dataStructField8 |\r
- dataStructFieldBool |\r
- dataStructFieldString |\r
- dataStructFieldDate |\r
- dataStructFieldTime |\r
- dataStructFieldRef |\r
- dataStructFieldUser\r
+ dataStructField64 [FieldInUnion] |\r
+ dataStructField32 [FieldInUnion] |\r
+ dataStructField16 [FieldInUnion] |\r
+ dataStructField8 [FieldInUnion] |\r
+ dataStructFieldBool [FieldInUnion] |\r
+ dataStructFieldString [FieldInUnion]|\r
+ dataStructFieldDate [FieldInUnion] |\r
+ dataStructFieldTime [FieldInUnion] |\r
+ dataStructFieldRef [FieldInUnion] |\r
+ dataStructFieldUser [FieldInUnion]\r
)*\r
;\r
\r
-dataStructField64 :\r
+dataStructField64 [BOOLEAN FieldInUnion]:\r
<< UINT32 ArrayNum = 0; >>\r
D:"UINT64"\r
N:StringIdentifier\r
{\r
OpenBracket I:Number CloseBracket << ArrayNum = _STOU32(I->getText(), I->getLine()); >>\r
}\r
- ";" << _PCATCH(gCVfrVarDataTypeDB.DataTypeAddField (N->getText(), D->getText(), ArrayNum), N); >>\r
+ ";" << _PCATCH(gCVfrVarDataTypeDB.DataTypeAddField (N->getText(), D->getText(), ArrayNum, FieldInUnion), N); >>\r
;\r
\r
-dataStructField32 :\r
+dataStructField32 [BOOLEAN FieldInUnion]:\r
<< UINT32 ArrayNum = 0; >>\r
D:"UINT32"\r
N:StringIdentifier\r
{\r
OpenBracket I:Number CloseBracket << ArrayNum = _STOU32(I->getText(), I->getLine()); >>\r
}\r
- ";" << _PCATCH(gCVfrVarDataTypeDB.DataTypeAddField (N->getText(), D->getText(), ArrayNum), N); >>\r
+ ";" << _PCATCH(gCVfrVarDataTypeDB.DataTypeAddField (N->getText(), D->getText(), ArrayNum, FieldInUnion), N); >>\r
;\r
\r
-dataStructField16 :\r
+dataStructField16 [BOOLEAN FieldInUnion]:\r
<< \r
UINT32 ArrayNum = 0; \r
>>\r
{\r
OpenBracket I:Number CloseBracket << ArrayNum = _STOU32(I->getText(), I->getLine()); >>\r
}\r
- ";" << _PCATCH(gCVfrVarDataTypeDB.DataTypeAddField (N->getText(), (CHAR8 *) "UINT16", ArrayNum), N); >>\r
+ ";" << _PCATCH(gCVfrVarDataTypeDB.DataTypeAddField (N->getText(), (CHAR8 *) "UINT16", ArrayNum, FieldInUnion), N); >>\r
;\r
\r
-dataStructField8 :\r
+dataStructField8 [BOOLEAN FieldInUnion]:\r
<< UINT32 ArrayNum = 0; >>\r
D:"UINT8"\r
N:StringIdentifier\r
{\r
OpenBracket I:Number CloseBracket << ArrayNum = _STOU32(I->getText(), I->getLine()); >>\r
}\r
- ";" << _PCATCH(gCVfrVarDataTypeDB.DataTypeAddField (N->getText(), D->getText(), ArrayNum), N); >>\r
+ ";" << _PCATCH(gCVfrVarDataTypeDB.DataTypeAddField (N->getText(), D->getText(), ArrayNum, FieldInUnion), N); >>\r
;\r
\r
-dataStructFieldBool :\r
+dataStructFieldBool [BOOLEAN FieldInUnion]:\r
<< UINT32 ArrayNum = 0; >>\r
D:"BOOLEAN"\r
N:StringIdentifier\r
{\r
OpenBracket I:Number CloseBracket << ArrayNum = _STOU32(I->getText(), I->getLine()); >>\r
}\r
- ";" << _PCATCH(gCVfrVarDataTypeDB.DataTypeAddField (N->getText(), D->getText(), ArrayNum), N); >>\r
+ ";" << _PCATCH(gCVfrVarDataTypeDB.DataTypeAddField (N->getText(), D->getText(), ArrayNum, FieldInUnion), N); >>\r
;\r
\r
-dataStructFieldString :\r
+dataStructFieldString [BOOLEAN FieldInUnion]:\r
<< UINT32 ArrayNum = 0; >>\r
D:"EFI_STRING_ID"\r
N:StringIdentifier\r
{\r
OpenBracket I:Number CloseBracket << ArrayNum = _STOU32(I->getText(), I->getLine()); >>\r
}\r
- ";" << _PCATCH(gCVfrVarDataTypeDB.DataTypeAddField (N->getText(), D->getText(), ArrayNum), N); >>\r
+ ";" << _PCATCH(gCVfrVarDataTypeDB.DataTypeAddField (N->getText(), D->getText(), ArrayNum, FieldInUnion), N); >>\r
;\r
\r
-dataStructFieldDate :\r
+dataStructFieldDate [BOOLEAN FieldInUnion]:\r
<< UINT32 ArrayNum = 0; >>\r
D:"EFI_HII_DATE"\r
N:StringIdentifier\r
{\r
OpenBracket I:Number CloseBracket << ArrayNum = _STOU32(I->getText(), I->getLine()); >>\r
}\r
- ";" << _PCATCH(gCVfrVarDataTypeDB.DataTypeAddField (N->getText(), D->getText(), ArrayNum), N); >>\r
+ ";" << _PCATCH(gCVfrVarDataTypeDB.DataTypeAddField (N->getText(), D->getText(), ArrayNum, FieldInUnion), N); >>\r
;\r
\r
-dataStructFieldTime :\r
+dataStructFieldTime [BOOLEAN FieldInUnion]:\r
<< UINT32 ArrayNum = 0; >>\r
D:"EFI_HII_TIME"\r
N:StringIdentifier\r
{\r
OpenBracket I:Number CloseBracket << ArrayNum = _STOU32(I->getText(), I->getLine()); >>\r
}\r
- ";" << _PCATCH(gCVfrVarDataTypeDB.DataTypeAddField (N->getText(), D->getText(), ArrayNum), N); >>\r
+ ";" << _PCATCH(gCVfrVarDataTypeDB.DataTypeAddField (N->getText(), D->getText(), ArrayNum, FieldInUnion), N); >>\r
;\r
\r
-dataStructFieldRef :\r
+dataStructFieldRef [BOOLEAN FieldInUnion]:\r
<< UINT32 ArrayNum = 0; >>\r
D:"EFI_HII_REF"\r
N:StringIdentifier\r
{\r
OpenBracket I:Number CloseBracket << ArrayNum = _STOU32(I->getText(), I->getLine()); >>\r
}\r
- ";" << _PCATCH(gCVfrVarDataTypeDB.DataTypeAddField (N->getText(), D->getText(), ArrayNum), N); >>\r
+ ";" << _PCATCH(gCVfrVarDataTypeDB.DataTypeAddField (N->getText(), D->getText(), ArrayNum, FieldInUnion), N); >>\r
;\r
\r
-dataStructFieldUser :\r
+dataStructFieldUser [BOOLEAN FieldInUnion]:\r
<< UINT32 ArrayNum = 0; >>\r
T:StringIdentifier\r
N:StringIdentifier\r
{\r
OpenBracket I:Number CloseBracket << ArrayNum = _STOU32(I->getText(), I->getLine()); >>\r
}\r
- ";" << _PCATCH(gCVfrVarDataTypeDB.DataTypeAddField (N->getText(), T->getText(), ArrayNum), T); >>\r
+ ";" << _PCATCH(gCVfrVarDataTypeDB.DataTypeAddField (N->getText(), T->getText(), ArrayNum, FieldInUnion), T); >>\r
;\r
\r
//*****************************************************************************\r