* [edk2-devel] [PATCH] [edk2-staging]BaseTools: Python VfrCompiler Tool Update
@ 2023-12-08 7:44 Yuwei Chen
0 siblings, 0 replies; 2+ messages in thread
From: Yuwei Chen @ 2023-12-08 7:44 UTC (permalink / raw)
To: devel; +Cc: Yang, Rebecca Cran, Liming Gao, Bob Feng
[-- Warning: decoded text below may be mangled, UTF-8 assumed --]
[-- Attachment #1: Type: text/plain; charset=y, Size: 366 bytes --]
-=-=-=-=-=-=-=-=-=-=-=-
Groups.io Links: You receive all messages sent to this group.
View/Reply Online (#112216): https://edk2.groups.io/g/devel/message/112216
Mute This Topic: https://groups.io/mt/103051162/7686176
Group Owner: devel+owner@edk2.groups.io
Unsubscribe: https://edk2.groups.io/g/devel/unsub [rebecca@openfw.io]
-=-=-=-=-=-=-=-=-=-=-=-
^ permalink raw reply [flat|nested] 2+ messages in thread
* [edk2-devel] [PATCH] [edk2-staging]BaseTools: Python VfrCompiler Tool Update
@ 2023-12-11 0:35 Yuwei Chen
0 siblings, 0 replies; 2+ messages in thread
From: Yuwei Chen @ 2023-12-11 0:35 UTC (permalink / raw)
To: devel; +Cc: Yang, Rebecca Cran, Liming Gao, Bob Feng
From: Yang <yuting2.yang@intel.com>
This python VfrCompiler tool is the python implementation of the
edk2 VfrCompiler tool which C implementation locates at
https://github.com/tianocore/edk2/tree/master/BaseTools/Source/C/VfrCompile.
This python implementation not only covers the same usage as the C
version VfrCompiler, but also extends several new features.
REF: https://bugzilla.tianocore.org/show_bug.cgi?id=4596
Cc: Rebecca Cran <rebecca@bsdio.com>
Cc: Liming Gao <gaoliming@byosoft.com.cn>
Cc: Bob Feng <bob.c.feng@intel.com>
Signed-off-by: Yuting Yang <yuting2.yang@intel.com>
Signed-off-by: Yuwei Chen <yuwei.chen@intel.com>
---
.../Source/Python/VfrCompiler/CommonCtypes.py | 1394 ---
.../Source/Python/VfrCompiler/IfrCommon.py | 100 +
.../Source/Python/VfrCompiler/IfrCompiler.py | 586 ++
.../Source/Python/VfrCompiler/IfrCtypes.py | 1811 ++++
.../Source/Python/VfrCompiler/IfrError.py | 153 +
.../Source/Python/VfrCompiler/IfrFormPkg.py | 2937 ++++++
.../Python/VfrCompiler/IfrPreProcess.py | 245 +
.../Source/Python/VfrCompiler/IfrTree.py | 1132 +++
.../Source/Python/VfrCompiler/IfrUtility.py | 2226 +++++
BaseTools/Source/Python/VfrCompiler/README.md | 68 +-
.../Source/Python/VfrCompiler/VfrError.py | 162 -
.../Source/Python/VfrCompiler/VfrFormPkg.py | 2738 ------
.../Source/Python/VfrCompiler/VfrSyntax.g4 | 472 +-
.../Python/VfrCompiler/VfrSyntaxLexer.py | 17 +-
.../Python/VfrCompiler/VfrSyntaxParser.py | 8145 +++++++++--------
.../Python/VfrCompiler/VfrSyntaxVisitor.py | 5816 ++++++------
.../Source/Python/VfrCompiler/VfrTree.py | 88 -
.../Source/Python/VfrCompiler/VfrUtility.py | 1991 ----
.../Source/Python/VfrCompiler/__init__.py | 1 +
BaseTools/Source/Python/VfrCompiler/main.py | 27 -
20 files changed, 16697 insertions(+), 13412 deletions(-)
delete mode 100644 BaseTools/Source/Python/VfrCompiler/CommonCtypes.py
create mode 100644 BaseTools/Source/Python/VfrCompiler/IfrCommon.py
create mode 100644 BaseTools/Source/Python/VfrCompiler/IfrCompiler.py
create mode 100644 BaseTools/Source/Python/VfrCompiler/IfrCtypes.py
create mode 100644 BaseTools/Source/Python/VfrCompiler/IfrError.py
create mode 100644 BaseTools/Source/Python/VfrCompiler/IfrFormPkg.py
create mode 100644 BaseTools/Source/Python/VfrCompiler/IfrPreProcess.py
create mode 100644 BaseTools/Source/Python/VfrCompiler/IfrTree.py
create mode 100644 BaseTools/Source/Python/VfrCompiler/IfrUtility.py
delete mode 100644 BaseTools/Source/Python/VfrCompiler/VfrError.py
delete mode 100644 BaseTools/Source/Python/VfrCompiler/VfrFormPkg.py
delete mode 100644 BaseTools/Source/Python/VfrCompiler/VfrTree.py
delete mode 100644 BaseTools/Source/Python/VfrCompiler/VfrUtility.py
create mode 100644 BaseTools/Source/Python/VfrCompiler/__init__.py
delete mode 100644 BaseTools/Source/Python/VfrCompiler/main.py
diff --git a/BaseTools/Source/Python/VfrCompiler/CommonCtypes.py b/BaseTools/Source/Python/VfrCompiler/CommonCtypes.py
deleted file mode 100644
index b62145d980..0000000000
--- a/BaseTools/Source/Python/VfrCompiler/CommonCtypes.py
+++ /dev/null
@@ -1,1394 +0,0 @@
-from ctypes import *
-from re import A, X
-from telnetlib import X3PAD
-from tkinter import YView
-import uuid
-from VfrCompiler.VfrError import *
-from struct import *
-
-EFI_STRING_ID_INVALID = 0x0
-EFI_HII_DEFAULT_CLASS_STANDARD = 0x0000
-EFI_HII_DEFAULT_CLASS_MANUFACTURING = 0x0001
-EFI_IFR_MAX_LENGTH = 0xFF
-EFI_VARSTORE_ID_INVALID = 0
-EFI_VARSTORE_ID_START = 0x20
-EFI_VAROFFSET_INVALID = 0xFFFF
-EFI_IMAGE_ID_INVALID = 0xFFFF
-
-EFI_NON_DEVICE_CLASS = 0x00
-EFI_DISK_DEVICE_CLASS = 0x01
-EFI_VIDEO_DEVICE_CLASS = 0x02
-EFI_NETWORK_DEVICE_CLASS = 0x04
-EFI_INPUT_DEVICE_CLASS = 0x08
-EFI_ON_BOARD_DEVICE_CLASS = 0x10
-EFI_OTHER_DEVICE_CLASS = 0x20
-
-EFI_SETUP_APPLICATION_SUBCLASS = 0x00
-EFI_GENERAL_APPLICATION_SUBCLASS = 0x01
-EFI_FRONT_PAGE_SUBCLASS = 0x02
-EFI_SINGLE_USE_SUBCLASS = 0x03
-
-# EFI_HII_PACKAGE_TYPE_x.
-
-EFI_HII_PACKAGE_TYPE_ALL = 0x00
-EFI_HII_PACKAGE_TYPE_GUID = 0x01
-EFI_HII_PACKAGE_FORM = 0x02
-EFI_HII_PACKAGE_KEYBOARD_LAYOUT = 0x03
-EFI_HII_PACKAGE_STRINGS = 0x04
-EFI_HII_PACKAGE_FONTS = 0x05
-EFI_HII_PACKAGE_IMAGES = 0x06
-EFI_HII_PACKAGE_SIMPLE_FONTS = 0x07
-EFI_HII_PACKAGE_DEVICE_PATH = 0x08
-EFI_HII_PACKAGE_END = 0xDF
-EFI_HII_PACKAGE_TYPE_SYSTEM_BEGIN = 0xE0
-EFI_HII_PACKAGE_TYPE_SYSTEM_END = 0xFF
-
-EFI_IFR_EXTEND_OP_LABEL = 0x0
-EFI_IFR_EXTEND_OP_BANNER = 0x1
-EFI_IFR_EXTEND_OP_TIMEOUT = 0x2
-EFI_IFR_EXTEND_OP_CLASS = 0x3
-EFI_IFR_EXTEND_OP_SUBCLASS = 0x4
-
-MAX_IFR_EXPRESSION_DEPTH = 0x9
-
-INVALID_ARRAY_INDEX = 0xFFFFFFFF
-
-EFI_IFR_TYPE_NUM_SIZE_8 = 0x00
-EFI_IFR_TYPE_NUM_SIZE_16 = 0x01
-EFI_IFR_TYPE_NUM_SIZE_32 = 0x02
-EFI_IFR_TYPE_NUM_SIZE_64 = 0x03
-EFI_IFR_TYPE_BOOLEAN = 0x04
-EFI_IFR_TYPE_TIME = 0x05
-EFI_IFR_TYPE_DATE = 0x06
-EFI_IFR_TYPE_STRING = 0x07
-EFI_IFR_TYPE_OTHER = 0x08
-EFI_IFR_TYPE_UNDEFINED = 0x09
-EFI_IFR_TYPE_ACTION = 0x0A
-EFI_IFR_TYPE_BUFFER = 0x0B
-EFI_IFR_TYPE_REF = 0x0C
-
-
-EFI_IFR_FLAGS_HORIZONTAL = 0x01
-
-EFI_IFR_FLAG_READ_ONLY = 0x01
-EFI_IFR_FLAG_CALLBACK = 0x04
-EFI_IFR_FLAG_RESET_REQUIRED = 0x10
-EFI_IFR_FLAG_REST_STYLE = 0x20
-EFI_IFR_FLAG_RECONNECT_REQUIRED = 0x40
-EFI_IFR_FLAG_OPTIONS_ONLY = 0x80
-
-EFI_IFR_STRING_MULTI_LINE = 0x01
-
-EDKII_IFR_DISPLAY_BIT = 0xC0
-EDKII_IFR_DISPLAY_INT_DEC_BIT = 0x00
-EDKII_IFR_DISPLAY_UINT_DEC_BIT = 0x40
-EDKII_IFR_DISPLAY_UINT_HEX_BIT = 0x80
-
-EDKII_IFR_NUMERIC_SIZE_BIT = 0x3F
-
-EFI_IFR_MAX_DEFAULT_TYPE = 0x10
-
-
-class EFI_GUID(Structure):
- _pack_ = 1
- _fields_ = [
- ('Data1', c_uint32),
- ('Data2', c_uint16),
- ('Data3', c_uint16),
- ('Data4', c_ubyte * 8),
- ]
-
- def from_list(self, listformat: list) -> None:
- self.Data1 = listformat[0]
- self.Data2 = listformat[1]
- self.Data3 = listformat[2]
- for i in range(8):
- self.Data4[i] = listformat[i + 3]
-
- def __cmp__(self, otherguid) -> bool:
- if not isinstance(otherguid, EFI_GUID):
- return 'Input is not the GUID instance!'
- rt = False
- if self.Data1 == otherguid.Data1 and self.Data2 == otherguid.Data2 and self.Data3 == otherguid.Data3:
- rt = True
- for i in range(8):
- rt = rt & (self.Data4[i] == otherguid.Data4[i])
- return rt
-
-
-GuidArray = c_ubyte * 8
-EFI_HII_PLATFORM_SETUP_FORMSET_GUID = EFI_GUID(
- 0x93039971, 0x8545, 0x4b04,
- GuidArray(0xb4, 0x5e, 0x32, 0xeb, 0x83, 0x26, 0x4, 0xe))
-
-EFI_IFR_TIANO_GUID = EFI_GUID(
- 0xf0b1735, 0x87a0, 0x4193,
- GuidArray(0xb2, 0x66, 0x53, 0x8c, 0x38, 0xaf, 0x48, 0xce))
-
-EDKII_IFR_BIT_VARSTORE_GUID = (0x82DDD68B, 0x9163, 0x4187,
- GuidArray(0x9B, 0x27, 0x20, 0xA8, 0xFD, 0x60,
- 0xA7, 0x1D))
-
-EFI_IFR_FRAMEWORK_GUID = (0x31ca5d1a, 0xd511, 0x4931,
- GuidArray(0xb7, 0x82, 0xae, 0x6b, 0x2b, 0x17, 0x8c,
- 0xd7))
-
-class EFI_IFR_OP_HEADER(Structure):
- _pack_ = 1
- _fields_ = [
- ('OpCode', c_ubyte),
- ('Length', c_ubyte, 7), #
- ('Scope', c_ubyte, 1), #
- ]
-
-
-class EFI_IFR_FORM_SET(Structure):
- _pack_ = 1
- _fields_ = [
- ('Header', EFI_IFR_OP_HEADER),
- ('Guid', EFI_GUID),
- ('FormSetTitle', c_uint16),
- ('Help', c_uint16),
- ('Flags', c_ubyte),
- ]
-
-
-class EFI_IFR_GUID_CLASS(Structure):
- _pack_ = 1
- _fields_ = [
- ('Header', EFI_IFR_OP_HEADER),
- ('Guid', EFI_GUID),
- ('ExtendOpCode', c_ubyte),
- ('Class', c_uint16),
- ]
-
-
-class EFI_IFR_GUID_SUBCLASS(Structure):
- _pack_ = 1
- _fields_ = [
- ('Header', EFI_IFR_OP_HEADER),
- ('Guid', EFI_GUID),
- ('ExtendOpCode', c_ubyte),
- ('SubClass', c_uint16),
- ]
-
-
-class EFI_IFR_DEFAULTSTORE(Structure):
- _pack_ = 1
- _fields_ = [
- ('Header', EFI_IFR_OP_HEADER),
- ('DefaultName', c_uint16),
- ('DefaultId', c_uint16),
- ]
-
-
-class EFI_IFR_VARSTORE(Structure):
- _pack_ = 1
- _fields_ = [
- ('Header', EFI_IFR_OP_HEADER),
- ('Guid', EFI_GUID),
- ('VarStoreId', c_uint16),
- ('Size', c_uint16),
- ('Name', c_wchar_p),
- ]
-
-
-class EFI_IFR_VARSTORE_EFI(Structure):
- _pack_ = 1
- _fields_ = [
- ('Header', EFI_IFR_OP_HEADER),
- ('Guid', EFI_GUID),
- ('VarStoreId', c_uint16),
- ('Attributes', c_uint32),
- ('Size', c_uint16),
- ('Name', c_wchar_p),
- ]
-
-
-class EFI_IFR_GUID(Structure):
- _pack_ = 1
- _fields_ = [
- ('Header', EFI_IFR_OP_HEADER),
- ('Guid', EFI_GUID),
- ]
-
-
-class EFI_HII_PACKAGE_HEADER(Structure):
- _pack_ = 1
- _fields_ = [
- ('Length', c_uint32, 24),
- ('Type', c_uint32, 8),
- ]
-
-
-class EFI_HII_STRING_PACKAGE_HDR(Structure):
- _pack_ = 1
- _fields_ = [
- ('Header', EFI_HII_PACKAGE_HEADER),
- ('HdrSize', c_uint32),
- ('StringInfoOffset', c_uint32),
- ('LanguageWindow', c_ushort * 16),
- ('LanguageName', c_uint16),
- ('Language', c_char * 2),
- ]
-
-
-class EFI_IFR_VARSTORE_NAME_VALUE(Structure):
- _pack_ = 1
- _fields_ = [
- ('Header', EFI_IFR_OP_HEADER),
- ('VarStoreId', c_uint16),
- ('Guid', EFI_GUID),
- ]
-
-
-class EFI_IFR_FORM(Structure):
- _pack_ = 1
- _fields_ = [
- ('Header', EFI_IFR_OP_HEADER),
- ('FormId', c_uint16),
- ('FormTitle', c_uint16),
- ]
-
-
-class EFI_IFR_GUID_BANNER(Structure):
- _pack_ = 1
- _fields_ = [
- ('Header', EFI_IFR_OP_HEADER),
- ('Guid', EFI_GUID),
- ('ExtendOpCode', c_ubyte),
- ('Title', c_uint16),
- ('LineNumber', c_uint16),
- ('Alignment', c_ubyte),
- ]
-
-
-class EFI_IFR_GUID_TIMEOUT(Structure):
- _pack_ = 1
- _fields_ = [
- ('Header', EFI_IFR_OP_HEADER),
- ('Guid', EFI_GUID),
- ('ExtendOpCode', c_ubyte),
- ('TimeOut', c_uint16),
- ]
-
-
-class EFI_IFR_GUID_LABEL(Structure):
- _pack_ = 1
- _fields_ = [
- ('Header', EFI_IFR_OP_HEADER),
- ('Guid', EFI_GUID),
- ('ExtendOpCode', c_ubyte),
- ('Number', c_uint16),
- ]
-
-
-class EFI_IFR_RULE(Structure):
- _pack_ = 1
- _fields_ = [
- ('Header', EFI_IFR_OP_HEADER),
- ('RuleId', c_ubyte),
- ]
-
-
-class EFI_IFR_STATEMENT_HEADER(Structure):
- _pack_ = 1
- _fields_ = [
- ('Prompt', c_uint16),
- ('Help', c_uint16),
- ]
-
-
-class EFI_IFR_SUBTITLE(Structure):
- _pack_ = 1
- _fields_ = [
- ('Header', EFI_IFR_OP_HEADER),
- ('Statement', EFI_IFR_STATEMENT_HEADER),
- ('Flags', c_ubyte),
- ]
-
-
-class EFI_IFR_TEXT(Structure):
- _pack_ = 1
- _fields_ = [
- ('Header', EFI_IFR_OP_HEADER),
- ('Statement', EFI_IFR_STATEMENT_HEADER),
- ('TextTwo', c_uint16),
- ]
-
-
-class EFI_IFR_IMAGE(Structure):
- _pack_ = 1
- _fields_ = [
- ('Header', EFI_IFR_OP_HEADER),
- ('Id', c_uint16),
- ]
-
-
-class VarStoreInfoNode(Union):
- _pack_ = 1
- _fields_ = [
- ('VarName', c_uint16),
- ('VarOffset', c_uint16),
- ]
-
-
-class EFI_IFR_QUESTION_HEADER(Structure):
- _pack_ = 1
- _fields_ = [
- ('Header', EFI_IFR_STATEMENT_HEADER),
- ('QuestionId', c_uint16),
- ('VarStoreId', c_uint16),
- ('VarStoreInfo', VarStoreInfoNode),
- ('Flags', c_ubyte),
- ]
-
-
-class u8Node(Structure):
- _pack_ = 1
- _fields_ = [
- ('MinValue', c_ubyte),
- ('MaxValue', c_ubyte),
- ('Step', c_ubyte),
- ]
-
-
-class u16Node(Structure):
- _pack_ = 1
- _fields_ = [
- ('MinValue', c_uint16),
- ('MaxValue', c_uint16),
- ('Step', c_uint16),
- ]
-
-
-class u32Node(Structure):
- _pack_ = 1
- _fields_ = [
- ('MinValue', c_uint32),
- ('MaxValue', c_uint32),
- ('Step', c_uint32),
- ]
-
-
-class u64Node(Structure):
- _pack_ = 1
- _fields_ = [
- ('MinValue', c_uint64),
- ('MaxValue', c_uint64),
- ('Step', c_uint64),
- ]
-
-
-class MINMAXSTEP_DATA(Union):
- _pack_ = 1
- _fields_ = [
- ('u8', u8Node),
- ('u16', u16Node),
- ('u32', u32Node),
- ('u64', u64Node),
- ]
-
-
-EFI_IFR_NUMERIC_SIZE = 0x03
-EFI_IFR_NUMERIC_SIZE_1 = 0x00
-EFI_IFR_NUMERIC_SIZE_2 = 0x01
-EFI_IFR_NUMERIC_SIZE_4 = 0x02
-EFI_IFR_NUMERIC_SIZE_8 = 0x03
-
-EFI_IFR_DISPLAY = 0x30
-EFI_IFR_DISPLAY_INT_DEC = 0x00
-EFI_IFR_DISPLAY_UINT_DEC = 0x10
-EFI_IFR_DISPLAY_UINT_HEX = 0x20
-
-class EFI_IFR_ONE_OF(Structure):
- _pack_ = 1
- _fields_ = [
- ('Header', EFI_IFR_OP_HEADER),
- ('Question', EFI_IFR_QUESTION_HEADER),
- ('Flags', c_ubyte),
- ('data', MINMAXSTEP_DATA),
- ]
-
-
-EFI_IFR_CHECKBOX_DEFAULT = 0x01
-EFI_IFR_CHECKBOX_DEFAULT_MFG = 0x02
-
-
-class EFI_IFR_CHECKBOX(Structure):
- _pack_ = 1
- _fields_ = [
- ('Header', EFI_IFR_OP_HEADER),
- ('Question', EFI_IFR_QUESTION_HEADER),
- ('Flags', c_ubyte),
- ]
-
-
-class EFI_IFR_NUMERIC(Structure):
- _pack_ = 1
- _fields_ = [
- ('Header', EFI_IFR_OP_HEADER),
- ('Question', EFI_IFR_QUESTION_HEADER),
- ('Flags', c_ubyte),
- ('Data', MINMAXSTEP_DATA),
- ]
-
-
-class EFI_IFR_PASSWORD(Structure):
- _pack_ = 1
- _fields_ = [
- ('Header', EFI_IFR_OP_HEADER),
- ('Question', EFI_IFR_QUESTION_HEADER),
- ('MinSize', c_uint16),
- ('MaxSize', c_uint16),
- ]
-
-
-class EFI_HII_TIME(Structure):
- _pack_ = 1
- _fields_ = [
- ('Hour', c_ubyte),
- ('Minute', c_ubyte),
- ('Second', c_ubyte),
- ]
-
-
-class EFI_HII_DATE(Structure):
- _pack_ = 1
- _fields_ = [
- ('Year', c_uint16),
- ('Month', c_ubyte),
- ('Day', c_ubyte),
- ]
-
-
-class EFI_HII_REF(Structure):
- _pack_ = 1
- _fields_ = [
- ('QuestionId', c_uint16),
- ('FormId', c_uint16),
- ('FormSetGuid', EFI_GUID),
- ('DevicePath', c_uint16),
- ]
-
-
-class EFI_IFR_TYPE_VALUE(Union):
- _pack_ = 1
- _fields_ = [
- ('u8', c_ubyte),
- ('u16', c_uint16),
- ('u32', c_uint32),
- ('u64', c_uint64),
- ('b', c_bool),
- ('time', EFI_HII_TIME),
- ('date', EFI_HII_DATE),
- ('string', c_uint16),
- ('ref', EFI_HII_REF),
- ]
-
-
-class EFI_IFR_ONE_OF_OPTION(Structure):
- _pack_ = 1
- _fields_ = [
- ('Header', EFI_IFR_OP_HEADER),
- ('Option', c_uint16),
- ('Flags', c_ubyte),
- ('Type', c_ubyte),
- ('Value', EFI_IFR_TYPE_VALUE),
- ]
-
-def Refine_EFI_IFR_ONE_OF_OPTION(Nums):
- class EFI_IFR_ONE_OF_OPTION(Structure):
- _pack_ = 1
- _fields_ = [
- ('Header', EFI_IFR_OP_HEADER),
- ('Option', c_uint16),
- ('Flags', c_ubyte),
- ('Type', c_ubyte),
- ('Value', EFI_IFR_TYPE_VALUE * Nums),
- ]
- return EFI_IFR_ONE_OF_OPTION
-
-
-EFI_IFR_OPTION_DEFAULT = 0x10
-EFI_IFR_OPTION_DEFAULT_MFG = 0x20
-
-
-class EFI_IFR_SUPPRESS_IF(Structure):
- _pack_ = 1
- _fields_ = [
- ('Header', EFI_IFR_OP_HEADER),
- ]
-
-
-class EFI_IFR_LOCKED(Structure):
- _pack_ = 1
- _fields_ = [
- ('Header', EFI_IFR_OP_HEADER),
- ]
-
-
-class EFI_IFR_ACTION(Structure):
- _pack_ = 1
- _fields_ = [
- ('Header', EFI_IFR_OP_HEADER),
- ('Question', EFI_IFR_QUESTION_HEADER),
- ('QuestionConfig', c_uint16),
- ]
-
-
-class EFI_IFR_REF(Structure):
- _pack_ = 1
- _fields_ = [
- ('Header', EFI_IFR_OP_HEADER),
- ('Question', EFI_IFR_QUESTION_HEADER),
- ('FormId', c_uint16),
- ]
-
-
-class EFI_IFR_REF2(Structure):
- _pack_ = 1
- _fields_ = [
- ('Header', EFI_IFR_OP_HEADER),
- ('Question', EFI_IFR_QUESTION_HEADER),
- ('FormId', c_uint16),
- ('QuestionId', c_uint16),
- ]
-
-
-class EFI_IFR_REF3(Structure):
- _pack_ = 1
- _fields_ = [
- ('Header', EFI_IFR_OP_HEADER),
- ('Question', EFI_IFR_QUESTION_HEADER),
- ('FormId', c_uint16),
- ('QuestionId', c_uint16),
- ('FormSetId', EFI_GUID),
- ]
-
-
-class EFI_IFR_REF4(Structure):
- _pack_ = 1
- _fields_ = [
- ('Header', EFI_IFR_OP_HEADER),
- ('Question', EFI_IFR_QUESTION_HEADER),
- ('FormId', c_uint16),
- ('QuestionId', c_uint16),
- ('FormSetId', EFI_GUID),
- ('DevicePath', c_uint16),
- ]
-
-
-class EFI_IFR_REF5(Structure):
- _pack_ = 1
- _fields_ = [
- ('Header', EFI_IFR_OP_HEADER),
- ('Question', EFI_IFR_QUESTION_HEADER),
- ]
-
-
-class EFI_IFR_RESET_BUTTON(Structure):
- _pack_ = 1
- _fields_ = [
- ('Header', EFI_IFR_OP_HEADER),
- ('Statement', EFI_IFR_STATEMENT_HEADER),
- ('DefaultId', c_uint16),
- ]
-
-
-class EFI_IFR_NO_SUBMIT_IF(Structure):
- _pack_ = 1
- _fields_ = [
- ('Header', EFI_IFR_OP_HEADER),
- ('Error', c_uint16),
- ]
-
-
-class EFI_IFR_INCONSISTENT_IF(Structure):
- _pack_ = 1
- _fields_ = [
- ('Header', EFI_IFR_OP_HEADER),
- ('Error', c_uint16),
- ]
-
-
-class EFI_IFR_EQ_ID_VAL(Structure):
- _pack_ = 1
- _fields_ = [
- ('Header', EFI_IFR_OP_HEADER),
- ('QuestionId', c_uint16),
- ('Value', c_uint16),
- ]
-
-
-class EFI_IFR_EQ_ID_ID(Structure):
- _pack_ = 1
- _fields_ = [
- ('Header', EFI_IFR_OP_HEADER),
- ('QuestionId1', c_uint16),
- ('QuestionId2', c_uint16),
- ]
-
-class EFI_IFR_EQ_ID_VAL_LIST(Structure):
- _pack_ = 1
- _fields_ = [
- ('Header', EFI_IFR_OP_HEADER),
- ('QuestionId', c_uint16),
- ('ListLength', c_uint16),
- ('ValueList', c_uint16), #
- ]
-
-
-def Refine_EFI_IFR_EQ_ID_VAL_LIST(Nums):
- class EFI_IFR_EQ_ID_VAL_LIST(Structure):
- _pack_ = 1
- _fields_ = [
- ('Header', EFI_IFR_OP_HEADER),
- ('QuestionId', c_uint16),
- ('ListLength', c_uint16),
- ('ValueList', c_uint16 * Nums), #
- ]
- return EFI_IFR_EQ_ID_VAL_LIST
-
-
-class EFI_IFR_AND(Structure):
- _pack_ = 1
- _fields_ = [
- ('Header', EFI_IFR_OP_HEADER),
- ]
-
-
-class EFI_IFR_OR(Structure):
- _pack_ = 1
- _fields_ = [
- ('Header', EFI_IFR_OP_HEADER),
- ]
-
-
-class EFI_IFR_NOT(Structure):
- _pack_ = 1
- _fields_ = [
- ('Header', EFI_IFR_OP_HEADER),
- ]
-
-
-class EFI_IFR_GRAY_OUT_IF(Structure):
- _pack_ = 1
- _fields_ = [
- ('Header', EFI_IFR_OP_HEADER),
- ]
-
-
-class EFI_IFR_DATE(Structure):
- _pack_ = 1
- _fields_ = [
- ('Header', EFI_IFR_OP_HEADER),
- ('Question', EFI_IFR_QUESTION_HEADER),
- ('Flags', c_ubyte),
- ]
-
-
-EFI_QF_DATE_YEAR_SUPPRESS = 0x01
-EFI_QF_DATE_MONTH_SUPPRESS = 0x02
-EFI_QF_DATE_DAY_SUPPRESS = 0x04
-
-EFI_QF_DATE_STORAGE = 0x30
-QF_DATE_STORAGE_NORMAL = 0x00
-QF_DATE_STORAGE_TIME = 0x10
-QF_DATE_STORAGE_WAKEUP = 0x20
-
-
-class EFI_IFR_TIME(Structure):
- _pack_ = 1
- _fields_ = [
- ('Header', EFI_IFR_OP_HEADER),
- ('Question', EFI_IFR_QUESTION_HEADER),
- ('Flags', c_ubyte),
- ]
-
-
-QF_TIME_HOUR_SUPPRESS = 0x01
-QF_TIME_MINUTE_SUPPRESS = 0x02
-QF_TIME_SECOND_SUPPRESS = 0x04
-QF_TIME_STORAGE = 0x30
-QF_TIME_STORAGE_NORMAL = 0x00
-QF_TIME_STORAGE_TIME = 0x10
-QF_TIME_STORAGE_WAKEUP = 0x20
-
-
-class EFI_IFR_STRING(Structure):
- _pack_ = 1
- _fields_ = [
- ('Header', EFI_IFR_OP_HEADER),
- ('Question', EFI_IFR_QUESTION_HEADER),
- ('MinSize', c_ubyte),
- ('MaxSize', c_ubyte),
- ('Flags', c_ubyte),
- ]
-
-
-class EFI_IFR_REFRESH(Structure):
- _pack_ = 1
- _fields_ = [
- ('Header', EFI_IFR_OP_HEADER),
- ('RefreshInterval', c_ubyte),
- ]
-
-
-class EFI_IFR_DISABLE_IF(Structure):
- _pack_ = 1
- _fields_ = [
- ('Header', EFI_IFR_OP_HEADER),
- ]
-
-
-class EFI_IFR_TO_LOWER(Structure):
- _pack_ = 1
- _fields_ = [
- ('Header', EFI_IFR_OP_HEADER),
- ]
-
-
-class EFI_IFR_TO_UPPER(Structure):
- _pack_ = 1
- _fields_ = [
- ('Header', EFI_IFR_OP_HEADER),
- ]
-
-
-class EFI_IFR_MAP(Structure):
- _pack_ = 1
- _fields_ = [
- ('Header', EFI_IFR_OP_HEADER),
- ]
-
-
-class EFI_IFR_ORDERED_LIST(Structure):
- _pack_ = 1
- _fields_ = [
- ('Header', EFI_IFR_OP_HEADER),
- ('Question', EFI_IFR_QUESTION_HEADER),
- ('MaxContainers', c_ubyte),
- ('Flags', c_ubyte),
- ]
-
-
-EFI_IFR_UNIQUE_SET = 0x01
-EFI_IFR_NO_EMPTY_SET = 0x02
-
-
-class EFI_IFR_VARSTORE_DEVICE(Structure):
- _pack_ = 1
- _fields_ = [
- ('Header', EFI_IFR_OP_HEADER),
- ('DevicePath', c_uint16),
- ]
-
-
-class EFI_IFR_VERSION(Structure):
- _pack_ = 1
- _fields_ = [
- ('Header', EFI_IFR_OP_HEADER),
- ]
-
-
-class EFI_IFR_END(Structure):
- _pack_ = 1
- _fields_ = [
- ('Header', EFI_IFR_OP_HEADER),
- ]
-
-
-class EFI_IFR_MATCH(Structure):
- _pack_ = 1
- _fields_ = [
- ('Header', EFI_IFR_OP_HEADER),
- ]
-
-
-class EFI_IFR_GET(Structure):
- _pack_ = 1
- _fields_ = [
- ('Header', EFI_IFR_OP_HEADER),
- ('VarStoreId', c_uint16),
- ('VarStoreInfo', VarStoreInfoNode), ##########
- ('VarStoreType', c_ubyte),
- ]
-
-
-class EFI_IFR_SET(Structure):
- _pack_ = 1
- _fields_ = [
- ('Header', EFI_IFR_OP_HEADER),
- ('VarStoreId', c_uint16),
- ('VarStoreInfo', VarStoreInfoNode), ##########
- ('VarStoreType', c_ubyte),
- ]
-
-
-class EFI_IFR_READ(Structure):
- _pack_ = 1
- _fields_ = [
- ('Header', EFI_IFR_OP_HEADER),
- ]
-
-
-class EFI_IFR_WRITE(Structure):
- _pack_ = 1
- _fields_ = [
- ('Header', EFI_IFR_OP_HEADER),
- ]
-
-
-class EFI_IFR_EQUAL(Structure):
- _pack_ = 1
- _fields_ = [
- ('Header', EFI_IFR_OP_HEADER),
- ]
-
-
-class EFI_IFR_NOT_EQUAL(Structure):
- _pack_ = 1
- _fields_ = [
- ('Header', EFI_IFR_OP_HEADER),
- ]
-
-
-class EFI_IFR_GREATER_THAN(Structure):
- _pack_ = 1
- _fields_ = [
- ('Header', EFI_IFR_OP_HEADER),
- ]
-
-
-class EFI_IFR_GREATER_EQUAL(Structure):
- _pack_ = 1
- _fields_ = [
- ('Header', EFI_IFR_OP_HEADER),
- ]
-
-
-class EFI_IFR_LESS_EQUAL(Structure):
- _pack_ = 1
- _fields_ = [
- ('Header', EFI_IFR_OP_HEADER),
- ]
-
-
-class EFI_IFR_LESS_THAN(Structure):
- _pack_ = 1
- _fields_ = [
- ('Header', EFI_IFR_OP_HEADER),
- ]
-
-
-class EFI_IFR_BITWISE_AND(Structure):
- _pack_ = 1
- _fields_ = [
- ('Header', EFI_IFR_OP_HEADER),
- ]
-
-
-class EFI_IFR_BITWISE_OR(Structure):
- _pack_ = 1
- _fields_ = [
- ('Header', EFI_IFR_OP_HEADER),
- ]
-
-
-class EFI_IFR_BITWISE_NOT(Structure):
- _pack_ = 1
- _fields_ = [
- ('Header', EFI_IFR_OP_HEADER),
- ]
-
-
-class EFI_IFR_SHIFT_LEFT(Structure):
- _pack_ = 1
- _fields_ = [
- ('Header', EFI_IFR_OP_HEADER),
- ]
-
-
-class EFI_IFR_SHIFT_RIGHT(Structure):
- _pack_ = 1
- _fields_ = [
- ('Header', EFI_IFR_OP_HEADER),
- ]
-
-
-class EFI_IFR_ADD(Structure):
- _pack_ = 1
- _fields_ = [
- ('Header', EFI_IFR_OP_HEADER),
- ]
-
-
-class EFI_IFR_SUBTRACT(Structure):
- _pack_ = 1
- _fields_ = [
- ('Header', EFI_IFR_OP_HEADER),
- ]
-
-
-class EFI_IFR_MULTIPLY(Structure):
- _pack_ = 1
- _fields_ = [
- ('Header', EFI_IFR_OP_HEADER),
- ]
-
-
-class EFI_IFR_DIVIDE(Structure):
- _pack_ = 1
- _fields_ = [
- ('Header', EFI_IFR_OP_HEADER),
- ]
-
-
-class EFI_IFR_MODULO(Structure):
- _pack_ = 1
- _fields_ = [
- ('Header', EFI_IFR_OP_HEADER),
- ]
-
-
-class EFI_IFR_RULE_REF(Structure):
- _pack_ = 1
- _fields_ = [
- ('Header', EFI_IFR_OP_HEADER),
- ('RuleId', c_ubyte),
- ]
-
-
-class EFI_IFR_QUESTION_REF1(Structure):
- _pack_ = 1
- _fields_ = [
- ('Header', EFI_IFR_OP_HEADER),
- ('QuestionId', c_uint16),
- ]
-
-
-class EFI_IFR_QUESTION_REF2(Structure):
- _pack_ = 1
- _fields_ = [
- ('Header', EFI_IFR_OP_HEADER),
- ]
-
-
-class EFI_IFR_QUESTION_REF3(Structure):
- _pack_ = 1
- _fields_ = [
- ('Header', EFI_IFR_OP_HEADER),
- ]
-
-
-class EFI_IFR_QUESTION_REF3_2(Structure):
- _pack_ = 1
- _fields_ = [
- ('Header', EFI_IFR_OP_HEADER),
- ('DevicePath', c_uint16),
- ]
-
-
-class EFI_IFR_QUESTION_REF3_3(Structure):
- _pack_ = 1
- _fields_ = [
- ('Header', EFI_IFR_OP_HEADER),
- ('DevicePath', c_uint16),
- ('Guid', EFI_GUID),
- ]
-
-
-class EFI_IFR_UINT8(Structure):
- _pack_ = 1
- _fields_ = [
- ('Header', EFI_IFR_OP_HEADER),
- ('Value', c_ubyte),
- ]
-
-
-class EFI_IFR_UINT16(Structure):
- _pack_ = 1
- _fields_ = [
- ('Header', EFI_IFR_OP_HEADER),
- ('Value', c_uint16),
- ]
-
-
-class EFI_IFR_UINT32(Structure):
- _pack_ = 1
- _fields_ = [
- ('Header', EFI_IFR_OP_HEADER),
- ('Value', c_uint32),
- ]
-
-
-class EFI_IFR_UINT64(Structure):
- _pack_ = 1
- _fields_ = [
- ('Header', EFI_IFR_OP_HEADER),
- ('Value', c_uint64),
- ]
-
-
-class EFI_IFR_TRUE(Structure):
- _pack_ = 1
- _fields_ = [
- ('Header', EFI_IFR_OP_HEADER),
- ]
-
-
-class EFI_IFR_FALSE(Structure):
- _pack_ = 1
- _fields_ = [
- ('Header', EFI_IFR_OP_HEADER),
- ]
-
-
-class EFI_IFR_TO_UINT(Structure):
- _pack_ = 1
- _fields_ = [
- ('Header', EFI_IFR_OP_HEADER),
- ]
-
-
-class EFI_IFR_TO_STRING(Structure):
- _pack_ = 1
- _fields_ = [
- ('Header', EFI_IFR_OP_HEADER),
- ('Format', c_ubyte),
- ]
-
-
-class EFI_IFR_TO_BOOLEAN(Structure):
- _pack_ = 1
- _fields_ = [
- ('Header', EFI_IFR_OP_HEADER),
- ]
-
-
-class EFI_IFR_MID(Structure):
- _pack_ = 1
- _fields_ = [
- ('Header', EFI_IFR_OP_HEADER),
- ]
-
-
-class EFI_IFR_FIND(Structure):
- _pack_ = 1
- _fields_ = [
- ('Header', EFI_IFR_OP_HEADER),
- ('Format', c_ubyte),
- ]
-
-
-class EFI_IFR_TOKEN(Structure):
- _pack_ = 1
- _fields_ = [
- ('Header', EFI_IFR_OP_HEADER),
- ]
-
-
-class EFI_IFR_STRING_REF1(Structure):
- _pack_ = 1
- _fields_ = [
- ('Header', EFI_IFR_OP_HEADER),
- ('StringId', c_uint16),
- ]
-
-
-class EFI_IFR_STRING_REF2(Structure):
- _pack_ = 1
- _fields_ = [
- ('Header', EFI_IFR_OP_HEADER),
- ]
-
-
-class EFI_IFR_CONDITIONAL(Structure):
- _pack_ = 1
- _fields_ = [
- ('Header', EFI_IFR_OP_HEADER),
- ]
-
-
-class EFI_IFR_ZERO(Structure):
- _pack_ = 1
- _fields_ = [
- ('Header', EFI_IFR_OP_HEADER),
- ]
-
-
-class EFI_IFR_ONE(Structure):
- _pack_ = 1
- _fields_ = [
- ('Header', EFI_IFR_OP_HEADER),
- ]
-
-
-class EFI_IFR_ONES(Structure):
- _pack_ = 1
- _fields_ = [
- ('Header', EFI_IFR_OP_HEADER),
- ]
-
-
-class EFI_IFR_UNDEFINED(Structure):
- _pack_ = 1
- _fields_ = [
- ('Header', EFI_IFR_OP_HEADER),
- ]
-
-
-class EFI_IFR_LENGTH(Structure):
- _pack_ = 1
- _fields_ = [
- ('Header', EFI_IFR_OP_HEADER),
- ]
-
-
-class EFI_IFR_DUP(Structure):
- _pack_ = 1
- _fields_ = [
- ('Header', EFI_IFR_OP_HEADER),
- ]
-
-
-class EFI_IFR_THIS(Structure):
- _pack_ = 1
- _fields_ = [
- ('Header', EFI_IFR_OP_HEADER),
- ]
-
-
-EFI_IFR_FLAGS_FIRST_MATCHING = 0x00
-EFI_IFR_FLAGS_FIRST_NON_MATCHING = 0x01
-
-class EFI_IFR_SPAN(Structure):
- _pack_ = 1
- _fields_ = [
- ('Header', EFI_IFR_OP_HEADER),
- ('Flags', c_ubyte),
- ]
-
-
-class EFI_IFR_VALUE(Structure):
- _pack_ = 1
- _fields_ = [
- ('Header', EFI_IFR_OP_HEADER),
- ]
-
-
-class EFI_IFR_DEFAULT(Structure):
- _pack_ = 1
- _fields_ = [
- ('Header', EFI_IFR_OP_HEADER),
- ('DefaultId', c_uint16),
- ('Type', c_ubyte),
- ('Value', EFI_IFR_TYPE_VALUE),
- ]
-
-def Refine_EFI_IFR_DEFAULT(Nums):
- class EFI_IFR_DEFAULT(Structure):
- _pack_ = 1
- _fields_ = [
- ('Header', EFI_IFR_OP_HEADER),
- ('DefaultId', c_uint16),
- ('Type', c_ubyte),
- ('Value', EFI_IFR_TYPE_VALUE * Nums),
- ]
- return EFI_IFR_DEFAULT
-
-
-class EFI_IFR_DEFAULT_2(Structure):
- _pack_ = 1
- _fields_ = [
- ('Header', EFI_IFR_OP_HEADER),
- ('DefaultId', c_uint16),
- ('Type', c_ubyte),
- ]
-
-class EFI_IFR_FORM_MAP(Structure):
- _pack_ = 1
- _fields_ = [
- ('Header', EFI_IFR_OP_HEADER),
- ('FormId', c_uint16),
- ]
-
-class EFI_IFR_FORM_MAP_METHOD(Structure):
- _pack_ = 1
- _fields_ = [
- ('MethodTitle', c_uint16),
- ('MethodIdentifier', EFI_GUID),
- ]
-
-class EFI_IFR_CATENATE(Structure):
- _pack_ = 1
- _fields_ = [
- ('Header', EFI_IFR_OP_HEADER),
- ]
-
-
-class EFI_IFR_SECURITY(Structure):
- _pack_ = 1
- _fields_ = [
- ('Header', EFI_IFR_OP_HEADER),
- ('Permissions', EFI_GUID),
- ]
-
-
-class EFI_IFR_MODAL_TAG(Structure):
- _pack_ = 1
- _fields_ = [
- ('Header', EFI_IFR_OP_HEADER),
- ]
-
-
-class EFI_IFR_REFRESH_ID(Structure):
- _pack_ = 1
- _fields_ = [
- ('Header', EFI_IFR_OP_HEADER),
- ('RefreshEventGroupId', EFI_GUID),
- ]
-
-
-class EFI_IFR_WARNING_IF(Structure):
- _pack_ = 1
- _fields_ = [
- ('Header', EFI_IFR_OP_HEADER),
- ('Warning', c_uint16),
- ('TimeOut', c_ubyte),
- ]
-
-
-class EFI_IFR_MATCH2(Structure):
- _pack_ = 1
- _fields_ = [
- ('Header', EFI_IFR_OP_HEADER),
- ('SyntaxType', EFI_GUID),
- ]
-
-
-EFI_IFR_FORM_OP = 0x01
-EFI_IFR_SUBTITLE_OP = 0x02
-EFI_IFR_TEXT_OP = 0x03
-EFI_IFR_IMAGE_OP = 0x04
-EFI_IFR_ONE_OF_OP = 0x05
-EFI_IFR_CHECKBOX_OP = 0x06
-EFI_IFR_NUMERIC_OP = 0x07
-EFI_IFR_PASSWORD_OP = 0x08
-EFI_IFR_ONE_OF_OPTION_OP = 0x09
-EFI_IFR_SUPPRESS_IF_OP = 0x0A
-EFI_IFR_LOCKED_OP = 0x0B
-EFI_IFR_ACTION_OP = 0x0C
-EFI_IFR_RESET_BUTTON_OP = 0x0D
-EFI_IFR_FORM_SET_OP = 0x0E
-EFI_IFR_REF_OP = 0x0F
-EFI_IFR_NO_SUBMIT_IF_OP = 0x10
-EFI_IFR_INCONSISTENT_IF_OP = 0x11
-EFI_IFR_EQ_ID_VAL_OP = 0x12
-EFI_IFR_EQ_ID_ID_OP = 0x13
-EFI_IFR_EQ_ID_VAL_LIST_OP = 0x14
-EFI_IFR_AND_OP = 0x15
-EFI_IFR_OR_OP = 0x16
-EFI_IFR_NOT_OP = 0x17
-EFI_IFR_RULE_OP = 0x18
-EFI_IFR_GRAY_OUT_IF_OP = 0x19
-EFI_IFR_DATE_OP = 0x1A
-EFI_IFR_TIME_OP = 0x1B
-EFI_IFR_STRING_OP = 0x1C
-EFI_IFR_REFRESH_OP = 0x1D
-EFI_IFR_DISABLE_IF_OP = 0x1E
-EFI_IFR_TO_LOWER_OP = 0x20
-EFI_IFR_TO_UPPER_OP = 0x21
-EFI_IFR_MAP_OP = 0x22
-EFI_IFR_ORDERED_LIST_OP = 0x23
-EFI_IFR_VARSTORE_OP = 0x24
-EFI_IFR_VARSTORE_NAME_VALUE_OP = 0x25
-EFI_IFR_VARSTORE_EFI_OP = 0x26
-EFI_IFR_VARSTORE_DEVICE_OP = 0x27
-EFI_IFR_VERSION_OP = 0x28
-EFI_IFR_END_OP = 0x29
-EFI_IFR_MATCH_OP = 0x2A
-EFI_IFR_GET_OP = 0x2B
-EFI_IFR_SET_OP = 0x2C
-EFI_IFR_READ_OP = 0x2D
-EFI_IFR_WRITE_OP = 0x2E
-EFI_IFR_EQUAL_OP = 0x2F
-EFI_IFR_NOT_EQUAL_OP = 0x30
-EFI_IFR_GREATER_THAN_OP = 0x31
-EFI_IFR_GREATER_EQUAL_OP = 0x32
-EFI_IFR_LESS_THAN_OP = 0x33
-EFI_IFR_LESS_EQUAL_OP = 0x34
-EFI_IFR_BITWISE_AND_OP = 0x35
-EFI_IFR_BITWISE_OR_OP = 0x36
-EFI_IFR_BITWISE_NOT_OP = 0x37
-EFI_IFR_SHIFT_LEFT_OP = 0x38
-EFI_IFR_SHIFT_RIGHT_OP = 0x39
-EFI_IFR_ADD_OP = 0x3A
-EFI_IFR_SUBTRACT_OP = 0x3B
-EFI_IFR_MULTIPLY_OP = 0x3C
-EFI_IFR_DIVIDE_OP = 0x3D
-EFI_IFR_MODULO_OP = 0x3E
-EFI_IFR_RULE_REF_OP = 0x3F
-EFI_IFR_QUESTION_REF1_OP = 0x40
-EFI_IFR_QUESTION_REF2_OP = 0x41
-EFI_IFR_UINT8_OP = 0x42
-EFI_IFR_UINT16_OP = 0x43
-EFI_IFR_UINT32_OP = 0x44
-EFI_IFR_UINT64_OP = 0x45
-EFI_IFR_TRUE_OP = 0x46
-EFI_IFR_FALSE_OP = 0x47
-EFI_IFR_TO_UINT_OP = 0x48
-EFI_IFR_TO_STRING_OP = 0x49
-EFI_IFR_TO_BOOLEAN_OP = 0x4A
-EFI_IFR_MID_OP = 0x4B
-EFI_IFR_FIND_OP = 0x4C
-EFI_IFR_TOKEN_OP = 0x4D
-EFI_IFR_STRING_REF1_OP = 0x4E
-EFI_IFR_STRING_REF2_OP = 0x4F
-EFI_IFR_CONDITIONAL_OP = 0x50
-EFI_IFR_QUESTION_REF3_OP = 0x51
-EFI_IFR_ZERO_OP = 0x52
-EFI_IFR_ONE_OP = 0x53
-EFI_IFR_ONES_OP = 0x54
-EFI_IFR_UNDEFINED_OP = 0x55
-EFI_IFR_LENGTH_OP = 0x56
-EFI_IFR_DUP_OP = 0x57
-EFI_IFR_THIS_OP = 0x58
-EFI_IFR_SPAN_OP = 0x59
-EFI_IFR_VALUE_OP = 0x5A
-EFI_IFR_DEFAULT_OP = 0x5B
-EFI_IFR_DEFAULTSTORE_OP = 0x5C
-EFI_IFR_FORM_MAP_OP = 0x5D
-EFI_IFR_CATENATE_OP = 0x5E
-EFI_IFR_GUID_OP = 0x5F
-EFI_IFR_SECURITY_OP = 0x60
-EFI_IFR_MODAL_TAG_OP = 0x61
-EFI_IFR_REFRESH_ID_OP = 0x62
-EFI_IFR_WARNING_IF_OP = 0x63
-EFI_IFR_MATCH2_OP = 0x64
-
-ConditionOps = [EFI_IFR_NO_SUBMIT_IF_OP, EFI_IFR_DISABLE_IF_OP, EFI_IFR_SUPPRESS_IF_OP, EFI_IFR_GRAY_OUT_IF_OP, EFI_IFR_INCONSISTENT_IF_OP]
-BasicDataTypes = ['UINT8', 'UINT16', 'UINT32', 'UINT64', 'EFI_HII_DATE', 'EFI_HII_TIME', 'EFI_HII_REF']
-
-class EFI_IFR_GUID_OPTIONKEY(Structure):
- _pack_ = 1
- _fields_ = [
- ('Header', EFI_IFR_OP_HEADER),
- ('Guid', EFI_GUID),
- ('ExtendOpCode', c_uint8),
- ('QuestionId', c_uint16),
- ('OptionValue', EFI_IFR_TYPE_VALUE),
- ('KeyValue', c_uint16),
- ]
-
-
-EFI_IFR_EXTEND_OP_OPTIONKEY = 0x0
-EFI_IFR_EXTEND_OP_VAREQNAME = 0x1
-
-class EFI_COMPARE_TYPE(Enum):
- EQUAL = 0
- LESS_EQUAL = 1
- LESS_THAN = 2
- GREATER_THAN = 3
- GREATER_EQUAL = 4
\ No newline at end of file
diff --git a/BaseTools/Source/Python/VfrCompiler/IfrCommon.py b/BaseTools/Source/Python/VfrCompiler/IfrCommon.py
new file mode 100644
index 0000000000..7425abe9a9
--- /dev/null
+++ b/BaseTools/Source/Python/VfrCompiler/IfrCommon.py
@@ -0,0 +1,100 @@
+## @file
+# This file is used to define common funtions.
+#
+# Copyright (c) 2022-, Intel Corporation. All rights reserved.<BR>
+# SPDX-License-Identifier: BSD-2-Clause-Patent
+##
+
+import Common.EdkLogger as EdkLogger
+from VfrCompiler.IfrCtypes import EFI_GUID
+from Common.BuildToolError import PARAMETER_INVALID
+
+# Enumeration of EFI_STATUS.
+RETURN_SUCCESS = EFI_SUCCESS = 0
+EFI_BUFFER_TOO_SMALL = 0x8000000000000000 | (5)
+EFI_ABORTED = 0x8000000000000000 | (21)
+EFI_OUT_OF_RESOURCES = 0x8000000000000000 | (9)
+EFI_INVALID_PARAMETER = 0x8000000000000000 | (2)
+EFI_NOT_FOUND = 0x8000000000000000 | (14)
+RETURN_INVALID_PARAMETER = 0x8000000000000000 | (2)
+RETURN_UNSUPPORTED = 0x8000000000000000 | (3)
+
+ASCII_GUID_BUFFER_INDEX_1 = 8
+ASCII_GUID_BUFFER_INDEX_2 = 13
+ASCII_GUID_BUFFER_INDEX_3 = 18
+ASCII_GUID_BUFFER_INDEX_4 = 23
+ASCII_GUID_BUFFER_MAX_INDEX = 36
+GUID_BUFFER_VALUE_LEN = 11
+
+
+def EFI_ERROR(A):
+ return A < 0
+
+
+# Converts a string to an EFI_GUID.
+def StringToGuid(AsciiGuidBuffer: str, GuidBuffer: EFI_GUID):
+ Data4 = [0] * 8
+ if AsciiGuidBuffer is None or GuidBuffer is None:
+ return EFI_INVALID_PARAMETER
+ Index = 0
+ while Index < ASCII_GUID_BUFFER_MAX_INDEX:
+ if (
+ Index == ASCII_GUID_BUFFER_INDEX_1
+ or Index == ASCII_GUID_BUFFER_INDEX_2
+ or Index == ASCII_GUID_BUFFER_INDEX_3
+ or Index == ASCII_GUID_BUFFER_INDEX_4
+ ):
+ if AsciiGuidBuffer[Index] != "-":
+ break
+ elif (
+ (AsciiGuidBuffer[Index] >= "0" and AsciiGuidBuffer[Index] <= "9")
+ or (AsciiGuidBuffer[Index] >= "a" and AsciiGuidBuffer[Index] <= "f")
+ or (AsciiGuidBuffer[Index] >= "A" and AsciiGuidBuffer[Index] <= "F")
+ ):
+ Index += 1
+ continue
+ else:
+ break
+ Index += 1
+ continue
+
+ if Index < ASCII_GUID_BUFFER_MAX_INDEX:
+ EdkLogger.error("VfrCompiler", PARAMETER_INVALID, "Invalid option value")
+ return EFI_ABORTED
+ Index = GUID_BUFFER_VALUE_LEN
+ try:
+ Data1 = int(AsciiGuidBuffer[0:8], 16)
+ Data2 = int(AsciiGuidBuffer[9:13], 16)
+ Data3 = int(AsciiGuidBuffer[14:18], 16)
+ Data4[0] = int(AsciiGuidBuffer[19:21], 16)
+ Data4[1] = int(AsciiGuidBuffer[21:23], 16)
+ Data4[2] = int(AsciiGuidBuffer[24:26], 16)
+ Data4[3] = int(AsciiGuidBuffer[26:28], 16)
+ Data4[4] = int(AsciiGuidBuffer[28:30], 16)
+ Data4[5] = int(AsciiGuidBuffer[30:32], 16)
+ Data4[6] = int(AsciiGuidBuffer[32:34], 16)
+ Data4[7] = int(AsciiGuidBuffer[34:36], 16)
+ except Exception:
+ EdkLogger.error("VfrCompiler", PARAMETER_INVALID, "Invalid Data value!")
+ Index = 0
+
+ # Verify the correct number of items were scanned.
+ if Index != GUID_BUFFER_VALUE_LEN:
+ EdkLogger.error("VfrCompiler", PARAMETER_INVALID, "Invalid option value")
+ return EFI_ABORTED
+
+ # Copy the data into our GUID.
+ GuidBuffer.Data1 = Data1
+ GuidBuffer.Data2 = Data2
+ GuidBuffer.Data3 = Data3
+ GuidBuffer.Data4[0] = Data4[0]
+ GuidBuffer.Data4[1] = Data4[1]
+ GuidBuffer.Data4[2] = Data4[2]
+ GuidBuffer.Data4[3] = Data4[3]
+ GuidBuffer.Data4[4] = Data4[4]
+ GuidBuffer.Data4[5] = Data4[5]
+ GuidBuffer.Data4[6] = Data4[6]
+ GuidBuffer.Data4[7] = Data4[7]
+ Status = EFI_SUCCESS
+
+ return Status, GuidBuffer
diff --git a/BaseTools/Source/Python/VfrCompiler/IfrCompiler.py b/BaseTools/Source/Python/VfrCompiler/IfrCompiler.py
new file mode 100644
index 0000000000..15bf3d59ba
--- /dev/null
+++ b/BaseTools/Source/Python/VfrCompiler/IfrCompiler.py
@@ -0,0 +1,586 @@
+## @file
+# Extented Python VfrCompiler Tool.
+#
+# Copyright (c) 2022-, Intel Corporation. All rights reserved.<BR>
+# SPDX-License-Identifier: BSD-2-Clause-Patent
+##
+
+import os
+import sys
+import argparse
+import Common.EdkLogger as EdkLogger
+from pathlib import Path
+from antlr4 import *
+from enum import Enum
+from Common.BuildToolError import *
+from VfrCompiler.VfrSyntaxParser import VfrSyntaxParser
+from VfrCompiler.VfrSyntaxVisitor import VfrSyntaxVisitor
+from VfrCompiler.VfrSyntaxLexer import VfrSyntaxLexer
+from VfrCompiler.IfrCommon import EFI_SUCCESS, EFI_ERROR, StringToGuid
+from VfrCompiler.IfrTree import IfrTreeNode, IfrTree, VFR_COMPILER_VERSION, BUILD_VERSION
+from VfrCompiler.IfrPreProcess import Options, PreProcessDB
+from VfrCompiler.IfrUtility import gVfrStringDB
+from VfrCompiler.IfrFormPkg import (
+ gFormPkg,
+ gVfrVarDataTypeDB,
+ gVfrDefaultStore,
+ gVfrDataStorage,
+ gIfrFormId,
+)
+from VfrCompiler.IfrError import gVfrErrorHandle
+
+
+class COMPILER_RUN_STATUS(Enum):
+ STATUS_STARTED = 0
+ STATUS_INITIALIZED = 1
+ STATUS_VFR_PREPROCESSED = 2
+ STATUS_VFR_COMPILEED = 3
+ STATUS_VFR_GENBINARY = 4
+ STATUS_YAML_GENERATED = 5
+ STATUS_YAML_PREPROCESSED = 6
+ STATUS_YAML_COMPILED = 7
+ STATUS_YAML_DLT_CONSUMED = 8
+ STATUS_YAML_GENBINARY = 9
+ STATUS_FINISHED = 10
+ STATUS_FAILED = 11
+ STATUS_DEAD = 12
+
+
+"""
+ This is how we invoke the C preprocessor on the VFR source file
+ to resolve #defines, #includes, etc. To make C source files
+ shareable between VFR and drivers, define VFRCOMPILE so that
+ #ifdefs can be used in shared .h files.
+"""
+PREPROCESSOR_COMMAND = "cl "
+PREPROCESSOR_OPTIONS = "/nologo /E /TC /DVFRCOMPILE "
+
+# Specify the filename extensions for the files we generate.
+VFR__FILENAME_EXTENSION = ".vfr"
+VFR_PREPROCESS_FILENAME_EXTENSION = ".i"
+VFR_PACKAGE_FILENAME_EXTENSION = ".hpk"
+VFR_RECORDLIST_FILENAME_EXTENSION = ".lst"
+VFR_YAML_FILENAME_EXTENSION = ".yml"
+VFR_JSON_FILENAME_EXTENSION = ".json"
+
+WARNING_LOG_LEVEL = 15
+UTILITY_NAME = "VfrCompiler"
+
+parser = argparse.ArgumentParser(
+ description="VfrCompiler",
+ epilog=f"VfrCompile version {VFR_COMPILER_VERSION} \
+ Build {BUILD_VERSION} Copyright (c) 2004-2016 Intel Corporation.\
+ All rights reserved.",
+)
+parser.add_argument("InputFileName", help="Input source file name")
+parser.add_argument(
+ "--vfr", dest="LanuchVfrCompiler", action="store_true", help="lanuch VfrCompiler"
+)
+parser.add_argument(
+ "--version",
+ action="version",
+ version=f"VfrCompile version {VFR_COMPILER_VERSION} Build {BUILD_VERSION}",
+ help="prints version info",
+)
+parser.add_argument("-l", dest="CreateRecordListFile", help="create an output IFR listing file")
+parser.add_argument("-c", dest="CreateYamlFile", help="create Yaml file")
+parser.add_argument("-j", dest="CreateJsonFile", help="create Json file")
+parser.add_argument("-w", dest="Workspace", help="workspace")
+parser.add_argument(
+ "-o",
+ "--output-directory",
+ "-od",
+ dest="OutputDirectory",
+ help="deposit all output files to directory OutputDir, \
+ default is current directory",
+)
+parser.add_argument(
+ "-oo",
+ "--old-output-directory",
+ "-ood",
+ dest="OldOutputDirectory",
+ help="Former directory OutputDir of output files, \
+ default is current directory",
+)
+parser.add_argument(
+ "-b",
+ "--create-ifr-package",
+ "-ibin",
+ dest="CreateIfrPkgFile",
+ help="create an IFR HII pack file",
+)
+parser.add_argument(
+ "-n",
+ "--no-pre-processing",
+ "-nopp",
+ dest="SkipCPreprocessor",
+ help="do not preprocessing input file",
+)
+parser.add_argument(
+ "-f",
+ "--pre-processing-flag",
+ "-ppflag",
+ dest="CPreprocessorOptions",
+ help="C-preprocessor argument",
+) #
+parser.add_argument(
+ "-s", "--string-db", dest="StringFileName", help="input uni string package file"
+)
+parser.add_argument(
+ "-g",
+ "--guid",
+ dest="OverrideClassGuid",
+ help="override class guid input,\
+ format is xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx",
+)
+parser.add_argument(
+ "-wae", "--warning-as-error", dest="WarningAsError", help="treat warning as an error"
+)
+parser.add_argument(
+ "-a",
+ "--autodefault",
+ dest="AutoDefault",
+ help="generate default value for question opcode if some default is missing",
+)
+parser.add_argument(
+ "-d",
+ "--checkdefault",
+ dest="CheckDefault",
+ help="check the default information in a question opcode",
+)
+parser.add_argument("-m", "--modulename", dest="ModuleName", help="Module name")
+
+
+class CmdParser:
+ def __init__(self, Args, Argc):
+ self.Options = Options()
+ self.RunStatus = COMPILER_RUN_STATUS.STATUS_STARTED
+ self.PreProcessCmd = PREPROCESSOR_COMMAND
+ self.PreProcessOpt = PREPROCESSOR_OPTIONS
+ self.OptionIntialization(Args, Argc)
+
+ def OptionIntialization(self, Args, Argc):
+ Status = EFI_SUCCESS
+
+ if Argc == 1:
+ parser.print_help()
+ self.SET_RUN_STATUS(COMPILER_RUN_STATUS.STATUS_DEAD)
+ return
+
+ if Args.LanuchVfrCompiler:
+ self.Options.LanuchVfrCompiler = True
+
+ if Args.CreateRecordListFile:
+ self.Options.CreateRecordListFile = True
+
+ if Args.ModuleName:
+ self.Options.ModuleName = Args.ModuleName
+
+ if Args.OutputDirectory:
+ self.Options.OutputDirectory = Args.OutputDirectory
+ if self.Options.OutputDirectory is None:
+ EdkLogger.error("VfrCompiler", OPTION_MISSING, "-o missing output directory name")
+ self.SET_RUN_STATUS(COMPILER_RUN_STATUS.STATUS_DEAD)
+ return
+ self.Options.DebugDirectory = str(Path(self.Options.OutputDirectory).parent / "DEBUG")
+ EdkLogger.debug(EdkLogger.DEBUG_8, f"Output Directory {self.Options.OutputDirectory}")
+
+ if Args.Workspace:
+ self.Options.Workspace = Args.Workspace
+ IsInCludePathLine = False
+ HasVFRPPLine = False
+ self.Options.IncludePaths = []
+ MakeFile = Path(self.Options.OutputDirectory).parent / "Makefile"
+ if MakeFile.exists():
+ with MakeFile.open(mode="r") as File:
+ for Line in File:
+ if Line.find("INC = \\") != -1:
+ IsInCludePathLine = True
+ continue
+ if Line.find("VFRPP = ") != -1:
+ HasVFRPPLine = True
+ self.Options.VFRPP = Line.split("=")[1].strip()
+ continue
+ if IsInCludePathLine:
+ Line = Line.lstrip().rstrip(" \\\n\r")
+ if Line.startswith("/IC"):
+ InCludePath = Line.replace("/IC", "C", 1)
+ self.Options.IncludePaths.append(InCludePath)
+ elif Line.startswith("/Ic"):
+ InCludePath = Line.replace("/Ic", "C", 1)
+ self.Options.IncludePaths.append(InCludePath)
+ elif Line.startswith("/I$(WORKSPACE)"):
+ InCludePath = Line.replace(
+ "/I$(WORKSPACE)", self.Options.Workspace, 1
+ )
+ self.Options.IncludePaths.append(InCludePath)
+ elif Line.startswith("/I$(DEBUG_DIR)"):
+ InCludePath = self.Options.DebugDirectory
+ self.Options.IncludePaths.append(InCludePath)
+ elif HasVFRPPLine is False:
+ IsInCludePathLine = False
+ else:
+ break
+
+ if Args.OldOutputDirectory:
+ self.Options.OldOutputDirectory = Args.OldOutputDirectory
+ if self.Options.OldOutputDirectory is None:
+ EdkLogger.error("VfrCompiler", OPTION_MISSING, "-oo missing output directory name")
+ self.SET_RUN_STATUS(COMPILER_RUN_STATUS.STATUS_DEAD)
+ return
+ EdkLogger.debug(
+ EdkLogger.DEBUG_8, f"Old Output Directory {self.Options.OldOutputDirectory}"
+ )
+
+ if Args.CreateIfrPkgFile:
+ self.Options.CreateIfrPkgFile = True
+
+ if Args.CreateYamlFile:
+ self.Options.CreateYamlFile = True
+
+ if Args.CreateJsonFile:
+ self.Options.CreateJsonFile = True
+
+ if Args.SkipCPreprocessor:
+ self.Options.SkipCPreprocessor = True
+
+ if Args.CPreprocessorOptions:
+ Options = Args.CPreprocessorOptions
+ if Options is None:
+ EdkLogger.error(
+ "VfrCompiler",
+ OPTION_MISSING,
+ "-od - missing C-preprocessor argument",
+ )
+ self.SET_RUN_STATUS(COMPILER_RUN_STATUS.STATUS_DEAD)
+ return
+ self.Options.CPreprocessorOptions += " " + Options
+
+ if Args.StringFileName:
+ StringFileName = Args.StringFileName
+ if StringFileName is None:
+ EdkLogger.error("VfrCompiler", OPTION_MISSING, "-s missing input string file name")
+ self.SET_RUN_STATUS(COMPILER_RUN_STATUS.STATUS_DEAD)
+ return
+ gVfrStringDB.SetStringFileName(StringFileName)
+ EdkLogger.debug(EdkLogger.DEBUG_8, f"Input string file path {StringFileName}")
+
+ if Args.OverrideClassGuid:
+ res = StringToGuid(Args.OverrideClassGuid, self.Options.OverrideClassGuid)
+ if type(res) == "int":
+ Status = res
+ else:
+ Status = res[0]
+ self.Options.OverrideClassGuid = res[1]
+
+ if EFI_ERROR(Status):
+ EdkLogger.error(
+ "VfrCompiler",
+ FORMAT_INVALID,
+ f"Invalid format: {Args.OverrideClassGuid}",
+ )
+ self.SET_RUN_STATUS(COMPILER_RUN_STATUS.STATUS_DEAD)
+ return
+
+ self.Options.HasOverrideClassGuid = True
+
+ if Args.WarningAsError:
+ self.Options.WarningAsError = True
+
+ if Args.AutoDefault:
+ self.Options.AutoDefault = True
+
+ if Args.CheckDefault:
+ self.Options.CheckDefault = True
+
+ if Args.InputFileName:
+ self.Options.InputFileName = Args.InputFileName
+ if self.Options.InputFileName is None:
+ EdkLogger.error("VfrCompiler", OPTION_MISSING, "Input file name is not specified.")
+ self.SET_RUN_STATUS(COMPILER_RUN_STATUS.STATUS_DEAD)
+ return
+
+ if self.Options.OutputDirectory is None:
+ self.Options.OutputDirectory = ""
+
+ if self.SetBaseFileName() != 0:
+ self.SET_RUN_STATUS(COMPILER_RUN_STATUS.STATUS_DEAD)
+ return
+
+ if self.SetPkgOutputFileName() != 0:
+ self.SET_RUN_STATUS(COMPILER_RUN_STATUS.STATUS_DEAD)
+ return
+
+ if self.SetCOutputFileName() != 0:
+ self.SET_RUN_STATUS(COMPILER_RUN_STATUS.STATUS_DEAD)
+ return
+
+ if self.SetPreprocessorOutputFileName() != 0:
+ self.SET_RUN_STATUS(COMPILER_RUN_STATUS.STATUS_DEAD)
+ return
+
+ if self.SetRecordListFileName() != 0:
+ self.SET_RUN_STATUS(COMPILER_RUN_STATUS.STATUS_DEAD)
+ return
+
+ if self.SetSourceYamlFileName() != 0:
+ self.SET_RUN_STATUS(COMPILER_RUN_STATUS.STATUS_DEAD)
+ return
+
+ if self.SetJsonFileName() != 0:
+ self.SET_RUN_STATUS(COMPILER_RUN_STATUS.STATUS_DEAD)
+ return
+
+ def SetBaseFileName(self):
+ if self.Options.InputFileName is None:
+ return -1
+ pFileName = self.Options.InputFileName
+ while (pFileName.find("\\") != -1) or (pFileName.find("/") != -1):
+ if pFileName.find("\\") != -1:
+ i = pFileName.find("\\")
+ else:
+ i = pFileName.find("/")
+
+ if i == len(pFileName) - 1:
+ return -1
+
+ pFileName = pFileName[i + 1 :]
+
+ if pFileName == "" or pFileName.find(".") == -1:
+ return -1
+
+ self.Options.BaseFileName = pFileName[: pFileName.find(".")]
+ return 0
+
+ def SetPkgOutputFileName(self):
+ if self.Options.BaseFileName is None:
+ return -1
+ if self.Options.LanuchVfrCompiler:
+ self.Options.PkgOutputFileName = str(
+ Path(self.Options.OutputDirectory) / f"PyVfr_{self.Options.BaseFileName}.hpk"
+ )
+ return 0
+
+ def SetCOutputFileName(self):
+ if self.Options.BaseFileName is None:
+ return -1
+ if self.Options.LanuchVfrCompiler:
+ self.Options.COutputFileName = str(
+ Path(self.Options.DebugDirectory) / f"PyVfr_{self.Options.BaseFileName}.c"
+ )
+ return 0
+
+ def SetPreprocessorOutputFileName(self):
+ if self.Options.BaseFileName is None:
+ return -1
+ self.Options.CProcessedVfrFileName = str(
+ Path(self.Options.OutputDirectory) / f"{self.Options.BaseFileName}.i"
+ )
+ return 0
+
+ def SetRecordListFileName(self):
+ if self.Options.BaseFileName is None:
+ return -1
+ if self.Options.LanuchVfrCompiler:
+ self.Options.RecordListFileName = str(
+ Path(self.Options.DebugDirectory) / f"PyVfr_{self.Options.BaseFileName}.lst"
+ )
+ return 0
+
+ def SetSourceYamlFileName(self):
+ if self.Options.BaseFileName is None:
+ return -1
+ self.Options.YamlFileName = str(
+ Path(self.Options.DebugDirectory) / f"{self.Options.BaseFileName}.yml"
+ )
+ self.Options.YamlOutputFileName = str(
+ Path(self.Options.DebugDirectory) / f"{self.Options.BaseFileName}Compiled.yml"
+ )
+ return 0
+
+ def SetJsonFileName(self):
+ if self.Options.BaseFileName is None:
+ return -1
+ self.Options.JsonFileName = str(
+ Path(self.Options.DebugDirectory) / f"{self.Options.BaseFileName}.json"
+ )
+ return 0
+
+ def FindIncludeHeaderFile(self, Start, Name):
+ FileList = []
+ for Relpath, _, Files in os.walk(Start):
+ if Name in Files:
+ FullPath = os.path.join(Start, Relpath, Name)
+ FileList.append(os.path.normpath(os.path.abspath(FullPath)))
+ return FileList
+
+ def SET_RUN_STATUS(self, Status):
+ self.RunStatus = Status
+
+ def IS_RUN_STATUS(self, Status):
+ return self.RunStatus == Status
+
+
+class VfrCompiler:
+ def __init__(self, Cmd: CmdParser):
+ self.Clear()
+ self.Options = Cmd.Options
+ self.RunStatus = Cmd.RunStatus
+ self.VfrRoot = IfrTreeNode()
+ self.PreProcessDB = PreProcessDB(self.Options)
+ self.VfrTree = IfrTree(self.VfrRoot, self.PreProcessDB, self.Options)
+ if (not self.IS_RUN_STATUS(COMPILER_RUN_STATUS.STATUS_FAILED)) and (
+ not self.IS_RUN_STATUS(COMPILER_RUN_STATUS.STATUS_DEAD)
+ ):
+ self.SET_RUN_STATUS(COMPILER_RUN_STATUS.STATUS_INITIALIZED)
+
+ def Clear(self):
+ gVfrVarDataTypeDB.Clear()
+ gVfrDefaultStore.Clear()
+ gVfrDataStorage.Clear()
+ gFormPkg.Clear()
+ gIfrFormId.Clear()
+
+ def PreProcess(self):
+ if not self.IS_RUN_STATUS(COMPILER_RUN_STATUS.STATUS_INITIALIZED):
+ if not self.IS_RUN_STATUS(COMPILER_RUN_STATUS.STATUS_DEAD):
+ self.SET_RUN_STATUS(COMPILER_RUN_STATUS.STATUS_FAILED)
+ elif self.Options.SkipCPreprocessor is False:
+ # call C preprocessor first in the tool itself, but currently not support here
+ self.SET_RUN_STATUS(COMPILER_RUN_STATUS.STATUS_FAILED)
+ else:
+ # makefile will call cl commands to generate .i file
+ # do not need to run C preprocessor in this tool itself
+ self.PreProcessDB.Preprocess()
+ self.SET_RUN_STATUS(COMPILER_RUN_STATUS.STATUS_VFR_PREPROCESSED)
+
+ def Compile(self):
+ InFileName = self.Options.CProcessedVfrFileName
+ if not self.IS_RUN_STATUS(COMPILER_RUN_STATUS.STATUS_VFR_PREPROCESSED):
+ EdkLogger.error(
+ "VfrCompiler",
+ FILE_PARSE_FAILURE,
+ "compile error in file %s" % InFileName,
+ InFileName,
+ )
+ self.SET_RUN_STATUS(COMPILER_RUN_STATUS.STATUS_FAILED)
+ else:
+ gVfrErrorHandle.SetInputFile(self.Options.InputFileName)
+ gVfrErrorHandle.SetWarningAsError(self.Options.WarningAsError)
+
+ try:
+ InputStream = FileStream(InFileName)
+ VfrLexer = VfrSyntaxLexer(InputStream)
+ VfrStream = CommonTokenStream(VfrLexer)
+ VfrParser = VfrSyntaxParser(VfrStream)
+ except:
+ EdkLogger.error(
+ "VfrCompiler",
+ FILE_OPEN_FAILURE,
+ "File open failed for %s" % InFileName,
+ InFileName,
+ )
+ if not self.IS_RUN_STATUS(COMPILER_RUN_STATUS.STATUS_DEAD):
+ self.SET_RUN_STATUS(COMPILER_RUN_STATUS.STATUS_FAILED)
+ return
+ self.Visitor = VfrSyntaxVisitor(
+ self.PreProcessDB, self.VfrRoot, self.Options.OverrideClassGuid
+ )
+ self.Visitor.visit(VfrParser.vfrProgram())
+
+ if self.Visitor.ParserStatus != 0:
+ if not self.IS_RUN_STATUS(COMPILER_RUN_STATUS.STATUS_DEAD):
+ EdkLogger.error(
+ "VfrCompiler",
+ FILE_PARSE_FAILURE,
+ "compile error in file %s" % InFileName,
+ InFileName,
+ )
+ self.SET_RUN_STATUS(COMPILER_RUN_STATUS.STATUS_FAILED)
+ return
+
+ if gFormPkg.HavePendingUnassigned() is True:
+ gFormPkg.PendingAssignPrintAll()
+ if not self.IS_RUN_STATUS(COMPILER_RUN_STATUS.STATUS_DEAD):
+ EdkLogger.error(
+ "VfrCompiler",
+ FILE_PARSE_FAILURE,
+ "compile error in file %s" % InFileName,
+ InFileName,
+ )
+ self.SET_RUN_STATUS(COMPILER_RUN_STATUS.STATUS_FAILED)
+ return
+
+ self.SET_RUN_STATUS(COMPILER_RUN_STATUS.STATUS_VFR_COMPILEED)
+ if self.Options.CreateJsonFile:
+ self.VfrTree.DumpJson()
+
+ def GenBinary(self):
+ if not self.IS_RUN_STATUS(COMPILER_RUN_STATUS.STATUS_VFR_COMPILEED):
+ if not self.IS_RUN_STATUS(COMPILER_RUN_STATUS.STATUS_DEAD):
+ self.SET_RUN_STATUS(COMPILER_RUN_STATUS.STATUS_FAILED)
+ else:
+ if self.Options.CreateIfrPkgFile:
+ self.VfrTree.GenBinary()
+
+ def GenCFile(self):
+ if not self.IS_RUN_STATUS(COMPILER_RUN_STATUS.STATUS_VFR_COMPILEED):
+ if not self.IS_RUN_STATUS(COMPILER_RUN_STATUS.STATUS_DEAD):
+ self.SET_RUN_STATUS(COMPILER_RUN_STATUS.STATUS_FAILED)
+ else:
+ if self.Options.CreateIfrPkgFile:
+ self.VfrTree.GenCFile()
+
+ def GenRecordListFile(self):
+ if not self.IS_RUN_STATUS(COMPILER_RUN_STATUS.STATUS_VFR_COMPILEED):
+ if not self.IS_RUN_STATUS(COMPILER_RUN_STATUS.STATUS_DEAD):
+ self.SET_RUN_STATUS(COMPILER_RUN_STATUS.STATUS_FAILED)
+ else:
+ if self.Options.CreateRecordListFile:
+ self.VfrTree.GenRecordListFile()
+
+ def GenBinaryFiles(self):
+ if not self.IS_RUN_STATUS(COMPILER_RUN_STATUS.STATUS_VFR_COMPILEED):
+ if not self.IS_RUN_STATUS(COMPILER_RUN_STATUS.STATUS_DEAD):
+ self.SET_RUN_STATUS(COMPILER_RUN_STATUS.STATUS_FAILED)
+ else:
+ self.VfrTree.GenBinaryFiles()
+ self.SET_RUN_STATUS(COMPILER_RUN_STATUS.STATUS_FINISHED)
+
+ def DumpSourceYaml(self):
+ if not self.IS_RUN_STATUS(
+ COMPILER_RUN_STATUS.STATUS_VFR_COMPILEED
+ ) and not self.IS_RUN_STATUS(COMPILER_RUN_STATUS.STATUS_FINISHED):
+ if not self.IS_RUN_STATUS(COMPILER_RUN_STATUS.STATUS_DEAD):
+ self.SET_RUN_STATUS(COMPILER_RUN_STATUS.STATUS_FAILED)
+ else:
+ if self.Options.CreateYamlFile:
+ self.VfrTree.DumpYamlForXMLCLI()
+ self.SET_RUN_STATUS(COMPILER_RUN_STATUS.STATUS_FINISHED)
+
+ def SET_RUN_STATUS(self, Status):
+ self.RunStatus = Status
+
+ def IS_RUN_STATUS(self, Status):
+ return self.RunStatus == Status
+
+
+def main():
+ Args = parser.parse_args()
+ Argc = len(sys.argv)
+ EdkLogger.SetLevel(WARNING_LOG_LEVEL)
+ Cmd = CmdParser(Args, Argc)
+ Compiler = VfrCompiler(Cmd)
+ Compiler.PreProcess()
+ Compiler.Compile()
+ Compiler.GenBinaryFiles()
+ Compiler.DumpSourceYaml()
+ Status = Compiler.RunStatus
+ if Status == COMPILER_RUN_STATUS.STATUS_DEAD or Status == COMPILER_RUN_STATUS.STATUS_FAILED:
+ return 2
+
+ return EFI_SUCCESS
+
+
+if __name__ == "__main__":
+ sys.exit(main())
diff --git a/BaseTools/Source/Python/VfrCompiler/IfrCtypes.py b/BaseTools/Source/Python/VfrCompiler/IfrCtypes.py
new file mode 100644
index 0000000000..a7f7a32a27
--- /dev/null
+++ b/BaseTools/Source/Python/VfrCompiler/IfrCtypes.py
@@ -0,0 +1,1811 @@
+## @file
+# This file is used to define the common C struct and functions.
+#
+# Copyright (c) 2022-, Intel Corporation. All rights reserved.<BR>
+# SPDX-License-Identifier: BSD-2-Clause-Patent
+##
+
+from ctypes import *
+from struct import *
+from enum import Enum
+
+
+EFI_STRING_ID_INVALID = 0x0
+EFI_HII_DEFAULT_CLASS_STANDARD = 0x0000
+EFI_HII_DEFAULT_CLASS_MANUFACTURING = 0x0001
+EFI_IFR_MAX_LENGTH = 0xFF
+EFI_VARSTORE_ID_INVALID = 0
+EFI_VARSTORE_ID_START = 0x20
+EFI_VAROFFSET_INVALID = 0xFFFF
+EFI_IMAGE_ID_INVALID = 0xFFFF
+
+EFI_NON_DEVICE_CLASS = 0x00
+EFI_DISK_DEVICE_CLASS = 0x01
+EFI_VIDEO_DEVICE_CLASS = 0x02
+EFI_NETWORK_DEVICE_CLASS = 0x04
+EFI_INPUT_DEVICE_CLASS = 0x08
+EFI_ON_BOARD_DEVICE_CLASS = 0x10
+EFI_OTHER_DEVICE_CLASS = 0x20
+
+EFI_SETUP_APPLICATION_SUBCLASS = 0x00
+EFI_GENERAL_APPLICATION_SUBCLASS = 0x01
+EFI_FRONT_PAGE_SUBCLASS = 0x02
+EFI_SINGLE_USE_SUBCLASS = 0x03
+
+# EFI_HII_PACKAGE_TYPE_x.
+
+EFI_HII_PACKAGE_TYPE_ALL = 0x00
+EFI_HII_PACKAGE_TYPE_GUID = 0x01
+EFI_HII_PACKAGE_FORM = 0x02
+EFI_HII_PACKAGE_KEYBOARD_LAYOUT = 0x03
+EFI_HII_PACKAGE_STRINGS = 0x04
+EFI_HII_PACKAGE_FONTS = 0x05
+EFI_HII_PACKAGE_IMAGES = 0x06
+EFI_HII_PACKAGE_SIMPLE_FONTS = 0x07
+EFI_HII_PACKAGE_DEVICE_PATH = 0x08
+EFI_HII_PACKAGE_END = 0xDF
+EFI_HII_PACKAGE_TYPE_SYSTEM_BEGIN = 0xE0
+EFI_HII_PACKAGE_TYPE_SYSTEM_END = 0xFF
+
+EFI_IFR_EXTEND_OP_LABEL = 0x0
+EFI_IFR_EXTEND_OP_BANNER = 0x1
+EFI_IFR_EXTEND_OP_TIMEOUT = 0x2
+EFI_IFR_EXTEND_OP_CLASS = 0x3
+EFI_IFR_EXTEND_OP_SUBCLASS = 0x4
+
+MAX_IFR_EXPRESSION_DEPTH = 0x9
+
+INVALID_ARRAY_INDEX = 0xFFFFFFFF
+
+EFI_IFR_TYPE_NUM_SIZE_8 = 0x00
+EFI_IFR_TYPE_NUM_8_BIT_SIZE = 0x01
+EFI_IFR_TYPE_NUM_SIZE_16 = 0x01
+EFI_IFR_TYPE_NUM_16_BIT_SIZE = 0x02
+EFI_IFR_TYPE_NUM_SIZE_32 = 0x02
+EFI_IFR_TYPE_NUM_32_BIT_SIZE = 0x04
+EFI_IFR_TYPE_NUM_SIZE_64 = 0x03
+EFI_IFR_TYPE_NUM_64_BIT_SIZE = 0x08
+EFI_IFR_TYPE_BOOLEAN = 0x04
+EFI_IFR_TYPE_TIME = 0x05
+EFI_IFR_TYPE_DATE = 0x06
+EFI_IFR_TYPE_STRING = 0x07
+EFI_IFR_TYPE_OTHER = 0x08
+EFI_IFR_TYPE_UNDEFINED = 0x09
+EFI_IFR_TYPE_ACTION = 0x0A
+EFI_IFR_TYPE_BUFFER = 0x0B
+EFI_IFR_TYPE_REF = 0x0C
+
+
+EFI_IFR_FLAGS_HORIZONTAL = 0x01
+
+EFI_IFR_FLAG_READ_ONLY = 0x01
+EFI_IFR_FLAG_CALLBACK = 0x04
+EFI_IFR_FLAG_RESET_REQUIRED = 0x10
+EFI_IFR_FLAG_REST_STYLE = 0x20
+EFI_IFR_FLAG_RECONNECT_REQUIRED = 0x40
+EFI_IFR_FLAG_OPTIONS_ONLY = 0x80
+
+EFI_IFR_STRING_MULTI_LINE = 0x01
+
+EDKII_IFR_DISPLAY_BIT = 0xC0
+EDKII_IFR_DISPLAY_INT_DEC_BIT = 0x00
+EDKII_IFR_DISPLAY_UINT_DEC_BIT = 0x40
+EDKII_IFR_DISPLAY_UINT_HEX_BIT = 0x80
+
+EDKII_IFR_NUMERIC_SIZE_BIT = 0x3F
+
+EFI_IFR_MAX_DEFAULT_TYPE = 0x10
+
+EFI_HII_SIBT_END = 0x00
+EFI_HII_SIBT_STRING_SCSU = 0x10
+EFI_HII_SIBT_STRING_SCSU_FONT = 0x11
+EFI_HII_SIBT_STRINGS_SCSU = 0x12
+EFI_HII_SIBT_STRINGS_SCSU_FONT = 0x13
+EFI_HII_SIBT_STRING_UCS2 = 0x14
+EFI_HII_SIBT_STRING_UCS2_FONT = 0x15
+EFI_HII_SIBT_STRINGS_UCS2 = 0x16
+EFI_HII_SIBT_STRINGS_UCS2_FONT = 0x17
+EFI_HII_SIBT_DUPLICATE = 0x20
+EFI_HII_SIBT_SKIP2 = 0x21
+EFI_HII_SIBT_SKIP1 = 0x22
+EFI_HII_SIBT_EXT1 = 0x30
+EFI_HII_SIBT_EXT2 = 0x31
+EFI_HII_SIBT_EXT4 = 0x32
+EFI_HII_SIBT_FONT = 0x40
+
+BasicTypes = [
+ EFI_IFR_TYPE_NUM_SIZE_8,
+ EFI_IFR_TYPE_NUM_SIZE_16,
+ EFI_IFR_TYPE_NUM_SIZE_32,
+ EFI_IFR_TYPE_NUM_SIZE_64,
+]
+BasicCInts = [c_uint64, c_uint32, c_uint16, c_uint8, c_ubyte, c_ushort]
+
+
+class EFI_GUID(Structure):
+ _pack_ = 1
+ _fields_ = [
+ ("Data1", c_uint32),
+ ("Data2", c_uint16),
+ ("Data3", c_uint16),
+ ("Data4", c_ubyte * 8),
+ ]
+
+ def from_list(self, listformat: list) -> None:
+ self.Data1 = listformat[0]
+ self.Data2 = listformat[1]
+ self.Data3 = listformat[2]
+ for i in range(8):
+ self.Data4[i] = listformat[i + 3]
+
+ def to_string(self) -> str:
+ GuidStr = f"{{{self.Data1:#x}, {self.Data2:#x}, {self.Data3:#x}, {{ {', '.join(f'{x:#x}' for x in self.Data4)}}}}}"
+
+ return GuidStr
+
+ def __cmp__(self, otherguid) -> bool:
+ if not isinstance(otherguid, EFI_GUID):
+ return "Input is not the GUID instance!"
+ rt = False
+ if (
+ self.Data1 == otherguid.Data1
+ and self.Data2 == otherguid.Data2
+ and self.Data3 == otherguid.Data3
+ ):
+ rt = True
+ for i in range(8):
+ rt = rt & (self.Data4[i] == otherguid.Data4[i])
+ return rt
+
+
+GuidArray = c_ubyte * 8
+EFI_HII_PLATFORM_SETUP_FORMSET_GUID = EFI_GUID(
+ 0x93039971, 0x8545, 0x4B04, GuidArray(0xB4, 0x5E, 0x32, 0xEB, 0x83, 0x26, 0x4, 0xE)
+)
+
+EFI_IFR_TIANO_GUID = EFI_GUID(
+ 0xF0B1735, 0x87A0, 0x4193, GuidArray(0xB2, 0x66, 0x53, 0x8C, 0x38, 0xAF, 0x48, 0xCE)
+)
+
+EDKII_IFR_BIT_VARSTORE_GUID = (
+ 0x82DDD68B,
+ 0x9163,
+ 0x4187,
+ GuidArray(0x9B, 0x27, 0x20, 0xA8, 0xFD, 0x60, 0xA7, 0x1D),
+)
+
+EFI_IFR_FRAMEWORK_GUID = (
+ 0x31CA5D1A,
+ 0xD511,
+ 0x4931,
+ GuidArray(0xB7, 0x82, 0xAE, 0x6B, 0x2B, 0x17, 0x8C, 0xD7),
+)
+
+
+class EFI_IFR_OP_HEADER(Structure):
+ _pack_ = 1
+ _fields_ = [
+ ("OpCode", c_ubyte),
+ ("Length", c_ubyte, 7),
+ ("Scope", c_ubyte, 1),
+ ]
+
+
+class EFI_IFR_FORM_SET(Structure):
+ _pack_ = 1
+ _fields_ = [
+ ("Header", EFI_IFR_OP_HEADER),
+ ("Guid", EFI_GUID),
+ ("FormSetTitle", c_uint16),
+ ("Help", c_uint16),
+ ("Flags", c_ubyte),
+ ]
+
+
+class EFI_IFR_GUID_CLASS(Structure):
+ _pack_ = 1
+ _fields_ = [
+ ("Header", EFI_IFR_OP_HEADER),
+ ("Guid", EFI_GUID),
+ ("ExtendOpCode", c_ubyte),
+ ("Class", c_uint16),
+ ]
+
+
+class EFI_IFR_GUID_SUBCLASS(Structure):
+ _pack_ = 1
+ _fields_ = [
+ ("Header", EFI_IFR_OP_HEADER),
+ ("Guid", EFI_GUID),
+ ("ExtendOpCode", c_ubyte),
+ ("SubClass", c_uint16),
+ ]
+
+
+class EFI_IFR_DEFAULTSTORE(Structure):
+ _pack_ = 1
+ _fields_ = [
+ ("Header", EFI_IFR_OP_HEADER),
+ ("DefaultName", c_uint16),
+ ("DefaultId", c_uint16),
+ ]
+
+
+class EFI_IFR_VARSTORE(Structure):
+ _pack_ = 1
+ _fields_ = [
+ ("Header", EFI_IFR_OP_HEADER),
+ ("Guid", EFI_GUID),
+ ("VarStoreId", c_uint16),
+ ("Size", c_uint16),
+ ("Name", ARRAY(c_ubyte, 2)),
+ ]
+
+
+def Refine_EFI_IFR_VARSTORE(Nums):
+ class EFI_IFR_VARSTORE(Structure):
+ _pack_ = 1
+ _fields_ = [
+ ("Header", EFI_IFR_OP_HEADER),
+ ("Guid", EFI_GUID),
+ ("VarStoreId", c_uint16),
+ ("Size", c_uint16),
+ ("Name", ARRAY(c_ubyte, Nums)),
+ ]
+
+ def __init__(self) -> None:
+ self.Header = EFI_IFR_OP_HEADER()
+
+ return EFI_IFR_VARSTORE()
+
+
+class EFI_IFR_VARSTORE_EFI(Structure):
+ _pack_ = 1
+ _fields_ = [
+ ("Header", EFI_IFR_OP_HEADER),
+ ("VarStoreId", c_uint16),
+ ("Guid", EFI_GUID),
+ ("Attributes", c_uint32),
+ ("Size", c_uint16),
+ ("Name", ARRAY(c_ubyte, 2)),
+ ]
+
+
+def Refine_EFI_IFR_VARSTORE_EFI(Nums):
+ class EFI_IFR_VARSTORE_EFI(Structure):
+ _pack_ = 1
+ _fields_ = [
+ ("Header", EFI_IFR_OP_HEADER),
+ ("VarStoreId", c_uint16),
+ ("Guid", EFI_GUID),
+ ("Attributes", c_uint32),
+ ("Size", c_uint16),
+ ("Name", ARRAY(c_ubyte, Nums)),
+ ]
+
+ def __init__(self) -> None:
+ self.Header = EFI_IFR_OP_HEADER()
+
+ return EFI_IFR_VARSTORE_EFI()
+
+
+class EFI_IFR_GUID(Structure):
+ _pack_ = 1
+ _fields_ = [
+ ("Header", EFI_IFR_OP_HEADER),
+ ("Guid", EFI_GUID),
+ ]
+
+
+def Refine_EFI_IFR_BUFFER(Nums):
+ class EFI_IFR_BUFFER(Structure):
+ _pack_ = 1
+ _fields_ = [
+ ("Data", ARRAY(c_ubyte, Nums)),
+ ]
+
+ def SetBuffer(self, Buffer):
+ self.Buffer = Buffer
+
+ return EFI_IFR_BUFFER()
+
+
+def Refine_EFI_IFR_BIT_BUFFER(Nums):
+ class EFI_IFR_BIT_BUFFER(Structure):
+ _pack_ = 1
+ _fields_ = [
+ ("Data", ARRAY(c_ubyte, Nums)),
+ ]
+
+ def SetBuffer(self, Buffer):
+ self.Buffer = Buffer
+
+ return EFI_IFR_BIT_BUFFER
+
+
+def Refine_EFI_IFR_BIT(Type, PreBits, Size, Data):
+ if PreBits == 0:
+
+ class Refine_EFI_IFR_BIT(Structure):
+ _pack_ = 1
+ _fields_ = [
+ ("Data", Type, Size), # the really needed data
+ ("Postfix", Type, sizeof(Type) * 8 - Size),
+ ]
+
+ def __init__(self, Data):
+ self.Data = Data
+
+ elif sizeof(Type) * 8 - Size - PreBits == 0:
+
+ class Refine_EFI_IFR_BIT(Structure):
+ _pack_ = 1
+ _fields_ = [
+ ("Prefix", Type, PreBits),
+ ("Data", Type, Size), # the really needed data
+ ]
+
+ def __init__(self, Data):
+ self.Data = Data
+
+ else:
+
+ class Refine_EFI_IFR_BIT(Structure):
+ _pack_ = 1
+ _fields_ = [
+ ("Prefix", Type, PreBits),
+ ("Data", Type, Size), # the really needed data
+ ("Postfix", Type, sizeof(Type) * 8 - Size - PreBits),
+ ]
+
+ def __init__(self, Data):
+ self.Data = Data
+
+ return Refine_EFI_IFR_BIT(Data)
+
+
+class EFI_IFR_GUID_VAREQNAME(Structure):
+ _pack_ = 1
+ _fields_ = [
+ ("Header", EFI_IFR_OP_HEADER),
+ ("Guid", EFI_GUID),
+ ("ExtendOpCode", c_uint8),
+ ("QuestionId", c_uint16),
+ ("NameId", c_uint16),
+ ]
+
+
+class EFI_HII_PACKAGE_HEADER(Structure):
+ _pack_ = 1
+ _fields_ = [
+ ("Length", c_uint32, 24),
+ ("Type", c_uint32, 8),
+ ]
+
+
+class EFI_HII_STRING_PACKAGE_HDR(Structure):
+ _pack_ = 1
+ _fields_ = [
+ ("Header", EFI_HII_PACKAGE_HEADER),
+ ("HdrSize", c_uint32),
+ ("StringInfoOffset", c_uint32),
+ ("LanguageWindow", c_ushort * 16),
+ ("LanguageName", c_uint16),
+ ("Language", c_char * 2),
+ ]
+
+
+class EFI_IFR_VARSTORE_NAME_VALUE(Structure):
+ _pack_ = 1
+ _fields_ = [
+ ("Header", EFI_IFR_OP_HEADER),
+ ("VarStoreId", c_uint16),
+ ("Guid", EFI_GUID),
+ ]
+
+
+class EFI_IFR_FORM(Structure):
+ _pack_ = 1
+ _fields_ = [
+ ("Header", EFI_IFR_OP_HEADER),
+ ("FormId", c_uint16),
+ ("FormTitle", c_uint16),
+ ]
+
+
+class EFI_IFR_GUID_BANNER(Structure):
+ _pack_ = 1
+ _fields_ = [
+ ("Header", EFI_IFR_OP_HEADER),
+ ("Guid", EFI_GUID),
+ ("ExtendOpCode", c_ubyte),
+ ("Title", c_uint16),
+ ("LineNumber", c_uint16),
+ ("Alignment", c_ubyte),
+ ]
+
+
+class EFI_IFR_GUID_TIMEOUT(Structure):
+ _pack_ = 1
+ _fields_ = [
+ ("Header", EFI_IFR_OP_HEADER),
+ ("Guid", EFI_GUID),
+ ("ExtendOpCode", c_ubyte),
+ ("TimeOut", c_uint16),
+ ]
+
+
+class EFI_IFR_GUID_LABEL(Structure):
+ _pack_ = 1
+ _fields_ = [
+ ("Header", EFI_IFR_OP_HEADER),
+ ("Guid", EFI_GUID),
+ ("ExtendOpCode", c_ubyte),
+ ("Number", c_uint16),
+ ]
+
+
+class EFI_IFR_RULE(Structure):
+ _pack_ = 1
+ _fields_ = [
+ ("Header", EFI_IFR_OP_HEADER),
+ ("RuleId", c_ubyte),
+ ]
+
+
+class EFI_IFR_STATEMENT_HEADER(Structure):
+ _pack_ = 1
+ _fields_ = [
+ ("Prompt", c_uint16),
+ ("Help", c_uint16),
+ ]
+
+
+class EFI_IFR_SUBTITLE(Structure):
+ _pack_ = 1
+ _fields_ = [
+ ("Header", EFI_IFR_OP_HEADER),
+ ("Statement", EFI_IFR_STATEMENT_HEADER),
+ ("Flags", c_ubyte),
+ ]
+
+
+class EFI_IFR_TEXT(Structure):
+ _pack_ = 1
+ _fields_ = [
+ ("Header", EFI_IFR_OP_HEADER),
+ ("Statement", EFI_IFR_STATEMENT_HEADER),
+ ("TextTwo", c_uint16),
+ ]
+
+
+class EFI_IFR_IMAGE(Structure):
+ _pack_ = 1
+ _fields_ = [
+ ("Header", EFI_IFR_OP_HEADER),
+ ("Id", c_uint16),
+ ]
+
+
+class VarStoreInfoNode(Union):
+ _pack_ = 1
+ _fields_ = [
+ ("VarName", c_uint16),
+ ("VarOffset", c_uint16),
+ ]
+
+
+class EFI_IFR_QUESTION_HEADER(Structure):
+ _pack_ = 1
+ _fields_ = [
+ ("Header", EFI_IFR_STATEMENT_HEADER),
+ ("QuestionId", c_uint16),
+ ("VarStoreId", c_uint16),
+ ("VarStoreInfo", VarStoreInfoNode),
+ ("Flags", c_ubyte),
+ ]
+
+
+class u8Node(Structure):
+ _pack_ = 1
+ _fields_ = [
+ ("MinValue", c_ubyte),
+ ("MaxValue", c_ubyte),
+ ("Step", c_ubyte),
+ ]
+
+
+class u16Node(Structure):
+ _pack_ = 1
+ _fields_ = [
+ ("MinValue", c_uint16),
+ ("MaxValue", c_uint16),
+ ("Step", c_uint16),
+ ]
+
+
+class u32Node(Structure):
+ _pack_ = 1
+ _fields_ = [
+ ("MinValue", c_uint32),
+ ("MaxValue", c_uint32),
+ ("Step", c_uint32),
+ ]
+
+
+class u64Node(Structure):
+ _pack_ = 1
+ _fields_ = [
+ ("MinValue", c_uint64),
+ ("MaxValue", c_uint64),
+ ("Step", c_uint64),
+ ]
+
+
+class MINMAXSTEP_DATA(Union):
+ _pack_ = 1
+ _fields_ = [
+ ("u8", u8Node),
+ ("u16", u16Node),
+ ("u32", u32Node),
+ ("u64", u64Node),
+ ]
+
+
+EFI_IFR_NUMERIC_SIZE = 0x03
+EFI_IFR_NUMERIC_SIZE_1 = 0x00
+EFI_IFR_NUMERIC_SIZE_2 = 0x01
+EFI_IFR_NUMERIC_SIZE_4 = 0x02
+EFI_IFR_NUMERIC_SIZE_8 = 0x03
+EFI_IFR_DISPLAY = 0x30
+EFI_IFR_DISPLAY_INT_DEC = 0x00
+EFI_IFR_DISPLAY_UINT_DEC = 0x10
+EFI_IFR_DISPLAY_UINT_HEX = 0x20
+
+
+class EFI_IFR_ONE_OF(Structure):
+ _pack_ = 1
+ _fields_ = [
+ ("Header", EFI_IFR_OP_HEADER),
+ ("Question", EFI_IFR_QUESTION_HEADER),
+ ("Flags", c_ubyte),
+ ("Data", MINMAXSTEP_DATA),
+ ]
+
+
+def Refine_EFI_IFR_ONE_OF(Type):
+ if Type == EFI_IFR_TYPE_NUM_SIZE_8:
+ DataType = u8Node
+ elif Type == EFI_IFR_TYPE_NUM_SIZE_16:
+ DataType = u16Node
+ elif Type == EFI_IFR_TYPE_NUM_SIZE_32:
+ DataType = u32Node
+ elif Type == EFI_IFR_TYPE_NUM_SIZE_64:
+ DataType = u64Node
+ else:
+ DataType = u32Node
+
+ class EFI_IFR_ONE_OF(Structure):
+ _pack_ = 1
+ _fields_ = [
+ ("Header", EFI_IFR_OP_HEADER),
+ ("Question", EFI_IFR_QUESTION_HEADER),
+ ("Flags", c_ubyte),
+ ("Data", DataType),
+ ]
+
+ return EFI_IFR_ONE_OF()
+
+
+EFI_IFR_CHECKBOX_DEFAULT = 0x01
+EFI_IFR_CHECKBOX_DEFAULT_MFG = 0x02
+
+
+class EFI_IFR_CHECKBOX(Structure):
+ _pack_ = 1
+ _fields_ = [
+ ("Header", EFI_IFR_OP_HEADER),
+ ("Question", EFI_IFR_QUESTION_HEADER),
+ ("Flags", c_ubyte),
+ ]
+
+
+class EFI_IFR_NUMERIC(Structure):
+ _pack_ = 1
+ _fields_ = [
+ ("Header", EFI_IFR_OP_HEADER),
+ ("Question", EFI_IFR_QUESTION_HEADER),
+ ("Flags", c_ubyte),
+ ("Data", MINMAXSTEP_DATA),
+ ]
+
+
+def Refine_EFI_IFR_NUMERIC(Type):
+ if Type == EFI_IFR_TYPE_NUM_SIZE_8:
+ DataType = u8Node
+ elif Type == EFI_IFR_TYPE_NUM_SIZE_16:
+ DataType = u16Node
+ elif Type == EFI_IFR_TYPE_NUM_SIZE_32:
+ DataType = u32Node
+ elif Type == EFI_IFR_TYPE_NUM_SIZE_64:
+ DataType = u64Node
+ else:
+ DataType = u32Node
+
+ class EFI_IFR_NUMERIC(Structure):
+ _pack_ = 1
+ _fields_ = [
+ ("Header", EFI_IFR_OP_HEADER),
+ ("Question", EFI_IFR_QUESTION_HEADER),
+ ("Flags", c_ubyte),
+ ("Data", DataType),
+ ]
+
+ return EFI_IFR_NUMERIC()
+
+
+class EFI_IFR_PASSWORD(Structure):
+ _pack_ = 1
+ _fields_ = [
+ ("Header", EFI_IFR_OP_HEADER),
+ ("Question", EFI_IFR_QUESTION_HEADER),
+ ("MinSize", c_uint16),
+ ("MaxSize", c_uint16),
+ ]
+
+
+class EFI_HII_TIME(Structure):
+ _pack_ = 1
+ _fields_ = [
+ ("Hour", c_ubyte),
+ ("Minute", c_ubyte),
+ ("Second", c_ubyte),
+ ]
+
+
+class EFI_HII_DATE(Structure):
+ _pack_ = 1
+ _fields_ = [
+ ("Year", c_uint16),
+ ("Month", c_ubyte),
+ ("Day", c_ubyte),
+ ]
+
+
+class EFI_HII_REF(Structure):
+ _pack_ = 1
+ _fields_ = [
+ ("QuestionId", c_uint16),
+ ("FormId", c_uint16),
+ ("FormSetGuid", EFI_GUID),
+ ("DevicePath", c_uint16),
+ ]
+
+
+class EFI_IFR_TYPE_VALUE(Union):
+ _pack_ = 1
+ _fields_ = [
+ ("u8", c_ubyte),
+ ("u16", c_uint16),
+ ("u32", c_uint32),
+ ("u64", c_uint64),
+ ("b", c_ubyte), #
+ ("time", EFI_HII_TIME),
+ ("date", EFI_HII_DATE),
+ ("string", c_uint16),
+ ("ref", EFI_HII_REF),
+ ]
+
+
+class EFI_IFR_ONE_OF_OPTION(Structure):
+ _pack_ = 1
+ _fields_ = [
+ ("Header", EFI_IFR_OP_HEADER),
+ ("Option", c_uint16),
+ ("Flags", c_ubyte),
+ ("Type", c_ubyte),
+ ("Value", EFI_IFR_TYPE_VALUE),
+ ]
+
+
+TypeDict = {
+ EFI_IFR_TYPE_NUM_SIZE_8: c_ubyte,
+ EFI_IFR_TYPE_NUM_SIZE_16: c_ushort,
+ EFI_IFR_TYPE_NUM_SIZE_32: c_ulong,
+ EFI_IFR_TYPE_NUM_SIZE_64: c_ulonglong,
+ EFI_IFR_TYPE_BOOLEAN: c_ubyte,
+ EFI_IFR_TYPE_TIME: EFI_HII_TIME,
+ EFI_IFR_TYPE_DATE: EFI_HII_DATE,
+ EFI_IFR_TYPE_STRING: c_uint16,
+ EFI_IFR_TYPE_REF: EFI_HII_REF,
+}
+
+TypeSizeDict = {
+ EFI_IFR_TYPE_NUM_SIZE_8: 1,
+ EFI_IFR_TYPE_NUM_SIZE_16: 2,
+ EFI_IFR_TYPE_NUM_SIZE_32: 4,
+ EFI_IFR_TYPE_NUM_SIZE_64: 8,
+ EFI_IFR_TYPE_BOOLEAN: 1,
+ EFI_IFR_TYPE_STRING: 2,
+}
+
+SizeTypeDict = {
+ 1: c_uint8,
+ 2: c_uint16,
+ 4: c_uint32,
+ 8: c_uint64,
+}
+
+
+def Refine_EFI_IFR_ONE_OF_OPTION(Type, Nums):
+ ValueType = TypeDict[Type]
+
+ class EFI_IFR_ONE_OF_OPTION(Structure):
+ _pack_ = 1
+ _fields_ = [
+ ("Header", EFI_IFR_OP_HEADER),
+ ("Option", c_uint16),
+ ("Flags", c_ubyte),
+ ("Type", c_ubyte),
+ ("Value", ValueType * Nums),
+ ]
+
+ def __init__(self) -> None:
+ self.Header = EFI_IFR_OP_HEADER()
+
+ return EFI_IFR_ONE_OF_OPTION()
+
+
+EFI_IFR_OPTION_DEFAULT = 0x10
+EFI_IFR_OPTION_DEFAULT_MFG = 0x20
+
+
+class EFI_IFR_SUPPRESS_IF(Structure):
+ _pack_ = 1
+ _fields_ = [
+ ("Header", EFI_IFR_OP_HEADER),
+ ]
+
+
+class EFI_IFR_LOCKED(Structure):
+ _pack_ = 1
+ _fields_ = [
+ ("Header", EFI_IFR_OP_HEADER),
+ ]
+
+
+class EFI_IFR_ACTION(Structure):
+ _pack_ = 1
+ _fields_ = [
+ ("Header", EFI_IFR_OP_HEADER),
+ ("Question", EFI_IFR_QUESTION_HEADER),
+ ("QuestionConfig", c_uint16),
+ ]
+
+
+class EFI_IFR_REF(Structure):
+ _pack_ = 1
+ _fields_ = [
+ ("Header", EFI_IFR_OP_HEADER),
+ ("Question", EFI_IFR_QUESTION_HEADER),
+ ("FormId", c_uint16),
+ ]
+
+
+class EFI_IFR_REF2(Structure):
+ _pack_ = 1
+ _fields_ = [
+ ("Header", EFI_IFR_OP_HEADER),
+ ("Question", EFI_IFR_QUESTION_HEADER),
+ ("FormId", c_uint16),
+ ("QuestionId", c_uint16),
+ ]
+
+
+class EFI_IFR_REF3(Structure):
+ _pack_ = 1
+ _fields_ = [
+ ("Header", EFI_IFR_OP_HEADER),
+ ("Question", EFI_IFR_QUESTION_HEADER),
+ ("FormId", c_uint16),
+ ("QuestionId", c_uint16),
+ ("FormSetId", EFI_GUID),
+ ]
+
+
+class EFI_IFR_REF4(Structure):
+ _pack_ = 1
+ _fields_ = [
+ ("Header", EFI_IFR_OP_HEADER),
+ ("Question", EFI_IFR_QUESTION_HEADER),
+ ("FormId", c_uint16),
+ ("QuestionId", c_uint16),
+ ("FormSetId", EFI_GUID),
+ ("DevicePath", c_uint16),
+ ]
+
+
+class EFI_IFR_REF5(Structure):
+ _pack_ = 1
+ _fields_ = [
+ ("Header", EFI_IFR_OP_HEADER),
+ ("Question", EFI_IFR_QUESTION_HEADER),
+ ]
+
+
+class EFI_IFR_RESET_BUTTON(Structure):
+ _pack_ = 1
+ _fields_ = [
+ ("Header", EFI_IFR_OP_HEADER),
+ ("Statement", EFI_IFR_STATEMENT_HEADER),
+ ("DefaultId", c_uint16),
+ ]
+
+
+class EFI_IFR_NO_SUBMIT_IF(Structure):
+ _pack_ = 1
+ _fields_ = [
+ ("Header", EFI_IFR_OP_HEADER),
+ ("Error", c_uint16),
+ ]
+
+
+class EFI_IFR_INCONSISTENT_IF(Structure):
+ _pack_ = 1
+ _fields_ = [
+ ("Header", EFI_IFR_OP_HEADER),
+ ("Error", c_uint16),
+ ]
+
+
+class EFI_IFR_EQ_ID_VAL(Structure):
+ _pack_ = 1
+ _fields_ = [
+ ("Header", EFI_IFR_OP_HEADER),
+ ("QuestionId", c_uint16),
+ ("Value", c_uint16),
+ ]
+
+
+class EFI_IFR_EQ_ID_ID(Structure):
+ _pack_ = 1
+ _fields_ = [
+ ("Header", EFI_IFR_OP_HEADER),
+ ("QuestionId1", c_uint16),
+ ("QuestionId2", c_uint16),
+ ]
+
+
+class EFI_IFR_EQ_ID_VAL_LIST(Structure):
+ _pack_ = 1
+ _fields_ = [
+ ("Header", EFI_IFR_OP_HEADER),
+ ("QuestionId", c_uint16),
+ ("ListLength", c_uint16),
+ ("ValueList", c_uint16), #
+ ]
+
+
+def Refine_EFI_IFR_EQ_ID_VAL_LIST(Nums):
+ class EFI_IFR_EQ_ID_VAL_LIST(Structure):
+ _pack_ = 1
+ _fields_ = [
+ ("Header", EFI_IFR_OP_HEADER),
+ ("QuestionId", c_uint16),
+ ("ListLength", c_uint16),
+ ("ValueList", c_uint16 * Nums),
+ ]
+
+ def __init__(self):
+ self.Header = EFI_IFR_OP_HEADER()
+
+ return EFI_IFR_EQ_ID_VAL_LIST()
+
+
+class EFI_IFR_AND(Structure):
+ _pack_ = 1
+ _fields_ = [
+ ("Header", EFI_IFR_OP_HEADER),
+ ]
+
+
+class EFI_IFR_OR(Structure):
+ _pack_ = 1
+ _fields_ = [
+ ("Header", EFI_IFR_OP_HEADER),
+ ]
+
+
+class EFI_IFR_NOT(Structure):
+ _pack_ = 1
+ _fields_ = [
+ ("Header", EFI_IFR_OP_HEADER),
+ ]
+
+
+class EFI_IFR_GRAY_OUT_IF(Structure):
+ _pack_ = 1
+ _fields_ = [
+ ("Header", EFI_IFR_OP_HEADER),
+ ]
+
+
+class EFI_IFR_DATE(Structure):
+ _pack_ = 1
+ _fields_ = [
+ ("Header", EFI_IFR_OP_HEADER),
+ ("Question", EFI_IFR_QUESTION_HEADER),
+ ("Flags", c_ubyte),
+ ]
+
+
+EFI_QF_DATE_YEAR_SUPPRESS = 0x01
+EFI_QF_DATE_MONTH_SUPPRESS = 0x02
+EFI_QF_DATE_DAY_SUPPRESS = 0x04
+
+EFI_QF_DATE_STORAGE = 0x30
+QF_DATE_STORAGE_NORMAL = 0x00
+QF_DATE_STORAGE_TIME = 0x10
+QF_DATE_STORAGE_WAKEUP = 0x20
+
+
+class EFI_IFR_TIME(Structure):
+ _pack_ = 1
+ _fields_ = [
+ ("Header", EFI_IFR_OP_HEADER),
+ ("Question", EFI_IFR_QUESTION_HEADER),
+ ("Flags", c_ubyte),
+ ]
+
+
+QF_TIME_HOUR_SUPPRESS = 0x01
+QF_TIME_MINUTE_SUPPRESS = 0x02
+QF_TIME_SECOND_SUPPRESS = 0x04
+QF_TIME_STORAGE = 0x30
+QF_TIME_STORAGE_NORMAL = 0x00
+QF_TIME_STORAGE_TIME = 0x10
+QF_TIME_STORAGE_WAKEUP = 0x20
+
+
+class EFI_IFR_STRING(Structure):
+ _pack_ = 1
+ _fields_ = [
+ ("Header", EFI_IFR_OP_HEADER),
+ ("Question", EFI_IFR_QUESTION_HEADER),
+ ("MinSize", c_ubyte),
+ ("MaxSize", c_ubyte),
+ ("Flags", c_ubyte),
+ ]
+
+
+class EFI_IFR_REFRESH(Structure):
+ _pack_ = 1
+ _fields_ = [
+ ("Header", EFI_IFR_OP_HEADER),
+ ("RefreshInterval", c_ubyte),
+ ]
+
+
+class EFI_IFR_DISABLE_IF(Structure):
+ _pack_ = 1
+ _fields_ = [
+ ("Header", EFI_IFR_OP_HEADER),
+ ]
+
+
+class EFI_IFR_TO_LOWER(Structure):
+ _pack_ = 1
+ _fields_ = [
+ ("Header", EFI_IFR_OP_HEADER),
+ ]
+
+
+class EFI_IFR_TO_UPPER(Structure):
+ _pack_ = 1
+ _fields_ = [
+ ("Header", EFI_IFR_OP_HEADER),
+ ]
+
+
+class EFI_IFR_MAP(Structure):
+ _pack_ = 1
+ _fields_ = [
+ ("Header", EFI_IFR_OP_HEADER),
+ ]
+
+
+class EFI_IFR_ORDERED_LIST(Structure):
+ _pack_ = 1
+ _fields_ = [
+ ("Header", EFI_IFR_OP_HEADER),
+ ("Question", EFI_IFR_QUESTION_HEADER),
+ ("MaxContainers", c_ubyte),
+ ("Flags", c_ubyte),
+ ]
+
+
+EFI_IFR_UNIQUE_SET = 0x01
+EFI_IFR_NO_EMPTY_SET = 0x02
+
+
+class EFI_IFR_VARSTORE_DEVICE(Structure):
+ _pack_ = 1
+ _fields_ = [
+ ("Header", EFI_IFR_OP_HEADER),
+ ("DevicePath", c_uint16),
+ ]
+
+
+class EFI_IFR_VERSION(Structure):
+ _pack_ = 1
+ _fields_ = [
+ ("Header", EFI_IFR_OP_HEADER),
+ ]
+
+
+class EFI_IFR_END(Structure):
+ _pack_ = 1
+ _fields_ = [
+ ("Header", EFI_IFR_OP_HEADER),
+ ]
+
+
+class EFI_IFR_MATCH(Structure):
+ _pack_ = 1
+ _fields_ = [
+ ("Header", EFI_IFR_OP_HEADER),
+ ]
+
+
+class EFI_IFR_GET(Structure):
+ _pack_ = 1
+ _fields_ = [
+ ("Header", EFI_IFR_OP_HEADER),
+ ("VarStoreId", c_uint16),
+ ("VarStoreInfo", VarStoreInfoNode),
+ ("VarStoreType", c_ubyte),
+ ]
+
+
+class EFI_IFR_SET(Structure):
+ _pack_ = 1
+ _fields_ = [
+ ("Header", EFI_IFR_OP_HEADER),
+ ("VarStoreId", c_uint16),
+ ("VarStoreInfo", VarStoreInfoNode),
+ ("VarStoreType", c_ubyte),
+ ]
+
+
+class EFI_IFR_READ(Structure):
+ _pack_ = 1
+ _fields_ = [
+ ("Header", EFI_IFR_OP_HEADER),
+ ]
+
+
+class EFI_IFR_WRITE(Structure):
+ _pack_ = 1
+ _fields_ = [
+ ("Header", EFI_IFR_OP_HEADER),
+ ]
+
+
+class EFI_IFR_EQUAL(Structure):
+ _pack_ = 1
+ _fields_ = [
+ ("Header", EFI_IFR_OP_HEADER),
+ ]
+
+
+class EFI_IFR_NOT_EQUAL(Structure):
+ _pack_ = 1
+ _fields_ = [
+ ("Header", EFI_IFR_OP_HEADER),
+ ]
+
+
+class EFI_IFR_GREATER_THAN(Structure):
+ _pack_ = 1
+ _fields_ = [
+ ("Header", EFI_IFR_OP_HEADER),
+ ]
+
+
+class EFI_IFR_GREATER_EQUAL(Structure):
+ _pack_ = 1
+ _fields_ = [
+ ("Header", EFI_IFR_OP_HEADER),
+ ]
+
+
+class EFI_IFR_LESS_EQUAL(Structure):
+ _pack_ = 1
+ _fields_ = [
+ ("Header", EFI_IFR_OP_HEADER),
+ ]
+
+
+class EFI_IFR_LESS_THAN(Structure):
+ _pack_ = 1
+ _fields_ = [
+ ("Header", EFI_IFR_OP_HEADER),
+ ]
+
+
+class EFI_IFR_BITWISE_AND(Structure):
+ _pack_ = 1
+ _fields_ = [
+ ("Header", EFI_IFR_OP_HEADER),
+ ]
+
+
+class EFI_IFR_BITWISE_OR(Structure):
+ _pack_ = 1
+ _fields_ = [
+ ("Header", EFI_IFR_OP_HEADER),
+ ]
+
+
+class EFI_IFR_BITWISE_NOT(Structure):
+ _pack_ = 1
+ _fields_ = [
+ ("Header", EFI_IFR_OP_HEADER),
+ ]
+
+
+class EFI_IFR_SHIFT_LEFT(Structure):
+ _pack_ = 1
+ _fields_ = [
+ ("Header", EFI_IFR_OP_HEADER),
+ ]
+
+
+class EFI_IFR_SHIFT_RIGHT(Structure):
+ _pack_ = 1
+ _fields_ = [
+ ("Header", EFI_IFR_OP_HEADER),
+ ]
+
+
+class EFI_IFR_ADD(Structure):
+ _pack_ = 1
+ _fields_ = [
+ ("Header", EFI_IFR_OP_HEADER),
+ ]
+
+
+class EFI_IFR_SUBTRACT(Structure):
+ _pack_ = 1
+ _fields_ = [
+ ("Header", EFI_IFR_OP_HEADER),
+ ]
+
+
+class EFI_IFR_MULTIPLY(Structure):
+ _pack_ = 1
+ _fields_ = [
+ ("Header", EFI_IFR_OP_HEADER),
+ ]
+
+
+class EFI_IFR_DIVIDE(Structure):
+ _pack_ = 1
+ _fields_ = [
+ ("Header", EFI_IFR_OP_HEADER),
+ ]
+
+
+class EFI_IFR_MODULO(Structure):
+ _pack_ = 1
+ _fields_ = [
+ ("Header", EFI_IFR_OP_HEADER),
+ ]
+
+
+class EFI_IFR_RULE_REF(Structure):
+ _pack_ = 1
+ _fields_ = [
+ ("Header", EFI_IFR_OP_HEADER),
+ ("RuleId", c_ubyte),
+ ]
+
+
+class EFI_IFR_QUESTION_REF1(Structure):
+ _pack_ = 1
+ _fields_ = [
+ ("Header", EFI_IFR_OP_HEADER),
+ ("QuestionId", c_uint16),
+ ]
+
+
+class EFI_IFR_QUESTION_REF2(Structure):
+ _pack_ = 1
+ _fields_ = [
+ ("Header", EFI_IFR_OP_HEADER),
+ ]
+
+
+class EFI_IFR_QUESTION_REF3(Structure):
+ _pack_ = 1
+ _fields_ = [
+ ("Header", EFI_IFR_OP_HEADER),
+ ]
+
+
+class EFI_IFR_QUESTION_REF3_2(Structure):
+ _pack_ = 1
+ _fields_ = [
+ ("Header", EFI_IFR_OP_HEADER),
+ ("DevicePath", c_uint16),
+ ]
+
+
+class EFI_IFR_QUESTION_REF3_3(Structure):
+ _pack_ = 1
+ _fields_ = [
+ ("Header", EFI_IFR_OP_HEADER),
+ ("DevicePath", c_uint16),
+ ("Guid", EFI_GUID),
+ ]
+
+
+class EFI_IFR_UINT8(Structure):
+ _pack_ = 1
+ _fields_ = [
+ ("Header", EFI_IFR_OP_HEADER),
+ ("Value", c_ubyte),
+ ]
+
+
+class EFI_IFR_UINT16(Structure):
+ _pack_ = 1
+ _fields_ = [
+ ("Header", EFI_IFR_OP_HEADER),
+ ("Value", c_uint16),
+ ]
+
+
+class EFI_IFR_UINT32(Structure):
+ _pack_ = 1
+ _fields_ = [
+ ("Header", EFI_IFR_OP_HEADER),
+ ("Value", c_uint32),
+ ]
+
+
+class EFI_IFR_UINT64(Structure):
+ _pack_ = 1
+ _fields_ = [
+ ("Header", EFI_IFR_OP_HEADER),
+ ("Value", c_uint64),
+ ]
+
+
+class EFI_IFR_TRUE(Structure):
+ _pack_ = 1
+ _fields_ = [
+ ("Header", EFI_IFR_OP_HEADER),
+ ]
+
+
+class EFI_IFR_FALSE(Structure):
+ _pack_ = 1
+ _fields_ = [
+ ("Header", EFI_IFR_OP_HEADER),
+ ]
+
+
+class EFI_IFR_TO_UINT(Structure):
+ _pack_ = 1
+ _fields_ = [
+ ("Header", EFI_IFR_OP_HEADER),
+ ]
+
+
+class EFI_IFR_TO_STRING(Structure):
+ _pack_ = 1
+ _fields_ = [
+ ("Header", EFI_IFR_OP_HEADER),
+ ("Format", c_ubyte),
+ ]
+
+
+class EFI_IFR_TO_BOOLEAN(Structure):
+ _pack_ = 1
+ _fields_ = [
+ ("Header", EFI_IFR_OP_HEADER),
+ ]
+
+
+class EFI_IFR_MID(Structure):
+ _pack_ = 1
+ _fields_ = [
+ ("Header", EFI_IFR_OP_HEADER),
+ ]
+
+
+class EFI_IFR_FIND(Structure):
+ _pack_ = 1
+ _fields_ = [
+ ("Header", EFI_IFR_OP_HEADER),
+ ("Format", c_ubyte),
+ ]
+
+
+class EFI_IFR_TOKEN(Structure):
+ _pack_ = 1
+ _fields_ = [
+ ("Header", EFI_IFR_OP_HEADER),
+ ]
+
+
+class EFI_IFR_STRING_REF1(Structure):
+ _pack_ = 1
+ _fields_ = [
+ ("Header", EFI_IFR_OP_HEADER),
+ ("StringId", c_uint16),
+ ]
+
+
+class EFI_IFR_STRING_REF2(Structure):
+ _pack_ = 1
+ _fields_ = [
+ ("Header", EFI_IFR_OP_HEADER),
+ ]
+
+
+class EFI_IFR_CONDITIONAL(Structure):
+ _pack_ = 1
+ _fields_ = [
+ ("Header", EFI_IFR_OP_HEADER),
+ ]
+
+
+class EFI_IFR_ZERO(Structure):
+ _pack_ = 1
+ _fields_ = [
+ ("Header", EFI_IFR_OP_HEADER),
+ ]
+
+
+class EFI_IFR_ONE(Structure):
+ _pack_ = 1
+ _fields_ = [
+ ("Header", EFI_IFR_OP_HEADER),
+ ]
+
+
+class EFI_IFR_ONES(Structure):
+ _pack_ = 1
+ _fields_ = [
+ ("Header", EFI_IFR_OP_HEADER),
+ ]
+
+
+class EFI_IFR_UNDEFINED(Structure):
+ _pack_ = 1
+ _fields_ = [
+ ("Header", EFI_IFR_OP_HEADER),
+ ]
+
+
+class EFI_IFR_LENGTH(Structure):
+ _pack_ = 1
+ _fields_ = [
+ ("Header", EFI_IFR_OP_HEADER),
+ ]
+
+
+class EFI_IFR_DUP(Structure):
+ _pack_ = 1
+ _fields_ = [
+ ("Header", EFI_IFR_OP_HEADER),
+ ]
+
+
+class EFI_IFR_THIS(Structure):
+ _pack_ = 1
+ _fields_ = [
+ ("Header", EFI_IFR_OP_HEADER),
+ ]
+
+
+EFI_IFR_FLAGS_FIRST_MATCHING = 0x00
+EFI_IFR_FLAGS_FIRST_NON_MATCHING = 0x01
+
+
+class EFI_IFR_SPAN(Structure):
+ _pack_ = 1
+ _fields_ = [
+ ("Header", EFI_IFR_OP_HEADER),
+ ("Flags", c_ubyte),
+ ]
+
+
+class EFI_IFR_VALUE(Structure):
+ _pack_ = 1
+ _fields_ = [
+ ("Header", EFI_IFR_OP_HEADER),
+ ]
+
+
+class EFI_IFR_DEFAULT(Structure):
+ _pack_ = 1
+ _fields_ = [
+ ("Header", EFI_IFR_OP_HEADER),
+ ("DefaultId", c_uint16),
+ ("Type", c_ubyte),
+ ("Value", EFI_IFR_TYPE_VALUE),
+ ]
+
+
+def Refine_EFI_IFR_DEFAULT(Type, Nums):
+ ValueType = TypeDict[Type]
+
+ class EFI_IFR_DEFAULT(Structure):
+ _pack_ = 1
+ _fields_ = [
+ ("Header", EFI_IFR_OP_HEADER),
+ ("DefaultId", c_uint16),
+ ("Type", c_ubyte),
+ ("Value", ARRAY(ValueType, Nums)),
+ ]
+
+ def __init__(self):
+ self.Header = EFI_IFR_OP_HEADER()
+
+ return EFI_IFR_DEFAULT()
+
+
+class EFI_IFR_DEFAULT_2(Structure):
+ _pack_ = 1
+ _fields_ = [
+ ("Header", EFI_IFR_OP_HEADER),
+ ("DefaultId", c_uint16),
+ ("Type", c_ubyte),
+ ]
+
+
+class EFI_IFR_FORM_MAP(Structure):
+ _pack_ = 1
+ _fields_ = [
+ ("Header", EFI_IFR_OP_HEADER),
+ ("FormId", c_uint16),
+ ]
+
+
+class EFI_IFR_FORM_MAP_METHOD(Structure):
+ _pack_ = 1
+ _fields_ = [
+ ("MethodTitle", c_uint16),
+ ("MethodIdentifier", EFI_GUID),
+ ]
+
+
+def Refine_EFI_IFR_FORM_MAP(Nums):
+ class EFI_IFR_FORM_MAP(Structure):
+ _pack_ = 1
+ _fields_ = [
+ ("Header", EFI_IFR_OP_HEADER),
+ ("FormId", c_uint16),
+ ("FormMapMethod", ARRAY(EFI_IFR_FORM_MAP_METHOD, Nums)),
+ ]
+
+ return EFI_IFR_FORM_MAP()
+
+
+class EFI_IFR_CATENATE(Structure):
+ _pack_ = 1
+ _fields_ = [
+ ("Header", EFI_IFR_OP_HEADER),
+ ]
+
+
+class EFI_IFR_SECURITY(Structure):
+ _pack_ = 1
+ _fields_ = [
+ ("Header", EFI_IFR_OP_HEADER),
+ ("Permissions", EFI_GUID),
+ ]
+
+
+class EFI_IFR_MODAL_TAG(Structure):
+ _pack_ = 1
+ _fields_ = [
+ ("Header", EFI_IFR_OP_HEADER),
+ ]
+
+
+class EFI_IFR_REFRESH_ID(Structure):
+ _pack_ = 1
+ _fields_ = [
+ ("Header", EFI_IFR_OP_HEADER),
+ ("RefreshEventGroupId", EFI_GUID),
+ ]
+
+
+class EFI_IFR_WARNING_IF(Structure):
+ _pack_ = 1
+ _fields_ = [
+ ("Header", EFI_IFR_OP_HEADER),
+ ("Warning", c_uint16),
+ ("TimeOut", c_ubyte),
+ ]
+
+
+class EFI_IFR_MATCH2(Structure):
+ _pack_ = 1
+ _fields_ = [
+ ("Header", EFI_IFR_OP_HEADER),
+ ("SyntaxType", EFI_GUID),
+ ]
+
+
+class EFI_HII_STRING_BLOCK(Structure):
+ _pack_ = 1
+ _fields_ = [
+ ("BlockType", c_uint8),
+ ]
+
+
+class EFI_HII_SIBT_STRING_SCSU_FONT_BLOCK(Structure):
+ _pack_ = 1
+ _fields_ = [
+ ("Header", EFI_HII_STRING_BLOCK),
+ ("FontIdentifier", c_uint8),
+ ("StringText", ARRAY(c_uint8, 2)),
+ ]
+
+
+class EFI_HII_SIBT_STRINGS_SCSU_BLOCK(Structure):
+ _pack_ = 1
+ _fields_ = [
+ ("Header", EFI_HII_STRING_BLOCK),
+ ("StringCount", c_uint16),
+ ("StringText", ARRAY(c_uint8, 2)),
+ ]
+
+
+class EFI_HII_SIBT_STRINGS_SCSU_FONT_BLOCK(Structure):
+ _pack_ = 1
+ _fields_ = [
+ ("Header", EFI_HII_STRING_BLOCK),
+ ("FontIdentifier", c_uint8),
+ ("StringCount", c_uint16),
+ ("StringText", ARRAY(c_uint8, 2)),
+ ]
+
+
+class EFI_HII_SIBT_STRING_UCS2_BLOCK(Structure):
+ _pack_ = 1
+ _fields_ = [
+ ("Header", EFI_HII_STRING_BLOCK),
+ ("StringText", ARRAY(c_ushort, 2)),
+ ]
+
+
+class EFI_HII_SIBT_STRING_UCS2_FONT_BLOCK(Structure):
+ _pack_ = 1
+ _fields_ = [
+ ("Header", EFI_HII_STRING_BLOCK),
+ ("FontIdentifier", c_uint8),
+ ("StringText", ARRAY(c_ushort, 2)),
+ ]
+
+
+class EFI_HII_SIBT_STRINGS_UCS2_BLOCK(Structure):
+ _pack_ = 1
+ _fields_ = [
+ ("Header", EFI_HII_STRING_BLOCK),
+ ("StringCount", c_uint16),
+ ("StringText", ARRAY(c_ushort, 2)),
+ ]
+
+
+class EFI_HII_SIBT_STRINGS_UCS2_FONT_BLOCK(Structure):
+ _pack_ = 1
+ _fields_ = [
+ ("Header", EFI_HII_STRING_BLOCK),
+ ("FontIdentifier", c_uint8),
+ ("StringCount", c_uint16),
+ ("StringText", ARRAY(c_ushort, 2)),
+ ]
+
+
+class EFI_HII_SIBT_DUPLICATE_BLOCK(Structure):
+ _pack_ = 1
+ _fields_ = [
+ ("Header", EFI_HII_STRING_BLOCK),
+ ("StringId", c_uint16),
+ ]
+
+
+class EFI_HII_SIBT_EXT1_BLOCK(Structure):
+ _pack_ = 1
+ _fields_ = [
+ ("Header", EFI_HII_STRING_BLOCK),
+ ("BlockType2", c_uint8),
+ ("Length", c_uint8),
+ ]
+
+
+class EFI_HII_SIBT_EXT2_BLOCK(Structure):
+ _pack_ = 1
+ _fields_ = [
+ ("Header", EFI_HII_STRING_BLOCK),
+ ("BlockType2", c_uint8),
+ ("Length", c_uint16),
+ ]
+
+
+class EFI_HII_SIBT_EXT4_BLOCK(Structure):
+ _pack_ = 1
+ _fields_ = [
+ ("Header", EFI_HII_STRING_BLOCK),
+ ("BlockType2", c_uint8),
+ ("Length", c_uint32),
+ ]
+
+
+class EFI_HII_SIBT_SKIP1_BLOCK(Structure):
+ _pack_ = 1
+ _fields_ = [
+ ("Header", EFI_HII_STRING_BLOCK),
+ ("SkipCount", c_uint8),
+ ]
+
+
+class EFI_HII_SIBT_SKIP2_BLOCK(Structure):
+ _pack_ = 1
+ _fields_ = [
+ ("Header", EFI_HII_STRING_BLOCK),
+ ("SkipCount", c_uint16),
+ ]
+
+
+EFI_IFR_FORM_OP = 0x01
+EFI_IFR_SUBTITLE_OP = 0x02
+EFI_IFR_TEXT_OP = 0x03
+EFI_IFR_IMAGE_OP = 0x04
+EFI_IFR_ONE_OF_OP = 0x05
+EFI_IFR_CHECKBOX_OP = 0x06
+EFI_IFR_NUMERIC_OP = 0x07
+EFI_IFR_PASSWORD_OP = 0x08
+EFI_IFR_ONE_OF_OPTION_OP = 0x09
+EFI_IFR_SUPPRESS_IF_OP = 0x0A
+EFI_IFR_LOCKED_OP = 0x0B
+EFI_IFR_ACTION_OP = 0x0C
+EFI_IFR_RESET_BUTTON_OP = 0x0D
+EFI_IFR_FORM_SET_OP = 0x0E
+EFI_IFR_REF_OP = 0x0F
+EFI_IFR_NO_SUBMIT_IF_OP = 0x10
+EFI_IFR_INCONSISTENT_IF_OP = 0x11
+EFI_IFR_EQ_ID_VAL_OP = 0x12
+EFI_IFR_EQ_ID_ID_OP = 0x13
+EFI_IFR_EQ_ID_VAL_LIST_OP = 0x14
+EFI_IFR_AND_OP = 0x15
+EFI_IFR_OR_OP = 0x16
+EFI_IFR_NOT_OP = 0x17
+EFI_IFR_RULE_OP = 0x18
+EFI_IFR_GRAY_OUT_IF_OP = 0x19
+EFI_IFR_DATE_OP = 0x1A
+EFI_IFR_TIME_OP = 0x1B
+EFI_IFR_STRING_OP = 0x1C
+EFI_IFR_REFRESH_OP = 0x1D
+EFI_IFR_DISABLE_IF_OP = 0x1E
+EFI_IFR_TO_LOWER_OP = 0x20
+EFI_IFR_TO_UPPER_OP = 0x21
+EFI_IFR_MAP_OP = 0x22
+EFI_IFR_ORDERED_LIST_OP = 0x23
+EFI_IFR_VARSTORE_OP = 0x24
+EFI_IFR_VARSTORE_NAME_VALUE_OP = 0x25
+EFI_IFR_VARSTORE_EFI_OP = 0x26
+EFI_IFR_VARSTORE_DEVICE_OP = 0x27
+EFI_IFR_VERSION_OP = 0x28
+EFI_IFR_END_OP = 0x29
+EFI_IFR_MATCH_OP = 0x2A
+EFI_IFR_GET_OP = 0x2B
+EFI_IFR_SET_OP = 0x2C
+EFI_IFR_READ_OP = 0x2D
+EFI_IFR_WRITE_OP = 0x2E
+EFI_IFR_EQUAL_OP = 0x2F
+EFI_IFR_NOT_EQUAL_OP = 0x30
+EFI_IFR_GREATER_THAN_OP = 0x31
+EFI_IFR_GREATER_EQUAL_OP = 0x32
+EFI_IFR_LESS_THAN_OP = 0x33
+EFI_IFR_LESS_EQUAL_OP = 0x34
+EFI_IFR_BITWISE_AND_OP = 0x35
+EFI_IFR_BITWISE_OR_OP = 0x36
+EFI_IFR_BITWISE_NOT_OP = 0x37
+EFI_IFR_SHIFT_LEFT_OP = 0x38
+EFI_IFR_SHIFT_RIGHT_OP = 0x39
+EFI_IFR_ADD_OP = 0x3A
+EFI_IFR_SUBTRACT_OP = 0x3B
+EFI_IFR_MULTIPLY_OP = 0x3C
+EFI_IFR_DIVIDE_OP = 0x3D
+EFI_IFR_MODULO_OP = 0x3E
+EFI_IFR_RULE_REF_OP = 0x3F
+EFI_IFR_QUESTION_REF1_OP = 0x40
+EFI_IFR_QUESTION_REF2_OP = 0x41
+EFI_IFR_UINT8_OP = 0x42
+EFI_IFR_UINT16_OP = 0x43
+EFI_IFR_UINT32_OP = 0x44
+EFI_IFR_UINT64_OP = 0x45
+EFI_IFR_TRUE_OP = 0x46
+EFI_IFR_FALSE_OP = 0x47
+EFI_IFR_TO_UINT_OP = 0x48
+EFI_IFR_TO_STRING_OP = 0x49
+EFI_IFR_TO_BOOLEAN_OP = 0x4A
+EFI_IFR_MID_OP = 0x4B
+EFI_IFR_FIND_OP = 0x4C
+EFI_IFR_TOKEN_OP = 0x4D
+EFI_IFR_STRING_REF1_OP = 0x4E
+EFI_IFR_STRING_REF2_OP = 0x4F
+EFI_IFR_CONDITIONAL_OP = 0x50
+EFI_IFR_QUESTION_REF3_OP = 0x51
+EFI_IFR_ZERO_OP = 0x52
+EFI_IFR_ONE_OP = 0x53
+EFI_IFR_ONES_OP = 0x54
+EFI_IFR_UNDEFINED_OP = 0x55
+EFI_IFR_LENGTH_OP = 0x56
+EFI_IFR_DUP_OP = 0x57
+EFI_IFR_THIS_OP = 0x58
+EFI_IFR_SPAN_OP = 0x59
+EFI_IFR_VALUE_OP = 0x5A
+EFI_IFR_DEFAULT_OP = 0x5B
+EFI_IFR_DEFAULTSTORE_OP = 0x5C
+EFI_IFR_FORM_MAP_OP = 0x5D
+EFI_IFR_CATENATE_OP = 0x5E
+EFI_IFR_GUID_OP = 0x5F
+EFI_IFR_SECURITY_OP = 0x60
+EFI_IFR_MODAL_TAG_OP = 0x61
+EFI_IFR_REFRESH_ID_OP = 0x62
+EFI_IFR_WARNING_IF_OP = 0x63
+EFI_IFR_MATCH2_OP = 0x64
+EFI_IFR_SHOWN_DEFAULTSTORE_OP = 0x65
+
+ConditionOps = [
+ EFI_IFR_DISABLE_IF_OP,
+ EFI_IFR_SUPPRESS_IF_OP,
+ EFI_IFR_GRAY_OUT_IF_OP,
+ EFI_IFR_INCONSISTENT_IF_OP,
+]
+BasicDataTypes = [
+ "UINT8",
+ "UINT16",
+ "UINT32",
+ "UINT64",
+ "EFI_HII_DATE",
+ "EFI_HII_TIME",
+ "EFI_HII_REF",
+]
+
+
+def Refine_EFI_IFR_GUID_OPTIONKEY(Type):
+ ValueType = TypeDict[Type]
+
+ class EFI_IFR_GUID_OPTIONKEY(Structure):
+ _pack_ = 1
+ _fields_ = [
+ ("Header", EFI_IFR_OP_HEADER),
+ ("Guid", EFI_GUID),
+ ("ExtendOpCode", c_uint8),
+ ("QuestionId", c_uint16),
+ ("OptionValue", ValueType),
+ ("KeyValue", c_uint16),
+ ]
+
+ return EFI_IFR_GUID_OPTIONKEY()
+
+
+EFI_IFR_EXTEND_OP_OPTIONKEY = 0x0
+EFI_IFR_EXTEND_OP_VAREQNAME = 0x1
+
+
+class EFI_COMPARE_TYPE(Enum):
+ EQUAL = 0
+ LESS_EQUAL = 1
+ LESS_THAN = 2
+ GREATER_THAN = 3
+ GREATER_EQUAL = 4
diff --git a/BaseTools/Source/Python/VfrCompiler/IfrError.py b/BaseTools/Source/Python/VfrCompiler/IfrError.py
new file mode 100644
index 0000000000..c50288e9e5
--- /dev/null
+++ b/BaseTools/Source/Python/VfrCompiler/IfrError.py
@@ -0,0 +1,153 @@
+## @file
+# VfrCompiler error handler.
+#
+# Copyright (c) 2022-, Intel Corporation. All rights reserved.<BR>
+# SPDX-License-Identifier: BSD-2-Clause-Patent
+##
+
+from enum import Enum
+from Common import EdkLogger
+from Common.BuildToolError import *
+
+
+class VfrReturnCode(Enum):
+ VFR_RETURN_SUCCESS = 0
+ VFR_RETURN_ERROR_SKIPED = 1
+ VFR_RETURN_FATAL_ERROR = 2
+ VFR_RETURN_MISMATCHED = 3
+ VFR_RETURN_INVALID_PARAMETER = 4
+ VFR_RETURN_OUT_FOR_RESOURCES = 5
+ VFR_RETURN_UNSUPPORTED = 6
+ VFR_RETURN_REDEFINED = 7
+ VFR_RETURN_FORMID_REDEFINED = 8
+ VFR_RETURN_QUESTIONID_REDEFINED = 9
+ VFR_RETURN_VARSTOREID_REDEFINED = 10
+ VFR_RETURN_UNDEFINED = 11
+ VFR_RETURN_VAR_NOTDEFINED_BY_QUESTION = 12
+ VFR_RETURN_VARSTORE_DATATYPE_REDEFINED_ERROR = 13
+ VFR_RETURN_GET_EFIVARSTORE_ERROR = 14
+ VFR_RETURN_EFIVARSTORE_USE_ERROR = 15
+ VFR_RETURN_EFIVARSTORE_SIZE_ERROR = 16
+ VFR_RETURN_GET_NVVARSTORE_ERROR = 17
+ VFR_RETURN_QVAR_REUSE = 18
+ VFR_RETURN_FLAGS_UNSUPPORTED = 19
+ VFR_RETURN_ERROR_ARRARY_NUM = 20
+ VFR_RETURN_DATA_STRING_ERROR = 21
+ VFR_RETURN_DEFAULT_VALUE_REDEFINED = 22
+ VFR_RETURN_CONSTANT_ONLY = 23
+ VFR_RETURN_VARSTORE_NAME_REDEFINED_ERROR = 24
+ VFR_RETURN_BIT_WIDTH_ERROR = 25
+ VFR_RETURN_STRING_TO_UINT_OVERFLOW = 26
+ VFR_RETURN_CODEUNDEFINED = 27
+
+
+vfrErrorMessage = {
+ VfrReturnCode.VFR_RETURN_SUCCESS: "",
+ VfrReturnCode.VFR_RETURN_ERROR_SKIPED: "",
+ VfrReturnCode.VFR_RETURN_FATAL_ERROR: "fatal error!!",
+ VfrReturnCode.VFR_RETURN_MISMATCHED: "unexpected token",
+ VfrReturnCode.VFR_RETURN_INVALID_PARAMETER: "invalid parameter",
+ VfrReturnCode.VFR_RETURN_OUT_FOR_RESOURCES: "system out of memory",
+ VfrReturnCode.VFR_RETURN_UNSUPPORTED: "unsupported",
+ VfrReturnCode.VFR_RETURN_REDEFINED: "already defined",
+ VfrReturnCode.VFR_RETURN_FORMID_REDEFINED: "form id already defined",
+ VfrReturnCode.VFR_RETURN_QUESTIONID_REDEFINED: "question id already defined",
+ VfrReturnCode.VFR_RETURN_VARSTOREID_REDEFINED: "varstore id already defined",
+ VfrReturnCode.VFR_RETURN_UNDEFINED: "undefined",
+ VfrReturnCode.VFR_RETURN_VAR_NOTDEFINED_BY_QUESTION: "some variable has not defined by a question",
+ VfrReturnCode.VFR_RETURN_VARSTORE_DATATYPE_REDEFINED_ERROR: "Data Structure is defined by more than one varstores: \
+ it can't be referred as varstore: only varstore name could be used.",
+ VfrReturnCode.VFR_RETURN_GET_EFIVARSTORE_ERROR: "get efi varstore error",
+ VfrReturnCode.VFR_RETURN_EFIVARSTORE_USE_ERROR: "can not use the efi varstore like this",
+ VfrReturnCode.VFR_RETURN_EFIVARSTORE_SIZE_ERROR: "unsupport efi varstore size should be <= 8 bytes",
+ VfrReturnCode.VFR_RETURN_GET_NVVARSTORE_ERROR: "get name value varstore error",
+ VfrReturnCode.VFR_RETURN_QVAR_REUSE: "variable reused by more than one question",
+ VfrReturnCode.VFR_RETURN_FLAGS_UNSUPPORTED: "flags unsupported",
+ VfrReturnCode.VFR_RETURN_ERROR_ARRARY_NUM: "array number error: the valid value is in \
+ (0 ~ MAX_INDEX-1 for UEFI vfr and in (1 ~ MAX_INDEX for Framework Vfr",
+ VfrReturnCode.VFR_RETURN_DATA_STRING_ERROR: "data field string error or not support",
+ VfrReturnCode.VFR_RETURN_DEFAULT_VALUE_REDEFINED: "default value re-defined with different value",
+ VfrReturnCode.VFR_RETURN_CONSTANT_ONLY: "only constant is allowed in the expression",
+ VfrReturnCode.VFR_RETURN_VARSTORE_NAME_REDEFINED_ERROR: "Varstore name is defined by more than one varstores: it can't be referred as varstore:\
+ only varstore structure name could be used.",
+ VfrReturnCode.VFR_RETURN_BIT_WIDTH_ERROR: "bit width must be <= sizeof (type * 8 and the max width can not > 32",
+ VfrReturnCode.VFR_RETURN_STRING_TO_UINT_OVERFLOW: "String to UINT* Overflow",
+ VfrReturnCode.VFR_RETURN_CODEUNDEFINED: "undefined Error Code",
+}
+
+
+class EFI_VFR_WARNING_CODE(Enum):
+ VFR_WARNING_DEFAULT_VALUE_REDEFINED = 0
+ VFR_WARNING_ACTION_WITH_TEXT_TWO = 1
+ VFR_WARNING_OBSOLETED_FRAMEWORK_OPCODE = 2
+ VFR_WARNING_CODEUNDEFINED = 3
+
+
+vfrWarningMessage = {
+ EFI_VFR_WARNING_CODE.VFR_WARNING_DEFAULT_VALUE_REDEFINED: ": default value re-defined with different value",
+ EFI_VFR_WARNING_CODE.VFR_WARNING_ACTION_WITH_TEXT_TWO: ": Action opcode should not have TextTwo part",
+ EFI_VFR_WARNING_CODE.VFR_WARNING_OBSOLETED_FRAMEWORK_OPCODE: ": Not recommend to use obsoleted framework opcode",
+ EFI_VFR_WARNING_CODE.VFR_WARNING_CODEUNDEFINED: ": undefined Warning Code",
+}
+
+
+class VfrErrorHandle:
+ def __init__(self):
+ self.InputFileName = None
+ self.vfrErrorMessage = vfrErrorMessage
+ self.vfrWarningMessage = vfrWarningMessage
+ self.WarningAsError = False
+
+ def SetWarningAsError(self, WarningAsError):
+ self.WarningAsError = WarningAsError
+
+ def SetInputFile(self, InputFile):
+ self.InputFileName = InputFile
+
+ def HandleWarning(self, WarningCode, LineNum=None, TokenValue=None):
+ if self.vfrWarningMessage is None:
+ return 1
+ WarningMsg = ""
+ for key in self.vfrWarningMessage.keys():
+ if WarningCode == self.vfrWarningMessage[key]:
+ WarningMsg = self.vfrWarningMessage[key]
+ break
+ if WarningMsg != "":
+ if self.WarningAsError:
+ EdkLogger.error(
+ "VfrCompiler",
+ WarningCode.value,
+ WarningMsg,
+ self.InputFileName,
+ LineNum,
+ "warning treated as error",
+ )
+ EdkLogger.warn(
+ "VfrCompiler", WarningCode.value, self.InputFileName, LineNum, TokenValue
+ )
+
+ def PrintMsg(self, LineNum, MsgType="Error", ErrorMsg=None, TokenValue=None):
+ if MsgType == "Warning":
+ EdkLogger.verbose(ErrorMsg)
+ else:
+ EdkLogger.error(
+ "VfrCompiler", FORMAT_INVALID, ErrorMsg, self.InputFileName, LineNum, TokenValue
+ )
+
+ def HandleError(self, ErrorCode, LineNum=None, TokenValue=None):
+ if self.vfrErrorMessage is None:
+ return 1
+ ErrorMsg = ""
+ for Key in self.vfrErrorMessage.keys():
+ if ErrorCode == Key:
+ ErrorMsg = self.vfrErrorMessage[Key]
+ break
+ if ErrorMsg != "":
+ EdkLogger.error(
+ "VfrCompiler", ErrorCode.value, ErrorMsg, self.InputFileName, LineNum, TokenValue
+ )
+ return 1
+ return 0
+
+
+gVfrErrorHandle = VfrErrorHandle()
diff --git a/BaseTools/Source/Python/VfrCompiler/IfrFormPkg.py b/BaseTools/Source/Python/VfrCompiler/IfrFormPkg.py
new file mode 100644
index 0000000000..35f50b0cef
--- /dev/null
+++ b/BaseTools/Source/Python/VfrCompiler/IfrFormPkg.py
@@ -0,0 +1,2937 @@
+## @file
+# The definition of FormPkg's member function
+#
+# Copyright (c) 2022-, Intel Corporation. All rights reserved.<BR>
+# SPDX-License-Identifier: BSD-2-Clause-Patent
+##
+
+from VfrCompiler.IfrCtypes import *
+from VfrCompiler.IfrUtility import *
+from VfrCompiler.IfrError import VfrReturnCode
+
+gVfrVarDataTypeDB = VfrVarDataTypeDB()
+gVfrDefaultStore = VfrDefaultStore()
+gVfrDataStorage = VfrDataStorage()
+
+
+class OpNode:
+ def __init__(self, Size, Scope):
+ self.Size = Size
+ self.Scope = Scope
+
+
+gOpcodeSizesScopeTable = [
+ OpNode(0, 0), # EFI_IFR_INVALID - 0x00
+ OpNode(sizeof(EFI_IFR_FORM), 1), # EFI_IFR_FORM_OP
+ OpNode(sizeof(EFI_IFR_SUBTITLE), 1), # EFI_IFR_SUBTITLE_OP
+ OpNode(sizeof(EFI_IFR_TEXT), 0), # EFI_IFR_TEXT_OP
+ OpNode(sizeof(EFI_IFR_IMAGE), 0), # EFI_IFR_IMAGE_OP
+ OpNode(sizeof(EFI_IFR_ONE_OF), 1), # EFI_IFR_ONE_OF_OP - 0x05
+ OpNode(sizeof(EFI_IFR_CHECKBOX), 1), # EFI_IFR_CHECKBOX_OP
+ OpNode(sizeof(EFI_IFR_NUMERIC), 1), # EFI_IFR_NUMERIC_OP
+ OpNode(sizeof(EFI_IFR_PASSWORD), 1), # EFI_IFR_PASSWORD_OP
+ OpNode(sizeof(EFI_IFR_ONE_OF_OPTION), 0), # EFI_IFR_ONE_OF_OPTION_OP
+ OpNode(sizeof(EFI_IFR_SUPPRESS_IF), 1), # EFI_IFR_SUPPRESS_IF - 0x0A
+ OpNode(sizeof(EFI_IFR_LOCKED), 0), # EFI_IFR_LOCKED_OP
+ OpNode(sizeof(EFI_IFR_ACTION), 1), # EFI_IFR_ACTION_OP
+ OpNode(sizeof(EFI_IFR_RESET_BUTTON), 1), # EFI_IFR_RESET_BUTTON_OP
+ OpNode(sizeof(EFI_IFR_FORM_SET), 1), # EFI_IFR_FORM_SET_OP -0xE
+ OpNode(sizeof(EFI_IFR_REF), 0), # EFI_IFR_REF_OP
+ OpNode(sizeof(EFI_IFR_NO_SUBMIT_IF), 1), # EFI_IFR_NO_SUBMIT_IF_OP -0x10
+ OpNode(sizeof(EFI_IFR_INCONSISTENT_IF), 1), # EFI_IFR_INCONSISTENT_IF_OP
+ OpNode(sizeof(EFI_IFR_EQ_ID_VAL), 0), # EFI_IFR_EQ_ID_VAL_OP
+ OpNode(sizeof(EFI_IFR_EQ_ID_ID), 0), # EFI_IFR_EQ_ID_ID_OP
+ OpNode(sizeof(EFI_IFR_EQ_ID_VAL_LIST), 0), # EFI_IFR_EQ_ID_LIST_OP - 0x14
+ OpNode(sizeof(EFI_IFR_AND), 0), # EFI_IFR_AND_OP
+ OpNode(sizeof(EFI_IFR_OR), 0), # EFI_IFR_OR_OP
+ OpNode(sizeof(EFI_IFR_NOT), 0), # EFI_IFR_NOT_OP
+ OpNode(sizeof(EFI_IFR_RULE), 1), # EFI_IFR_RULE_OP
+ OpNode(sizeof(EFI_IFR_GRAY_OUT_IF), 1), # EFI_IFR_GRAYOUT_IF_OP - 0x19
+ OpNode(sizeof(EFI_IFR_DATE), 1), # EFI_IFR_DATE_OP
+ OpNode(sizeof(EFI_IFR_TIME), 1), # EFI_IFR_TIME_OP
+ OpNode(sizeof(EFI_IFR_STRING), 1), # EFI_IFR_STRING_OP
+ OpNode(sizeof(EFI_IFR_REFRESH), 0), # EFI_IFR_REFRESH_OP
+ OpNode(sizeof(EFI_IFR_DISABLE_IF), 1), # EFI_IFR_DISABLE_IF_OP - 0x1E
+ OpNode(0, 0), # 0x1F
+ OpNode(sizeof(EFI_IFR_TO_LOWER), 0), # EFI_IFR_TO_LOWER_OP - 0x20
+ OpNode(sizeof(EFI_IFR_TO_UPPER), 0), # EFI_IFR_TO_UPPER_OP - 0x21
+ OpNode(sizeof(EFI_IFR_MAP), 1), # EFI_IFR_MAP - 0x22
+ OpNode(sizeof(EFI_IFR_ORDERED_LIST), 1), # EFI_IFR_ORDERED_LIST_OP - 0x23
+ OpNode(sizeof(EFI_IFR_VARSTORE), 0), # EFI_IFR_VARSTORE_OP
+ OpNode(sizeof(EFI_IFR_VARSTORE_NAME_VALUE), 0), # EFI_IFR_VARSTORE_NAME_VALUE_OP
+ OpNode(sizeof(EFI_IFR_VARSTORE_EFI), 0), # EFI_IFR_VARSTORE_EFI_OP
+ OpNode(sizeof(EFI_IFR_VARSTORE_DEVICE), 1), # EFI_IFR_VARSTORE_DEVICE_OP
+ OpNode(sizeof(EFI_IFR_VERSION), 0), # EFI_IFR_VERSION_OP - 0x28
+ OpNode(sizeof(EFI_IFR_END), 0), # EFI_IFR_END_OP
+ OpNode(sizeof(EFI_IFR_MATCH), 0), # EFI_IFR_MATCH_OP - 0x2A
+ OpNode(sizeof(EFI_IFR_GET), 0), # EFI_IFR_GET - 0x2B
+ OpNode(sizeof(EFI_IFR_SET), 0), # EFI_IFR_SET - 0x2C
+ OpNode(sizeof(EFI_IFR_READ), 0), # EFI_IFR_READ - 0x2D
+ OpNode(sizeof(EFI_IFR_WRITE), 0), # EFI_IFR_WRITE - 0x2E
+ OpNode(sizeof(EFI_IFR_EQUAL), 0), # EFI_IFR_EQUAL_OP - 0x2F
+ OpNode(sizeof(EFI_IFR_NOT_EQUAL), 0), # EFI_IFR_NOT_EQUAL_OP
+ OpNode(sizeof(EFI_IFR_GREATER_THAN), 0), # EFI_IFR_GREATER_THAN_OP
+ OpNode(sizeof(EFI_IFR_GREATER_EQUAL), 0), # EFI_IFR_GREATER_EQUAL_OP
+ OpNode(sizeof(EFI_IFR_LESS_THAN), 0), # EFI_IFR_LESS_THAN_OP
+ OpNode(sizeof(EFI_IFR_LESS_EQUAL), 0), # EFI_IFR_LESS_EQUAL_OP - 0x34
+ OpNode(sizeof(EFI_IFR_BITWISE_AND), 0), # EFI_IFR_BITWISE_AND_OP
+ OpNode(sizeof(EFI_IFR_BITWISE_OR), 0), # EFI_IFR_BITWISE_OR_OP
+ OpNode(sizeof(EFI_IFR_BITWISE_NOT), 0), # EFI_IFR_BITWISE_NOT_OP
+ OpNode(sizeof(EFI_IFR_SHIFT_LEFT), 0), # EFI_IFR_SHIFT_LEFT_OP
+ OpNode(sizeof(EFI_IFR_SHIFT_RIGHT), 0), # EFI_IFR_SHIFT_RIGHT_OP
+ OpNode(sizeof(EFI_IFR_ADD), 0), # EFI_IFR_ADD_OP - 0x3A
+ OpNode(sizeof(EFI_IFR_SUBTRACT), 0), # EFI_IFR_SUBTRACT_OP
+ OpNode(sizeof(EFI_IFR_MULTIPLY), 0), # EFI_IFR_MULTIPLY_OP
+ OpNode(sizeof(EFI_IFR_DIVIDE), 0), # EFI_IFR_DIVIDE_OP
+ OpNode(sizeof(EFI_IFR_MODULO), 0), # EFI_IFR_MODULO_OP - 0x3E
+ OpNode(sizeof(EFI_IFR_RULE_REF), 0), # EFI_IFR_RULE_REF_OP
+ OpNode(sizeof(EFI_IFR_QUESTION_REF1), 0), # EFI_IFR_QUESTION_REF1_OP
+ OpNode(sizeof(EFI_IFR_QUESTION_REF2), 0), # EFI_IFR_QUESTION_REF2_OP - 0x41
+ OpNode(sizeof(EFI_IFR_UINT8), 0), # EFI_IFR_UINT8
+ OpNode(sizeof(EFI_IFR_UINT16), 0), # EFI_IFR_UINT16
+ OpNode(sizeof(EFI_IFR_UINT32), 0), # EFI_IFR_UINT32
+ OpNode(sizeof(EFI_IFR_UINT64), 0), # EFI_IFR_UTNT64
+ OpNode(sizeof(EFI_IFR_TRUE), 0), # EFI_IFR_TRUE_OP - 0x46
+ OpNode(sizeof(EFI_IFR_FALSE), 0), # EFI_IFR_FALSE_OP
+ OpNode(sizeof(EFI_IFR_TO_UINT), 0), # EFI_IFR_TO_UINT_OP
+ OpNode(sizeof(EFI_IFR_TO_STRING), 0), # EFI_IFR_TO_STRING_OP
+ OpNode(sizeof(EFI_IFR_TO_BOOLEAN), 0), # EFI_IFR_TO_BOOLEAN_OP
+ OpNode(sizeof(EFI_IFR_MID), 0), # EFI_IFR_MID_OP
+ OpNode(sizeof(EFI_IFR_FIND), 0), # EFI_IFR_FIND_OP
+ OpNode(sizeof(EFI_IFR_TOKEN), 0), # EFI_IFR_TOKEN_OP
+ OpNode(sizeof(EFI_IFR_STRING_REF1), 0), # EFI_IFR_STRING_REF1_OP - 0x4E
+ OpNode(sizeof(EFI_IFR_STRING_REF2), 0), # EFI_IFR_STRING_REF2_OP
+ OpNode(sizeof(EFI_IFR_CONDITIONAL), 0), # EFI_IFR_CONDITIONAL_OP
+ OpNode(sizeof(EFI_IFR_QUESTION_REF3), 0), # EFI_IFR_QUESTION_REF3_OP
+ OpNode(sizeof(EFI_IFR_ZERO), 0), # EFI_IFR_ZERO_OP
+ OpNode(sizeof(EFI_IFR_ONE), 0), # EFI_IFR_ONE_OP
+ OpNode(sizeof(EFI_IFR_ONES), 0), # EFI_IFR_ONES_OP
+ OpNode(sizeof(EFI_IFR_UNDEFINED), 0), # EFI_IFR_UNDEFINED_OP
+ OpNode(sizeof(EFI_IFR_LENGTH), 0), # EFI_IFR_LENGTH_OP
+ OpNode(sizeof(EFI_IFR_DUP), 0), # EFI_IFR_DUP_OP - 0x57
+ OpNode(sizeof(EFI_IFR_THIS), 0), # EFI_IFR_THIS_OP
+ OpNode(sizeof(EFI_IFR_SPAN), 0), # EFI_IFR_SPAN_OP
+ OpNode(sizeof(EFI_IFR_VALUE), 1), # EFI_IFR_VALUE_OP
+ OpNode(sizeof(EFI_IFR_DEFAULT), 0), # EFI_IFR_DEFAULT_OP
+ OpNode(sizeof(EFI_IFR_DEFAULTSTORE), 0), # EFI_IFR_DEFAULTSTORE_OP - 0x5C
+ OpNode(sizeof(EFI_IFR_FORM_MAP), 1), # EFI_IFR_FORM_MAP_OP - 0x5D
+ OpNode(sizeof(EFI_IFR_CATENATE), 0), # EFI_IFR_CATENATE_OP
+ OpNode(sizeof(EFI_IFR_GUID), 0), # EFI_IFR_GUID_OP
+ OpNode(sizeof(EFI_IFR_SECURITY), 0), # EFI_IFR_SECURITY_OP - 0x60
+ OpNode(sizeof(EFI_IFR_MODAL_TAG), 0), # EFI_IFR_MODAL_TAG_OP - 0x61
+ OpNode(sizeof(EFI_IFR_REFRESH_ID), 0), # EFI_IFR_REFRESH_ID_OP - 0x62
+ OpNode(sizeof(EFI_IFR_WARNING_IF), 1), # EFI_IFR_WARNING_IF_OP - 0x63
+ OpNode(sizeof(EFI_IFR_MATCH2), 0),
+]
+
+
+class OpBufferNode:
+ def __init__(self, Buffer=None, Next=None):
+ self.Buffer = Buffer
+ self.Next = Next
+
+
+class ASSIGN_FLAG(Enum):
+ PENDING = 1
+ ASSIGNED = 2
+
+
+VALUE_TYPE_ONE = 1
+VALUE_TYPE_TWO = 2
+
+
+class SPendingAssign:
+ def __init__(self, Key, ValAddr, LineNo, Msg, Type=0):
+ self.Key = Key
+ self.Addr = ValAddr
+ self.Flag = ASSIGN_FLAG.PENDING
+ self.LineNo = LineNo
+ self.Msg = Msg
+ self.Type = Type
+ self.Next = None
+
+ def AssignValue(self, Val):
+ if self.Type == VALUE_TYPE_ONE:
+ self.Addr.QuestionId1 = Val
+ elif self.Type == VALUE_TYPE_TWO:
+ self.Addr.QuestionId2 = Val
+ else:
+ self.Addr.QuestionId = Val
+
+ self.Flag = ASSIGN_FLAG.ASSIGNED
+
+
+class InsertOpNode:
+ def __init__(self, Data, OpCode):
+ self.Data = Data
+ self.OpCode = OpCode
+
+
+class FormPkg:
+ def __init__(self):
+ self.PkgLength = 0
+ self.Offset = 0
+ self.PendingAssignList = None
+
+ def Clear(self):
+ self.PkgLength = 0
+ self.Offset = 0
+ self.PendingAssignList = None
+
+ def BuildPkgHdr(self):
+ PkgHdr = EFI_HII_PACKAGE_HEADER()
+ PkgHdr.Type = EFI_HII_PACKAGE_FORM
+ PkgHdr.Length = self.PkgLength + sizeof(EFI_HII_PACKAGE_HEADER)
+ return PkgHdr
+
+ def BuildPkg(self, Root):
+ if Root is None:
+ return
+ if Root.OpCode is not None and Root.OpCode != EFI_IFR_SHOWN_DEFAULTSTORE_OP:
+ self.PkgLength += Root.Data.GetInfo().Header.Length
+ Root.Offset = gFormPkg.Offset
+ self.Offset += Root.Data.GetInfo().Header.Length
+ if Root.Child != []:
+ for ChildNode in Root.Child:
+ self.BuildPkg(ChildNode)
+
+ # Get data from ctypes to bytes.
+ def StructToStream(self, Struct) -> bytes:
+ Length = sizeof(Struct)
+ P = cast(pointer(Struct), POINTER(c_char * Length))
+ return P.contents.raw
+
+ def AssignPending(self, Key, VarAddr, LineNo, Msg, Type=0):
+ pNew = SPendingAssign(Key, VarAddr, LineNo, Msg, Type)
+ if pNew is None:
+ return VfrReturnCode.VFR_RETURN_OUT_FOR_RESOURCES
+ pNew.Next = self.PendingAssignList
+ self.PendingAssignList = pNew
+ return VfrReturnCode.VFR_RETURN_SUCCESS
+
+ def DoPendingAssign(self, Key, Val):
+ if Key is None or Val is None:
+ return
+ pNode = self.PendingAssignList
+ while pNode is not None:
+ if pNode.Key == Key:
+ pNode.AssignValue(Val)
+ pNode = pNode.Next
+
+ def HavePendingUnassigned(self):
+ pNode = self.PendingAssignList
+ while pNode is not None:
+ if pNode.Flag == ASSIGN_FLAG.PENDING:
+ return True
+ pNode = pNode.Next
+
+ return False
+
+ def PendingAssignPrintAll(self):
+ pNode = self.PendingAssignList
+ while pNode is not None:
+ if pNode.Flag == ASSIGN_FLAG.PENDING:
+ gVfrErrorHandle.PrintMsg(pNode.LineNo, "Error", pNode.Msg, pNode.Key)
+ pNode = pNode.Next
+
+ def DeclarePendingQuestion(
+ self,
+ lVfrVarDataTypeDB: VfrVarDataTypeDB,
+ lVfrDataStorage: VfrDataStorage,
+ lVfrQuestionDB: VfrQuestionDB,
+ LineNo=None,
+ ):
+ # Declare all questions as Numeric in DisableIf True
+ ReturnList = []
+ GuidObj = None
+ DIObj = IfrDisableIf()
+ DIObj.SetLineNo(LineNo)
+ ReturnList.append(InsertOpNode(DIObj, EFI_IFR_DISABLE_IF_OP))
+ # TrueOpcode
+ TObj = IfrTrue(LineNo)
+ ReturnList.append(InsertOpNode(TObj, EFI_IFR_TRUE_OP))
+ pNode = self.PendingAssignList
+ while pNode is not None:
+ if pNode.Flag == ASSIGN_FLAG.PENDING:
+ Info = EFI_VARSTORE_INFO()
+ VarStr = pNode.Key
+ QId, ReturnCode = lVfrQuestionDB.RegisterQuestion(
+ None, VarStr, EFI_QUESTION_ID_INVALID, gFormPkg
+ )
+ if ReturnCode != VfrReturnCode.VFR_RETURN_SUCCESS:
+ gVfrErrorHandle.HandleError(ReturnCode, pNode.LineNo, pNode.Key)
+ return ReturnList, ReturnCode
+ # ifdef VFREXP_DEBUG
+ # printf("Undefined Question name is %s and Id is 0x%x\n", VarStr, QId);
+ # endif
+ # Get Question Info, framework vfr VarName == StructName
+ ArrayIdx, s, FName, ReturnCode = lVfrVarDataTypeDB.ExtractFieldNameAndArrary(
+ VarStr, 0
+ )
+ if ReturnCode != VfrReturnCode.VFR_RETURN_SUCCESS:
+ gVfrErrorHandle.PrintMsg(
+ pNode.LineNo, "Error", "Var string is not the valid C variable", pNode.Key
+ )
+ return ReturnList, ReturnCode
+
+ # Get VarStoreType
+ Info.VarStoreId, ReturnCode = lVfrDataStorage.GetVarStoreId(FName)
+
+ if ReturnCode != VfrReturnCode.VFR_RETURN_SUCCESS:
+ gVfrErrorHandle.PrintMsg(
+ pNode.LineNo, "Error", "Var Store Type is not defined", FName
+ )
+ return ReturnList, ReturnCode
+
+ VarStoreType = lVfrDataStorage.GetVarStoreType(Info.VarStoreId)
+ if s == len(VarStr) and ArrayIdx != INVALID_ARRAY_INDEX:
+ ReturnCode = lVfrDataStorage.GetNameVarStoreInfo(Info, ArrayIdx)
+ else:
+ if VarStoreType == EFI_VFR_VARSTORE_TYPE.EFI_VFR_VARSTORE_EFI:
+ ReturnCode = lVfrDataStorage.GetEfiVarStoreInfo(Info)
+ elif (
+ VarStoreType == EFI_VFR_VARSTORE_TYPE.EFI_VFR_VARSTORE_BUFFER
+ or VarStoreType == EFI_VFR_VARSTORE_TYPE.EFI_VFR_VARSTORE_BUFFER_BITS
+ ):
+ VarStr = pNode.Key
+ SName, ReturnCode = lVfrDataStorage.GetBufferVarStoreDataTypeName(
+ Info.VarStoreId
+ )
+ if ReturnCode == VfrReturnCode.VFR_RETURN_SUCCESS:
+ NewStr = SName + "." + VarStr[s:]
+ (
+ Info.Info.VarOffset,
+ Info.VarType,
+ Info.VarTotalSize,
+ Info.IsBitVar,
+ ReturnCode,
+ ) = lVfrVarDataTypeDB.GetDataFieldInfo(NewStr)
+ else:
+ ReturnCode = VfrReturnCode.VFR_RETURN_UNSUPPORTED
+
+ if ReturnCode != VfrReturnCode.VFR_RETURN_SUCCESS:
+ gVfrErrorHandle.HandleError(ReturnCode, pNode.LineNo, pNode.Key)
+ # If the storage is bit fields, create Guid opcode to wrap the numeric opcode.
+ if Info.IsBitVar:
+ GuidObj = IfrGuid(0)
+ GuidObj.SetGuid(EDKII_IFR_BIT_VARSTORE_GUID)
+ GuidObj.SetLineNo(LineNo)
+ ReturnList.append(InsertOpNode(GuidObj, EFI_IFR_GUID_OP))
+
+ if Info.IsBitVar:
+ Info.VarType = EFI_IFR_TYPE_NUM_SIZE_32
+
+ # Numeric doesn't support BOOLEAN data type.
+ # BOOLEAN type has the same data size to UINT8.
+ elif Info.VarType == EFI_IFR_TYPE_BOOLEAN:
+ Info.VarType = EFI_IFR_TYPE_NUM_SIZE_8
+
+ CNObj = IfrNumeric(Info.VarType)
+ CNObj.SetLineNo(LineNo)
+ CNObj.SetPrompt(0x0)
+ CNObj.SetHelp(0x0)
+ CNObj.SetQuestionId(QId)
+ CNObj.SetVarStoreInfo(Info)
+ ReturnList.append(InsertOpNode(CNObj, EFI_IFR_GUID_OP))
+
+ if Info.IsBitVar:
+ MaxValue = (1 << Info.VarTotalSize) - 1
+ CNObj.SetMinMaxStepData(0, MaxValue, 0)
+ LFlags = EDKII_IFR_NUMERIC_SIZE_BIT & Info.VarTotalSize
+ CNObj.SetFlagsForBitField(0, LFlags)
+ else:
+ CNObj.SetFlags(0, Info.VarType)
+ CNObj.SetMinMaxStepData(0, -1, 0)
+
+ if VarStoreType == EFI_VFR_VARSTORE_TYPE.EFI_VFR_VARSTORE_EFI:
+ VNObj = IfrVarEqName(QId, Info.Info.VarName)
+ VNObj.SetLineNo(LineNo)
+ ReturnList.append(InsertOpNode(VNObj, EFI_IFR_GUID_OP))
+
+ CEObj = IfrEnd()
+ CEObj.SetLineNo(LineNo)
+ ReturnList.append(InsertOpNode(CEObj, EFI_IFR_END_OP))
+
+ if GuidObj is not None:
+ CEObjGuid = IfrEnd()
+ CEObjGuid.SetLineNo(LineNo)
+ ReturnList.append(InsertOpNode(CEObjGuid, EFI_IFR_END_OP))
+ GuidObj.SetScope(1)
+ GuidObj = None
+ pNode = pNode.Next
+
+ SEObj = IfrEnd()
+ SEObj.SetLineNo(LineNo)
+ ReturnList.append(InsertOpNode(SEObj, EFI_IFR_END_OP))
+ return ReturnList, VfrReturnCode.VFR_RETURN_SUCCESS
+
+
+gFormPkg = FormPkg()
+gCreateOp = True
+
+gIfrObjPrintDebugTable = [
+ "EFI_IFR_INVALID",
+ "EFI_IFR_FORM",
+ "EFI_IFR_SUBTITLE",
+ "EFI_IFR_TEXT",
+ "EFI_IFR_IMAGE",
+ "EFI_IFR_ONE_OF",
+ "EFI_IFR_CHECKBOX",
+ "EFI_IFR_NUMERIC",
+ "EFI_IFR_PASSWORD",
+ "EFI_IFR_ONE_OF_OPTION",
+ "EFI_IFR_SUPPRESS_IF",
+ "EFI_IFR_LOCKED",
+ "EFI_IFR_ACTION",
+ "EFI_IFR_RESET_BUTTON",
+ "EFI_IFR_FORM_SET",
+ "EFI_IFR_REF",
+ "EFI_IFR_NO_SUBMIT_IF",
+ "EFI_IFR_INCONSISTENT_IF",
+ "EFI_IFR_EQ_ID_VAL",
+ "EFI_IFR_EQ_ID_ID",
+ "EFI_IFR_EQ_ID_LIST",
+ "EFI_IFR_AND",
+ "EFI_IFR_OR",
+ "EFI_IFR_NOT",
+ "EFI_IFR_RULE",
+ "EFI_IFR_GRAY_OUT_IF",
+ "EFI_IFR_DATE",
+ "EFI_IFR_TIME",
+ "EFI_IFR_STRING",
+ "EFI_IFR_REFRESH",
+ "EFI_IFR_DISABLE_IF",
+ "EFI_IFR_INVALID",
+ "EFI_IFR_TO_LOWER",
+ "EFI_IFR_TO_UPPER",
+ "EFI_IFR_MAP",
+ "EFI_IFR_ORDERED_LIST",
+ "EFI_IFR_VARSTORE",
+ "EFI_IFR_VARSTORE_NAME_VALUE",
+ "EFI_IFR_VARSTORE_EFI",
+ "EFI_IFR_VARSTORE_DEVICE",
+ "EFI_IFR_VERSION",
+ "EFI_IFR_END",
+ "EFI_IFR_MATCH",
+ "EFI_IFR_GET",
+ "EFI_IFR_SET",
+ "EFI_IFR_READ",
+ "EFI_IFR_WRITE",
+ "EFI_IFR_EQUAL",
+ "EFI_IFR_NOT_EQUAL",
+ "EFI_IFR_GREATER_THAN",
+ "EFI_IFR_GREATER_EQUAL",
+ "EFI_IFR_LESS_THAN",
+ "EFI_IFR_LESS_EQUAL",
+ "EFI_IFR_BITWISE_AND",
+ "EFI_IFR_BITWISE_OR",
+ "EFI_IFR_BITWISE_NOT",
+ "EFI_IFR_SHIFT_LEFT",
+ "EFI_IFR_SHIFT_RIGHT",
+ "EFI_IFR_ADD",
+ "EFI_IFR_SUBTRACT",
+ "EFI_IFR_MULTIPLY",
+ "EFI_IFR_DIVIDE",
+ "EFI_IFR_MODULO",
+ "EFI_IFR_RULE_REF",
+ "EFI_IFR_QUESTION_REF1",
+ "EFI_IFR_QUESTION_REF2",
+ "EFI_IFR_UINT8",
+ "EFI_IFR_UINT16",
+ "EFI_IFR_UINT32",
+ "EFI_IFR_UINT64",
+ "EFI_IFR_TRUE",
+ "EFI_IFR_FALSE",
+ "EFI_IFR_TO_UINT",
+ "EFI_IFR_TO_STRING",
+ "EFI_IFR_TO_BOOLEAN",
+ "EFI_IFR_MID",
+ "EFI_IFR_FIND",
+ "EFI_IFR_TOKEN",
+ "EFI_IFR_STRING_REF1",
+ "EFI_IFR_STRING_REF2",
+ "EFI_IFR_CONDITIONAL",
+ "EFI_IFR_QUESTION_REF3",
+ "EFI_IFR_ZERO",
+ "EFI_IFR_ONE",
+ "EFI_IFR_ONES",
+ "EFI_IFR_UNDEFINED",
+ "EFI_IFR_LENGTH",
+ "EFI_IFR_DUP",
+ "EFI_IFR_THIS",
+ "EFI_IFR_SPAN",
+ "EFI_IFR_VALUE",
+ "EFI_IFR_DEFAULT",
+ "EFI_IFR_DEFAULTSTORE",
+ "EFI_IFR_FORM_MAP",
+ "EFI_IFR_CATENATE",
+ "EFI_IFR_GUID",
+ "EFI_IFR_SECURITY",
+ "EFI_IFR_MODAL_TAG",
+ "EFI_IFR_REFRESH_ID",
+ "EFI_IFR_WARNING_IF",
+ "EFI_IFR_MATCH2",
+]
+
+gScopeCount = 0
+gIsOrderedList = False
+gIsStringOp = False
+gCurrentMinMaxData = None
+
+
+class IfrLine:
+ def __init__(self, LineNo=0):
+ self.LineNo = LineNo
+
+ def SetLineNo(self, LineNo):
+ self.LineNo = LineNo
+
+ def GetLineNo(self):
+ return self.LineNo
+
+
+class IfrBaseInfo:
+ def __init__(self, Obj=None, QName=None, VarIdStr=""):
+ self.Obj = Obj
+ self.QName = QName
+ self.VarIdStr = VarIdStr
+
+ self.FlagsStream = ""
+ self.HasKey = False
+ self.HasQuestionId = False
+
+ def SetQName(self, QName):
+ self.QName = QName
+
+ def SetVarIdStr(self, VarIdStr):
+ self.VarIdStr = VarIdStr
+
+ def SetFlagsStream(self, FlagsStream):
+ self.FlagsStream = FlagsStream
+
+ def SetHasKey(self, HasKey):
+ self.HasKey = HasKey
+
+ def SetHasQuestionId(self, HasQuestionId):
+ self.HasQuestionId = HasQuestionId
+
+ def GetInfo(self):
+ return self.Obj
+
+
+class IfrOpHeader:
+ def __init__(self, OpHeader: EFI_IFR_OP_HEADER, OpCode=None, Length=0):
+ self.OpHeader = OpHeader
+ if OpCode is not None:
+ self.OpHeader.OpCode = OpCode
+
+ self.OpHeader.Length = gOpcodeSizesScopeTable[OpCode].Size if Length == 0 else Length
+ self.OpHeader.Scope = (
+ 1 if (gOpcodeSizesScopeTable[OpCode].Scope + gScopeCount > 0) else 0
+ )
+
+ def GetLength(self):
+ return self.OpHeader.Length
+
+ def SetScope(self, Scope):
+ self.OpHeader.Scope = Scope
+
+ def UpdateHeader(self, Header):
+ self.OpHeader = Header
+
+ def IncLength(self, Size):
+ self.OpHeader.Length += Size
+
+ def DecLength(self, Size):
+ self.OpHeader.Length -= Size
+
+ def AdjustLength(self, BeforeSize, AfterSize):
+ self.OpHeader.Length -= BeforeSize
+ self.OpHeader.Length += AfterSize
+ self.OpHeader.Length += 1
+
+ def GetOpCode(self):
+ return self.OpHeader.OpCode
+
+
+class IfrStatementHeader:
+ def __init__(self, sHeader: EFI_IFR_STATEMENT_HEADER):
+ self.sHeader = sHeader
+ self.sHeader.Help = EFI_STRING_ID_INVALID
+ self.sHeader.Prompt = EFI_STRING_ID_INVALID
+
+ def GetStatementHeader(self):
+ return self.sHeader
+
+ def SetPrompt(self, Prompt):
+ self.sHeader.Prompt = Prompt
+
+ def SetHelp(self, Help):
+ self.sHeader.Help = Help
+
+
+class IfrMinMaxStepData:
+ def __init__(self, MinMaxStepData, NumericOpcode=False):
+ self.MinMaxStepData = MinMaxStepData
+ self.MinMaxStepData.MinValue = 0
+ self.MinMaxStepData.MaxValue = 0
+ self.MinMaxStepData.Step = 0
+ self.ValueIsSet = False
+ self.IsNumeric = NumericOpcode
+
+ def SetMinMaxStepData(self, MinValue, MaxValue, Step):
+ if self.ValueIsSet == False:
+ self.MinMaxStepData.MinValue = MinValue
+ self.MinMaxStepData.MaxValue = MaxValue
+ self.MinMaxStepData.Step = Step
+
+ self.ValueIsSet = True
+ else:
+ if MinValue < self.MinMaxStepData.MinValue:
+ self.MinMaxStepData.MinValue = MinValue
+ if MaxValue > self.MinMaxStepData.MaxValue:
+ self.MinMaxStepData.MaxValue = MaxValue
+ self.MinMaxStepData.Step = Step
+
+ def IsNumericOpcode(self):
+ return self.IsNumeric
+
+ def UpdateIfrMinMaxStepData(self, MinMaxStepData):
+ self.MinMaxStepData = MinMaxStepData
+
+ def GetMinData(self):
+ return self.MinMaxStepData.MinValue
+
+ def GetMaxData(self):
+ return self.MinMaxStepData.MaxValue
+
+ def GetStepData(self):
+ return self.MinMaxStepData.Step
+
+
+class IfrFormSet(IfrLine, IfrOpHeader):
+ def __init__(self, Size):
+ self.FormSet = EFI_IFR_FORM_SET()
+ self.ClassGuid = []
+ IfrOpHeader.__init__(self, self.FormSet.Header, EFI_IFR_FORM_SET_OP, Size)
+ self.FormSet.Help = EFI_STRING_ID_INVALID
+ self.FormSet.FormSetTitle = EFI_STRING_ID_INVALID
+ self.FormSet.Flags = 0
+ self.FormSet.Guid = EFI_GUID(0, 0, 0, GuidArray(0, 0, 0, 0, 0, 0, 0, 0))
+
+ self.ClassGuidNum = 0
+
+ def SetGuid(self, Guid):
+ self.FormSet.Guid = Guid
+
+ def GetGuid(self):
+ return self.FormSet.Guid
+
+ def SetFormSetTitle(self, FormSetTitle):
+ self.FormSet.FormSetTitle = FormSetTitle
+
+ def GetFormSetTitle(self):
+ return self.FormSet.FormSetTitle
+
+ def SetHelp(self, Help):
+ self.FormSet.Help = Help
+
+ def GetHelp(self):
+ return self.FormSet.Help
+
+ def SetClassGuid(self, Guid):
+ self.ClassGuid.append(Guid)
+ self.FormSet.Flags += 1
+
+ def GetClassGuid(self):
+ return self.ClassGuid
+
+ def GetFlags(self):
+ return self.FormSet.Flags
+
+ def SetClassGuidNum(self, Num):
+ self.ClassGuidNum = Num
+
+ def GetInfo(self):
+ return self.FormSet
+
+
+class IfrOneOfOption(IfrLine, IfrOpHeader):
+ def __init__(self, ValueType, ValueList):
+ Nums = len(ValueList)
+ self.OneOfOption = Refine_EFI_IFR_ONE_OF_OPTION(ValueType, Nums)
+ IfrOpHeader.__init__(
+ self, self.OneOfOption.Header, EFI_IFR_ONE_OF_OPTION_OP, sizeof(self.OneOfOption)
+ )
+ self.OneOfOption.Flags = 0
+ self.OneOfOption.Option = EFI_STRING_ID_INVALID
+ self.OneOfOption.Type = EFI_IFR_TYPE_OTHER
+ self.ValueType = ValueType
+ if ValueList != []:
+ ArrayType = TypeDict[ValueType] * Nums
+ ValueArray = ArrayType()
+ for i in range(0, len(ValueList)):
+ ValueArray[i] = ValueList[i]
+ self.OneOfOption.Value = ValueArray
+
+ self.IfrOptionKey = None
+ self.FlagsStream = ""
+ self.ValueStream = ""
+
+ def SetOption(self, Option):
+ self.OneOfOption.Option = Option
+
+ def SetType(self, Type):
+ self.OneOfOption.Type = Type
+
+ def SetIfrOptionKey(self, IfrOptionKey):
+ self.IfrOptionKey = IfrOptionKey
+
+ def SetFlagsStream(self, FlagsStream):
+ self.FlagsStream = FlagsStream
+
+ def SetValueStream(self, ValueStream):
+ self.ValueStream = ValueStream
+
+ def GetValueType(self):
+ return self.ValueType
+
+ def SetValue(self, ValueList):
+ ArrayType = TypeDict[self.ValueType] * (len(ValueList))
+ ValueArray = ArrayType()
+ for i in range(0, len(ValueList)):
+ ValueArray[i] = ValueList[i]
+ self.OneOfOption.Value = ValueArray
+
+ def GetFlags(self):
+ return self.OneOfOption.Flags
+
+ def SetFlags(self, LFlags):
+ self.OneOfOption.Flags = 0
+ LFlags, Ret = _FLAG_TEST_AND_CLEAR(LFlags, EFI_IFR_OPTION_DEFAULT)
+ if Ret:
+ self.OneOfOption.Flags |= EFI_IFR_OPTION_DEFAULT
+
+ LFlags, Ret = _FLAG_TEST_AND_CLEAR(LFlags, EFI_IFR_OPTION_DEFAULT_MFG)
+ if Ret:
+ self.OneOfOption.Flags |= EFI_IFR_OPTION_DEFAULT_MFG
+
+ if LFlags == EFI_IFR_TYPE_NUM_SIZE_8:
+ LFlags = _FLAG_CLEAR(LFlags, EFI_IFR_TYPE_NUM_SIZE_8)
+ self.OneOfOption.Flags |= EFI_IFR_TYPE_NUM_SIZE_8
+
+ elif LFlags == EFI_IFR_TYPE_NUM_SIZE_16:
+ LFlags = _FLAG_CLEAR(LFlags, EFI_IFR_TYPE_NUM_SIZE_16)
+ self.OneOfOption.Flags |= EFI_IFR_TYPE_NUM_SIZE_16
+
+ elif LFlags == EFI_IFR_TYPE_NUM_SIZE_32:
+ LFlags = _FLAG_CLEAR(LFlags, EFI_IFR_TYPE_NUM_SIZE_32)
+ self.OneOfOption.Flags |= EFI_IFR_TYPE_NUM_SIZE_32
+
+ elif LFlags == EFI_IFR_TYPE_NUM_SIZE_64:
+ LFlags = _FLAG_CLEAR(LFlags, EFI_IFR_TYPE_NUM_SIZE_64)
+ self.OneOfOption.Flags |= EFI_IFR_TYPE_NUM_SIZE_64
+
+ elif LFlags == EFI_IFR_TYPE_BOOLEAN:
+ LFlags = _FLAG_CLEAR(LFlags, EFI_IFR_TYPE_BOOLEAN)
+ self.OneOfOption.Flags |= EFI_IFR_TYPE_BOOLEAN
+
+ elif LFlags == EFI_IFR_TYPE_TIME:
+ LFlags = _FLAG_CLEAR(LFlags, EFI_IFR_TYPE_TIME)
+ self.OneOfOption.Flags |= EFI_IFR_TYPE_TIME
+
+ elif LFlags == EFI_IFR_TYPE_DATE:
+ LFlags = _FLAG_CLEAR(LFlags, EFI_IFR_TYPE_DATE)
+ self.OneOfOption.Flags |= EFI_IFR_TYPE_DATE
+
+ elif LFlags == EFI_IFR_TYPE_STRING:
+ LFlags = _FLAG_CLEAR(LFlags, EFI_IFR_TYPE_STRING)
+ self.OneOfOption.Flags |= EFI_IFR_TYPE_STRING
+
+ elif LFlags == EFI_IFR_TYPE_OTHER:
+ LFlags = _FLAG_CLEAR(LFlags, EFI_IFR_TYPE_OTHER)
+ self.OneOfOption.Flags |= EFI_IFR_TYPE_OTHER
+
+ return (
+ VfrReturnCode.VFR_RETURN_SUCCESS
+ if LFlags == 0
+ else VfrReturnCode.VFR_RETURN_FLAGS_UNSUPPORTED
+ )
+
+ def GetInfo(self):
+ return self.OneOfOption
+
+
+class IfrOptionKey(IfrLine, IfrOpHeader):
+ def __init__(self, QuestionId, Type, OptionValue, KeyValue):
+ self.OptionKey = Refine_EFI_IFR_GUID_OPTIONKEY(Type)
+ IfrOpHeader.__init__(self, self.OptionKey.Header, EFI_IFR_GUID_OP, sizeof(self.OptionKey))
+ self.OptionKey.ExtendOpCode = EFI_IFR_EXTEND_OP_OPTIONKEY
+ self.OptionKey.Guid = EFI_IFR_FRAMEWORK_GUID
+ self.OptionKey.QuestionId = QuestionId
+ self.OptionKey.OptionValue = OptionValue
+ self.OptionKey.KeyValue = KeyValue
+
+ def GetInfo(self):
+ return self.OptionKey
+
+
+class IfrClass(IfrLine, IfrOpHeader):
+ def __init__(
+ self,
+ ):
+ self.Class = EFI_IFR_GUID_CLASS() # static guid
+ IfrOpHeader.__init__(self, self.Class.Header, EFI_IFR_GUID_OP, sizeof(EFI_IFR_GUID_CLASS))
+ self.Class.ExtendOpCode = EFI_IFR_EXTEND_OP_CLASS
+ self.Class.Guid = EFI_IFR_TIANO_GUID
+ self.Class.Class = EFI_NON_DEVICE_CLASS
+
+ self.HasSubClass = False
+ self.ClassStr = None
+
+ def SetClass(self, Class):
+ self.Class.Class = Class
+
+ def SetClassStr(self, ClassStr):
+ self.ClassStr = ClassStr
+
+ def GetInfo(self):
+ return self.Class
+
+
+class IfrSubClass(IfrLine, IfrOpHeader):
+ def __init__(
+ self,
+ ):
+ self.SubClass = EFI_IFR_GUID_SUBCLASS()
+ IfrOpHeader.__init__(
+ self, self.SubClass.Header, EFI_IFR_GUID_OP, sizeof(EFI_IFR_GUID_SUBCLASS)
+ )
+ self.SubClass.ExtendOpCode = EFI_IFR_EXTEND_OP_SUBCLASS
+ self.SubClass.Guid = EFI_IFR_TIANO_GUID
+ self.SubClass.SubClass = EFI_SETUP_APPLICATION_SUBCLASS
+
+ self.SubClassStr = None
+
+ def SetSubClass(self, SubClass):
+ self.SubClass.SubClass = SubClass
+
+ def SetSubClassStr(self, SubClassStr):
+ self.SubClassStr = SubClassStr
+
+ def GetInfo(self):
+ return self.SubClass
+
+
+class IfrDefaultStore(IfrLine, IfrOpHeader):
+ def __init__(self, TypeName=None):
+ self.DefaultStore = EFI_IFR_DEFAULTSTORE()
+ IfrOpHeader.__init__(self, self.DefaultStore.Header, EFI_IFR_DEFAULTSTORE_OP)
+ self.DefaultStore.DefaultName = EFI_STRING_ID_INVALID
+ self.DefaultStore.DefaultId = EFI_VARSTORE_ID_INVALID
+ self.Type = TypeName
+ self.HasAttr = False
+
+ def SetDefaultName(self, DefaultName):
+ self.DefaultStore.DefaultName = DefaultName
+
+ def SetType(self, Type):
+ self.Type = Type
+
+ def SetDefaultId(self, DefaultId):
+ self.DefaultStore.DefaultId = DefaultId
+
+ def SetDefaultStore(self, DefaultStore: EFI_IFR_DEFAULTSTORE):
+ self.DefaultStore = DefaultStore
+ IfrOpHeader.__init__(self, self.DefaultStore.Header, EFI_IFR_DEFAULTSTORE_OP)
+
+ def GetDefaultId(self):
+ return self.DefaultStore.DefaultId
+
+ def GetInfo(self):
+ return self.DefaultStore
+
+
+class IfrVarStore(IfrLine, IfrOpHeader):
+ def __init__(self, TypeName, StoreName):
+ Nums = len(StoreName)
+ self.Varstore = Refine_EFI_IFR_VARSTORE(Nums)
+ IfrOpHeader.__init__(
+ self, self.Varstore.Header, EFI_IFR_VARSTORE_OP, sizeof(self.Varstore) + 1
+ )
+ self.Varstore.VarStoreId = EFI_VARSTORE_ID_INVALID
+ self.Varstore.Size = 0
+ ArrayType = c_ubyte * (Nums)
+ ValueArray = ArrayType()
+ for i in range(0, Nums):
+ ValueArray[i] = ord(StoreName[i])
+ self.Varstore.Name = ValueArray
+
+ # info saved for yaml generation
+ self.Type = TypeName
+ self.HasVarStoreId = False
+
+ def SetGuid(self, Guid):
+ self.Varstore.Guid = Guid
+
+ def SetSize(self, Size):
+ self.Varstore.Size = Size
+
+ def SetVarStoreId(self, VarStoreId):
+ self.Varstore.VarStoreId = VarStoreId
+
+ def SetHasVarStoreId(self, HasVarStoreId):
+ self.HasVarStoreId = HasVarStoreId
+
+ def GetInfo(self):
+ return self.Varstore
+
+
+class IfrVarStoreEfi(IfrLine, IfrOpHeader):
+ def __init__(self, TypeName, StoreName):
+ Nums = len(StoreName)
+ self.VarStoreEfi = Refine_EFI_IFR_VARSTORE_EFI(Nums)
+ IfrOpHeader.__init__(
+ self, self.VarStoreEfi.Header, EFI_IFR_VARSTORE_EFI_OP, sizeof(self.VarStoreEfi) + 1
+ )
+ self.VarStoreEfi.VarStoreId = EFI_VAROFFSET_INVALID
+ self.VarStoreEfi.Size = 0
+ ArrayType = c_ubyte * (Nums)
+ ValueArray = ArrayType()
+ for i in range(0, Nums):
+ ValueArray[i] = ord(StoreName[i])
+ self.VarStoreEfi.Name = ValueArray
+
+ # info saved for yaml generation
+ self.Type = TypeName
+ self.HasVarStoreId = False
+ self.AttributesText = None
+ self.NameStringId = None
+ self.VarSize = None
+
+ def SetGuid(self, Guid):
+ self.VarStoreEfi.Guid = Guid
+
+ def SetSize(self, Size):
+ self.VarStoreEfi.Size = Size
+
+ def SetNameStringId(self, NameStringId):
+ self.NameStringId = NameStringId
+
+ def SetVarSize(self, VarSize):
+ self.VarSize = VarSize
+
+ def SetVarStoreId(self, VarStoreId):
+ self.VarStoreEfi.VarStoreId = VarStoreId
+
+ def SetAttributes(self, Attributes):
+ self.VarStoreEfi.Attributes = Attributes
+
+ def SetHasVarStoreId(self, HasVarStoreId):
+ self.HasVarStoreId = HasVarStoreId
+
+ def SetAttributesText(self, AttributesText):
+ self.AttributesText = AttributesText
+
+ def GetInfo(self):
+ return self.VarStoreEfi
+
+
+class IfrVarStoreNameValue(IfrLine, IfrOpHeader):
+ def __init__(self, TypeName):
+ self.VarStoreNameValue = EFI_IFR_VARSTORE_NAME_VALUE()
+ IfrOpHeader.__init__(self, self.VarStoreNameValue.Header, EFI_IFR_VARSTORE_NAME_VALUE_OP)
+ self.VarStoreNameValue.VarStoreId = EFI_VAROFFSET_INVALID
+
+ self.Type = TypeName
+ self.NameItemList = []
+ self.HasVarStoreId = False
+
+ def SetGuid(self, Guid):
+ self.VarStoreNameValue.Guid = Guid
+
+ def SetVarStoreId(self, VarStoreId):
+ self.VarStoreNameValue.VarStoreId = VarStoreId
+
+ def SetNameItemList(self, NameItem):
+ self.NameItemList.append(NameItem)
+
+ def SetHasVarStoreId(self, HasVarStoreId):
+ self.HasVarStoreId = HasVarStoreId
+
+ def GetInfo(self):
+ return self.VarStoreNameValue
+
+
+EFI_BITS_PER_UINT32 = 1 << EFI_BITS_SHIFT_PER_UINT32
+EFI_FORM_ID_MAX = 0xFFFF
+
+EFI_FREE_FORM_ID_BITMAP_SIZE = int((EFI_FORM_ID_MAX + 1) / EFI_BITS_PER_UINT32)
+
+
+class IfrFormId:
+ def __init__(self):
+ self.FormIdBitMap = []
+ for _ in range(0, EFI_FREE_FORM_ID_BITMAP_SIZE):
+ self.FormIdBitMap.append(0)
+
+ def Clear(self):
+ self.FormIdBitMap = []
+ for _ in range(0, EFI_FREE_FORM_ID_BITMAP_SIZE):
+ self.FormIdBitMap.append(0)
+
+ def CheckFormIdFree(self, FormId):
+ Index = int(FormId / EFI_BITS_PER_UINT32)
+ Offset = FormId % EFI_BITS_PER_UINT32
+
+ return (self.FormIdBitMap[Index] & (0x80000000 >> Offset)) == 0
+
+ def MarkFormIdUsed(self, FormId):
+ Index = int(FormId / EFI_BITS_PER_UINT32)
+ Offset = FormId % EFI_BITS_PER_UINT32
+ self.FormIdBitMap[Index] |= 0x80000000 >> Offset
+
+
+gIfrFormId = IfrFormId()
+
+
+class IfrForm(IfrLine, IfrOpHeader):
+ def __init__(self):
+ self.Form = EFI_IFR_FORM()
+ IfrOpHeader.__init__(self, self.Form.Header, EFI_IFR_FORM_OP)
+ self.Form.FormId = 0
+ self.Form.FormTitle = EFI_STRING_ID_INVALID
+
+ def SetFormId(self, FormId):
+ # FormId can't be 0.
+ if FormId == 0:
+ return VfrReturnCode.VFR_RETURN_INVALID_PARAMETER
+ if gIfrFormId.CheckFormIdFree(FormId) == False:
+ return VfrReturnCode.VFR_RETURN_FORMID_REDEFINED
+ self.Form.FormId = FormId
+ gIfrFormId.MarkFormIdUsed(FormId)
+ return VfrReturnCode.VFR_RETURN_SUCCESS
+
+ def SetFormTitle(self, FormTitle):
+ self.Form.FormTitle = FormTitle
+
+ def GetInfo(self):
+ return self.Form
+
+
+class IfrFormMap(IfrLine, IfrOpHeader):
+ def __init__(self):
+ self.FormMap = EFI_IFR_FORM_MAP()
+ self.MethodMapList = []
+ IfrOpHeader.__init__(self, self.FormMap.Header, EFI_IFR_FORM_MAP_OP)
+ self.FormMap.FormId = 0
+
+ def SetFormId(self, FormId):
+ if FormId == 0:
+ return VfrReturnCode.VFR_RETURN_INVALID_PARAMETER
+
+ if gIfrFormId.CheckFormIdFree(FormId) == False:
+ return VfrReturnCode.VFR_RETURN_FORMID_REDEFINED
+ self.FormMap.FormId = FormId
+ gIfrFormId.MarkFormIdUsed(FormId)
+ return VfrReturnCode.VFR_RETURN_SUCCESS
+
+ def SetFormMapMethod(self, MethodTitle, MethodGuid: EFI_GUID):
+ MethodMap = EFI_IFR_FORM_MAP_METHOD()
+ MethodMap.MethodTitle = MethodTitle
+ MethodMap.MethodIdentifier = MethodGuid
+ self.MethodMapList.append(MethodMap)
+
+ def GetInfo(self):
+ return self.FormMap
+
+ def GetMethodMapList(self):
+ return self.MethodMapList
+
+
+class IfrEnd(IfrLine, IfrOpHeader):
+ def __init__(self):
+ self.End = EFI_IFR_END()
+ IfrOpHeader.__init__(self, self.End.Header, EFI_IFR_END_OP)
+
+ def GetInfo(self):
+ return self.End
+
+
+class IfrBanner(IfrLine, IfrOpHeader):
+ def __init__(
+ self,
+ ):
+ self.Banner = EFI_IFR_GUID_BANNER()
+ IfrOpHeader.__init__(self, self.Banner.Header, EFI_IFR_GUID_OP, sizeof(EFI_IFR_GUID_BANNER))
+ self.Banner.ExtendOpCode = EFI_IFR_EXTEND_OP_BANNER
+ self.Banner.Guid = EFI_IFR_TIANO_GUID
+
+ self.HasTimeOut = False
+ self.TimeOut = None
+
+ def SetTitle(self, StringId):
+ self.Banner.Title = StringId
+
+ def SetLine(self, Line):
+ self.Banner.LineNumber = Line
+
+ def SetAlign(self, Align):
+ self.Banner.Alignment = Align
+
+ def SetHasTimeOut(self, HasTimeOut):
+ self.HasTimeOut = HasTimeOut
+
+ def SetTimeOut(self, TimeOut):
+ self.TimeOut = TimeOut
+
+ def GetInfo(self):
+ return self.Banner
+
+
+class IfrVarEqName(IfrLine, IfrOpHeader):
+ def __init__(self, QuestionId, NameId):
+ self.VarEqName = EFI_IFR_GUID_VAREQNAME()
+ IfrOpHeader.__init__(
+ self, self.VarEqName.Header, EFI_IFR_GUID_OP, sizeof(EFI_IFR_GUID_VAREQNAME)
+ )
+ self.VarEqName.ExtendOpCode = EFI_IFR_EXTEND_OP_VAREQNAME
+ self.VarEqName.Guid = EFI_IFR_FRAMEWORK_GUID
+ self.VarEqName.QuestionId = QuestionId
+ self.VarEqName.NameId = NameId
+
+ def GetInfo(self):
+ return self.VarEqName
+
+
+class IfrTimeout(IfrLine, IfrOpHeader):
+ def __init__(self, Timeout=0):
+ self.Timeout = EFI_IFR_GUID_TIMEOUT()
+ IfrOpHeader.__init__(
+ self, self.Timeout.Header, EFI_IFR_GUID_OP, sizeof(EFI_IFR_GUID_TIMEOUT)
+ )
+ self.Timeout.ExtendOpCode = EFI_IFR_EXTEND_OP_TIMEOUT
+ self.Timeout.Guid = EFI_IFR_TIANO_GUID
+ self.Timeout.TimeOut = Timeout
+
+ def SetTimeout(self, Timeout):
+ self.Timeout.TimeOut = Timeout
+
+ def GetInfo(self):
+ return self.Timeout
+
+
+class IfrLabel(IfrLine, IfrOpHeader):
+ def __init__(
+ self,
+ ):
+ self.Label = EFI_IFR_GUID_LABEL()
+ IfrOpHeader.__init__(self, self.Label.Header, EFI_IFR_GUID_OP, sizeof(EFI_IFR_GUID_LABEL))
+ self.Label.ExtendOpCode = EFI_IFR_EXTEND_OP_LABEL
+ self.Label.Guid = EFI_IFR_TIANO_GUID
+
+ def SetNumber(self, Number):
+ self.Label.Number = Number
+
+ def GetInfo(self):
+ return self.Label
+
+
+class IfrRule(IfrLine, IfrOpHeader):
+ def __init__(self, RuleName=None):
+ self.Rule = EFI_IFR_RULE()
+ self.RuleName = RuleName
+ IfrOpHeader.__init__(self, self.Rule.Header, EFI_IFR_RULE_OP)
+ self.Rule.RuleId = EFI_RULE_ID_INVALID
+
+ def SetRuleId(self, RuleId):
+ self.Rule.RuleId = RuleId
+
+ def GetRuleName(self):
+ return self.RuleName
+
+ def SetRuleName(self, RuleName):
+ self.RuleName = RuleName
+
+ def GetInfo(self):
+ return self.Rule
+
+
+def _FLAG_TEST_AND_CLEAR(Flags, Mask):
+ Ret = Flags & Mask
+ Flags &= ~Mask
+ return Flags, Ret
+
+
+def _FLAG_CLEAR(Flags, Mask):
+ Flags &= ~Mask
+ return Flags
+
+
+class IfrSubtitle(IfrLine, IfrOpHeader, IfrStatementHeader):
+ def __init__(
+ self,
+ ):
+ self.Subtitle = EFI_IFR_SUBTITLE()
+
+ IfrOpHeader.__init__(self, self.Subtitle.Header, EFI_IFR_SUBTITLE_OP)
+ IfrStatementHeader.__init__(self, self.Subtitle.Statement)
+ self.Subtitle.Flags = 0
+
+ self.FlagsStream = ""
+
+ def SetFlags(self, Flags):
+ Flags, Result = _FLAG_TEST_AND_CLEAR(Flags, EFI_IFR_FLAGS_HORIZONTAL)
+ if Result:
+ self.Subtitle.Flags |= EFI_IFR_FLAGS_HORIZONTAL
+
+ return (
+ VfrReturnCode.VFR_RETURN_SUCCESS
+ if Flags == 0
+ else VfrReturnCode.VFR_RETURN_FLAGS_UNSUPPORTED
+ )
+
+ def SetFlagsStream(self, FlagsStream):
+ self.FlagsStream = FlagsStream
+
+ def GetInfo(self):
+ return self.Subtitle
+
+
+class IfrImage(IfrLine, IfrOpHeader):
+ def __init__(
+ self,
+ ):
+ self.Image = EFI_IFR_IMAGE()
+ IfrOpHeader.__init__(self, self.Image.Header, EFI_IFR_IMAGE_OP)
+ self.Image.Id = EFI_IMAGE_ID_INVALID
+
+ def SetImageId(self, ImageId):
+ self.Image.Id = ImageId
+
+ def GetInfo(self):
+ return self.Image
+
+
+class IfrLocked(IfrLine, IfrOpHeader):
+ def __init__(
+ self,
+ ):
+ self.Lock = EFI_IFR_LOCKED()
+ IfrOpHeader.__init__(self, self.Lock.Header, EFI_IFR_LOCKED_OP)
+
+ def GetInfo(self):
+ return self.Lock
+
+
+class IfrModal(IfrLine, IfrOpHeader):
+ def __init__(
+ self,
+ ):
+ self.Modal = EFI_IFR_MODAL_TAG()
+ IfrOpHeader.__init__(self, self.Modal.Header, EFI_IFR_MODAL_TAG_OP)
+
+ def GetInfo(self):
+ return self.Modal
+
+
+EFI_IFR_QUESTION_FLAG_DEFAULT = 0
+
+
+class IfrQuestionHeader(IfrStatementHeader):
+ def __init__(self, QHeader, Flags=EFI_IFR_QUESTION_FLAG_DEFAULT):
+ self.QHeader = QHeader
+ IfrStatementHeader.__init__(self, self.QHeader.Header)
+ self.QHeader.QuestionId = EFI_QUESTION_ID_INVALID
+ self.QHeader.VarStoreId = EFI_VARSTORE_ID_INVALID
+ self.QHeader.VarStoreInfo.VarName = EFI_STRING_ID_INVALID
+ self.QHeader.VarStoreInfo.VarOffset = EFI_VAROFFSET_INVALID
+ self.QHeader.Flags = Flags
+
+ def GetQuestionId(self):
+ return self.QHeader.QuestionId
+
+ def SetQuestionId(self, QuestionId):
+ self.QHeader.QuestionId = QuestionId
+
+ def GetVarStoreId(self):
+ return self.QHeader.VarStoreId
+
+ def SetVarStoreInfo(self, BaseInfo):
+ self.QHeader.VarStoreId = BaseInfo.VarStoreId
+ self.QHeader.VarStoreInfo.VarName = BaseInfo.Info.VarName
+ self.QHeader.VarStoreInfo.VarOffset = BaseInfo.Info.VarOffset
+
+ def GetVarStoreInfo(self, Info):
+ Info.VarStoreId = self.QHeader.VarStoreId
+ Info.VarStoreInfo = self.QHeader.VarStoreInfo
+ return Info
+
+ def GetQFlags(self):
+ return self.QHeader.Flags
+
+ def SetFlags(self, Flags):
+ Flags, Ret = _FLAG_TEST_AND_CLEAR(Flags, EFI_IFR_FLAG_READ_ONLY)
+ if Ret:
+ self.QHeader.Flags |= EFI_IFR_FLAG_READ_ONLY
+
+ Flags = _FLAG_CLEAR(Flags, 0x02)
+
+ Flags, Ret = _FLAG_TEST_AND_CLEAR(Flags, EFI_IFR_FLAG_CALLBACK)
+ if Ret:
+ self.QHeader.Flags |= EFI_IFR_FLAG_CALLBACK
+
+ # ignore NVAccessFlag
+ Flags = _FLAG_CLEAR(Flags, 0x08)
+
+ Flags, Ret = _FLAG_TEST_AND_CLEAR(Flags, EFI_IFR_FLAG_RESET_REQUIRED)
+ if Ret:
+ self.QHeader.Flags |= EFI_IFR_FLAG_RESET_REQUIRED
+
+ Flags, Ret = _FLAG_TEST_AND_CLEAR(Flags, EFI_IFR_FLAG_RECONNECT_REQUIRED)
+ if Ret:
+ self.QHeader.Flags |= EFI_IFR_FLAG_RECONNECT_REQUIRED
+
+ # Set LateCheck Flag to compatible for framework flag
+ # but it uses 0x20 as its flag, if in the future UEFI may take this flag
+
+ Flags, Ret = _FLAG_TEST_AND_CLEAR(Flags, 0x20)
+ if Ret:
+ self.QHeader.Flags |= 0x20
+
+ Flags, Ret = _FLAG_TEST_AND_CLEAR(Flags, EFI_IFR_FLAG_OPTIONS_ONLY)
+ if Ret:
+ self.QHeader.Flags |= EFI_IFR_FLAG_OPTIONS_ONLY
+
+ return (
+ VfrReturnCode.VFR_RETURN_SUCCESS
+ if Flags == 0
+ else VfrReturnCode.VFR_RETURN_FLAGS_UNSUPPORTED
+ )
+
+ def UpdateIfrQuestionHeader(self, qHeader):
+ self.QHeader = qHeader
+
+
+class IfrRef(IfrLine, IfrBaseInfo, IfrOpHeader, IfrQuestionHeader):
+ def __init__(self, QName=None, VarIdStr=""):
+ self.Ref = EFI_IFR_REF()
+ IfrBaseInfo.__init__(self, self.Ref, QName, VarIdStr)
+ IfrOpHeader.__init__(self, self.Ref.Header, EFI_IFR_REF_OP)
+ IfrQuestionHeader.__init__(self, self.Ref.Question)
+ self.Ref.FormId = 0
+
+ def SetFormId(self, FormId):
+ self.Ref.FormId = FormId
+
+
+class IfrRef2(IfrLine, IfrBaseInfo, IfrOpHeader, IfrQuestionHeader):
+ def __init__(self, QName=None, VarIdStr=""):
+ self.Ref2 = EFI_IFR_REF2()
+ IfrBaseInfo.__init__(self, self.Ref2, QName, VarIdStr)
+ IfrOpHeader.__init__(self, self.Ref2.Header, EFI_IFR_REF_OP, sizeof(EFI_IFR_REF2))
+ IfrQuestionHeader.__init__(self, self.Ref2.Question)
+ self.Ref2.FormId = 0
+ self.Ref2.QuestionId = EFI_QUESTION_ID_INVALID
+
+ def SetFormId(self, FormId):
+ self.Ref2.FormId = FormId
+
+ def SetQId(self, QuestionId):
+ self.Ref2.QuestionId = QuestionId
+
+
+class IfrRef3(IfrLine, IfrBaseInfo, IfrOpHeader, IfrQuestionHeader):
+ def __init__(self, QName=None, VarIdStr=""):
+ self.Ref3 = EFI_IFR_REF3()
+ IfrBaseInfo.__init__(self, self.Ref3, QName, VarIdStr)
+ IfrOpHeader.__init__(self, self.Ref3.Header, EFI_IFR_REF_OP, sizeof(EFI_IFR_REF3))
+ IfrQuestionHeader.__init__(self, self.Ref3.Question)
+ self.Ref3.FormId = 0
+ self.Ref3.QuestionId = EFI_QUESTION_ID_INVALID
+ EFI_IFR_DEFAULT_GUID = EFI_GUID(0, 0, 0, GuidArray(0, 0, 0, 0, 0, 0, 0, 0))
+ self.Ref3.FormSetId = EFI_IFR_DEFAULT_GUID
+
+ def SetFormId(self, FormId):
+ self.Ref3.FormId = FormId
+
+ def SetQId(self, QuestionId):
+ self.Ref3.QuestionId = QuestionId
+
+ def SetFormSetId(self, FormSetId):
+ self.Ref3.FormSetId = FormSetId
+
+
+class IfrRef4(IfrLine, IfrBaseInfo, IfrOpHeader, IfrQuestionHeader):
+ def __init__(self, QName=None, VarIdStr=""):
+ self.Ref4 = EFI_IFR_REF4()
+ IfrBaseInfo.__init__(self, self.Ref4, QName, VarIdStr)
+ IfrOpHeader.__init__(self, self.Ref4.Header, EFI_IFR_REF_OP, sizeof(EFI_IFR_REF4))
+ IfrQuestionHeader.__init__(self, self.Ref4.Question)
+ self.Ref4.FormId = 0
+ self.Ref4.QuestionId = EFI_QUESTION_ID_INVALID
+ EFI_IFR_DEFAULT_GUID = EFI_GUID(0, 0, 0, GuidArray(0, 0, 0, 0, 0, 0, 0, 0))
+ self.Ref4.FormSetId = EFI_IFR_DEFAULT_GUID
+ self.Ref4.DevicePath = EFI_STRING_ID_INVALID
+
+ def SetFormId(self, FormId):
+ self.Ref4.FormId = FormId
+
+ def SetQId(self, QuestionId):
+ self.Ref4.QuestionId = QuestionId
+
+ def SetFormSetId(self, FormSetId):
+ self.Ref4.FormSetId = FormSetId
+
+ def SetDevicePath(self, DevicePath):
+ self.Ref4.DevicePath = DevicePath
+
+
+class IfrRef5(IfrLine, IfrBaseInfo, IfrOpHeader, IfrQuestionHeader):
+ def __init__(self, QName=None, VarIdStr=""):
+ self.Ref5 = EFI_IFR_REF5()
+ IfrBaseInfo.__init__(self, self.Ref5, QName, VarIdStr)
+ IfrOpHeader.__init__(self, self.Ref5.Header, EFI_IFR_REF_OP, sizeof(EFI_IFR_REF5))
+ IfrQuestionHeader.__init__(self, self.Ref5.Question)
+
+
+class IfrAction(IfrLine, IfrBaseInfo, IfrOpHeader, IfrQuestionHeader):
+ def __init__(self, QName=None, VarIdStr=""):
+ self.Action = EFI_IFR_ACTION()
+ IfrBaseInfo.__init__(self, self.Action, QName, VarIdStr)
+ IfrOpHeader.__init__(self, self.Action.Header, EFI_IFR_ACTION_OP)
+ IfrQuestionHeader.__init__(self, self.Action.Question)
+ self.Action.QuestionConfig = EFI_STRING_ID_INVALID
+
+ def SetQuestionConfig(self, QuestionConfig):
+ self.Action.QuestionConfig = QuestionConfig
+
+
+class IfrText(IfrLine, IfrOpHeader, IfrStatementHeader):
+ def __init__(
+ self,
+ ):
+ self.Text = EFI_IFR_TEXT()
+ IfrOpHeader.__init__(self, self.Text.Header, EFI_IFR_TEXT_OP)
+ IfrStatementHeader.__init__(self, self.Text.Statement)
+ self.Text.TextTwo = EFI_STRING_ID_INVALID
+ self.HasTextTwo = False
+
+ def SetTextTwo(self, StringId):
+ self.Text.TextTwo = StringId
+
+ def SetHasTextTwo(self, Flag):
+ self.HasTextTwo = Flag
+
+ def GetInfo(self):
+ return self.Text
+
+
+class IfrGuid(IfrLine, IfrOpHeader):
+ def __init__(self, Size, Data=None):
+ self.Guid = EFI_IFR_GUID()
+ self.Data = Data # databuffer is saved here
+ IfrOpHeader.__init__(self, self.Guid.Header, EFI_IFR_GUID_OP, sizeof(EFI_IFR_GUID) + Size)
+ EFI_IFR_DEFAULT_GUID = EFI_GUID(0, 0, 0, GuidArray(0, 0, 0, 0, 0, 0, 0, 0))
+ self.Guid.Guid = EFI_IFR_DEFAULT_GUID
+
+ def SetGuid(self, Guid):
+ self.Guid.Guid = Guid
+
+ def SetData(self, Data):
+ self.Data = Data
+
+ def GetData(self):
+ return self.Data
+
+ def GetInfo(self): #
+ return self.Guid
+
+
+class IfrExtensionGuid(IfrLine, IfrOpHeader):
+ def __init__(self, Size=0, TypeName="", ArraySize=0, Data=None):
+ self.Guid = EFI_IFR_GUID()
+ if ArraySize != 0:
+ self.DataType = TypeName + "[" + str(ArraySize) + "]"
+ else:
+ self.DataType = TypeName
+ self.FieldList = []
+ self.Data = Data
+ IfrOpHeader.__init__(self, self.Guid.Header, EFI_IFR_GUID_OP, sizeof(EFI_IFR_GUID) + Size)
+ EFI_IFR_DEFAULT_GUID = EFI_GUID(0, 0, 0, GuidArray(0, 0, 0, 0, 0, 0, 0, 0))
+ self.Guid.Guid = EFI_IFR_DEFAULT_GUID
+
+ def SetGuid(self, Guid):
+ self.Guid.Guid = Guid
+
+ def SetData(self, Data):
+ self.Data = Data
+
+ def GetDataType(self):
+ return self.DataType
+
+ def GetFieldList(self):
+ return self.FieldList
+
+ def SetFieldList(self, TFName, TFValue):
+ self.FieldList.append([TFName, TFValue])
+
+ def GetData(self):
+ return self.Data
+
+ def GetInfo(self): #
+ return self.Guid
+
+
+class IfrOrderedList(IfrLine, IfrBaseInfo, IfrOpHeader, IfrQuestionHeader):
+ def __init__(self, QName=None, VarIdStr=""):
+ self.OrderedList = EFI_IFR_ORDERED_LIST()
+ IfrBaseInfo.__init__(self, self.OrderedList, QName, VarIdStr)
+ IfrOpHeader.__init__(self, self.OrderedList.Header, EFI_IFR_ORDERED_LIST_OP)
+ IfrQuestionHeader.__init__(self, self.OrderedList.Question)
+ self.OrderedList.MaxContainers = 0
+ self.OrderedList.Flags = 0
+
+ self.HasMaxContainers = False
+
+ def GetQuestion(self):
+ return self
+
+ def SetQHeaderFlags(self, Flags):
+ IfrQuestionHeader.SetFlags(self, Flags)
+
+ def SetMaxContainers(self, MaxContainers):
+ self.OrderedList.MaxContainers = MaxContainers
+
+ def SetHasMaxContainers(self, HasMaxContainers):
+ self.HasMaxContainers = HasMaxContainers
+
+ def SetFlags(self, HFlags, LFlags):
+ ReturnCode = IfrQuestionHeader.SetFlags(self, HFlags)
+ if ReturnCode != VfrReturnCode.VFR_RETURN_SUCCESS:
+ return ReturnCode
+ LFlags, Ret = _FLAG_TEST_AND_CLEAR(LFlags, EFI_IFR_UNIQUE_SET)
+ if Ret:
+ self.OrderedList.Flags |= EFI_IFR_UNIQUE_SET
+
+ LFlags, Ret = _FLAG_TEST_AND_CLEAR(LFlags, EFI_IFR_NO_EMPTY_SET)
+ if Ret:
+ self.OrderedList.Flags |= EFI_IFR_NO_EMPTY_SET
+
+ return (
+ VfrReturnCode.VFR_RETURN_SUCCESS
+ if LFlags == 0
+ else VfrReturnCode.VFR_RETURN_FLAGS_UNSUPPORTED
+ )
+
+
+class IfrString(IfrLine, IfrBaseInfo, IfrOpHeader, IfrQuestionHeader):
+ def __init__(self, QName=None, VarIdStr=""):
+ self.Str = EFI_IFR_STRING()
+ IfrBaseInfo.__init__(self, self.Str, QName, VarIdStr)
+ IfrOpHeader.__init__(self, self.Str.Header, EFI_IFR_STRING_OP)
+ IfrQuestionHeader.__init__(self, self.Str.Question)
+ self.Str.Flags = 0
+ self.Str.MinSize = 0
+ self.Str.MaxSize = 0
+
+ def GetQuestion(self):
+ return self
+
+ def SetQHeaderFlags(self, Flags):
+ IfrQuestionHeader.SetFlags(self, Flags)
+
+ def SetFlags(self, HFlags, LFlags):
+ ReturnCode = IfrQuestionHeader.SetFlags(self, HFlags)
+ if ReturnCode != VfrReturnCode.VFR_RETURN_SUCCESS:
+ return ReturnCode
+
+ LFlags, Ret = _FLAG_TEST_AND_CLEAR(LFlags, EFI_IFR_STRING_MULTI_LINE)
+ if Ret:
+ self.Str.Flags |= EFI_IFR_STRING_MULTI_LINE
+
+ return (
+ VfrReturnCode.VFR_RETURN_SUCCESS
+ if LFlags == 0
+ else VfrReturnCode.VFR_RETURN_FLAGS_UNSUPPORTED
+ )
+
+ def SetMinSize(self, MinSize):
+ self.Str.MinSize = MinSize
+
+ def SetMaxSize(self, MaxSize):
+ self.Str.MaxSize = MaxSize
+
+
+class IfrPassword(IfrLine, IfrBaseInfo, IfrOpHeader, IfrQuestionHeader):
+ def __init__(self, QName=None, VarIdStr=""):
+ self.Password = EFI_IFR_PASSWORD()
+ IfrBaseInfo.__init__(self, self.Password, QName, VarIdStr)
+ IfrOpHeader.__init__(self, self.Password.Header, EFI_IFR_PASSWORD_OP)
+ IfrQuestionHeader.__init__(self, self.Password.Question)
+ self.Password.MinSize = 0
+ self.Password.MaxSize = 0
+
+ def GetQuestion(self):
+ return self
+
+ def SetQHeaderFlags(self, Flags):
+ IfrQuestionHeader.SetFlags(self, Flags)
+
+ def SetMinSize(self, MinSize):
+ self.Password.MinSize = MinSize
+
+ def SetMaxSize(self, MaxSize):
+ self.Password.MaxSize = MaxSize
+
+
+class IfrDefault(IfrLine, IfrOpHeader):
+ def __init__(
+ self,
+ ValueType,
+ ValueList,
+ DefaultId=EFI_HII_DEFAULT_CLASS_STANDARD,
+ Type=EFI_IFR_TYPE_OTHER,
+ ):
+ Nums = len(ValueList)
+ self.Default = Refine_EFI_IFR_DEFAULT(ValueType, Nums)
+ IfrOpHeader.__init__(self, self.Default.Header, EFI_IFR_DEFAULT_OP, sizeof(self.Default))
+ self.Default.Type = Type
+ self.Default.DefaultId = DefaultId
+
+ self.ValueType = ValueType
+ self.DefaultStore = ""
+ self.ValueStream = ""
+
+ if ValueList != []:
+ ArrayType = TypeDict[ValueType] * Nums
+ ValueArray = ArrayType()
+ for i in range(0, len(ValueList)):
+ ValueArray[i] = ValueList[i]
+ self.Default.Value = ValueArray
+
+ def SetDefaultId(self, DefaultId):
+ self.Default.DefaultId = DefaultId
+
+ def GetValueType(self):
+ return self.ValueType
+
+ def SetType(self, Type):
+ self.Default.Type = Type
+
+ def SetValue(self, ValueList):
+ ArrayType = TypeDict[self.ValueType] * (len(ValueList))
+ ValueArray = ArrayType()
+ for i in range(0, len(ValueList)):
+ ValueArray[i] = ValueList[i]
+ self.Default.Value = ValueArray
+
+ def SetDefaultStore(self, DefaultStore):
+ self.DefaultStore = DefaultStore
+
+ def SetValueStream(self, ValueStream):
+ self.ValueStream = ValueStream
+
+ def GetInfo(self):
+ return self.Default
+
+
+class IfrDefault2(IfrLine, IfrOpHeader):
+ def __init__(self, DefaultId=EFI_HII_DEFAULT_CLASS_STANDARD, Type=EFI_IFR_TYPE_OTHER):
+ self.Default = EFI_IFR_DEFAULT_2()
+ IfrOpHeader.__init__(
+ self, self.Default.Header, EFI_IFR_DEFAULT_OP, sizeof(EFI_IFR_DEFAULT_2)
+ )
+ self.Default.Type = Type
+ self.Default.DefaultId = DefaultId
+
+ self.DefaultStore = ""
+
+ def SetDefaultId(self, DefaultId):
+ self.Default.DefaultId = DefaultId
+
+ def SetType(self, Type):
+ self.Default.Type = Type
+
+ def SetDefaultStore(self, DefaultStore):
+ self.DefaultStore = DefaultStore
+
+ def GetInfo(self):
+ return self.Default
+
+
+class IfrInconsistentIf(IfrLine, IfrOpHeader):
+ def __init__(self):
+ self.InconsistentIf = EFI_IFR_INCONSISTENT_IF()
+ IfrOpHeader.__init__(self, self.InconsistentIf.Header, EFI_IFR_INCONSISTENT_IF_OP)
+ self.InconsistentIf.Error = EFI_STRING_ID_INVALID
+ self.FlagsStream = ""
+
+ def SetError(self, Error):
+ self.InconsistentIf.Error = Error
+
+ def SetFlagsStream(self, Flag):
+ self.FlagsStream = Flag
+
+ def GetInfo(self):
+ return self.InconsistentIf
+
+
+class IfrInconsistentIf2(IfrLine, IfrOpHeader):
+ def __init__(self):
+ self.InconsistentIf = EFI_IFR_INCONSISTENT_IF()
+ IfrOpHeader.__init__(self, self.InconsistentIf.Header, EFI_IFR_INCONSISTENT_IF_OP)
+ self.InconsistentIf.Error = EFI_STRING_ID_INVALID
+ self.FlagsStream = ""
+
+ def SetError(self, Error):
+ self.InconsistentIf.Error = Error
+
+ def SetFlagsStream(self, Flag):
+ self.FlagsStream = Flag
+
+ def GetInfo(self):
+ return self.InconsistentIf
+
+
+class IfrNoSubmitIf(IfrLine, IfrOpHeader):
+ def __init__(self):
+ self.NoSubmitIf = EFI_IFR_NO_SUBMIT_IF()
+ IfrOpHeader.__init__(self, self.NoSubmitIf.Header, EFI_IFR_NO_SUBMIT_IF_OP)
+ self.NoSubmitIf.Error = EFI_STRING_ID_INVALID
+
+ self.FlagsStream = ""
+
+ def SetError(self, Error):
+ self.NoSubmitIf.Error = Error
+
+ def SetFlagsStream(self, Flag):
+ self.FlagsStream = Flag
+
+ def GetInfo(self):
+ return self.NoSubmitIf
+
+
+class IfrDisableIf(IfrLine, IfrOpHeader):
+ def __init__(self):
+ self.DisableIf = EFI_IFR_DISABLE_IF()
+ IfrOpHeader.__init__(self, self.DisableIf.Header, EFI_IFR_DISABLE_IF_OP)
+
+ def GetInfo(self):
+ return self.DisableIf
+
+
+class IfrSuppressIf(IfrLine, IfrOpHeader):
+ def __init__(self):
+ self.SuppressIf = EFI_IFR_SUPPRESS_IF()
+ IfrOpHeader.__init__(self, self.SuppressIf.Header, EFI_IFR_SUPPRESS_IF_OP)
+
+ def GetInfo(self):
+ return self.SuppressIf
+
+
+class IfrGrayOutIf(IfrLine, IfrOpHeader):
+ def __init__(self):
+ self.GrayOutIf = EFI_IFR_GRAY_OUT_IF()
+ IfrOpHeader.__init__(self, self.GrayOutIf.Header, EFI_IFR_GRAY_OUT_IF_OP)
+
+ def GetInfo(self):
+ return self.GrayOutIf
+
+
+class IfrValue(IfrLine, IfrOpHeader):
+ def __init__(self):
+ self.Value = EFI_IFR_VALUE()
+ IfrOpHeader.__init__(self, self.Value.Header, EFI_IFR_VALUE_OP)
+
+ def GetInfo(self):
+ return self.Value
+
+
+class IfrRead(IfrLine, IfrOpHeader):
+ def __init__(self):
+ self.Read = EFI_IFR_READ()
+ IfrOpHeader.__init__(self, self.Read.Header, EFI_IFR_READ_OP)
+
+ def GetInfo(self):
+ return self.Read
+
+
+class IfrWrite(IfrLine, IfrOpHeader):
+ def __init__(self):
+ self.Write = EFI_IFR_WRITE()
+ IfrOpHeader.__init__(self, self.Write.Header, EFI_IFR_WRITE_OP)
+
+ def GetInfo(self):
+ return self.Write
+
+
+class IfrWarningIf(IfrLine, IfrOpHeader):
+ def __init__(self):
+ self.WarningIf = EFI_IFR_WARNING_IF()
+ IfrOpHeader.__init__(self, self.WarningIf.Header, EFI_IFR_WARNING_IF_OP)
+ self.WarningIf.Warning = EFI_STRING_ID_INVALID
+ self.WarningIf.TimeOut = 0
+
+ self.HasTimeOut = False
+
+ def SetWarning(self, WarnMessage):
+ self.WarningIf.Warning = WarnMessage
+
+ def SetHasHasTimeOut(self, HasTimeOut):
+ self.HasTimeOut = HasTimeOut
+
+ def SetTimeOut(self, TimeOut):
+ self.WarningIf.TimeOut = TimeOut
+
+ def GetInfo(self):
+ return self.WarningIf
+
+
+class IfrRefresh(IfrLine, IfrOpHeader):
+ def __init__(self):
+ self.Refresh = EFI_IFR_REFRESH()
+ IfrOpHeader.__init__(self, self.Refresh.Header, EFI_IFR_REFRESH_OP)
+ self.Refresh.RefreshInterval = 0
+
+ def SetRefreshInterval(self, RefreshInterval):
+ self.Refresh.RefreshInterval = RefreshInterval
+
+ def GetInfo(self):
+ return self.Refresh
+
+
+class IfrRefreshId(IfrLine, IfrOpHeader):
+ def __init__(self):
+ self.RefreshId = EFI_IFR_REFRESH_ID()
+ IfrOpHeader.__init__(self, self.RefreshId.Header, EFI_IFR_REFRESH_ID_OP)
+ self.RefreshId.RefreshEventGroupId = EFI_GUID(0, 0, 0, GuidArray(0, 0, 0, 0, 0, 0, 0, 0))
+
+ def SetRefreshEventGroutId(self, RefreshEventGroupId):
+ self.RefreshId.RefreshEventGroupId = RefreshEventGroupId
+
+ def GetInfo(self):
+ return self.RefreshId
+
+
+class IfrVarStoreDevice(IfrLine, IfrOpHeader):
+ def __init__(self):
+ self.VarStoreDevice = EFI_IFR_VARSTORE_DEVICE()
+ IfrOpHeader.__init__(self, self.VarStoreDevice.Header, EFI_IFR_VARSTORE_DEVICE_OP)
+ self.VarStoreDevice.DevicePath = EFI_STRING_ID_INVALID
+
+ def SetDevicePath(self, DevicePath):
+ self.VarStoreDevice.DevicePath = DevicePath
+
+ def GetInfo(self):
+ return self.VarStoreDevice
+
+
+class IfrDate(IfrLine, IfrBaseInfo, IfrOpHeader, IfrQuestionHeader):
+ def __init__(self, QName=None, VarIdStr=""):
+ self.Date = EFI_IFR_DATE()
+ IfrBaseInfo.__init__(self, self.Date, QName, VarIdStr)
+ IfrOpHeader.__init__(self, self.Date.Header, EFI_IFR_DATE_OP)
+ IfrQuestionHeader.__init__(self, self.Date.Question)
+ self.Date.Flags = 0
+
+ self.Year = None
+ self.Month = None
+ self.Day = None
+
+ self.D_Year = None
+ self.D_Month = None
+ self.D_Day = None
+ self.Step = None
+ self.Min = None
+ self.Max = None
+
+ def SetFlags(self, HFlags, LFlags):
+ ReturnCode = IfrQuestionHeader.SetFlags(self, HFlags)
+ if ReturnCode != VfrReturnCode.VFR_RETURN_SUCCESS:
+ return ReturnCode
+
+ LFlags, Ret = _FLAG_TEST_AND_CLEAR(LFlags, EFI_QF_DATE_YEAR_SUPPRESS)
+ if Ret:
+ self.Date.Flags |= EFI_QF_DATE_YEAR_SUPPRESS
+
+ LFlags, Ret = _FLAG_TEST_AND_CLEAR(LFlags, EFI_QF_DATE_MONTH_SUPPRESS)
+ if Ret:
+ self.Date.Flags |= EFI_QF_DATE_MONTH_SUPPRESS
+
+ LFlags, Ret = _FLAG_TEST_AND_CLEAR(LFlags, EFI_QF_DATE_DAY_SUPPRESS)
+ if Ret:
+ self.Date.Flags |= EFI_QF_DATE_DAY_SUPPRESS
+
+ LFlags, Ret = _FLAG_TEST_AND_CLEAR(LFlags, QF_DATE_STORAGE_NORMAL)
+ if Ret:
+ self.Date.Flags |= QF_DATE_STORAGE_NORMAL
+
+ LFlags, Ret = _FLAG_TEST_AND_CLEAR(LFlags, QF_DATE_STORAGE_TIME)
+ if Ret:
+ self.Date.Flags |= QF_DATE_STORAGE_TIME
+
+ LFlags, Ret = _FLAG_TEST_AND_CLEAR(LFlags, QF_DATE_STORAGE_WAKEUP)
+ if Ret:
+ self.Date.Flags |= QF_DATE_STORAGE_WAKEUP
+
+ return (
+ VfrReturnCode.VFR_RETURN_SUCCESS
+ if LFlags == 0
+ else VfrReturnCode.VFR_RETURN_FLAGS_UNSUPPORTED
+ )
+
+
+class IfrTime(IfrLine, IfrBaseInfo, IfrOpHeader, IfrQuestionHeader):
+ def __init__(self, QName=None, VarIdStr=""):
+ self.Time = EFI_IFR_TIME()
+ IfrBaseInfo.__init__(self, self.Time, QName, VarIdStr)
+ IfrOpHeader.__init__(self, self.Time.Header, EFI_IFR_TIME_OP)
+ IfrQuestionHeader.__init__(self, self.Time.Question)
+ self.Time.Flags = 0
+
+ self.Hour = None
+ self.Minute = None
+ self.Second = None
+
+ self.D_Hour = None
+ self.D_Minute = None
+ self.D_Second = None
+
+ self.Step = None
+ self.Min = None
+ self.Max = None
+
+ def SetHour(self, Hour):
+ self.Hour = Hour
+
+ def SetMinute(self, Minute):
+ self.Minute = Minute
+
+ def SetSecond(self, Second):
+ self.Second = Second
+
+ def SetFlags(self, HFlags, LFlags):
+ ReturnCode = IfrQuestionHeader.SetFlags(self, HFlags)
+ if ReturnCode != VfrReturnCode.VFR_RETURN_SUCCESS:
+ return ReturnCode
+
+ LFlags, Ret = _FLAG_TEST_AND_CLEAR(LFlags, QF_TIME_HOUR_SUPPRESS)
+ if Ret:
+ self.Time.Flags |= QF_TIME_HOUR_SUPPRESS
+
+ LFlags, Ret = _FLAG_TEST_AND_CLEAR(LFlags, QF_TIME_MINUTE_SUPPRESS)
+ if Ret:
+ self.Time.Flags |= QF_TIME_MINUTE_SUPPRESS
+
+ LFlags, Ret = _FLAG_TEST_AND_CLEAR(LFlags, QF_TIME_SECOND_SUPPRESS)
+ if Ret:
+ self.Time.Flags |= QF_TIME_SECOND_SUPPRESS
+
+ LFlags, Ret = _FLAG_TEST_AND_CLEAR(LFlags, QF_TIME_STORAGE_NORMAL)
+ if Ret:
+ self.Time.Flags |= QF_TIME_STORAGE_NORMAL
+
+ LFlags, Ret = _FLAG_TEST_AND_CLEAR(LFlags, QF_TIME_STORAGE_TIME)
+ if Ret:
+ self.Time.Flags |= QF_TIME_STORAGE_TIME
+
+ LFlags, Ret = _FLAG_TEST_AND_CLEAR(LFlags, QF_TIME_STORAGE_WAKEUP)
+ if Ret:
+ self.Time.Flags |= QF_TIME_STORAGE_WAKEUP
+
+ return (
+ VfrReturnCode.VFR_RETURN_SUCCESS
+ if LFlags == 0
+ else VfrReturnCode.VFR_RETURN_FLAGS_UNSUPPORTED
+ )
+
+
+class IfrNumeric(IfrLine, IfrBaseInfo, IfrOpHeader, IfrQuestionHeader, IfrMinMaxStepData):
+ def __init__(self, Type, QName=None, VarIdStr=""):
+ self.Numeric = Refine_EFI_IFR_NUMERIC(Type)
+ IfrBaseInfo.__init__(self, self.Numeric, QName, VarIdStr)
+ IfrOpHeader.__init__(self, self.Numeric.Header, EFI_IFR_NUMERIC_OP, sizeof(self.Numeric))
+ IfrQuestionHeader.__init__(self, self.Numeric.Question)
+ IfrMinMaxStepData.__init__(self, self.Numeric.Data, True)
+ self.Numeric.Flags = EFI_IFR_NUMERIC_SIZE_1 | EFI_IFR_DISPLAY_UINT_DEC
+
+ self.HasStep = False
+
+ def GetQuestion(self):
+ return self
+
+ def GetMinMaxData(self):
+ return self
+
+ def SetQHeaderFlags(self, Flags):
+ IfrQuestionHeader.SetFlags(self, Flags)
+
+ def SetFlags(self, HFlags, LFlags, DisplaySettingsSpecified=False):
+ ReturnCode = IfrQuestionHeader.SetFlags(self, HFlags)
+ if ReturnCode != VfrReturnCode.VFR_RETURN_SUCCESS:
+ return ReturnCode
+ if DisplaySettingsSpecified == False:
+ self.Numeric.Flags = LFlags | EFI_IFR_DISPLAY_UINT_DEC
+ else:
+ self.Numeric.Flags = LFlags
+ return VfrReturnCode.VFR_RETURN_SUCCESS
+
+ def SetFlagsForBitField(self, HFlags, LFlags, DisplaySettingsSpecified=False):
+ ReturnCode = IfrQuestionHeader.SetFlags(self, HFlags)
+ if ReturnCode != VfrReturnCode.VFR_RETURN_SUCCESS:
+ return ReturnCode
+ if DisplaySettingsSpecified == False:
+ self.Numeric.Flags = LFlags | EDKII_IFR_DISPLAY_UINT_DEC_BIT
+ else:
+ self.Numeric.Flags = LFlags
+ return VfrReturnCode.VFR_RETURN_SUCCESS
+
+ def GetNumericFlags(self):
+ return self.Numeric.Flags
+
+ def SetHasStep(self, HasStep):
+ self.HasStep = HasStep
+
+
+class IfrOneOf(IfrQuestionHeader, IfrLine, IfrBaseInfo, IfrOpHeader, IfrMinMaxStepData):
+ def __init__(self, Type, QName=None, VarIdStr=""):
+ self.OneOf = Refine_EFI_IFR_ONE_OF(Type)
+ IfrBaseInfo.__init__(self, self.OneOf, QName, VarIdStr)
+ IfrOpHeader.__init__(self, self.OneOf.Header, EFI_IFR_ONE_OF_OP, sizeof(self.OneOf))
+ IfrQuestionHeader.__init__(self, self.OneOf.Question)
+ IfrMinMaxStepData.__init__(self, self.OneOf.Data)
+ self.OneOf.Flags = 0
+
+ self.HasMinMax = False
+
+ self.HasStep = False
+
+ def GetQuestion(self):
+ return self
+
+ def GetMinMaxData(self):
+ return self
+
+ def SetQHeaderFlags(self, Flags):
+ IfrQuestionHeader.SetFlags(self, Flags)
+
+ def SetFlags(self, HFlags, LFlags):
+ ReturnCode = IfrQuestionHeader.SetFlags(self, HFlags)
+ if ReturnCode != VfrReturnCode.VFR_RETURN_SUCCESS:
+ return ReturnCode
+ if LFlags & EFI_IFR_DISPLAY:
+ self.OneOf.Flags = LFlags
+ else:
+ self.OneOf.Flags = LFlags | EFI_IFR_DISPLAY_UINT_DEC
+ return VfrReturnCode.VFR_RETURN_SUCCESS
+
+ def SetFlagsForBitField(self, HFlags, LFlags):
+ ReturnCode = IfrQuestionHeader.SetFlags(self, HFlags)
+ if ReturnCode != VfrReturnCode.VFR_RETURN_SUCCESS:
+ return ReturnCode
+ if LFlags & EDKII_IFR_DISPLAY_BIT:
+ self.OneOf.Flags = LFlags
+ else:
+ self.OneOf.Flags = LFlags | EDKII_IFR_DISPLAY_UINT_DEC_BIT
+ return VfrReturnCode.VFR_RETURN_SUCCESS
+
+ def SetHasMinMax(self, HasMinMax):
+ self.HasMinMax = HasMinMax
+
+ def SetHasStep(self, HasStep):
+ self.HasStep = HasStep
+
+
+class IfrCheckBox(IfrLine, IfrBaseInfo, IfrOpHeader, IfrQuestionHeader):
+ def __init__(self, QName=None, VarIdStr=""):
+ self.CheckBox = EFI_IFR_CHECKBOX()
+ IfrBaseInfo.__init__(self, self.CheckBox, QName, VarIdStr)
+ IfrOpHeader.__init__(self, self.CheckBox.Header, EFI_IFR_CHECKBOX_OP)
+ IfrQuestionHeader.__init__(self, self.CheckBox.Question)
+ self.CheckBox.Flags = 0
+
+ def GetQuestion(self):
+ return self
+
+ def SetQHeaderFlags(self, Flags):
+ IfrQuestionHeader.SetFlags(self, Flags)
+
+ def GetFlags(self):
+ return self.CheckBox.Flags
+
+ def SetFlags(self, HFlags, LFlags):
+ ReturnCode = IfrQuestionHeader.SetFlags(self, HFlags)
+ if ReturnCode != VfrReturnCode.VFR_RETURN_SUCCESS:
+ return ReturnCode
+
+ LFlags, Ret = _FLAG_TEST_AND_CLEAR(LFlags, EFI_IFR_CHECKBOX_DEFAULT)
+ if Ret:
+ self.CheckBox.Flags |= EFI_IFR_CHECKBOX_DEFAULT
+
+ LFlags, Ret = _FLAG_TEST_AND_CLEAR(LFlags, EFI_IFR_CHECKBOX_DEFAULT_MFG)
+
+ if Ret:
+ self.CheckBox.Flags |= EFI_IFR_CHECKBOX_DEFAULT_MFG
+
+ return (
+ VfrReturnCode.VFR_RETURN_SUCCESS
+ if LFlags == 0
+ else VfrReturnCode.VFR_RETURN_FLAGS_UNSUPPORTED
+ )
+
+
+class IfrResetButton(IfrLine, IfrOpHeader, IfrStatementHeader):
+ def __init__(self, DefaultStore=None):
+ self.ResetButton = EFI_IFR_RESET_BUTTON()
+ IfrOpHeader.__init__(self, self.ResetButton.Header, EFI_IFR_RESET_BUTTON_OP)
+ IfrStatementHeader.__init__(self, self.ResetButton.Statement)
+ self.ResetButton.DefaultId = EFI_HII_DEFAULT_CLASS_STANDARD
+
+ self.DefaultStore = DefaultStore
+
+ def SetDefaultId(self, DefaultId):
+ self.ResetButton.DefaultId = DefaultId
+
+ def SetDefaultStore(self, DefaultStore):
+ self.DefaultStore = DefaultStore
+
+ def GetInfo(self):
+ return self.ResetButton
+
+
+class IfrOr(IfrLine, IfrOpHeader):
+ def __init__(self, LineNo):
+ self.Or = EFI_IFR_OR()
+ IfrOpHeader.__init__(self, self.Or.Header, EFI_IFR_OR_OP)
+ self.SetLineNo(LineNo)
+
+ def GetInfo(self):
+ return self.Or
+
+
+class IfrAnd(IfrLine, IfrOpHeader):
+ def __init__(self, LineNo):
+ self.And = EFI_IFR_AND()
+ IfrOpHeader.__init__(self, self.And.Header, EFI_IFR_AND_OP)
+ self.SetLineNo(LineNo)
+
+ def GetInfo(self):
+ return self.And
+
+
+class IfrBitWiseOr(IfrLine, IfrOpHeader):
+ def __init__(self, LineNo):
+ self.BitWiseOr = EFI_IFR_BITWISE_OR()
+ IfrOpHeader.__init__(self, self.BitWiseOr.Header, EFI_IFR_BITWISE_OR_OP)
+ self.SetLineNo(LineNo)
+
+ def GetInfo(self):
+ return self.BitWiseOr
+
+
+class IfrCatenate(IfrLine, IfrOpHeader):
+ def __init__(self, LineNo):
+ self.Catenate = EFI_IFR_CATENATE()
+ IfrOpHeader.__init__(self, self.Catenate.Header, EFI_IFR_CATENATE_OP)
+ self.SetLineNo(LineNo)
+
+ def GetInfo(self):
+ return self.Catenate
+
+
+class IfrDivide(IfrLine, IfrOpHeader):
+ def __init__(self, LineNo):
+ self.Divide = EFI_IFR_DIVIDE()
+ IfrOpHeader.__init__(self, self.Divide.Header, EFI_IFR_DIVIDE_OP)
+ self.SetLineNo(LineNo)
+
+ def GetInfo(self):
+ return self.Divide
+
+
+class IfrEqual(IfrLine, IfrOpHeader):
+ def __init__(self, LineNo):
+ self.Equal = EFI_IFR_EQUAL()
+ IfrOpHeader.__init__(self, self.Equal.Header, EFI_IFR_EQUAL_OP)
+ self.SetLineNo(LineNo)
+
+ def GetInfo(self):
+ return self.Equal
+
+
+class IfrGreaterEqual(IfrLine, IfrOpHeader):
+ def __init__(self, LineNo):
+ self.GreaterEqual = EFI_IFR_GREATER_EQUAL()
+ IfrOpHeader.__init__(self, self.GreaterEqual.Header, EFI_IFR_GREATER_EQUAL_OP)
+ self.SetLineNo(LineNo)
+
+ def GetInfo(self):
+ return self.GreaterEqual
+
+
+class IfrGreaterThan(IfrLine, IfrOpHeader):
+ def __init__(self, LineNo):
+ self.GreaterThan = EFI_IFR_GREATER_THAN()
+ IfrOpHeader.__init__(self, self.GreaterThan.Header, EFI_IFR_GREATER_THAN_OP)
+ self.SetLineNo(LineNo)
+
+ def GetInfo(self):
+ return self.GreaterThan
+
+
+class IfrLessEqual(IfrLine, IfrOpHeader):
+ def __init__(self, LineNo):
+ self.LessEqual = EFI_IFR_LESS_EQUAL()
+ IfrOpHeader.__init__(self, self.LessEqual.Header, EFI_IFR_LESS_EQUAL_OP)
+ self.SetLineNo(LineNo)
+
+ def GetInfo(self):
+ return self.LessEqual
+
+
+class IfrLessThan(IfrLine, IfrOpHeader):
+ def __init__(self, LineNo):
+ self.LessThan = EFI_IFR_LESS_THAN()
+ IfrOpHeader.__init__(self, self.LessThan.Header, EFI_IFR_LESS_THAN_OP)
+ self.SetLineNo(LineNo)
+
+ def GetInfo(self):
+ return self.LessThan
+
+
+class IfrMap(IfrLine, IfrOpHeader):
+ def __init__(self, LineNo):
+ self.Map = EFI_IFR_MAP()
+ IfrOpHeader.__init__(self, self.Map.Header, EFI_IFR_MAP_OP)
+ self.SetLineNo(LineNo)
+
+ def GetInfo(self):
+ return self.Map
+
+
+class IfrMatch(IfrLine, IfrOpHeader):
+ def __init__(self, LineNo):
+ self.Match = EFI_IFR_MATCH()
+ IfrOpHeader.__init__(self, self.Match.Header, EFI_IFR_MATCH_OP)
+ self.SetLineNo(LineNo)
+
+ def GetInfo(self):
+ return self.Match
+
+
+class IfrMatch2(IfrLine, IfrOpHeader):
+ def __init__(self, LineNo, Guid):
+ self.Match2 = EFI_IFR_MATCH2()
+ IfrOpHeader.__init__(self, self.Match2.Header, EFI_IFR_MATCH2_OP)
+ self.SetLineNo(LineNo)
+ self.Match2.SyntaxType = Guid
+
+ def GetInfo(self):
+ return self.Match2
+
+
+class IfrMultiply(IfrLine, IfrOpHeader):
+ def __init__(self, LineNo):
+ self.Multiply = EFI_IFR_MULTIPLY()
+ IfrOpHeader.__init__(self, self.Multiply.Header, EFI_IFR_MULTIPLY_OP)
+ self.SetLineNo(LineNo)
+
+ def GetInfo(self):
+ return self.Multiply
+
+
+class IfrModulo(IfrLine, IfrOpHeader):
+ def __init__(self, LineNo):
+ self.Modulo = EFI_IFR_MODULO()
+ IfrOpHeader.__init__(self, self.Modulo.Header, EFI_IFR_MODULO_OP)
+ self.SetLineNo(LineNo)
+
+ def GetInfo(self):
+ return self.Modulo
+
+
+class IfrNotEqual(IfrLine, IfrOpHeader):
+ def __init__(self, LineNo):
+ self.NotEqual = EFI_IFR_NOT_EQUAL()
+ IfrOpHeader.__init__(self, self.NotEqual.Header, EFI_IFR_NOT_EQUAL_OP)
+ self.SetLineNo(LineNo)
+
+ def GetInfo(self):
+ return self.NotEqual
+
+
+class IfrShiftLeft(IfrLine, IfrOpHeader):
+ def __init__(self, LineNo):
+ self.ShiftLeft = EFI_IFR_SHIFT_LEFT()
+ IfrOpHeader.__init__(self, self.ShiftLeft.Header, EFI_IFR_SHIFT_LEFT_OP)
+ self.SetLineNo(LineNo)
+
+ def GetInfo(self):
+ return self.ShiftLeft
+
+
+class IfrShiftRight(IfrLine, IfrOpHeader):
+ def __init__(self, LineNo):
+ self.ShiftRight = EFI_IFR_SHIFT_RIGHT()
+ IfrOpHeader.__init__(self, self.ShiftRight.Header, EFI_IFR_SHIFT_RIGHT_OP)
+ self.SetLineNo(LineNo)
+
+ def GetInfo(self):
+ return self.ShiftRight
+
+
+class IfrSubtract(IfrLine, IfrOpHeader):
+ def __init__(self, LineNo):
+ self.Subtract = EFI_IFR_SUBTRACT()
+ IfrOpHeader.__init__(self, self.Subtract.Header, EFI_IFR_SUBTRACT_OP)
+ self.SetLineNo(LineNo)
+
+ def GetInfo(self):
+ return self.Subtract
+
+
+class IfrConditional(IfrLine, IfrOpHeader):
+ def __init__(self, LineNo):
+ self.Conditional = EFI_IFR_CONDITIONAL()
+ IfrOpHeader.__init__(self, self.Conditional.Header, EFI_IFR_CONDITIONAL_OP)
+ self.SetLineNo(LineNo)
+
+ def GetInfo(self):
+ return self.Conditional
+
+
+class IfrFind(IfrLine, IfrOpHeader):
+ def __init__(self, LineNo):
+ self.Find = EFI_IFR_FIND()
+ IfrOpHeader.__init__(self, self.Find.Header, EFI_IFR_FIND_OP)
+ self.SetLineNo(LineNo)
+
+ def SetFormat(self, Format):
+ self.Find.Format = Format
+
+ def GetInfo(self):
+ return self.Find
+
+
+class IfrMid(IfrLine, IfrOpHeader):
+ def __init__(self, LineNo):
+ self.Mid = EFI_IFR_MID()
+ IfrOpHeader.__init__(self, self.Mid.Header, EFI_IFR_MID_OP)
+ self.SetLineNo(LineNo)
+
+ def GetInfo(self):
+ return self.Mid
+
+
+class IfrToken(IfrLine, IfrOpHeader):
+ def __init__(self, LineNo):
+ self.Token = EFI_IFR_TOKEN()
+ IfrOpHeader.__init__(self, self.Token.Header, EFI_IFR_TOKEN_OP)
+ self.SetLineNo(LineNo)
+
+ def GetInfo(self):
+ return self.Token
+
+
+class IfrSpan(IfrLine, IfrOpHeader):
+ def __init__(self, LineNo):
+ self.Span = EFI_IFR_SPAN()
+ IfrOpHeader.__init__(self, self.Span.Header, EFI_IFR_SPAN_OP)
+ self.SetLineNo(LineNo)
+ self.Span.Flags = EFI_IFR_FLAGS_FIRST_MATCHING
+
+ def SetFlags(self, LFlags):
+ if LFlags == EFI_IFR_FLAGS_FIRST_MATCHING:
+ self.Span.Flags |= EFI_IFR_FLAGS_FIRST_MATCHING
+ else:
+ LFlags, Ret = _FLAG_TEST_AND_CLEAR(LFlags, EFI_IFR_FLAGS_FIRST_NON_MATCHING)
+ if Ret:
+ self.Span.Flags |= EFI_IFR_FLAGS_FIRST_NON_MATCHING
+
+ return (
+ VfrReturnCode.VFR_RETURN_SUCCESS
+ if LFlags == 0
+ else VfrReturnCode.VFR_RETURN_FLAGS_UNSUPPORTED
+ )
+
+ def GetInfo(self):
+ return self.Span
+
+
+class IfrBitWiseAnd(IfrLine, IfrOpHeader):
+ def __init__(self, LineNo):
+ self.BitWiseAnd = EFI_IFR_BITWISE_AND()
+ IfrOpHeader.__init__(self, self.BitWiseAnd.Header, EFI_IFR_BITWISE_AND_OP)
+ self.SetLineNo(LineNo)
+
+ def GetInfo(self):
+ return self.BitWiseAnd
+
+
+class IfrAdd(IfrLine, IfrOpHeader):
+ def __init__(self, LineNo):
+ self.Add = EFI_IFR_ADD()
+ IfrOpHeader.__init__(self, self.Add.Header, EFI_IFR_ADD_OP)
+ self.SetLineNo(LineNo)
+
+ def GetInfo(self):
+ return self.Add
+
+
+class IfrToString(IfrLine, IfrOpHeader):
+ def __init__(self, LineNo):
+ self.ToString = EFI_IFR_TO_STRING()
+ IfrOpHeader.__init__(self, self.ToString.Header, EFI_IFR_TO_STRING_OP)
+ self.SetLineNo(LineNo)
+
+ def SetFormat(self, Format):
+ self.ToString.Format = Format
+
+ def GetInfo(self):
+ return self.ToString
+
+
+class IfrToUpper(IfrLine, IfrOpHeader):
+ def __init__(self, LineNo):
+ self.ToUppper = EFI_IFR_TO_UPPER()
+ IfrOpHeader.__init__(self, self.ToUppper.Header, EFI_IFR_TO_UPPER_OP)
+ self.SetLineNo(LineNo)
+
+ def GetInfo(self):
+ return self.ToUppper
+
+
+class IfrToUint(IfrLine, IfrOpHeader):
+ def __init__(self, LineNo):
+ self.ToUint = EFI_IFR_TO_UINT()
+ IfrOpHeader.__init__(self, self.ToUint.Header, EFI_IFR_TO_UINT_OP)
+ self.SetLineNo(LineNo)
+
+ def GetInfo(self):
+ return self.ToUint
+
+
+class IfrToLower(IfrLine, IfrOpHeader):
+ def __init__(self, LineNo):
+ self.ToLower = EFI_IFR_TO_LOWER()
+ IfrOpHeader.__init__(self, self.ToLower.Header, EFI_IFR_TO_LOWER_OP)
+ self.SetLineNo(LineNo)
+
+ def GetInfo(self):
+ return self.ToLower
+
+
+class IfrToBoolean(IfrLine, IfrOpHeader):
+ def __init__(self, LineNo):
+ self.Boolean = EFI_IFR_TO_BOOLEAN()
+ IfrOpHeader.__init__(self, self.Boolean.Header, EFI_IFR_TO_BOOLEAN_OP)
+ self.SetLineNo(LineNo)
+
+ def GetInfo(self):
+ return self.Boolean
+
+
+class IfrNot(IfrLine, IfrOpHeader):
+ def __init__(self, LineNo):
+ self.Not = EFI_IFR_NOT()
+ IfrOpHeader.__init__(self, self.Not.Header, EFI_IFR_NOT_OP)
+ self.SetLineNo(LineNo)
+
+ def GetInfo(self):
+ return self.Not
+
+
+class IfrDup(IfrLine, IfrOpHeader):
+ def __init__(self, LineNo):
+ self.Dup = EFI_IFR_DUP()
+ IfrOpHeader.__init__(self, self.Dup.Header, EFI_IFR_DUP_OP)
+ self.SetLineNo(LineNo)
+
+ def GetHeader(self):
+ return self.Dup.Header
+
+ def GetInfo(self):
+ return self.Dup
+
+
+class IfrEqIdId(IfrLine, IfrOpHeader):
+ def __init__(self, LineNo):
+ self.EqIdId = EFI_IFR_EQ_ID_ID()
+ IfrOpHeader.__init__(self, self.EqIdId.Header, EFI_IFR_EQ_ID_ID_OP)
+ self.SetLineNo(LineNo)
+ self.EqIdId.QuestionId1 = EFI_QUESTION_ID_INVALID
+ self.EqIdId.QuestionId2 = EFI_QUESTION_ID_INVALID
+
+ def GetHeader(self):
+ return self.EqIdId.Header
+
+ def SetQuestionId1(self, QuestionId, VarIdStr, LineNo):
+ if QuestionId != EFI_QUESTION_ID_INVALID:
+ self.EqIdId.QuestionId1 = QuestionId
+ else:
+ gFormPkg.AssignPending(VarIdStr, self.EqIdId, LineNo, "no question refered", 1)
+
+ def SetQuestionId2(self, QuestionId, VarIdStr, LineNo):
+ if QuestionId != EFI_QUESTION_ID_INVALID:
+ self.EqIdId.QuestionId2 = QuestionId
+ else:
+ gFormPkg.AssignPending(VarIdStr, self.EqIdId, LineNo, "no question refered", 2)
+
+ def GetInfo(self):
+ return self.EqIdId
+
+
+class IfrEqIdVal(IfrLine, IfrOpHeader):
+ def __init__(self, LineNo):
+ self.EqIdVal = EFI_IFR_EQ_ID_VAL()
+ IfrOpHeader.__init__(self, self.EqIdVal.Header, EFI_IFR_EQ_ID_VAL_OP)
+ self.SetLineNo(LineNo)
+ self.EqIdVal.QuestionId = EFI_QUESTION_ID_INVALID
+
+ def SetQuestionId(self, QuestionId, VarIdStr, LineNo):
+ if QuestionId != EFI_QUESTION_ID_INVALID:
+ self.EqIdVal.QuestionId = QuestionId
+ else:
+ gFormPkg.AssignPending(VarIdStr, self.EqIdVal, LineNo, "no question refered")
+
+ def SetValue(self, Value):
+ self.EqIdVal.Value = Value
+
+ def GetHeader(self):
+ return self.EqIdVal.Header
+
+ def GetInfo(self):
+ return self.EqIdVal
+
+
+class IfrEqIdList(IfrLine, IfrOpHeader):
+ def __init__(self, LineNo, Nums, ValueList=None):
+ self.EqIdVList = Refine_EFI_IFR_EQ_ID_VAL_LIST(Nums)
+ IfrOpHeader.__init__(
+ self, self.EqIdVList.Header, EFI_IFR_EQ_ID_VAL_LIST_OP, sizeof(self.EqIdVList)
+ )
+ self.SetLineNo(LineNo)
+ self.EqIdVList.QuestionId = EFI_QUESTION_ID_INVALID
+ self.EqIdVList.ListLength = 0
+ if ValueList is not None and ValueList != []:
+ ArrayType = c_uint16 * Nums
+ ValueArray = ArrayType()
+ for i in range(0, len(ValueList)):
+ ValueArray[i] = ValueList[i]
+ self.EqIdVList.ValueList = ValueArray
+
+ def SetQuestionId(self, QuestionId, VarIdStr, LineNo):
+ if QuestionId != EFI_QUESTION_ID_INVALID:
+ self.EqIdVList.QuestionId = QuestionId
+ else:
+ gFormPkg.AssignPending(VarIdStr, self.EqIdVList, LineNo, "no question refered")
+
+ def SetListLength(self, ListLength):
+ self.EqIdVList.ListLength = ListLength
+
+ def SetValueList(self, ValueList):
+ if ValueList != []:
+ ArrayType = c_uint16 * len(ValueList)
+ ValueArray = ArrayType()
+ for i in range(0, len(ValueList)):
+ ValueArray[i] = ValueList[i]
+ self.EqIdVList.ValueList = ValueArray
+
+ def GetHeader(self):
+ return self.EqIdVList.Header
+
+ def GetInfo(self):
+ return self.EqIdVList
+
+
+class IfrUint8(IfrLine, IfrOpHeader):
+ def __init__(self, LineNo):
+ self.Uint8 = EFI_IFR_UINT8()
+ IfrOpHeader.__init__(self, self.Uint8.Header, EFI_IFR_UINT8_OP)
+ self.SetLineNo(LineNo)
+
+ def SetValue(self, Value):
+ self.Uint8.Value = Value
+
+ def GetHeader(self):
+ return self.Uint8.Header
+
+ def GetInfo(self):
+ return self.Uint8
+
+
+class IfrUint16(IfrLine, IfrOpHeader):
+ def __init__(self, LineNo):
+ self.Uint16 = EFI_IFR_UINT16()
+ IfrOpHeader.__init__(self, self.Uint16.Header, EFI_IFR_UINT16_OP)
+ self.SetLineNo(LineNo)
+
+ def SetValue(self, Value):
+ self.Uint16.Value = Value
+
+ def GetHeader(self):
+ return self.Uint16.Header
+
+ def GetInfo(self):
+ return self.Uint16
+
+
+class IfrUint32(IfrLine, IfrOpHeader):
+ def __init__(self, LineNo):
+ self.Uint32 = EFI_IFR_UINT32()
+ IfrOpHeader.__init__(self, self.Uint32.Header, EFI_IFR_UINT32_OP)
+ self.SetLineNo(LineNo)
+
+ def SetValue(self, Value):
+ self.Uint32.Value = Value
+
+ def GetHeader(self):
+ return self.Uint32.Header
+
+ def GetInfo(self):
+ return self.Uint32
+
+
+class IfrUint64(IfrLine, IfrOpHeader):
+ def __init__(self, LineNo):
+ self.Uint64 = EFI_IFR_UINT64()
+ IfrOpHeader.__init__(self, self.Uint64.Header, EFI_IFR_UINT64_OP, sizeof(EFI_IFR_UINT64))
+ self.SetLineNo(LineNo)
+
+ def SetValue(self, Value):
+ self.Uint64.Value = Value
+
+ def GetHeader(self):
+ return self.Uint64.Header
+
+ def GetInfo(self):
+ return self.Uint64
+
+
+class IfrQuestionRef1(IfrLine, IfrOpHeader):
+ def __init__(self, LineNo):
+ self.QuestionRef1 = EFI_IFR_QUESTION_REF1()
+ IfrOpHeader.__init__(self, self.QuestionRef1.Header, EFI_IFR_QUESTION_REF1_OP)
+ self.SetLineNo(LineNo)
+ self.QuestionRef1.QuestionId = EFI_QUESTION_ID_INVALID
+
+ def GetHeader(self):
+ return self.QuestionRef1.Header
+
+ def SetQuestionId(self, QuestionId, VarIdStr, LineNo):
+ if QuestionId != EFI_QUESTION_ID_INVALID:
+ self.QuestionRef1.QuestionId = QuestionId
+ else:
+ gFormPkg.AssignPending(VarIdStr, self.QuestionRef1, LineNo, "no question refered")
+
+ def GetInfo(self):
+ return self.QuestionRef1
+
+
+class IfrQuestionRef2(IfrLine, IfrOpHeader):
+ def __init__(self, LineNo):
+ self.QuestionRef2 = EFI_IFR_QUESTION_REF2()
+ IfrOpHeader.__init__(self, self.QuestionRef2.Header, EFI_IFR_QUESTION_REF2_OP)
+ self.SetLineNo(LineNo)
+
+ def GetHeader(self):
+ return self.QuestionRef2.Header
+
+ def GetInfo(self):
+ return self.QuestionRef2
+
+
+class IfrQuestionRef3(IfrLine, IfrOpHeader):
+ def __init__(self, LineNo):
+ self.QuestionRef3 = EFI_IFR_QUESTION_REF3()
+ IfrOpHeader.__init__(
+ self, self.QuestionRef3.Header, EFI_IFR_QUESTION_REF3_OP, sizeof(EFI_IFR_QUESTION_REF3)
+ )
+ self.SetLineNo(LineNo)
+
+ def GetHeader(self):
+ return self.QuestionRef3.Header
+
+ def GetInfo(self):
+ return self.QuestionRef3
+
+
+class IfrQuestionRef3_2(IfrLine, IfrOpHeader):
+ def __init__(self, LineNo):
+ self.QuestionRef3_2 = EFI_IFR_QUESTION_REF3_2()
+ IfrOpHeader.__init__(
+ self,
+ self.QuestionRef3_2.Header,
+ EFI_IFR_QUESTION_REF3_OP,
+ sizeof(EFI_IFR_QUESTION_REF3_2),
+ )
+ self.SetLineNo(LineNo)
+ self.QuestionRef3_2.DevicePath = EFI_STRING_ID_INVALID
+
+ def SetDevicePath(self, DevicePath):
+ self.QuestionRef3_2.DevicePath = DevicePath
+
+ def GetHeader(self):
+ return self.QuestionRef3_2.Header
+
+ def GetInfo(self):
+ return self.QuestionRef3_2
+
+
+class IfrQuestionRef3_3(IfrLine, IfrOpHeader):
+ def __init__(self, LineNo):
+ self.QuestionRef3_3 = EFI_IFR_QUESTION_REF3_3()
+ IfrOpHeader.__init__(
+ self,
+ self.QuestionRef3_3.Header,
+ EFI_IFR_QUESTION_REF3_OP,
+ sizeof(EFI_IFR_QUESTION_REF3_3),
+ )
+ self.SetLineNo(LineNo)
+ self.QuestionRef3_3.DevicePath = EFI_STRING_ID_INVALID
+ self.QuestionRef3_3.Guid = EFI_GUID(0, 0, 0, GuidArray(0, 0, 0, 0, 0, 0, 0, 0))
+
+ def SetDevicePath(self, DevicePath):
+ self.QuestionRef3_3.DevicePath = DevicePath
+
+ def SetGuid(self, Guid):
+ self.QuestionRef3_3.Guid = Guid
+
+ def GetHeader(self):
+ return self.QuestionRef3_3.Header
+
+ def GetInfo(self):
+ return self.QuestionRef3_3
+
+
+class IfrRuleRef(IfrLine, IfrOpHeader):
+ def __init__(self, LineNo):
+ self.RuleRef = EFI_IFR_RULE_REF()
+ IfrOpHeader.__init__(self, self.RuleRef.Header, EFI_IFR_RULE_REF_OP)
+ self.SetLineNo(LineNo)
+ self.RuleRef.RuleId = EFI_RULE_ID_INVALID
+
+ def SetRuleId(self, RuleId):
+ self.RuleRef.RuleId = RuleId
+
+ def GetHeader(self):
+ return self.RuleRef.Header
+
+ def GetInfo(self):
+ return self.RuleRef
+
+
+class IfrStringRef1(IfrLine, IfrOpHeader):
+ def __init__(self, LineNo):
+ self.StringRef1 = EFI_IFR_STRING_REF1()
+ IfrOpHeader.__init__(self, self.StringRef1.Header, EFI_IFR_STRING_REF1_OP)
+ self.SetLineNo(LineNo)
+ self.StringRef1.StringId = EFI_STRING_ID_INVALID
+
+ def SetStringId(self, StringId):
+ self.StringRef1.StringId = StringId
+
+ def GetHeader(self):
+ return self.StringRef1.Header
+
+ def GetInfo(self):
+ return self.StringRef1
+
+
+class IfrStringRef2(IfrLine, IfrOpHeader):
+ def __init__(self, LineNo):
+ self.StringRef2 = EFI_IFR_STRING_REF2()
+ IfrOpHeader.__init__(self, self.StringRef2.Header, EFI_IFR_STRING_REF2_OP)
+ self.SetLineNo(LineNo)
+
+ def GetHeader(self):
+ return self.StringRef2.Header
+
+ def GetInfo(self):
+ return self.StringRef2
+
+
+class IfrThis(IfrLine, IfrOpHeader):
+ def __init__(self, LineNo):
+ self.This = EFI_IFR_THIS()
+ IfrOpHeader.__init__(self, self.This.Header, EFI_IFR_THIS_OP)
+ self.SetLineNo(LineNo)
+
+ def GetHeader(self):
+ return self.This.Header
+
+ def GetInfo(self):
+ return self.This
+
+
+class IfrSecurity(IfrLine, IfrOpHeader):
+ def __init__(self, LineNo):
+ self.Security = EFI_IFR_SECURITY()
+ IfrOpHeader.__init__(self, self.Security.Header, EFI_IFR_SECURITY_OP)
+ self.SetLineNo(LineNo)
+ self.Security.Permissions = EFI_GUID(0, 0, 0, GuidArray(0, 0, 0, 0, 0, 0, 0, 0))
+
+ def SetPermissions(self, Permissions):
+ self.Security.Permissions = Permissions
+
+ def GetHeader(self):
+ return self.Security.Header
+
+ def GetInfo(self):
+ return self.Security
+
+
+class IfrGet(IfrLine, IfrOpHeader):
+ def __init__(self, LineNo):
+ self.Get = EFI_IFR_GET()
+ IfrOpHeader.__init__(self, self.Get.Header, EFI_IFR_GET_OP)
+ self.SetLineNo(LineNo)
+
+ def SetVarInfo(self, BaseInfo: EFI_VARSTORE_INFO):
+ self.Get.VarStoreId = BaseInfo.VarStoreId
+ self.Get.VarStoreInfo.VarName = BaseInfo.Info.VarName
+ self.Get.VarStoreInfo.VarOffset = BaseInfo.Info.VarOffset
+ self.Get.VarStoreType = BaseInfo.VarType
+
+ def GetHeader(self):
+ return self.Get.Header
+
+ def GetInfo(self):
+ return self.Get
+
+
+class IfrSet(IfrLine, IfrOpHeader):
+ def __init__(self, LineNo):
+ self.Set = EFI_IFR_SET()
+ IfrOpHeader.__init__(self, self.Set.Header, EFI_IFR_SET_OP)
+ self.SetLineNo(LineNo)
+
+ def SetVarInfo(self, BaseInfo: EFI_VARSTORE_INFO):
+ self.Set.VarStoreId = BaseInfo.VarStoreId
+ self.Set.VarStoreInfo.VarName = BaseInfo.Info.VarName
+ self.Set.VarStoreInfo.VarOffset = BaseInfo.Info.VarOffset
+ self.Set.VarStoreType = BaseInfo.VarType
+
+ def GetHeader(self):
+ return self.Set.Header
+
+ def GetInfo(self):
+ return self.Set
+
+
+class IfrTrue(IfrLine, IfrOpHeader):
+ def __init__(self, LineNo):
+ self.TrueOp = EFI_IFR_TRUE()
+ IfrOpHeader.__init__(self, self.TrueOp.Header, EFI_IFR_TRUE_OP)
+ self.SetLineNo(LineNo)
+
+ def GetHeader(self):
+ return self.TrueOp.Header
+
+ def GetInfo(self):
+ return self.TrueOp
+
+
+class IfrFalse(IfrLine, IfrOpHeader):
+ def __init__(self, LineNo):
+ self.FalseOp = EFI_IFR_TRUE()
+ IfrOpHeader.__init__(self, self.FalseOp.Header, EFI_IFR_FALSE_OP)
+ self.SetLineNo(LineNo)
+
+ def GetHeader(self):
+ return self.FalseOp.Header
+
+ def GetInfo(self):
+ return self.FalseOp
+
+
+class IfrOne(IfrLine, IfrOpHeader):
+ def __init__(self, LineNo):
+ self.One = EFI_IFR_ONE()
+ IfrOpHeader.__init__(self, self.One.Header, EFI_IFR_ONE_OP)
+ self.SetLineNo(LineNo)
+
+ def GetHeader(self):
+ return self.One.Header
+
+ def GetInfo(self):
+ return self.One
+
+
+class IfrOnes(IfrLine, IfrOpHeader):
+ def __init__(self, LineNo):
+ self.Ones = EFI_IFR_ONE()
+ IfrOpHeader.__init__(self, self.Ones.Header, EFI_IFR_ONES_OP)
+ self.SetLineNo(LineNo)
+
+ def GetHeader(self):
+ return self.Ones.Header
+
+ def GetInfo(self):
+ return self.Ones
+
+
+class IfrZero(IfrLine, IfrOpHeader):
+ def __init__(self, LineNo):
+ self.Zero = EFI_IFR_ZERO()
+ IfrOpHeader.__init__(self, self.Zero.Header, EFI_IFR_ZERO_OP)
+ self.SetLineNo(LineNo)
+
+ def GetHeader(self):
+ return self.Zero.Header
+
+ def GetInfo(self):
+ return self.Zero
+
+
+class IfrUndefined(IfrLine, IfrOpHeader):
+ def __init__(self, LineNo):
+ self.Undefined = EFI_IFR_ZERO()
+ IfrOpHeader.__init__(self, self.Undefined.Header, EFI_IFR_UNDEFINED_OP)
+ self.SetLineNo(LineNo)
+
+ def GetHeader(self):
+ return self.Undefined.Header
+
+ def GetInfo(self):
+ return self.Undefined
+
+
+class IfrVersion(IfrLine, IfrOpHeader):
+ def __init__(self, LineNo):
+ self.Version = EFI_IFR_VERSION()
+ IfrOpHeader.__init__(self, self.Version.Header, EFI_IFR_VERSION_OP)
+ self.SetLineNo(LineNo)
+
+ def GetHeader(self):
+ return self.Version.Header
+
+ def GetInfo(self):
+ return self.Version
+
+
+class IfrLength(IfrLine, IfrOpHeader):
+ def __init__(self, LineNo):
+ self.Length = EFI_IFR_LENGTH()
+ IfrOpHeader.__init__(self, self.Length.Header, EFI_IFR_LENGTH_OP)
+ self.SetLineNo(LineNo)
+
+ def GetInfo(self):
+ return self.Length
+
+
+class IfrBitWiseNot(IfrLine, IfrOpHeader):
+ def __init__(self, LineNo):
+ self.BitWiseNot = EFI_IFR_BITWISE_NOT()
+ IfrOpHeader.__init__(self, self.BitWiseNot.Header, EFI_IFR_BITWISE_NOT_OP)
+ self.SetLineNo(LineNo)
+
+ def GetInfo(self):
+ return self.BitWiseNot
+
+
+class ExpressionInfo:
+ def __init__(self):
+ self.RootLevel = 0
+ self.ExpOpCount = 0
diff --git a/BaseTools/Source/Python/VfrCompiler/IfrPreProcess.py b/BaseTools/Source/Python/VfrCompiler/IfrPreProcess.py
new file mode 100644
index 0000000000..ed454cdcf3
--- /dev/null
+++ b/BaseTools/Source/Python/VfrCompiler/IfrPreProcess.py
@@ -0,0 +1,245 @@
+## @file
+# The file is used to preprocess the source file.
+#
+# Copyright (c) 2022-, Intel Corporation. All rights reserved.<BR>
+# SPDX-License-Identifier: BSD-2-Clause-Patent
+##
+
+import re
+import Common.EdkLogger as EdkLogger
+from antlr4 import *
+from pathlib import Path
+from Common.BuildToolError import *
+from VfrCompiler.IfrCtypes import EFI_GUID
+from VfrCompiler.IfrUtility import VfrVarDataTypeDB
+from Common.LongFilePathSupport import LongFilePath
+from VfrCompiler.IfrCommon import GUID_BUFFER_VALUE_LEN
+
+
+class Options:
+ def __init__(self):
+ # open/close VfrCompiler
+ self.LanuchVfrCompiler = False
+ self.ModuleName = None
+ self.Workspace = None
+ self.VFRPP = None
+ self.InputFileName = None
+ self.BaseFileName = None
+ self.IncludePaths = []
+ self.OutputDirectory = None
+ self.DebugDirectory = None
+ self.CreateRecordListFile = True
+ self.RecordListFileName = None
+ self.CreateIfrPkgFile = True
+ self.PkgOutputFileName = None
+ self.COutputFileName = None
+ self.SkipCPreprocessor = True
+ self.CPreprocessorOptions = None
+ self.CProcessedVfrFileName = None
+ self.HasOverrideClassGuid = False
+ self.OverrideClassGuid = None
+ self.WarningAsError = False
+ self.AutoDefault = False
+ self.CheckDefault = False
+ self.CreateYamlFile = True
+ self.YamlFileName = None
+ self.CreateJsonFile = True
+ self.JsonFileName = None
+ self.UniStrDefFileName = None
+ self.YamlOutputFileName = None
+ self.UniStrDisplayFile = None
+
+
+class KV:
+ def __init__(self, Key, Value) -> None:
+ self.Key = Key
+ self.Value = Value
+
+
+class ValueDB:
+ def __init__(self, PreVal, PostVal) -> None:
+ self.PreVal = PreVal
+ self.PostVal = PostVal
+
+
+class PreProcessDB:
+ def __init__(self, Options: Options) -> None:
+ self.Options = Options
+ self.VfrVarDataTypeDB = VfrVarDataTypeDB()
+ self.Preprocessed = False
+
+ def Preprocess(self):
+ self.HeaderFiles = self._ExtractHeaderFiles()
+ # Read Uni string token/id definitions in StrDef.h file
+ self.UniDict = self._GetUniDicts()
+ # Read definitions in vfr file
+ self.VfrDict = self._GetVfrDicts()
+ self.Preprocessed = True
+
+ def TransValue(self, Value):
+ if type(Value) == EFI_GUID:
+ return Value
+ else:
+ StrValue = str(Value)
+ if self._IsDigit(StrValue):
+ return self._ToDigit(StrValue)
+ else:
+ GuidList = re.findall(r"0x[0-9a-fA-F]+", StrValue)
+ GuidList = [int(num, 16) for num in GuidList]
+ Guid = EFI_GUID()
+ Guid.from_list(GuidList)
+ return Guid
+
+ def RevertValue(self, Value) -> str:
+ if type(Value) == EFI_GUID:
+ return Value.to_string()
+ elif ("0x" in Value) or ("0X" in Value):
+ StrValue = hex(Value)
+ else:
+ StrValue = str(Value)
+ return StrValue
+
+ def DisplayValue(self, Value, Flag=False):
+ if type(Value) == EFI_GUID:
+ return Value.to_string()
+ StrValue = str(Value)
+ if self._IsDigit(StrValue):
+ if Flag:
+ return f"STRING_TOKEN({StrValue})"
+ return int(StrValue, 0)
+ return StrValue
+
+ def GetKey(self, Value):
+ if type(Value) == EFI_GUID:
+ Value = Value.to_string()
+ if Value in self.UniDict:
+ return self.UniDict[Value]
+ if Value in self.VfrDict:
+ return self.VfrDict[Value]
+ else:
+ Value = "0x%04x" % Value
+ Value = Value[:2] + Value[2:].upper()
+ if Value in self.UniDict:
+ return self.UniDict[Value]
+ return Value
+
+ def _ExtractHeaderFiles(self):
+ FileName = self.Options.InputFileName
+ HeaderFiles = []
+ try:
+ with open(LongFilePath(FileName), mode="r") as fFile:
+ lines = fFile.readlines()
+ for line in lines:
+ if "#include" in line:
+ if line.find("<") != -1:
+ HeaderFile = line[line.find("<") + 1 : line.find(">")]
+ HeaderFiles.append(HeaderFile)
+ elif line.find('"') != -1:
+ l = line.find('"') + 1
+ r = l + line[l:].find('"')
+ HeaderFile = line[l:r]
+ HeaderFiles.append(HeaderFile)
+ except Exception:
+ EdkLogger.error(
+ "VfrCompiler", FILE_PARSE_FAILURE, "File parse failed for %s" % FileName, None
+ )
+ return HeaderFiles
+
+ def _GetUniDicts(self):
+ if self.Options.UniStrDefFileName is None:
+ self.Options.UniStrDefFileName = str(
+ Path(self.Options.DebugDirectory) / f"{self.Options.ModuleName}StrDefs.h"
+ )
+ # find UniFile
+ FileName = self.Options.UniStrDefFileName
+ UniDict = {}
+ self._ParseDefines(FileName, UniDict)
+ return UniDict
+
+ def _GetVfrDicts(self):
+ VfrDict = {}
+ if self.Options.LanuchVfrCompiler:
+ FileName = self.Options.InputFileName
+ self._ParseDefines(FileName, VfrDict, True)
+ return VfrDict
+
+ def _IsDigit(self, String):
+ return String.isdigit() or (
+ String.startswith(("0x", "0X"))
+ and all(char in "0123456789ABCDEFabcdef" for char in String[2:])
+ )
+
+ def _ToDigit(self, String):
+ if String.startswith(("0x", "0X")):
+ return int(String, 16)
+ return int(String)
+
+ def _ParseDefines(self, FileName, Dict, IsVfrDef=False):
+ Pattern = r"#define\s+(\w+)\s+(.*?)(?:(?<!\\)\n|$)"
+ with open(FileName) as File:
+ Content = File.read()
+
+ Matches = re.findall(Pattern, Content, re.DOTALL)
+ for Match in Matches:
+ Key = Match[0]
+ Value = re.sub(r"\s+", " ", Match[1].replace("\\\n", "").strip())
+ SubDefineMatches = re.findall(
+ r"#define\s+(\w+)\s+(.*?)(?:(?<!\\)\n|$)", Value, re.DOTALL
+ )
+ if SubDefineMatches:
+ for SubMatch in SubDefineMatches:
+ SubKey = SubMatch[0]
+ SubValue = re.sub(r"\s+", " ", SubMatch[1].replace("\\\n", "").strip())
+ if SubValue.find("//") != -1:
+ SubValue = SubValue.split("//")[0].strip()
+
+ if SubValue.find("{") != -1:
+ GuidList = re.findall(r"0x[0-9a-fA-F]+", SubValue)
+ GuidList = [int(num, 16) for num in GuidList]
+ SubValue = EFI_GUID()
+ if len(GuidList) == GUID_BUFFER_VALUE_LEN:
+ SubValue.from_list(GuidList)
+
+ if self.Options.LanuchVfrCompiler:
+ # GUID is unique, to transfer GUID Parsed Value -> GUID Defined Key.
+ if IsVfrDef:
+ # Save def info for yaml generation
+ Dict[SubKey] = SubValue
+ # tranfer value to key for yaml generation
+ if type(SubValue) == EFI_GUID:
+ Dict[SubValue.to_string()] = SubKey
+ else:
+ SubValue = (
+ str(SubValue)
+ if type(SubValue) != EFI_GUID
+ else SubValue.to_string()
+ )
+ Dict[SubValue] = SubKey
+ else:
+ if Value.find("//") != -1:
+ Value = Value.split("//")[0].strip()
+ if Value.find("{") != -1:
+ GuidList = re.findall(r"0x[0-9a-fA-F]+", Value)
+ GuidList = [int(num, 16) for num in GuidList]
+ Value = EFI_GUID()
+ if len(GuidList) == GUID_BUFFER_VALUE_LEN:
+ Value.from_list(GuidList)
+
+ if self.Options.LanuchVfrCompiler:
+ # GUID is unique, to transfer GUID Parsed Value -> GUID Defined Key.
+ if IsVfrDef:
+ Dict[Key] = Value
+ if type(Value) == EFI_GUID:
+ Dict[Value.to_string()] = Key
+ else:
+ Value = str(Value) if type(Value) != EFI_GUID else Value.to_string()
+ Dict[Value] = Key
+
+ def _FindIncludeHeaderFile(self, IncludePaths, File):
+ FileList = []
+ Name = File.split("/")[-1]
+ for Start in IncludePaths:
+ Matches = list(Path(Start).rglob(Name))
+ for MatchFile in Matches:
+ FileList.append(str(MatchFile))
+ return list(set(FileList))
diff --git a/BaseTools/Source/Python/VfrCompiler/IfrTree.py b/BaseTools/Source/Python/VfrCompiler/IfrTree.py
new file mode 100644
index 0000000000..faa2e4677d
--- /dev/null
+++ b/BaseTools/Source/Python/VfrCompiler/IfrTree.py
@@ -0,0 +1,1132 @@
+## @file
+# The file is used to define vfr tree structure and related operations.
+#
+# Copyright (c) 2022-, Intel Corporation. All rights reserved.<BR>
+# SPDX-License-Identifier: BSD-2-Clause-Patent
+##
+
+import Common.EdkLogger as EdkLogger
+from Common.BuildToolError import *
+from VfrCompiler.IfrCtypes import *
+from VfrCompiler.IfrFormPkg import *
+from VfrCompiler.IfrUtility import gVfrBufferConfig
+from VfrCompiler.IfrPreProcess import PreProcessDB, Options
+
+
+VFR_COMPILER_VERSION = "2.01 (UEFI 2.4)"
+BUILD_VERSION = "Developer Build based on Revision: Unknown"
+BYTES_PRE_LINE = 0x10
+
+
+# Ifr related Info -> ctypes obj
+# conditional Info
+# Structure Info
+class IfrTreeNode:
+ def __init__(self, OpCode=None, Data=None, Buffer=None, Position=None):
+ self.OpCode = OpCode
+ self.Data = Data
+ self.Buffer = Buffer
+ self.Position = Position
+ self.Condition = None
+ self.Expression = None
+ self.Dict = {}
+ self.Offset = None
+ self.Parent = None
+ self.Child = []
+ self.Level = -1
+
+ def hasCondition(self):
+ return self.Condition
+
+ def hasChild(self):
+ return self.Child == []
+
+ def isFinalChild(self):
+ ParTree = self.Parent
+ if ParTree and ParTree.Child[-1] == self:
+ return True
+ return False
+
+ def insertChild(self, NewNode, pos: int = None):
+ if NewNode is not None:
+ if not pos:
+ self.Child.append(NewNode)
+ else:
+ self.Child.insert(pos, NewNode)
+
+ NewNode.Parent = self
+
+ def insertRel(self, newNode):
+ if self.Parent:
+ parentTree = self.Parent
+ new_index = parentTree.Child.index(self) + 1
+ parentTree.Child.insert(new_index, newNode)
+ self.NextRel = newNode
+ newNode.LastRel = self
+
+ def deleteNode(self, deletekey: str):
+ FindStatus, DeleteTree = self.FindNode(deletekey)
+ if FindStatus:
+ parentTree = DeleteTree.Parent
+ lastTree = DeleteTree.LastRel
+ nextTree = DeleteTree.NextRel
+ if parentTree:
+ index = parentTree.Child.index(DeleteTree)
+ del parentTree.Child[index]
+ if lastTree and nextTree:
+ lastTree.NextRel = nextTree
+ nextTree.LastRel = lastTree
+ elif lastTree:
+ lastTree.NextRel = None
+ elif nextTree:
+ nextTree.LastRel = None
+ return DeleteTree
+ return None
+
+
+ExpOps = [
+ EFI_IFR_DUP_OP,
+ EFI_IFR_EQ_ID_VAL_OP,
+ EFI_IFR_QUESTION_REF1_OP,
+ EFI_IFR_EQ_ID_VAL_OP,
+ EFI_IFR_EQ_ID_ID_OP,
+ EFI_IFR_EQ_ID_VAL_LIST_OP,
+ EFI_IFR_RULE_REF_OP,
+ EFI_IFR_STRING_REF1_OP,
+ EFI_IFR_THIS_OP,
+ EFI_IFR_SECURITY_OP,
+ EFI_IFR_GET_OP,
+ EFI_IFR_TRUE_OP,
+ EFI_IFR_FALSE_OP,
+ EFI_IFR_ONE_OP,
+ EFI_IFR_ONES_OP,
+ EFI_IFR_ZERO_OP,
+ EFI_IFR_UNDEFINED_OP,
+ EFI_IFR_VERSION_OP,
+ EFI_IFR_UINT64_OP,
+ EFI_IFR_QUESTION_REF2_OP,
+ EFI_IFR_QUESTION_REF3_OP,
+ EFI_IFR_SET_OP,
+ EFI_IFR_DEFAULTSTORE_OP,
+ EFI_IFR_OR_OP,
+]
+
+DefaultDictList = []
+
+
+class ReCordNode(Structure):
+ def __init__(self, Record, LineNo):
+ self.Record = Record
+ self.LineNo = LineNo
+
+
+class IfrTree:
+ def __init__(self, Root: IfrTreeNode, PreProcessDB: PreProcessDB, Options: Options) -> None:
+ self.Root = Root
+ self.Options = Options
+ self.PreProcessDB = PreProcessDB
+
+ def GenBinaryFiles(self):
+ RecordLines = []
+ HpkFile = self.Options.PkgOutputFileName
+ CFile = self.Options.COutputFileName
+ LstFile = self.Options.RecordListFileName
+ if self.Options.CreateIfrPkgFile:
+ # GenBinary
+ PkgHdr = gFormPkg.BuildPkgHdr()
+ try:
+ with open(HpkFile, "wb") as Hpk:
+ Hpk.write(gFormPkg.StructToStream(PkgHdr))
+ except Exception as e:
+ EdkLogger.error(
+ "VfrCompiler", FILE_OPEN_FAILURE, f"File open failed for {HpkFile}: {e}"
+ )
+
+ # GenCFile
+ try:
+ with open(CFile, "w") as C:
+ C.write("//\n")
+ C.write("//" + " " + "DO NOT EDIT -- auto-generated file\n")
+ C.write("//\n")
+ C.write("//" + " " + "This file is generated by the vfrcompiler utility\n")
+ C.write("//\n\n")
+ BaseName = "unsigned char " + self.Options.BaseFileName + "Bin[] = {\n"
+ C.write(BaseName)
+ C.write(" // ARRAY LENGTH\n\n")
+ PkgLength = PkgHdr.Length + sizeof(c_uint32)
+ for B in PkgLength.to_bytes(4, byteorder="little", signed=True):
+ C.write(" 0x%02X," % B)
+ C.write("\n\n")
+ C.write(" // PACKAGE HEADER\n\n")
+ HeaderBuffer = gFormPkg.StructToStream(PkgHdr)
+ for B in HeaderBuffer:
+ C.write(" 0x%02X," % B)
+ C.write("\n\n")
+ C.write(" //" + " " + "PACKAGE DATA\n\n")
+ self.Index = 0
+ except Exception as e:
+ EdkLogger.error(
+ "VfrCompiler", FILE_OPEN_FAILURE, f"File open failed for {CFile}: {e}"
+ )
+
+ if self.Options.CreateRecordListFile:
+ # GenRecordList
+ try:
+ with open(LstFile, "w") as Lst:
+ Lst.write(
+ f"//\n// VFR compiler version {VFR_COMPILER_VERSION} {BUILD_VERSION}\n//\n"
+ )
+ except Exception as e:
+ EdkLogger.error(
+ "VfrCompiler", FILE_OPEN_FAILURE, f"File open failed for {LstFile}: {e}"
+ )
+
+ self._GenBinaryFilesDfs(self.Root, HpkFile, CFile, RecordLines)
+
+ if self.Options.CreateIfrPkgFile:
+ # GenCFile
+ try:
+ with open(CFile, "a") as C:
+ C.write("\n};\n")
+ except Exception as e:
+ EdkLogger.error(
+ "VfrCompiler", FILE_WRITE_FAILURE, f"File write failed for {CFile}: {e}", None
+ )
+
+ if self.Options.CreateRecordListFile:
+ # GenRecordList
+ InFileLines = []
+ try:
+ with open(self.Options.CProcessedVfrFileName, "r") as In:
+ for Line in In:
+ InFileLines.append(Line)
+ except Exception as e:
+ EdkLogger.error(
+ "VfrCompiler",
+ FILE_OPEN_FAILURE,
+ f"File open failed for {self.Options.CProcessedVfrFileName}: {e}",
+ None,
+ )
+ try:
+ with open(LstFile, "a") as Lst:
+ InsertedLine = 0
+ for RecordLine in RecordLines:
+ InFileLines.insert(RecordLine.LineNo + InsertedLine, RecordLine.Record)
+ InsertedLine += 1
+ for Line in InFileLines:
+ Lst.write(f"{Line}")
+ Lst.write("//\n// All Opcode Record List\n//\n")
+ for RecordLine in RecordLines:
+ Lst.write(f"{RecordLine.Record}")
+ Lst.write(f"\nTotal Size of all record is {gFormPkg.Offset:0>8x}")
+ gVfrVarDataTypeDB.Dump(Lst)
+ except Exception as e:
+ EdkLogger.error(
+ "VfrCompiler", FILE_WRITE_FAILURE, f"File write failed for {LstFile}: {e}", None
+ )
+
+ def _GenBinaryFilesDfs(self, Root, HpkFile, CFile, RecordLines):
+ if Root is None:
+ return
+
+ if Root.OpCode is not None:
+ if Root.OpCode in ExpOps:
+ # The Data is likely to be modified, so generate buffer here
+ Root.Buffer = gFormPkg.StructToStream(Root.Data.GetInfo())
+ if Root.Buffer is not None:
+ if self.Options.CreateIfrPkgFile and self.Options.CreateRecordListFile:
+ try:
+ with open(HpkFile, "ab") as Hpk:
+ Hpk.write(Root.Buffer)
+ except Exception:
+ EdkLogger.error(
+ "VfrCompiler",
+ FILE_WRITE_FAILURE,
+ "File write failed for %s" % (self.Options.PkgOutputFileName),
+ )
+
+ try:
+ with open(CFile, "a") as C:
+ LineBuffer = ""
+ for i in range(0, len(Root.Buffer)):
+ self.Index += 1
+ Data = Root.Buffer[i]
+ if self.Index % BYTES_PRE_LINE == 1:
+ C.write(" ")
+ C.write("0x%02X" % Data)
+ if self.Index != gFormPkg.PkgLength:
+ if self.Index % BYTES_PRE_LINE == 0:
+ C.write(",\n")
+ else:
+ C.write(", ")
+
+ LineBuffer += f"{Root.Buffer[i]:0>2X} "
+
+ Record = f">{Root.Offset:0>8X}: {LineBuffer}\n"
+ LineNo = Root.Data.GetLineNo()
+ RecordLines.append(ReCordNode(Record, LineNo))
+ except Exception:
+ EdkLogger.error(
+ "VfrCompiler",
+ FILE_WRITE_FAILURE,
+ "File write failed for %s" % (self.Options.COutputFileName),
+ )
+
+ if self.Options.CreateIfrPkgFile and not self.Options.CreateRecordListFile:
+ try:
+ with open(HpkFile, "ab") as Hpk:
+ Hpk.write(Root.Buffer)
+ except Exception:
+ EdkLogger.error(
+ "VfrCompiler",
+ FILE_WRITE_FAILURE,
+ "File write failed for %s" % (self.Options.PkgOutputFileName),
+ )
+
+ try:
+ with open(CFile, "a") as C:
+ for i in range(0, len(Root.Buffer)):
+ self.Index += 1
+ Data = Root.Buffer[i]
+ if self.Index % BYTES_PRE_LINE == 1:
+ C.write(" ")
+ C.write("0x%02X" % Data)
+ if self.Index != gFormPkg.PkgLength:
+ if self.Index % BYTES_PRE_LINE == 0:
+ C.write(",\n")
+ else:
+ C.write(", ")
+ except Exception as e:
+ EdkLogger.error(
+ "VfrCompiler",
+ FILE_WRITE_FAILURE,
+ f"File write failed for {self.Options.COutputFileName} : {e}",
+ )
+
+ if not self.Options.CreateIfrPkgFile and self.Options.CreateRecordListFile:
+ LineBuffer = ""
+ for i in range(0, len(Root.Buffer)):
+ LineBuffer += f"{Root.Buffer[i]:0>2X} "
+ Record = f">{Root.Offset:0>8X}: {LineBuffer}\n"
+ LineNo = Root.Data.GetLineNo()
+ RecordLines.append(ReCordNode(Record, LineNo))
+
+ if Root.Child != []:
+ for ChildNode in Root.Child:
+ self._GenBinaryFilesDfs(ChildNode, HpkFile, CFile, RecordLines)
+
+ def GenRecordListFile(self):
+ FileName = self.Options.RecordListFileName
+ RecordLines = []
+ self._GenRecordListFileDfs(self.Root, RecordLines)
+
+ try:
+ Out = open(FileName, "w")
+ except Exception:
+ EdkLogger.error(
+ "VfrCompiler", FILE_OPEN_FAILURE, "File open failed for %s" % FileName, None
+ )
+
+ try:
+ Out.write("//\n// All Opcode Record List\n//\n")
+ for RecordLine in RecordLines:
+ Out.write(f"{RecordLine}\n")
+ Out.write(f"\nTotal Size of all record is {gFormPkg.Offset:0>8x}")
+ gVfrVarDataTypeDB.Dump(Out)
+ Out.close()
+ except Exception:
+ EdkLogger.error(
+ "VfrCompiler", FILE_WRITE_FAILURE, "File write failed for %s" % FileName
+ )
+
+ def _GenRecordListFileDfs(self, Root, RecordLines):
+ if Root is None:
+ return
+ if Root.OpCode is not None:
+ LineBuffer = ""
+ if Root.Buffer is not None:
+ for i in range(0, len(Root.Buffer)):
+ LineBuffer += f"{Root.Buffer[i]:0>2X} "
+ Record = f">{Root.Offset:0>8X}: {LineBuffer}\n"
+ RecordLines.append(Record)
+
+ if Root.Child != []:
+ for ChildNode in Root.Child:
+ self._GenRecordListFileDfs(ChildNode, RecordLines)
+
+ def DumpJson(self):
+ FileName = self.Options.JsonFileName
+ try:
+ with open(FileName, "w") as f:
+ f.write("{\n")
+ f.write(' "DataStruct" : {\n')
+ pNode = gVfrVarDataTypeDB.GetDataTypeList()
+ while pNode is not None:
+ f.write(f' "{pNode.TypeName}" : [\n')
+ FNode = pNode.Members
+ while FNode is not None:
+ f.write("{\n")
+ f.write(f' "Name": "{FNode.FieldName}",\n')
+ if FNode.ArrayNum > 0:
+ f.write(f' "Type": "{FNode.FieldType.TypeName}[{FNode.ArrayNum}]",\n')
+ else:
+ f.write(f' "Type": "{FNode.FieldType.TypeName}",\n')
+ f.write(f' "Offset": {FNode.Offset}\n')
+ if FNode.Next is None:
+ f.write("}\n")
+ else:
+ f.write("}, \n")
+ FNode = FNode.Next
+ if pNode.Next is None:
+ f.write(" ]\n")
+ else:
+ f.write(" ],\n")
+ pNode = pNode.Next
+ f.write(" },\n")
+ f.write(' "DataStructAttribute": {\n')
+ pNode = gVfrVarDataTypeDB.GetDataTypeList()
+ while pNode is not None:
+ f.write(f' "{pNode.TypeName}": {{\n')
+ f.write(f' "Alignment": {pNode.Align},\n')
+ f.write(f' "TotalSize": {pNode.TotalSize}\n')
+ if pNode.Next is None:
+ f.write("}\n")
+ else:
+ f.write("},\n")
+ pNode = pNode.Next
+ f.write(" },\n")
+ f.write(' "VarDefine" : {\n')
+ pVsNode = gVfrDataStorage.GetBufferVarStoreList()
+ while pVsNode is not None:
+ f.write(f' "{pVsNode.VarStoreName}": {{\n')
+ f.write(f' "Type": "{pVsNode.DataType.TypeName}",\n')
+ f.write(f' "Attributes": {pVsNode.Attributes},\n')
+ f.write(f' "VarStoreId": {pVsNode.VarStoreId},\n')
+ f.write(f' "VendorGuid": {pVsNode.Guid.to_string()}\n')
+ if pVsNode.Next is None:
+ f.write("}\n")
+ else:
+ f.write("},\n")
+
+ pVsNode = pVsNode.Next
+ f.write(" },\n")
+ f.write(' "Data" : [\n')
+ pVsNode = gVfrBufferConfig.GetVarItemList()
+ while pVsNode is not None:
+ if pVsNode.Id is None:
+ pVsNode = pVsNode.Next
+ continue
+ pInfoNode = pVsNode.InfoStrList
+ while pInfoNode is not None:
+ f.write("{\n")
+ f.write(f' "VendorGuid": {pVsNode.Guid.to_string()},\n')
+ f.write(f' "VarName": "{pVsNode.Name}",\n')
+ f.write(f' "DefaultStore": "{pVsNode.Id}",\n')
+ f.write(f' "Size": "{pInfoNode.Width}",\n')
+ f.write(f' "Offset": {pInfoNode.Offset},\n')
+ if (
+ pInfoNode.Type == EFI_IFR_TYPE_DATE
+ and type(pInfoNode.Value) == EFI_HII_DATE
+ ):
+ f.write(
+ f' "Value": "{pInfoNode.Value.Year}/{pInfoNode.Value.Month}/{pInfoNode.Value.Day}"\n'
+ )
+ elif (
+ pInfoNode.Type == EFI_IFR_TYPE_TIME
+ and type(pInfoNode.Value) == EFI_HII_TIME
+ ):
+ f.write(
+ f' "Value": "{pInfoNode.Value.Hour}:{pInfoNode.Value.Minute}:{pInfoNode.Value.Second}"\n'
+ )
+ elif (
+ pInfoNode.Type == EFI_IFR_TYPE_REF
+ and type(pInfoNode.Value) == EFI_HII_REF
+ ):
+ f.write(
+ f' "Value": "{pInfoNode.Value.QuestionId};{pInfoNode.Value.FormId};{pInfoNode.Value.FormSetGuid.to_string()};{pInfoNode.Value.DevicePath}"\n'
+ )
+ else:
+ f.write(f' "Value": "{pInfoNode.Value}"\n')
+
+ f.write("},\n")
+ pInfoNode = pInfoNode.Next
+ pVsNode = pVsNode.Next
+ f.write("{\n")
+ f.write(' "VendorGuid": "NA",\n')
+ f.write(' "VarName": "NA",\n')
+ f.write(' "DefaultStore": "NA",\n')
+ f.write(' "Size": 0,\n')
+ f.write(' "Offset": 0,\n')
+ f.write(' "Value": "0x00"\n')
+ f.write("}\n")
+ f.write(" ]\n")
+ f.write("}\n")
+
+ f.close()
+ except Exception:
+ EdkLogger.error(
+ "VfrCompiler", FILE_OPEN_FAILURE, "File open failed for %s" % FileName, None
+ )
+
+ def _DumpQuestionInfosForXMLCLI(self, Root, f, ValueIndent):
+ Info = Root.Data.GetInfo()
+ if Root.Condition is not None:
+ f.write(f"{ValueIndent}condition: '{Root.Condition}'\n")
+
+ if Root.Data.QName is not None:
+ f.write(f"{ValueIndent}name: {Root.Data.QName} # Optional Input\n")
+
+ if Root.Data.VarIdStr != "":
+ f.write(f"{ValueIndent}varid: {Root.Data.VarIdStr} # Optional Input\n")
+ if Root.Data.HasQuestionId:
+ f.write(
+ f"{ValueIndent}questionid: {'0x%x' % Info.Question.QuestionId} # Optional Input\n"
+ )
+ f.write(f"{ValueIndent}prompt: '{self._DisplayUniStr(Info.Question.Header.Prompt)}'\n")
+ f.write(f"{ValueIndent}help: '{self._DisplayUniStr(Info.Question.Header.Help)}'\n")
+ if Root.Data.FlagsStream != "":
+ f.write(f"{ValueIndent}flags: {Root.Data.FlagsStream} # Optional input , flags\n")
+ if Root.Data.HasKey:
+ f.write(
+ f"{ValueIndent}key: {'0x%0x ' % Info.Question.QuestionId} # Optional input, key\n"
+ )
+
+ def _DisplayUniStr(self, Key):
+ StrId = f"0x{Key:04x}"
+ FormatedStrId = StrId[:2] + StrId[2:].upper()
+ return f"STRING_TOKEN({FormatedStrId})"
+
+ def DumpYamlForXMLCLI(self):
+ FileName = self.Options.YamlFileName
+ try:
+ with open(FileName, "w", encoding="utf-8") as f:
+ f.write("## DO NOT REMOVE -- YAML Mode\n")
+ self._DumpYamlForXMLCLIDfs(self.Root, f)
+ f.close()
+ except Exception:
+ EdkLogger.error(
+ "VfrCompiler", FILE_OPEN_FAILURE, "File open failed for %s" % FileName, None
+ )
+
+ def _DumpYamlForXMLCLIDfs(self, Root, f):
+ try:
+ if Root is None:
+ return
+ if Root.OpCode is not None:
+ if Root.Level == 0:
+ KeyIndent = ""
+ ValueIndent = ""
+ else:
+ KeyIndent = " " * ((Root.Level * 2 - 1) * 2)
+ ValueIndent = " " * ((Root.Level * 2 + 1) * 2)
+
+ Info = Root.Data.GetInfo()
+
+ if Root.OpCode == EFI_IFR_FORM_SET_OP:
+ f.write(KeyIndent + "formset:\n")
+ ValueIndent = " " * (Root.Level + 1) * 2
+ f.write(
+ f"{ValueIndent}guid: '{{{Info.Guid.Data1:#x}, {Info.Guid.Data2:#x}, {Info.Guid.Data3:#x}, {{ {', '.join(f'{x:#x}' for x in Info.Guid.Data4)}}}}}'\n"
+ )
+ f.write(f"{ValueIndent}title: '{self._DisplayUniStr(Info.FormSetTitle)}'\n")
+ f.write(f"{ValueIndent}help: '{self._DisplayUniStr(Info.Help)}'\n")
+
+ if Root.Data.ClassGuidNum != 0:
+ f.write(ValueIndent + "classguid: ")
+ for i in range(0, len(Root.Data.ClassGuid)):
+ Guid = Root.Data.GetClassGuid()[i]
+ if i != len(Root.Data.ClassGuid) - 1:
+ f.write(
+ f"'{{{Guid.Data1:#x}, {Guid.Data2:#x}, {Guid.Data3:#x}, {{ {', '.join(f'{x:#x}' for x in Guid.Data4)}}}}}' | "
+ )
+ else:
+ f.write(
+ f"'{{{Guid.Data1:#x}, {Guid.Data2:#x}, {Guid.Data3:#x}, {{ {', '.join(f'{x:#x}' for x in Guid.Data4)}}}}}' # Optional Input \n"
+ )
+
+ if (
+ Root.Child != []
+ and Root.Child[0].OpCode != EFI_IFR_END_OP
+ and type(Root.Child[0].Data) != IfrSubClass
+ and type(Root.Child[0].Data) != IfrClass
+ ):
+ f.write(ValueIndent + "component: \n")
+ elif (
+ type(Root.Child[0].Data) == IfrClass
+ and type(Root.Child[1].Data) == IfrSubClass
+ ):
+ Root.Child[0].Data.HasSubClass = True
+
+ if Root.OpCode == EFI_IFR_VARSTORE_OP:
+ f.write(KeyIndent + "- varstore:\n")
+ f.write(f"{ValueIndent}type: {Root.Data.Type}\n")
+ if Root.Data.HasVarStoreId:
+ f.write(f"{ValueIndent}varid: {Info.VarStoreId:#04x} # Optional Input\n")
+ Name = "".join(chr(x) for x in Info.Name)
+ f.write(f"{ValueIndent}name: {Name}\n")
+ f.write(
+ f"{ValueIndent}guid: '{{{Info.Guid.Data1:#x}, {Info.Guid.Data2:#x}, {Info.Guid.Data3:#x}, {{ {', '.join(f'{x:#x}' for x in Info.Guid.Data4)}}}}}'\n"
+ )
+
+ if Root.OpCode == EFI_IFR_VARSTORE_EFI_OP:
+ f.write(KeyIndent + "- efivarstore:\n")
+ f.write(f"{ValueIndent}type: {Root.Data.Type}\n")
+ if Root.Data.HasVarStoreId:
+ if "varid" in Root.Dict:
+ f.write(
+ f"{ValueIndent}varid: {Info.VarStoreId:#04x} # Optional Input\n"
+ )
+ f.write(f"{ValueIndent}attribute: {Root.Data.AttributesText} \n")
+ if Root.Data.NameStringId:
+ f.write(
+ f"{ValueIndent}name: '{self._DisplayUniStr(Root.Data.NameStringId)}'\n"
+ )
+ f.write(ValueIndent + "varsize: " + Root.Data.VarSize + "\n")
+ else:
+ Name = "".join(chr(x) for x in Info.Name)
+ f.write(f"{ValueIndent}name: {Name}\n")
+ f.write(
+ f"{ValueIndent}guid: '{{{Info.Guid.Data1:#x}, {Info.Guid.Data2:#x}, {Info.Guid.Data3:#x}, {{ {', '.join(f'{x:#x}' for x in Info.Guid.Data4)}}}}}'\n"
+ )
+
+ if Root.OpCode == EFI_IFR_VARSTORE_NAME_VALUE_OP:
+ f.write(KeyIndent + "- namevaluevarstore:\n")
+ f.write(f"{ValueIndent}type: {Root.Data.Type}\n")
+ if Root.Data.HasVarStoreId:
+ f.write(f"{ValueIndent}varid: {Info.VarStoreId:#04x} # Optional Input\n")
+ f.write(
+ f"{ValueIndent}guid: '{{{Info.Guid.Data1:#x}, {Info.Guid.Data2:#x}, {Info.Guid.Data3:#x}, {{ {', '.join(f'{x:#x}' for x in Info.Guid.Data4)}}}}}'\n"
+ )
+ if Root.Data.NameItemList != []:
+ f.write(ValueIndent + "nametable: \n")
+ for NameItem in Root.Data.NameItemList:
+ f.write(f"{ValueIndent} - name: '{self._DisplayUniStr(NameItem)}'\n")
+
+ if Root.OpCode == EFI_IFR_DEFAULTSTORE_OP:
+ gVfrDefaultStore.UpdateDefaultType(Root)
+
+ if Root.OpCode == EFI_IFR_SHOWN_DEFAULTSTORE_OP:
+ f.write(KeyIndent + "- defaultstore:\n")
+ f.write(f"{ValueIndent}type: {Root.Data.Type}\n")
+ f.write(f"{ValueIndent}prompt: '{self._DisplayUniStr(Info.DefaultName)}'\n")
+ if Root.Data.HasAttr:
+ f.write(
+ f"{ValueIndent}attribute: {'0x%04x' % Info.DefaultId} # Default ID, Optional input\n"
+ )
+
+ if Root.OpCode == EFI_IFR_FORM_OP:
+ f.write(KeyIndent + "- form: \n")
+ if Root.Condition is not None:
+ f.write(f"{ValueIndent}condition: '{Root.Condition}'\n")
+
+ f.write(f"{ValueIndent}formid: {'0x%x' % Info.FormId} \n")
+ f.write(f"{ValueIndent}title: '{self._DisplayUniStr(Info.FormTitle)}'\n")
+
+ if Root.Child != [] and Root.Child[0].OpCode != EFI_IFR_END_OP:
+ f.write(ValueIndent + "component: \n")
+
+ if Root.OpCode == EFI_IFR_FORM_MAP_OP:
+ MethodMapList = Root.Data.GetMethodMapList()
+ f.write(KeyIndent + "- formmap: \n")
+ f.write(f"{ValueIndent}formid: {'0x%x' % Info.FormId} \n")
+
+ if Root.Condition is not None:
+ f.write(f"{ValueIndent}condition: '{Root.Condition}'\n")
+
+ if MethodMapList != []:
+ f.write(ValueIndent + "map: # optional input\n")
+ for MethodMap in MethodMapList:
+ f.write(f"{ValueIndent}- maptitle: {MethodMap.MethodTitle}\n")
+ f.write(
+ f"{ValueIndent} mapguid: '{{{{"
+ f"{MethodMap.MethodIdentifier.Data1}, {MethodMap.MethodIdentifier.Data2}, {MethodMap.MethodIdentifier.Data3},"
+ f"{{ {', '.join('0x%x' % x for x in MethodMap.MethodIdentifier.Data4)} }}"
+ f"}}}}'\n"
+ )
+ if Root.Child != [] and Root.Child[0].OpCode != EFI_IFR_END_OP:
+ f.write(ValueIndent + "component: \n")
+
+ if Root.OpCode == EFI_IFR_IMAGE_OP:
+ f.write(f"{ValueIndent}image: '{self._DisplayUniStr(Info.Id)}'\n")
+ if Root.OpCode == EFI_IFR_RULE_OP: #
+ f.write(f"{KeyIndent}- rule:\n")
+
+ if Root.Condition is not None:
+ f.write(f"{ValueIndent}condition: '{Root.Condition}'\n")
+
+ f.write(
+ f"{ValueIndent}name: {Root.Data.GetRuleName()}\n"
+ f"{ValueIndent}expression: {Root.Expression} \n"
+ )
+
+ if Root.OpCode == EFI_IFR_SUBTITLE_OP:
+ f.write(KeyIndent + "- subtitle:\n")
+ if Root.Condition is not None:
+ f.write(f"{ValueIndent}condition: '{Root.Condition}'\n")
+ f.write(f"{ValueIndent}text: '{self._DisplayUniStr(Info.Statement.Prompt)}'\n")
+
+ if Root.Data.FlagsStream != "":
+ f.write(f"{ValueIndent}flags: {Root.Data.FlagsStream} # Optional Input\n")
+
+ if Root.Child != [] and Root.Child[0].OpCode != EFI_IFR_END_OP:
+ f.write(f"{ValueIndent}component: \n")
+
+ if Root.OpCode == EFI_IFR_TEXT_OP:
+ f.write(KeyIndent + "- text:\n")
+ if Root.Condition is not None:
+ f.write(f"{ValueIndent}condition: '{Root.Condition}'\n")
+ if type(Info) == EFI_IFR_TEXT:
+ f.write(
+ f"{ValueIndent}help: '{self._DisplayUniStr(Info.Statement.Help)}'\n"
+ )
+ f.write(
+ f"{ValueIndent}prompt: '{self._DisplayUniStr(Info.Statement.Prompt)}'\n"
+ )
+ if Root.Data.HasTextTwo:
+ f.write(f"{ValueIndent}text: '{self._DisplayUniStr(Info.TextTwo)}'\n")
+ if type(Info) == EFI_IFR_ACTION:
+ f.write(
+ f"{ValueIndent}help: '{self._DisplayUniStr(Info.Question.Header.Help)}'\n"
+ )
+ f.write(
+ f"{ValueIndent}prompt: '{self._DisplayUniStr(Info.Question.Header.Prompt)}'\n"
+ )
+ if Root.Data.FlagsStream != "":
+ f.write(
+ f"{ValueIndent}flags: {Root.Data.FlagsStream} # Optional Input, Question Flags\n"
+ )
+ if Root.Data.HasKey:
+ f.write(
+ f"{ValueIndent}key: {'0x%04x' % Info.Question.QuestionId} # Optional Input, Question QuestionId\n"
+ )
+ if Root.Child != [] and Root.Child[0].OpCode != EFI_IFR_END_OP:
+ f.write(ValueIndent + "component: \n")
+
+ if Root.OpCode == EFI_IFR_ACTION_OP:
+ f.write(KeyIndent + "- action:\n")
+ self._DumpQuestionInfosForXMLCLI(Root, f, ValueIndent)
+ f.write(f"{ValueIndent}config: {Info.QuestionConfig} # QuestionConfig\n")
+ if Root.Child != [] and Root.Child[0].OpCode != EFI_IFR_END_OP:
+ f.write(ValueIndent + "component: \n")
+
+ if Root.OpCode == EFI_IFR_ONE_OF_OP:
+ f.write(KeyIndent + "- oneof:\n")
+
+ self._DumpQuestionInfosForXMLCLI(Root, f, ValueIndent)
+
+ if Root.Data.HasMinMax:
+ f.write(
+ f"{ValueIndent}maximum: {'0x%0x' % Info.Data.MaxValue} # Optional Input\n"
+ )
+ f.write(
+ f"{ValueIndent}minimum: {'0x%0x' % Info.Data.MinValue} # Optional Input\n"
+ )
+
+ if Root.Data.HasStep:
+ f.write(f"{ValueIndent}step: {Info.Data.Step} # Optional Input\n")
+ if Root.Child != [] and Root.Child[0].OpCode != EFI_IFR_END_OP:
+ f.write(ValueIndent + "component: \n")
+
+ if Root.OpCode == EFI_IFR_ONE_OF_OPTION_OP:
+ f.write(KeyIndent + "- option: \n")
+ if Root.Condition is not None:
+ f.write(f"{ValueIndent}condition: '{Root.Condition}'\n")
+ f.write(f"{ValueIndent}text: '{self._DisplayUniStr(Info.Option)}'\n")
+
+ if type(Root.Data) == IfrOneOfOption:
+ if Root.Data.ValueStream != "":
+ f.write(f"{ValueIndent}value: {Root.Data.ValueStream}\n")
+
+ if Root.Data.FlagsStream != "":
+ f.write(f"{ValueIndent}flags: {Root.Data.FlagsStream} # Optional Input\n")
+
+ if Root.Data.IfrOptionKey is not None:
+ f.write(
+ f"{ValueIndent}key: {'0x%04x' % Root.Data.GetIfrOptionKey()} # Optional Input\n"
+ )
+
+ if Root.Child != [] and Root.Child[0].OpCode != EFI_IFR_END_OP:
+ f.write(ValueIndent + "component: \n")
+
+ if Root.OpCode == EFI_IFR_DEFAULT_OP:
+ # specific condition here
+ if Root.Position != "Do not display":
+ f.write(KeyIndent + "- default:\n")
+ if Root.Condition is not None:
+ f.write(f"{ValueIndent}condition: '{Root.Condition}'\n")
+
+ if type(Root.Data) == IfrDefault:
+ Str = Root.Data.ValueStream
+ if Str.find(";") != -1:
+ RefList = Str.split(";")
+ Str = (
+ RefList[0]
+ + ";"
+ + RefList[1]
+ + ";"
+ + f"{{{Info.Value[0].FormSetGuid.Data1:#x}, {Info.Value[0].FormSetGuid.Data2:#x}, {Info.Value[0].FormSetGuid.Data3:#x}, {{ {', '.join(f'{x:#x}' for x in Info.Value[0].FormSetGuid.Data4)}}}}}"
+ + ";"
+ + self._DisplayUniStr(Info.Value[0].DevicePath)
+ )
+
+ if Str != "":
+ Str = Str.replace("{", "[").replace("}", "]")
+ if (
+ Str.find(":") != -1
+ or Str.find("/") != -1
+ or Str.find(";") != -1
+ ):
+ Str = "(" + Str + ")"
+ f.write(f"{ValueIndent}value: {Str}\n")
+
+ elif type(Root.Data) == IfrDefault2:
+ f.write(f"{ValueIndent}value_exp: '{Root.Child[0].Expression}'\n")
+
+ if Root.Data.DefaultStore != "":
+ f.write(f"{ValueIndent}defaultstore: {Root.Data.DefaultStore}\n")
+
+ if Root.OpCode == EFI_IFR_ORDERED_LIST_OP:
+ f.write(KeyIndent + "- orderedlist:\n")
+ self._DumpQuestionInfosForXMLCLI(Root, f, ValueIndent)
+ if Root.Data.HasMaxContainers:
+ f.write(
+ f"{ValueIndent}maxcontainers: {Info.MaxContainers} # Optional Input\n"
+ )
+
+ if Root.Child != [] and Root.Child[0].OpCode != EFI_IFR_END_OP:
+ f.write(ValueIndent + "component: \n")
+
+ if Root.OpCode == EFI_IFR_NUMERIC_OP:
+ f.write(KeyIndent + "- numeric:\n")
+ self._DumpQuestionInfosForXMLCLI(Root, f, ValueIndent)
+ f.write(f"{ValueIndent}maximum: {'0x%0x' % Info.Data.MaxValue}\n")
+ f.write(f"{ValueIndent}minimum: {'0x%0x' % Info.Data.MinValue}\n")
+
+ if Root.Data.HasStep:
+ f.write(f"{ValueIndent}step: {Info.Data.Step} # Optional Input\n")
+
+ if Root.Child != [] and Root.Child[0].OpCode != EFI_IFR_END_OP:
+ f.write(ValueIndent + "component: \n")
+
+ if Root.OpCode == EFI_IFR_CHECKBOX_OP:
+ f.write(KeyIndent + "- checkbox:\n")
+ self._DumpQuestionInfosForXMLCLI(Root, f, ValueIndent)
+ if Root.Child != [] and Root.Child[0].OpCode != EFI_IFR_END_OP:
+ f.write(ValueIndent + "component: \n")
+
+ if Root.OpCode == EFI_IFR_TIME_OP:
+ f.write(KeyIndent + "- time:\n")
+ if Root.Data.Hour is None:
+ self._DumpQuestionInfosForXMLCLI(Root, f, ValueIndent)
+ if Root.Child != [] and Root.Child[0].OpCode != EFI_IFR_END_OP:
+ f.write(ValueIndent + "component: \n")
+ else:
+ f.write(f"{ValueIndent}hour: {Root.Data.Hour}\n")
+
+ if Root.Data.D_Hour is not None:
+ f.write(f"{ValueIndent}default_hour: {Root.Data.D_Hour}\n")
+
+ f.write(f"{ValueIndent}minute: {Root.Data.Minute}\n")
+
+ if Root.Data.D_Minute is not None:
+ f.write(f"{ValueIndent}default_minute: {Root.Data.D_Minute}\n")
+
+ f.write(f"{ValueIndent}second: {Root.Data.Second}\n")
+
+ if Root.Data.D_Second is not None:
+ f.write(f"{ValueIndent}default_second: {Root.Data.D_Second}\n")
+ f.write(
+ f"{ValueIndent}prompt: '{self._DisplayUniStr(Info.Question.Header.Prompt)}'\n"
+ )
+ f.write(
+ f"{ValueIndent}help: '{self._DisplayUniStr(Info.Question.Header.Help)}'\n"
+ )
+ if Root.Data.FlagsStream != "":
+ f.write(
+ f"{ValueIndent}flags: {Root.Data.FlagsStream} # Optional input , flags\n"
+ )
+
+ if Root.Child != [] and Root.Child[0].OpCode != EFI_IFR_DEFAULT_OP:
+ f.write(ValueIndent + "component: \n")
+
+ if Root.OpCode == EFI_IFR_DATE_OP:
+ f.write(KeyIndent + "- date:\n")
+ if Root.Data.Year is None:
+ self._DumpQuestionInfosForXMLCLI(Root, f, ValueIndent)
+ if Root.Child != [] and Root.Child[0].OpCode != EFI_IFR_END_OP:
+ f.write(ValueIndent + "component: \n")
+ else:
+ f.write(f"{ValueIndent}year: {Root.Data.Year}\n")
+ f.write(f"{ValueIndent}min_year: {Root.Data.Min}\n")
+ f.write(f"{ValueIndent}max_year: {Root.Data.Max}\n")
+
+ if Root.Data.D_Year is not None:
+ f.write(f"{ValueIndent}default_year: {Root.Data.D_Year}\n")
+
+ f.write(f"{ValueIndent}month: {Root.Data.Month}\n")
+
+ if Root.Data.D_Month is not None:
+ f.write(f"{ValueIndent}default_month: {Root.Data.D_Month}\n")
+
+ f.write(f"{ValueIndent}day: {Root.Data.Day}\n")
+
+ if Root.Data.D_Day is not None:
+ f.write(f"{ValueIndent}default_day: {Root.Data.D_Day}\n")
+
+ f.write(
+ f"{ValueIndent}prompt: '{self._DisplayUniStr(Info.Question.Header.Prompt)}'\n"
+ )
+ f.write(
+ f"{ValueIndent}help: '{self._DisplayUniStr(Info.Question.Header.Help)}'\n"
+ )
+
+ if Root.Data.FlagsStream != "":
+ f.write(
+ f"{ValueIndent}flags: {Root.Data.FlagsStream} # Optional input , flags\n"
+ )
+
+ if Root.Child != [] and Root.Child[0].OpCode != EFI_IFR_DEFAULT_OP:
+ f.write(ValueIndent + "component: \n")
+
+ if Root.OpCode == EFI_IFR_STRING_OP:
+ f.write(KeyIndent + "- string:\n")
+ self._DumpQuestionInfosForXMLCLI(Root, f, ValueIndent)
+ f.write(f"{ValueIndent}minsize: {Info.MinSize}\n")
+ f.write(f"{ValueIndent}maxsize: {Info.MaxSize}\n")
+
+ if Root.Child != [] and Root.Child[0].OpCode != EFI_IFR_END_OP:
+ f.write(f"{ValueIndent}component: \n")
+
+ if Root.OpCode == EFI_IFR_PASSWORD_OP:
+ f.write(KeyIndent + "- password:\n")
+ self._DumpQuestionInfosForXMLCLI(Root, f, ValueIndent)
+ f.write(
+ f"{ValueIndent}minsize: {Root.Dict['minsize'].Key if 'minsize' in Root.Dict else Info.MinSize}\n"
+ )
+ f.write(
+ f"{ValueIndent}maxsize: {Root.Dict['maxsize'].Key if 'maxsize' in Root.Dict else Info.MaxSize}\n"
+ )
+
+ if Root.Child != [] and Root.Child[0].OpCode != EFI_IFR_END_OP:
+ f.write(f"{ValueIndent}component: \n")
+
+ if Root.OpCode == EFI_IFR_RESET_BUTTON_OP:
+ f.write(KeyIndent + "- resetbutton:\n")
+ if Root.Condition is not None:
+ f.write(f"{ValueIndent}condition: '{Root.Condition}'\n")
+ f.write(f"{ValueIndent}defaultstore: {Root.Data.DefaultStore}\n")
+ f.write(
+ f"{ValueIndent}prompt: '{self._DisplayUniStr(Info.Statement.Prompt)}'\n"
+ )
+ f.write(f"{ValueIndent}help: '{self._DisplayUniStr(Info.Statement.Help)}'\n")
+ if Root.Child != [] and Root.Child[0].OpCode != EFI_IFR_END_OP:
+ f.write(ValueIndent + "component: \n")
+
+ if Root.OpCode == EFI_IFR_REF_OP:
+ f.write(KeyIndent + "- goto:\n")
+ if Root.Condition is not None:
+ f.write(f"{ValueIndent}condition: '{Root.Condition}'\n")
+
+ if type(Root.Data) == IfrRef4:
+ f.write(
+ f"{ValueIndent}devicepath: '{self._DisplayUniStr(Info.DevicePath)}' # Optional Input\n"
+ )
+ f.write(
+ f"{ValueIndent}formsetguid: '{{{Info.FormSetId.Data1:#x}, {Info.FormSetId.Data2:#x}, {Info.FormSetId.Data3:#x}, {{ {', '.join(f'{x:#x}' for x in Info.FormSetId.Data4)}}}}}' # Optional Input\n"
+ )
+ f.write(f"{ValueIndent}formid: {'0x%x' % Info.FormId}\n")
+ f.write(
+ f"{ValueIndent}question: {'0x%x' % Info.QuestionId} # Optional Input\n"
+ )
+
+ if type(Root.Data) == IfrRef3:
+ f.write(
+ f"{ValueIndent}formsetguid: '{{{Info.FormSetId.Data1:#x}, {Info.FormSetId.Data2:#x}, {Info.FormSetId.Data3:#x}, {{ {', '.join(f'{x:#x}' for x in Info.FormSetId.Data4)}}}}}' # Optional Input\n"
+ )
+ f.write(f"{ValueIndent}formid: {'0x%x' % Info.FormId}\n")
+ f.write(
+ f"{ValueIndent}question: {'0x%x' % Info.QuestionId} # Optional Input\n"
+ )
+
+ if type(Root.Data) == IfrRef2:
+ f.write(f"{ValueIndent}formid: {'0x%x' % Info.FormId}\n")
+ f.write(
+ f"{ValueIndent}question: {'0x%x' % Info.QuestionId} # Optional Input\n"
+ )
+
+ if type(Root.Data) == IfrRef:
+ f.write(f"{ValueIndent}formid: {'0x%x' % Info.FormId}\n")
+
+ self._DumpQuestionInfosForXMLCLI(Root, f, ValueIndent)
+
+ if Root.Child != [] and Root.Child[0].OpCode != EFI_IFR_END_OP:
+ f.write(ValueIndent + "component: \n")
+
+ if Root.OpCode == EFI_IFR_REFRESH_OP:
+ f.write(KeyIndent + "- refresh:\n")
+ if Root.Condition is not None:
+ f.write(f"{ValueIndent}condition: '{Root.Condition}'\n")
+ f.write(f"{ValueIndent}interval: {Info.RefreshInterval} # RefreshInterval\n")
+
+ if Root.OpCode == EFI_IFR_VARSTORE_DEVICE_OP:
+ f.write(KeyIndent + "- varstoredevice:\n")
+ if Root.Condition is not None:
+ f.write(f"{ValueIndent}condition: '{Root.Condition}'\n")
+ f.write(f"{ValueIndent}devicepath: {Info.DevicePath} # DevicePath\n")
+
+ if Root.OpCode == EFI_IFR_REFRESH_ID_OP:
+ f.write(KeyIndent + "- refreshguid:\n")
+ if Root.Condition is not None:
+ f.write(f"{ValueIndent}condition: '{Root.Condition}'\n")
+ f.write(
+ f"{ValueIndent}guid: '{{{Info.RefreshEventGroupId.Data1:#x}, {Info.RefreshEventGroupId.Data2:#x}, {Info.RefreshEventGroupId.Data3:#x}, {{ {', '.join(f'{x:#x}' for x in Info.RefreshEventGroupId.Data4)}}}}}' \n"
+ )
+
+ if Root.OpCode == EFI_IFR_WARNING_IF_OP:
+ f.write(KeyIndent + "- warningif:\n")
+ if Root.Condition is not None:
+ f.write(f"{ValueIndent}condition: '{Root.Condition}'\n")
+ f.write(
+ f"{ValueIndent}prompt: '{self._DisplayUniStr(Info.Warning)}' # Optional Input\n"
+ )
+ if Root.Data.HasTimeOut:
+ f.write(f"{ValueIndent}timeout: {Info.TimeOut} # optional input \n")
+ f.write(f"{ValueIndent}expression: {Root.Expression}\n")
+
+ if Root.OpCode == EFI_IFR_GUID_OP:
+ if type(Root.Data) == IfrLabel:
+ f.write(KeyIndent + "- label:\n")
+ if Root.Condition is not None:
+ f.write(f"{ValueIndent}condition: '{Root.Condition}'\n")
+ f.write(f"{ValueIndent}number: {'0x%x' % Info.Number} # Number\n")
+
+ if type(Root.Data) == IfrBanner:
+ f.write(KeyIndent + "- banner:\n")
+ if Root.Condition is not None:
+ f.write(f"{ValueIndent}condition: '{Root.Condition}'\n")
+ f.write(
+ f"{ValueIndent}title: '{self._DisplayUniStr(Info.Title)}' # Optional Input\n"
+ )
+ if not Root.Data.HasTimeOut:
+ if "line" in Root.Dict:
+ f.write(f"{ValueIndent}line: {Root.Dict['line'].Key}\n")
+ else:
+ f.write(f"{ValueIndent}line: {Info.LineNumber}\n")
+ f.write(f"{ValueIndent}align: {Root.Dict['align'].Key}\n")
+ else:
+ f.write(f"{ValueIndent}timeout: {Root.Data.TimeOut}\n")
+
+ if type(Root.Data) == IfrClass:
+ f.write(KeyIndent + "class: " + Root.Data.ClassStr + "\n")
+ if not Root.Data.HasSubClass:
+ f.write(KeyIndent + "component: \n")
+
+ if type(Root.Data) == IfrSubClass:
+ f.write(KeyIndent + "subclass: " + Root.Data.SubClassStr + "\n")
+ f.write(KeyIndent + "component: \n")
+
+ if type(Root.Data) == IfrExtensionGuid:
+ if type(Root.Parent.Data) == IfrExtensionGuid:
+ Root.Level -= 1
+ KeyIndent = " " * ((Root.Level * 2 - 1) * 2)
+ ValueIndent = " " * ((Root.Level * 2 + 1) * 2)
+ f.write(KeyIndent + "- guidop:\n")
+ if Root.Condition is not None:
+ f.write(f"{ValueIndent}condition: '{Root.Condition}'\n")
+ f.write(
+ f"{ValueIndent}guid: '{{{Info.Guid.Data1:#x}, {Info.Guid.Data2:#x}, {Info.Guid.Data3:#x}, {{ {', '.join(f'{x:#x}' for x in Info.Guid.Data4)}}}}}' \n"
+ )
+ if Root.Data.GetDataType() != "":
+ f.write(f"{ValueIndent}{Root.Data.GetDataType()}: \n")
+ for data in Root.Data.GetFieldList():
+ f.write(f"{ValueIndent} {data[0]}: {data[1]:#x}\n")
+
+ if Root.OpCode == EFI_IFR_NO_SUBMIT_IF_OP:
+ f.write(KeyIndent + "- nosubmitif:\n")
+ if Root.Condition is not None:
+ f.write(f"{ValueIndent}condition: '{Root.Condition}'\n")
+ f.write(f"{ValueIndent}prompt: '{self._DisplayUniStr(Info.Error)}'\n")
+ if Root.Data.FlagsStream != "":
+ f.write(ValueIndent + "flags: " + Root.Data.FlagsStream + "\n")
+ f.write(f"{ValueIndent}expression: '{Root.Expression}'\n")
+
+ if Root.OpCode == EFI_IFR_READ_OP:
+ f.write(KeyIndent + "- read:\n")
+ if Root.Condition is not None:
+ f.write(f"{ValueIndent}condition: '{Root.Condition}'\n")
+ f.write(f"{ValueIndent}expression: '{Root.Expression}'\n")
+
+ if Root.OpCode == EFI_IFR_WRITE_OP:
+ f.write(KeyIndent + "- write:\n")
+ if Root.Condition is not None:
+ f.write(f"{ValueIndent}condition: '{Root.Condition}'\n")
+ f.write(f"{ValueIndent}expression: '{Root.Expression}'\n")
+
+ if Root.OpCode == EFI_IFR_VALUE_OP and Root.Parent.OpCode != EFI_IFR_DEFAULT_OP: #
+ f.write(KeyIndent + "- value:\n")
+ f.write(f"{ValueIndent}expression: '{Root.Expression}'\n")
+
+ if Root.OpCode == EFI_IFR_MODAL_TAG_OP:
+ if Root.Condition is not None:
+ f.write(f"{ValueIndent}condition: '{Root.Condition}'\n")
+ f.write(KeyIndent + "- modal: null\n")
+
+ if Root.OpCode == EFI_IFR_LOCKED_OP:
+ if Root.Condition is not None:
+ f.write(f"{ValueIndent}condition: '{Root.Condition}'\n")
+ f.write(KeyIndent + "- locked: null\n")
+
+ if Root.OpCode == EFI_IFR_SUPPRESS_IF_OP:
+ f.write(KeyIndent + "- suppressif:\n")
+ f.write(f"{ValueIndent}expression: '{Root.Expression}'\n")
+ if len(Root.Child) > 2 and Root.Child[len(Root.Child) - 2].OpCode not in ExpOps:
+ f.write(ValueIndent + "component: \n")
+
+ if Root.OpCode == EFI_IFR_DISABLE_IF_OP:
+ # If the disable node is inserted after the formset ends, do not show it in source yml
+ # use the expression content to tell if the disable node is inserted after the formset ends
+ if Root.Expression is not None:
+ f.write(KeyIndent + "- disableif:\n")
+ f.write(f"{ValueIndent}expression: '{Root.Expression}'\n")
+ if (
+ len(Root.Child) > 2
+ and Root.Child[len(Root.Child) - 2].OpCode not in ExpOps
+ ):
+ f.write(ValueIndent + "component: \n")
+
+ if Root.OpCode == EFI_IFR_GRAY_OUT_IF_OP:
+ f.write(KeyIndent + "- grayoutif:\n")
+ f.write(f"{ValueIndent}expression: '{Root.Expression}'\n")
+ if len(Root.Child) > 2 and Root.Child[len(Root.Child) - 2].OpCode not in ExpOps:
+ f.write(ValueIndent + "component: \n")
+
+ if Root.OpCode == EFI_IFR_INCONSISTENT_IF_OP:
+ f.write(KeyIndent + "- inconsistentif:\n")
+ f.write(f"{ValueIndent}expression: '{Root.Expression}'\n")
+ f.write(f"{ValueIndent}prompt: '{self._DisplayUniStr(Info.Error)}'\n")
+ if Root.Data.FlagsStream != "":
+ f.write(ValueIndent + "flags: " + Root.Data.FlagsStream + "\n")
+ self.LastOp = Root.OpCode
+
+ except Exception:
+ EdkLogger.error(
+ "VfrCompiler",
+ FILE_WRITE_FAILURE,
+ "File write failed for %s" % (self.Options.YamlFileName),
+ None,
+ )
+
+ if Root.Child != []:
+ for ChildNode in Root.Child:
+ if Root.OpCode in ConditionOps:
+ ChildNode.Level = Root.Level + 1
+ elif type(Root.Data) == IfrGuid and (
+ ChildNode.OpCode in [EFI_IFR_CHECKBOX_OP, EFI_IFR_NUMERIC_OP, EFI_IFR_ONE_OF_OP]
+ ):
+ ChildNode.Level = Root.Level
+ else:
+ ChildNode.Level = Root.Level + 1
+
+ self._DumpYamlForXMLCLIDfs(ChildNode, f)
+
+ return
diff --git a/BaseTools/Source/Python/VfrCompiler/IfrUtility.py b/BaseTools/Source/Python/VfrCompiler/IfrUtility.py
new file mode 100644
index 0000000000..3c5cec25ce
--- /dev/null
+++ b/BaseTools/Source/Python/VfrCompiler/IfrUtility.py
@@ -0,0 +1,2226 @@
+## @file
+# Vfr common library functions.
+#
+# Copyright (c) 2022-, Intel Corporation. All rights reserved.<BR>
+# SPDX-License-Identifier: BSD-2-Clause-Patent
+##
+import os
+from enum import Enum
+from VfrCompiler.IfrCtypes import *
+from VfrCompiler.IfrError import gVfrErrorHandle, VfrReturnCode
+from VfrCompiler.IfrCommon import EFI_SUCCESS, EFI_NOT_FOUND, RETURN_SUCCESS
+from abc import ABCMeta, abstractmethod
+from Common.LongFilePathSupport import LongFilePath
+
+VFR_PACK_SHOW = 0x02
+VFR_PACK_ASSIGN = 0x01
+VFR_PACK_PUSH = 0x04
+VFR_PACK_POP = 0x08
+DEFAULT_PACK_ALIGN = 0x8
+DEFAULT_ALIGN = 1
+ZERO_ALIGN = 0
+MAX_PACK_ALIGN = 0x10
+MAX_NAME_LEN = 64
+MAX_BIT_WIDTH = 32
+EFI_VARSTORE_ID_MAX = 0xFFFF
+EFI_BITS_SHIFT_PER_UINT32 = 0x5
+EFI_BITS_PER_UINT32 = 1 << EFI_BITS_SHIFT_PER_UINT32
+EFI_FREE_VARSTORE_ID_BITMAP_SIZE = int((EFI_VARSTORE_ID_MAX + 1) / EFI_BITS_PER_UINT32)
+
+
+class SVfrPackStackNode:
+ def __init__(self, Identifier, Number):
+ self.Identifier = Identifier
+ self.Number = Number
+ self.Next = None
+
+ def Match(self, Identifier):
+ if Identifier is None:
+ return True
+ elif self.Identifier is None:
+ return False
+ return self.Identifier == Identifier
+
+
+class SVfrDataType:
+ def __init__(self, TypeName=""):
+ self.TypeName = TypeName
+ self.Type = 0
+ self.Align = 1
+ self.TotalSize = 0
+ self.HasBitField = False
+ self.Members = None
+ self.Next = None
+
+
+class SVfrDataField:
+ def __init__(self, FieldName=None):
+ self.FieldName = FieldName
+ self.FieldType = None
+ self.Offset = 0
+ self.ArrayNum = 0
+ self.IsBitField = False
+ self.BitWidth = 0
+ self.BitOffset = 0
+ self.Next = None
+
+
+class InternalTypes:
+ def __init__(self, TypeName, Type, Size, Align):
+ self.TypeName = TypeName
+ self.Type = Type
+ self.Size = Size
+ self.Align = Align
+
+
+gInternalTypesTable = [
+ InternalTypes("UINT64", EFI_IFR_TYPE_NUM_SIZE_64, sizeof(c_ulonglong), sizeof(c_ulonglong)),
+ InternalTypes("UINT32", EFI_IFR_TYPE_NUM_SIZE_32, sizeof(c_ulong), sizeof(c_ulong)),
+ InternalTypes("UINT16", EFI_IFR_TYPE_NUM_SIZE_16, sizeof(c_ushort), sizeof(c_ushort)),
+ InternalTypes("UINT8", EFI_IFR_TYPE_NUM_SIZE_8, sizeof(c_ubyte), sizeof(c_ubyte)),
+ InternalTypes("BOOLEAN", EFI_IFR_TYPE_BOOLEAN, sizeof(c_ubyte), sizeof(c_ubyte)),
+ InternalTypes("EFI_GUID", EFI_IFR_TYPE_OTHER, sizeof(EFI_GUID), sizeof(c_ubyte * 8)),
+ InternalTypes("EFI_HII_DATE", EFI_IFR_TYPE_DATE, sizeof(EFI_HII_DATE), sizeof(c_ushort)),
+ InternalTypes("EFI_STRING_ID", EFI_IFR_TYPE_STRING, sizeof(c_ushort), sizeof(c_ushort)),
+ InternalTypes("EFI_HII_TIME", EFI_IFR_TYPE_TIME, sizeof(EFI_HII_TIME), sizeof(c_ubyte)),
+ InternalTypes("EFI_HII_REF", EFI_IFR_TYPE_REF, sizeof(EFI_HII_REF), sizeof(EFI_GUID)),
+]
+
+
+class VfrVarDataTypeDB:
+ def __init__(self):
+ self.PackAlign = DEFAULT_PACK_ALIGN
+ self.PackStack = None
+ self.DataTypeList = None
+ self.NewDataType = None
+ self.CurrDataType = None
+ self.CurrDataField = None
+ self.FirstNewDataTypeName = None
+ self.InternalTypesListInit()
+
+ def Clear(self):
+ self.PackAlign = DEFAULT_PACK_ALIGN
+ self.PackStack = None
+ self.DataTypeList = None
+ self.NewDataType = None
+ self.CurrDataType = None
+ self.CurrDataField = None
+ self.FirstNewDataTypeName = None
+ self.InternalTypesListInit()
+
+ def InternalTypesListInit(self):
+ for i in range(0, len(gInternalTypesTable)):
+ pNewType = SVfrDataType()
+ pNewType.TypeName = gInternalTypesTable[i].TypeName
+ pNewType.Type = gInternalTypesTable[i].Type
+ pNewType.Align = gInternalTypesTable[i].Align
+ pNewType.TotalSize = gInternalTypesTable[i].Size
+
+ if gInternalTypesTable[i].TypeName == "EFI_HII_DATE":
+ pYearField = SVfrDataField()
+ pMonthField = SVfrDataField()
+ pDayField = SVfrDataField()
+
+ pYearField.FieldName = "Year"
+ pYearField.FieldType, _ = self.GetDataType("UINT16")
+ pYearField.Offset = 0
+ pYearField.Next = pMonthField
+ pYearField.ArrayNum = 0
+ pYearField.IsBitField = False
+
+ pMonthField.FieldName = "Month"
+ pMonthField.FieldType, _ = self.GetDataType("UINT8")
+ pMonthField.Offset = 2
+ pMonthField.Next = pDayField
+ pMonthField.ArrayNum = 0
+ pMonthField.IsBitField = False
+
+ pDayField.FieldName = "Day"
+ pDayField.FieldType, _ = self.GetDataType("UINT8")
+ pDayField.Offset = 3
+ pDayField.Next = None
+ pDayField.ArrayNum = 0
+ pDayField.IsBitField = False
+
+ pNewType.Members = pYearField
+
+ elif gInternalTypesTable[i].TypeName == "EFI_HII_TIME":
+ pHoursField = SVfrDataField()
+ pMinutesField = SVfrDataField()
+ pSecondsField = SVfrDataField()
+
+ pHoursField.FieldName = "Hours"
+ pHoursField.FieldType, _ = self.GetDataType("UINT8")
+ pHoursField.Offset = 0
+ pHoursField.Next = pMinutesField
+ pHoursField.ArrayNum = 0
+ pHoursField.IsBitField = False
+
+ pMinutesField.FieldName = "Minutes"
+ pMinutesField.FieldType, _ = self.GetDataType("UINT8")
+ pMinutesField.Offset = 1
+ pMinutesField.Next = pSecondsField
+ pMinutesField.ArrayNum = 0
+ pMinutesField.IsBitField = False
+
+ pSecondsField.FieldName = "Seconds"
+ pSecondsField.FieldType, _ = self.GetDataType("UINT8")
+ pSecondsField.Offset = 2
+ pSecondsField.Next = None
+ pSecondsField.ArrayNum = 0
+ pSecondsField.IsBitField = False
+
+ pNewType.Members = pHoursField
+
+ elif gInternalTypesTable[i].TypeName == "EFI_HII_REF":
+ pQuestionIdField = SVfrDataField()
+ pFormIdField = SVfrDataField()
+ pFormSetGuidField = SVfrDataField()
+ pDevicePathField = SVfrDataField()
+
+ pQuestionIdField.FieldName = "QuestionId"
+ pQuestionIdField.FieldType, _ = self.GetDataType("UINT16")
+ pQuestionIdField.Offset = 0
+ pQuestionIdField.Next = pFormIdField
+ pQuestionIdField.ArrayNum = 0
+ pQuestionIdField.IsBitField = False
+
+ pFormIdField.FieldName = "FormId"
+ pFormIdField.FieldType, _ = self.GetDataType("UINT16")
+ pFormIdField.Offset = 2
+ pFormIdField.Next = pFormSetGuidField
+ pFormIdField.ArrayNum = 0
+ pFormIdField.IsBitField = False
+
+ pFormSetGuidField.FieldName = "FormSetGuid"
+ pFormSetGuidField.FieldType, _ = self.GetDataType("EFI_GUID")
+ pFormSetGuidField.Offset = 4
+ pFormSetGuidField.Next = pDevicePathField
+ pFormSetGuidField.ArrayNum = 0
+ pFormSetGuidField.IsBitField = False
+
+ pDevicePathField.FieldName = "DevicePath"
+ pDevicePathField.FieldType, _ = self.GetDataType("EFI_STRING_ID")
+ pDevicePathField.Offset = 20
+ pDevicePathField.Next = None
+ pDevicePathField.ArrayNum = 0
+ pDevicePathField.IsBitField = False
+
+ pNewType.Members = pQuestionIdField
+
+ pNewType.Next = None
+ pNewType.Next = self.DataTypeList
+ self.DataTypeList = pNewType
+ pNewType = None
+
+ def GetDataTypeList(self):
+ return self.DataTypeList
+
+ def Pack(self, LineNum, Action, Identifier=None, Number=DEFAULT_PACK_ALIGN):
+ if Action & VFR_PACK_SHOW:
+ Msg = str.format("value of pragma pack(show) == %d" % (self.PackAlign))
+ gVfrErrorHandle.PrintMsg(LineNum, "Warning", Msg)
+
+ if Action & VFR_PACK_PUSH:
+ pNew = SVfrPackStackNode(Identifier, self.PackAlign)
+ if pNew is None:
+ return VfrReturnCode.VFR_RETURN_FATAL_ERROR
+ pNew.Next = self.PackStack
+ self.PackStack = pNew
+
+ if Action & VFR_PACK_POP:
+ pNode = None
+ if self.PackStack is None:
+ gVfrErrorHandle.PrintMsg(LineNum, "Error", "#pragma pack(pop...) : more pops than pushes")
+
+ pNode = self.PackStack
+ while pNode is not None:
+ if pNode.Match(Identifier) is True:
+ self.PackAlign = pNode.Number
+ self.PackStack = pNode.Next
+ pNode = pNode.Next
+
+ if Action & VFR_PACK_ASSIGN:
+ PackAlign = (Number + Number % 2) if (Number > 1) else Number
+ if PackAlign == ZERO_ALIGN or PackAlign > MAX_PACK_ALIGN:
+ gVfrErrorHandle.PrintMsg(LineNum, "Error", "expected pragma parameter to be '1', '2', '4', '8', or '16'")
+ else:
+ self.PackAlign = PackAlign
+
+ return VfrReturnCode.VFR_RETURN_SUCCESS
+
+ def DeclareDataTypeBegin(self):
+ pNewType = SVfrDataType()
+
+ pNewType.TypeName = ""
+ pNewType.Type = EFI_IFR_TYPE_OTHER
+ pNewType.Align = DEFAULT_ALIGN
+ pNewType.TotalSize = 0
+ pNewType.HasBitField = False
+ pNewType.Members = None
+ pNewType.Next = None
+ self.NewDataType = pNewType
+
+ def SetNewTypeType(self, Type):
+ if self.NewDataType is None:
+ return VfrReturnCode.VFR_RETURN_ERROR_SKIPED
+
+ if Type is None:
+ return VfrReturnCode.VFR_RETURN_FATAL_ERROR
+ # need to limit the value of the type
+ self.NewDataType.Type = Type
+
+ return VfrReturnCode.VFR_RETURN_SUCCESS
+
+ def SetNewTypeTotalSize(self, Size):
+ self.NewDataType.TotalSize = Size
+
+ def SetNewTypeAlign(self, Align):
+ self.NewDataType.Align = Align
+
+ def SetNewTypeName(self, TypeName):
+ if self.NewDataType is None:
+ return VfrReturnCode.VFR_RETURN_ERROR_SKIPED
+
+ if TypeName is None:
+ return VfrReturnCode.VFR_RETURN_FATAL_ERROR
+
+ if len(TypeName) >= MAX_NAME_LEN:
+ return VfrReturnCode.VFR_RETURN_INVALID_PARAMETER
+
+ pType = self.DataTypeList
+ while pType is not None:
+ if pType.TypeName == TypeName:
+ return VfrReturnCode.VFR_RETURN_REDEFINED
+ pType = pType.Next
+
+ self.NewDataType.TypeName = TypeName
+ return VfrReturnCode.VFR_RETURN_SUCCESS
+
+ def AlignStuff(self, Size, Align):
+ return Align - (Size) % (Align)
+
+ def DeclareDataTypeEnd(self):
+ if self.NewDataType.TypeName == "":
+ return
+
+ if self.NewDataType.TotalSize % self.NewDataType.Align != 0:
+ self.NewDataType.TotalSize += self.AlignStuff(self.NewDataType.TotalSize, self.NewDataType.Align)
+ self.NewDataType.Next = self.DataTypeList
+ self.DataTypeList = self.NewDataType
+ if self.FirstNewDataTypeName is None:
+ self.FirstNewDataTypeName = self.NewDataType.TypeName
+
+ self.NewDataType = None
+
+ # two definitions
+ def GetDataTypeSizeByTypeName(self, TypeName):
+ Size = 0
+ pDataType = self.DataTypeList
+ while pDataType is not None:
+ if pDataType.TypeName == TypeName:
+ Size = pDataType.TotalSize
+ return Size, VfrReturnCode.VFR_RETURN_SUCCESS
+ pDataType = pDataType.Next
+
+ return Size, VfrReturnCode.VFR_RETURN_UNDEFINED
+
+ def GetDataTypeSizeByDataType(self, DataType):
+ Size = 0
+ DataType = DataType & 0x0F
+ # For user defined data type, the size can't be got by this function.
+ if DataType == EFI_IFR_TYPE_OTHER:
+ return Size, VfrReturnCode.VFR_RETURN_SUCCESS
+ pDataType = self.DataTypeList
+ while pDataType is not None:
+ if DataType == pDataType.Type:
+ Size = pDataType.TotalSize
+ return Size, VfrReturnCode.VFR_RETURN_SUCCESS
+ pDataType = pDataType.Next
+
+ return Size, VfrReturnCode.VFR_RETURN_UNDEFINED
+
+ def ExtractStructTypeName(self, VarStr):
+ try:
+ index = VarStr.index(".")
+ except ValueError:
+ return VarStr, len(VarStr)
+ else:
+ return VarStr[0:index], index + 1
+
+ def ExtractFieldNameAndArrary(self, VarStr, s):
+ ArrayIdx = INVALID_ARRAY_INDEX
+ s_copy = s
+ while s < len(VarStr) and VarStr[s] != "." and VarStr[s] != "[" and VarStr[s] != "]":
+ s += 1
+
+ FName = VarStr[s_copy:s]
+
+ if s == len(VarStr):
+ return ArrayIdx, s, FName, VfrReturnCode.VFR_RETURN_SUCCESS
+
+ if VarStr[s] == ".":
+ s += 1
+ return ArrayIdx, s, FName, VfrReturnCode.VFR_RETURN_SUCCESS
+
+ if VarStr[s] == "[":
+ s += 1
+ try:
+ e = s + VarStr[s:].index("]")
+
+ except ValueError:
+ return None, None, None, VfrReturnCode.VFR_RETURN_DATA_STRING_ERROR
+ else:
+ ArrayStr = VarStr[s:e]
+ ArrayIdx = int(ArrayStr)
+ if VarStr[e] == "]":
+ e += 1
+ if e < len(VarStr) and (VarStr[e] == "."):
+ e += 1
+ return ArrayIdx, e, FName, VfrReturnCode.VFR_RETURN_SUCCESS
+
+ if VarStr[s] == "]":
+ return None, None, None, VfrReturnCode.VFR_RETURN_DATA_STRING_ERROR
+
+ return ArrayIdx, s, FName, VfrReturnCode.VFR_RETURN_SUCCESS
+
+ def GetTypeField(self, FName, Type):
+ if FName is None or Type is None:
+ return None, VfrReturnCode.VFR_RETURN_FATAL_ERROR
+
+ pField = Type.Members
+ while pField is not None:
+ if Type.Type == EFI_IFR_TYPE_TIME:
+ if FName == "Hour":
+ FName = "Hours"
+ elif FName == "Minute":
+ FName == "Minutes"
+ elif FName == "Second":
+ FName = "Seconds"
+ if pField.FieldName == FName:
+ Field = pField
+ return Field, VfrReturnCode.VFR_RETURN_SUCCESS
+
+ pField = pField.Next
+
+ return None, VfrReturnCode.VFR_RETURN_UNDEFINED
+
+ def IsThisBitField(self, VarStrName):
+ TName, i = self.ExtractStructTypeName(VarStrName)
+ pType, ReturnCode = self.GetDataType(TName)
+ if ReturnCode != VfrReturnCode.VFR_RETURN_SUCCESS:
+ return None, ReturnCode
+ pField = None
+ while i < len(VarStrName):
+ # i start from field
+ _, i, FName, ReturnCode = self.ExtractFieldNameAndArrary(VarStrName, i)
+ if ReturnCode != VfrReturnCode.VFR_RETURN_SUCCESS:
+ return None, ReturnCode
+ pField, ReturnCode = self.GetTypeField(FName, pType)
+ if ReturnCode != VfrReturnCode.VFR_RETURN_SUCCESS:
+ return None, ReturnCode
+ pType = pField.FieldType
+
+ if pField is not None and pField.IsBitField:
+ return True, ReturnCode
+ return False, ReturnCode
+
+ def GetFieldOffset(self, Field, ArrayIdx, IsBitField):
+ if Field is None:
+ return None, VfrReturnCode.VFR_RETURN_FATAL_ERROR
+
+ if (ArrayIdx != INVALID_ARRAY_INDEX) and (Field.ArrayNum == 0 or Field.ArrayNum <= ArrayIdx):
+ return None, VfrReturnCode.VFR_RETURN_ERROR_ARRARY_NUM
+
+ Idx = 0 if ArrayIdx == INVALID_ARRAY_INDEX else ArrayIdx
+ if IsBitField:
+ Offset = Field.BitOffset + Field.FieldType.TotalSize * Idx * 8
+ else:
+ Offset = Field.Offset + Field.FieldType.TotalSize * Idx
+
+ return Offset, VfrReturnCode.VFR_RETURN_SUCCESS
+
+ def GetFieldWidth(self, Field):
+ if Field is None:
+ return 0
+ return Field.FieldType.Type
+
+ def GetFieldSize(self, Field, ArrayIdx, BitField):
+ if Field is None:
+ return VfrReturnCode.VFR_RETURN_FATAL_ERROR
+
+ if (ArrayIdx == INVALID_ARRAY_INDEX) and (Field.ArrayNum != 0):
+ return Field.FieldType.TotalSize * Field.ArrayNum
+ elif BitField:
+ return Field.BitWidth
+ return Field.FieldType.TotalSize
+
+ def GetDataFieldInfo(self, VarStr):
+ # VarStr -> Type.Field
+ Offset = 0
+ Type = EFI_IFR_TYPE_OTHER
+ Size = 0
+ BitField = False
+
+ TName, i = self.ExtractStructTypeName(VarStr)
+
+ pType, ReturnCode = self.GetDataType(TName)
+ if ReturnCode != VfrReturnCode.VFR_RETURN_SUCCESS:
+ return Offset, Type, Size, BitField, ReturnCode
+
+ BitField, ReturnCode = self.IsThisBitField(VarStr)
+
+ if ReturnCode != VfrReturnCode.VFR_RETURN_SUCCESS:
+ return Offset, Type, Size, BitField, ReturnCode
+
+ # if it is not struct data type
+ Type = pType.Type
+ Size = pType.TotalSize
+
+ while i < len(VarStr):
+ ArrayIdx, i, FName, ReturnCode = self.ExtractFieldNameAndArrary(VarStr, i)
+ if ReturnCode != VfrReturnCode.VFR_RETURN_SUCCESS:
+ return Offset, Type, Size, BitField, ReturnCode
+ pField, ReturnCode = self.GetTypeField(FName, pType)
+ if ReturnCode != VfrReturnCode.VFR_RETURN_SUCCESS:
+ return Offset, Type, Size, BitField, ReturnCode
+ pType = pField.FieldType
+ Tmp, ReturnCode = self.GetFieldOffset(pField, ArrayIdx, pField.IsBitField)
+ if ReturnCode != VfrReturnCode.VFR_RETURN_SUCCESS:
+ return Offset, Type, Size, BitField, ReturnCode
+
+ if BitField and pField.IsBitField is False:
+ Offset = int(Offset + Tmp * 8)
+ else:
+ Offset = int(Offset + Tmp)
+
+ Type = self.GetFieldWidth(pField)
+ Size = self.GetFieldSize(pField, ArrayIdx, BitField)
+
+ return Offset, Type, Size, BitField, VfrReturnCode.VFR_RETURN_SUCCESS
+
+
+ def DataTypeAddField(self, FieldName, TypeName, ArrayNum, FieldInUnion):
+ pFieldType, ReturnCode = self.GetDataType(TypeName)
+
+ if ReturnCode != VfrReturnCode.VFR_RETURN_SUCCESS:
+ return ReturnCode
+
+ MaxDataTypeSize = self.NewDataType.TotalSize
+
+ if len(FieldName) >= MAX_NAME_LEN:
+ return VfrReturnCode.VFR_RETURN_INVALID_PARAMETER
+
+ pTmp = self.NewDataType.Members
+ while pTmp is not None:
+ if pTmp.FieldName == FieldName:
+ return VfrReturnCode.VFR_RETURN_REDEFINED
+ pTmp = pTmp.Next
+
+ Align = min(self.PackAlign, pFieldType.Align)
+ pNewField = SVfrDataField()
+ if pNewField is None:
+ return VfrReturnCode.VFR_RETURN_OUT_FOR_RESOURCES
+ pNewField.FieldName = FieldName
+ pNewField.FieldType = pFieldType
+ pNewField.ArrayNum = ArrayNum
+ pNewField.IsBitField = False
+
+ if self.NewDataType.TotalSize % Align == 0:
+ pNewField.Offset = self.NewDataType.TotalSize
+ else:
+ pNewField.Offset = self.NewDataType.TotalSize + self.AlignStuff(self.NewDataType.TotalSize, Align)
+
+ if self.NewDataType.Members is None:
+ self.NewDataType.Members = pNewField
+ pNewField.Next = None
+ else:
+ pTmp = self.NewDataType.Members
+ while pTmp.Next is not None:
+ pTmp = pTmp.Next
+ pTmp.Next = pNewField
+ pNewField.Next = None
+
+ self.NewDataType.Align = min(self.PackAlign, max(pFieldType.Align, self.NewDataType.Align))
+
+ if FieldInUnion:
+ if MaxDataTypeSize < pNewField.FieldType.TotalSize:
+ self.NewDataType.TotalSize = pNewField.FieldType.TotalSize
+ pNewField.Offset = 0
+ else:
+ Num = ArrayNum if ArrayNum != 0 else 1
+ self.NewDataType.TotalSize = pNewField.Offset + (pNewField.FieldType.TotalSize) * Num
+
+ return VfrReturnCode.VFR_RETURN_SUCCESS
+
+ def DataTypeAddBitField(self, FieldName, TypeName, Width, FieldInUnion):
+ pFieldType, ReturnCode = self.GetDataType(TypeName)
+ if ReturnCode != VfrReturnCode.VFR_RETURN_SUCCESS:
+ return ReturnCode
+
+ if Width > MAX_BIT_WIDTH:
+ return VfrReturnCode.VFR_RETURN_BIT_WIDTH_ERROR
+
+ if Width > (pFieldType.TotalSize) * 8:
+ return VfrReturnCode.VFR_RETURN_BIT_WIDTH_ERROR
+
+ if (FieldName is not None) and (len(FieldName) >= MAX_NAME_LEN):
+ return VfrReturnCode.VFR_RETURN_INVALID_PARAMETER
+
+ if Width == 0 and FieldName is not None:
+ return VfrReturnCode.VFR_RETURN_INVALID_PARAMETER
+
+ pTmp = self.NewDataType.Members
+ while pTmp is not None:
+ if FieldName is not None and pTmp.FieldName == FieldName:
+ return VfrReturnCode.VFR_RETURN_REDEFINED
+ pTmp = pTmp.Next
+
+ Align = min(self.PackAlign, pFieldType.Align)
+ UpdateTotalSize = False
+
+ pNewField = SVfrDataField()
+ if pNewField is None:
+ return VfrReturnCode.VFR_RETURN_OUT_FOR_RESOURCES
+
+ MaxDataTypeSize = self.NewDataType.TotalSize
+
+ pNewField.FieldName = FieldName
+ pNewField.FieldType = pFieldType
+ pNewField.IsBitField = True
+ pNewField.BitWidth = Width
+ pNewField.ArrayNum = 0
+ pNewField.BitOffset = 0
+ pNewField.Offset = 0
+
+ if self.NewDataType.Members is None:
+ self.NewDataType.Members = pNewField
+ pNewField.Next = None
+ else:
+ pTmp = self.NewDataType.Members
+ while pTmp.Next is not None:
+ pTmp = pTmp.Next
+ pTmp.Next = pNewField
+ pNewField.Next = None
+
+ if FieldInUnion:
+ pNewField.Offset = 0
+ if MaxDataTypeSize < pNewField.FieldType.TotalSize:
+ self.NewDataType.TotalSize = pNewField.FieldType.TotalSize
+ else:
+ # Check whether the bit fields can be contained within one FieldType.
+ cond1 = (pTmp is not None) and (pTmp.IsBitField) and (pTmp.FieldType.TypeName == pNewField.FieldType.TypeName)
+ cond2 = (pTmp is not None) and (pTmp.BitOffset - pTmp.Offset * 8 + pTmp.BitWidth + pNewField.BitWidth <= pNewField.FieldType.TotalSize * 8)
+ if cond1 and cond2:
+ pNewField.BitOffset = pTmp.BitOffset + pTmp.BitWidth
+ pNewField.Offset = pTmp.Offset
+
+ if pNewField.BitWidth == 0:
+ pNewField.BitWidth = pNewField.FieldType.TotalSize * 8 - (pNewField.BitOffset - pTmp.Offset * 8)
+ else:
+ pNewField.BitOffset = self.NewDataType.TotalSize * 8
+ UpdateTotalSize = True
+
+ if UpdateTotalSize:
+ if self.NewDataType.TotalSize % Align == 0:
+ pNewField.Offset = self.NewDataType.TotalSize
+ else:
+ pNewField.Offset = self.NewDataType.TotalSize + self.AlignStuff(self.NewDataType.TotalSize, Align)
+ self.NewDataType.TotalSize = pNewField.Offset + pNewField.FieldType.TotalSize
+
+ self.NewDataType.Align = min(self.PackAlign, max(pFieldType.Align, self.NewDataType.Align))
+ self.NewDataType.HasBitField = True
+ return VfrReturnCode.VFR_RETURN_SUCCESS
+
+ def GetDataType(self, TypeName):
+ if TypeName is None:
+ return None, VfrReturnCode.VFR_RETURN_ERROR_SKIPED
+
+ DataType = self.DataTypeList
+ while DataType is not None:
+ if DataType.TypeName == TypeName:
+ return DataType, VfrReturnCode.VFR_RETURN_SUCCESS
+ DataType = DataType.Next
+ return None, VfrReturnCode.VFR_RETURN_UNDEFINED
+
+ def DataTypeHasBitField(self, TypeName):
+ if TypeName is None:
+ return False
+
+ pType = self.DataTypeList
+ while pType is not None:
+ if pType.TypeName == TypeName:
+ break
+ pType = pType.Next
+
+ if pType is None:
+ return False
+
+ pTmp = pType.Members
+ while pTmp is not None:
+ if pTmp.IsBitField:
+ return True
+ pTmp = pTmp.Next
+ return False
+
+ def Dump(self, f):
+ f.write("\n\n*************\n")
+ f.write("\t\tPackAlign = " + str(self.PackAlign) + "\n")
+ pNode = self.DataTypeList
+ while pNode is not None:
+ f.write("\t\tstruct {} : Align : [{}] TotalSize : [{:#x}]\n\n".format(pNode.TypeName, pNode.Align, pNode.TotalSize))
+ f.write("\t\tstruct {}".format(str(pNode.TypeName)) + "\t{\n")
+ FNode = pNode.Members
+ while FNode is not None:
+ if FNode.ArrayNum > 0:
+ f.write("\t\t\t+{:0>8d}[{:0>8x}] {}[{}] <{}>\n".format(FNode.Offset, FNode.Offset, FNode.FieldName, FNode.ArrayNum, FNode.FieldType.TypeName))
+ f.write("\t\t\t+{:0>8d}[{:0>8x}] {}[{}] <{}>\n".format(FNode.Offset, FNode.BitOffset, FNode.FieldName, FNode.ArrayNum, FNode.FieldType.TypeName))
+ elif FNode.FieldName is not None:
+ f.write("\t\t\t+{:0>8d}[{:0>8x}] {} <{}>\n".format(FNode.Offset, FNode.Offset, FNode.FieldName, FNode.FieldType.TypeName))
+ f.write("\t\t\t+{:0>8d}[{:0>8x}] {} <{}>\n".format(FNode.Offset, FNode.BitOffset, FNode.FieldName, FNode.FieldType.TypeName))
+ else:
+ f.write("\t\t\t+{:0>8d}[{:0>8x}] <{}>\n".format(FNode.Offset, FNode.Offset, FNode.FieldType.TypeName))
+ f.write("\t\t\t+{:0>8d}[{:0>8x}] <{}>\n".format(FNode.Offset, FNode.BitOffset, FNode.FieldType.TypeName))
+ FNode = FNode.Next
+ f.write("\t\t};\n")
+ f.write("---------------------------------------------------------------\n")
+ pNode = pNode.Next
+ f.write("***************************************************************\n")
+
+
+class SVfrDefaultStoreNode:
+ def __init__(self, ObjAddr=None, RefName="", DefaultStoreNameId=0, DefaultId=0):
+ self.ObjAddr = ObjAddr
+ self.RefName = RefName
+ self.DefaultStoreNameId = DefaultStoreNameId
+ self.DefaultId = DefaultId
+ self.Next = None
+
+
+class VfrDefaultStore:
+ def __init__(self):
+ self.DefaultStoreList = None
+
+ def Clear(self):
+ self.DefaultStoreList = None
+
+ def RegisterDefaultStore(self, ObjAddr: EFI_IFR_DEFAULTSTORE, RefName, DefaultStoreNameId, DefaultId):
+ if RefName == "" or RefName is None:
+ return VfrReturnCode.VFR_RETURN_FATAL_ERROR
+
+ pNode = self.DefaultStoreList
+ while pNode is not None:
+ if pNode.RefName == RefName:
+ return VfrReturnCode.VFR_RETURN_REDEFINED
+ pNode = pNode.Next
+
+ pNode = SVfrDefaultStoreNode(ObjAddr, RefName, DefaultStoreNameId, DefaultId)
+
+ if pNode is None:
+ return VfrReturnCode.VFR_RETURN_OUT_FOR_RESOURCES
+
+ pNode.Next = self.DefaultStoreList
+ self.DefaultStoreList = pNode
+
+ return VfrReturnCode.VFR_RETURN_SUCCESS
+
+ def UpdateDefaultType(self, DefaultNode):
+ pNode = self.DefaultStoreList
+ while pNode is not None:
+ if pNode.ObjAddr.DefaultId == DefaultNode.Data.GetDefaultId():
+ DefaultNode.Data.SetType(pNode.RefName)
+ pNode = pNode.Next
+
+ def DefaultIdRegistered(self, DefaultId):
+ pNode = self.DefaultStoreList
+ while pNode is not None:
+ if pNode.DefaultId == DefaultId:
+ return True
+ pNode = pNode.Next
+
+ return False
+
+ def ReRegisterDefaultStoreById(self, DefaultId, RefName, DefaultStoreNameId):
+ pNode = self.DefaultStoreList
+ while pNode is not None:
+ if pNode.DefaultId == DefaultId:
+ break
+ pNode = pNode.Next
+
+ if pNode is None:
+ return None, VfrReturnCode.VFR_RETURN_UNDEFINED
+
+ if pNode.DefaultStoreNameId == EFI_STRING_ID_INVALID:
+ pNode.DefaultStoreNameId = DefaultStoreNameId
+ pNode.RefName = RefName
+ if pNode.ObjAddr is not None:
+ pNode.ObjAddr.DefaultName = DefaultStoreNameId
+ else:
+ return None, VfrReturnCode.VFR_RETURN_REDEFINED
+
+ return pNode, VfrReturnCode.VFR_RETURN_SUCCESS
+
+ def GetDefaultId(self, RefName):
+ pTmp = self.DefaultStoreList
+ while pTmp is not None:
+ if pTmp.RefName == RefName:
+ DefaultId = pTmp.DefaultId
+ return DefaultId, VfrReturnCode.VFR_RETURN_SUCCESS
+ pTmp = pTmp.Next
+ return None, VfrReturnCode.VFR_RETURN_UNDEFINED
+
+ def BufferVarStoreAltConfigAdd(self, DefaultId, BaseInfo, VarStoreName, VarStoreGuid, Type, Value):
+ if VarStoreName is None:
+ return VfrReturnCode.VFR_RETURN_FATAL_ERROR
+ pNode = self.DefaultStoreList
+ while pNode is not None:
+ if pNode.DefaultId == DefaultId:
+ break
+ pNode = pNode.Next
+ if pNode is None:
+ return VfrReturnCode.VFR_RETURN_UNDEFINED
+ gVfrBufferConfig.Open()
+ if gVfrBufferConfig.Select(VarStoreName, VarStoreGuid) == 0:
+ Returnvalue = gVfrBufferConfig.Write(
+ "a",
+ VarStoreName,
+ VarStoreGuid,
+ pNode.DefaultId,
+ Type,
+ BaseInfo.Info.VarOffset,
+ BaseInfo.VarTotalSize,
+ Value,
+ )
+ if Returnvalue != 0:
+ gVfrBufferConfig.Close()
+ return VfrReturnCode(Returnvalue)
+ gVfrBufferConfig.Close()
+ return VfrReturnCode.VFR_RETURN_SUCCESS
+
+
+class EFI_VFR_VARSTORE_TYPE(Enum):
+ EFI_VFR_VARSTORE_INVALID = 0
+ EFI_VFR_VARSTORE_BUFFER = 1
+ EFI_VFR_VARSTORE_EFI = 2
+ EFI_VFR_VARSTORE_NAME = 3
+ EFI_VFR_VARSTORE_BUFFER_BITS = 4
+
+
+class EfiVar:
+ def __init__(self, VarName=0, VarSize=0):
+ self.EfiVarName = VarName
+ self.EfiVarSize = VarSize
+
+
+DEFAULT_NAME_TABLE_ITEMS = 1024
+
+
+class SVfrVarStorageNode:
+ def __init__(
+ self,
+ VarStoreName="",
+ VarStoreId=0,
+ Guid=None,
+ Attributes=0,
+ Flag=True,
+ EfiValue=None,
+ DataType=None,
+ BitsVarstore=False,
+ ):
+ self.Guid = Guid
+ self.VarStoreName = VarStoreName
+ self.VarStoreId = VarStoreId
+ self.AssignedFlag = Flag
+ self.Attributes = Attributes
+ self.Next = None
+ self.EfiVar = EfiValue
+ self.DataType = DataType
+ self.NameSpace = []
+
+ if EfiValue is not None:
+ self.VarstoreType = EFI_VFR_VARSTORE_TYPE.EFI_VFR_VARSTORE_EFI
+ elif DataType is not None:
+ if BitsVarstore:
+ self.VarstoreType = EFI_VFR_VARSTORE_TYPE.EFI_VFR_VARSTORE_BUFFER_BITS
+ else:
+ self.VarstoreType = EFI_VFR_VARSTORE_TYPE.EFI_VFR_VARSTORE_BUFFER
+ else:
+ self.VarstoreType = EFI_VFR_VARSTORE_TYPE.EFI_VFR_VARSTORE_NAME
+
+
+class SConfigItem:
+ def __init__(self, Name=None, Guid=None, Id=None, Type=None, Offset=None, Width=None, Value=None):
+ self.Name = Name
+ self.Guid = Guid
+ self.Id = Id
+ if Type is not None:
+ # list of Offset/Value in the varstore
+ self.InfoStrList = SConfigInfo(Type, Offset, Width, Value)
+ else:
+ self.InfoStrList = None
+ self.Next = None
+
+
+class SConfigInfo:
+ def __init__(self, Type, Offset, Width, Value):
+ self.Type = Type
+ self.Offset = Offset
+ self.Width = Width
+ self.Next = None
+ self.Value = Value
+
+
+class VfrBufferConfig:
+ __metaclass__ = ABCMeta
+
+ def __init__(self):
+ self.ItemListHead = None
+ self.ItemListTail = None
+ self.ItemListPos = None
+
+ def GetVarItemList(self):
+ return self.ItemListHead
+
+ @abstractmethod
+ def Open(self):
+ self.ItemListPos = self.ItemListHead
+
+ @abstractmethod
+ def Close(self):
+ self.ItemListPos = None
+
+ @abstractmethod
+ def Select(self, Name, Guid, Id=None):
+ if Name is None or Guid is None:
+ self.ItemListPos = self.ItemListHead
+ return 0
+ p = self.ItemListHead
+ while p is not None:
+ if p.Name != Name or p.Guid.__cmp__(Guid) is False:
+ p = p.Next
+ continue
+ if Id is not None:
+ if p.Id is None or p.Id != Id:
+ p = p.Next
+ continue
+ elif p.Id is not None:
+ p = p.Next
+ continue
+ self.ItemListPos = p
+ return 0
+ return 1
+
+ @abstractmethod
+ def Register(self, Name, Guid, Id=None):
+ if self.Select(Name, Guid) == 0:
+ return 1
+ pNew = SConfigItem(Name, Guid, Id)
+ if pNew is None:
+ return 2
+ if self.ItemListHead is None:
+ self.ItemListHead = pNew
+ self.ItemListTail = pNew
+ else:
+ self.ItemListTail.Next = pNew
+ self.ItemListTail = pNew
+ self.ItemListPos = pNew
+ return 0
+
+ @abstractmethod
+ def Write(self, Mode, Name, Guid, Id, Type, Offset, Width, Value):
+ Ret = self.Select(Name, Guid)
+ if Ret != 0:
+ return Ret
+
+ if Mode == "a":
+ if self.Select(Name, Guid, Id) != 0:
+ pItem = SConfigItem(Name, Guid, Id, Type, Offset, Width, Value)
+ if pItem is None:
+ return 2
+
+ if self.ItemListHead is None:
+ self.ItemListHead = pItem
+ self.ItemListTail = pItem
+ else:
+ self.ItemListTail.Next = pItem
+ self.ItemListTail = pItem
+
+ self.ItemListPos = pItem
+
+ else:
+ # tranverse the list to find out if there's already the value for the same Offset
+ pInfo = self.ItemListPos.InfoStrList
+ while pInfo is not None:
+ if pInfo.Offset == Offset:
+ return 0
+ pInfo = pInfo.Next
+
+ pInfo = SConfigInfo(Type, Offset, Width, Value)
+ if pInfo is None:
+ return 2
+
+ pInfo.Next = self.ItemListPos.InfoStrList
+ self.ItemListPos.InfoStrList = pInfo
+
+ elif Mode == "d":
+ if self.ItemListHead == self.ItemListPos:
+ self.ItemListHead = self.ItemListPos.Next
+
+ pItem = self.ItemListHead
+ while pItem.Next != self.ItemListPos:
+ pItem = pItem.Next
+ pItem.Next = self.ItemListPos.Next
+
+ if self.ItemListTail == self.ItemListPos:
+ self.ItemListTail = pItem
+
+ self.ItemListPos = pItem.Next
+
+ elif Mode == "i":
+ if Id is not None:
+ self.ItemListPos.Id = Id
+ else:
+ return 1
+ return 0
+
+
+gVfrBufferConfig = VfrBufferConfig()
+
+
+class EFI_VARSTORE_INFO(Structure):
+ _pack_ = 1
+ _fields_ = [
+ ("VarStoreId", c_uint16),
+ ("Info", VarStoreInfoNode),
+ ("VarType", c_uint8),
+ ("VarTotalSize", c_uint32),
+ ("IsBitVar", c_bool),
+ ]
+
+ def __init__(
+ self,
+ VarStoreId=EFI_VARSTORE_ID_INVALID,
+ VarName=EFI_STRING_ID_INVALID,
+ VarOffset=EFI_VAROFFSET_INVALID,
+ VarType=EFI_IFR_TYPE_OTHER,
+ VarTotalSize=0,
+ IsBitVar=False,
+ ):
+ self.VarStoreId = VarStoreId
+ self.Info.VarName = VarName
+ self.Info.VarOffset = VarOffset
+ self.VarTotalSize = VarTotalSize
+ self.IsBitVar = IsBitVar
+ self.VarType = VarType
+
+
+class BufferVarStoreFieldInfoNode:
+ def __init__(self, BaseInfo: EFI_VARSTORE_INFO):
+ self.VarStoreInfo = EFI_VARSTORE_INFO()
+ self.VarStoreInfo.VarType = BaseInfo.VarType
+ self.VarStoreInfo.VarTotalSize = BaseInfo.VarTotalSize
+ self.VarStoreInfo.Info.VarOffset = BaseInfo.Info.VarOffset
+ self.VarStoreInfo.VarStoreId = BaseInfo.VarStoreId
+ self.Next = None
+
+
+class VfrDataStorage:
+ def __init__(self):
+ # SVfrVarStorageNode
+ self.BufferVarStoreList = None
+ self.EfiVarStoreList = None
+ self.NameVarStoreList = None
+ self.CurrVarStorageNode = None
+ self.NewVarStorageNode = None
+ self.BufferFieldInfoListHead = None
+ self.mBufferFieldInfoListTail = None
+ self.FreeVarStoreIdBitMap = []
+ for i in range(0, EFI_FREE_VARSTORE_ID_BITMAP_SIZE):
+ self.FreeVarStoreIdBitMap.append(0)
+ # Question ID0 is reserved
+ self.FreeVarStoreIdBitMap[0] = 0x80000000
+
+ def Clear(self):
+ # SVfrVarStorageNode
+ self.BufferVarStoreList = None
+ self.EfiVarStoreList = None
+ self.NameVarStoreList = None
+ self.CurrVarStorageNode = None
+ self.NewVarStorageNode = None
+ self.BufferFieldInfoListHead = None
+ self.mBufferFieldInfoListTail = None
+ self.FreeVarStoreIdBitMap = []
+ for _ in range(0, EFI_FREE_VARSTORE_ID_BITMAP_SIZE):
+ self.FreeVarStoreIdBitMap.append(0)
+ # Question ID0 is reserved
+ self.FreeVarStoreIdBitMap[0] = 0x80000000
+
+ def GetBufferVarStoreList(self):
+ return self.BufferVarStoreList
+
+ def CheckGuidField(self, pNode, StoreGuid, HasFoundOne, ReturnCode):
+ if StoreGuid is not None:
+ # If has guid info, compare the guid field.
+ if pNode.Guid.__cmp__(StoreGuid):
+ self.CurrVarStorageNode = pNode
+ ReturnCode = VfrReturnCode.VFR_RETURN_SUCCESS
+ return True, ReturnCode, HasFoundOne
+ else:
+ # not has Guid field, check whether this name is the only one.
+ if HasFoundOne:
+ # The name has conflict, return name redefined.
+ ReturnCode = VfrReturnCode.VFR_RETURN_VARSTORE_NAME_REDEFINED_ERROR
+ return True, ReturnCode, HasFoundOne
+
+ self.CurrVarStorageNode = pNode
+ HasFoundOne = True
+ return False, ReturnCode, HasFoundOne
+
+ def GetVarStoreByDataType(self, DataTypeName, VarGuid):
+ MatchNode = None
+ pNode = self.BufferVarStoreList
+ while pNode is not None:
+ if pNode.DataType.TypeName != DataTypeName:
+ pNode = pNode.Next
+ continue
+ if VarGuid is not None:
+ if pNode.Guid.__cmp__(VarGuid):
+ return pNode, VfrReturnCode.VFR_RETURN_SUCCESS
+ elif MatchNode is None:
+ MatchNode = pNode
+ else:
+ # More than one varstores referred the same data structures
+ return None, VfrReturnCode.VFR_RETURN_VARSTORE_DATATYPE_REDEFINED_ERROR
+ pNode = pNode.Next
+
+ if MatchNode is None:
+ return MatchNode, VfrReturnCode.VFR_RETURN_UNDEFINED
+
+ return MatchNode, VfrReturnCode.VFR_RETURN_SUCCESS
+
+ """
+ Base on the input store name and guid to find the varstore id.
+ If both name and guid are inputed, base on the name and guid to
+ found the varstore. If only name inputed, base on the name to
+ found the varstore and go on to check whether more than one varstore
+ has the same name. If only has found one varstore, return this
+ varstore; if more than one varstore has same name, return varstore
+ name redefined error. If no varstore found by varstore name, call
+ function GetVarStoreByDataType and use inputed varstore name as
+ data type name to search.
+ """
+
+ def GetVarStoreId(self, StoreName, StoreGuid=None):
+ ReturnCode = None
+ HasFoundOne = False
+ self.CurrVarStorageNode = None
+
+ pNode = self.BufferVarStoreList
+ while pNode is not None:
+ if pNode.VarStoreName == StoreName:
+ Result, ReturnCode, HasFoundOne = self.CheckGuidField(pNode, StoreGuid, HasFoundOne, ReturnCode)
+ if Result:
+ VarStoreId = self.CurrVarStorageNode.VarStoreId
+ return VarStoreId, ReturnCode
+ pNode = pNode.Next
+
+ pNode = self.EfiVarStoreList
+ while pNode is not None:
+ if pNode.VarStoreName == StoreName:
+ Result, ReturnCode, HasFoundOne = self.CheckGuidField(pNode, StoreGuid, HasFoundOne, ReturnCode)
+ if Result:
+ VarStoreId = self.CurrVarStorageNode.VarStoreId
+ return VarStoreId, ReturnCode
+ pNode = pNode.Next
+
+ pNode = self.NameVarStoreList
+ while pNode is not None:
+ if pNode.VarStoreName == StoreName:
+ Result, ReturnCode, HasFoundOne = self.CheckGuidField(pNode, StoreGuid, HasFoundOne, ReturnCode)
+ if Result:
+ VarStoreId = self.CurrVarStorageNode.VarStoreId
+ return VarStoreId, ReturnCode
+ pNode = pNode.Next
+
+ if HasFoundOne:
+ VarStoreId = self.CurrVarStorageNode.VarStoreId
+ return VarStoreId, VfrReturnCode.VFR_RETURN_SUCCESS
+
+ VarStoreId = EFI_VARSTORE_ID_INVALID
+ pNode, ReturnCode = self.GetVarStoreByDataType(StoreName, StoreGuid)
+ if pNode is not None:
+ self.CurrVarStorageNode = pNode
+ VarStoreId = pNode.VarStoreId
+
+ return VarStoreId, ReturnCode
+
+ def GetFreeVarStoreId(self, VarType):
+ Index = 0
+ for i in range(0, EFI_FREE_VARSTORE_ID_BITMAP_SIZE):
+ if self.FreeVarStoreIdBitMap[i] != 0xFFFFFFFF:
+ Index = i
+ break
+ if Index == EFI_FREE_VARSTORE_ID_BITMAP_SIZE:
+ return EFI_VARSTORE_ID_INVALID
+
+ Offset = 0
+ Mask = 0x80000000
+ while Mask != 0:
+ if (self.FreeVarStoreIdBitMap[Index] & Mask) == 0:
+ self.FreeVarStoreIdBitMap[Index] |= Mask
+ return (Index << EFI_BITS_SHIFT_PER_UINT32) + Offset
+ Mask >>= 1
+ Offset += 1
+ return EFI_VARSTORE_ID_INVALID
+
+ def CheckVarStoreIdFree(self, VarStoreId):
+ Index = int(VarStoreId / EFI_BITS_PER_UINT32)
+ Offset = VarStoreId % EFI_BITS_PER_UINT32
+ return (self.FreeVarStoreIdBitMap[Index] & (0x80000000 >> Offset)) == 0
+
+ def MarkVarStoreIdUsed(self, VarStoreId):
+ Index = int(VarStoreId / EFI_BITS_PER_UINT32)
+ Offset = VarStoreId % EFI_BITS_PER_UINT32
+ self.FreeVarStoreIdBitMap[Index] |= 0x80000000 >> Offset
+
+ def DeclareBufferVarStore(self, StoreName, Guid, DataTypeDB, TypeName, VarStoreId, IsBitVarStore, Attr=0, Flag=True):
+ if StoreName is None or Guid is None or DataTypeDB is None:
+ return VfrReturnCode.VFR_RETURN_FATAL_ERROR
+ _, ReturnCode = self.GetVarStoreId(StoreName, Guid)
+
+ if ReturnCode == VfrReturnCode.VFR_RETURN_SUCCESS:
+ return VfrReturnCode.VFR_RETURN_REDEFINED
+
+ DataType, ReturnCode = DataTypeDB.GetDataType(TypeName)
+
+ if ReturnCode != VfrReturnCode.VFR_RETURN_SUCCESS:
+ return ReturnCode
+
+ if VarStoreId == EFI_VARSTORE_ID_INVALID:
+ VarStoreId = self.GetFreeVarStoreId(EFI_VFR_VARSTORE_TYPE.EFI_VFR_VARSTORE_BUFFER)
+ else:
+ if self.CheckVarStoreIdFree(VarStoreId) is False:
+ return VfrReturnCode.VFR_RETURN_VARSTOREID_REDEFINED
+ self.MarkVarStoreIdUsed(VarStoreId)
+ pNew = SVfrVarStorageNode(StoreName, VarStoreId, Guid, Attr, Flag, None, DataType, IsBitVarStore)
+
+ if pNew is None:
+ return VfrReturnCode.VFR_RETURN_OUT_FOR_RESOURCES
+
+ pNew.Next = self.BufferVarStoreList
+ self.BufferVarStoreList = pNew
+
+ if gVfrBufferConfig.Register(StoreName, Guid) != 0:
+ return VfrReturnCode.VFR_RETURN_FATAL_ERROR
+
+ return VfrReturnCode.VFR_RETURN_SUCCESS
+
+ def DeclareNameVarStoreBegin(self, StoreName, VarStoreId):
+ if StoreName is None:
+ return VfrReturnCode.VFR_RETURN_FATAL_ERROR
+
+ _, ReturnCode = self.GetVarStoreId(StoreName)
+ if ReturnCode == VfrReturnCode.VFR_RETURN_SUCCESS:
+ return VfrReturnCode.VFR_RETURN_REDEFINED
+
+ if VarStoreId == EFI_VARSTORE_ID_INVALID:
+ VarStoreId = self.GetFreeVarStoreId(EFI_VFR_VARSTORE_TYPE.EFI_VFR_VARSTORE_NAME)
+ else:
+ if self.CheckVarStoreIdFree(VarStoreId) is False:
+ return VfrReturnCode.VFR_RETURN_VARSTOREID_REDEFINED
+ self.MarkVarStoreIdUsed(VarStoreId)
+
+ pNode = SVfrVarStorageNode(StoreName, VarStoreId)
+
+ if pNode is None:
+ return VfrReturnCode.VFR_RETURN_OUT_FOR_RESOURCES
+
+ self.NewVarStorageNode = pNode
+ return VfrReturnCode.VFR_RETURN_SUCCESS
+
+ def DeclareNameVarStoreEnd(self, Guid):
+ self.NewVarStorageNode.Guid = Guid
+ self.NewVarStorageNode.Next = self.NameVarStoreList
+ self.NameVarStoreList = self.NewVarStorageNode
+ self.NewVarStorageNode = None
+
+ def NameTableAddItem(self, Item):
+ self.NewVarStorageNode.NameSpace.append(Item)
+ return VfrReturnCode.VFR_RETURN_SUCCESS
+
+ def GetNameVarStoreInfo(self, BaseInfo, Index):
+ if BaseInfo is None:
+ return VfrReturnCode.VFR_RETURN_FATAL_ERROR
+
+ if self.CurrVarStorageNode is None:
+ return VfrReturnCode.VFR_RETURN_GET_NVVARSTORE_ERROR
+
+ BaseInfo.Info.VarName = self.CurrVarStorageNode.NameSpace[Index]
+
+ return VfrReturnCode.VFR_RETURN_SUCCESS
+
+ def GetVarStoreType(self, VarStoreId):
+ VarStoreType = EFI_VFR_VARSTORE_TYPE.EFI_VFR_VARSTORE_INVALID
+
+ if VarStoreId == EFI_VARSTORE_ID_INVALID:
+ return VarStoreType
+
+ pNode = self.BufferVarStoreList
+ while pNode is not None:
+ if pNode.VarStoreId == VarStoreId:
+ return pNode.VarstoreType
+ pNode = pNode.Next
+
+ pNode = self.EfiVarStoreList
+ while pNode is not None:
+ if pNode.VarStoreId == VarStoreId:
+ return pNode.VarstoreType
+ pNode = pNode.Next
+
+ pNode = self.NameVarStoreList
+ while pNode is not None:
+ if pNode.VarStoreId == VarStoreId:
+ return pNode.VarstoreType
+ pNode = pNode.Next
+
+ return VarStoreType
+
+ def GetVarStoreName(self, VarStoreId):
+ pNode = self.BufferVarStoreList
+ while pNode is not None:
+ if pNode.VarStoreId == VarStoreId:
+ return pNode.VarStoreName, VfrReturnCode.VFR_RETURN_SUCCESS
+ pNode = pNode.Next
+
+ pNode = self.EfiVarStoreList
+ while pNode is not None:
+ if pNode.VarStoreId == VarStoreId:
+ return pNode.VarStoreName, VfrReturnCode.VFR_RETURN_SUCCESS
+ pNode = pNode.Next
+
+ pNode = self.NameVarStoreList
+ while pNode is not None:
+ if pNode.VarStoreId == VarStoreId:
+ return pNode.VarStoreName, VfrReturnCode.VFR_RETURN_SUCCESS
+ pNode = pNode.Next
+
+ return None, VfrReturnCode.VFR_RETURN_UNDEFINED
+
+ def GetBufferVarStoreDataTypeName(self, VarStoreId):
+ DataTypeName = None
+ if VarStoreId == EFI_VARSTORE_ID_INVALID:
+ return DataTypeName, VfrReturnCode.VFR_RETURN_FATAL_ERROR
+
+ pNode = self.BufferVarStoreList
+ while pNode is not None:
+ if pNode.VarStoreId == VarStoreId:
+ DataTypeName = pNode.DataType.TypeName
+ return DataTypeName, VfrReturnCode.VFR_RETURN_SUCCESS
+ pNode = pNode.Next
+
+ return DataTypeName, VfrReturnCode.VFR_RETURN_UNDEFINED
+
+ def GetEfiVarStoreInfo(self, BaseInfo: EFI_VARSTORE_INFO):
+ if BaseInfo is None:
+ return VfrReturnCode.VFR_RETURN_FATAL_ERROR
+
+ if self.CurrVarStorageNode is None:
+ return VfrReturnCode.VFR_RETURN_GET_EFIVARSTORE_ERROR
+
+ BaseInfo.Info.VarName = self.CurrVarStorageNode.EfiVar.EfiVarName
+ BaseInfo.VarTotalSize = self.CurrVarStorageNode.EfiVar.EfiVarSize
+
+ if BaseInfo.VarTotalSize == EFI_IFR_TYPE_NUM_8_BIT_SIZE:
+ BaseInfo.VarType = EFI_IFR_TYPE_NUM_SIZE_8
+ elif BaseInfo.VarTotalSize == EFI_IFR_TYPE_NUM_16_BIT_SIZE:
+ BaseInfo.VarType = EFI_IFR_TYPE_NUM_SIZE_16
+ elif BaseInfo.VarTotalSize == EFI_IFR_TYPE_NUM_32_BIT_SIZE:
+ BaseInfo.VarType = EFI_IFR_TYPE_NUM_SIZE_32
+ elif BaseInfo.VarTotalSize == EFI_IFR_TYPE_NUM_64_BIT_SIZE:
+ BaseInfo.VarType = EFI_IFR_TYPE_NUM_SIZE_64
+ else:
+ return VfrReturnCode.VFR_RETURN_FATAL_ERROR
+
+ return VfrReturnCode.VFR_RETURN_SUCCESS
+
+ def GetVarStoreGuid(self, VarStoreId):
+ VarGuid = None
+ if VarStoreId == EFI_VARSTORE_ID_INVALID:
+ return VarGuid
+
+ pNode = self.BufferVarStoreList
+ while pNode is not None:
+ if pNode.VarStoreId == VarStoreId:
+ VarGuid = pNode.Guid
+ return VarGuid
+ pNode = pNode.Next
+
+ pNode = self.EfiVarStoreList
+ while pNode is not None:
+ if pNode.VarStoreId == VarStoreId:
+ VarGuid = pNode.Guid
+ return VarGuid
+ pNode = pNode.Next
+
+ pNode = self.NameVarStoreList
+ while pNode is not None:
+ if pNode.VarStoreId == VarStoreId:
+ VarGuid = pNode.Guid
+ return VarGuid
+ pNode = pNode.Next
+
+ return VarGuid
+
+ def AddBufferVarStoreFieldInfo(self, BaseInfo: EFI_VARSTORE_INFO):
+ pNew = BufferVarStoreFieldInfoNode(BaseInfo)
+ if pNew is None:
+ return VfrReturnCode.VFR_RETURN_FATAL_ERROR
+
+ if self.BufferFieldInfoListHead is None:
+ self.BufferFieldInfoListHead = pNew
+ self.mBufferFieldInfoListTail = pNew
+ else:
+ self.mBufferFieldInfoListTail.Next = pNew
+ self.mBufferFieldInfoListTail = pNew
+
+ return VfrReturnCode.VFR_RETURN_SUCCESS
+
+
+class VfrStringDB:
+ def __init__(self):
+ self.StringFileName = None
+
+ def SetStringFileName(self, StringFileName):
+ self.StringFileName = StringFileName
+
+ def GetBestLanguage(self, SupportedLanguages, Language):
+ if SupportedLanguages is None or Language is None:
+ return False
+
+ LanguageLength = 0
+ # Determine the length of the first RFC 4646 language code in Language
+ while LanguageLength < len(Language) and Language[LanguageLength] != 0 and Language[LanguageLength] != ";":
+ LanguageLength += 1
+
+ Supported = SupportedLanguages
+ # Trim back the length of Language used until it is empty
+ while LanguageLength > 0:
+ # Loop through all language codes in SupportedLanguages
+ while len(Supported) > 0:
+ # Skip ';' characters in Supported
+ while len(Supported) > 0 and Supported[0] == ";":
+ Supported = Supported[1:]
+
+ CompareLength = 0
+ # Determine the length of the next language code in Supported
+ while CompareLength < len(Supported) and Supported[CompareLength] != 0 and Supported[CompareLength] != ";":
+ CompareLength += 1
+
+ # If Language is longer than the Supported, then skip to the next language
+ if LanguageLength > CompareLength:
+ continue
+
+ # See if the first LanguageLength characters in Supported match Language
+ if Supported[:LanguageLength] == Language:
+ return True
+
+ Supported = Supported[CompareLength:]
+
+ # Trim Language from the right to the next '-' character
+ LanguageLength -= 1
+ while LanguageLength > 0 and Language[LanguageLength] != "-":
+ LanguageLength -= 1
+
+ # No matches were found
+ return False
+
+ def GetUnicodeStringTextSize(self, StringSrc):
+ StringSize = sizeof(c_ushort)
+ StringStr = cast(StringSrc, POINTER(c_ushort))
+
+ while StringStr.contents.value != "\0":
+ StringSize += sizeof(c_ushort)
+ StringStr = cast(addressof(StringStr.contents) + sizeof(c_ushort), POINTER(c_ushort))
+
+ return StringSize
+
+ def FindStringBlock(self, string_data, string_id):
+ current_string_id = 1
+ block_hdr = string_data
+ block_size = 0
+ offset = 0
+
+ while block_hdr[0] != EFI_HII_SIBT_END:
+ block_type = block_hdr[0]
+
+ if block_type == EFI_HII_SIBT_STRING_SCSU:
+ offset = sizeof(EFI_HII_STRING_BLOCK)
+ string_text_ptr = block_hdr + offset
+ block_size += offset + len(str(string_text_ptr)) + 1
+ current_string_id += 1
+
+ elif block_type == EFI_HII_SIBT_STRING_SCSU_FONT:
+ offset = sizeof(EFI_HII_SIBT_STRING_SCSU_FONT_BLOCK) - sizeof(c_uint8)
+ string_text_ptr = block_hdr + offset
+ block_size += offset + len(str(string_text_ptr)) + 1
+ current_string_id += 1
+
+ elif block_type == EFI_HII_SIBT_STRINGS_SCSU:
+ string_count = int.from_bytes(
+ block_hdr[sizeof(EFI_HII_STRING_BLOCK) : sizeof(EFI_HII_STRING_BLOCK) + sizeof(c_uint16)],
+ byteorder="little",
+ )
+ string_text_ptr = block_hdr + sizeof(EFI_HII_SIBT_STRINGS_SCSU_BLOCK) - sizeof(c_uint8)
+ block_size += string_text_ptr - block_hdr
+
+ for _ in range(string_count):
+ block_size += len(str(string_text_ptr)) + 1
+
+ if current_string_id == string_id:
+ block_type = block_hdr[0]
+ string_text_offset = string_text_ptr - string_data
+ return EFI_SUCCESS
+
+ string_text_ptr = string_text_ptr + len(str(string_text_ptr)) + 1
+ current_string_id += 1
+
+ elif block_type == EFI_HII_SIBT_STRINGS_SCSU_FONT:
+ string_count = int.from_bytes(
+ block_hdr[sizeof(EFI_HII_STRING_BLOCK) + sizeof(c_uint8) : sizeof(EFI_HII_STRING_BLOCK) + sizeof(c_uint8) + sizeof(c_uint16)],
+ byteorder="little",
+ )
+ string_text_ptr = block_hdr + sizeof(EFI_HII_SIBT_STRINGS_SCSU_FONT_BLOCK) - sizeof(c_uint8)
+ block_size += string_text_ptr - block_hdr
+
+ for _ in range(string_count):
+ block_size += len(str(string_text_ptr)) + 1
+
+ if current_string_id == string_id:
+ block_type = block_hdr[0]
+ string_text_offset = string_text_ptr - string_data
+ return EFI_SUCCESS
+
+ string_text_ptr = string_text_ptr + len(str(string_text_ptr)) + 1
+ current_string_id += 1
+
+ elif block_type == EFI_HII_SIBT_STRING_UCS2:
+ offset = sizeof(EFI_HII_STRING_BLOCK)
+ string_text_ptr = block_hdr + offset
+ string_size = self.GetUnicodeStringTextSize(string_text_ptr)
+ block_size += offset + string_size
+ current_string_id += 1
+
+ elif block_type == EFI_HII_SIBT_STRING_UCS2_FONT:
+ offset = sizeof(EFI_HII_SIBT_STRING_UCS2_FONT_BLOCK) - sizeof(c_ushort)
+ string_text_ptr = block_hdr + offset
+ string_size = self.GetUnicodeStringTextSize(string_text_ptr)
+ block_size += offset + string_size
+ current_string_id += 1
+
+ elif block_type == EFI_HII_SIBT_STRINGS_UCS2:
+ offset = len(EFI_HII_SIBT_STRINGS_UCS2_BLOCK) - len(c_ushort)
+ string_text_ptr = block_hdr + offset
+ block_size += offset
+ string_count = int.from_bytes(
+ block_hdr[sizeof(EFI_HII_STRING_BLOCK) : sizeof(EFI_HII_STRING_BLOCK) + sizeof(c_uint16)],
+ byteorder="little",
+ )
+
+ for _ in range(string_count):
+ string_size = self.GetUnicodeStringTextSize(string_text_ptr)
+ block_size += string_size
+
+ if current_string_id == string_id:
+ block_type = block_hdr[0]
+ string_text_offset = string_text_ptr - string_data
+ return EFI_SUCCESS
+
+ string_text_ptr = string_text_ptr + string_size
+ current_string_id += 1
+
+ elif block_type == EFI_HII_SIBT_STRINGS_UCS2_FONT:
+ offset = len(EFI_HII_SIBT_STRINGS_UCS2_FONT_BLOCK) - len(c_ushort)
+ string_text_ptr = block_hdr + offset
+ block_size += offset
+ string_count = int.from_bytes(
+ block_hdr[sizeof(EFI_HII_STRING_BLOCK) + sizeof(c_uint8) : sizeof(EFI_HII_STRING_BLOCK) + sizeof(c_uint8) + sizeof(c_uint16)],
+ byteorder="little",
+ )
+
+ for _ in range(string_count):
+ string_size = self.GetUnicodeStringTextSize(string_text_ptr)
+ block_size += string_size
+
+ if current_string_id == string_id:
+ block_type = block_hdr[0]
+ string_text_offset = string_text_ptr - string_data
+ return EFI_SUCCESS
+
+ string_text_ptr = string_text_ptr + string_size
+ current_string_id += 1
+
+ elif block_type == EFI_HII_SIBT_DUPLICATE:
+ if current_string_id == string_id:
+ string_id = int.from_bytes(
+ block_hdr[sizeof(EFI_HII_STRING_BLOCK) : sizeof(EFI_HII_STRING_BLOCK) + sizeof(c_uint16)],
+ byteorder="little",
+ )
+ current_string_id = 1
+ block_size = 0
+ else:
+ block_size += sizeof(EFI_HII_SIBT_DUPLICATE_BLOCK)
+ current_string_id += 1
+
+ elif block_type == EFI_HII_SIBT_SKIP1:
+ skip_count = int.from_bytes(block_hdr[sizeof(EFI_HII_STRING_BLOCK)], byteorder="little")
+ current_string_id += skip_count
+ block_size += sizeof(EFI_HII_SIBT_SKIP1_BLOCK)
+
+ elif block_type == EFI_HII_SIBT_SKIP2:
+ skip_count = int.from_bytes(
+ block_hdr[sizeof(EFI_HII_STRING_BLOCK) : sizeof(EFI_HII_STRING_BLOCK) + sizeof(c_uint16)],
+ byteorder="little",
+ )
+ current_string_id += skip_count
+ block_size += sizeof(EFI_HII_SIBT_SKIP2_BLOCK)
+
+ elif block_type == EFI_HII_SIBT_EXT1:
+ length8 = int.from_bytes(
+ block_hdr[sizeof(EFI_HII_STRING_BLOCK) + sizeof(c_uint8) : sizeof(EFI_HII_STRING_BLOCK) + sizeof(c_uint8) + sizeof(c_uint8)],
+ byteorder="little",
+ )
+ block_size += length8
+
+ elif block_type == EFI_HII_SIBT_EXT2:
+ length32 = int.from_bytes(
+ block_hdr[sizeof(EFI_HII_STRING_BLOCK) + sizeof(c_uint8) : sizeof(EFI_HII_STRING_BLOCK) + sizeof(c_uint8) + sizeof(c_uint32)],
+ byteorder="little",
+ )
+ block_size += length32
+
+ if string_id > 0 and string_id != (c_uint16)(-1):
+ block_type = block_hdr[0]
+
+ if string_id == current_string_id - 1:
+ if block_type in (EFI_HII_SIBT_SKIP2, EFI_HII_SIBT_SKIP1):
+ return EFI_NOT_FOUND
+ return EFI_SUCCESS
+
+ if string_id < current_string_id - 1:
+ return EFI_NOT_FOUND
+
+ block_hdr = string_data + block_size
+
+ return EFI_NOT_FOUND
+
+ def GetVarStoreNameFormStringId(self, StringId):
+ pInFile = None
+ NameOffset = 0
+ Length = 0
+ StringPtr = None
+ StringName = None
+ UnicodeString = None
+ VarStoreName = None
+ DestTmp = None
+ Current = None
+ Status = None
+ BlockType = 0
+ PkgHeader = None
+
+ if self.StringFileName is None:
+ return None
+
+ try:
+ with open(LongFilePath(self.StringFileName), "rb") as pInFile:
+ # Get file length
+ pInFile.seek(0, os.SEEK_END)
+ Length = pInFile.tell()
+ pInFile.seek(0, os.SEEK_SET)
+
+ # Get file data
+ StringPtr = bytearray(pInFile.read())
+ except Exception:
+ return None
+
+ PkgHeader = EFI_HII_STRING_PACKAGE_HDR.from_buffer(StringPtr)
+
+ # Check the String package
+ if PkgHeader.Header.Type != EFI_HII_PACKAGE_STRINGS:
+ return None
+
+ # Search the language, get best language based on RFC 4647 matching algorithm
+ Current = StringPtr
+ while not self.GetBestLanguage("en", PkgHeader.Language):
+ Current += PkgHeader.Header.Length
+ PkgHeader = EFI_HII_STRING_PACKAGE_HDR.from_buffer(Current)
+
+ # If can't find string package based on language, just return the first string package
+ if Current - StringPtr >= Length:
+ Current = StringPtr
+ PkgHeader = EFI_HII_STRING_PACKAGE_HDR.from_buffer(StringPtr)
+ break
+
+ Current += PkgHeader.HdrSize
+
+ # Find the string block according to the stringId
+ Status, NameOffset, BlockType = self.FindStringBlock(Current, StringId)
+ if Status != RETURN_SUCCESS:
+ return None
+
+ # Get varstore name according to the string type
+ if BlockType in [
+ EFI_HII_SIBT_STRING_SCSU,
+ EFI_HII_SIBT_STRING_SCSU_FONT,
+ EFI_HII_SIBT_STRINGS_SCSU,
+ EFI_HII_SIBT_STRINGS_SCSU_FONT,
+ ]:
+ StringName = Current + NameOffset
+ VarStoreName = StringName.decode("utf-8")
+ elif BlockType in [
+ EFI_HII_SIBT_STRING_UCS2,
+ EFI_HII_SIBT_STRING_UCS2_FONT,
+ EFI_HII_SIBT_STRINGS_UCS2,
+ EFI_HII_SIBT_STRINGS_UCS2_FONT,
+ ]:
+ UnicodeString = Current + NameOffset
+ Length = self.GetUnicodeStringTextSize(UnicodeString)
+ DestTmp = bytearray(Length // 2 + 1)
+ VarStoreName = DestTmp
+ index = 0
+ while UnicodeString[index] != "\0":
+ DestTmp[index] = ord(UnicodeString[index])
+ index += 1
+ DestTmp[index] = "\0"
+ else:
+ return None
+
+ return VarStoreName
+
+
+gVfrStringDB = VfrStringDB()
+
+EFI_RULE_ID_START = 0x01
+EFI_RULE_ID_INVALID = 0x00
+
+
+class SVfrRuleNode:
+ def __init__(self, RuleName=None, RuleId=0):
+ self.RuleId = RuleId
+ self.RuleName = RuleName
+ self.Next = None
+
+
+class VfrRulesDB:
+ def __init__(self):
+ self.RuleList = None
+ self.FreeRuleId = EFI_VARSTORE_ID_START
+
+ def RegisterRule(self, RuleName):
+ if RuleName is None:
+ return
+
+ pNew = SVfrRuleNode(RuleName, self.FreeRuleId)
+ if pNew is None:
+ return
+ self.FreeRuleId += 1
+ pNew.Next = self.RuleList
+ self.RuleList = pNew
+
+ def GetRuleId(self, RuleName):
+ if RuleName is None:
+ return EFI_RULE_ID_INVALID
+
+ pNode = self.RuleList
+ while pNode is not None:
+ if pNode.RuleName == RuleName:
+ return pNode.RuleId
+ pNode = pNode.Next
+
+ return EFI_RULE_ID_INVALID
+
+
+EFI_QUESTION_ID_MAX = 0xFFFF
+EFI_FREE_QUESTION_ID_BITMAP_SIZE = int((EFI_QUESTION_ID_MAX + 1) / EFI_BITS_PER_UINT32)
+EFI_QUESTION_ID_INVALID = 0x0
+
+
+class EFI_QUESION_TYPE(Enum):
+ QUESTION_NORMAL = 0
+ QUESTION_DATE = 1
+ QUESTION_TIME = 2
+ QUESTION_REF = 3
+
+
+class SVfrQuestionNode:
+ def __init__(self, Name=None, VarIdStr=None, BitMask=0): #
+ self.Name = Name
+ self.VarIdStr = VarIdStr
+ self.QuestionId = EFI_QUESTION_ID_INVALID
+ self.BitMask = BitMask
+ self.Next = None
+ self.QType = EFI_QUESION_TYPE.QUESTION_NORMAL
+
+
+DATE_YEAR_BITMASK = 0x0000FFFF
+DATE_MONTH_BITMASK = 0x00FF0000
+DATE_DAY_BITMASK = 0xFF000000
+TIME_HOUR_BITMASK = 0x000000FF
+TIME_MINUTE_BITMASK = 0x0000FF00
+TIME_SECOND_BITMASK = 0x00FF0000
+
+
+class VfrQuestionDB:
+ def __init__(self):
+ self.FreeQIdBitMap = []
+ for i in range(0, EFI_FREE_QUESTION_ID_BITMAP_SIZE):
+ self.FreeQIdBitMap.append(0)
+
+ # Question ID 0 is reserved.
+ self.FreeQIdBitMap[0] = 0x80000000
+
+ self.QuestionList = None
+
+ def FindQuestionByName(self, Name):
+ if Name is None:
+ return VfrReturnCode.VFR_RETURN_FATAL_ERROR
+
+ pNode = self.QuestionList
+ while pNode is not None:
+ if pNode.Name == Name:
+ return VfrReturnCode.VFR_RETURN_SUCCESS
+ pNode = pNode.Next
+
+ return VfrReturnCode.VFR_RETURN_UNDEFINED
+
+ def FindQuestionById(self, QuestionId):
+ if QuestionId == EFI_QUESTION_ID_INVALID:
+ return VfrReturnCode.VFR_RETURN_INVALID_PARAMETER
+
+ pNode = self.QuestionList
+ while pNode is not None:
+ if pNode.QuestionId == QuestionId:
+ return VfrReturnCode.VFR_RETURN_SUCCESS
+ pNode = pNode.Next
+
+ return VfrReturnCode.VFR_RETURN_UNDEFINED
+
+ def GetFreeQuestionId(self):
+ Index = 0
+ for i in range(0, EFI_FREE_QUESTION_ID_BITMAP_SIZE):
+ if self.FreeQIdBitMap[i] != 0xFFFFFFFF:
+ Index = i
+ break
+ if Index == EFI_FREE_QUESTION_ID_BITMAP_SIZE:
+ return EFI_QUESTION_ID_INVALID
+
+ Offset = 0
+ Mask = 0x80000000
+ while Mask != 0:
+ if (self.FreeQIdBitMap[Index] & Mask) == 0:
+ self.FreeQIdBitMap[Index] |= Mask
+ return (Index << EFI_BITS_SHIFT_PER_UINT32) + Offset
+ Mask >>= 1
+ Offset += 1
+
+ return EFI_QUESTION_ID_INVALID
+
+ def CheckQuestionIdFree(self, QId):
+ Index = int(QId / EFI_BITS_PER_UINT32)
+ Offset = QId % EFI_BITS_PER_UINT32
+ return (self.FreeQIdBitMap[Index] & (0x80000000 >> Offset)) == 0
+
+ def MarkQuestionIdUsed(self, QId):
+ Index = int(QId / EFI_BITS_PER_UINT32)
+ Offset = QId % EFI_BITS_PER_UINT32
+ self.FreeQIdBitMap[Index] |= 0x80000000 >> Offset
+
+ def MarkQuestionIdUnused(self, QId):
+ Index = int(QId / EFI_BITS_PER_UINT32)
+ Offset = QId % EFI_BITS_PER_UINT32
+ self.FreeQIdBitMap[Index] &= ~(0x80000000 >> Offset)
+
+ def RegisterQuestion(self, Name, VarIdStr, QuestionId, gFormPkg):
+ if (Name is not None) and (self.FindQuestionByName(Name) == VfrReturnCode.VFR_RETURN_SUCCESS):
+ return QuestionId, VfrReturnCode.VFR_RETURN_REDEFINED
+
+ pNode = SVfrQuestionNode(Name, VarIdStr)
+ if pNode is None:
+ return QuestionId, VfrReturnCode.VFR_RETURN_OUT_FOR_RESOURCES
+
+ if QuestionId == EFI_QUESTION_ID_INVALID:
+ QuestionId = self.GetFreeQuestionId()
+ else:
+ if self.CheckQuestionIdFree(QuestionId) is False:
+ return QuestionId, VfrReturnCode.VFR_RETURN_QUESTIONID_REDEFINED
+ self.MarkQuestionIdUsed(QuestionId)
+
+ pNode.QuestionId = QuestionId
+ pNode.Next = self.QuestionList
+ self.QuestionList = pNode
+
+ gFormPkg.DoPendingAssign(VarIdStr, QuestionId)
+
+ return QuestionId, VfrReturnCode.VFR_RETURN_SUCCESS
+
+ def UpdateQuestionId(self, QId, NewQId, gFormPkg):
+ if QId == NewQId:
+ # don't update
+ return VfrReturnCode.VFR_RETURN_SUCCESS
+
+ if self.CheckQuestionIdFree(NewQId) is False:
+ return VfrReturnCode.VFR_RETURN_REDEFINED
+
+ pNode = self.QuestionList
+ TempList = []
+ while pNode is not None:
+ if pNode.QuestionId == QId:
+ TempList.append(pNode)
+ pNode = pNode.Next
+
+ if len(TempList) == 0:
+ return VfrReturnCode.VFR_RETURN_UNDEFINED
+
+ self.MarkQuestionIdUnused(QId)
+
+ for pNode in TempList:
+ pNode.QuestionId = NewQId
+ gFormPkg.DoPendingAssign(pNode.VarIdStr, NewQId)
+
+ self.MarkQuestionIdUsed(NewQId)
+
+ return VfrReturnCode.VFR_RETURN_SUCCESS
+
+ def GetQuestionId(self, Name, VarIdStr=None, QType=None):
+ QuestionId = EFI_QUESTION_ID_INVALID
+ BitMask = 0x00000000
+ if QType is not None:
+ QType = EFI_QUESION_TYPE.QUESTION_NORMAL
+
+ if Name is None and VarIdStr is None:
+ return QuestionId, BitMask, QType
+
+ pNode = self.QuestionList
+ while pNode is not None:
+ if Name is not None:
+ if pNode.Name != Name:
+ pNode = pNode.Next
+ continue
+
+ if VarIdStr is not None:
+ if pNode.VarIdStr != VarIdStr:
+ pNode = pNode.Next
+ continue
+
+ QuestionId = pNode.QuestionId
+ BitMask = pNode.BitMask
+ if QType is not None:
+ QType = pNode.QType
+ break
+
+ return QuestionId, BitMask, QType
+
+ def RegisterNewDateQuestion(self, Name, BaseVarId, QuestionId, gFormPkg):
+ if BaseVarId == "" and Name is None:
+ if QuestionId == EFI_QUESTION_ID_INVALID:
+ QuestionId = self.GetFreeQuestionId()
+ else:
+ if self.CheckQuestionIdFree(QuestionId) is False:
+ return QuestionId, VfrReturnCode.VFR_RETURN_REDEFINED
+ self.MarkQuestionIdUsed(QuestionId)
+ return QuestionId, VfrReturnCode.VFR_RETURN_SUCCESS
+
+ VarIdStrList = []
+ if BaseVarId != "":
+ VarIdStrList.append(BaseVarId + ".Year")
+ VarIdStrList.append(BaseVarId + ".Month")
+ VarIdStrList.append(BaseVarId + ".Day")
+
+ else:
+ VarIdStrList.append(Name + ".Year")
+ VarIdStrList.append(Name + ".Month")
+ VarIdStrList.append(Name + ".Day")
+
+ pNodeList = []
+ pNode = SVfrQuestionNode(Name, VarIdStrList[0], DATE_YEAR_BITMASK)
+ if pNode is not None:
+ pNodeList.append(pNode)
+ else:
+ return QuestionId, VfrReturnCode.VFR_RETURN_OUT_FOR_RESOURCES
+
+ pNode = SVfrQuestionNode(Name, VarIdStrList[1], DATE_MONTH_BITMASK)
+ if pNode is not None:
+ pNodeList.append(pNode)
+ else:
+ return QuestionId, VfrReturnCode.VFR_RETURN_OUT_FOR_RESOURCES
+
+ pNode = SVfrQuestionNode(Name, VarIdStrList[2], DATE_DAY_BITMASK)
+ if pNode is not None:
+ pNodeList.append(pNode)
+ else:
+ return QuestionId, VfrReturnCode.VFR_RETURN_OUT_FOR_RESOURCES
+
+ if QuestionId == EFI_QUESTION_ID_INVALID:
+ QuestionId = self.GetFreeQuestionId()
+ else:
+ if self.CheckQuestionIdFree(QuestionId) is False:
+ return QuestionId, VfrReturnCode.VFR_RETURN_REDEFINED
+ self.MarkQuestionIdUsed(QuestionId)
+
+ pNodeList[0].QuestionId = QuestionId
+ pNodeList[1].QuestionId = QuestionId
+ pNodeList[2].QuestionId = QuestionId
+ pNodeList[0].QType = EFI_QUESION_TYPE.QUESTION_DATE
+ pNodeList[1].QType = EFI_QUESION_TYPE.QUESTION_DATE
+ pNodeList[2].QType = EFI_QUESION_TYPE.QUESTION_DATE
+ pNodeList[0].Next = pNodeList[1]
+ pNodeList[1].Next = pNodeList[2]
+ pNodeList[2].Next = self.QuestionList
+ self.QuestionList = pNodeList[0]
+
+ gFormPkg.DoPendingAssign(VarIdStrList[0], QuestionId)
+ gFormPkg.DoPendingAssign(VarIdStrList[1], QuestionId)
+ gFormPkg.DoPendingAssign(VarIdStrList[2], QuestionId)
+
+ return QuestionId, VfrReturnCode.VFR_RETURN_SUCCESS
+
+ def RegisterNewTimeQuestion(self, Name, BaseVarId, QuestionId, gFormPkg):
+ if BaseVarId == "" and Name is None:
+ if QuestionId == EFI_QUESTION_ID_INVALID:
+ QuestionId = self.GetFreeQuestionId()
+ else:
+ if self.CheckQuestionIdFree(QuestionId) is False:
+ return QuestionId, VfrReturnCode.VFR_RETURN_REDEFINED
+ self.MarkQuestionIdUsed(QuestionId)
+ return QuestionId, VfrReturnCode.VFR_RETURN_SUCCESS
+
+ VarIdStrList = []
+ if BaseVarId != "":
+ VarIdStrList.append(BaseVarId + ".Hour")
+ VarIdStrList.append(BaseVarId + ".Minute")
+ VarIdStrList.append(BaseVarId + ".Second")
+
+ else:
+ VarIdStrList.append(Name + ".Hour")
+ VarIdStrList.append(Name + ".Minute")
+ VarIdStrList.append(Name + ".Second")
+
+ pNodeList = []
+ pNode = SVfrQuestionNode(Name, VarIdStrList[0], TIME_HOUR_BITMASK)
+ if pNode is not None:
+ pNodeList.append(pNode)
+ else:
+ return QuestionId, VfrReturnCode.VFR_RETURN_OUT_FOR_RESOURCES
+
+ pNode = SVfrQuestionNode(Name, VarIdStrList[1], TIME_MINUTE_BITMASK)
+ if pNode is not None:
+ pNodeList.append(pNode)
+ else:
+ return QuestionId, VfrReturnCode.VFR_RETURN_OUT_FOR_RESOURCES
+
+ pNode = SVfrQuestionNode(Name, VarIdStrList[2], TIME_SECOND_BITMASK)
+ if pNode is not None:
+ pNodeList.append(pNode)
+ else:
+ return QuestionId, VfrReturnCode.VFR_RETURN_OUT_FOR_RESOURCES
+
+ if QuestionId == EFI_QUESTION_ID_INVALID:
+ QuestionId = self.GetFreeQuestionId()
+ else:
+ if self.CheckQuestionIdFree(QuestionId) is False:
+ return QuestionId, VfrReturnCode.VFR_RETURN_REDEFINED
+ self.MarkQuestionIdUsed(QuestionId)
+
+ pNodeList[0].QuestionId = QuestionId
+ pNodeList[1].QuestionId = QuestionId
+ pNodeList[2].QuestionId = QuestionId
+ pNodeList[0].QType = EFI_QUESION_TYPE.QUESTION_TIME
+ pNodeList[1].QType = EFI_QUESION_TYPE.QUESTION_TIME
+ pNodeList[2].QType = EFI_QUESION_TYPE.QUESTION_TIME
+ pNodeList[0].Next = pNodeList[1]
+ pNodeList[1].Next = pNodeList[2]
+ pNodeList[2].Next = self.QuestionList
+ self.QuestionList = pNodeList[0]
+
+ gFormPkg.DoPendingAssign(VarIdStrList[0], QuestionId)
+ gFormPkg.DoPendingAssign(VarIdStrList[1], QuestionId)
+ gFormPkg.DoPendingAssign(VarIdStrList[2], QuestionId)
+
+ return QuestionId, VfrReturnCode.VFR_RETURN_SUCCESS
+
+ def RegisterRefQuestion(self, Name, BaseVarId, QuestionId, gFormPkg):
+ if BaseVarId == "" and Name is None:
+ return QuestionId, VfrReturnCode.VFR_RETURN_FATAL_ERROR
+
+ VarIdStrList = []
+ if BaseVarId != "":
+ VarIdStrList.append(BaseVarId + ".QuestionId")
+ VarIdStrList.append(BaseVarId + ".FormId")
+ VarIdStrList.append(BaseVarId + ".FormSetGuid")
+ VarIdStrList.append(BaseVarId + ".DevicePath")
+
+ else:
+ VarIdStrList.append(BaseVarId + ".QuestionId")
+ VarIdStrList.append(BaseVarId + ".FormId")
+ VarIdStrList.append(BaseVarId + ".FormSetGuid")
+ VarIdStrList.append(BaseVarId + ".DevicePath")
+
+ pNodeList = []
+ pNode = SVfrQuestionNode(Name, VarIdStrList[0])
+ if pNode is not None:
+ pNodeList.append(pNode)
+ else:
+ return QuestionId, VfrReturnCode.VFR_RETURN_OUT_FOR_RESOURCES
+
+ pNode = SVfrQuestionNode(Name, VarIdStrList[1])
+ if pNode is not None:
+ pNodeList.append(pNode)
+ else:
+ return QuestionId, VfrReturnCode.VFR_RETURN_OUT_FOR_RESOURCES
+
+ pNode = SVfrQuestionNode(Name, VarIdStrList[2])
+ if pNode is not None:
+ pNodeList.append(pNode)
+ else:
+ return QuestionId, VfrReturnCode.VFR_RETURN_OUT_FOR_RESOURCES
+
+ pNode = SVfrQuestionNode(Name, VarIdStrList[3])
+ if pNode is not None:
+ pNodeList.append(pNode)
+ else:
+ return QuestionId, VfrReturnCode.VFR_RETURN_OUT_FOR_RESOURCES
+
+ if QuestionId == EFI_QUESTION_ID_INVALID:
+ QuestionId = self.GetFreeQuestionId()
+ else:
+ if self.CheckQuestionIdFree(QuestionId) is False:
+ return QuestionId, VfrReturnCode.VFR_RETURN_REDEFINED
+ self.MarkQuestionIdUsed(QuestionId)
+
+ pNodeList[0].QuestionId = QuestionId
+ pNodeList[1].QuestionId = QuestionId
+ pNodeList[2].QuestionId = QuestionId
+ pNodeList[3].QuestionId = QuestionId
+
+ pNodeList[0].QType = EFI_QUESION_TYPE.QUESTION_REF
+ pNodeList[1].QType = EFI_QUESION_TYPE.QUESTION_REF
+ pNodeList[2].QType = EFI_QUESION_TYPE.QUESTION_REF
+ pNodeList[3].QType = EFI_QUESION_TYPE.QUESTION_REF
+
+ pNodeList[0].Next = pNodeList[1]
+ pNodeList[1].Next = pNodeList[2]
+ pNodeList[2].Next = pNodeList[3]
+ pNodeList[3].Next = self.QuestionList
+ self.QuestionList = pNodeList[0]
+
+ gFormPkg.DoPendingAssign(VarIdStrList[0], QuestionId)
+ gFormPkg.DoPendingAssign(VarIdStrList[1], QuestionId)
+ gFormPkg.DoPendingAssign(VarIdStrList[2], QuestionId)
+ gFormPkg.DoPendingAssign(VarIdStrList[3], QuestionId)
+
+ return QuestionId, VfrReturnCode.VFR_RETURN_SUCCESS
+
+ def RegisterOldDateQuestion(self, YearVarId, MonthVarId, DayVarId, QuestionId, gFormPkg):
+ pNodeList = []
+ if YearVarId == "" or MonthVarId == "" or DayVarId == "" or \
+ YearVarId is None or MonthVarId is None or DayVarId is None:
+ return QuestionId, VfrReturnCode.VFR_RETURN_ERROR_SKIPED
+
+ pNode = SVfrQuestionNode(None, YearVarId, DATE_YEAR_BITMASK)
+ if pNode is not None:
+ pNodeList.append(pNode)
+ else:
+ return EFI_QUESTION_ID_INVALID, VfrReturnCode.VFR_RETURN_OUT_FOR_RESOURCES
+
+ pNode = SVfrQuestionNode(None, MonthVarId, DATE_MONTH_BITMASK)
+ if pNode is not None:
+ pNodeList.append(pNode)
+ else:
+ return EFI_QUESTION_ID_INVALID, VfrReturnCode.VFR_RETURN_OUT_FOR_RESOURCES
+
+ pNode = SVfrQuestionNode(None, DayVarId, DATE_DAY_BITMASK)
+ if pNode is not None:
+ pNodeList.append(pNode)
+ else:
+ return EFI_QUESTION_ID_INVALID, VfrReturnCode.VFR_RETURN_OUT_FOR_RESOURCES
+
+ if QuestionId == EFI_QUESTION_ID_INVALID:
+ QuestionId = self.GetFreeQuestionId()
+ else:
+ if self.CheckQuestionIdFree(QuestionId) is False:
+ return EFI_QUESTION_ID_INVALID, VfrReturnCode.VFR_RETURN_REDEFINED
+ self.MarkQuestionIdUsed(QuestionId)
+
+ pNodeList[0].QuestionId = QuestionId
+ pNodeList[1].QuestionId = QuestionId
+ pNodeList[2].QuestionId = QuestionId
+ pNodeList[0].QType = EFI_QUESION_TYPE.QUESTION_DATE
+ pNodeList[1].QType = EFI_QUESION_TYPE.QUESTION_DATE
+ pNodeList[2].QType = EFI_QUESION_TYPE.QUESTION_DATE
+ pNodeList[0].Next = pNodeList[1]
+ pNodeList[1].Next = pNodeList[2]
+ pNodeList[2].Next = self.QuestionList
+ self.QuestionList = pNodeList[0]
+
+ gFormPkg.DoPendingAssign(YearVarId, QuestionId)
+ gFormPkg.DoPendingAssign(MonthVarId, QuestionId)
+ gFormPkg.DoPendingAssign(DayVarId, QuestionId)
+
+ return QuestionId, VfrReturnCode.VFR_RETURN_SUCCESS
+
+ def RegisterOldTimeQuestion(self, HourVarId, MinuteVarId, SecondVarId, QuestionId, gFormPkg):
+ pNodeList = []
+ if HourVarId == "" or MinuteVarId == "" or SecondVarId == "" \
+ or HourVarId is None or MinuteVarId is None or SecondVarId is None:
+ return QuestionId, VfrReturnCode.VFR_RETURN_ERROR_SKIPED
+
+ pNode = SVfrQuestionNode(None, HourVarId, TIME_HOUR_BITMASK)
+ if pNode is not None:
+ pNodeList.append(pNode)
+ else:
+ return EFI_QUESTION_ID_INVALID, VfrReturnCode.VFR_RETURN_OUT_FOR_RESOURCES
+
+ pNode = SVfrQuestionNode(None, MinuteVarId, TIME_MINUTE_BITMASK)
+ if pNode is not None:
+ pNodeList.append(pNode)
+ else:
+ return EFI_QUESTION_ID_INVALID, VfrReturnCode.VFR_RETURN_OUT_FOR_RESOURCES
+
+ pNode = SVfrQuestionNode(None, SecondVarId, TIME_SECOND_BITMASK)
+ if pNode is not None:
+ pNodeList.append(pNode)
+ else:
+ return EFI_QUESTION_ID_INVALID, VfrReturnCode.VFR_RETURN_OUT_FOR_RESOURCES
+
+ if QuestionId == EFI_QUESTION_ID_INVALID:
+ QuestionId = self.GetFreeQuestionId()
+ else:
+ if self.CheckQuestionIdFree(QuestionId) is False:
+ return EFI_QUESTION_ID_INVALID, VfrReturnCode.VFR_RETURN_REDEFINED
+ self.MarkQuestionIdUsed(QuestionId)
+
+ pNodeList[0].QuestionId = QuestionId
+ pNodeList[1].QuestionId = QuestionId
+ pNodeList[2].QuestionId = QuestionId
+ pNodeList[0].QType = EFI_QUESION_TYPE.QUESTION_TIME
+ pNodeList[1].QType = EFI_QUESION_TYPE.QUESTION_TIME
+ pNodeList[2].QType = EFI_QUESION_TYPE.QUESTION_TIME
+ pNodeList[0].Next = pNodeList[1]
+ pNodeList[1].Next = pNodeList[2]
+ pNodeList[2].Next = self.QuestionList
+ self.QuestionList = pNodeList[0]
+
+ gFormPkg.DoPendingAssign(HourVarId, QuestionId)
+ gFormPkg.DoPendingAssign(MinuteVarId, QuestionId)
+ gFormPkg.DoPendingAssign(SecondVarId, QuestionId)
+
+ return QuestionId, VfrReturnCode.VFR_RETURN_SUCCESS
+
+ def PrintAllQuestion(self, FileName):
+ with open(FileName, "w") as f:
+ pNode = self.QuestionList
+ while pNode is not None:
+ f.write("Question VarId is {} and QuestionId is ".format(pNode.VarIdStr))
+ f.write("%d\n" % (pNode.QuestionId))
+ pNode = pNode.Next
+
+ f.close()
diff --git a/BaseTools/Source/Python/VfrCompiler/README.md b/BaseTools/Source/Python/VfrCompiler/README.md
index e91d41c88d..7bdc85023a 100644
--- a/BaseTools/Source/Python/VfrCompiler/README.md
+++ b/BaseTools/Source/Python/VfrCompiler/README.md
@@ -1,20 +1,68 @@
# Python VfrCompiler Tool
## Overview
-This python VfrCompiler tool is the implementation of the edk2 VfrCompiler tool which locates at https://github.com/tianocore/edk2/tree/master/BaseTools/Source/C/VfrCompile.
+This python VfrCompiler tool is the python implementation of the edk2 VfrCompiler tool which C implementation locates at https://github.com/tianocore/edk2/tree/master/BaseTools/Source/C/VfrCompile.
+
+This python implementation not only covers the same usage as the C version VfrCompiler, but also extends several new features.
### Introduction
-The core function of the original C VfrCompiler tool is to convert the vfr file into IFR binary array. However, the vfr format file syntax is relatively uncommon and has poor readability for users. What's more, the C tool does not collect and store extra information except for binary generation. When any modification is needed, developers have to read and deal with the IFR binary, which is quite inefficient. To solve this issue, this python VfrCompiler tool proposes to generate the yaml format file on the basis of the vfr format file. With the yaml file, the layout and hierarchy of all Opcodes in the vfr file will be saved. Then modification will be much eaiser. In addition, an extra json file will be generated for better variable related information presentation. So the long-term aim of this tool is to cover the same usage as the edk2 C VfrCompiler and extend the yaml/json output for better readability and variability.
+The core function of the original C VfrCompiler tool is to convert VFR files into IFR binaries. However, the VFR format syntax is uncommon and has poor readability for users. Additionally, the C tool doesn't gather or store default variable information, except for binary generation. When modifications are required, developers have to deal with the abstract IFR binary, resulting in inefficiency. To address these challenges, this python tool generates YAML format files from VFR files. This approach allows for preservation of the VFR file's opcode layout and hierarchy, simplifying readability. Moreover, the tool generates an additional JSON file to provide a more accessible presentation of variable-related information. In a few words, the new tool offers the same usage as the original C VfrCompiler while expanding functionality with the YAML/JSON output, enhancing readability and adaptability.
### Main update in this commitment
-- Update the vfr parser generator from ANTLR to ANTLR v4, which is more readable and is eaiser to add on new functions.
-- Generate a yaml file for each vfr file. The yaml file displays all the contents in the Vfr file by different Opcode types in sequence.
-- Generate a json file for each vfr file. The json file contains all the default values for different Opcode types in vfr files.
+- Update the vfr parser generator from ANTLR to ANTLR v4, which is more readable and is eaiser to add on new grammars and functions.
+- Cover the same usage as the edk2 C VfrCompiler. The tool is able to compiles VFR into .c/lst/hpk output files.
+- Extract variable information from each VFR file to JSON. The output JSON file stores the data structures and default values of variables.
+- Convert each VFR source format to an equivalent YAML. The generated YAML file covers the same format contents in the Vfr file.
### Known issues
-
-- The python VfrCompiler tool aims to cover the same usage as the edk2 C VfrCompiler. But currently, the python VfrCompiler tool does not support IFR binary generation feature, this feature will be added in future update.
-- The python VfrCompiler tool will extend new functions, which is able to compile both the vfr and yaml files. This feature will be added in future update.
+- Issue 1 - Test Coverage and Method
+ - The current python vfrcompiler tool does not have a full code coverage test.
+ - Should add unit tests for higher code coverage.
+ - The test should be enabled into Azure pipelines for retriggering.
+ - The current test script uses some output binaries for test input, will remove these binaries, and save the necessary part content of it directly into the test script itself.
+- Issue 2 - Code style
+ - The current python vfrcompiler tool has some coding style still like C style which not follows the python standardize rule.
+ - Should enhance GUID usage with 'uuid' pip module;
+ - Should figure out common way for Status Code processing;
+ - The current python vfrcompiler tool need docstring description for code explanation.
+- Issue 3 - New generated YAML format
+ - The current YAML format is a reference version, and we warmly welcome everyone to provide feedback.
+- Future extension
+ - The tool will extend new functions, which is able to compile yaml files. This feature will be added in future update.
### Use with Build System
-- To use the VfrCompiler Python Tool with Build System, please add the ***'--vfr-yaml-enable'*** option in the build command.
-- For Example: ***build -p OvmfPkg\OvmfPkgIa32X64.dsc -a IA32 -a X64 -j build.log --vfr-yaml-enable***
\ No newline at end of file
+To use the VfrCompiler Python Tool with Build System, please do the following steps in the build command.
+1. Locate the **VfrCompiler** folder to path **'\edk2\BaseTools\Source\Python'.**
+1. Open **'build_rule.template'** file in path **'\edk2\BaseTools\Conf\'.**
+ - Find the C VFR command line `$(VFR)" $(VFR_FLAGS) --string-db $(OUTPUT_DIR)(+)$(MODULE_NAME)StrDefs.hpk --output-directory ${d_path} $(OUTPUT_DIR)(+)${s_base}.i` in **build_rule.template** file. There are two C VFR commands in it.
+ - Add new command line `"$(PYVFR)" ${src} --string-db $(OUTPUT_DIR)(+)$(MODULE_NAME)StrDefs.hpk -w $(WORKSPACE) -m $(MODULE_NAME) -o $(OUTPUT_DIR) --vfr` after each VFR command lines.
+2. Open **'tools_def.template'** file in path **'\edk2\BaseTools\Conf\'.**
+ - Find the C VFR_PATH command line `*_*_*_VFR_PATH = VfrCompile` in **tools_def.template** file.
+ - Add new command line `*_*_*_PYVFR_PATH = PyVfrCompile` after the VFR_PATH command line.
+3. For windows build, create a **PyVfrCompile.bat** file in path **'C:\edk2\BaseTools\BinWrappers\WindowsLike'.**
+ - Add the following lines in the created **PyVfrCompile.bat** file.
+ ```
+ @setlocal
+ @set ToolName=IfrCompiler
+ @set PYTHONPATH=%PYTHONPATH%;%BASE_TOOLS_PATH%\Source\Python;%BASE_TOOLS_PATH%\Source\Python\VfrCompiler
+ @%PYTHON_COMMAND% -m %ToolName% %*
+ ```
+4. For Unix build, create a **PyVfrCompile** file in path **'C:\edk2\BaseTools\BinWrappers\PosixLike'.**
+ - Add the following lines in the created **PyVfrCompile** file.
+ ```
+ #!/usr/bin/env bash
+ #python `dirname $0`/RunToolFromSource.py `basename $0` $*
+
+ # If a ${PYTHON_COMMAND} command is available, use it in preference to python
+ if command -v ${PYTHON_COMMAND} >/dev/null 2>&1; then
+ python_exe=${PYTHON_COMMAND}
+ fi
+ full_cmd=${BASH_SOURCE:-$0} # see http://mywiki.wooledge.org/BashFAQ/028 for a discussion of why $0 is not a good choice here
+ dir=$(dirname "$full_cmd")
+ cmd=${full_cmd##*/}
+
+ export PYTHONPATH="$dir/../../Source/Python:$dir/../../Source/Python/VfrCompiler:$dir/../../Source/Python${PYTHONPATH:+:"$PYTHONPATH"}"
+ exec "${python_exe:-python}" -m IfrCompiler "$@"
+ ```
+5. Add Env: run `pip install antlr4-python3-runtime==4.7.1` based on the original build environment.
+6. Run Build Command: `build -p OvmfPkg\OvmfPkgIa32X64.dsc -a IA32 -a X64 -j build.log`
+`
diff --git a/BaseTools/Source/Python/VfrCompiler/VfrError.py b/BaseTools/Source/Python/VfrCompiler/VfrError.py
deleted file mode 100644
index 31c479a7d1..0000000000
--- a/BaseTools/Source/Python/VfrCompiler/VfrError.py
+++ /dev/null
@@ -1,162 +0,0 @@
-import imp
-import sys
-import os
-from enum import Enum
-from Common.BuildToolError import *
-import Common.EdkLogger as EdkLogger
-
-
-class VfrReturnCode(Enum):
- VFR_RETURN_SUCCESS = 0
- VFR_RETURN_ERROR_SKIPED = 1
- VFR_RETURN_FATAL_ERROR = 2
- VFR_RETURN_MISMATCHED = 3
- VFR_RETURN_INVALID_PARAMETER = 4
- VFR_RETURN_OUT_FOR_RESOURCES = 5
- VFR_RETURN_UNSUPPORTED = 6
- VFR_RETURN_REDEFINED = 7
- VFR_RETURN_FORMID_REDEFINED = 8
- VFR_RETURN_QUESTIONID_REDEFINED = 9
- VFR_RETURN_VARSTOREID_REDEFINED = 10
- VFR_RETURN_UNDEFINED = 11
- VFR_RETURN_VAR_NOTDEFINED_BY_QUESTION = 12
- VFR_RETURN_VARSTORE_DATATYPE_REDEFINED_ERROR = 13
- VFR_RETURN_GET_EFIVARSTORE_ERROR = 14
- VFR_RETURN_EFIVARSTORE_USE_ERROR = 15
- VFR_RETURN_EFIVARSTORE_SIZE_ERROR = 16
- VFR_RETURN_GET_NVVARSTORE_ERROR = 17
- VFR_RETURN_QVAR_REUSE = 18
- VFR_RETURN_FLAGS_UNSUPPORTED = 19
- VFR_RETURN_ERROR_ARRARY_NUM = 20
- VFR_RETURN_DATA_STRING_ERROR = 21
- VFR_RETURN_DEFAULT_VALUE_REDEFINED = 22
- VFR_RETURN_CONSTANT_ONLY = 23
- VFR_RETURN_VARSTORE_NAME_REDEFINED_ERROR = 24
- VFR_RETURN_BIT_WIDTH_ERROR = 25
- VFR_RETURN_STRING_TO_UINT_OVERFLOW = 26
- VFR_RETURN_CODEUNDEFINED = 27
-
-
-vfrErrorMessage = {
- VfrReturnCode.VFR_RETURN_SUCCESS: '',
- VfrReturnCode.VFR_RETURN_ERROR_SKIPED: '',
- VfrReturnCode.VFR_RETURN_FATAL_ERROR: 'fatal error!!',
- VfrReturnCode.VFR_RETURN_MISMATCHED: 'unexpected token',
- VfrReturnCode.VFR_RETURN_INVALID_PARAMETER: 'invalid parameter',
- VfrReturnCode.VFR_RETURN_OUT_FOR_RESOURCES: 'system out of memory',
- VfrReturnCode.VFR_RETURN_UNSUPPORTED: 'unsupported',
- VfrReturnCode.VFR_RETURN_REDEFINED: 'already defined',
- VfrReturnCode.VFR_RETURN_FORMID_REDEFINED: 'form id already defined',
- VfrReturnCode.VFR_RETURN_QUESTIONID_REDEFINED:
- 'question id already defined',
- VfrReturnCode.VFR_RETURN_VARSTOREID_REDEFINED:
- 'varstore id already defined',
- VfrReturnCode.VFR_RETURN_UNDEFINED: 'undefined',
- VfrReturnCode.VFR_RETURN_VAR_NOTDEFINED_BY_QUESTION:
- 'some variable has not defined by a question',
- VfrReturnCode.VFR_RETURN_VARSTORE_DATATYPE_REDEFINED_ERROR:
- 'Data Structure is defined by more than one varstores: it can\'t be referred as varstore: only varstore name could be used.',
- VfrReturnCode.VFR_RETURN_GET_EFIVARSTORE_ERROR: 'get efi varstore error',
- VfrReturnCode.VFR_RETURN_EFIVARSTORE_USE_ERROR:
- 'can not use the efi varstore like this',
- VfrReturnCode.VFR_RETURN_EFIVARSTORE_SIZE_ERROR:
- 'unsupport efi varstore size should be <= 8 bytes',
- VfrReturnCode.VFR_RETURN_GET_NVVARSTORE_ERROR:
- 'get name value varstore error',
- VfrReturnCode.VFR_RETURN_QVAR_REUSE:
- 'variable reused by more than one question',
- VfrReturnCode.VFR_RETURN_FLAGS_UNSUPPORTED: 'flags unsupported',
- VfrReturnCode.VFR_RETURN_ERROR_ARRARY_NUM:
- 'array number error: the valid value is in (0 ~ MAX_INDEX-1 for UEFI vfr and in (1 ~ MAX_INDEX for Framework Vfr',
- VfrReturnCode.VFR_RETURN_DATA_STRING_ERROR:
- 'data field string error or not support',
- VfrReturnCode.VFR_RETURN_DEFAULT_VALUE_REDEFINED:
- 'default value re-defined with different value',
- VfrReturnCode.VFR_RETURN_CONSTANT_ONLY:
- 'only constant is allowed in the expression',
- VfrReturnCode.VFR_RETURN_VARSTORE_NAME_REDEFINED_ERROR:
- 'Varstore name is defined by more than one varstores: it can\'t be referred as varstore: only varstore structure name could be used.',
- VfrReturnCode.VFR_RETURN_BIT_WIDTH_ERROR:
- 'bit width must be <= sizeof (type * 8 and the max width can not > 32',
- VfrReturnCode.VFR_RETURN_STRING_TO_UINT_OVERFLOW:
- 'String to UINT* Overflow',
- VfrReturnCode.VFR_RETURN_CODEUNDEFINED: 'undefined Error Code'
-}
-
-
-class EFI_VFR_WARNING_CODE(Enum):
- VFR_WARNING_DEFAULT_VALUE_REDEFINED = 0
- VFR_WARNING_ACTION_WITH_TEXT_TWO = 1
- VFR_WARNING_OBSOLETED_FRAMEWORK_OPCODE = 2
- VFR_WARNING_CODEUNDEFINED = 3
-
-
-vfrWarningMessage = {
- EFI_VFR_WARNING_CODE.VFR_WARNING_DEFAULT_VALUE_REDEFINED:
- ": default value re-defined with different value",
- EFI_VFR_WARNING_CODE.VFR_WARNING_ACTION_WITH_TEXT_TWO:
- ": Action opcode should not have TextTwo part",
- EFI_VFR_WARNING_CODE.VFR_WARNING_OBSOLETED_FRAMEWORK_OPCODE:
- ": Not recommend to use obsoleted framework opcode",
- EFI_VFR_WARNING_CODE.VFR_WARNING_CODEUNDEFINED: ": undefined Warning Code"
-}
-
-
-class CVfrErrorHandle():
-
- def __init__(self):
- self.__InputFileName = None
- self.__vfrErrorMessage = vfrErrorMessage
- self.__vfrWarningMessage = vfrWarningMessage
- self.__WarningAsError = False
-
- def SetWarningAsError(self, WarningAsError):
- self.__WarningAsError = WarningAsError
-
- def SetInputFile(self, InputFile):
- self.__InputFileName = InputFile
-
- def HandleWarning(self, WarningCode, LineNum, TokenValue=None):
- if self.__vfrWarningMessage == None:
- return 1
- WarningMsg = ''
- for key in self.__vfrWarningMessage.keys():
- if WarningCode == self.__vfrWarningMessage[key]:
- WarningMsg = self.__vfrWarningMessage[key]
- break
- if WarningMsg != '':
- if self.__WarningAsError:
- EdkLogger.error('VfrCompiler', WarningCode, WarningMsg,
- self.__InputFileName, LineNum,
- "warning treated as error")
- EdkLogger.warn('VfrCompiler', WarningMsg, self.__InputFileName,
- LineNum, TokenValue)
-
- def PrintMsg(self,
- LineNum,
- MsgType='Error',
- ErrorMsg=None,
- TokenValue=None):
- if MsgType == 'Warning':
- EdkLogger.verbose(ErrorMsg)
- else:
- EdkLogger.error('VfrCompiler', 0x3000, ErrorMsg,
- self.__InputFileName, LineNum, TokenValue)
-
- def HandleError(self, ErrorCode, LineNum=None, TokenValue=None):
- if self.__vfrErrorMessage == None:
- return 1
- ErrorMsg = ''
- for key in self.__vfrErrorMessage.keys():
- if ErrorCode == self.__vfrErrorMessage[key]:
- ErrorMsg = self.__vfrErrorMessage[key]
- break
- if ErrorMsg != '':
- EdkLogger.error('VfrCompiler', ErrorCode, ErrorMsg,
- self.__InputFileName, LineNum, TokenValue)
- return 1
- else:
- return 0
-
-
-gCVfrErrorHandle = CVfrErrorHandle()
\ No newline at end of file
diff --git a/BaseTools/Source/Python/VfrCompiler/VfrFormPkg.py b/BaseTools/Source/Python/VfrCompiler/VfrFormPkg.py
deleted file mode 100644
index 944b1fe193..0000000000
--- a/BaseTools/Source/Python/VfrCompiler/VfrFormPkg.py
+++ /dev/null
@@ -1,2738 +0,0 @@
-from ast import For
-from re import L
-from sre_parse import FLAGS
-from stat import FILE_ATTRIBUTE_SPARSE_FILE
-from VfrCompiler.CommonCtypes import *
-from VfrCompiler.VfrError import VfrReturnCode
-from VfrCompiler.VfrUtility import *
-
-from ctypes import *
-
-
-class OpcodeSizesScopeNode():
-
- def __init__(self, Size, Scope):
- self.Size = Size
- self.Scope = Scope
-
-
-gOpcodeSizesScopeTable = [
- OpcodeSizesScopeNode(0, 0), # EFI_IFR_INVALID - 0x00
- OpcodeSizesScopeNode(ctypes.sizeof(EFI_IFR_FORM), 1), # EFI_IFR_FORM_OP
- OpcodeSizesScopeNode(ctypes.sizeof(EFI_IFR_SUBTITLE),
- 1), # EFI_IFR_SUBTITLE_OP
- OpcodeSizesScopeNode(ctypes.sizeof(EFI_IFR_TEXT), 0), # EFI_IFR_TEXT_OP
- OpcodeSizesScopeNode(ctypes.sizeof(EFI_IFR_IMAGE), 0), # EFI_IFR_IMAGE_OP
- OpcodeSizesScopeNode(ctypes.sizeof(EFI_IFR_ONE_OF),
- 1), # EFI_IFR_ONE_OF_OP - 0x05
- OpcodeSizesScopeNode(ctypes.sizeof(EFI_IFR_CHECKBOX),
- 1), # EFI_IFR_CHECKBOX_OP
- OpcodeSizesScopeNode(ctypes.sizeof(EFI_IFR_NUMERIC),
- 1), # EFI_IFR_NUMERIC_OP
- OpcodeSizesScopeNode(ctypes.sizeof(EFI_IFR_PASSWORD),
- 1), # EFI_IFR_PASSWORD_OP
- OpcodeSizesScopeNode(ctypes.sizeof(EFI_IFR_ONE_OF_OPTION),
- 0), # EFI_IFR_ONE_OF_OPTION_OP
- OpcodeSizesScopeNode(ctypes.sizeof(EFI_IFR_SUPPRESS_IF),
- 1), # EFI_IFR_SUPPRESS_IF - 0x0A
- OpcodeSizesScopeNode(ctypes.sizeof(EFI_IFR_LOCKED),
- 0), # EFI_IFR_LOCKED_OP
- OpcodeSizesScopeNode(ctypes.sizeof(EFI_IFR_ACTION),
- 1), # EFI_IFR_ACTION_OP
- OpcodeSizesScopeNode(ctypes.sizeof(EFI_IFR_RESET_BUTTON),
- 1), # EFI_IFR_RESET_BUTTON_OP
- OpcodeSizesScopeNode(ctypes.sizeof(EFI_IFR_FORM_SET),
- 1), # EFI_IFR_FORM_SET_OP -0xE
- OpcodeSizesScopeNode(ctypes.sizeof(EFI_IFR_REF), 0), # EFI_IFR_REF_OP
- OpcodeSizesScopeNode(ctypes.sizeof(EFI_IFR_NO_SUBMIT_IF),
- 1), # EFI_IFR_NO_SUBMIT_IF_OP -0x10
- OpcodeSizesScopeNode(ctypes.sizeof(EFI_IFR_INCONSISTENT_IF),
- 1), # EFI_IFR_INCONSISTENT_IF_OP
- OpcodeSizesScopeNode(ctypes.sizeof(EFI_IFR_EQ_ID_VAL),
- 0), # EFI_IFR_EQ_ID_VAL_OP
- OpcodeSizesScopeNode(ctypes.sizeof(EFI_IFR_EQ_ID_ID),
- 0), # EFI_IFR_EQ_ID_ID_OP
- OpcodeSizesScopeNode(ctypes.sizeof(EFI_IFR_EQ_ID_VAL_LIST),
- 0), # EFI_IFR_EQ_ID_LIST_OP - 0x14
- OpcodeSizesScopeNode(ctypes.sizeof(EFI_IFR_AND), 0), # EFI_IFR_AND_OP
- OpcodeSizesScopeNode(ctypes.sizeof(EFI_IFR_OR), 0), # EFI_IFR_OR_OP
- OpcodeSizesScopeNode(ctypes.sizeof(EFI_IFR_NOT), 0), # EFI_IFR_NOT_OP
- OpcodeSizesScopeNode(ctypes.sizeof(EFI_IFR_RULE), 1), # EFI_IFR_RULE_OP
- OpcodeSizesScopeNode(ctypes.sizeof(EFI_IFR_GRAY_OUT_IF),
- 1), # EFI_IFR_GRAYOUT_IF_OP - 0x19
- OpcodeSizesScopeNode(ctypes.sizeof(EFI_IFR_DATE), 1), # EFI_IFR_DATE_OP
- OpcodeSizesScopeNode(ctypes.sizeof(EFI_IFR_TIME), 1), # EFI_IFR_TIME_OP
- OpcodeSizesScopeNode(ctypes.sizeof(EFI_IFR_STRING),
- 1), # EFI_IFR_STRING_OP
- OpcodeSizesScopeNode(ctypes.sizeof(EFI_IFR_REFRESH),
- 0), # EFI_IFR_REFRESH_OP
- OpcodeSizesScopeNode(ctypes.sizeof(EFI_IFR_DISABLE_IF),
- 1), # EFI_IFR_DISABLE_IF_OP - 0x1E
- OpcodeSizesScopeNode(0, 0), # 0x1F
- OpcodeSizesScopeNode(ctypes.sizeof(EFI_IFR_TO_LOWER),
- 0), # EFI_IFR_TO_LOWER_OP - 0x20
- OpcodeSizesScopeNode(ctypes.sizeof(EFI_IFR_TO_UPPER),
- 0), # EFI_IFR_TO_UPPER_OP - 0x21
- OpcodeSizesScopeNode(ctypes.sizeof(EFI_IFR_MAP), 1), # EFI_IFR_MAP - 0x22
- OpcodeSizesScopeNode(ctypes.sizeof(EFI_IFR_ORDERED_LIST),
- 1), # EFI_IFR_ORDERED_LIST_OP - 0x23
- OpcodeSizesScopeNode(ctypes.sizeof(EFI_IFR_VARSTORE),
- 0), # EFI_IFR_VARSTORE_OP
- OpcodeSizesScopeNode(ctypes.sizeof(EFI_IFR_VARSTORE_NAME_VALUE),
- 0), # EFI_IFR_VARSTORE_NAME_VALUE_OP
- OpcodeSizesScopeNode(ctypes.sizeof(EFI_IFR_VARSTORE_EFI),
- 0), # EFI_IFR_VARSTORE_EFI_OP
- OpcodeSizesScopeNode(ctypes.sizeof(EFI_IFR_VARSTORE_DEVICE),
- 1), # EFI_IFR_VARSTORE_DEVICE_OP
- OpcodeSizesScopeNode(ctypes.sizeof(EFI_IFR_VERSION),
- 0), # EFI_IFR_VERSION_OP - 0x28
- OpcodeSizesScopeNode(ctypes.sizeof(EFI_IFR_END), 0), # EFI_IFR_END_OP
- OpcodeSizesScopeNode(ctypes.sizeof(EFI_IFR_MATCH),
- 0), # EFI_IFR_MATCH_OP - 0x2A
- OpcodeSizesScopeNode(ctypes.sizeof(EFI_IFR_GET), 0), # EFI_IFR_GET - 0x2B
- OpcodeSizesScopeNode(ctypes.sizeof(EFI_IFR_SET), 0), # EFI_IFR_SET - 0x2C
- OpcodeSizesScopeNode(ctypes.sizeof(EFI_IFR_READ),
- 0), # EFI_IFR_READ - 0x2D
- OpcodeSizesScopeNode(ctypes.sizeof(EFI_IFR_WRITE),
- 0), # EFI_IFR_WRITE - 0x2E
- OpcodeSizesScopeNode(ctypes.sizeof(EFI_IFR_EQUAL),
- 0), # EFI_IFR_EQUAL_OP - 0x2F
- OpcodeSizesScopeNode(ctypes.sizeof(EFI_IFR_NOT_EQUAL),
- 0), # EFI_IFR_NOT_EQUAL_OP
- OpcodeSizesScopeNode(ctypes.sizeof(EFI_IFR_GREATER_THAN),
- 0), # EFI_IFR_GREATER_THAN_OP
- OpcodeSizesScopeNode(ctypes.sizeof(EFI_IFR_GREATER_EQUAL),
- 0), # EFI_IFR_GREATER_EQUAL_OP
- OpcodeSizesScopeNode(ctypes.sizeof(EFI_IFR_LESS_THAN),
- 0), # EFI_IFR_LESS_THAN_OP
- OpcodeSizesScopeNode(ctypes.sizeof(EFI_IFR_LESS_EQUAL),
- 0), # EFI_IFR_LESS_EQUAL_OP - 0x34
- OpcodeSizesScopeNode(ctypes.sizeof(EFI_IFR_BITWISE_AND),
- 0), # EFI_IFR_BITWISE_AND_OP
- OpcodeSizesScopeNode(ctypes.sizeof(EFI_IFR_BITWISE_OR),
- 0), # EFI_IFR_BITWISE_OR_OP
- OpcodeSizesScopeNode(ctypes.sizeof(EFI_IFR_BITWISE_NOT),
- 0), # EFI_IFR_BITWISE_NOT_OP
- OpcodeSizesScopeNode(ctypes.sizeof(EFI_IFR_SHIFT_LEFT),
- 0), # EFI_IFR_SHIFT_LEFT_OP
- OpcodeSizesScopeNode(ctypes.sizeof(EFI_IFR_SHIFT_RIGHT),
- 0), # EFI_IFR_SHIFT_RIGHT_OP
- OpcodeSizesScopeNode(ctypes.sizeof(EFI_IFR_ADD),
- 0), # EFI_IFR_ADD_OP - 0x3A
- OpcodeSizesScopeNode(ctypes.sizeof(EFI_IFR_SUBTRACT),
- 0), # EFI_IFR_SUBTRACT_OP
- OpcodeSizesScopeNode(ctypes.sizeof(EFI_IFR_MULTIPLY),
- 0), # EFI_IFR_MULTIPLY_OP
- OpcodeSizesScopeNode(ctypes.sizeof(EFI_IFR_DIVIDE),
- 0), # EFI_IFR_DIVIDE_OP
- OpcodeSizesScopeNode(ctypes.sizeof(EFI_IFR_MODULO),
- 0), # EFI_IFR_MODULO_OP - 0x3E
- OpcodeSizesScopeNode(ctypes.sizeof(EFI_IFR_RULE_REF),
- 0), # EFI_IFR_RULE_REF_OP
- OpcodeSizesScopeNode(ctypes.sizeof(EFI_IFR_QUESTION_REF1),
- 0), # EFI_IFR_QUESTION_REF1_OP
- OpcodeSizesScopeNode(ctypes.sizeof(EFI_IFR_QUESTION_REF2),
- 0), # EFI_IFR_QUESTION_REF2_OP - 0x41
- OpcodeSizesScopeNode(ctypes.sizeof(EFI_IFR_UINT8), 0), # EFI_IFR_UINT8
- OpcodeSizesScopeNode(ctypes.sizeof(EFI_IFR_UINT16), 0), # EFI_IFR_UINT16
- OpcodeSizesScopeNode(ctypes.sizeof(EFI_IFR_UINT32), 0), # EFI_IFR_UINT32
- OpcodeSizesScopeNode(ctypes.sizeof(EFI_IFR_UINT64), 0), # EFI_IFR_UTNT64
- OpcodeSizesScopeNode(ctypes.sizeof(EFI_IFR_TRUE),
- 0), # EFI_IFR_TRUE_OP - 0x46
- OpcodeSizesScopeNode(ctypes.sizeof(EFI_IFR_FALSE), 0), # EFI_IFR_FALSE_OP
- OpcodeSizesScopeNode(ctypes.sizeof(EFI_IFR_TO_UINT),
- 0), # EFI_IFR_TO_UINT_OP
- OpcodeSizesScopeNode(ctypes.sizeof(EFI_IFR_TO_STRING),
- 0), # EFI_IFR_TO_STRING_OP
- OpcodeSizesScopeNode(ctypes.sizeof(EFI_IFR_TO_BOOLEAN),
- 0), # EFI_IFR_TO_BOOLEAN_OP
- OpcodeSizesScopeNode(ctypes.sizeof(EFI_IFR_MID), 0), # EFI_IFR_MID_OP
- OpcodeSizesScopeNode(ctypes.sizeof(EFI_IFR_FIND), 0), # EFI_IFR_FIND_OP
- OpcodeSizesScopeNode(ctypes.sizeof(EFI_IFR_TOKEN), 0), # EFI_IFR_TOKEN_OP
- OpcodeSizesScopeNode(ctypes.sizeof(EFI_IFR_STRING_REF1),
- 0), # EFI_IFR_STRING_REF1_OP - 0x4E
- OpcodeSizesScopeNode(ctypes.sizeof(EFI_IFR_STRING_REF2),
- 0), # EFI_IFR_STRING_REF2_OP
- OpcodeSizesScopeNode(ctypes.sizeof(EFI_IFR_CONDITIONAL),
- 0), # EFI_IFR_CONDITIONAL_OP
- OpcodeSizesScopeNode(ctypes.sizeof(EFI_IFR_QUESTION_REF3),
- 0), # EFI_IFR_QUESTION_REF3_OP
- OpcodeSizesScopeNode(ctypes.sizeof(EFI_IFR_ZERO), 0), # EFI_IFR_ZERO_OP
- OpcodeSizesScopeNode(ctypes.sizeof(EFI_IFR_ONE), 0), # EFI_IFR_ONE_OP
- OpcodeSizesScopeNode(ctypes.sizeof(EFI_IFR_ONES), 0), # EFI_IFR_ONES_OP
- OpcodeSizesScopeNode(ctypes.sizeof(EFI_IFR_UNDEFINED),
- 0), # EFI_IFR_UNDEFINED_OP
- OpcodeSizesScopeNode(ctypes.sizeof(EFI_IFR_LENGTH),
- 0), # EFI_IFR_LENGTH_OP
- OpcodeSizesScopeNode(ctypes.sizeof(EFI_IFR_DUP),
- 0), # EFI_IFR_DUP_OP - 0x57
- OpcodeSizesScopeNode(ctypes.sizeof(EFI_IFR_THIS), 0), # EFI_IFR_THIS_OP
- OpcodeSizesScopeNode(ctypes.sizeof(EFI_IFR_SPAN), 0), # EFI_IFR_SPAN_OP
- OpcodeSizesScopeNode(ctypes.sizeof(EFI_IFR_VALUE), 1), # EFI_IFR_VALUE_OP
- OpcodeSizesScopeNode(ctypes.sizeof(EFI_IFR_DEFAULT),
- 0), # EFI_IFR_DEFAULT_OP
- OpcodeSizesScopeNode(ctypes.sizeof(EFI_IFR_DEFAULTSTORE),
- 0), # EFI_IFR_DEFAULTSTORE_OP - 0x5C
- OpcodeSizesScopeNode(ctypes.sizeof(EFI_IFR_FORM_MAP),
- 1), # EFI_IFR_FORM_MAP_OP - 0x5D
- OpcodeSizesScopeNode(ctypes.sizeof(EFI_IFR_CATENATE),
- 0), # EFI_IFR_CATENATE_OP
- OpcodeSizesScopeNode(ctypes.sizeof(EFI_IFR_GUID), 0), # EFI_IFR_GUID_OP
- OpcodeSizesScopeNode(ctypes.sizeof(EFI_IFR_SECURITY),
- 0), # EFI_IFR_SECURITY_OP - 0x60
- OpcodeSizesScopeNode(ctypes.sizeof(EFI_IFR_MODAL_TAG),
- 0), # EFI_IFR_MODAL_TAG_OP - 0x61
- OpcodeSizesScopeNode(ctypes.sizeof(EFI_IFR_REFRESH_ID),
- 0), # EFI_IFR_REFRESH_ID_OP - 0x62
- OpcodeSizesScopeNode(ctypes.sizeof(EFI_IFR_WARNING_IF),
- 1), # EFI_IFR_WARNING_IF_OP - 0x63
- OpcodeSizesScopeNode(ctypes.sizeof(EFI_IFR_MATCH2), 0)
-]
-
-
-class SBufferNode():
-
- def __init__(self, Buffer='', Next=None):
- self.Buffer = Buffer
- self.Next = Next
-
-
-class CFormPkg():
-
- def __init__(self, BufferSize=4096):
-
- Node = SBufferNode()
- self.__BufferNodeQueueHead = Node
- self.__BufferNodeQueueTail = Node
- self.__CurrBufferNode = Node
- self.__ReadBufferNode = None
- self.__ReadBufferOffset = 0
- self.__PkgLength = 0
- self.__PendingAssignList = None
- self.__BufferSize = BufferSize
-
- def GetPkgLength(self):
- return self.__PkgLength
-
- def __createNewNode(self):
- Node = SBufferNode()
- return Node
-
- def __GetNodeBefore(self, CurrentNode):
- FirstNode = self.__BufferNodeQueueHead
- LastNode = self.__BufferNodeQueueHead
- while FirstNode != None:
- if FirstNode == CurrentNode:
- break
-
- LastNode = FirstNode
- FirstNode = FirstNode.Next
-
- if FirstNode == None:
- LastNode = None
-
- return LastNode
-
- def __InsertNodeBefore(self, CurrentNode, NewNode):
- LastNode = self.__GetNodeBefore(CurrentNode)
- if LastNode == None:
- return VfrReturnCode.VFR_RETURN_MISMATCHED
-
- NewNode.Next = LastNode.Next
- LastNode.Next = NewNode
-
- def IfrBinBufferGet(self, Len):
- if Len == 0 or Len > self.__BufferSize:
- return None
- if len(self.__CurrBufferNode.Buffer) + Len > self.__BufferSize:
- Node = self.__createNewNode()
- if Node == None:
- return None
-
- if self.__BufferNodeQueueTail == None:
- self.__BufferNodeQueueHead = self.__BufferNodeQueueTail = Node
- else:
- self.__BufferNodeQueueTail.Next = Node
- mBufferNodeQueueTail = Node
- self.__CurrBufferNode = Node
-
- self.__PkgLength += Len
-
- return self.__CurrBufferNode.Buffer
-
-
-
-gCFormPkg = CFormPkg()
-gCreateOp = True
-
-gIfrObjPrintDebugTable = [
- "EFI_IFR_INVALID",
- "EFI_IFR_FORM",
- "EFI_IFR_SUBTITLE",
- "EFI_IFR_TEXT",
- "EFI_IFR_IMAGE",
- "EFI_IFR_ONE_OF",
- "EFI_IFR_CHECKBOX",
- "EFI_IFR_NUMERIC",
- "EFI_IFR_PASSWORD",
- "EFI_IFR_ONE_OF_OPTION",
- "EFI_IFR_SUPPRESS_IF",
- "EFI_IFR_LOCKED",
- "EFI_IFR_ACTION",
- "EFI_IFR_RESET_BUTTON",
- "EFI_IFR_FORM_SET",
- "EFI_IFR_REF",
- "EFI_IFR_NO_SUBMIT_IF",
- "EFI_IFR_INCONSISTENT_IF",
- "EFI_IFR_EQ_ID_VAL",
- "EFI_IFR_EQ_ID_ID",
- "EFI_IFR_EQ_ID_LIST",
- "EFI_IFR_AND",
- "EFI_IFR_OR",
- "EFI_IFR_NOT",
- "EFI_IFR_RULE",
- "EFI_IFR_GRAY_OUT_IF",
- "EFI_IFR_DATE",
- "EFI_IFR_TIME",
- "EFI_IFR_STRING",
- "EFI_IFR_REFRESH",
- "EFI_IFR_DISABLE_IF",
- "EFI_IFR_INVALID",
- "EFI_IFR_TO_LOWER",
- "EFI_IFR_TO_UPPER",
- "EFI_IFR_MAP",
- "EFI_IFR_ORDERED_LIST",
- "EFI_IFR_VARSTORE",
- "EFI_IFR_VARSTORE_NAME_VALUE",
- "EFI_IFR_VARSTORE_EFI",
- "EFI_IFR_VARSTORE_DEVICE",
- "EFI_IFR_VERSION",
- "EFI_IFR_END",
- "EFI_IFR_MATCH",
- "EFI_IFR_GET",
- "EFI_IFR_SET",
- "EFI_IFR_READ",
- "EFI_IFR_WRITE",
- "EFI_IFR_EQUAL",
- "EFI_IFR_NOT_EQUAL",
- "EFI_IFR_GREATER_THAN",
- "EFI_IFR_GREATER_EQUAL",
- "EFI_IFR_LESS_THAN",
- "EFI_IFR_LESS_EQUAL",
- "EFI_IFR_BITWISE_AND",
- "EFI_IFR_BITWISE_OR",
- "EFI_IFR_BITWISE_NOT",
- "EFI_IFR_SHIFT_LEFT",
- "EFI_IFR_SHIFT_RIGHT",
- "EFI_IFR_ADD",
- "EFI_IFR_SUBTRACT",
- "EFI_IFR_MULTIPLY",
- "EFI_IFR_DIVIDE",
- "EFI_IFR_MODULO",
- "EFI_IFR_RULE_REF",
- "EFI_IFR_QUESTION_REF1",
- "EFI_IFR_QUESTION_REF2",
- "EFI_IFR_UINT8",
- "EFI_IFR_UINT16",
- "EFI_IFR_UINT32",
- "EFI_IFR_UINT64",
- "EFI_IFR_TRUE",
- "EFI_IFR_FALSE",
- "EFI_IFR_TO_UINT",
- "EFI_IFR_TO_STRING",
- "EFI_IFR_TO_BOOLEAN",
- "EFI_IFR_MID",
- "EFI_IFR_FIND",
- "EFI_IFR_TOKEN",
- "EFI_IFR_STRING_REF1",
- "EFI_IFR_STRING_REF2",
- "EFI_IFR_CONDITIONAL",
- "EFI_IFR_QUESTION_REF3",
- "EFI_IFR_ZERO",
- "EFI_IFR_ONE",
- "EFI_IFR_ONES",
- "EFI_IFR_UNDEFINED",
- "EFI_IFR_LENGTH",
- "EFI_IFR_DUP",
- "EFI_IFR_THIS",
- "EFI_IFR_SPAN",
- "EFI_IFR_VALUE",
- "EFI_IFR_DEFAULT",
- "EFI_IFR_DEFAULTSTORE",
- "EFI_IFR_FORM_MAP",
- "EFI_IFR_CATENATE",
- "EFI_IFR_GUID",
- "EFI_IFR_SECURITY",
- "EFI_IFR_MODAL_TAG",
- "EFI_IFR_REFRESH_ID",
- "EFI_IFR_WARNING_IF",
- "EFI_IFR_MATCH2",
-]
-
-
-class CIfrObj():
-
- def __init__(self, Obj=None, OpCode=None, ObjBinLen=0, DelayEmit=False, LineNo=0):
-
- self.__DelayEmit = DelayEmit
- self.__PkgOffset = gCFormPkg.GetPkgLength()
- self.__ObjBinLen = gOpcodeSizesScopeTable[
- OpCode].Size if ObjBinLen == 0 else ObjBinLen
-
- self.__ObjBinBuf = Obj
- self.__LineNo = LineNo
-
- # print ("======Create IFR [%s]\n", gIfrObjPrintDebugTable[OpCode])
- return self.__ObjBinBuf
-
- def SetObjBin(self, ObjBinLen):
-
- self.__ObjBinLen = ObjBinLen
- if self.__DelayEmit == False and gCreateOp == True:
- self.__ObjBinBuf = gCFormPkg.IfrBinBufferGet(self.__ObjBinLen)
-
- def SetLineNo(self, LineNo):
- self.__LineNo = LineNo
-
- def GetObjBinAddr(self, Addr):
- self.__ObjBinBuf = Addr
- return self.__ObjBinBuf
-
- def GetObjBinOffset(self):
- return self.__PkgOffset
-
- def GetObjBinLen(self):
- return self.__ObjBinLen
-
- def ExpendObjBin(self, Size):
- if (self.__DelayEmit) == True and (
- (self.__ObjBinLen + Size) > self.__ObjBinLen):
- self.__ObjBinLen = self.__ObjBinLen + Size
- return True
- else:
- return False
-
- def ShrinkObjBin(self, Size):
- if (self.__DelayEmit) == True and (self.__ObjBinLen > Size):
- self.__ObjBinLen = self.__ObjBinLen - Size
-
- def GetObjBin(self):
- return self.__ObjBinBuf
-
- def EMIT_PENDING_OBJ(self):
- if self.__DelayEmit == False or gCreateOp == False:
- return
-
- self.__PkgOffset = gCFormPkg.GetPkgLength()
- # update data buffer to package data
- self.__ObjBinBuf = gCFormPkg.IfrBinBufferGet(self.__ObjBinLen)
-
- self.__DelayEmit = False
-
-
-gScopeCount = 0
-gIsOrderedList = False
-gIsStringOp = False
-gCurrentQuestion = None
-gCurrentMinMaxData = None
-
-
-def SetCurrentQuestion(Question):
-
- gCurrentQuestion = Question
- return gCurrentQuestion
-
-
-class CIfrOpHeader():
-
- def __init__(self, OpHeader: EFI_IFR_OP_HEADER, OpCode=None, Length=0):
- self.__OpHeader = OpHeader
- if OpCode != None:
- self.__OpHeader.OpCode = OpCode
-
- self.__OpHeader.Length = gOpcodeSizesScopeTable[
- OpCode].Size if Length == 0 else Length
- self.__OpHeader.Scope = 1 if (
- gOpcodeSizesScopeTable[OpCode].Scope + gScopeCount > 0) else 0
-
- def GetLength(self):
- return self.__OpHeader.Length
-
- def SetScope(self, Scope):
- self.__OpHeader.Scope = Scope
-
- def GetScope(self):
- return self.__OpHeader.Scope
-
- def UpdateHeader(self, Header):
- self.__OpHeader = Header
-
- def IncLength(self, Size):
- self.__OpHeader.Length += Size
-
- def DecLength(self, Size):
- self.__OpHeader.Length -= Size
-
- def GetOpCode(self):
- return self.__OpHeader.OpCode
-
-
-class CIfrStatementHeader():
-
- def __init__(self, sHeader: EFI_IFR_STATEMENT_HEADER):
- self.__sHeader = sHeader
- self.__sHeader.Help = EFI_STRING_ID_INVALID
- self.__sHeader.Prompt = EFI_STRING_ID_INVALID
-
- def GetStatementHeader(self):
- return self.__sHeader
-
- def SetPrompt(self, Prompt):
- self.__sHeader.Prompt = Prompt
-
- def SetHelp(self, Help):
- self.__sHeader.Help = Help
-
-
-class CIfrMinMaxStepData():
-
- def __init__(self, MinMaxStepData, NumericOpcode=False):
- self.__MinMaxStepData = MinMaxStepData
- self.__MinMaxStepData.u64.MinValue = 0
- self.__MinMaxStepData.u64.MaxValue = 0
- self.__MinMaxStepData.u64.Step = 0
- self.__ValueIsSet = False
- self.__IsNumeric = NumericOpcode
- self.__VarType = EFI_IFR_TYPE_NUM_SIZE_64
-
- def SetMinMaxStepData(self, MinValue, MaxValue, Step, VarType):
- self.__VarType = VarType
-
- if self.__ValueIsSet == False:
- if VarType == EFI_IFR_TYPE_NUM_SIZE_64:
- self.__MinMaxStepData.u64.MinValue = MinValue
- self.__MinMaxStepData.u64.MaxValue = MaxValue
- self.__MinMaxStepData.u64.Step = Step
- if VarType == EFI_IFR_TYPE_NUM_SIZE_32:
- self.__MinMaxStepData.u32.MinValue = MinValue
- self.__MinMaxStepData.u32.MaxValue = MaxValue
- self.__MinMaxStepData.u32.Step = Step
- if VarType == EFI_IFR_TYPE_NUM_SIZE_16:
- self.__MinMaxStepData.u16.MinValue = MinValue
- self.__MinMaxStepData.u16.MaxValue = MaxValue
- self.__MinMaxStepData.u16.Step = Step
- if VarType == EFI_IFR_TYPE_NUM_SIZE_8:
- self.__MinMaxStepData.u8.MinValue = MinValue
- self.__MinMaxStepData.u8.MaxValue = MaxValue
- self.__MinMaxStepData.u8.Step = Step
- self.__ValueIsSet = True
- else:
- if VarType == EFI_IFR_TYPE_NUM_SIZE_64:
- if MinValue < self.__MinMaxStepData.u64.MinValue:
- self.__MinMaxStepData.u64.MinValue = MinValue
- if MaxValue > self.__MinMaxStepData.u64.MaxValue:
- self.__MinMaxStepData.u64.MaxValue = MaxValue
- self.__MinMaxStepData.u64.Step = Step
- if VarType == EFI_IFR_TYPE_NUM_SIZE_32:
- if MinValue < self.__MinMaxStepData.u32.MinValue:
- self.__MinMaxStepData.u32.MinValue = MinValue
- if MaxValue > self.__MinMaxStepData.u32.MaxValue:
- self.__MinMaxStepData.u32.MaxValue = MaxValue
- self.__MinMaxStepData.u32.Step = Step
- if VarType == EFI_IFR_TYPE_NUM_SIZE_16:
- if MinValue < self.__MinMaxStepData.u16.MinValue:
- self.__MinMaxStepData.u16.MinValue = MinValue
- if MaxValue > self.__MinMaxStepData.u16.MaxValue:
- self.__MinMaxStepData.u16.MaxValue = MaxValue
- self.__MinMaxStepData.u16.Step = Step
- if VarType == EFI_IFR_TYPE_NUM_SIZE_8:
- if MinValue < self.__MinMaxStepData.u8.MinValue:
- self.__MinMaxStepData.u8.MinValue = MinValue
- if MaxValue > self.__MinMaxStepData.u8.MaxValue:
- self.__MinMaxStepData.u8.MaxValue = MaxValue
- self.__MinMaxStepData.u8.Step = Step
-
- def GetVarType(self):
- return self.__VarType
-
- def IsNumericOpcode(self):
- return self.__IsNumeric
-
- def UpdateCIfrMinMaxStepData(self, MinMaxStepData):
- self.__MinMaxStepData = MinMaxStepData
-
- def GetMinData(self, VarType, IsBitVar):
-
- if IsBitVar:
- return self.__MinMaxStepData.u32.MinValue
-
- else:
- if VarType == EFI_IFR_TYPE_NUM_SIZE_64:
- return self.__MinMaxStepData.u64.MinValue
- if VarType == EFI_IFR_TYPE_NUM_SIZE_32:
- return self.__MinMaxStepData.u32.MinValue
- if VarType == EFI_IFR_TYPE_NUM_SIZE_16:
- return self.__MinMaxStepData.u16.MinValue
- if VarType == EFI_IFR_TYPE_NUM_SIZE_8:
- return self.__MinMaxStepData.u8.MinValue
-
- return 0
-
- def GetMaxData(self, VarType, IsBitVar):
-
- if IsBitVar:
- return self.__MinMaxStepData.u32.MaxValue
-
- else:
- if VarType == EFI_IFR_TYPE_NUM_SIZE_64:
- return self.__MinMaxStepData.u64.MaxValue
- if VarType == EFI_IFR_TYPE_NUM_SIZE_32:
- return self.__MinMaxStepData.u32.MaxValue
- if VarType == EFI_IFR_TYPE_NUM_SIZE_16:
- return self.__MinMaxStepData.u16.MaxValue
- if VarType == EFI_IFR_TYPE_NUM_SIZE_8:
- return self.__MinMaxStepData.u8.MaxValue
-
- return 0
-
- def GetStepData(self, VarType, IsBitVar):
-
- if IsBitVar:
- return self.__MinMaxStepData.u32.Step
-
- else:
- if VarType == EFI_IFR_TYPE_NUM_SIZE_64:
- return self.__MinMaxStepData.u64.Step
- if VarType == EFI_IFR_TYPE_NUM_SIZE_32:
- return self.__MinMaxStepData.u32.Step
- if VarType == EFI_IFR_TYPE_NUM_SIZE_16:
- return self.__MinMaxStepData.u16.Step
- if VarType == EFI_IFR_TYPE_NUM_SIZE_8:
- return self.__MinMaxStepData.u8.Step
-
- return 0
-
-
-class CIfrFormSet(CIfrObj, CIfrOpHeader):
-
- def __init__(self, Size):
- self.__FormSet = EFI_IFR_FORM_SET()
- CIfrObj.__init__(self, self.__FormSet, EFI_IFR_FORM_SET_OP)
- CIfrOpHeader.__init__(self, self.__FormSet.Header, EFI_IFR_FORM_SET_OP,
- Size)
- self.__FormSet.Help = EFI_STRING_ID_INVALID
- self.__FormSet.FormSetTitle = EFI_STRING_ID_INVALID
- self.__FormSet.Flags = 0
- self.__FormSet.Guid = EFI_GUID(0, 0, 0,
- GuidArray(0, 0, 0, 0, 0, 0, 0, 0))
- self.__ClassGuid = []
-
- def SetGuid(self, Guid):
- self.__FormSet.Guid = Guid
-
- def GetGuid(self):
- return self.__FormSet.Guid
-
- def SetFormSetTitle(self, FormSetTitle):
- self.__FormSet.FormSetTitle = FormSetTitle
-
- def GetFormSetTitle(self):
- return self.__FormSet.FormSetTitle
-
- def SetHelp(self, Help):
- self.__FormSet.Help = Help
-
- def GetHelp(self):
- return self.__FormSet.Help
-
- def SetClassGuid(self, Guid):
- self.__ClassGuid.append(Guid)
- self.__FormSet.Flags += 1
-
- def GetClassGuid(self):
- return self.__ClassGuid
-
- def GetFlags(self):
- return self.__FormSet.Flags
-
- def GetInfo(self):
- return self.__FormSet
-
-
-class CIfrOneOfOption(CIfrObj, CIfrOpHeader):
-
- def __init__(self, Size):
- self.__OneOfOption = EFI_IFR_ONE_OF_OPTION()
- CIfrOpHeader.__init__(self, self.__OneOfOption.Header,
- EFI_IFR_ONE_OF_OPTION_OP, Size)
- self.__OneOfOption.Flags = 0
- self.__OneOfOption.Option = EFI_STRING_ID_INVALID
- self.__OneOfOption.Type = EFI_IFR_TYPE_OTHER
- self.__OneOfOption.Value = EFI_IFR_TYPE_VALUE()
-
- def SetOption(self, Option):
- self.__OneOfOption.Option = Option
-
- def SetType(self, Type):
- self.__OneOfOption.Type = Type
-
- def SetValue(self, Value):
- self.__OneOfOption.Value = Value
-
- def GetFlags(self):
- return self.__OneOfOption.Flags
-
- def SetFlags(self, LFlags):
-
- self.__OneOfOption.Flags = 0
- LFlags, Ret = _FLAG_TEST_AND_CLEAR(LFlags, EFI_IFR_OPTION_DEFAULT)
- if Ret:
- self.__OneOfOption.Flags |= EFI_IFR_OPTION_DEFAULT
-
- LFlags, Ret = _FLAG_TEST_AND_CLEAR(LFlags, EFI_IFR_OPTION_DEFAULT_MFG)
- if Ret:
- self.__OneOfOption.Flags |= EFI_IFR_OPTION_DEFAULT_MFG
-
- if LFlags == EFI_IFR_TYPE_NUM_SIZE_8:
- LFlags = _FLAG_CLEAR(LFlags, EFI_IFR_TYPE_NUM_SIZE_8)
- self.__OneOfOption.Flags |= EFI_IFR_TYPE_NUM_SIZE_8
-
- elif LFlags == EFI_IFR_TYPE_NUM_SIZE_16:
- LFlags = _FLAG_CLEAR(LFlags, EFI_IFR_TYPE_NUM_SIZE_16)
- self.__OneOfOption.Flags |= EFI_IFR_TYPE_NUM_SIZE_16
-
- elif LFlags == EFI_IFR_TYPE_NUM_SIZE_32:
- LFlags = _FLAG_CLEAR(LFlags, EFI_IFR_TYPE_NUM_SIZE_32)
- self.__OneOfOption.Flags |= EFI_IFR_TYPE_NUM_SIZE_32
-
- elif LFlags == EFI_IFR_TYPE_NUM_SIZE_64:
- LFlags = _FLAG_CLEAR(LFlags, EFI_IFR_TYPE_NUM_SIZE_64)
- self.__OneOfOption.Flags |= EFI_IFR_TYPE_NUM_SIZE_64
-
- elif LFlags == EFI_IFR_TYPE_BOOLEAN:
- LFlags = _FLAG_CLEAR(LFlags, EFI_IFR_TYPE_BOOLEAN)
- self.__OneOfOption.Flags |= EFI_IFR_TYPE_BOOLEAN
-
- elif LFlags == EFI_IFR_TYPE_TIME:
- LFlags = _FLAG_CLEAR(LFlags, EFI_IFR_TYPE_TIME)
- self.__OneOfOption.Flags |= EFI_IFR_TYPE_TIME
-
- elif LFlags == EFI_IFR_TYPE_DATE:
- LFlags = _FLAG_CLEAR(LFlags, EFI_IFR_TYPE_DATE)
- self.__OneOfOption.Flags |= EFI_IFR_TYPE_DATE
-
- elif LFlags == EFI_IFR_TYPE_STRING:
- LFlags = _FLAG_CLEAR(LFlags, EFI_IFR_TYPE_STRING)
- self.__OneOfOption.Flags |= EFI_IFR_TYPE_STRING
-
- elif LFlags == EFI_IFR_TYPE_OTHER:
- LFlags = _FLAG_CLEAR(LFlags, EFI_IFR_TYPE_OTHER)
- self.__OneOfOption.Flags |= EFI_IFR_TYPE_OTHER
-
- return VfrReturnCode.VFR_RETURN_SUCCESS if LFlags == 0 else VfrReturnCode.VFR_RETURN_FLAGS_UNSUPPORTED
-
- def GetInfo(self):
- return self.__OneOfOption
-
-
-class CIfrOneOfOption2(CIfrObj, CIfrOpHeader):
-
- def __init__(self, Size, Nums, ValueType, ValueList=[]):
- self.__OneOfOption = Refine_EFI_IFR_ONE_OF_OPTION(Nums)
- Header = EFI_IFR_OP_HEADER()
- CIfrOpHeader.__init__(self, Header, EFI_IFR_ONE_OF_OPTION_OP, Size)
- self.__OneOfOption.Header = Header
- self.__OneOfOption.Flags = 0
- self.__OneOfOption.Option = EFI_STRING_ID_INVALID
- self.__OneOfOption.Type = EFI_IFR_TYPE_OTHER
- self.__ValueType = ValueType
- if ValueList != []:
- ArrayType = EFI_IFR_TYPE_VALUE * Nums
- ValueArray = ArrayType()
- for i in range(0, len(ValueList)):
- ValueArray[i] = ValueList[i]
- self.__OneOfOption.Value = ValueArray
-
- def SetOption(self, Option):
- self.__OneOfOption.Option = Option
-
- def SetType(self, Type):
- self.__OneOfOption.Type = Type
-
- def GetValueType(self):
- return self.__ValueType
-
- def SetValue(self, ValueList):
- ArrayType = EFI_IFR_TYPE_VALUE * (len(ValueList))
- ValueArray = ArrayType()
- for i in range(0, len(ValueList)):
- ValueArray[i] = ValueList[i]
- self.__OneOfOption.Value = ValueArray
-
- def GetFlags(self):
- return self.__OneOfOption.Flags
-
- def SetFlags(self, LFlags):
-
- self.__OneOfOption.Flags = 0
- LFlags, Ret = _FLAG_TEST_AND_CLEAR(LFlags, EFI_IFR_OPTION_DEFAULT)
- if Ret:
- self.__OneOfOption.Flags |= EFI_IFR_OPTION_DEFAULT
-
- LFlags, Ret = _FLAG_TEST_AND_CLEAR(LFlags, EFI_IFR_OPTION_DEFAULT_MFG)
- if Ret:
- self.__OneOfOption.Flags |= EFI_IFR_OPTION_DEFAULT_MFG
-
- if LFlags == EFI_IFR_TYPE_NUM_SIZE_8:
- LFlags = _FLAG_CLEAR(LFlags, EFI_IFR_TYPE_NUM_SIZE_8)
- self.__OneOfOption.Flags |= EFI_IFR_TYPE_NUM_SIZE_8
-
- elif LFlags == EFI_IFR_TYPE_NUM_SIZE_16:
- LFlags = _FLAG_CLEAR(LFlags, EFI_IFR_TYPE_NUM_SIZE_16)
- self.__OneOfOption.Flags |= EFI_IFR_TYPE_NUM_SIZE_16
-
- elif LFlags == EFI_IFR_TYPE_NUM_SIZE_32:
- LFlags = _FLAG_CLEAR(LFlags, EFI_IFR_TYPE_NUM_SIZE_32)
- self.__OneOfOption.Flags |= EFI_IFR_TYPE_NUM_SIZE_32
-
- elif LFlags == EFI_IFR_TYPE_NUM_SIZE_64:
- LFlags = _FLAG_CLEAR(LFlags, EFI_IFR_TYPE_NUM_SIZE_64)
- self.__OneOfOption.Flags |= EFI_IFR_TYPE_NUM_SIZE_64
-
- elif LFlags == EFI_IFR_TYPE_BOOLEAN:
- LFlags = _FLAG_CLEAR(LFlags, EFI_IFR_TYPE_BOOLEAN)
- self.__OneOfOption.Flags |= EFI_IFR_TYPE_BOOLEAN
-
- elif LFlags == EFI_IFR_TYPE_TIME:
- LFlags = _FLAG_CLEAR(LFlags, EFI_IFR_TYPE_TIME)
- self.__OneOfOption.Flags |= EFI_IFR_TYPE_TIME
-
- elif LFlags == EFI_IFR_TYPE_DATE:
- LFlags = _FLAG_CLEAR(LFlags, EFI_IFR_TYPE_DATE)
- self.__OneOfOption.Flags |= EFI_IFR_TYPE_DATE
-
- elif LFlags == EFI_IFR_TYPE_STRING:
- LFlags = _FLAG_CLEAR(LFlags, EFI_IFR_TYPE_STRING)
- self.__OneOfOption.Flags |= EFI_IFR_TYPE_STRING
-
- elif LFlags == EFI_IFR_TYPE_OTHER:
- LFlags = _FLAG_CLEAR(LFlags, EFI_IFR_TYPE_OTHER)
- self.__OneOfOption.Flags |= EFI_IFR_TYPE_OTHER
-
- return VfrReturnCode.VFR_RETURN_SUCCESS if LFlags == 0 else VfrReturnCode.VFR_RETURN_FLAGS_UNSUPPORTED
-
- def GetInfo(self):
- return self.__OneOfOption
-
-
-class CIfrOptionKey(CIfrObj, CIfrOpHeader):
-
- def __init__(self, QuestionId, OptionValue, KeyValue):
-
- self.__OptionKey = EFI_IFR_GUID_OPTIONKEY()
- CIfrOpHeader.__init__(self, self.__OptionKey.Header, EFI_IFR_GUID_OP,
- ctypes.sizeof(EFI_IFR_GUID_OPTIONKEY))
- self.__OptionKey.ExtendOpCode = EFI_IFR_EXTEND_OP_OPTIONKEY
- self.__OptionKey.Guid = EFI_IFR_FRAMEWORK_GUID
- self.__OptionKey.QuestionId = QuestionId
- self.__OptionKey.OptionValue = OptionValue
- self.__OptionKey.KeyValue = KeyValue
-
- def GetInfo(self):
- return self.__OptionKey
-
-
-class CIfrClass(CIfrObj, CIfrOpHeader):
-
- def __init__(self, ):
- self.__Class = EFI_IFR_GUID_CLASS() # static guid
- CIfrOpHeader.__init__(self, self.__Class.Header, EFI_IFR_GUID_OP,
- ctypes.sizeof(EFI_IFR_GUID_CLASS))
- self.__Class.ExtendOpCode = EFI_IFR_EXTEND_OP_CLASS
- self.__Class.Guid = EFI_IFR_TIANO_GUID
- self.__Class.Class = EFI_NON_DEVICE_CLASS
-
- def SetClass(self, Class):
- self.__Class.Class = Class
-
- def GetInfo(self):
- return self.__Class
-
-
-class CIfrSubClass(CIfrObj, CIfrOpHeader):
-
- def __init__(self, ):
- self.__SubClass = EFI_IFR_GUID_SUBCLASS() # static guid
- CIfrOpHeader.__init__(self, self.__SubClass.Header, EFI_IFR_GUID_OP,
- ctypes.sizeof(EFI_IFR_GUID_SUBCLASS))
- self.__SubClass.ExtendOpCode = EFI_IFR_EXTEND_OP_SUBCLASS
- self.__SubClass.Guid = EFI_IFR_TIANO_GUID
- self.__SubClass.SubClass = EFI_SETUP_APPLICATION_SUBCLASS
-
- def SetSubClass(self, SubClass):
- self.__SubClass.SubClass = SubClass
-
- def GetInfo(self):
- return self.__SubClass
-
-
-class CIfrDefaultStore(CIfrObj, CIfrOpHeader):
-
- def __init__(self, ):
- self.__DefaultStore = EFI_IFR_DEFAULTSTORE()
- CIfrOpHeader.__init__(self, self.__DefaultStore.Header,
- EFI_IFR_DEFAULTSTORE_OP)
- self.__DefaultStore.DefaultName = EFI_STRING_ID_INVALID
- self.__DefaultStore.DefaultId = EFI_VARSTORE_ID_INVALID
-
- def SetDefaultName(self, DefaultName):
- self.__DefaultStore.DefaultName = DefaultName
-
- def SetDefaultId(self, DefaultId):
- self.__DefaultStore.DefaultId = DefaultId
-
- def GetDefaultStore(self):
- return self.__DefaultStore
-
- def SetDefaultStore(self, DefaultStore: EFI_IFR_DEFAULTSTORE):
- self.__DefaultStore = DefaultStore
-
- def GetInfo(self):
- return self.__DefaultStore
-
-
-class CIfrVarStore(CIfrObj, CIfrOpHeader):
-
- def __init__(self, ):
- self.__Varstore = EFI_IFR_VARSTORE()
- CIfrOpHeader.__init__(self, self.__Varstore.Header,
- EFI_IFR_VARSTORE_OP)
- self.__Varstore.VarStoreId = EFI_VARSTORE_ID_INVALID
- self.__Varstore.Size = 0
- self.__Varstore.Name = ''
-
- def SetGuid(self, Guid):
- self.__Varstore.Guid = Guid
-
- def SetSize(self, Size):
- self.__Varstore.Size = Size
-
- def SetVarStoreId(self, VarStoreId):
- self.__Varstore.VarStoreId = VarStoreId
-
- def SetName(self, Name):
- self.__Varstore.Name = Name
-
- def GetInfo(self):
- return self.__Varstore
-
-
-class CIfrVarStoreEfi(CIfrObj, CIfrOpHeader):
-
- def __init__(self, ):
- self.__VarStoreEfi = EFI_IFR_VARSTORE_EFI()
- CIfrOpHeader.__init__(self, self.__VarStoreEfi.Header,
- EFI_IFR_VARSTORE_EFI_OP)
- self.__VarStoreEfi.VarStoreId = EFI_VAROFFSET_INVALID
- self.__VarStoreEfi.Size = 0
- self.__VarStoreEfi.Name = ''
-
- def SetGuid(self, Guid):
- self.__VarStoreEfi.Guid = Guid
-
- def SetSize(self, Size):
- self.__VarStoreEfi.Size = Size
-
- def SetVarStoreId(self, VarStoreId):
- self.__VarStoreEfi.VarStoreId = VarStoreId
-
- def SetName(self, Name):
- self.__VarStoreEfi.Name = Name
-
- def SetAttributes(self, Attributes):
- self.__VarStoreEfi.Attributes = Attributes
-
- def GetInfo(self):
- return self.__VarStoreEfi
-
-
-class CIfrVarStoreNameValue(CIfrObj, CIfrOpHeader):
-
- def __init__(self):
- self.__VarStoreNameValue = EFI_IFR_VARSTORE_NAME_VALUE()
- CIfrOpHeader.__init__(self, self.__VarStoreNameValue.Header,
- EFI_IFR_VARSTORE_NAME_VALUE_OP)
- self.__VarStoreNameValue.VarStoreId = EFI_VAROFFSET_INVALID
-
- def SetGuid(self, Guid):
- self.__VarStoreNameValue.Guid = Guid
-
- def SetVarStoreId(self, VarStoreId):
- self.__VarStoreNameValue.VarStoreId = VarStoreId
-
- def GetInfo(self):
- return self.__VarStoreNameValue
-
-
-EFI_BITS_PER_UINT32 = 1 << EFI_BITS_SHIFT_PER_UINT32
-EFI_FORM_ID_MAX = 0xFFFF
-
-EFI_FREE_FORM_ID_BITMAP_SIZE = int((EFI_FORM_ID_MAX + 1) / EFI_BITS_PER_UINT32)
-
-
-class CIfrFormId():
-
- FormIdBitMap = []
- for i in range(0, EFI_FREE_FORM_ID_BITMAP_SIZE):
- FormIdBitMap.append(0)
-
- @classmethod
- def CheckFormIdFree(cls, FormId):
-
- Index = int(FormId / EFI_BITS_PER_UINT32)
- Offset = FormId % EFI_BITS_PER_UINT32
-
- return (cls.FormIdBitMap[Index] & (0x80000000 >> Offset)) == 0
-
- @classmethod
- def MarkFormIdUsed(cls, FormId):
-
- Index = int(FormId / EFI_BITS_PER_UINT32)
- Offset = FormId % EFI_BITS_PER_UINT32
- cls.FormIdBitMap[Index] |= (0x80000000 >> Offset)
-
-
-class CIfrForm(CIfrObj, CIfrOpHeader):
-
- def __init__(self):
- self.__Form = EFI_IFR_FORM()
- CIfrOpHeader.__init__(self, self.__Form.Header, EFI_IFR_FORM_OP)
- self.__Form.FormId = 0
- self.__Form.FormTitle = EFI_STRING_ID_INVALID
-
- def SetFormId(self, FormId):
- # FormId can't be 0.
- if FormId == 0:
- return VfrReturnCode.VFR_RETURN_INVALID_PARAMETER
- if CIfrFormId.CheckFormIdFree(FormId) == False:
- return VfrReturnCode.VFR_RETURN_FORMID_REDEFINED
- self.__Form.FormId = FormId
- CIfrFormId.MarkFormIdUsed(FormId)
- return VfrReturnCode.VFR_RETURN_SUCCESS
-
- def SetFormTitle(self, FormTitle):
- self.__Form.FormTitle = FormTitle
-
- def GetInfo(self):
- return self.__Form
-
-
-class CIfrFormMap(CIfrObj, CIfrOpHeader):
-
- def __init__(self):
- self.__FormMap = EFI_IFR_FORM_MAP()
- self.__MethodMapList = [] # EFI_IFR_FORM_MAP_METHOD()
- CIfrOpHeader.__init__(self, self.__FormMap.Header, EFI_IFR_FORM_MAP_OP)
- self.__FormMap.FormId = 0
-
- def SetFormId(self, FormId):
- if FormId == 0:
- return VfrReturnCode.VFR_RETURN_INVALID_PARAMETER
-
- if CIfrFormId.CheckFormIdFree(FormId) == False:
- return VfrReturnCode.VFR_RETURN_FORMID_REDEFINED
- self.__FormMap.FormId = FormId
- CIfrFormId.MarkFormIdUsed(FormId)
- return VfrReturnCode.VFR_RETURN_SUCCESS
-
- def SetFormMapMethod(self, MethodTitle, MethodGuid: EFI_GUID):
- MethodMap = EFI_IFR_FORM_MAP_METHOD()
- MethodMap.MethodTitle = MethodTitle
- MethodMap.MethodIdentifier = MethodGuid
- self.__MethodMapList.append(MethodMap)
-
- def GetInfo(self):
- return self.__FormMap, self.__MethodMapList
-
-
-class CIfrEnd(CIfrObj, CIfrOpHeader):
-
- def __init__(self, ):
- self.__End = EFI_IFR_END()
- CIfrOpHeader.__init__(self, self.__End.Header, EFI_IFR_END_OP)
-
-
-class CIfrBanner(CIfrObj, CIfrOpHeader):
-
- def __init__(self, ):
- self.__Banner = EFI_IFR_GUID_BANNER()
- CIfrOpHeader.__init__(self, self.__Banner.Header, EFI_IFR_GUID_OP,
- ctypes.sizeof(EFI_IFR_GUID_BANNER))
- self.__Banner.ExtendOpCode = EFI_IFR_EXTEND_OP_BANNER
- self.__Banner.Guid = EFI_IFR_TIANO_GUID
-
- def SetTitle(self, StringId):
- self.__Banner.Title = StringId
-
- def SetLine(self, Line):
- self.__Banner.LineNumber = Line
-
- def SetAlign(self, Align):
- self.__Banner.Alignment = Align
-
- def GetInfo(self):
- return self.__Banner
-
-
-class CIfrTimeout(CIfrObj, CIfrOpHeader):
-
- def __init__(self, Timeout=0):
- self.__Timeout = EFI_IFR_GUID_TIMEOUT()
- CIfrOpHeader.__init__(self, self.__Timeout.Header, EFI_IFR_GUID_OP,
- ctypes.sizeof(EFI_IFR_GUID_TIMEOUT))
- self.__Timeout.ExtendOpCode = EFI_IFR_EXTEND_OP_TIMEOUT
- self.__Timeout.Guid = EFI_IFR_TIANO_GUID
- self.__Timeout.TimeOut = Timeout
-
- def SetTimeout(self, Timeout):
- self.__Timeout.TimeOut = Timeout
-
- def GetInfo(self):
- return self.__Timeout
-
-
-class CIfrLabel(CIfrObj, CIfrOpHeader):
-
- def __init__(self, ):
- self.__Label = EFI_IFR_GUID_LABEL()
- CIfrOpHeader.__init__(self, self.__Label.Header, EFI_IFR_GUID_OP,
- ctypes.sizeof(EFI_IFR_GUID_LABEL))
- self.__Label.ExtendOpCode = EFI_IFR_EXTEND_OP_LABEL
- self.__Label.Guid = EFI_IFR_TIANO_GUID
-
- def SetNumber(self, Number):
- self.__Label.Number = Number
-
- def GetInfo(self):
- return self.__Label
-
-
-class CIfrRule(CIfrObj, CIfrOpHeader):
-
- def __init__(self, ):
- self.__Rule = EFI_IFR_RULE()
- CIfrOpHeader.__init__(self, self.__Rule.Header, EFI_IFR_RULE_OP)
- self.__Rule.RuleId = EFI_RULE_ID_INVALID
-
- def SetRuleId(self, RuleId):
- self.__Rule.RuleId = RuleId
-
- def GetInfo(self):
- return self.__Rule
-
-
-def _FLAG_TEST_AND_CLEAR(Flags, Mask):
-
- Ret = Flags & Mask
- Flags &= (~Mask)
- return Flags, Ret
-
-
-def _FLAG_CLEAR(Flags, Mask):
-
- Flags &= (~Mask)
- return Flags
-
-
-class CIfrSubtitle(CIfrObj, CIfrOpHeader, CIfrStatementHeader):
-
- def __init__(self, ):
- self.__Subtitle = EFI_IFR_SUBTITLE()
-
- CIfrOpHeader.__init__(self, self.__Subtitle.Header,
- EFI_IFR_SUBTITLE_OP)
- CIfrStatementHeader.__init__(self, self.__Subtitle.Statement)
-
- self.__Subtitle.Flags = 0
-
- def SetFlags(self, Flags):
- Flags, Result = _FLAG_TEST_AND_CLEAR(Flags, EFI_IFR_FLAGS_HORIZONTAL)
- if Result:
- self.__Subtitle.Flags |= EFI_IFR_FLAGS_HORIZONTAL
-
- return VfrReturnCode.VFR_RETURN_SUCCESS if Flags == 0 else VfrReturnCode.VFR_RETURN_FLAGS_UNSUPPORTED
-
- def GetInfo(self):
- return self.__Subtitle
-
-
-class CIfrImage(CIfrObj, CIfrOpHeader):
-
- def __init__(self, ):
- self.__Image = EFI_IFR_IMAGE()
- CIfrOpHeader.__init__(self, self.__Image.Header, EFI_IFR_IMAGE_OP)
- self.__Image.Id = EFI_IMAGE_ID_INVALID
-
- def SetImageId(self, ImageId):
- self.__Image.Id = ImageId
-
- def GetInfo(self):
- return self.__Image
-
-
-class CIfrLocked(CIfrObj, CIfrOpHeader):
-
- def __init__(self, ):
- self.__Lock = EFI_IFR_LOCKED()
- CIfrOpHeader.__init__(self, self.__Lock.Header, EFI_IFR_LOCKED_OP)
-
-
-class CIfrModal(CIfrObj, CIfrOpHeader):
-
- def __init__(self, ):
- self.__Modal = EFI_IFR_MODAL_TAG()
- CIfrOpHeader.__init__(self, self.__Modal.Header, EFI_IFR_MODAL_TAG_OP)
-
-
-EFI_IFR_QUESTION_FLAG_DEFAULT = 0
-
-
-class CIfrQuestionHeader(CIfrStatementHeader):
-
- def __init__(self, qHeader, Flags=EFI_IFR_QUESTION_FLAG_DEFAULT):
-
- self.__qHeader = qHeader
- CIfrStatementHeader.__init__(self, self.__qHeader.Header)
- self.__qHeader.QuestionId = EFI_QUESTION_ID_INVALID
- self.__qHeader.VarStoreId = EFI_VARSTORE_ID_INVALID
- self.__qHeader.VarStoreInfo.VarName = EFI_STRING_ID_INVALID
- self.__qHeader.VarStoreInfo.VarOffset = EFI_VAROFFSET_INVALID
- self.__qHeader.Flags = Flags
-
- def GetQuestionId(self):
- return self.__qHeader.QuestionId
-
- def SetQuestionId(self, QuestionId):
-
- self.__qHeader.QuestionId = QuestionId
-
- def GetVarStoreId(self):
- return self.__qHeader.VarStoreId
-
- def SetVarStoreInfo(self, BaseInfo):
-
- self.__qHeader.VarStoreId = BaseInfo.VarStoreId
- self.__qHeader.VarStoreInfo.VarName = BaseInfo.Info.VarName
- self.__qHeader.VarStoreInfo.VarOffset = BaseInfo.Info.VarOffset
-
- def GetVarStoreInfo(self, Info): # Bug
-
- Info.VarStoreId = self.__qHeader.VarStoreId
- Info.VarStoreInfo = self.__qHeader.VarStoreInfo
- return Info
-
- def GetFlags(self):
- return self.__qHeader.Flags
-
- def SetFlags(self, Flags):
-
- Flags, Ret = _FLAG_TEST_AND_CLEAR(Flags, EFI_IFR_FLAG_READ_ONLY)
- if Ret:
- self.__qHeader.Flags |= EFI_IFR_FLAG_READ_ONLY
-
- Flags = _FLAG_CLEAR(Flags, 0x02)
-
- Flags, Ret = _FLAG_TEST_AND_CLEAR(Flags, EFI_IFR_FLAG_CALLBACK)
- if Ret:
- self.__qHeader.Flags |= EFI_IFR_FLAG_CALLBACK
-
- # ignore NVAccessFlag
- Flags = _FLAG_CLEAR(Flags, 0x08)
-
- Flags, Ret = _FLAG_TEST_AND_CLEAR(Flags, EFI_IFR_FLAG_RESET_REQUIRED)
- if Ret:
- self.__qHeader.Flags |= EFI_IFR_FLAG_RESET_REQUIRED
-
- Flags, Ret = _FLAG_TEST_AND_CLEAR(Flags,
- EFI_IFR_FLAG_RECONNECT_REQUIRED)
- if Ret:
- self.__qHeader.Flags |= EFI_IFR_FLAG_RECONNECT_REQUIRED
-
- # Set LateCheck Flag to compatible for framework flag
- # but it uses 0x20 as its flag, if in the future UEFI may take this flag
-
- Flags, Ret = _FLAG_TEST_AND_CLEAR(Flags, 0x20)
- if Ret:
- self.__qHeader.Flags |= 0x20
-
- Flags, Ret = _FLAG_TEST_AND_CLEAR(Flags, EFI_IFR_FLAG_OPTIONS_ONLY)
- if Ret:
- self.__qHeader.Flags |= EFI_IFR_FLAG_OPTIONS_ONLY
-
- return VfrReturnCode.VFR_RETURN_SUCCESS if Flags == 0 else VfrReturnCode.VFR_RETURN_FLAGS_UNSUPPORTED
-
- def UpdateCIfrQuestionHeader(self, qHeader):
- self.__qHeader = qHeader
-
-
-class CIfrRef(CIfrObj, CIfrOpHeader, CIfrQuestionHeader):
-
- def __init__(self, ):
- self.__Ref = EFI_IFR_REF()
- CIfrOpHeader.__init__(self, self.__Ref.Header, EFI_IFR_REF_OP)
- CIfrQuestionHeader.__init__(self, self.__Ref.Question)
- self.__Ref.FormId = 0
-
- def SetFormId(self, FormId):
- self.__Ref.FormId = FormId
-
- def GetInfo(self):
- return self.__Ref
-
-
-class CIfrRef2(CIfrObj, CIfrOpHeader, CIfrQuestionHeader):
-
- def __init__(self, ):
- self.__Ref2 = EFI_IFR_REF2()
- CIfrOpHeader.__init__(self, self.__Ref2.Header, EFI_IFR_REF_OP)
- CIfrQuestionHeader.__init__(self, self.__Ref2.Question)
- self.__Ref2.FormId = 0
- self.__Ref2.QuestionId = EFI_QUESTION_ID_INVALID
-
- def SetFormId(self, FormId):
- self.__Ref2.FormId = FormId
-
- def SetQuestionId(self, QuestionId):
-
- self.__Ref2.QuestionId = QuestionId
-
- def GetInfo(self):
- return self.__Ref2
-
-
-class CIfrRef3(CIfrObj, CIfrOpHeader, CIfrQuestionHeader):
-
- def __init__(self, ):
- self.__Ref3 = EFI_IFR_REF3()
- CIfrOpHeader.__init__(self, self.__Ref3.Header, EFI_IFR_REF_OP)
- CIfrQuestionHeader.__init__(self, self.__Ref3.Question)
- self.__Ref3.FormId = 0
- self.__Ref3.QuestionId = EFI_QUESTION_ID_INVALID
- EFI_IFR_DEFAULT_GUID = EFI_GUID(0, 0, 0,
- GuidArray(0, 0, 0, 0, 0, 0, 0, 0))
- self.__Ref3.FormSetId = EFI_IFR_DEFAULT_GUID
-
- def SetFormId(self, FormId):
- self.__Ref3.FormId = FormId
-
- def SetQuestionId(self, QuestionId):
-
- self.__Ref3.QuestionId = QuestionId
-
- def SetFormSetId(self, FormSetId):
- self.__Ref3.FormSetId = FormSetId
-
- def GetInfo(self):
- return self.__Ref3
-
-
-class CIfrRef4(CIfrObj, CIfrOpHeader, CIfrQuestionHeader):
-
- def __init__(self, ):
- self.__Ref4 = EFI_IFR_REF4()
- CIfrOpHeader.__init__(self, self.__Ref4.Header, EFI_IFR_REF_OP)
- CIfrQuestionHeader.__init__(self, self.__Ref4.Question)
- self.__Ref4.FormId = 0
- self.__Ref4.QuestionId = EFI_QUESTION_ID_INVALID
- EFI_IFR_DEFAULT_GUID = EFI_GUID(0, 0, 0,
- GuidArray(0, 0, 0, 0, 0, 0, 0, 0))
- self.__Ref4.FormSetId = EFI_IFR_DEFAULT_GUID
- self.__Ref4.DevicePath = EFI_STRING_ID_INVALID
-
- def SetFormId(self, FormId):
- self.__Ref4.FormId = FormId
-
- def SetQuestionId(self, QuestionId):
-
- self.__Ref4.QuestionId = QuestionId
-
- def SetFormSetId(self, FormSetId):
- self.__Ref4.FormSetId = FormSetId
-
- def SetDevicePath(self, DevicePath):
- self.__Ref4.DevicePath = DevicePath
-
- def GetInfo(self):
- return self.__Ref4
-
-
-class CIfrRef5(CIfrObj, CIfrOpHeader, CIfrQuestionHeader):
-
- def __init__(self, ):
- self.__Ref5 = EFI_IFR_REF5()
- CIfrOpHeader.__init__(self, self.__Ref5.Header, EFI_IFR_REF_OP)
- CIfrQuestionHeader.__init__(self, self.__Ref5.Question)
-
- def GetInfo(self):
- return self.__Ref5
-
-
-class CIfrAction(CIfrObj, CIfrOpHeader, CIfrQuestionHeader):
-
- def __init__(self, ):
- self.__Action = EFI_IFR_ACTION()
- CIfrOpHeader.__init__(self, self.__Action.Header, EFI_IFR_ACTION_OP)
- CIfrQuestionHeader.__init__(self, self.__Action.Question)
- self.__Action.QuestionConfig = EFI_STRING_ID_INVALID
-
- def SetQuestionConfig(self, QuestionConfig):
- self.__Action.QuestionConfig = QuestionConfig
-
- def GetInfo(self):
- return self.__Action
-
-
-class CIfrText(CIfrObj, CIfrOpHeader, CIfrStatementHeader):
-
- def __init__(self, ):
- self.__Text = EFI_IFR_TEXT()
- CIfrOpHeader.__init__(self, self.__Text.Header, EFI_IFR_TEXT_OP)
- CIfrStatementHeader.__init__(self, self.__Text.Statement)
- self.__Text.TextTwo = EFI_STRING_ID_INVALID
-
- def SetTextTwo(self, StringId):
- self.__Text.TextTwo = StringId
-
- def GetInfo(self):
- return self.__Text
-
-
-class CIfrGuid(CIfrObj, CIfrOpHeader):
-
- def __init__(self, Size, Databuff=None):
- self.__Guid = EFI_IFR_GUID()
- self.__Data = Databuff
- CIfrOpHeader.__init__(self, self.__Guid.Header, EFI_IFR_GUID_OP,
- ctypes.sizeof(EFI_IFR_GUID) + Size)
- EFI_IFR_DEFAULT_GUID = EFI_GUID(0, 0, 0,
- GuidArray(0, 0, 0, 0, 0, 0, 0, 0))
- self.__Guid.Guid = EFI_IFR_DEFAULT_GUID
-
- def SetGuid(self, Guid):
- self.__Guid.Guid = Guid
-
- def SetData(self, Databuff):
- self.__Data = Databuff
-
- def GetInfo(self):
- return self.__Guid
-
-
-class CIfrOrderedList(CIfrObj, CIfrOpHeader, CIfrQuestionHeader):
-
- def __init__(self):
- self.__OrderedList = EFI_IFR_ORDERED_LIST()
- CIfrOpHeader.__init__(self, self.__OrderedList.Header,
- EFI_IFR_ORDERED_LIST_OP)
- CIfrQuestionHeader.__init__(self, self.__OrderedList.Question)
- self.__OrderedList.MaxContainers = 0
- self.__OrderedList.Flags = 0
-
- def GetQuestion(self):
- return self
-
- def SetQHeaderFlags(self, Flags):
- CIfrQuestionHeader.SetFlags(self, Flags)
-
- def SetMaxContainers(self, MaxContainers):
- self.__OrderedList.MaxContainers = MaxContainers
-
- def SetFlags(self, HFlags, LFlags):
-
- ReturnCode = CIfrQuestionHeader.SetFlags(self, HFlags)
- if ReturnCode != VfrReturnCode.VFR_RETURN_SUCCESS:
- return ReturnCode
- LFlags, Ret = _FLAG_TEST_AND_CLEAR(LFlags, EFI_IFR_UNIQUE_SET)
- if Ret:
- self.__OrderedList.Flags |= EFI_IFR_UNIQUE_SET
-
- LFlags, Ret = _FLAG_TEST_AND_CLEAR(LFlags, EFI_IFR_NO_EMPTY_SET)
- if Ret:
- self.__OrderedList.Flags |= EFI_IFR_NO_EMPTY_SET
-
- return VfrReturnCode.VFR_RETURN_SUCCESS if LFlags == 0 else VfrReturnCode.VFR_RETURN_FLAGS_UNSUPPORTED
-
- def GetInfo(self):
- return self.__OrderedList
-
-
-class CIfrString(CIfrObj, CIfrOpHeader, CIfrQuestionHeader):
-
- def __init__(self):
- self.__Str = EFI_IFR_STRING()
- CIfrOpHeader.__init__(self, self.__Str.Header, EFI_IFR_STRING_OP)
- CIfrQuestionHeader.__init__(self, self.__Str.Question)
- self.__Str.Flags = 0
- self.__Str.MinSize = 0
- self.__Str.MaxSize = 0
-
- def GetQuestion(self):
- return self
-
- def SetQHeaderFlags(self, Flags):
- CIfrQuestionHeader.SetFlags(self, Flags)
-
- def SetFlags(self, HFlags, LFlags):
-
- ReturnCode = CIfrQuestionHeader.SetFlags(self, HFlags)
- if ReturnCode != VfrReturnCode.VFR_RETURN_SUCCESS:
- return ReturnCode
-
- LFlags, Ret = _FLAG_TEST_AND_CLEAR(LFlags, EFI_IFR_STRING_MULTI_LINE)
- if Ret:
- self.__Str.Flags |= EFI_IFR_STRING_MULTI_LINE
-
- return VfrReturnCode.VFR_RETURN_SUCCESS if LFlags == 0 else VfrReturnCode.VFR_RETURN_FLAGS_UNSUPPORTED
-
- def SetMinSize(self, MinSize):
- self.__Str.MinSize = MinSize
-
- def SetMaxSize(self, MaxSize):
- self.__Str.MaxSize = MaxSize
-
- def GetInfo(self):
- return self.__Str
-
-
-class CIfrPassword(CIfrObj, CIfrOpHeader, CIfrQuestionHeader):
-
- def __init__(self):
- self.__Password = EFI_IFR_PASSWORD()
- CIfrOpHeader.__init__(self, self.__Password.Header,
- EFI_IFR_PASSWORD_OP)
- CIfrQuestionHeader.__init__(self, self.__Password.Question)
- self.__Password.MinSize = 0
- self.__Password.MaxSize = 0
-
- def GetQuestion(self):
- return self
-
- def SetQHeaderFlags(self, Flags):
- CIfrQuestionHeader.SetFlags(self, Flags)
-
- def SetMinSize(self, MinSize):
- self.__Password.MinSize = MinSize
-
- def SetMaxSize(self, MaxSize):
- self.__Password.MaxSize = MaxSize
-
- def GetInfo(self):
- return self.__Password
-
-
-class CIfrDefault(CIfrObj, CIfrOpHeader):
-
- def __init__(self,
- Size,
- DefaultId=EFI_HII_DEFAULT_CLASS_STANDARD,
- Type=EFI_IFR_TYPE_OTHER,
- Value=EFI_IFR_TYPE_VALUE()):
- self.__Default = EFI_IFR_DEFAULT()
- CIfrOpHeader.__init__(self, self.__Default.Header, EFI_IFR_DEFAULT_OP,
- Size)
- self.__Default.Type = Type
- self.__Default.DefaultId = DefaultId
- self.__Default.Value = Value
-
- def SetDefaultId(self, DefaultId):
- self.__Default.DefaultId = DefaultId
-
- def SetType(self, Type):
- self.__Default.Type = Type
-
- def SetValue(self, Value):
- self.__Default.Value = Value
-
- def GetInfo(self):
- return self.__Default
-
-
-class CIfrDefault3(CIfrObj, CIfrOpHeader):
-
- def __init__(self,
- Size,
- Nums,
- ValueType,
- DefaultId=EFI_HII_DEFAULT_CLASS_STANDARD,
- Type=EFI_IFR_TYPE_OTHER,
- ValueList=[]):
- Header = EFI_IFR_OP_HEADER()
- CIfrOpHeader.__init__(self, Header, EFI_IFR_DEFAULT_OP, Size)
- self.__Default = Refine_EFI_IFR_DEFAULT(Nums)
- self.__Default.Header = Header
- self.__Default.Type = Type
- self.__Default.DefaultId = DefaultId
- self.__ValueType = ValueType
-
- if ValueList != []:
- ArrayType = EFI_IFR_TYPE_VALUE * Nums
- ValueArray = ArrayType()
- for i in range(0, len(ValueList)):
- ValueArray[i] = ValueList[i]
- self.__Default.Value = ValueArray
-
- def SetDefaultId(self, DefaultId):
- self.__Default.DefaultId = DefaultId
-
- def GetValueType(self):
- return self.__ValueType
-
- def SetType(self, Type):
- self.__Default.Type = Type
-
- def SetValue(self, ValueList):
- ArrayType = EFI_IFR_TYPE_VALUE * (len(ValueList))
- ValueArray = ArrayType()
- for i in range(0, len(ValueList)):
- ValueArray[i] = ValueList[i]
- self.__Default.Value = ValueArray
-
- def GetInfo(self):
- return self.__Default
-
-
-class CIfrDefault2(CIfrObj, CIfrOpHeader):
-
- def __init__(self,
- DefaultId=EFI_HII_DEFAULT_CLASS_STANDARD,
- Type=EFI_IFR_TYPE_OTHER):
- self.__Default = EFI_IFR_DEFAULT_2()
- CIfrOpHeader.__init__(self, self.__Default.Header, EFI_IFR_DEFAULT_OP)
- self.__Default.Type = Type
- self.__Default.DefaultId = DefaultId
-
- def SetDefaultId(self, DefaultId):
- self.__Default.DefaultId = DefaultId
-
- def SetType(self, Type):
- self.__Default.Type = Type
-
- def GetInfo(self):
- return self.__Default
-
-
-class CIfrInconsistentIf(CIfrObj, CIfrOpHeader):
-
- def __init__(self):
- self.__InconsistentIf = EFI_IFR_INCONSISTENT_IF()
- CIfrOpHeader.__init__(self, self.__InconsistentIf.Header,
- EFI_IFR_INCONSISTENT_IF_OP)
- self.__InconsistentIf.Error = EFI_STRING_ID_INVALID
-
- def SetError(self, Error):
- self.__InconsistentIf.Error = Error
-
-
-class CIfrNoSubmitIf(CIfrObj, CIfrOpHeader):
-
- def __init__(self):
- self.__NoSubmitIf = EFI_IFR_NO_SUBMIT_IF()
- CIfrOpHeader.__init__(self, self.__NoSubmitIf.Header,
- EFI_IFR_NO_SUBMIT_IF_OP)
- self.__NoSubmitIf.Error = EFI_STRING_ID_INVALID
-
- def SetError(self, Error):
- self.__NoSubmitIf.Error = Error
-
-
-class CIfrDisableIf(CIfrObj, CIfrOpHeader):
-
- def __init__(self):
- self.__DisableIf = EFI_IFR_DISABLE_IF()
- CIfrOpHeader.__init__(self, self.__DisableIf.Header,
- EFI_IFR_DISABLE_IF_OP)
-
-
-class CIfrSuppressIf(CIfrObj, CIfrOpHeader):
-
- def __init__(self):
- self.__SuppressIf = EFI_IFR_SUPPRESS_IF()
- CIfrOpHeader.__init__(self, self.__SuppressIf.Header,
- EFI_IFR_SUPPRESS_IF_OP)
-
-
-class CIfrGrayOutIf(CIfrObj, CIfrOpHeader):
-
- def __init__(self):
- self.__GrayOutIf = EFI_IFR_GRAY_OUT_IF()
- CIfrOpHeader.__init__(self, self.__GrayOutIf.Header,
- EFI_IFR_GRAY_OUT_IF_OP)
-
-
-class CIfrValue(CIfrObj, CIfrOpHeader):
-
- def __init__(self):
- self.__Value = EFI_IFR_VALUE()
- CIfrOpHeader.__init__(self, self.__Value.Header, EFI_IFR_VALUE_OP)
-
-
-class CIfrRead(CIfrObj, CIfrOpHeader):
-
- def __init__(self):
- self.__Read = EFI_IFR_READ()
- CIfrOpHeader.__init__(self, self.__Read.Header, EFI_IFR_READ_OP)
-
-
-class CIfrWrite(CIfrObj, CIfrOpHeader):
-
- def __init__(self):
- self.__Write = EFI_IFR_WRITE()
- CIfrOpHeader.__init__(self, self.__Write.Header, EFI_IFR_WRITE_OP)
-
-
-class CIfrWarningIf(CIfrObj, CIfrOpHeader):
-
- def __init__(self):
- self.__WarningIf = EFI_IFR_WARNING_IF()
- CIfrOpHeader.__init__(self, self.__WarningIf.Header,
- EFI_IFR_WARNING_IF_OP)
- self.__WarningIf.Warning = EFI_STRING_ID_INVALID
- self.__WarningIf.TimeOut = 0
-
- def SetWarning(self, Warning):
- self.__WarningIf.Warning = Warning
-
- def SetTimeOut(self, TimeOut):
- self.__WarningIf.TimeOut = TimeOut
-
- def GetInfo(self):
- return self.__WarningIf
-
-
-class CIfrRefresh(CIfrObj, CIfrOpHeader):
-
- def __init__(self):
- self.__Refresh = EFI_IFR_REFRESH()
- CIfrOpHeader.__init__(self, self.__Refresh.Header, EFI_IFR_REFRESH_OP)
- self.__Refresh.RefreshInterval = 0
-
- def SetRefreshInterval(self, RefreshInterval):
- self.__Refresh.RefreshInterval = RefreshInterval
-
- def GetInfo(self):
- return self.__Refresh
-
-
-class CIfrRefreshId(CIfrObj, CIfrOpHeader):
-
- def __init__(self):
- self.__RefreshId = EFI_IFR_REFRESH_ID()
- CIfrOpHeader.__init__(self, self.__RefreshId.Header,
- EFI_IFR_REFRESH_ID_OP)
- self.__RefreshId.RefreshEventGroupId = EFI_GUID(
- 0, 0, 0, GuidArray(0, 0, 0, 0, 0, 0, 0, 0))
-
- def SetRefreshEventGroutId(self, RefreshEventGroupId):
- self.__RefreshId.RefreshEventGroupId = RefreshEventGroupId
-
- def GetInfo(self):
- return self.__RefreshId
-
-
-class CIfrVarStoreDevice(CIfrObj, CIfrOpHeader):
-
- def __init__(self):
- self.__VarStoreDevice = EFI_IFR_VARSTORE_DEVICE()
- CIfrOpHeader.__init__(self, self.__VarStoreDevice.Header,
- EFI_IFR_VARSTORE_DEVICE_OP)
- self.__VarStoreDevice.DevicePath = EFI_STRING_ID_INVALID
-
- def SetDevicePath(self, DevicePath):
- self.__VarStoreDevice.DevicePath = DevicePath
-
- def GetInfo(self):
- return self.__VarStoreDevice
-
-
-class CIfrDate(CIfrObj, CIfrOpHeader, CIfrQuestionHeader):
-
- def __init__(self):
- self.__Date = EFI_IFR_DATE()
- CIfrOpHeader.__init__(self, self.__Date.Header, EFI_IFR_DATE_OP)
- CIfrQuestionHeader.__init__(self, self.__Date.Question)
- self.__Date.Flags = 0
-
- def SetFlags(self, HFlags, LFlags):
-
- ReturnCode = CIfrQuestionHeader.SetFlags(self, HFlags)
- if ReturnCode != VfrReturnCode.VFR_RETURN_SUCCESS:
- return ReturnCode
-
- LFlags, Ret = _FLAG_TEST_AND_CLEAR(LFlags, EFI_QF_DATE_YEAR_SUPPRESS)
- if Ret:
- self.__Date.Flags |= EFI_QF_DATE_YEAR_SUPPRESS
-
- LFlags, Ret = _FLAG_TEST_AND_CLEAR(LFlags, EFI_QF_DATE_MONTH_SUPPRESS)
- if Ret:
- self.__Date.Flags |= EFI_QF_DATE_MONTH_SUPPRESS
-
- LFlags, Ret = _FLAG_TEST_AND_CLEAR(LFlags, EFI_QF_DATE_DAY_SUPPRESS)
- if Ret:
- self.__Date.Flags |= EFI_QF_DATE_DAY_SUPPRESS
-
- LFlags, Ret = _FLAG_TEST_AND_CLEAR(LFlags, QF_DATE_STORAGE_NORMAL)
- if Ret:
- self.__Date.Flags |= QF_DATE_STORAGE_NORMAL
-
- LFlags, Ret = _FLAG_TEST_AND_CLEAR(LFlags, QF_DATE_STORAGE_TIME)
- if Ret:
- self.__Date.Flags |= QF_DATE_STORAGE_TIME
-
- LFlags, Ret = _FLAG_TEST_AND_CLEAR(LFlags, QF_DATE_STORAGE_WAKEUP)
- if Ret:
- self.__Date.Flags |= QF_DATE_STORAGE_WAKEUP
-
- return VfrReturnCode.VFR_RETURN_SUCCESS if LFlags == 0 else VfrReturnCode.VFR_RETURN_FLAGS_UNSUPPORTED
-
- def GetInfo(self):
- return self.__Date
-
-
-class CIfrTime(CIfrObj, CIfrOpHeader, CIfrQuestionHeader):
-
- def __init__(self):
- self.__Time = EFI_IFR_TIME()
- CIfrOpHeader.__init__(self, self.__Time.Header, EFI_IFR_TIME_OP)
- CIfrQuestionHeader.__init__(self, self.__Time.Question)
- self.__Time.Flags = 0
-
- def SetFlags(self, HFlags, LFlags):
-
- ReturnCode = CIfrQuestionHeader.SetFlags(self, HFlags)
- if ReturnCode != VfrReturnCode.VFR_RETURN_SUCCESS:
- return ReturnCode
-
- LFlags, Ret = _FLAG_TEST_AND_CLEAR(LFlags, QF_TIME_HOUR_SUPPRESS)
- if Ret:
- self.__Time.Flags |= QF_TIME_HOUR_SUPPRESS
-
- LFlags, Ret = _FLAG_TEST_AND_CLEAR(LFlags, QF_TIME_MINUTE_SUPPRESS)
- if Ret:
- self.__Time.Flags |= QF_TIME_MINUTE_SUPPRESS
-
- LFlags, Ret = _FLAG_TEST_AND_CLEAR(LFlags, QF_TIME_SECOND_SUPPRESS)
- if Ret:
- self.__Time.Flags |= QF_TIME_SECOND_SUPPRESS
-
- LFlags, Ret = _FLAG_TEST_AND_CLEAR(LFlags, QF_TIME_STORAGE_NORMAL)
- if Ret:
- self.__Time.Flags |= QF_TIME_STORAGE_NORMAL
-
- LFlags, Ret = _FLAG_TEST_AND_CLEAR(LFlags, QF_TIME_STORAGE_TIME)
- if Ret:
- self.__Time.Flags |= QF_TIME_STORAGE_TIME
-
- LFlags, Ret = _FLAG_TEST_AND_CLEAR(LFlags, QF_TIME_STORAGE_WAKEUP)
- if Ret:
- self.__Time.Flags |= QF_TIME_STORAGE_WAKEUP
-
- return VfrReturnCode.VFR_RETURN_SUCCESS if LFlags == 0 else VfrReturnCode.VFR_RETURN_FLAGS_UNSUPPORTED
-
- def GetInfo(self):
- return self.__Time
-
-
-class CIfrNumeric(CIfrObj, CIfrOpHeader, CIfrQuestionHeader,
- CIfrMinMaxStepData):
-
- def __init__(self):
- self.__Numeric = EFI_IFR_NUMERIC() # data
- CIfrOpHeader.__init__(self, self.__Numeric.Header, EFI_IFR_NUMERIC_OP)
- CIfrQuestionHeader.__init__(self, self.__Numeric.Question)
- CIfrMinMaxStepData.__init__(self, self.__Numeric.Data, True)
- self.__Numeric.Flags = EFI_IFR_NUMERIC_SIZE_1 | EFI_IFR_DISPLAY_UINT_DEC
-
- def GetQuestion(self):
- return self
-
- def GetMinMaxData(self):
- return self
-
- def SetQHeaderFlags(self, Flags):
- CIfrQuestionHeader.SetFlags(self, Flags)
-
- def SetFlags(self, HFlags, LFlags, DisplaySettingsSpecified=False):
- ReturnCode = CIfrQuestionHeader.SetFlags(self, HFlags)
- if ReturnCode != VfrReturnCode.VFR_RETURN_SUCCESS:
- return ReturnCode
- if DisplaySettingsSpecified == False:
- self.__Numeric.Flags = LFlags | EFI_IFR_DISPLAY_UINT_DEC
- else:
- self.__Numeric.Flags = LFlags
- return VfrReturnCode.VFR_RETURN_SUCCESS
-
- def SetFlagsForBitField(self,
- HFlags,
- LFlags,
- DisplaySettingsSpecified=False):
- ReturnCode = CIfrQuestionHeader.SetFlags(self, HFlags)
- if ReturnCode != VfrReturnCode.VFR_RETURN_SUCCESS:
- return ReturnCode
- if DisplaySettingsSpecified == False:
- self.__Numeric.Flags = LFlags | EDKII_IFR_DISPLAY_UINT_DEC_BIT
- else:
- self.__Numeric.Flags = LFlags
- return VfrReturnCode.VFR_RETURN_SUCCESS
-
- def GetNumericFlags(self):
- return self.__Numeric.Flags
-
- def ShrinkBinSize(self, Size):
- self.ShrinkBinSize(Size)
- self.DecLength(Size)
- # _EMIT_PENDING_OBJ();
- Numeric = EFI_IFR_NUMERIC()
- self.UpdateHeader(Numeric.Header)
-
- def GetInfo(self):
- return self.__Numeric
-
-
-class CIfrOneOf(
- CIfrQuestionHeader,
- CIfrObj,
- CIfrOpHeader,
-):
-
- def __init__(self):
- self.__OneOf = EFI_IFR_ONE_OF()
- CIfrOpHeader.__init__(self, self.__OneOf.Header, EFI_IFR_ONE_OF_OP)
- CIfrQuestionHeader.__init__(self, self.__OneOf.Question)
- self.__OneOf.Flags = 0
-
- def GetQuestion(self):
- return self
-
- def GetMinMaxData(self):
- return self
-
- def SetQHeaderFlags(self, Flags):
- CIfrQuestionHeader.SetFlags(self, Flags)
-
- def SetFlags(self, HFlags, LFlags):
- ReturnCode = CIfrQuestionHeader.SetFlags(self, HFlags)
- if ReturnCode != VfrReturnCode.VFR_RETURN_SUCCESS:
- return ReturnCode
- if LFlags & EFI_IFR_DISPLAY:
- self.__OneOf.Flags = LFlags
- else:
- self.__OneOf.Flags = LFlags | EFI_IFR_DISPLAY_UINT_DEC
- return VfrReturnCode.VFR_RETURN_SUCCESS
-
- def SetFlagsForBitField(self, HFlags, LFlags):
- ReturnCode = CIfrQuestionHeader.SetFlags(self, HFlags)
- if ReturnCode != VfrReturnCode.VFR_RETURN_SUCCESS:
- return ReturnCode
- if LFlags & EDKII_IFR_DISPLAY_BIT:
- self.__OneOf.Flags = LFlags
- else:
- self.__OneOf.Flags = LFlags | EDKII_IFR_DISPLAY_UINT_DEC_BIT
- return VfrReturnCode.VFR_RETURN_SUCCESS
-
- def GetInfo(self):
- return self.__OneOf
-
-
-class CIfrCheckBox(CIfrObj, CIfrOpHeader, CIfrQuestionHeader):
-
- def __init__(self):
- self.__CheckBox = EFI_IFR_CHECKBOX()
- CIfrOpHeader.__init__(self, self.__CheckBox.Header,
- EFI_IFR_CHECKBOX_OP)
- CIfrQuestionHeader.__init__(self, self.__CheckBox.Question)
- self.__CheckBox.Flags = 0
-
- def GetQuestion(self):
- return self
-
- def SetQHeaderFlags(self, Flags):
- CIfrQuestionHeader.SetFlags(self, Flags)
-
- def GetFlags(self):
- return self.__CheckBox.Flags
-
- def SetFlags(self, HFlags, LFlags):
-
- ReturnCode = CIfrQuestionHeader.SetFlags(self, HFlags)
- if ReturnCode != VfrReturnCode.VFR_RETURN_SUCCESS:
- return ReturnCode
-
- LFlags, Ret = _FLAG_TEST_AND_CLEAR(LFlags, EFI_IFR_CHECKBOX_DEFAULT)
- if Ret:
- self.__CheckBox.Flags |= EFI_IFR_CHECKBOX_DEFAULT
-
- LFlags, Ret = _FLAG_TEST_AND_CLEAR(LFlags,
- EFI_IFR_CHECKBOX_DEFAULT_MFG)
-
- if Ret:
- self.__CheckBox.Flags |= EFI_IFR_CHECKBOX_DEFAULT_MFG
-
- return VfrReturnCode.VFR_RETURN_SUCCESS if LFlags == 0 else VfrReturnCode.VFR_RETURN_FLAGS_UNSUPPORTED
-
- def GetInfo(self):
- return self.__CheckBox
-
-
-class CIfrResetButton(CIfrObj, CIfrOpHeader, CIfrStatementHeader):
-
- def __init__(self):
- self.__ResetButton = EFI_IFR_RESET_BUTTON()
- CIfrOpHeader.__init__(self, self.__ResetButton.Header,
- EFI_IFR_RESET_BUTTON_OP)
- CIfrStatementHeader.__init__(self, self.__ResetButton.Statement)
- self.__ResetButton.DefaultId = EFI_HII_DEFAULT_CLASS_STANDARD
-
- def SetDefaultId(self, DefaultId):
- self.__ResetButton.DefaultId = DefaultId
-
- def GetInfo(self):
- return self.__ResetButton
-
-
-class CIfrOr(CIfrObj, CIfrOpHeader):
-
- def __init__(self, LineNo):
- self.__Or = EFI_IFR_OR()
- CIfrOpHeader.__init__(self, self.__Or.Header, EFI_IFR_OR_OP)
- self.SetLineNo(LineNo)
-
-
-class CIfrAnd(CIfrObj, CIfrOpHeader):
-
- def __init__(self, LineNo):
- self.__And = EFI_IFR_AND()
- CIfrOpHeader.__init__(self, self.__And.Header, EFI_IFR_AND_OP)
- self.SetLineNo(LineNo)
-
-
-class CIfrBitWiseOr(CIfrObj, CIfrOpHeader):
-
- def __init__(self, LineNo):
- self.__BitWiseOr = EFI_IFR_BITWISE_OR()
- CIfrOpHeader.__init__(self, self.__BitWiseOr.Header,
- EFI_IFR_BITWISE_OR_OP)
- self.SetLineNo(LineNo)
-
-
-class CIfrCatenate(CIfrObj, CIfrOpHeader):
-
- def __init__(self, LineNo):
- self.__Catenate = EFI_IFR_CATENATE()
- CIfrOpHeader.__init__(self, self.__Catenate.Header,
- EFI_IFR_CATENATE_OP)
- self.SetLineNo(LineNo)
-
-
-class CIfrDivide(CIfrObj, CIfrOpHeader):
-
- def __init__(self, LineNo):
- self.__Divide = EFI_IFR_DIVIDE()
- CIfrOpHeader.__init__(self, self.__Divide.Header, EFI_IFR_DIVIDE_OP)
- self.SetLineNo(LineNo)
-
-
-class CIfrEqual(CIfrObj, CIfrOpHeader):
-
- def __init__(self, LineNo):
- self.__Equal = EFI_IFR_EQUAL()
- CIfrOpHeader.__init__(self, self.__Equal.Header, EFI_IFR_EQUAL_OP)
- self.SetLineNo(LineNo)
-
-
-class CIfrGreaterEqual(CIfrObj, CIfrOpHeader):
-
- def __init__(self, LineNo):
- self.__GreaterEqual = EFI_IFR_GREATER_EQUAL()
- CIfrOpHeader.__init__(self, self.__GreaterEqual.Header,
- EFI_IFR_GREATER_EQUAL_OP)
- self.SetLineNo(LineNo)
-
-
-class CIfrGreaterThan(CIfrObj, CIfrOpHeader):
-
- def __init__(self, LineNo):
- self.__GreaterThan = EFI_IFR_GREATER_THAN()
- CIfrOpHeader.__init__(self, self.__GreaterThan.Header,
- EFI_IFR_GREATER_THAN_OP)
- self.SetLineNo(LineNo)
-
-
-class CIfrLessEqual(CIfrObj, CIfrOpHeader):
-
- def __init__(self, LineNo):
- self.__LessEqual = EFI_IFR_LESS_EQUAL()
- CIfrOpHeader.__init__(self, self.__LessEqual.Header,
- EFI_IFR_LESS_EQUAL_OP)
- self.SetLineNo(LineNo)
-
-
-class CIfrLessThan(CIfrObj, CIfrOpHeader):
-
- def __init__(self, LineNo):
- self.__LessThan = EFI_IFR_LESS_THAN()
- CIfrOpHeader.__init__(self, self.__LessThan.Header,
- EFI_IFR_LESS_THAN_OP)
- self.SetLineNo(LineNo)
-
-
-class CIfrMap(CIfrObj, CIfrOpHeader):
-
- def __init__(self, LineNo):
- self.__Map = EFI_IFR_MAP()
- CIfrOpHeader.__init__(self, self.__Map.Header, EFI_IFR_MAP_OP)
- self.SetLineNo(LineNo)
-
-
-class CIfrMatch(CIfrObj, CIfrOpHeader):
-
- def __init__(self, LineNo):
- self.__Match = EFI_IFR_MATCH()
- CIfrOpHeader.__init__(self, self.__Match.Header, EFI_IFR_MATCH_OP)
- self.SetLineNo(LineNo)
-
-
-class CIfrMatch2(CIfrObj, CIfrOpHeader):
-
- def __init__(self, LineNo, Guid):
- self.__Match2 = EFI_IFR_MATCH2()
- CIfrOpHeader.__init__(self, self.__Match2.Header, EFI_IFR_MATCH2_OP)
- self.SetLineNo(LineNo)
- self.__Match2.SyntaxType = Guid
-
-
-class CIfrMultiply(CIfrObj, CIfrOpHeader):
-
- def __init__(self, LineNo):
- self.__Multiply = EFI_IFR_MULTIPLY()
- CIfrOpHeader.__init__(self, self.__Multiply.Header,
- EFI_IFR_MULTIPLY_OP)
- self.SetLineNo(LineNo)
-
-
-class CIfrModulo(CIfrObj, CIfrOpHeader):
-
- def __init__(self, LineNo):
- self.__Modulo = EFI_IFR_MODULO()
- CIfrOpHeader.__init__(self, self.__Modulo.Header, EFI_IFR_MODULO_OP)
- self.SetLineNo(LineNo)
-
-
-class CIfrNotEqual(CIfrObj, CIfrOpHeader):
-
- def __init__(self, LineNo):
- self.__NotEqual = EFI_IFR_NOT_EQUAL()
- CIfrOpHeader.__init__(self, self.__NotEqual.Header,
- EFI_IFR_NOT_EQUAL_OP)
- self.SetLineNo(LineNo)
-
-
-class CIfrShiftLeft(CIfrObj, CIfrOpHeader):
-
- def __init__(self, LineNo):
- self.__ShiftLeft = EFI_IFR_SHIFT_LEFT()
- CIfrOpHeader.__init__(self, self.__ShiftLeft.Header,
- EFI_IFR_SHIFT_LEFT_OP)
- self.SetLineNo(LineNo)
-
-
-class CIfrShiftRight(CIfrObj, CIfrOpHeader):
-
- def __init__(self, LineNo):
- self.__ShiftRight = EFI_IFR_SHIFT_RIGHT()
- CIfrOpHeader.__init__(self, self.__ShiftRight.Header,
- EFI_IFR_SHIFT_RIGHT_OP)
- self.SetLineNo(LineNo)
-
-
-class CIfrSubtract(CIfrObj, CIfrOpHeader):
-
- def __init__(self, LineNo):
- self.__Subtract = EFI_IFR_SUBTRACT()
- CIfrOpHeader.__init__(self, self.__Subtract.Header,
- EFI_IFR_SUBTRACT_OP)
- self.SetLineNo(LineNo)
-
-
-class CIfrConditional(CIfrObj, CIfrOpHeader):
-
- def __init__(self, LineNo):
- self.__Conditional = EFI_IFR_CONDITIONAL()
- CIfrOpHeader.__init__(self, self.__Conditional.Header,
- EFI_IFR_CONDITIONAL_OP)
- self.SetLineNo(LineNo)
-
-
-class CIfrFind(CIfrObj, CIfrOpHeader):
-
- def __init__(self, LineNo):
- self.__Find = EFI_IFR_FIND()
- CIfrOpHeader.__init__(self, self.__Find.Header, EFI_IFR_FIND_OP)
- self.SetLineNo(LineNo)
-
- def SetFormat(self, Format):
- self.__Find.Format = Format
-
-
-class CIfrMid(CIfrObj, CIfrOpHeader):
-
- def __init__(self, LineNo):
- self.__Mid = EFI_IFR_MID()
- CIfrOpHeader.__init__(self, self.__Mid.Header, EFI_IFR_MID_OP)
- self.SetLineNo(LineNo)
-
-
-class CIfrToken(CIfrObj, CIfrOpHeader):
-
- def __init__(self, LineNo):
- self.__Token = EFI_IFR_TOKEN()
- CIfrOpHeader.__init__(self, self.__Token.Header, EFI_IFR_TOKEN_OP)
- self.SetLineNo(LineNo)
-
-
-class CIfrSpan(CIfrObj, CIfrOpHeader):
-
- def __init__(self, LineNo):
- self.__Span = EFI_IFR_SPAN()
- CIfrOpHeader.__init__(self, self.__Span.Header, EFI_IFR_SPAN_OP)
- self.SetLineNo(LineNo)
- self.__Span.Flags = EFI_IFR_FLAGS_FIRST_MATCHING
-
- def SetFlags(self, LFlags):
- if LFlags == EFI_IFR_FLAGS_FIRST_MATCHING:
- self.__Span.Flags |= EFI_IFR_FLAGS_FIRST_MATCHING
- else:
- LFlags, Ret = _FLAG_TEST_AND_CLEAR(
- LFlags, EFI_IFR_FLAGS_FIRST_NON_MATCHING)
- if Ret:
- self.__Span.Flags |= EFI_IFR_FLAGS_FIRST_NON_MATCHING
-
- return VfrReturnCode.VFR_RETURN_SUCCESS if LFlags == 0 else VfrReturnCode.VFR_RETURN_FLAGS_UNSUPPORTED
-
-
-class CIfrBitWiseAnd(CIfrObj, CIfrOpHeader):
-
- def __init__(self, LineNo):
- self.__BitWiseAnd = EFI_IFR_BITWISE_AND()
- CIfrOpHeader.__init__(self, self.__BitWiseAnd.Header,
- EFI_IFR_BITWISE_AND_OP)
- self.SetLineNo(LineNo)
-
-
-class CIfrBitWiseOr(CIfrObj, CIfrOpHeader):
-
- def __init__(self, LineNo):
- self.__BitWiseOr = EFI_IFR_BITWISE_OR()
- CIfrOpHeader.__init__(self, self.__BitWiseOr.Header,
- EFI_IFR_BITWISE_OR_OP)
- self.SetLineNo(LineNo)
-
-
-class CIfrAdd(CIfrObj, CIfrOpHeader):
-
- def __init__(self, LineNo):
- self.__Add = EFI_IFR_ADD()
- CIfrOpHeader.__init__(self, self.__Add.Header, EFI_IFR_ADD_OP)
- self.SetLineNo(LineNo)
-
-
-class CIfrToString(CIfrObj, CIfrOpHeader):
-
- def __init__(self, LineNo):
- self.__ToString = EFI_IFR_TO_STRING()
- CIfrOpHeader.__init__(self, self.__ToString.Header,
- EFI_IFR_TO_STRING_OP)
- self.SetLineNo(LineNo)
-
- def SetFormat(self, Format):
- self.__ToString.Format = Format
-
-
-class CIfrToUpper(CIfrObj, CIfrOpHeader):
-
- def __init__(self, LineNo):
- self.__ToUppper = EFI_IFR_TO_UPPER()
- CIfrOpHeader.__init__(self, self.__ToUppper.Header,
- EFI_IFR_TO_UPPER_OP)
- self.SetLineNo(LineNo)
-
-
-class CIfrToUint(CIfrObj, CIfrOpHeader):
-
- def __init__(self, LineNo):
- self.__ToUint = EFI_IFR_TO_UINT()
- CIfrOpHeader.__init__(self, self.__ToUint.Header, EFI_IFR_TO_UINT_OP)
- self.SetLineNo(LineNo)
-
-
-class CIfrToLower(CIfrObj, CIfrOpHeader):
-
- def __init__(self, LineNo):
- self.__ToLower = EFI_IFR_TO_LOWER()
- CIfrOpHeader.__init__(self, self.__ToLower.Header, EFI_IFR_TO_LOWER_OP)
- self.SetLineNo(LineNo)
-
-
-class CIfrToBoolean(CIfrObj, CIfrOpHeader):
-
- def __init__(self, LineNo):
- self.__Boolean = EFI_IFR_TO_BOOLEAN()
- CIfrOpHeader.__init__(self, self.__Boolean.Header,
- EFI_IFR_TO_BOOLEAN_OP)
- self.SetLineNo(LineNo)
-
-
-class CIfrNot(CIfrObj, CIfrOpHeader):
-
- def __init__(self, LineNo):
- self.__Not = EFI_IFR_NOT()
- CIfrOpHeader.__init__(self, self.__Not.Header, EFI_IFR_NOT_OP)
- self.SetLineNo(LineNo)
-
-
-class CIfrDup(CIfrObj, CIfrOpHeader):
-
- def __init__(self, LineNo):
- self.__Dup = EFI_IFR_DUP()
- CIfrOpHeader.__init__(self, self.__Dup.Header, EFI_IFR_DUP_OP)
- self.SetLineNo(LineNo)
-
- def GetHeader(self):
- return self.__Dup.Header
-
-
-class CIfrEqIdId(CIfrObj, CIfrOpHeader):
-
- def __init__(self, LineNo):
- self.__EqIdId = EFI_IFR_EQ_ID_ID()
- CIfrOpHeader.__init__(self, self.__EqIdId.Header, EFI_IFR_EQ_ID_ID_OP)
- self.SetLineNo(LineNo)
- self.__EqIdId.QuestionId1 = EFI_QUESTION_ID_INVALID
- self.__EqIdId.QuestionId2 = EFI_QUESTION_ID_INVALID
-
- def GetHeader(self):
- return self.__EqIdId.Header
-
- def SetQuestionId1(self, QuestionId, VarIdStr, LineNo):
- if QuestionId != EFI_QUESTION_ID_INVALID:
- self.__EqIdId.QuestionId1 = QuestionId
- else:
- pass
-
- def SetQuestionId2(self, QuestionId, VarIdStr, LineNo):
- if QuestionId != EFI_QUESTION_ID_INVALID:
- self.__EqIdId.QuestionId2 = QuestionId
- else:
- pass
-
-
-class CIfrEqIdVal(CIfrObj, CIfrOpHeader):
-
- def __init__(self, LineNo):
- self.__EqIdVal = EFI_IFR_EQ_ID_VAL()
- CIfrOpHeader.__init__(self, self.__EqIdVal.Header,
- EFI_IFR_EQ_ID_VAL_OP)
- self.SetLineNo(LineNo)
- self.__EqIdVal.QuestionId = EFI_QUESTION_ID_INVALID
-
- def SetQuestionId(self, QuestionId, VarIdStr, LineNo):
- if QuestionId != EFI_QUESTION_ID_INVALID:
- self.__EqIdVal.QuestionId = QuestionId
- else:
- pass
-
- def SetValue(self, Value):
- self.__EqIdVal.Value = Value
-
- def GetHeader(self):
- return self.__EqIdVal.Header
-
-
-class CIfrEqIdList(CIfrObj, CIfrOpHeader):
-
- def __init__(self, LineNo, Nums, ValueList=[]):
- self.__EqIdVList = Refine_EFI_IFR_EQ_ID_VAL_LIST(Nums)
- Header = EFI_IFR_OP_HEADER()
- CIfrOpHeader.__init__(self, Header, EFI_IFR_EQ_ID_VAL_OP)
- self.SetLineNo(LineNo)
- self.__EqIdVList.Header = Header
- self.__EqIdVList.QuestionId = EFI_QUESTION_ID_INVALID
- self.__EqIdVList.ListLength = 0
- if ValueList != []:
- ArrayType = c_uint16 * Nums
- ValueArray = ArrayType()
- for i in range(0, len(ValueList)):
- ValueArray[i] = ValueList[i]
- self.__EqIdVList.ValueList = ValueArray
-
- def SetQuestionId(self, QuestionId, VarIdStr, LineNo):
- if QuestionId != EFI_QUESTION_ID_INVALID:
- self.__EqIdVList.QuestionId = QuestionId
- else:
- pass
-
- def SetListLength(self, ListLength):
- self.__EqIdVList.ListLength = ListLength
-
- def SetValueList(self, ValueList):
- if ValueList != []:
- ArrayType = c_uint16 * len(ValueList)
- ValueArray = ArrayType()
- for i in range(0, len(ValueList)):
- ValueArray[i] = ValueList[i]
- self.__EqIdVList.ValueList = ValueArray
-
- def GetHeader(self):
- return self.__EqIdVList.Header
-
-
-class CIfrUint8(CIfrObj, CIfrOpHeader):
-
- def __init__(self, LineNo):
- self.__Uint8 = EFI_IFR_UINT8()
- CIfrOpHeader.__init__(self, self.__Uint8.Header, EFI_IFR_UINT8_OP)
- self.SetLineNo(LineNo)
-
- def SetValue(self, Value):
- self.__Uint8.Value = Value
-
- def GetHeader(self):
- return self.__Uint8.Header
-
-
-class CIfrUint16(CIfrObj, CIfrOpHeader):
-
- def __init__(self, LineNo):
- self.__Uint16 = EFI_IFR_UINT16()
- CIfrOpHeader.__init__(self, self.__Uint16.Header, EFI_IFR_UINT16_OP)
- self.SetLineNo(LineNo)
-
- def SetValue(self, Value):
- self.__Uint16.Value = Value
-
- def GetHeader(self):
- return self.__Uint16.Header
-
-
-class CIfrUint32(CIfrObj, CIfrOpHeader):
-
- def __init__(self, LineNo):
- self.__Uint32 = EFI_IFR_UINT32()
- CIfrOpHeader.__init__(self, self.__Uint32.Header, EFI_IFR_UINT32_OP)
- self.SetLineNo(LineNo)
-
- def SetValue(self, Value):
- self.__Uint32.Value = Value
-
- def GetHeader(self):
- return self.__Uint32.Header
-
-
-class CIfrUint64(CIfrObj, CIfrOpHeader):
-
- def __init__(self, LineNo):
- self.__Uint64 = EFI_IFR_UINT64()
- CIfrOpHeader.__init__(self, self.__Uint64.Header, EFI_IFR_UINT64_OP)
- self.SetLineNo(LineNo)
-
- def SetValue(self, Value):
- self.__Uint64.Value = Value
-
- def GetHeader(self):
- return self.__Uint64.Header
-
-
-class CIfrQuestionRef1(CIfrObj, CIfrOpHeader):
-
- def __init__(self, LineNo):
- self.__QuestionRef1 = EFI_IFR_QUESTION_REF1()
- CIfrOpHeader.__init__(self, self.__QuestionRef1.Header,
- EFI_IFR_QUESTION_REF1_OP)
- self.SetLineNo(LineNo)
- self.__QuestionRef1.QuestionId = EFI_QUESTION_ID_INVALID
-
- def GetHeader(self):
- return self.__QuestionRef1.Header
-
- def SetQuestionId(self, QuestionId, VarIdStr, LineNo):
- if QuestionId != EFI_QUESTION_ID_INVALID:
- self.__QuestionRef1.QuestionId = QuestionId
- else:
- pass
-
-
-class CIfrQuestionRef2(CIfrObj, CIfrOpHeader):
-
- def __init__(self, LineNo):
- self.__QuestionRef2 = EFI_IFR_QUESTION_REF2()
- CIfrOpHeader.__init__(self, self.__QuestionRef2.Header,
- EFI_IFR_QUESTION_REF2_OP)
- self.SetLineNo(LineNo)
-
- def GetHeader(self):
- return self.__QuestionRef2.Header
-
-
-class CIfrQuestionRef3(CIfrObj, CIfrOpHeader):
-
- def __init__(self, LineNo):
- self.__QuestionRef3 = EFI_IFR_QUESTION_REF3()
- CIfrOpHeader.__init__(self, self.__QuestionRef3.Header,
- EFI_IFR_QUESTION_REF3_OP)
- self.SetLineNo(LineNo)
-
- def GetHeader(self):
- return self.__QuestionRef3.Header
-
-
-class CIfrQuestionRef3_2(CIfrObj, CIfrOpHeader):
-
- def __init__(self, LineNo):
- self.__QuestionRef3_2 = EFI_IFR_QUESTION_REF3_2()
- CIfrOpHeader.__init__(self, self.__QuestionRef3_2.Header,
- EFI_IFR_QUESTION_REF3_OP)
- self.SetLineNo(LineNo)
- self.__QuestionRef3_2.DevicePath = EFI_STRING_ID_INVALID
-
- def SetDevicePath(self, DevicePath):
- self.__QuestionRef3_2.DevicePath = DevicePath
-
- def GetHeader(self):
- return self.__QuestionRef3_2.Header
-
-
-class CIfrQuestionRef3_3(CIfrObj, CIfrOpHeader):
-
- def __init__(self, LineNo):
- self.__QuestionRef3_3 = EFI_IFR_QUESTION_REF3_3()
- CIfrOpHeader.__init__(self, self.__QuestionRef3_3.Header,
- EFI_IFR_QUESTION_REF3_OP)
- self.SetLineNo(LineNo)
- self.__QuestionRef3_3.DevicePath = EFI_STRING_ID_INVALID
- self.__QuestionRef3_3.Guid = EFI_GUID(
- 0, 0, 0, GuidArray(0, 0, 0, 0, 0, 0, 0, 0))
-
- def SetDevicePath(self, DevicePath):
- self.__QuestionRef3_3.DevicePath = DevicePath
-
- def SetGuid(self, Guid):
- self.__QuestionRef3_3.Guid = Guid
-
- def GetHeader(self):
- return self.__QuestionRef3_3.Header
-
-
-class CIfrRuleRef(CIfrObj, CIfrOpHeader):
-
- def __init__(self, LineNo):
- self.__RuleRef = EFI_IFR_RULE_REF()
- CIfrOpHeader.__init__(self, self.__RuleRef.Header, EFI_IFR_RULE_REF_OP)
- self.SetLineNo(LineNo)
- self.__RuleRef.RuleId = EFI_RULE_ID_INVALID
-
- def SetRuleId(self, RuleId):
- self.__RuleRef.RuleId = RuleId
-
- def GetHeader(self):
- return self.__RuleRef.Header
-
-
-class CIfrStringRef1(CIfrObj, CIfrOpHeader):
-
- def __init__(self, LineNo):
- self.__StringRef1 = EFI_IFR_STRING_REF1()
- CIfrOpHeader.__init__(self, self.__StringRef1.Header,
- EFI_IFR_STRING_REF1_OP)
- self.SetLineNo(LineNo)
- self.__StringRef1.StringId = EFI_STRING_ID_INVALID
-
- def SetStringId(self, StringId):
- self.__StringRef1.StringId = StringId
-
- def GetHeader(self):
- return self.__StringRef1.Header
-
-
-class CIfrStringRef2(CIfrObj, CIfrOpHeader):
-
- def __init__(self, LineNo):
- self.__StringRef2 = EFI_IFR_STRING_REF2()
- CIfrOpHeader.__init__(self, self.__StringRef2.Header,
- EFI_IFR_STRING_REF2_OP)
- self.SetLineNo(LineNo)
-
- def GetHeader(self):
- return self.__StringRef2.Header
-
-
-class CIfrThis(CIfrObj, CIfrOpHeader):
-
- def __init__(self, LineNo):
- self.__This = EFI_IFR_THIS()
- CIfrOpHeader.__init__(self, self.__This.Header, EFI_IFR_THIS_OP)
- self.SetLineNo(LineNo)
-
- def GetHeader(self):
- return self.__This.Header
-
-
-class CIfrSecurity(CIfrObj, CIfrOpHeader):
-
- def __init__(self, LineNo):
- self.__Security = EFI_IFR_SECURITY()
- CIfrOpHeader.__init__(self, self.__Security.Header,
- EFI_IFR_SECURITY_OP)
- self.SetLineNo(LineNo)
- self.__Security.Permissions = EFI_GUID(
- 0, 0, 0, GuidArray(0, 0, 0, 0, 0, 0, 0, 0))
-
- def SetPermissions(self, Permissions):
- self.__Security.Permissions = Permissions
-
- def GetHeader(self):
- return self.__Security.Header
-
-
-class CIfrGet(CIfrObj, CIfrOpHeader):
-
- def __init__(self, LineNo):
- self.__Get = EFI_IFR_GET()
- CIfrOpHeader.__init__(self, self.__Get.Header, EFI_IFR_GET_OP)
- self.SetLineNo(LineNo)
-
- def SetVarInfo(self, BaseInfo: EFI_VARSTORE_INFO):
- self.__Get.VarStoreId = BaseInfo.VarStoreId
- self.__Get.VarStoreInfo.VarName = BaseInfo.Info.VarName
- self.__Get.VarStoreInfo.VarOffset = BaseInfo.Info.VarOffset
- self.__Get.VarStoreType = BaseInfo.VarType
-
- def GetHeader(self):
- return self.__Get.Header
-
-
-class CIfrSet(CIfrObj, CIfrOpHeader):
-
- def __init__(self, LineNo):
- self.__Set = EFI_IFR_SET()
- CIfrOpHeader.__init__(self, self.__Set.Header, EFI_IFR_SET_OP)
- self.SetLineNo(LineNo)
-
- def SetVarInfo(self, BaseInfo: EFI_VARSTORE_INFO):
- self.__Set.VarStoreId = BaseInfo.VarStoreId
- self.__Set.VarStoreInfo.VarName = BaseInfo.Info.VarName
- self.__Set.VarStoreInfo.VarOffset = BaseInfo.Info.VarOffset
- self.__Set.VarStoreType = BaseInfo.VarType
-
- def GetHeader(self):
- return self.__Set.Header
-
-
-class CIfrTrue(CIfrObj, CIfrOpHeader):
-
- def __init__(self, LineNo):
- self.__True = EFI_IFR_TRUE()
- CIfrOpHeader.__init__(self, self.__True.Header, EFI_IFR_TRUE_OP)
- self.SetLineNo(LineNo)
-
- def GetHeader(self):
- return self.__True.Header
-
-
-class CIfrFalse(CIfrObj, CIfrOpHeader):
-
- def __init__(self, LineNo):
- self.__False = EFI_IFR_TRUE()
- CIfrOpHeader.__init__(self, self.__False.Header, EFI_IFR_FALSE_OP)
- self.SetLineNo(LineNo)
-
- def GetHeader(self):
- return self.__False.Header
-
-
-class CIfrOne(CIfrObj, CIfrOpHeader):
-
- def __init__(self, LineNo):
- self.__One = EFI_IFR_ONE()
- CIfrOpHeader.__init__(self, self.__One.Header, EFI_IFR_ONE_OP)
- self.SetLineNo(LineNo)
-
- def GetHeader(self):
- return self.__One.Header
-
-
-class CIfrOnes(CIfrObj, CIfrOpHeader):
-
- def __init__(self, LineNo):
- self.__Ones = EFI_IFR_ONE()
- CIfrOpHeader.__init__(self, self.__Ones.Header, EFI_IFR_ONES_OP)
- self.SetLineNo(LineNo)
-
- def GetHeader(self):
- return self.__Ones.Header
-
-
-class CIfrZero(CIfrObj, CIfrOpHeader):
-
- def __init__(self, LineNo):
- self.__Zero = EFI_IFR_ZERO()
- CIfrOpHeader.__init__(self, self.__Zero.Header, EFI_IFR_ZERO_OP)
- self.SetLineNo(LineNo)
-
- def GetHeader(self):
- return self.__Zero.Header
-
-
-class CIfrUndefined(CIfrObj, CIfrOpHeader):
-
- def __init__(self, LineNo):
- self.__Undefined = EFI_IFR_ZERO()
- CIfrOpHeader.__init__(self, self.__Undefined.Header,
- EFI_IFR_UNDEFINED_OP)
- self.SetLineNo(LineNo)
-
- def GetHeader(self):
- return self.__Undefined.Header
-
-
-class CIfrVersion(CIfrObj, CIfrOpHeader):
-
- def __init__(self, LineNo):
- self.__Version = EFI_IFR_VERSION()
- CIfrOpHeader.__init__(self, self.__Version.Header, EFI_IFR_VERSION_OP)
- self.SetLineNo(LineNo)
-
- def GetHeader(self):
- return self.__Version.Header
-
-
-class CIfrLength(CIfrObj, CIfrOpHeader):
-
- def __init__(self, LineNo):
- self.__Length = EFI_IFR_LENGTH()
- CIfrOpHeader.__init__(self, self.__Length.Header, EFI_IFR_LENGTH_OP)
- self.SetLineNo(LineNo)
-
-
-class CIfrBitWiseNot(CIfrObj, CIfrOpHeader):
-
- def __init__(self, LineNo):
- self.__BitWiseNot = EFI_IFR_BITWISE_NOT()
- CIfrOpHeader.__init__(self, self.__BitWiseNot.Header,
- EFI_IFR_BITWISE_NOT_OP)
- self.SetLineNo(LineNo)
-
-
-class ExpressionInfo():
-
- def __init__(self):
- self.RootLevel = 0
- self.ExpOpCount = 0
\ No newline at end of file
diff --git a/BaseTools/Source/Python/VfrCompiler/VfrSyntax.g4 b/BaseTools/Source/Python/VfrCompiler/VfrSyntax.g4
index 39de106a52..21aa81d195 100644
--- a/BaseTools/Source/Python/VfrCompiler/VfrSyntax.g4
+++ b/BaseTools/Source/Python/VfrCompiler/VfrSyntax.g4
@@ -1,17 +1,25 @@
+//// @file
+// vfr syntax
+//
+// Copyright (c) 2022-, Intel Corporation. All rights reserved.<BR>
+// SPDX-License-Identifier: BSD-2-Clause-Patent
+////
grammar VfrSyntax;
options {
language=Python;
}
@header{
-from VfrCompiler.CommonCtypes import *
-from VfrCompiler.VfrFormPkg import *
-from VfrCompiler.VfrUtility import *
-from VfrCompiler.VfrTree import *
+from VfrCompiler.IfrCtypes import *
+from VfrCompiler.IfrFormPkg import *
+from VfrCompiler.IfrUtility import *
+from VfrCompiler.IfrTree import *
+from VfrCompiler.IfrError import *
+from VfrCompiler.IfrPreProcess import *
}
vfrProgram
- : (vfrPragmaPackDefinition | vfrDataStructDefinition | vfrDataUnionDefinition)* vfrFormSetDefinition
+ : (vfrPragmaPackDefinition | vfrDataStructDefinition | vfrDataUnionDefinition)* vfrFormSetDefinition?
;
pragmaPackShowDef
@@ -115,9 +123,9 @@ dataStructBitField8[FieldInUnion]
: D='UINT8' N=StringIdentifier? ':' Number ';'
;
-// 2.4 VFR FormSet Definition
+// VFR FormSet Definition
vfrFormSetDefinition
-locals[Node=VfrTreeNode(EFI_IFR_FORM_SET_OP)]
+locals[Node=IfrTreeNode(EFI_IFR_FORM_SET_OP)]
: 'formset'
'guid' '=' guidDefinition ','
'title' '=' 'STRING_TOKEN' '(' Number ')' ','
@@ -135,7 +143,7 @@ locals[GuidList=[]]
;
classDefinition
-locals[Node=VfrTreeNode(EFI_IFR_GUID_OP)]
+locals[Node=IfrTreeNode(EFI_IFR_GUID_OP)]
: validClassNames ('|' validClassNames)*
;
@@ -152,7 +160,7 @@ locals[ClassName=0]
;
subclassDefinition
-locals[Node=VfrTreeNode(EFI_IFR_GUID_OP)]
+locals[Node=IfrTreeNode(EFI_IFR_GUID_OP)]
: SubclassSetupApplication
| SubclassGeneralApplication
| SubclassFrontPage
@@ -185,7 +193,7 @@ locals[Node=None]
//2.6 VFR Default Stores Definition
vfrStatementDefaultStore
-locals[Node=VfrTreeNode(EFI_IFR_DEFAULTSTORE_OP)]
+locals[Node=IfrTreeNode(EFI_IFR_DEFAULTSTORE_OP)]
: 'defaultstore' N=StringIdentifier ','
'prompt' '=' 'STRING_TOKEN' '(' S=Number ')'
(',' 'attribute' '=' A=Number)? ';'
@@ -193,7 +201,7 @@ locals[Node=VfrTreeNode(EFI_IFR_DEFAULTSTORE_OP)]
//2.7 VFR Variable Store Definition
vfrStatementVarStoreLinear
-locals[Node=VfrTreeNode(EFI_IFR_VARSTORE_OP)]
+locals[Node=IfrTreeNode(EFI_IFR_VARSTORE_OP)]
: 'varstore'
( TN=StringIdentifier ','
| 'UINT8' ','
@@ -210,7 +218,7 @@ locals[Node=VfrTreeNode(EFI_IFR_VARSTORE_OP)]
;
vfrStatementVarStoreEfi
-locals[Node=VfrTreeNode(EFI_IFR_VARSTORE_EFI_OP)]
+locals[Node=IfrTreeNode(EFI_IFR_VARSTORE_EFI_OP)]
: 'efivarstore'
( TN=StringIdentifier ','
| 'UINT8' ','
@@ -234,7 +242,7 @@ locals[Attr=0]
: Number;
vfrStatementVarStoreNameValue
-locals[Node=VfrTreeNode(EFI_IFR_VARSTORE_NAME_VALUE_OP)]
+locals[Node=IfrTreeNode(EFI_IFR_VARSTORE_NAME_VALUE_OP)]
: 'namevaluevarstore' SN=StringIdentifier ','
('varid' '=' ID=Number ',')?
('name' '=' 'STRING_TOKEN' '(' Number ')' ',')+
@@ -242,15 +250,15 @@ locals[Node=VfrTreeNode(EFI_IFR_VARSTORE_NAME_VALUE_OP)]
;
vfrStatementDisableIfFormSet
-locals[Node=VfrTreeNode(EFI_IFR_DISABLE_IF_OP)]
- : 'disableif' vfrStatementExpression ';'
+locals[Node=IfrTreeNode(EFI_IFR_DISABLE_IF_OP)]
+ : 'disableif' vfrStatementExpression[localctx.Node] ';'
vfrFormSetList[localctx.Node]
'endif' ';'
;
vfrStatementSuppressIfFormSet
-locals[Node=VfrTreeNode(EFI_IFR_SUPPRESS_IF_OP)]
- : 'suppressif' vfrStatementExpression ';'
+locals[Node=IfrTreeNode(EFI_IFR_SUPPRESS_IF_OP)]
+ : 'suppressif' vfrStatementExpression[localctx.Node] ';'
vfrFormSetList[localctx.Node]
'endif' ';'
;
@@ -261,7 +269,7 @@ guidSubDefinition[Guid]
;
guidDefinition
-locals[Node=VfrTreeNode(), Guid=EFI_GUID()]
+locals[Node=IfrTreeNode(), Guid=EFI_GUID()]
: '{'
Number ',' Number ',' Number ','
( '{' guidSubDefinition[localctx.Guid] '}'
@@ -275,19 +283,19 @@ locals[StringId='']
: 'STRING_TOKEN' '(' Number ')'
;
-vfrQuestionHeader[OpObj, QType]
- : vfrQuestionBaseInfo[OpObj, QType]
- vfrStatementHeader[OpObj]
+vfrQuestionHeader[Node, QType]
+ : vfrQuestionBaseInfo[Node, QType]
+ vfrStatementHeader[Node]
;
-vfrQuestionBaseInfo[OpObj, QType]
-locals[BaseInfo=EFI_VARSTORE_INFO(), QId=EFI_QUESTION_ID_INVALID, CheckFlag=True]
+vfrQuestionBaseInfo[Node, QType]
+locals[BaseInfo=EFI_VARSTORE_INFO(), QId=EFI_QUESTION_ID_INVALID, CheckFlag=True, QName=None, VarIdStr='']
: ('name' '=' QN=StringIdentifier ',')?
('varid' '=' vfrStorageVarId[localctx.BaseInfo, localctx.CheckFlag] ',')?
('questionid' '=' ID=Number ',')?
;
-vfrStatementHeader[OpObj]
+vfrStatementHeader[Node]
: 'prompt' '=' 'STRING_TOKEN' '(' Number ')' ','
'help' '=' 'STRING_TOKEN' '(' Number ')'
;
@@ -311,7 +319,7 @@ locals[VarIdStr='']
;
vfrConstantValueField
-locals[Value=EFI_IFR_TYPE_VALUE(), ValueList=[], ListType=False]
+locals[ValueList=[], ListType=False]
: ('-')? Number
| 'TRUE'
| 'FALSE'
@@ -326,12 +334,12 @@ locals[Value=EFI_IFR_TYPE_VALUE(), ValueList=[], ListType=False]
;
vfrImageTag
-locals[Node=VfrTreeNode(EFI_IFR_IMAGE_OP)]
+locals[Node=IfrTreeNode(EFI_IFR_IMAGE_OP)]
: 'image' '=' 'IMAGE_TOKEN' '(' Number ')'
;
vfrLockedTag
-locals[Node=VfrTreeNode(EFI_IFR_LOCKED_OP)]
+locals[Node=IfrTreeNode(EFI_IFR_LOCKED_OP)]
: 'locked'
;
@@ -345,7 +353,7 @@ vfrStatementStatTagList[Node]
;
vfrFormDefinition
-locals[Node=VfrTreeNode(EFI_IFR_FORM_OP)]
+locals[Node=IfrTreeNode(EFI_IFR_FORM_OP)]
: 'form' 'formid' '=' Number ','
'title' '=' 'STRING_TOKEN' '(' Number ')' ';'
(vfrForm)*
@@ -372,7 +380,7 @@ locals[Node]
;
vfrFormMapDefinition
-locals[Node=VfrTreeNode(EFI_IFR_FORM_MAP_OP)]
+locals[Node=IfrTreeNode(EFI_IFR_FORM_MAP_OP)]
: 'formmap' 'formid' '=' S1=Number ','
( 'maptitle' '=' 'STRING_TOKEN' '(' Number ')' ';'
'mapguid' '=' guidDefinition ';'
@@ -392,9 +400,9 @@ locals[Node]
;
vfrStatementRules
-locals[Node=VfrTreeNode(EFI_IFR_RULE_OP)]
+locals[Node=IfrTreeNode(EFI_IFR_RULE_OP)]
: 'rule' StringIdentifier ','
- vfrStatementExpression
+ vfrStatementExpression[localctx.Node]
'endrule' ';'
;
@@ -406,7 +414,7 @@ locals[Node]
;
vfrStatementSubTitle
-locals[Node=VfrTreeNode(EFI_IFR_SUBTITLE_OP), OpObj=CIfrSubtitle()]
+locals[Node=IfrTreeNode(EFI_IFR_SUBTITLE_OP)]
: 'subtitle'
'text' '=' 'STRING_TOKEN' '(' Number ')'
@@ -434,7 +442,7 @@ locals[Flag=0]
;
vfrStatementStaticText
-locals[Node=VfrTreeNode(EFI_IFR_TEXT_OP)]
+locals[Node=IfrTreeNode(EFI_IFR_TEXT_OP)]
: 'text'
'help' '=' 'STRING_TOKEN' '(' S1=Number ')' ','
'text' '=' 'STRING_TOKEN' '(' S2=Number ')'
@@ -454,7 +462,7 @@ locals[Node]
;
vfrStatementGoto
-locals[Node=VfrTreeNode(EFI_IFR_REF_OP), OpObj=None, OHObj=None, QType=EFI_QUESION_TYPE.QUESTION_REF]
+locals[Node=IfrTreeNode(EFI_IFR_REF_OP), QType=EFI_QUESION_TYPE.QUESTION_REF]
: 'goto'
( ( DevicePath '=' 'STRING_TOKEN' '(' Number ')' ','
FormSetGuid '=' guidDefinition ','
@@ -471,15 +479,15 @@ locals[Node=VfrTreeNode(EFI_IFR_REF_OP), OpObj=None, OHObj=None, QType=EFI_QUESI
Question '=' (QN=StringIdentifier ',' | Number ',')
)
|
- ( Number ',' )
+ ( N=Number ',' )
)?
- vfrQuestionHeader[localctx.OpObj, localctx.QType]
- (',' 'flags' '=' vfrGotoFlags[localctx.OpObj])?
+ vfrQuestionHeader[localctx.Node, localctx.QType]
+ (',' 'flags' '=' vfrGotoFlags)?
(',' 'key' '=' Number)?
- (',' vfrStatementQuestionOptionList[localctx.Node])? ';'
+ (E=',' vfrStatementQuestionOptionList[localctx.Node])? ';'
;
-vfrGotoFlags[Obj]
+vfrGotoFlags
locals[GotoFlags=0]
: gotoFlagsField('|' gotoFlagsField)*
;
@@ -490,10 +498,10 @@ locals[Flag=0]
;
vfrStatementResetButton
-locals[Node=VfrTreeNode(EFI_IFR_RESET_BUTTON_OP), OpObj=CIfrResetButton()]
+locals[Node=IfrTreeNode(EFI_IFR_RESET_BUTTON_OP)]
: 'resetbutton'
'defaultstore' '=' N=StringIdentifier ','
- vfrStatementHeader[localctx.OpObj] ','
+ vfrStatementHeader[localctx.Node] ','
(vfrStatementStatTagList[localctx.Node] ',')?
'endresetbutton' ';'
;
@@ -521,52 +529,52 @@ locals[Node]
| vfrStatementWarningIf
;
-vfrStatementInconsistentIf
-locals[Node=VfrTreeNode(EFI_IFR_INCONSISTENT_IF_OP)]
+vfrStatementInconsistentIf //
+locals[Node=IfrTreeNode(EFI_IFR_INCONSISTENT_IF_OP)]
: 'inconsistentif'
'prompt' '=' 'STRING_TOKEN' '(' Number ')' ','
('flags' '=' flagsField ('|' flagsField)* ',')?
- vfrStatementExpression
+ vfrStatementExpression[localctx.Node]
'endif' (';')?
;
-vfrStatementNoSubmitIf
-locals[Node=VfrTreeNode(EFI_IFR_NO_SUBMIT_IF_OP)]
+vfrStatementNoSubmitIf //
+locals[Node=IfrTreeNode(EFI_IFR_NO_SUBMIT_IF_OP)]
: 'nosubmitif'
'prompt' '=' 'STRING_TOKEN' '(' Number ')' ','
('flags' '=' flagsField ('|' flagsField)* ',')?
- vfrStatementExpression
+ vfrStatementExpression[localctx.Node]
'endif' (';')?
;
vfrStatementDisableIfQuest
-locals[Node=VfrTreeNode(EFI_IFR_DISABLE_IF_OP)]
- : 'disableif' vfrStatementExpression ';'
+locals[Node=IfrTreeNode(EFI_IFR_DISABLE_IF_OP)]
+ : 'disableif' vfrStatementExpression[localctx.Node] ';'
vfrStatementQuestionOptionList[localctx.Node]
'endif' (';')?
;
vfrStatementRefresh
-locals[Node=VfrTreeNode(EFI_IFR_REFRESH_OP)]
+locals[Node=IfrTreeNode(EFI_IFR_REFRESH_OP)]
: 'refresh' 'interval' '=' Number
;
vfrStatementVarstoreDevice
-locals[Node=VfrTreeNode(EFI_IFR_VARSTORE_DEVICE_OP)]
+locals[Node=IfrTreeNode(EFI_IFR_VARSTORE_DEVICE_OP)]
: 'varstoredevice' '=' 'STRING_TOKEN' '(' Number ')' ','
;
vfrStatementRefreshEvent
-locals[Node=VfrTreeNode(EFI_IFR_REFRESH_ID_OP)]
+locals[Node=IfrTreeNode(EFI_IFR_REFRESH_ID_OP)]
: 'refreshguid' '=' guidDefinition ','
;
-vfrStatementWarningIf
-locals[Node=VfrTreeNode(EFI_IFR_WARNING_IF_OP)]
+vfrStatementWarningIf //
+locals[Node=IfrTreeNode(EFI_IFR_WARNING_IF_OP)]
: 'warningif'
'prompt' '=' 'STRING_TOKEN' '(' Number ')' ','
('timeout' '=' Number ',')?
- vfrStatementExpression
+ vfrStatementExpression[localctx.Node]
'endif' (';')?
;
@@ -597,16 +605,16 @@ flagsField
;
vfrStatementSuppressIfQuest
-locals[Node=VfrTreeNode(EFI_IFR_SUPPRESS_IF_OP)]
- : 'suppressif' vfrStatementExpression ';'
+locals[Node=IfrTreeNode(EFI_IFR_SUPPRESS_IF_OP)]
+ : 'suppressif' vfrStatementExpression[localctx.Node] ';'
('flags' '=' flagsField ('|' flagsField )* ',')?
vfrStatementQuestionOptionList[localctx.Node]
'endif' (';')?
;
vfrStatementGrayOutIfQuest
-locals[Node=VfrTreeNode(EFI_IFR_SUPPRESS_IF_OP)]
- : 'grayoutif' vfrStatementExpression ';'
+locals[Node=IfrTreeNode(EFI_IFR_SUPPRESS_IF_OP)]
+ : 'grayoutif' vfrStatementExpression[localctx.Node] ';'
('flags' '=' flagsField ('|' flagsField )* ',')?
vfrStatementQuestionOptionList[localctx.Node]
'endif' (';')?
@@ -614,9 +622,9 @@ locals[Node=VfrTreeNode(EFI_IFR_SUPPRESS_IF_OP)]
vfrStatementDefault
-locals[Node=VfrTreeNode(EFI_IFR_DEFAULT_OP)]
+locals[Node=IfrTreeNode(EFI_IFR_DEFAULT_OP)]
: D='default'
- ( ( vfrStatementValue ','
+ ( ( V=vfrStatementValue ','
| '=' vfrConstantValueField ','
)
( 'defaultstore' '=' SN=StringIdentifier ','
@@ -625,8 +633,8 @@ locals[Node=VfrTreeNode(EFI_IFR_DEFAULT_OP)]
;
vfrStatementValue
-locals[Node=VfrTreeNode(EFI_IFR_VALUE_OP)]
- : 'value' '=' vfrStatementExpression
+locals[Node=IfrTreeNode(EFI_IFR_VALUE_OP)]
+ : 'value' '=' vfrStatementExpression[localctx.Node]
;
vfrStatementOptions
@@ -635,11 +643,11 @@ locals[Node]
;
vfrStatementOneOfOption
-locals[Node=VfrTreeNode(EFI_IFR_ONE_OF_OPTION_OP)]
+locals[Node=IfrTreeNode(EFI_IFR_ONE_OF_OPTION_OP)]
: 'option'
'text' '=' 'STRING_TOKEN' '(' Number ')' ','
'value' '=' vfrConstantValueField ','
- F='flags' '=' vfrOneOfOptionFlags (',' 'key' '=' KN=Number) ? (',' vfrImageTag)* ';'
+ F='flags' '=' vfrOneOfOptionFlags (',' 'key' '=' KN=Number) ? (T=',' vfrImageTag)* ';'
;
vfrOneOfOptionFlags
@@ -662,13 +670,13 @@ oneofoptionFlagsField
;
vfrStatementRead
-locals[Node=VfrTreeNode(EFI_IFR_READ_OP)]
- : 'read' vfrStatementExpression ';'
+locals[Node=IfrTreeNode(EFI_IFR_READ_OP)]
+ : 'read' vfrStatementExpression[localctx.Node] ';'
;
vfrStatementWrite
-locals[Node=VfrTreeNode(EFI_IFR_WRITE_OP)]
- : 'write' vfrStatementExpression ';'
+locals[Node=IfrTreeNode(EFI_IFR_WRITE_OP)]
+ : 'write' vfrStatementExpression[localctx.Node] ';'
;
vfrStatementQuestionOptionList[Node]
@@ -688,10 +696,10 @@ locals[Node]
;
vfrStatementCheckBox
-locals[Node=VfrTreeNode(EFI_IFR_CHECKBOX_OP), OpObj=CIfrCheckBox(), QType=EFI_QUESION_TYPE.QUESTION_NORMAL]
+locals[Node=IfrTreeNode(EFI_IFR_CHECKBOX_OP),GuidNode=IfrTreeNode(EFI_IFR_GUID_OP), QType=EFI_QUESION_TYPE.QUESTION_NORMAL]
: L='checkbox'
- vfrQuestionBaseInfo[localctx.OpObj, localctx.QType]
- vfrStatementHeader[localctx.OpObj] ','
+ vfrQuestionBaseInfo[localctx.Node, localctx.QType]
+ vfrStatementHeader[localctx.Node] ','
(F='flags' '=' vfrCheckBoxFlags ',')?
('key' '=' Number ',')?
vfrStatementQuestionOptionList[localctx.Node]
@@ -714,9 +722,9 @@ locals[LFlag=0, HFlag=0]
;
vfrStatementAction
-locals[Node=VfrTreeNode(EFI_IFR_ACTION_OP),OpObj=CIfrAction(), QType=EFI_QUESION_TYPE.QUESTION_NORMAL]
+locals[Node=IfrTreeNode(EFI_IFR_ACTION_OP), QType=EFI_QUESION_TYPE.QUESTION_NORMAL]
: 'action'
- vfrQuestionHeader[localctx.OpObj, localctx.QType] ','
+ vfrQuestionHeader[localctx.Node, localctx.QType] ','
('flags' '=' vfrActionFlags ',')?
'config' '=' 'STRING_TOKEN' '(' Number ')' ','
vfrStatementQuestionTagList[localctx.Node]
@@ -738,25 +746,25 @@ locals[Node]
;
vfrStatementNumeric
-locals[Node=VfrTreeNode(EFI_IFR_NUMERIC_OP), OpObj=CIfrNumeric(), QType=EFI_QUESION_TYPE.QUESTION_NORMAL]
+locals[Node=IfrTreeNode(EFI_IFR_NUMERIC_OP), GuidNode=IfrTreeNode(EFI_IFR_GUID_OP), QType=EFI_QUESION_TYPE.QUESTION_NORMAL]
: 'numeric'
- vfrQuestionBaseInfo[localctx.OpObj, localctx.QType]
- vfrStatementHeader[localctx.OpObj] ','
+ vfrQuestionBaseInfo[localctx.Node, localctx.QType]
+ vfrStatementHeader[localctx.Node] ','
(F='flags' '=' vfrNumericFlags ',')?
('key' '=' Number ',')?
- vfrSetMinMaxStep[localctx.OpObj]
+ vfrSetMinMaxStep[localctx.Node]
vfrStatementQuestionOptionList[localctx.Node]
'endnumeric' ';'
;
-vfrSetMinMaxStep[OpObj] // CIfrMinMaxStepData
+vfrSetMinMaxStep[Node] // CIfrMinMaxStepData
: 'minimum' '=' (N1='-')? I=Number ','
'maximum' '=' (N2='-')? A=Number ','
('step' '=' S=Number ',')?
;
vfrNumericFlags
-locals[HFlags=0, LFlags=0,IsDisplaySpecified=False]
+locals[HFlags=0, LFlags=0, IsDisplaySpecified=False, UpdateVarType=False]
: numericFlagsField ('|' numericFlagsField)*
;
@@ -774,18 +782,18 @@ locals[HFlag=0,IsSetType=False,IsDisplaySpecified=False]
;
vfrStatementOneOf
-locals[Node=VfrTreeNode(EFI_IFR_ONE_OF_OP), OpObj=CIfrOneOf(), QType=EFI_QUESION_TYPE.QUESTION_NORMAL]
+locals[Node=IfrTreeNode(EFI_IFR_ONE_OF_OP), GuidNode=IfrTreeNode(EFI_IFR_GUID_OP), QType=EFI_QUESION_TYPE.QUESTION_NORMAL]
: 'oneof'
- vfrQuestionBaseInfo[localctx.OpObj, localctx.QType]
- vfrStatementHeader[localctx.OpObj] ','
- (F='flags' '=' vfrOneofFlagsField ',')?
- (vfrSetMinMaxStep[localctx.OpObj])?
+ vfrQuestionBaseInfo[localctx.Node, localctx.QType]
+ vfrStatementHeader[localctx.Node] ','
+ (F='flags' '=' vfrOneofFlagsField ',')? //
+ (vfrSetMinMaxStep[localctx.Node])?
vfrStatementQuestionOptionList[localctx.Node]
'endoneof' ';'
;
vfrOneofFlagsField
-locals[HFlags=0, LFlags=0]
+locals[HFlags=0, LFlags=0, UpdateVarType=False]
: numericFlagsField ('|' numericFlagsField)*
;
@@ -795,9 +803,9 @@ locals[Node]
;
vfrStatementString
-locals[Node=VfrTreeNode(EFI_IFR_STRING_OP), OpObj=CIfrString(), QType=EFI_QUESION_TYPE.QUESTION_NORMAL]
+locals[Node=IfrTreeNode(EFI_IFR_STRING_OP), QType=EFI_QUESION_TYPE.QUESTION_NORMAL]
: 'string'
- vfrQuestionHeader[localctx.OpObj, localctx.QType] ','
+ vfrQuestionHeader[localctx.Node, localctx.QType] ','
(F='flags' '=' vfrStringFlagsField ',')?
('key' '=' Number ',')?
Min='minsize' '=' Number ','
@@ -819,9 +827,9 @@ locals[HFlag=0, LFlag=0]
;
vfrStatementPassword
-locals[Node=VfrTreeNode(EFI_IFR_PASSWORD_OP), OpObj=CIfrPassword(), QType=EFI_QUESION_TYPE.QUESTION_NORMAL]
+locals[Node=IfrTreeNode(EFI_IFR_PASSWORD_OP), QType=EFI_QUESION_TYPE.QUESTION_NORMAL]
: 'password'
- vfrQuestionHeader[localctx.OpObj, localctx.QType]','
+ vfrQuestionHeader[localctx.Node, localctx.QType]','
(F='flags' '=' vfrPasswordFlagsField ',')?
('key' '=' Number ',')?
Min='minsize' '=' Number ','
@@ -843,9 +851,9 @@ locals[HFlag=0]
;
vfrStatementOrderedList
-locals[Node=VfrTreeNode(EFI_IFR_ORDERED_LIST_OP), OpObj=CIfrOrderedList(), QType=EFI_QUESION_TYPE.QUESTION_NORMAL]
+locals[Node=IfrTreeNode(EFI_IFR_ORDERED_LIST_OP), QType=EFI_QUESION_TYPE.QUESTION_NORMAL]
: 'orderedlist'
- vfrQuestionHeader[localctx.OpObj, localctx.QType] ','
+ vfrQuestionHeader[localctx.Node, localctx.QType] ','
(M='maxcontainers' '=' Number ',')?
(F='flags' '=' vfrOrderedListFlags ',')?
vfrStatementQuestionOptionList[localctx.Node]
@@ -866,9 +874,9 @@ locals[HFlag=0, LFlag=0]
;
vfrStatementDate
-locals[Node=VfrTreeNode(EFI_IFR_DATE_OP), OpObj=CIfrDate(), QType=EFI_QUESION_TYPE.QUESTION_DATE, Val=EFI_IFR_TYPE_VALUE()]
+locals[Node=IfrTreeNode(EFI_IFR_DATE_OP), QType=EFI_QUESION_TYPE.QUESTION_DATE, Val=EFI_HII_DATE()]
: 'date'
- ( ( vfrQuestionHeader[localctx.OpObj, localctx.QType] ','
+ ( ( vfrQuestionHeader[localctx.Node, localctx.QType] ','
(F1='flags' '=' vfrDateFlags ',')?
vfrStatementQuestionOptionList[localctx.Node]
)
@@ -876,15 +884,15 @@ locals[Node=VfrTreeNode(EFI_IFR_DATE_OP), OpObj=CIfrDate(), QType=EFI_QUESION_TY
( 'year' 'varid' '=' StringIdentifier '.' StringIdentifier ','
'prompt' '=' 'STRING_TOKEN' '(' Number ')' ','
'help' '=' 'STRING_TOKEN' '(' Number ')' ','
- minMaxDateStepDefault[localctx.Val.date, 0]
+ minMaxDateStepDefault[localctx.Node, localctx.Val, 0]
'month' 'varid' '=' StringIdentifier '.' StringIdentifier ','
'prompt' '=' 'STRING_TOKEN' '(' Number ')' ','
'help' '=' 'STRING_TOKEN' '(' Number ')' ','
- minMaxDateStepDefault[localctx.Val.date, 1]
+ minMaxDateStepDefault[localctx.Node, localctx.Val, 1]
'day' 'varid' '=' StringIdentifier '.' StringIdentifier ','
'prompt' '=' 'STRING_TOKEN' '(' Number ')' ','
'help' '=' 'STRING_TOKEN' '(' Number ')' ','
- minMaxDateStepDefault[localctx.Val.date, 2]
+ minMaxDateStepDefault[localctx.Node, localctx.Val, 2]
(F2='flags' '=' vfrDateFlags ',')?
(vfrStatementInconsistentIf)*
)
@@ -892,7 +900,7 @@ locals[Node=VfrTreeNode(EFI_IFR_DATE_OP), OpObj=CIfrDate(), QType=EFI_QUESION_TY
'enddate' ';'
;
-minMaxDateStepDefault[Date, KeyValue]
+minMaxDateStepDefault[Node, Date, KeyValue]
: 'minimum' '=' Number ','
'maximum' '=' Number ','
('step' '=' Number ',')?
@@ -915,9 +923,9 @@ locals[LFlag=0]
;
vfrStatementTime
-locals[Node=VfrTreeNode(EFI_IFR_TIME_OP), OpObj=CIfrTime(), QType=EFI_QUESION_TYPE.QUESTION_TIME, Val=EFI_IFR_TYPE_VALUE()]
+locals[Node=IfrTreeNode(EFI_IFR_TIME_OP), QType=EFI_QUESION_TYPE.QUESTION_TIME, Val=EFI_HII_TIME()]
: 'time'
- ( ( vfrQuestionHeader[localctx.OpObj, localctx.QType] ','
+ ( ( vfrQuestionHeader[localctx.Node, localctx.QType] ','
(F1='flags' '=' vfrTimeFlags ',')?
vfrStatementQuestionOptionList[localctx.Node]
)
@@ -926,15 +934,15 @@ locals[Node=VfrTreeNode(EFI_IFR_TIME_OP), OpObj=CIfrTime(), QType=EFI_QUESION_TY
'hour' 'varid' '=' StringIdentifier '.' StringIdentifier ','
'prompt' '=' 'STRING_TOKEN' '(' Number ')' ','
'help' '=' 'STRING_TOKEN' '(' Number ')' ','
- minMaxTimeStepDefault[localctx.Val.time, 0]
+ minMaxTimeStepDefault[localctx.Node, localctx.Val, 0]
'minute' 'varid' '=' StringIdentifier '.' StringIdentifier ','
'prompt' '=' 'STRING_TOKEN' '(' Number ')' ','
'help' '=' 'STRING_TOKEN' '(' Number ')' ','
- minMaxTimeStepDefault[localctx.Val.time, 1]
+ minMaxTimeStepDefault[localctx.Node, localctx.Val, 1]
'second' 'varid' '=' StringIdentifier '.' StringIdentifier ','
'prompt' '=' 'STRING_TOKEN' '(' Number ')' ','
'help' '=' 'STRING_TOKEN' '(' Number ')' ','
- minMaxTimeStepDefault[localctx.Val.time, 2]
+ minMaxTimeStepDefault[localctx.Node, localctx.Val, 2]
(F2='flags' '=' vfrTimeFlags ',')?
(vfrStatementInconsistentIf)*
)
@@ -942,7 +950,7 @@ locals[Node=VfrTreeNode(EFI_IFR_TIME_OP), OpObj=CIfrTime(), QType=EFI_QUESION_TY
'endtime' ';'
;
-minMaxTimeStepDefault[Time, KeyValue]
+minMaxTimeStepDefault[Node, Time, KeyValue]
: 'minimum' '=' Number ','
'maximum' '=' Number ','
('step' '=' Number ',')?
@@ -1011,51 +1019,52 @@ vfrStatementStatListOld
;
vfrStatementDisableIfStat
-locals[Node=VfrTreeNode(EFI_IFR_DISABLE_IF_OP)]
- : 'disableif' vfrStatementExpression ';'
+locals[Node=IfrTreeNode(EFI_IFR_DISABLE_IF_OP)]
+ : 'disableif' vfrStatementExpression[localctx.Node] ';'
(vfrStatementStatList)*
'endif' ';'
;
// Compatible for framework vfr file
-//
vfrStatementgrayoutIfSuppressIf
+locals[Node]
: 'suppressif'
('flags' '=' flagsField ('|' flagsField)* ',')?
- vfrStatementExpression ';'
+ vfrStatementExpression[localctx.Node] ';'
;
vfrStatementsuppressIfGrayOutIf
+locals[Node]
: 'grayoutif'
('flags' '=' flagsField ('|' flagsField)* ',')?
- vfrStatementExpression ';'
+ vfrStatementExpression[localctx.Node] ';'
;
vfrStatementSuppressIfStatNew
-locals[Node=VfrTreeNode(EFI_IFR_SUPPRESS_IF_OP)]
+locals[Node=IfrTreeNode(EFI_IFR_SUPPRESS_IF_OP)]
: 'suppressif'
('flags' '=' flagsField ('|' flagsField)* ',')?
- vfrStatementExpression ';'
+ vfrStatementExpression[localctx.Node] ';'
(vfrStatementStatList)*
'endif' ';'
;
vfrStatementGrayOutIfStatNew
-locals[Node=VfrTreeNode(EFI_IFR_GRAY_OUT_IF_OP)]
+locals[Node=IfrTreeNode(EFI_IFR_GRAY_OUT_IF_OP)]
: 'grayoutif'
('flags' '=' flagsField ('|' flagsField)* ',')?
- vfrStatementExpression ';'
+ vfrStatementExpression[localctx.Node] ';'
(vfrStatementStatList)*
'endif' ';'
;
vfrStatementInconsistentIfStat
-locals[Node=VfrTreeNode(EFI_IFR_INCONSISTENT_IF_OP)]
+locals[Node=IfrTreeNode(EFI_IFR_INCONSISTENT_IF_OP)]
: 'inconsistentif'
'prompt' '=' 'STRING_TOKEN' '(' Number ')' ','
('flags' '=' flagsField ('|' flagsField)* ',')?
- vfrStatementExpression
+ vfrStatementExpression[localctx.Node]
'endif' ';'
;
@@ -1092,12 +1101,12 @@ vfrStatementInvalidSaveRestoreDefaults
';'
;
vfrStatementLabel
-locals[Node=VfrTreeNode(EFI_IFR_GUID_OP)]
+locals[Node=IfrTreeNode(EFI_IFR_GUID_OP)]
: 'label' Number ';'
;
-vfrStatementBanner // Is TimeOut needed
-locals[Node=VfrTreeNode(EFI_IFR_GUID_OP)]
+vfrStatementBanner
+locals[Node=IfrTreeNode(EFI_IFR_GUID_OP)]
: 'banner' (',')?
'title' '=' 'STRING_TOKEN' '(' Number ')' ','
( ( 'line' Number ','
@@ -1110,7 +1119,7 @@ locals[Node=VfrTreeNode(EFI_IFR_GUID_OP)]
;
vfrStatementExtension
-locals[Node=VfrTreeNode(EFI_IFR_GUID_OP), DataBuff, Size=0, TypeName='', TypeSize=0, IsStruct=False, ArrayNum=0]
+locals[Node=IfrTreeNode(EFI_IFR_GUID_OP), Buffer=None, Size=0, TypeName='', TypeSize=0, IsStruct=False, ArrayNum=0]
: 'guidop'
'guid' '=' guidDefinition
( ',' D='datatype' '='
@@ -1125,7 +1134,7 @@ locals[Node=VfrTreeNode(EFI_IFR_GUID_OP), DataBuff, Size=0, TypeName='', TypeSiz
| 'EFI_HII_REF' ('[' Number ']')?
| StringIdentifier ('[' Number ']')?
)
- (vfrExtensionData[localctx.DataBuff])*
+ (vfrExtensionData)*
)?
(
',' (vfrStatementExtension)*
@@ -1135,9 +1144,9 @@ locals[Node=VfrTreeNode(EFI_IFR_GUID_OP), DataBuff, Size=0, TypeName='', TypeSiz
;
-vfrExtensionData[DataBuff]
-locals[IsStruct]
- : ',' 'data' ('[' Number ']')?
+vfrExtensionData
+locals[TFName='', FName='', TFValue=None]
+ : ',' 'data' ('[' I=Number ']')?
( '.' arrayName)* '=' N=Number
;
@@ -1148,57 +1157,59 @@ locals[Node]
;
vfrModalTag
-locals[Node=VfrTreeNode(EFI_IFR_MODAL_TAG_OP)]
+locals[Node=IfrTreeNode(EFI_IFR_MODAL_TAG_OP)]
: 'modal'
;
-vfrStatementExpression
-locals[ExpInfo=ExpressionInfo()]
- : andTerm[localctx.ExpInfo] ('OR' andTerm[localctx.ExpInfo])*
+vfrStatementExpression[ParentNode]
+locals[ExpInfo=ExpressionInfo(), Nodes=[]]
+ : andTerm[localctx.ExpInfo] (L='OR' andTerm[localctx.ExpInfo])*
;
-vfrStatementExpressionSub
-locals[ExpInfo=ExpressionInfo()]
+vfrStatementExpressionSub[ParentNodes]
+locals[ExpInfo=ExpressionInfo(), Nodes=[]]
: andTerm[localctx.ExpInfo] ('OR' andTerm[localctx.ExpInfo])*
;
andTerm[ExpInfo]
-locals[CIfrAndList=[]]
- : bitwiseorTerm[ExpInfo] ('AND' bitwiseorTerm[ExpInfo])*
+locals[Nodes=[], Line]
+ : bitwiseorTerm[ExpInfo] (L='AND' bitwiseorTerm[ExpInfo])*
;
bitwiseorTerm[ExpInfo]
-locals[CIfrBitWiseOrList=[]]
- : bitwiseandTerm[ExpInfo] ('|' bitwiseandTerm[ExpInfo])*
+locals[Nodes=[], Line]
+ : bitwiseandTerm[ExpInfo] (L='|' bitwiseandTerm[ExpInfo])*
;
bitwiseandTerm[ExpInfo]
-locals[CIfrBitWiseAndList=[]]
- : equalTerm[ExpInfo] ('&' equalTerm[ExpInfo])*
+locals[Nodes=[], Line]
+ : equalTerm[ExpInfo] (L='&' equalTerm[ExpInfo])*
;
equalTerm[ExpInfo]
-locals[CIfrEqualList=[], CIfrNotEqualList=[]]
- : compareTerm[localctx.ExpInfo]
- (equalTermSupplementary[localctx.CIfrEqualList, localctx.CIfrNotEqualList, ExpInfo])*
+locals[Nodes=[], Line]
+ : compareTerm[ExpInfo]
+ (equalTermSupplementary[ExpInfo])*
;
-equalTermSupplementary[CIfrEqualList, CIfrNotEqualList, ExpInfo]
+equalTermSupplementary[ExpInfo]
+locals[Nodes=[]]
: ('==' compareTerm[ExpInfo]) # equalTermEqualRule
|
('!=' compareTerm[ExpInfo]) # equalTermNotEqualRule
;
compareTerm[ExpInfo]
-locals[CIfrLessThanList=[], CIfrLessEqualList=[], CIfrGreaterThanList=[], CIfrGreaterEqualList=[]]
+locals[Nodes=[]]
: shiftTerm[ExpInfo]
- (compareTermSupplementary[localctx.CIfrLessThanList, localctx.CIfrLessEqualList, localctx.CIfrGreaterThanList, localctx.CIfrGreaterEqualList, ExpInfo])*
+ (compareTermSupplementary[ExpInfo])*
;
-compareTermSupplementary[CIfrLessThanList, CIfrLessEqualList, CIfrGreaterThanList, CIfrGreaterEqualList, ExpInfo]
+compareTermSupplementary[ExpInfo]
+locals[Nodes=[]]
: ('<' shiftTerm[ExpInfo]) # compareTermLessRule
|
('<=' shiftTerm[ExpInfo]) # compareTermLessEqualRule
@@ -1209,36 +1220,39 @@ compareTermSupplementary[CIfrLessThanList, CIfrLessEqualList, CIfrGreaterThanLis
;
shiftTerm[ExpInfo]
-locals[CIfrShiftLeftList=[], CIfrShiftRightList=[]]
+locals[Nodes=[]]
: addMinusTerm[ExpInfo]
- (shiftTermSupplementary[localctx.CIfrShiftLeftList, localctx.CIfrShiftRightList, ExpInfo])*
+ (shiftTermSupplementary[ExpInfo])*
;
-shiftTermSupplementary[CIfrShiftLeftList, CIfrShiftRightList, ExpInfo]
+shiftTermSupplementary[ExpInfo]
+locals[Nodes=[]]
: ('<<' addMinusTerm[ExpInfo]) # shiftTermLeft
|
('>>' addMinusTerm[ExpInfo]) # shiftTermRight
;
addMinusTerm[ExpInfo]
-locals[CIfrAddList=[], CIfrSubtractList=[]]
+locals[Nodes=[]]
: multdivmodTerm[ExpInfo]
- (addMinusTermSupplementary[localctx.CIfrAddList, localctx.CIfrSubtractList, ExpInfo])*
+ (addMinusTermSupplementary[ExpInfo])*
;
-addMinusTermSupplementary[CIfrAddList, CIfrSubtractList, ExpInfo]
+addMinusTermSupplementary[ExpInfo]
+locals[Nodes=[]]
: ('+' multdivmodTerm[ExpInfo]) # addMinusTermpAdd
|
('-' multdivmodTerm[ExpInfo]) # addMinusTermSubtract
;
multdivmodTerm[ExpInfo]
-locals[CIfrMultiplyList=[], CIfrDivideList=[], CIfrModuloList=[]]
+locals[Nodes=[]]
: castTerm[ExpInfo]
- (multdivmodTermSupplementary[localctx.CIfrMultiplyList, localctx.CIfrDivideList, localctx.CIfrModuloList, ExpInfo])*
+ (multdivmodTermSupplementary[ExpInfo])*
;
-multdivmodTermSupplementary[CIfrMultiplyList, CIfrDivideList, CIfrModuloList, ExpInfo]
+multdivmodTermSupplementary[ExpInfo]
+locals[Nodes=[]]
: ('*' castTerm[ExpInfo]) # multdivmodTermMul
|
('/' castTerm[ExpInfo]) # multdivmodTermDiv
@@ -1247,20 +1261,26 @@ multdivmodTermSupplementary[CIfrMultiplyList, CIfrDivideList, CIfrModuloList, Ex
;
castTerm[ExpInfo]
-locals[TBObj=None, TUObj=None]
- : ( '('
- ( 'BOOLEAN'
- | 'UINT64'
- | 'UINT32'
- | 'UINT16'
- | 'UINT8'
- )
- ')'
- )*
+locals[Nodes=[]]
+ : (castTermSub)*
atomTerm[ExpInfo]
;
+castTermSub
+locals[CastType=0xFF]
+ : '('
+ ( 'BOOLEAN'
+ | 'UINT64'
+ | 'UINT32'
+ | 'UINT16'
+ | 'UINT8'
+ )
+ ')'
+
+ ;
+
atomTerm[ExpInfo]
+locals[Nodes=[]]
: vfrExpressionCatenate[ExpInfo]
| vfrExpressionMatch[ExpInfo]
| vfrExpressionMatch2[ExpInfo]
@@ -1271,34 +1291,35 @@ atomTerm[ExpInfo]
| vfrExpressionTernaryOp[ExpInfo]
| vfrExpressionMap[ExpInfo]
| ('NOT' atomTerm[ExpInfo])
- | vfrExpressionMatch2[ExpInfo]
;
vfrExpressionCatenate[ExpInfo]
-locals[CObj=None]
+locals[Nodes=[]]
: 'catenate'
- '(' vfrStatementExpressionSub ',' vfrStatementExpressionSub ')'
+ '(' vfrStatementExpressionSub[localctx.Nodes] ',' vfrStatementExpressionSub[localctx.Nodes] ')'
;
vfrExpressionMatch[ExpInfo]
-locals[MObj=None]
+locals[Nodes=[]]
: 'match'
- '(' vfrStatementExpressionSub ',' vfrStatementExpressionSub ')'
+ '(' vfrStatementExpressionSub[localctx.Nodes] ',' vfrStatementExpressionSub[localctx.Nodes] ')'
;
vfrExpressionMatch2[ExpInfo]
-locals[M2Obj=None]
+locals[Nodes=[]]
: 'match2'
- '(' vfrStatementExpressionSub','
- vfrStatementExpressionSub ','
+ '(' vfrStatementExpressionSub[localctx.Nodes] ','
+ vfrStatementExpressionSub[localctx.Nodes] ','
guidDefinition ')'
;
vfrExpressionParen[ExpInfo]
- : '(' vfrStatementExpressionSub ')'
+locals[Nodes=[]]
+ : '(' vfrStatementExpressionSub[localctx.Nodes] ')'
;
vfrExpressionBuildInFunction[ExpInfo]
+locals[Node]
: dupExp[ExpInfo]
| vareqvalExp[ExpInfo]
| ideqvalExp[ExpInfo]
@@ -1313,23 +1334,25 @@ vfrExpressionBuildInFunction[ExpInfo]
;
dupExp[ExpInfo]
-locals[DObj=None]
+locals[Node=IfrTreeNode(EFI_IFR_DUP_OP)]
: 'dup'
;
vareqvalExp[ExpInfo]
+locals[Node]
: 'vareqval'
- 'var' '(' Number ')'
+ 'var' '(' VN=Number ')'
( '==' Number
| '<=' Number
- | '<' Number
+ | '<' Number
| '>=' Number
- | '>' Number
+ | '>' Number
)
;
ideqvalExp[ExpInfo]
+locals[Node]
: I='ideqval' vfrQuestionDataFieldName
( '==' Number
| '<=' Number
@@ -1340,6 +1363,7 @@ ideqvalExp[ExpInfo]
;
ideqidExp[ExpInfo]
+locals[Node]
: I='ideqid' vfrQuestionDataFieldName
( E='==' vfrQuestionDataFieldName
| LE='<=' vfrQuestionDataFieldName
@@ -1350,6 +1374,7 @@ ideqidExp[ExpInfo]
;
ideqvallistExp[ExpInfo]
+locals[Node]
: 'ideqvallist' vfrQuestionDataFieldName '==' (Number)+
;
@@ -1365,15 +1390,18 @@ locals[SubStr='', SubStrZ='']
;
questionref1Exp[ExpInfo]
+locals[Node=IfrTreeNode(EFI_IFR_QUESTION_REF1_OP)]
: 'questionref'
'(' ( StringIdentifier | Number ) ')'
;
rulerefExp[ExpInfo]
+locals[Node=IfrTreeNode(EFI_IFR_RULE_REF_OP)]
: 'ruleref' '(' StringIdentifier ')'
;
stringref1Exp[ExpInfo]
+locals[Node=IfrTreeNode(EFI_IFR_STRING_REF1_OP)]
: 'stringref' '('
(
'STRING_TOKEN' '(' Number ')'
@@ -1385,10 +1413,12 @@ stringref1Exp[ExpInfo]
;
pushthisExp[ExpInfo]
+locals[Node=IfrTreeNode(EFI_IFR_THIS_OP)]
: 'pushthis'
;
securityExp[ExpInfo]
+locals[Node=IfrTreeNode(EFI_IFR_SECURITY_OP)]
: 'security' '(' guidDefinition ')'
;
@@ -1401,11 +1431,12 @@ locals[VarType]
;
getExp[ExpInfo]
-locals[BaseInfo=EFI_VARSTORE_INFO(), GObj=None]
+locals[BaseInfo=EFI_VARSTORE_INFO(), Node=IfrTreeNode(EFI_IFR_GET_OP)]
: 'get' '(' vfrStorageVarId[localctx.BaseInfo, False]('|' 'flags' '=' numericVarStoreType)? ')'
;
vfrExpressionConstant[ExpInfo]
+locals[Node]
: 'TRUE'
| 'FALSE'
| 'ONE'
@@ -1417,6 +1448,7 @@ vfrExpressionConstant[ExpInfo]
;
vfrExpressionUnaryOp[ExpInfo]
+locals[Nodes]
: lengthExp[ExpInfo]
| bitwisenotExp[ExpInfo]
| question23refExp[ExpInfo]
@@ -1430,65 +1462,67 @@ vfrExpressionUnaryOp[ExpInfo]
;
lengthExp[ExpInfo]
-locals[LObj=None]
- : 'length' '(' vfrStatementExpressionSub ')'
+locals[Nodes=[]]
+ : 'length' '(' vfrStatementExpressionSub[localctx.Nodes] ')'
;
bitwisenotExp[ExpInfo]
-locals[BWNObj=None]
- : '~' '(' vfrStatementExpressionSub ')'
+locals[Nodes=[]]
+ : '~' '(' vfrStatementExpressionSub[localctx.Nodes] ')'
;
question23refExp[ExpInfo]
+locals[Nodes=[]]
: 'questionrefval'
'('
(DevicePath '=' 'STRING_TOKEN' '(' Number ')' ',' )?
(Uuid '=' guidDefinition ',' )?
- vfrStatementExpressionSub
+ vfrStatementExpressionSub[localctx.Nodes]
')'
;
stringref2Exp[ExpInfo]
-locals[SR2Obj=None]
- : 'stringrefval' '(' vfrStatementExpressionSub ')'
+locals[Nodes=[]]
+ : 'stringrefval' '(' vfrStatementExpressionSub[localctx.Nodes] ')'
;
toboolExp[ExpInfo]
-locals[TBObj=None]
- : 'boolval' '(' vfrStatementExpressionSub ')'
+locals[Nodes=[]]
+ : 'boolval' '(' vfrStatementExpressionSub[localctx.Nodes] ')'
;
tostringExp[ExpInfo]
-locals[TSObj=None]
+locals[Nodes=[]]
: 'stringval' ('format' '=' Number ',' )?
- '(' vfrStatementExpressionSub ')'
+ '(' vfrStatementExpressionSub[localctx.Nodes] ')'
;
unintExp[ExpInfo]
-locals[TUObj=None]
- : 'unintval' '(' vfrStatementExpressionSub ')'
+locals[Nodes=[]]
+ : 'unintval' '(' vfrStatementExpressionSub[localctx.Nodes] ')'
;
toupperExp[ExpInfo]
-locals[TUObj=None]
- : 'toupper' '(' vfrStatementExpressionSub ')'
+locals[Nodes=[]]
+ : 'toupper' '(' vfrStatementExpressionSub[localctx.Nodes] ')'
;
tolwerExp[ExpInfo]
-locals[TLObj=None]
- : 'tolower' '(' vfrStatementExpressionSub ')'
+locals[Nodes=[]]
+ : 'tolower' '(' vfrStatementExpressionSub[localctx.Nodes] ')'
;
setExp[ExpInfo]
-locals[BaseInfo=EFI_VARSTORE_INFO(), TSObj=None]
+locals[BaseInfo=EFI_VARSTORE_INFO(), Nodes=[]]
: 'set'
'('
vfrStorageVarId[localctx.BaseInfo, False]('|' 'flags' '=' numericVarStoreType)? ','
- vfrStatementExpressionSub
+ vfrStatementExpressionSub[localctx.Nodes]
')'
;
vfrExpressionTernaryOp[ExpInfo]
+locals[Nodes]
: conditionalExp[ExpInfo]
| findExp[ExpInfo]
| midExp[ExpInfo]
@@ -1497,28 +1531,28 @@ vfrExpressionTernaryOp[ExpInfo]
;
conditionalExp[ExpInfo]
-locals[CObj=None]
+locals[Nodes=[]]
: 'cond'
'('
- vfrStatementExpressionSub //
+ vfrStatementExpressionSub[localctx.Nodes]
'?'
- vfrStatementExpressionSub //
+ vfrStatementExpressionSub[localctx.Nodes]
':'
- vfrStatementExpressionSub //
+ vfrStatementExpressionSub[localctx.Nodes]
')'
;
findExp[ExpInfo]
-locals[FObj=None]
+locals[Nodes=[]]
: 'find'
'('
findFormat[ExpInfo] ('|' findFormat[ExpInfo])*
','
- vfrStatementExpressionSub
+ vfrStatementExpressionSub[localctx.Nodes]
','
- vfrStatementExpressionSub
+ vfrStatementExpressionSub[localctx.Nodes]
','
- vfrStatementExpressionSub
+ vfrStatementExpressionSub[localctx.Nodes]
')'
;
@@ -1528,40 +1562,40 @@ locals[Format=0]
;
midExp[ExpInfo]
-locals[MObj=None]
+locals[Nodes=[]]
: 'mid'
'('
- vfrStatementExpressionSub
+ vfrStatementExpressionSub[localctx.Nodes]
','
- vfrStatementExpressionSub
+ vfrStatementExpressionSub[localctx.Nodes]
','
- vfrStatementExpressionSub
+ vfrStatementExpressionSub[localctx.Nodes]
')'
;
tokenExp[ExpInfo]
-locals[TObj=None]
+locals[Nodes=[]]
: 'token'
'('
- vfrStatementExpressionSub
+ vfrStatementExpressionSub[localctx.Nodes]
','
- vfrStatementExpressionSub
+ vfrStatementExpressionSub[localctx.Nodes]
','
- vfrStatementExpressionSub
+ vfrStatementExpressionSub[localctx.Nodes]
')'
;
spanExp[ExpInfo]
-locals[SObj=None]
+locals[Nodes=[]]
: 'span'
'('
'flags' '=' spanFlags ('|' spanFlags)*
','
- vfrStatementExpressionSub
+ vfrStatementExpressionSub[localctx.Nodes]
','
- vfrStatementExpressionSub
+ vfrStatementExpressionSub[localctx.Nodes]
','
- vfrStatementExpressionSub
+ vfrStatementExpressionSub[localctx.Nodes]
')'
;
@@ -1573,14 +1607,14 @@ locals[Flag=0]
;
vfrExpressionMap[ExpInfo]
-locals[MObj=None]
+locals[Nodes=[], Node=IfrTreeNode()]
: 'map'
'('
- vfrStatementExpressionSub
+ vfrStatementExpressionSub[localctx.Nodes]
':'
- ( vfrStatementExpression
+ ( vfrStatementExpression[localctx.Node]
','
- vfrStatementExpression
+ vfrStatementExpression[localctx.Node]
';'
)*
')'
@@ -1884,4 +1918,4 @@ LineComment
Extern
: 'extern' ~[#\r\n]*
-> skip
- ;
\ No newline at end of file
+ ;
diff --git a/BaseTools/Source/Python/VfrCompiler/VfrSyntaxLexer.py b/BaseTools/Source/Python/VfrCompiler/VfrSyntaxLexer.py
index 2b7a5c32a3..0e165a0446 100644
--- a/BaseTools/Source/Python/VfrCompiler/VfrSyntaxLexer.py
+++ b/BaseTools/Source/Python/VfrCompiler/VfrSyntaxLexer.py
@@ -1,16 +1,15 @@
# Generated from VfrSyntax.g4 by ANTLR 4.7.2
+
+import sys
from antlr4 import *
from io import StringIO
from typing import TextIO
-import sys
-
-
-
-from VfrCompiler.CommonCtypes import *
-from VfrCompiler.VfrFormPkg import *
-from VfrCompiler.VfrUtility import *
-from VfrCompiler.VfrTree import *
-
+from VfrCompiler.IfrCtypes import *
+from VfrCompiler.IfrFormPkg import *
+from VfrCompiler.IfrUtility import *
+from VfrCompiler.IfrTree import *
+from VfrCompiler.IfrError import *
+from VfrCompiler.IfrPreProcess import *
def serializedATN():
diff --git a/BaseTools/Source/Python/VfrCompiler/VfrSyntaxParser.py b/BaseTools/Source/Python/VfrCompiler/VfrSyntaxParser.py
index b6af21b795..d5d61a26a9 100644
--- a/BaseTools/Source/Python/VfrCompiler/VfrSyntaxParser.py
+++ b/BaseTools/Source/Python/VfrCompiler/VfrSyntaxParser.py
@@ -1,22 +1,23 @@
# Generated from VfrSyntax.g4 by ANTLR 4.7.2
# encoding: utf-8
+
+import os
+import sys
from antlr4 import *
from io import StringIO
from typing import TextIO
-import sys
-
-
-
-from VfrCompiler.CommonCtypes import *
-from VfrCompiler.VfrFormPkg import *
-from VfrCompiler.VfrUtility import *
-from VfrCompiler.VfrTree import *
+from VfrCompiler.IfrCtypes import *
+from VfrCompiler.IfrFormPkg import *
+from VfrCompiler.IfrUtility import *
+from VfrCompiler.IfrTree import *
+from VfrCompiler.IfrError import *
+from VfrCompiler.IfrPreProcess import *
def serializedATN():
with StringIO() as buf:
buf.write("\3\u608b\ua72a\u8133\ub9ed\u417c\u3be7\u7786\u5964\3\u0102")
- buf.write("\u0ba3\4\2\t\2\4\3\t\3\4\4\t\4\4\5\t\5\4\6\t\6\4\7\t\7")
+ buf.write("\u0ba7\4\2\t\2\4\3\t\3\4\4\t\4\4\5\t\5\4\6\t\6\4\7\t\7")
buf.write("\4\b\t\b\4\t\t\t\4\n\t\n\4\13\t\13\4\f\t\f\4\r\t\r\4\16")
buf.write("\t\16\4\17\t\17\4\20\t\20\4\21\t\21\4\22\t\22\4\23\t\23")
buf.write("\4\24\t\24\4\25\t\25\4\26\t\26\4\27\t\27\4\30\t\30\4\31")
@@ -54,1528 +55,1530 @@ def serializedATN():
buf.write("\4\u00c0\t\u00c0\4\u00c1\t\u00c1\4\u00c2\t\u00c2\4\u00c3")
buf.write("\t\u00c3\4\u00c4\t\u00c4\4\u00c5\t\u00c5\4\u00c6\t\u00c6")
buf.write("\4\u00c7\t\u00c7\4\u00c8\t\u00c8\4\u00c9\t\u00c9\4\u00ca")
- buf.write("\t\u00ca\4\u00cb\t\u00cb\3\2\3\2\3\2\7\2\u019a\n\2\f\2")
- buf.write("\16\2\u019d\13\2\3\2\3\2\3\3\3\3\3\4\3\4\3\4\5\4\u01a6")
- buf.write("\n\4\3\4\3\4\5\4\u01aa\n\4\3\5\5\5\u01ad\n\5\3\6\3\6\3")
- buf.write("\6\3\6\3\6\3\6\5\6\u01b5\n\6\3\6\3\6\3\7\5\7\u01ba\n\7")
- buf.write("\3\7\3\7\5\7\u01be\n\7\3\7\5\7\u01c1\n\7\3\7\3\7\3\7\3")
- buf.write("\7\5\7\u01c7\n\7\3\7\3\7\3\b\5\b\u01cc\n\b\3\b\3\b\5\b")
- buf.write("\u01d0\n\b\3\b\5\b\u01d3\n\b\3\b\3\b\3\b\3\b\5\b\u01d9")
- buf.write("\n\b\3\b\3\b\3\t\3\t\3\t\3\t\3\t\3\t\3\t\3\t\3\t\3\t\3")
- buf.write("\t\3\t\3\t\3\t\7\t\u01eb\n\t\f\t\16\t\u01ee\13\t\3\n\3")
- buf.write("\n\3\n\3\n\3\n\5\n\u01f5\n\n\3\n\3\n\3\13\3\13\3\13\3")
- buf.write("\13\3\13\5\13\u01fe\n\13\3\13\3\13\3\f\3\f\3\f\3\f\3\f")
- buf.write("\5\f\u0207\n\f\3\f\3\f\3\r\3\r\3\r\3\r\3\r\5\r\u0210\n")
- buf.write("\r\3\r\3\r\3\16\3\16\3\16\3\16\3\16\5\16\u0219\n\16\3")
- buf.write("\16\3\16\3\17\3\17\3\17\3\17\3\17\5\17\u0222\n\17\3\17")
- buf.write("\3\17\3\20\3\20\3\20\3\20\3\20\5\20\u022b\n\20\3\20\3")
- buf.write("\20\3\21\3\21\3\21\3\21\3\21\5\21\u0234\n\21\3\21\3\21")
- buf.write("\3\22\3\22\3\22\3\22\3\22\5\22\u023d\n\22\3\22\3\22\3")
- buf.write("\23\3\23\3\23\3\23\3\23\5\23\u0246\n\23\3\23\3\23\3\24")
- buf.write("\3\24\5\24\u024c\n\24\3\24\3\24\3\24\3\24\3\25\3\25\5")
- buf.write("\25\u0254\n\25\3\25\3\25\3\25\3\25\3\26\3\26\5\26\u025c")
- buf.write("\n\26\3\26\3\26\3\26\3\26\3\27\3\27\5\27\u0264\n\27\3")
- buf.write("\27\3\27\3\27\3\27\3\30\3\30\3\30\3\30\3\30\3\30\3\30")
+ buf.write("\t\u00ca\4\u00cb\t\u00cb\4\u00cc\t\u00cc\3\2\3\2\3\2\7")
+ buf.write("\2\u019c\n\2\f\2\16\2\u019f\13\2\3\2\5\2\u01a2\n\2\3\3")
+ buf.write("\3\3\3\4\3\4\3\4\5\4\u01a9\n\4\3\4\3\4\5\4\u01ad\n\4\3")
+ buf.write("\5\5\5\u01b0\n\5\3\6\3\6\3\6\3\6\3\6\3\6\5\6\u01b8\n\6")
+ buf.write("\3\6\3\6\3\7\5\7\u01bd\n\7\3\7\3\7\5\7\u01c1\n\7\3\7\5")
+ buf.write("\7\u01c4\n\7\3\7\3\7\3\7\3\7\5\7\u01ca\n\7\3\7\3\7\3\b")
+ buf.write("\5\b\u01cf\n\b\3\b\3\b\5\b\u01d3\n\b\3\b\5\b\u01d6\n\b")
+ buf.write("\3\b\3\b\3\b\3\b\5\b\u01dc\n\b\3\b\3\b\3\t\3\t\3\t\3\t")
+ buf.write("\3\t\3\t\3\t\3\t\3\t\3\t\3\t\3\t\3\t\3\t\7\t\u01ee\n\t")
+ buf.write("\f\t\16\t\u01f1\13\t\3\n\3\n\3\n\3\n\3\n\5\n\u01f8\n\n")
+ buf.write("\3\n\3\n\3\13\3\13\3\13\3\13\3\13\5\13\u0201\n\13\3\13")
+ buf.write("\3\13\3\f\3\f\3\f\3\f\3\f\5\f\u020a\n\f\3\f\3\f\3\r\3")
+ buf.write("\r\3\r\3\r\3\r\5\r\u0213\n\r\3\r\3\r\3\16\3\16\3\16\3")
+ buf.write("\16\3\16\5\16\u021c\n\16\3\16\3\16\3\17\3\17\3\17\3\17")
+ buf.write("\3\17\5\17\u0225\n\17\3\17\3\17\3\20\3\20\3\20\3\20\3")
+ buf.write("\20\5\20\u022e\n\20\3\20\3\20\3\21\3\21\3\21\3\21\3\21")
+ buf.write("\5\21\u0237\n\21\3\21\3\21\3\22\3\22\3\22\3\22\3\22\5")
+ buf.write("\22\u0240\n\22\3\22\3\22\3\23\3\23\3\23\3\23\3\23\5\23")
+ buf.write("\u0249\n\23\3\23\3\23\3\24\3\24\5\24\u024f\n\24\3\24\3")
+ buf.write("\24\3\24\3\24\3\25\3\25\5\25\u0257\n\25\3\25\3\25\3\25")
+ buf.write("\3\25\3\26\3\26\5\26\u025f\n\26\3\26\3\26\3\26\3\26\3")
+ buf.write("\27\3\27\5\27\u0267\n\27\3\27\3\27\3\27\3\27\3\30\3\30")
buf.write("\3\30\3\30\3\30\3\30\3\30\3\30\3\30\3\30\3\30\3\30\3\30")
- buf.write("\3\30\3\30\3\30\3\30\3\30\3\30\5\30\u0282\n\30\3\30\3")
- buf.write("\30\3\30\3\30\3\30\5\30\u0289\n\30\3\30\3\30\3\30\3\30")
- buf.write("\3\30\5\30\u0290\n\30\3\30\3\30\3\30\3\30\3\31\3\31\3")
- buf.write("\31\5\31\u0299\n\31\3\31\3\31\5\31\u029d\n\31\3\31\3\31")
- buf.write("\5\31\u02a1\n\31\3\32\3\32\3\32\7\32\u02a6\n\32\f\32\16")
- buf.write("\32\u02a9\13\32\3\33\3\33\3\34\3\34\3\35\7\35\u02b0\n")
- buf.write("\35\f\35\16\35\u02b3\13\35\3\36\3\36\3\36\3\36\3\36\3")
- buf.write("\36\3\36\3\36\3\36\3\36\5\36\u02bf\n\36\3\37\3\37\3\37")
- buf.write("\3\37\3\37\3\37\3\37\3\37\3\37\3\37\3\37\3\37\3\37\5\37")
- buf.write("\u02ce\n\37\3\37\3\37\3 \3 \3 \3 \3 \3 \3 \3 \3 \3 \3")
- buf.write(" \3 \3 \3 \3 \3 \3 \5 \u02e3\n \3 \3 \3 \3 \5 \u02e9\n")
- buf.write(" \3 \3 \3 \3 \3 \3 \3 \3 \3 \3!\3!\3!\3!\3!\3!\3!\3!\3")
- buf.write("!\3!\3!\3!\3!\3!\3!\3!\3!\5!\u0305\n!\3!\3!\3!\3!\5!\u030b")
- buf.write("\n!\3!\3!\3!\3!\3!\7!\u0312\n!\f!\16!\u0315\13!\3!\3!")
- buf.write("\3!\3!\3!\3!\3!\3!\3!\3!\3!\3!\3!\3!\3!\3!\5!\u0327\n")
- buf.write("!\3!\3!\3!\3!\3!\3\"\3\"\3#\3#\3#\3#\3#\3#\3#\5#\u0337")
- buf.write("\n#\3#\3#\3#\3#\3#\3#\3#\6#\u0340\n#\r#\16#\u0341\3#\3")
- buf.write("#\3#\3#\3#\3$\3$\3$\3$\3$\3$\3$\3%\3%\3%\3%\3%\3%\3%\3")
- buf.write("&\3&\3&\3&\3&\3&\3&\3&\3&\3&\3&\3&\3&\3&\3&\3&\3\'\3\'")
- buf.write("\3\'\3\'\3\'\3\'\3\'\3\'\3\'\3\'\3\'\3\'\5\'\u0373\n\'")
- buf.write("\3\'\3\'\3(\3(\3(\3(\3(\3)\3)\3)\3*\3*\3*\3*\5*\u0383")
- buf.write("\n*\3*\3*\3*\3*\3*\5*\u038a\n*\3*\3*\3*\3*\5*\u0390\n")
- buf.write("*\3+\3+\3+\3+\3+\3+\3+\3+\3+\3+\3+\3+\3+\3+\3,\3,\3,\3")
- buf.write(",\3,\3,\3,\3,\5,\u03a8\n,\3-\3-\3-\3-\3-\3-\3-\7-\u03b1")
- buf.write("\n-\f-\16-\u03b4\13-\5-\u03b6\n-\3.\5.\u03b9\n.\3.\3.")
- buf.write("\3.\3.\3.\3.\3.\3.\3.\3.\3.\3.\3.\3.\3.\3.\3.\3.\3.\3")
- buf.write(".\3.\3.\3.\3.\3.\3.\3.\3.\3.\3.\3.\3.\3.\3.\3.\7.\u03de")
- buf.write("\n.\f.\16.\u03e1\13.\3.\5.\u03e4\n.\3/\3/\3/\3/\3/\3/")
- buf.write("\3/\3\60\3\60\3\61\3\61\5\61\u03f1\n\61\3\62\3\62\3\62")
- buf.write("\7\62\u03f6\n\62\f\62\16\62\u03f9\13\62\3\63\3\63\3\63")
- buf.write("\3\63\3\63\3\63\3\63\3\63\3\63\3\63\3\63\3\63\3\63\7\63")
- buf.write("\u0408\n\63\f\63\16\63\u040b\13\63\3\63\3\63\3\63\3\64")
- buf.write("\3\64\3\64\3\64\3\64\3\64\3\64\3\64\3\64\3\64\3\64\3\64")
- buf.write("\3\64\3\64\3\64\5\64\u041f\n\64\3\65\3\65\3\65\3\65\3")
- buf.write("\65\3\65\3\65\3\65\3\65\3\65\3\65\3\65\3\65\3\65\3\65")
- buf.write("\3\65\3\65\7\65\u0432\n\65\f\65\16\65\u0435\13\65\3\65")
- buf.write("\7\65\u0438\n\65\f\65\16\65\u043b\13\65\3\65\3\65\3\65")
- buf.write("\3\66\3\66\3\66\3\67\3\67\3\67\38\38\38\38\38\38\38\3")
- buf.write("9\39\39\59\u0450\n9\3:\3:\3:\3:\3:\3:\3:\3:\3:\3:\3:\5")
- buf.write(":\u045d\n:\3:\3:\5:\u0461\n:\3:\3:\3:\5:\u0466\n:\3:\3")
- buf.write(":\7:\u046a\n:\f:\16:\u046d\13:\5:\u046f\n:\3:\3:\5:\u0473")
- buf.write("\n:\3;\3;\5;\u0477\n;\3<\3<\3<\7<\u047c\n<\f<\16<\u047f")
- buf.write("\13<\3=\3=\3>\3>\3>\3>\3>\3>\3>\3>\3>\3>\3>\3>\3>\3>\3")
- buf.write(">\3>\3>\3>\3>\3>\3>\5>\u0498\n>\3>\3>\3>\3>\3>\3>\7>\u04a0")
- buf.write("\n>\f>\16>\u04a3\13>\3>\3>\3>\3>\3>\5>\u04aa\n>\3>\3>")
- buf.write("\5>\u04ae\n>\3>\3>\3?\3?\5?\u04b4\n?\3@\3@\5@\u04b8\n")
- buf.write("@\3A\3A\3A\3A\3A\3A\3A\3A\3A\3A\3A\3A\3A\3A\3A\3A\3A\3")
+ buf.write("\3\30\3\30\3\30\3\30\3\30\3\30\3\30\3\30\3\30\3\30\3\30")
+ buf.write("\5\30\u0285\n\30\3\30\3\30\3\30\3\30\3\30\5\30\u028c\n")
+ buf.write("\30\3\30\3\30\3\30\3\30\3\30\5\30\u0293\n\30\3\30\3\30")
+ buf.write("\3\30\3\30\3\31\3\31\3\31\5\31\u029c\n\31\3\31\3\31\5")
+ buf.write("\31\u02a0\n\31\3\31\3\31\5\31\u02a4\n\31\3\32\3\32\3\32")
+ buf.write("\7\32\u02a9\n\32\f\32\16\32\u02ac\13\32\3\33\3\33\3\34")
+ buf.write("\3\34\3\35\7\35\u02b3\n\35\f\35\16\35\u02b6\13\35\3\36")
+ buf.write("\3\36\3\36\3\36\3\36\3\36\3\36\3\36\3\36\3\36\5\36\u02c2")
+ buf.write("\n\36\3\37\3\37\3\37\3\37\3\37\3\37\3\37\3\37\3\37\3\37")
+ buf.write("\3\37\3\37\3\37\5\37\u02d1\n\37\3\37\3\37\3 \3 \3 \3 ")
+ buf.write("\3 \3 \3 \3 \3 \3 \3 \3 \3 \3 \3 \3 \3 \5 \u02e6\n \3")
+ buf.write(" \3 \3 \3 \5 \u02ec\n \3 \3 \3 \3 \3 \3 \3 \3 \3 \3!\3")
+ buf.write("!\3!\3!\3!\3!\3!\3!\3!\3!\3!\3!\3!\3!\3!\3!\3!\5!\u0308")
+ buf.write("\n!\3!\3!\3!\3!\5!\u030e\n!\3!\3!\3!\3!\3!\7!\u0315\n")
+ buf.write("!\f!\16!\u0318\13!\3!\3!\3!\3!\3!\3!\3!\3!\3!\3!\3!\3")
+ buf.write("!\3!\3!\3!\3!\5!\u032a\n!\3!\3!\3!\3!\3!\3\"\3\"\3#\3")
+ buf.write("#\3#\3#\3#\3#\3#\5#\u033a\n#\3#\3#\3#\3#\3#\3#\3#\6#\u0343")
+ buf.write("\n#\r#\16#\u0344\3#\3#\3#\3#\3#\3$\3$\3$\3$\3$\3$\3$\3")
+ buf.write("%\3%\3%\3%\3%\3%\3%\3&\3&\3&\3&\3&\3&\3&\3&\3&\3&\3&\3")
+ buf.write("&\3&\3&\3&\3&\3\'\3\'\3\'\3\'\3\'\3\'\3\'\3\'\3\'\3\'")
+ buf.write("\3\'\3\'\5\'\u0376\n\'\3\'\3\'\3(\3(\3(\3(\3(\3)\3)\3")
+ buf.write(")\3*\3*\3*\3*\5*\u0386\n*\3*\3*\3*\3*\3*\5*\u038d\n*\3")
+ buf.write("*\3*\3*\3*\5*\u0393\n*\3+\3+\3+\3+\3+\3+\3+\3+\3+\3+\3")
+ buf.write("+\3+\3+\3+\3,\3,\3,\3,\3,\3,\3,\3,\5,\u03ab\n,\3-\3-\3")
+ buf.write("-\3-\3-\3-\3-\7-\u03b4\n-\f-\16-\u03b7\13-\5-\u03b9\n")
+ buf.write("-\3.\5.\u03bc\n.\3.\3.\3.\3.\3.\3.\3.\3.\3.\3.\3.\3.\3")
+ buf.write(".\3.\3.\3.\3.\3.\3.\3.\3.\3.\3.\3.\3.\3.\3.\3.\3.\3.\3")
+ buf.write(".\3.\3.\3.\3.\7.\u03e1\n.\f.\16.\u03e4\13.\3.\5.\u03e7")
+ buf.write("\n.\3/\3/\3/\3/\3/\3/\3/\3\60\3\60\3\61\3\61\5\61\u03f4")
+ buf.write("\n\61\3\62\3\62\3\62\7\62\u03f9\n\62\f\62\16\62\u03fc")
+ buf.write("\13\62\3\63\3\63\3\63\3\63\3\63\3\63\3\63\3\63\3\63\3")
+ buf.write("\63\3\63\3\63\3\63\7\63\u040b\n\63\f\63\16\63\u040e\13")
+ buf.write("\63\3\63\3\63\3\63\3\64\3\64\3\64\3\64\3\64\3\64\3\64")
+ buf.write("\3\64\3\64\3\64\3\64\3\64\3\64\3\64\3\64\5\64\u0422\n")
+ buf.write("\64\3\65\3\65\3\65\3\65\3\65\3\65\3\65\3\65\3\65\3\65")
+ buf.write("\3\65\3\65\3\65\3\65\3\65\3\65\3\65\7\65\u0435\n\65\f")
+ buf.write("\65\16\65\u0438\13\65\3\65\7\65\u043b\n\65\f\65\16\65")
+ buf.write("\u043e\13\65\3\65\3\65\3\65\3\66\3\66\3\66\3\67\3\67\3")
+ buf.write("\67\38\38\38\38\38\38\38\39\39\39\59\u0453\n9\3:\3:\3")
+ buf.write(":\3:\3:\3:\3:\3:\3:\3:\3:\5:\u0460\n:\3:\3:\5:\u0464\n")
+ buf.write(":\3:\3:\3:\5:\u0469\n:\3:\3:\7:\u046d\n:\f:\16:\u0470")
+ buf.write("\13:\5:\u0472\n:\3:\3:\5:\u0476\n:\3;\3;\5;\u047a\n;\3")
+ buf.write("<\3<\3<\7<\u047f\n<\f<\16<\u0482\13<\3=\3=\3>\3>\3>\3")
+ buf.write(">\3>\3>\3>\3>\3>\3>\3>\3>\3>\3>\3>\3>\3>\3>\3>\3>\3>\5")
+ buf.write(">\u049b\n>\3>\3>\3>\3>\3>\3>\7>\u04a3\n>\f>\16>\u04a6")
+ buf.write("\13>\3>\3>\3>\3>\3>\5>\u04ad\n>\3>\3>\5>\u04b1\n>\3>\3")
+ buf.write(">\3?\3?\5?\u04b7\n?\3@\3@\5@\u04bb\n@\3A\3A\3A\3A\3A\3")
+ buf.write("A\3A\3A\3A\3A\3A\3A\3A\3A\3A\3A\3A\3A\3A\3A\3A\3A\3A\3")
buf.write("A\3A\3A\3A\3A\3A\3A\3A\3A\3A\3A\3A\3A\3A\3A\3A\3A\3A\3")
- buf.write("A\3A\3A\3A\3A\3A\3A\3A\3A\5A\u04e6\nA\3A\3A\5A\u04ea\n")
- buf.write("A\3A\3A\3A\3A\3A\5A\u04f1\nA\3A\3A\3A\3A\5A\u04f7\nA\3")
- buf.write("A\3A\5A\u04fb\nA\3A\3A\3B\3B\3B\7B\u0502\nB\fB\16B\u0505")
- buf.write("\13B\3C\3C\5C\u0509\nC\3D\3D\3D\3D\3D\3D\3D\3D\3D\3D\5")
- buf.write("D\u0515\nD\3D\3D\3D\3E\3E\3E\3E\3E\3E\5E\u0520\nE\3F\3")
- buf.write("F\3F\3F\3F\3F\3F\3F\3F\3F\3F\5F\u052d\nF\3G\3G\3G\3G\3")
- buf.write("G\3G\3G\3G\3G\3G\3G\3G\3G\7G\u053c\nG\fG\16G\u053f\13")
- buf.write("G\3G\3G\5G\u0543\nG\3G\3G\3G\5G\u0548\nG\3H\3H\3H\3H\3")
- buf.write("H\3H\3H\3H\3H\3H\3H\3H\3H\7H\u0557\nH\fH\16H\u055a\13")
- buf.write("H\3H\3H\5H\u055e\nH\3H\3H\3H\5H\u0563\nH\3I\3I\3I\3I\3")
- buf.write("I\3I\5I\u056b\nI\3J\3J\3J\3J\3J\3K\3K\3K\3K\3K\3K\3K\3")
- buf.write("K\3L\3L\3L\3L\3L\3M\3M\3M\3M\3M\3M\3M\3M\3M\3M\3M\3M\5")
- buf.write("M\u058b\nM\3M\3M\3M\5M\u0590\nM\3N\7N\u0593\nN\fN\16N")
- buf.write("\u0596\13N\3O\3O\3O\3O\3O\3O\3O\5O\u059f\nO\3P\3P\3P\3")
- buf.write("P\3P\3P\3P\3P\5P\u05a9\nP\3Q\3Q\3Q\3Q\3Q\3Q\3Q\3Q\7Q\u05b3")
- buf.write("\nQ\fQ\16Q\u05b6\13Q\3Q\3Q\5Q\u05ba\nQ\3Q\3Q\3Q\5Q\u05bf")
- buf.write("\nQ\3R\3R\3R\3R\3R\3R\3R\3R\7R\u05c9\nR\fR\16R\u05cc\13")
- buf.write("R\3R\3R\5R\u05d0\nR\3R\3R\3R\5R\u05d5\nR\3S\3S\3S\3S\3")
- buf.write("S\3S\3S\3S\5S\u05df\nS\3S\3S\3S\3S\5S\u05e5\nS\3T\3T\3")
- buf.write("T\3T\3U\3U\3V\3V\3V\3V\3V\3V\3V\3V\3V\3V\3V\3V\3V\3V\3")
- buf.write("V\3V\3V\3V\3V\5V\u0600\nV\3V\3V\7V\u0604\nV\fV\16V\u0607")
- buf.write("\13V\3V\3V\3W\3W\3W\7W\u060e\nW\fW\16W\u0611\13W\3X\3")
- buf.write("X\3X\3X\3X\3X\3X\3X\3X\3X\3X\5X\u061e\nX\3Y\3Y\3Y\3Y\3")
- buf.write("Z\3Z\3Z\3Z\3[\7[\u0629\n[\f[\16[\u062c\13[\3\\\3\\\5\\")
- buf.write("\u0630\n\\\3]\3]\5]\u0634\n]\3^\3^\3^\3^\3^\3^\3^\3^\3")
- buf.write("^\5^\u063f\n^\3^\3^\3^\3^\5^\u0645\n^\3^\3^\3^\3^\3_\3")
- buf.write("_\3_\7_\u064e\n_\f_\16_\u0651\13_\3`\3`\3`\3`\3`\3`\5")
- buf.write("`\u0659\n`\3a\3a\3a\3a\3a\3a\3a\3a\5a\u0663\na\3a\3a\3")
- buf.write("a\3a\3a\3a\3a\3a\3a\3a\3a\3b\3b\3b\7b\u0673\nb\fb\16b")
- buf.write("\u0676\13b\3c\3c\5c\u067a\nc\3d\3d\5d\u067e\nd\3e\3e\3")
- buf.write("e\3e\3e\3e\3e\3e\3e\5e\u0689\ne\3e\3e\3e\3e\5e\u068f\n")
- buf.write("e\3e\3e\3e\3e\3e\3f\3f\3f\5f\u0699\nf\3f\3f\3f\3f\3f\5")
- buf.write("f\u06a0\nf\3f\3f\3f\3f\3f\3f\5f\u06a8\nf\3g\3g\3g\7g\u06ad")
- buf.write("\ng\fg\16g\u06b0\13g\3h\3h\3h\3h\3h\3h\3h\3h\3h\5h\u06bb")
- buf.write("\nh\3i\3i\3i\3i\3i\3i\3i\3i\3i\5i\u06c6\ni\3i\5i\u06c9")
- buf.write("\ni\3i\3i\3i\3i\3j\3j\3j\7j\u06d2\nj\fj\16j\u06d5\13j")
- buf.write("\3k\3k\5k\u06d9\nk\3l\3l\3l\3l\3l\3l\3l\3l\5l\u06e3\n")
- buf.write("l\3l\3l\3l\3l\5l\u06e9\nl\3l\3l\3l\3l\3l\3l\3l\3l\3l\3")
- buf.write("l\3l\3l\3m\3m\3m\7m\u06fa\nm\fm\16m\u06fd\13m\3n\3n\3")
- buf.write("n\5n\u0702\nn\3o\3o\3o\3o\3o\3o\3o\3o\5o\u070c\no\3o\3")
- buf.write("o\3o\3o\5o\u0712\no\3o\3o\3o\3o\3o\3o\3o\3o\3o\3o\3o\3")
- buf.write("o\5o\u0720\no\3o\3o\3o\3o\3p\3p\3p\7p\u0729\np\fp\16p")
- buf.write("\u072c\13p\3q\3q\5q\u0730\nq\3r\3r\3r\3r\3r\3r\3r\5r\u0739")
- buf.write("\nr\3r\3r\3r\3r\3r\5r\u0740\nr\3r\3r\3r\3r\3s\3s\3s\7")
- buf.write("s\u0749\ns\fs\16s\u074c\13s\3t\3t\3t\3t\5t\u0752\nt\3")
- buf.write("u\3u\3u\3u\3u\3u\3u\3u\5u\u075c\nu\3u\3u\3u\3u\3u\3u\3")
+ buf.write("A\3A\3A\5A\u04e9\nA\3A\3A\5A\u04ed\nA\3A\3A\3A\3A\3A\5")
+ buf.write("A\u04f4\nA\3A\3A\3A\3A\5A\u04fa\nA\3A\3A\5A\u04fe\nA\3")
+ buf.write("A\3A\3B\3B\3B\7B\u0505\nB\fB\16B\u0508\13B\3C\3C\5C\u050c")
+ buf.write("\nC\3D\3D\3D\3D\3D\3D\3D\3D\3D\3D\5D\u0518\nD\3D\3D\3")
+ buf.write("D\3E\3E\3E\3E\3E\3E\5E\u0523\nE\3F\3F\3F\3F\3F\3F\3F\3")
+ buf.write("F\3F\3F\3F\5F\u0530\nF\3G\3G\3G\3G\3G\3G\3G\3G\3G\3G\3")
+ buf.write("G\3G\3G\7G\u053f\nG\fG\16G\u0542\13G\3G\3G\5G\u0546\n")
+ buf.write("G\3G\3G\3G\5G\u054b\nG\3H\3H\3H\3H\3H\3H\3H\3H\3H\3H\3")
+ buf.write("H\3H\3H\7H\u055a\nH\fH\16H\u055d\13H\3H\3H\5H\u0561\n")
+ buf.write("H\3H\3H\3H\5H\u0566\nH\3I\3I\3I\3I\3I\3I\5I\u056e\nI\3")
+ buf.write("J\3J\3J\3J\3J\3K\3K\3K\3K\3K\3K\3K\3K\3L\3L\3L\3L\3L\3")
+ buf.write("M\3M\3M\3M\3M\3M\3M\3M\3M\3M\3M\3M\5M\u058e\nM\3M\3M\3")
+ buf.write("M\5M\u0593\nM\3N\7N\u0596\nN\fN\16N\u0599\13N\3O\3O\3")
+ buf.write("O\3O\3O\3O\3O\5O\u05a2\nO\3P\3P\3P\3P\3P\3P\3P\3P\5P\u05ac")
+ buf.write("\nP\3Q\3Q\3Q\3Q\3Q\3Q\3Q\3Q\7Q\u05b6\nQ\fQ\16Q\u05b9\13")
+ buf.write("Q\3Q\3Q\5Q\u05bd\nQ\3Q\3Q\3Q\5Q\u05c2\nQ\3R\3R\3R\3R\3")
+ buf.write("R\3R\3R\3R\7R\u05cc\nR\fR\16R\u05cf\13R\3R\3R\5R\u05d3")
+ buf.write("\nR\3R\3R\3R\5R\u05d8\nR\3S\3S\3S\3S\3S\3S\3S\3S\5S\u05e2")
+ buf.write("\nS\3S\3S\3S\3S\5S\u05e8\nS\3T\3T\3T\3T\3U\3U\3V\3V\3")
+ buf.write("V\3V\3V\3V\3V\3V\3V\3V\3V\3V\3V\3V\3V\3V\3V\3V\3V\5V\u0603")
+ buf.write("\nV\3V\3V\7V\u0607\nV\fV\16V\u060a\13V\3V\3V\3W\3W\3W")
+ buf.write("\7W\u0611\nW\fW\16W\u0614\13W\3X\3X\3X\3X\3X\3X\3X\3X")
+ buf.write("\3X\3X\3X\5X\u0621\nX\3Y\3Y\3Y\3Y\3Z\3Z\3Z\3Z\3[\7[\u062c")
+ buf.write("\n[\f[\16[\u062f\13[\3\\\3\\\5\\\u0633\n\\\3]\3]\5]\u0637")
+ buf.write("\n]\3^\3^\3^\3^\3^\3^\3^\3^\3^\5^\u0642\n^\3^\3^\3^\3")
+ buf.write("^\5^\u0648\n^\3^\3^\3^\3^\3_\3_\3_\7_\u0651\n_\f_\16_")
+ buf.write("\u0654\13_\3`\3`\3`\3`\3`\3`\5`\u065c\n`\3a\3a\3a\3a\3")
+ buf.write("a\3a\3a\3a\5a\u0666\na\3a\3a\3a\3a\3a\3a\3a\3a\3a\3a\3")
+ buf.write("a\3b\3b\3b\7b\u0676\nb\fb\16b\u0679\13b\3c\3c\5c\u067d")
+ buf.write("\nc\3d\3d\5d\u0681\nd\3e\3e\3e\3e\3e\3e\3e\3e\3e\5e\u068c")
+ buf.write("\ne\3e\3e\3e\3e\5e\u0692\ne\3e\3e\3e\3e\3e\3f\3f\3f\5")
+ buf.write("f\u069c\nf\3f\3f\3f\3f\3f\5f\u06a3\nf\3f\3f\3f\3f\3f\3")
+ buf.write("f\5f\u06ab\nf\3g\3g\3g\7g\u06b0\ng\fg\16g\u06b3\13g\3")
+ buf.write("h\3h\3h\3h\3h\3h\3h\3h\3h\5h\u06be\nh\3i\3i\3i\3i\3i\3")
+ buf.write("i\3i\3i\3i\5i\u06c9\ni\3i\5i\u06cc\ni\3i\3i\3i\3i\3j\3")
+ buf.write("j\3j\7j\u06d5\nj\fj\16j\u06d8\13j\3k\3k\5k\u06dc\nk\3")
+ buf.write("l\3l\3l\3l\3l\3l\3l\3l\5l\u06e6\nl\3l\3l\3l\3l\5l\u06ec")
+ buf.write("\nl\3l\3l\3l\3l\3l\3l\3l\3l\3l\3l\3l\3l\3m\3m\3m\7m\u06fd")
+ buf.write("\nm\fm\16m\u0700\13m\3n\3n\3n\5n\u0705\nn\3o\3o\3o\3o")
+ buf.write("\3o\3o\3o\3o\5o\u070f\no\3o\3o\3o\3o\5o\u0715\no\3o\3")
+ buf.write("o\3o\3o\3o\3o\3o\3o\3o\3o\3o\3o\5o\u0723\no\3o\3o\3o\3")
+ buf.write("o\3p\3p\3p\7p\u072c\np\fp\16p\u072f\13p\3q\3q\5q\u0733")
+ buf.write("\nq\3r\3r\3r\3r\3r\3r\3r\5r\u073c\nr\3r\3r\3r\3r\3r\5")
+ buf.write("r\u0743\nr\3r\3r\3r\3r\3s\3s\3s\7s\u074c\ns\fs\16s\u074f")
+ buf.write("\13s\3t\3t\3t\3t\5t\u0755\nt\3u\3u\3u\3u\3u\3u\3u\3u\5")
+ buf.write("u\u075f\nu\3u\3u\3u\3u\3u\3u\3u\3u\3u\3u\3u\3u\3u\3u\3")
buf.write("u\3u\3u\3u\3u\3u\3u\3u\3u\3u\3u\3u\3u\3u\3u\3u\3u\3u\3")
buf.write("u\3u\3u\3u\3u\3u\3u\3u\3u\3u\3u\3u\3u\3u\3u\3u\3u\3u\3")
buf.write("u\3u\3u\3u\3u\3u\3u\3u\3u\3u\3u\3u\3u\3u\3u\3u\3u\3u\3")
- buf.write("u\3u\3u\3u\3u\3u\3u\3u\3u\3u\3u\3u\3u\5u\u07a7\nu\3u\7")
- buf.write("u\u07aa\nu\fu\16u\u07ad\13u\5u\u07af\nu\3u\3u\3u\3v\3")
- buf.write("v\3v\3v\3v\3v\3v\3v\3v\3v\3v\3v\5v\u07c0\nv\3v\3v\3v\3")
- buf.write("v\5v\u07c6\nv\3w\3w\3w\7w\u07cb\nw\fw\16w\u07ce\13w\3")
- buf.write("x\3x\3y\3y\3y\3y\3y\3y\3y\3y\5y\u07da\ny\3y\3y\3y\3y\3")
+ buf.write("u\3u\3u\3u\3u\5u\u07aa\nu\3u\7u\u07ad\nu\fu\16u\u07b0")
+ buf.write("\13u\5u\u07b2\nu\3u\3u\3u\3v\3v\3v\3v\3v\3v\3v\3v\3v\3")
+ buf.write("v\3v\3v\5v\u07c3\nv\3v\3v\3v\3v\5v\u07c9\nv\3w\3w\3w\7")
+ buf.write("w\u07ce\nw\fw\16w\u07d1\13w\3x\3x\3y\3y\3y\3y\3y\3y\3")
+ buf.write("y\3y\5y\u07dd\ny\3y\3y\3y\3y\3y\3y\3y\3y\3y\3y\3y\3y\3")
buf.write("y\3y\3y\3y\3y\3y\3y\3y\3y\3y\3y\3y\3y\3y\3y\3y\3y\3y\3")
buf.write("y\3y\3y\3y\3y\3y\3y\3y\3y\3y\3y\3y\3y\3y\3y\3y\3y\3y\3")
buf.write("y\3y\3y\3y\3y\3y\3y\3y\3y\3y\3y\3y\3y\3y\3y\3y\3y\3y\3")
- buf.write("y\3y\3y\3y\3y\3y\3y\3y\3y\3y\3y\3y\3y\3y\3y\5y\u0825\n")
- buf.write("y\3y\7y\u0828\ny\fy\16y\u082b\13y\5y\u082d\ny\3y\3y\3")
- buf.write("y\3z\3z\3z\3z\3z\3z\3z\3z\3z\3z\3z\3z\5z\u083e\nz\3z\3")
- buf.write("z\3z\3z\5z\u0844\nz\3{\3{\3{\7{\u0849\n{\f{\16{\u084c")
- buf.write("\13{\3|\3|\3}\3}\3}\3}\5}\u0854\n}\3~\3~\3~\3~\3~\3\177")
- buf.write("\3\177\3\u0080\3\u0080\3\u0081\3\u0081\3\u0081\3\u0081")
- buf.write("\3\u0081\3\u0081\5\u0081\u0865\n\u0081\3\u0082\3\u0082")
- buf.write("\3\u0082\3\u0082\5\u0082\u086b\n\u0082\3\u0083\3\u0083")
- buf.write("\3\u0083\3\u0083\7\u0083\u0871\n\u0083\f\u0083\16\u0083")
- buf.write("\u0874\13\u0083\3\u0083\3\u0083\3\u0083\3\u0084\3\u0084")
- buf.write("\3\u0084\3\u0084\3\u0084\3\u0084\7\u0084\u087f\n\u0084")
- buf.write("\f\u0084\16\u0084\u0882\13\u0084\3\u0084\3\u0084\5\u0084")
- buf.write("\u0886\n\u0084\3\u0084\3\u0084\3\u0084\3\u0085\3\u0085")
- buf.write("\3\u0085\3\u0085\3\u0085\3\u0085\7\u0085\u0891\n\u0085")
- buf.write("\f\u0085\16\u0085\u0894\13\u0085\3\u0085\3\u0085\5\u0085")
- buf.write("\u0898\n\u0085\3\u0085\3\u0085\3\u0085\3\u0086\3\u0086")
- buf.write("\3\u0086\3\u0086\3\u0086\3\u0086\7\u0086\u08a3\n\u0086")
- buf.write("\f\u0086\16\u0086\u08a6\13\u0086\3\u0086\3\u0086\5\u0086")
- buf.write("\u08aa\n\u0086\3\u0086\3\u0086\3\u0086\7\u0086\u08af\n")
- buf.write("\u0086\f\u0086\16\u0086\u08b2\13\u0086\3\u0086\3\u0086")
- buf.write("\3\u0086\3\u0087\3\u0087\3\u0087\3\u0087\3\u0087\3\u0087")
- buf.write("\7\u0087\u08bd\n\u0087\f\u0087\16\u0087\u08c0\13\u0087")
- buf.write("\3\u0087\3\u0087\5\u0087\u08c4\n\u0087\3\u0087\3\u0087")
- buf.write("\3\u0087\7\u0087\u08c9\n\u0087\f\u0087\16\u0087\u08cc")
- buf.write("\13\u0087\3\u0087\3\u0087\3\u0087\3\u0088\3\u0088\3\u0088")
+ buf.write("y\3y\3y\3y\3y\3y\3y\5y\u0828\ny\3y\7y\u082b\ny\fy\16y")
+ buf.write("\u082e\13y\5y\u0830\ny\3y\3y\3y\3z\3z\3z\3z\3z\3z\3z\3")
+ buf.write("z\3z\3z\3z\3z\5z\u0841\nz\3z\3z\3z\3z\5z\u0847\nz\3{\3")
+ buf.write("{\3{\7{\u084c\n{\f{\16{\u084f\13{\3|\3|\3}\3}\3}\3}\5")
+ buf.write("}\u0857\n}\3~\3~\3~\3~\3~\3\177\3\177\3\u0080\3\u0080")
+ buf.write("\3\u0081\3\u0081\3\u0081\3\u0081\3\u0081\3\u0081\5\u0081")
+ buf.write("\u0868\n\u0081\3\u0082\3\u0082\3\u0082\3\u0082\5\u0082")
+ buf.write("\u086e\n\u0082\3\u0083\3\u0083\3\u0083\3\u0083\7\u0083")
+ buf.write("\u0874\n\u0083\f\u0083\16\u0083\u0877\13\u0083\3\u0083")
+ buf.write("\3\u0083\3\u0083\3\u0084\3\u0084\3\u0084\3\u0084\3\u0084")
+ buf.write("\3\u0084\7\u0084\u0882\n\u0084\f\u0084\16\u0084\u0885")
+ buf.write("\13\u0084\3\u0084\3\u0084\5\u0084\u0889\n\u0084\3\u0084")
+ buf.write("\3\u0084\3\u0084\3\u0085\3\u0085\3\u0085\3\u0085\3\u0085")
+ buf.write("\3\u0085\7\u0085\u0894\n\u0085\f\u0085\16\u0085\u0897")
+ buf.write("\13\u0085\3\u0085\3\u0085\5\u0085\u089b\n\u0085\3\u0085")
+ buf.write("\3\u0085\3\u0085\3\u0086\3\u0086\3\u0086\3\u0086\3\u0086")
+ buf.write("\3\u0086\7\u0086\u08a6\n\u0086\f\u0086\16\u0086\u08a9")
+ buf.write("\13\u0086\3\u0086\3\u0086\5\u0086\u08ad\n\u0086\3\u0086")
+ buf.write("\3\u0086\3\u0086\7\u0086\u08b2\n\u0086\f\u0086\16\u0086")
+ buf.write("\u08b5\13\u0086\3\u0086\3\u0086\3\u0086\3\u0087\3\u0087")
+ buf.write("\3\u0087\3\u0087\3\u0087\3\u0087\7\u0087\u08c0\n\u0087")
+ buf.write("\f\u0087\16\u0087\u08c3\13\u0087\3\u0087\3\u0087\5\u0087")
+ buf.write("\u08c7\n\u0087\3\u0087\3\u0087\3\u0087\7\u0087\u08cc\n")
+ buf.write("\u0087\f\u0087\16\u0087\u08cf\13\u0087\3\u0087\3\u0087")
+ buf.write("\3\u0087\3\u0088\3\u0088\3\u0088\3\u0088\3\u0088\3\u0088")
buf.write("\3\u0088\3\u0088\3\u0088\3\u0088\3\u0088\3\u0088\3\u0088")
- buf.write("\3\u0088\3\u0088\3\u0088\7\u0088\u08de\n\u0088\f\u0088")
- buf.write("\16\u0088\u08e1\13\u0088\3\u0088\3\u0088\5\u0088\u08e5")
- buf.write("\n\u0088\3\u0088\3\u0088\3\u0088\3\u0088\3\u0089\3\u0089")
- buf.write("\3\u0089\5\u0089\u08ee\n\u0089\3\u008a\3\u008a\3\u008a")
- buf.write("\3\u008a\3\u008a\3\u008a\3\u008a\3\u008a\3\u008a\3\u008a")
+ buf.write("\7\u0088\u08e1\n\u0088\f\u0088\16\u0088\u08e4\13\u0088")
+ buf.write("\3\u0088\3\u0088\5\u0088\u08e8\n\u0088\3\u0088\3\u0088")
+ buf.write("\3\u0088\3\u0088\3\u0089\3\u0089\3\u0089\5\u0089\u08f1")
+ buf.write("\n\u0089\3\u008a\3\u008a\3\u008a\3\u008a\3\u008a\3\u008a")
+ buf.write("\3\u008a\3\u008a\3\u008a\3\u008a\3\u008b\3\u008b\3\u008b")
buf.write("\3\u008b\3\u008b\3\u008b\3\u008b\3\u008b\3\u008b\3\u008b")
buf.write("\3\u008b\3\u008b\3\u008b\3\u008b\3\u008b\3\u008b\3\u008b")
- buf.write("\3\u008b\3\u008b\3\u008b\3\u008b\3\u008b\3\u008b\3\u008b")
- buf.write("\5\u008b\u090f\n\u008b\3\u008b\3\u008b\3\u008c\3\u008c")
+ buf.write("\3\u008b\3\u008b\3\u008b\3\u008b\5\u008b\u0912\n\u008b")
+ buf.write("\3\u008b\3\u008b\3\u008c\3\u008c\3\u008c\3\u008c\3\u008c")
buf.write("\3\u008c\3\u008c\3\u008c\3\u008c\3\u008c\3\u008c\3\u008c")
buf.write("\3\u008c\3\u008c\3\u008c\3\u008c\3\u008c\3\u008c\3\u008c")
buf.write("\3\u008c\3\u008c\3\u008c\3\u008c\3\u008c\3\u008c\3\u008c")
- buf.write("\3\u008c\3\u008c\3\u008c\7\u008c\u092d\n\u008c\f\u008c")
- buf.write("\16\u008c\u0930\13\u008c\5\u008c\u0932\n\u008c\3\u008c")
- buf.write("\3\u008c\3\u008c\3\u008c\5\u008c\u0938\n\u008c\3\u008c")
- buf.write("\3\u008c\3\u008d\3\u008d\3\u008d\3\u008d\3\u008e\3\u008e")
- buf.write("\5\u008e\u0942\n\u008e\3\u008e\3\u008e\3\u008e\3\u008e")
+ buf.write("\7\u008c\u0930\n\u008c\f\u008c\16\u008c\u0933\13\u008c")
+ buf.write("\5\u008c\u0935\n\u008c\3\u008c\3\u008c\3\u008c\3\u008c")
+ buf.write("\5\u008c\u093b\n\u008c\3\u008c\3\u008c\3\u008d\3\u008d")
+ buf.write("\3\u008d\3\u008d\3\u008e\3\u008e\5\u008e\u0945\n\u008e")
+ buf.write("\3\u008e\3\u008e\3\u008e\3\u008e\3\u008e\3\u008e\3\u008e")
buf.write("\3\u008e\3\u008e\3\u008e\3\u008e\3\u008e\3\u008e\3\u008e")
- buf.write("\3\u008e\3\u008e\3\u008e\3\u008e\3\u008e\3\u008e\5\u008e")
- buf.write("\u0955\n\u008e\3\u008f\3\u008f\3\u008f\3\u008f\3\u008f")
- buf.write("\3\u008f\3\u008f\3\u008f\3\u008f\3\u008f\3\u008f\5\u008f")
- buf.write("\u0962\n\u008f\3\u008f\3\u008f\3\u008f\3\u008f\5\u008f")
- buf.write("\u0968\n\u008f\3\u008f\3\u008f\3\u008f\3\u008f\5\u008f")
- buf.write("\u096e\n\u008f\3\u008f\3\u008f\3\u008f\3\u008f\5\u008f")
- buf.write("\u0974\n\u008f\3\u008f\3\u008f\3\u008f\3\u008f\5\u008f")
- buf.write("\u097a\n\u008f\3\u008f\3\u008f\3\u008f\3\u008f\5\u008f")
- buf.write("\u0980\n\u008f\3\u008f\3\u008f\3\u008f\3\u008f\5\u008f")
- buf.write("\u0986\n\u008f\3\u008f\3\u008f\3\u008f\3\u008f\5\u008f")
- buf.write("\u098c\n\u008f\3\u008f\3\u008f\3\u008f\3\u008f\5\u008f")
- buf.write("\u0992\n\u008f\3\u008f\3\u008f\3\u008f\3\u008f\5\u008f")
- buf.write("\u0998\n\u008f\5\u008f\u099a\n\u008f\3\u008f\7\u008f\u099d")
- buf.write("\n\u008f\f\u008f\16\u008f\u09a0\13\u008f\5\u008f\u09a2")
- buf.write("\n\u008f\3\u008f\3\u008f\7\u008f\u09a6\n\u008f\f\u008f")
- buf.write("\16\u008f\u09a9\13\u008f\3\u008f\5\u008f\u09ac\n\u008f")
- buf.write("\3\u008f\3\u008f\3\u0090\3\u0090\3\u0090\3\u0090\3\u0090")
- buf.write("\5\u0090\u09b5\n\u0090\3\u0090\3\u0090\7\u0090\u09b9\n")
- buf.write("\u0090\f\u0090\16\u0090\u09bc\13\u0090\3\u0090\3\u0090")
- buf.write("\3\u0090\3\u0091\3\u0091\3\u0091\3\u0092\3\u0092\3\u0093")
- buf.write("\3\u0093\3\u0093\7\u0093\u09c9\n\u0093\f\u0093\16\u0093")
- buf.write("\u09cc\13\u0093\3\u0094\3\u0094\3\u0094\7\u0094\u09d1")
- buf.write("\n\u0094\f\u0094\16\u0094\u09d4\13\u0094\3\u0095\3\u0095")
- buf.write("\3\u0095\7\u0095\u09d9\n\u0095\f\u0095\16\u0095\u09dc")
- buf.write("\13\u0095\3\u0096\3\u0096\3\u0096\7\u0096\u09e1\n\u0096")
- buf.write("\f\u0096\16\u0096\u09e4\13\u0096\3\u0097\3\u0097\3\u0097")
- buf.write("\7\u0097\u09e9\n\u0097\f\u0097\16\u0097\u09ec\13\u0097")
- buf.write("\3\u0098\3\u0098\7\u0098\u09f0\n\u0098\f\u0098\16\u0098")
- buf.write("\u09f3\13\u0098\3\u0099\3\u0099\3\u0099\3\u0099\5\u0099")
- buf.write("\u09f9\n\u0099\3\u009a\3\u009a\7\u009a\u09fd\n\u009a\f")
- buf.write("\u009a\16\u009a\u0a00\13\u009a\3\u009b\3\u009b\3\u009b")
- buf.write("\3\u009b\3\u009b\3\u009b\3\u009b\3\u009b\5\u009b\u0a0a")
- buf.write("\n\u009b\3\u009c\3\u009c\7\u009c\u0a0e\n\u009c\f\u009c")
- buf.write("\16\u009c\u0a11\13\u009c\3\u009d\3\u009d\3\u009d\3\u009d")
- buf.write("\5\u009d\u0a17\n\u009d\3\u009e\3\u009e\7\u009e\u0a1b\n")
- buf.write("\u009e\f\u009e\16\u009e\u0a1e\13\u009e\3\u009f\3\u009f")
- buf.write("\3\u009f\3\u009f\5\u009f\u0a24\n\u009f\3\u00a0\3\u00a0")
- buf.write("\7\u00a0\u0a28\n\u00a0\f\u00a0\16\u00a0\u0a2b\13\u00a0")
- buf.write("\3\u00a1\3\u00a1\3\u00a1\3\u00a1\3\u00a1\3\u00a1\5\u00a1")
- buf.write("\u0a33\n\u00a1\3\u00a2\3\u00a2\3\u00a2\7\u00a2\u0a38\n")
- buf.write("\u00a2\f\u00a2\16\u00a2\u0a3b\13\u00a2\3\u00a2\3\u00a2")
- buf.write("\3\u00a3\3\u00a3\3\u00a3\3\u00a3\3\u00a3\3\u00a3\3\u00a3")
- buf.write("\3\u00a3\3\u00a3\3\u00a3\3\u00a3\3\u00a3\5\u00a3\u0a4b")
- buf.write("\n\u00a3\3\u00a4\3\u00a4\3\u00a4\3\u00a4\3\u00a4\3\u00a4")
- buf.write("\3\u00a4\3\u00a5\3\u00a5\3\u00a5\3\u00a5\3\u00a5\3\u00a5")
- buf.write("\3\u00a5\3\u00a6\3\u00a6\3\u00a6\3\u00a6\3\u00a6\3\u00a6")
- buf.write("\3\u00a6\3\u00a6\3\u00a6\3\u00a7\3\u00a7\3\u00a7\3\u00a7")
- buf.write("\3\u00a8\3\u00a8\3\u00a8\3\u00a8\3\u00a8\3\u00a8\3\u00a8")
- buf.write("\3\u00a8\3\u00a8\3\u00a8\3\u00a8\5\u00a8\u0a73\n\u00a8")
- buf.write("\3\u00a9\3\u00a9\3\u00aa\3\u00aa\3\u00aa\3\u00aa\3\u00aa")
- buf.write("\3\u00aa\3\u00aa\3\u00aa\3\u00aa\3\u00aa\3\u00aa\3\u00aa")
- buf.write("\3\u00aa\3\u00aa\3\u00aa\5\u00aa\u0a86\n\u00aa\3\u00ab")
+ buf.write("\3\u008e\3\u008e\3\u008e\5\u008e\u0958\n\u008e\3\u008f")
+ buf.write("\3\u008f\3\u008f\3\u008f\3\u008f\3\u008f\3\u008f\3\u008f")
+ buf.write("\3\u008f\3\u008f\3\u008f\5\u008f\u0965\n\u008f\3\u008f")
+ buf.write("\3\u008f\3\u008f\3\u008f\5\u008f\u096b\n\u008f\3\u008f")
+ buf.write("\3\u008f\3\u008f\3\u008f\5\u008f\u0971\n\u008f\3\u008f")
+ buf.write("\3\u008f\3\u008f\3\u008f\5\u008f\u0977\n\u008f\3\u008f")
+ buf.write("\3\u008f\3\u008f\3\u008f\5\u008f\u097d\n\u008f\3\u008f")
+ buf.write("\3\u008f\3\u008f\3\u008f\5\u008f\u0983\n\u008f\3\u008f")
+ buf.write("\3\u008f\3\u008f\3\u008f\5\u008f\u0989\n\u008f\3\u008f")
+ buf.write("\3\u008f\3\u008f\3\u008f\5\u008f\u098f\n\u008f\3\u008f")
+ buf.write("\3\u008f\3\u008f\3\u008f\5\u008f\u0995\n\u008f\3\u008f")
+ buf.write("\3\u008f\3\u008f\3\u008f\5\u008f\u099b\n\u008f\5\u008f")
+ buf.write("\u099d\n\u008f\3\u008f\7\u008f\u09a0\n\u008f\f\u008f\16")
+ buf.write("\u008f\u09a3\13\u008f\5\u008f\u09a5\n\u008f\3\u008f\3")
+ buf.write("\u008f\7\u008f\u09a9\n\u008f\f\u008f\16\u008f\u09ac\13")
+ buf.write("\u008f\3\u008f\5\u008f\u09af\n\u008f\3\u008f\3\u008f\3")
+ buf.write("\u0090\3\u0090\3\u0090\3\u0090\3\u0090\5\u0090\u09b8\n")
+ buf.write("\u0090\3\u0090\3\u0090\7\u0090\u09bc\n\u0090\f\u0090\16")
+ buf.write("\u0090\u09bf\13\u0090\3\u0090\3\u0090\3\u0090\3\u0091")
+ buf.write("\3\u0091\3\u0091\3\u0092\3\u0092\3\u0093\3\u0093\3\u0093")
+ buf.write("\7\u0093\u09cc\n\u0093\f\u0093\16\u0093\u09cf\13\u0093")
+ buf.write("\3\u0094\3\u0094\3\u0094\7\u0094\u09d4\n\u0094\f\u0094")
+ buf.write("\16\u0094\u09d7\13\u0094\3\u0095\3\u0095\3\u0095\7\u0095")
+ buf.write("\u09dc\n\u0095\f\u0095\16\u0095\u09df\13\u0095\3\u0096")
+ buf.write("\3\u0096\3\u0096\7\u0096\u09e4\n\u0096\f\u0096\16\u0096")
+ buf.write("\u09e7\13\u0096\3\u0097\3\u0097\3\u0097\7\u0097\u09ec")
+ buf.write("\n\u0097\f\u0097\16\u0097\u09ef\13\u0097\3\u0098\3\u0098")
+ buf.write("\7\u0098\u09f3\n\u0098\f\u0098\16\u0098\u09f6\13\u0098")
+ buf.write("\3\u0099\3\u0099\3\u0099\3\u0099\5\u0099\u09fc\n\u0099")
+ buf.write("\3\u009a\3\u009a\7\u009a\u0a00\n\u009a\f\u009a\16\u009a")
+ buf.write("\u0a03\13\u009a\3\u009b\3\u009b\3\u009b\3\u009b\3\u009b")
+ buf.write("\3\u009b\3\u009b\3\u009b\5\u009b\u0a0d\n\u009b\3\u009c")
+ buf.write("\3\u009c\7\u009c\u0a11\n\u009c\f\u009c\16\u009c\u0a14")
+ buf.write("\13\u009c\3\u009d\3\u009d\3\u009d\3\u009d\5\u009d\u0a1a")
+ buf.write("\n\u009d\3\u009e\3\u009e\7\u009e\u0a1e\n\u009e\f\u009e")
+ buf.write("\16\u009e\u0a21\13\u009e\3\u009f\3\u009f\3\u009f\3\u009f")
+ buf.write("\5\u009f\u0a27\n\u009f\3\u00a0\3\u00a0\7\u00a0\u0a2b\n")
+ buf.write("\u00a0\f\u00a0\16\u00a0\u0a2e\13\u00a0\3\u00a1\3\u00a1")
+ buf.write("\3\u00a1\3\u00a1\3\u00a1\3\u00a1\5\u00a1\u0a36\n\u00a1")
+ buf.write("\3\u00a2\7\u00a2\u0a39\n\u00a2\f\u00a2\16\u00a2\u0a3c")
+ buf.write("\13\u00a2\3\u00a2\3\u00a2\3\u00a3\3\u00a3\3\u00a3\3\u00a3")
+ buf.write("\3\u00a4\3\u00a4\3\u00a4\3\u00a4\3\u00a4\3\u00a4\3\u00a4")
+ buf.write("\3\u00a4\3\u00a4\3\u00a4\3\u00a4\5\u00a4\u0a4f\n\u00a4")
+ buf.write("\3\u00a5\3\u00a5\3\u00a5\3\u00a5\3\u00a5\3\u00a5\3\u00a5")
+ buf.write("\3\u00a6\3\u00a6\3\u00a6\3\u00a6\3\u00a6\3\u00a6\3\u00a6")
+ buf.write("\3\u00a7\3\u00a7\3\u00a7\3\u00a7\3\u00a7\3\u00a7\3\u00a7")
+ buf.write("\3\u00a7\3\u00a7\3\u00a8\3\u00a8\3\u00a8\3\u00a8\3\u00a9")
+ buf.write("\3\u00a9\3\u00a9\3\u00a9\3\u00a9\3\u00a9\3\u00a9\3\u00a9")
+ buf.write("\3\u00a9\3\u00a9\3\u00a9\5\u00a9\u0a77\n\u00a9\3\u00aa")
+ buf.write("\3\u00aa\3\u00ab\3\u00ab\3\u00ab\3\u00ab\3\u00ab\3\u00ab")
buf.write("\3\u00ab\3\u00ab\3\u00ab\3\u00ab\3\u00ab\3\u00ab\3\u00ab")
- buf.write("\3\u00ab\3\u00ab\3\u00ab\3\u00ab\5\u00ab\u0a94\n\u00ab")
+ buf.write("\3\u00ab\3\u00ab\5\u00ab\u0a8a\n\u00ab\3\u00ac\3\u00ac")
buf.write("\3\u00ac\3\u00ac\3\u00ac\3\u00ac\3\u00ac\3\u00ac\3\u00ac")
- buf.write("\3\u00ac\3\u00ac\3\u00ac\3\u00ac\3\u00ac\5\u00ac\u0aa2")
- buf.write("\n\u00ac\3\u00ad\3\u00ad\3\u00ad\3\u00ad\6\u00ad\u0aa8")
- buf.write("\n\u00ad\r\u00ad\16\u00ad\u0aa9\3\u00ae\3\u00ae\3\u00ae")
- buf.write("\3\u00ae\3\u00ae\3\u00ae\3\u00ae\7\u00ae\u0ab3\n\u00ae")
- buf.write("\f\u00ae\16\u00ae\u0ab6\13\u00ae\5\u00ae\u0ab8\n\u00ae")
- buf.write("\3\u00af\3\u00af\3\u00af\3\u00af\5\u00af\u0abe\n\u00af")
- buf.write("\3\u00b0\3\u00b0\3\u00b0\3\u00b0\3\u00b0\3\u00b1\3\u00b1")
- buf.write("\3\u00b1\3\u00b1\3\u00b1\3\u00b2\3\u00b2\3\u00b2\3\u00b2")
- buf.write("\3\u00b2\3\u00b2\3\u00b2\5\u00b2\u0ad1\n\u00b2\3\u00b2")
- buf.write("\3\u00b2\3\u00b3\3\u00b3\3\u00b4\3\u00b4\3\u00b4\3\u00b4")
- buf.write("\3\u00b4\3\u00b5\3\u00b5\3\u00b6\3\u00b6\3\u00b6\3\u00b6")
- buf.write("\3\u00b6\3\u00b6\3\u00b6\5\u00b6\u0ae5\n\u00b6\3\u00b6")
- buf.write("\3\u00b6\3\u00b7\3\u00b7\3\u00b8\3\u00b8\3\u00b8\3\u00b8")
- buf.write("\3\u00b8\3\u00b8\3\u00b8\3\u00b8\3\u00b8\3\u00b8\5\u00b8")
- buf.write("\u0af5\n\u00b8\3\u00b9\3\u00b9\3\u00b9\3\u00b9\3\u00b9")
- buf.write("\3\u00ba\3\u00ba\3\u00ba\3\u00ba\3\u00ba\3\u00bb\3\u00bb")
- buf.write("\3\u00bb\3\u00bb\3\u00bb\3\u00bb\3\u00bb\3\u00bb\3\u00bb")
- buf.write("\5\u00bb\u0b0a\n\u00bb\3\u00bb\3\u00bb\3\u00bb\3\u00bb")
- buf.write("\3\u00bb\5\u00bb\u0b11\n\u00bb\3\u00bb\3\u00bb\3\u00bb")
- buf.write("\3\u00bc\3\u00bc\3\u00bc\3\u00bc\3\u00bc\3\u00bd\3\u00bd")
- buf.write("\3\u00bd\3\u00bd\3\u00bd\3\u00be\3\u00be\3\u00be\3\u00be")
- buf.write("\3\u00be\5\u00be\u0b25\n\u00be\3\u00be\3\u00be\3\u00be")
- buf.write("\3\u00be\3\u00bf\3\u00bf\3\u00bf\3\u00bf\3\u00bf\3\u00c0")
- buf.write("\3\u00c0\3\u00c0\3\u00c0\3\u00c0\3\u00c1\3\u00c1\3\u00c1")
- buf.write("\3\u00c1\3\u00c1\3\u00c2\3\u00c2\3\u00c2\3\u00c2\3\u00c2")
- buf.write("\3\u00c2\3\u00c2\5\u00c2\u0b41\n\u00c2\3\u00c2\3\u00c2")
- buf.write("\3\u00c2\3\u00c2\3\u00c3\3\u00c3\3\u00c3\3\u00c3\3\u00c3")
- buf.write("\5\u00c3\u0b4c\n\u00c3\3\u00c4\3\u00c4\3\u00c4\3\u00c4")
- buf.write("\3\u00c4\3\u00c4\3\u00c4\3\u00c4\3\u00c4\3\u00c5\3\u00c5")
- buf.write("\3\u00c5\3\u00c5\3\u00c5\7\u00c5\u0b5c\n\u00c5\f\u00c5")
- buf.write("\16\u00c5\u0b5f\13\u00c5\3\u00c5\3\u00c5\3\u00c5\3\u00c5")
- buf.write("\3\u00c5\3\u00c5\3\u00c5\3\u00c5\3\u00c6\3\u00c6\3\u00c7")
- buf.write("\3\u00c7\3\u00c7\3\u00c7\3\u00c7\3\u00c7\3\u00c7\3\u00c7")
- buf.write("\3\u00c7\3\u00c8\3\u00c8\3\u00c8\3\u00c8\3\u00c8\3\u00c8")
- buf.write("\3\u00c8\3\u00c8\3\u00c8\3\u00c9\3\u00c9\3\u00c9\3\u00c9")
- buf.write("\3\u00c9\3\u00c9\3\u00c9\7\u00c9\u0b84\n\u00c9\f\u00c9")
- buf.write("\16\u00c9\u0b87\13\u00c9\3\u00c9\3\u00c9\3\u00c9\3\u00c9")
- buf.write("\3\u00c9\3\u00c9\3\u00c9\3\u00c9\3\u00ca\3\u00ca\3\u00cb")
- buf.write("\3\u00cb\3\u00cb\3\u00cb\3\u00cb\3\u00cb\3\u00cb\3\u00cb")
- buf.write("\3\u00cb\7\u00cb\u0b9c\n\u00cb\f\u00cb\16\u00cb\u0b9f")
- buf.write("\13\u00cb\3\u00cb\3\u00cb\3\u00cb\2\2\u00cc\2\4\6\b\n")
- buf.write("\f\16\20\22\24\26\30\32\34\36 \"$&(*,.\60\62\64\668:<")
- buf.write(">@BDFHJLNPRTVXZ\\^`bdfhjlnprtvxz|~\u0080\u0082\u0084\u0086")
- buf.write("\u0088\u008a\u008c\u008e\u0090\u0092\u0094\u0096\u0098")
- buf.write("\u009a\u009c\u009e\u00a0\u00a2\u00a4\u00a6\u00a8\u00aa")
- buf.write("\u00ac\u00ae\u00b0\u00b2\u00b4\u00b6\u00b8\u00ba\u00bc")
- buf.write("\u00be\u00c0\u00c2\u00c4\u00c6\u00c8\u00ca\u00cc\u00ce")
- buf.write("\u00d0\u00d2\u00d4\u00d6\u00d8\u00da\u00dc\u00de\u00e0")
- buf.write("\u00e2\u00e4\u00e6\u00e8\u00ea\u00ec\u00ee\u00f0\u00f2")
- buf.write("\u00f4\u00f6\u00f8\u00fa\u00fc\u00fe\u0100\u0102\u0104")
- buf.write("\u0106\u0108\u010a\u010c\u010e\u0110\u0112\u0114\u0116")
- buf.write("\u0118\u011a\u011c\u011e\u0120\u0122\u0124\u0126\u0128")
- buf.write("\u012a\u012c\u012e\u0130\u0132\u0134\u0136\u0138\u013a")
- buf.write("\u013c\u013e\u0140\u0142\u0144\u0146\u0148\u014a\u014c")
- buf.write("\u014e\u0150\u0152\u0154\u0156\u0158\u015a\u015c\u015e")
- buf.write("\u0160\u0162\u0164\u0166\u0168\u016a\u016c\u016e\u0170")
- buf.write("\u0172\u0174\u0176\u0178\u017a\u017c\u017e\u0180\u0182")
- buf.write("\u0184\u0186\u0188\u018a\u018c\u018e\u0190\u0192\u0194")
+ buf.write("\3\u00ac\3\u00ac\3\u00ac\5\u00ac\u0a98\n\u00ac\3\u00ad")
+ buf.write("\3\u00ad\3\u00ad\3\u00ad\3\u00ad\3\u00ad\3\u00ad\3\u00ad")
+ buf.write("\3\u00ad\3\u00ad\3\u00ad\3\u00ad\5\u00ad\u0aa6\n\u00ad")
+ buf.write("\3\u00ae\3\u00ae\3\u00ae\3\u00ae\6\u00ae\u0aac\n\u00ae")
+ buf.write("\r\u00ae\16\u00ae\u0aad\3\u00af\3\u00af\3\u00af\3\u00af")
+ buf.write("\3\u00af\3\u00af\3\u00af\7\u00af\u0ab7\n\u00af\f\u00af")
+ buf.write("\16\u00af\u0aba\13\u00af\5\u00af\u0abc\n\u00af\3\u00b0")
+ buf.write("\3\u00b0\3\u00b0\3\u00b0\5\u00b0\u0ac2\n\u00b0\3\u00b1")
+ buf.write("\3\u00b1\3\u00b1\3\u00b1\3\u00b1\3\u00b2\3\u00b2\3\u00b2")
+ buf.write("\3\u00b2\3\u00b2\3\u00b3\3\u00b3\3\u00b3\3\u00b3\3\u00b3")
+ buf.write("\3\u00b3\3\u00b3\5\u00b3\u0ad5\n\u00b3\3\u00b3\3\u00b3")
+ buf.write("\3\u00b4\3\u00b4\3\u00b5\3\u00b5\3\u00b5\3\u00b5\3\u00b5")
+ buf.write("\3\u00b6\3\u00b6\3\u00b7\3\u00b7\3\u00b7\3\u00b7\3\u00b7")
+ buf.write("\3\u00b7\3\u00b7\5\u00b7\u0ae9\n\u00b7\3\u00b7\3\u00b7")
+ buf.write("\3\u00b8\3\u00b8\3\u00b9\3\u00b9\3\u00b9\3\u00b9\3\u00b9")
+ buf.write("\3\u00b9\3\u00b9\3\u00b9\3\u00b9\3\u00b9\5\u00b9\u0af9")
+ buf.write("\n\u00b9\3\u00ba\3\u00ba\3\u00ba\3\u00ba\3\u00ba\3\u00bb")
+ buf.write("\3\u00bb\3\u00bb\3\u00bb\3\u00bb\3\u00bc\3\u00bc\3\u00bc")
+ buf.write("\3\u00bc\3\u00bc\3\u00bc\3\u00bc\3\u00bc\3\u00bc\5\u00bc")
+ buf.write("\u0b0e\n\u00bc\3\u00bc\3\u00bc\3\u00bc\3\u00bc\3\u00bc")
+ buf.write("\5\u00bc\u0b15\n\u00bc\3\u00bc\3\u00bc\3\u00bc\3\u00bd")
+ buf.write("\3\u00bd\3\u00bd\3\u00bd\3\u00bd\3\u00be\3\u00be\3\u00be")
+ buf.write("\3\u00be\3\u00be\3\u00bf\3\u00bf\3\u00bf\3\u00bf\3\u00bf")
+ buf.write("\5\u00bf\u0b29\n\u00bf\3\u00bf\3\u00bf\3\u00bf\3\u00bf")
+ buf.write("\3\u00c0\3\u00c0\3\u00c0\3\u00c0\3\u00c0\3\u00c1\3\u00c1")
+ buf.write("\3\u00c1\3\u00c1\3\u00c1\3\u00c2\3\u00c2\3\u00c2\3\u00c2")
+ buf.write("\3\u00c2\3\u00c3\3\u00c3\3\u00c3\3\u00c3\3\u00c3\3\u00c3")
+ buf.write("\3\u00c3\5\u00c3\u0b45\n\u00c3\3\u00c3\3\u00c3\3\u00c3")
+ buf.write("\3\u00c3\3\u00c4\3\u00c4\3\u00c4\3\u00c4\3\u00c4\5\u00c4")
+ buf.write("\u0b50\n\u00c4\3\u00c5\3\u00c5\3\u00c5\3\u00c5\3\u00c5")
+ buf.write("\3\u00c5\3\u00c5\3\u00c5\3\u00c5\3\u00c6\3\u00c6\3\u00c6")
+ buf.write("\3\u00c6\3\u00c6\7\u00c6\u0b60\n\u00c6\f\u00c6\16\u00c6")
+ buf.write("\u0b63\13\u00c6\3\u00c6\3\u00c6\3\u00c6\3\u00c6\3\u00c6")
+ buf.write("\3\u00c6\3\u00c6\3\u00c6\3\u00c7\3\u00c7\3\u00c8\3\u00c8")
+ buf.write("\3\u00c8\3\u00c8\3\u00c8\3\u00c8\3\u00c8\3\u00c8\3\u00c8")
+ buf.write("\3\u00c9\3\u00c9\3\u00c9\3\u00c9\3\u00c9\3\u00c9\3\u00c9")
+ buf.write("\3\u00c9\3\u00c9\3\u00ca\3\u00ca\3\u00ca\3\u00ca\3\u00ca")
+ buf.write("\3\u00ca\3\u00ca\7\u00ca\u0b88\n\u00ca\f\u00ca\16\u00ca")
+ buf.write("\u0b8b\13\u00ca\3\u00ca\3\u00ca\3\u00ca\3\u00ca\3\u00ca")
+ buf.write("\3\u00ca\3\u00ca\3\u00ca\3\u00cb\3\u00cb\3\u00cc\3\u00cc")
+ buf.write("\3\u00cc\3\u00cc\3\u00cc\3\u00cc\3\u00cc\3\u00cc\3\u00cc")
+ buf.write("\7\u00cc\u0ba0\n\u00cc\f\u00cc\16\u00cc\u0ba3\13\u00cc")
+ buf.write("\3\u00cc\3\u00cc\3\u00cc\2\2\u00cd\2\4\6\b\n\f\16\20\22")
+ buf.write("\24\26\30\32\34\36 \"$&(*,.\60\62\64\668:<>@BDFHJLNPR")
+ buf.write("TVXZ\\^`bdfhjlnprtvxz|~\u0080\u0082\u0084\u0086\u0088")
+ buf.write("\u008a\u008c\u008e\u0090\u0092\u0094\u0096\u0098\u009a")
+ buf.write("\u009c\u009e\u00a0\u00a2\u00a4\u00a6\u00a8\u00aa\u00ac")
+ buf.write("\u00ae\u00b0\u00b2\u00b4\u00b6\u00b8\u00ba\u00bc\u00be")
+ buf.write("\u00c0\u00c2\u00c4\u00c6\u00c8\u00ca\u00cc\u00ce\u00d0")
+ buf.write("\u00d2\u00d4\u00d6\u00d8\u00da\u00dc\u00de\u00e0\u00e2")
+ buf.write("\u00e4\u00e6\u00e8\u00ea\u00ec\u00ee\u00f0\u00f2\u00f4")
+ buf.write("\u00f6\u00f8\u00fa\u00fc\u00fe\u0100\u0102\u0104\u0106")
+ buf.write("\u0108\u010a\u010c\u010e\u0110\u0112\u0114\u0116\u0118")
+ buf.write("\u011a\u011c\u011e\u0120\u0122\u0124\u0126\u0128\u012a")
+ buf.write("\u012c\u012e\u0130\u0132\u0134\u0136\u0138\u013a\u013c")
+ buf.write("\u013e\u0140\u0142\u0144\u0146\u0148\u014a\u014c\u014e")
+ buf.write("\u0150\u0152\u0154\u0156\u0158\u015a\u015c\u015e\u0160")
+ buf.write("\u0162\u0164\u0166\u0168\u016a\u016c\u016e\u0170\u0172")
+ buf.write("\u0174\u0176\u0178\u017a\u017c\u017e\u0180\u0182\u0184")
+ buf.write("\u0186\u0188\u018a\u018c\u018e\u0190\u0192\u0194\u0196")
buf.write("\2\20\3\2\4\5\4\2\u00ac\u00b2\u00fa\u00fa\4\2\u00b3\u00b6")
buf.write("\u00fa\u00fa\4\2\n\n\u00fa\u00fa\5\2\u00b7\u00b9\u00bd")
buf.write("\u00bf\u00fa\u00fa\4\2\u00ba\u00bf\u00fa\u00fa\3\2\u0085")
buf.write("\u0086\3\2\u008a\u008c\3\2RV\3\2\u00fa\u00fb\3\2\u00ef")
buf.write("\u00f2\4\2\u00d3\u00d9\u00fa\u00fa\3\2\u00f6\u00f7\3\2")
- buf.write("\u00f8\u00fa\2\u0c6e\2\u019b\3\2\2\2\4\u01a0\3\2\2\2\6")
- buf.write("\u01a2\3\2\2\2\b\u01ac\3\2\2\2\n\u01ae\3\2\2\2\f\u01b9")
- buf.write("\3\2\2\2\16\u01cb\3\2\2\2\20\u01ec\3\2\2\2\22\u01ef\3")
- buf.write("\2\2\2\24\u01f8\3\2\2\2\26\u0201\3\2\2\2\30\u020a\3\2")
- buf.write("\2\2\32\u0213\3\2\2\2\34\u021c\3\2\2\2\36\u0225\3\2\2")
- buf.write("\2 \u022e\3\2\2\2\"\u0237\3\2\2\2$\u0240\3\2\2\2&\u0249")
- buf.write("\3\2\2\2(\u0251\3\2\2\2*\u0259\3\2\2\2,\u0261\3\2\2\2")
- buf.write(".\u0269\3\2\2\2\60\u0295\3\2\2\2\62\u02a2\3\2\2\2\64\u02aa")
- buf.write("\3\2\2\2\66\u02ac\3\2\2\28\u02b1\3\2\2\2:\u02be\3\2\2")
- buf.write("\2<\u02c0\3\2\2\2>\u02d1\3\2\2\2@\u02f3\3\2\2\2B\u032d")
- buf.write("\3\2\2\2D\u032f\3\2\2\2F\u0348\3\2\2\2H\u034f\3\2\2\2")
- buf.write("J\u0356\3\2\2\2L\u0366\3\2\2\2N\u0376\3\2\2\2P\u037b\3")
- buf.write("\2\2\2R\u0382\3\2\2\2T\u0391\3\2\2\2V\u03a7\3\2\2\2X\u03b5")
- buf.write("\3\2\2\2Z\u03e3\3\2\2\2\\\u03e5\3\2\2\2^\u03ec\3\2\2\2")
- buf.write("`\u03f0\3\2\2\2b\u03f2\3\2\2\2d\u03fa\3\2\2\2f\u041e\3")
- buf.write("\2\2\2h\u0420\3\2\2\2j\u043f\3\2\2\2l\u0442\3\2\2\2n\u0445")
- buf.write("\3\2\2\2p\u044f\3\2\2\2r\u0451\3\2\2\2t\u0476\3\2\2\2")
- buf.write("v\u0478\3\2\2\2x\u0480\3\2\2\2z\u0482\3\2\2\2|\u04b3\3")
- buf.write("\2\2\2~\u04b7\3\2\2\2\u0080\u04b9\3\2\2\2\u0082\u04fe")
- buf.write("\3\2\2\2\u0084\u0508\3\2\2\2\u0086\u050a\3\2\2\2\u0088")
- buf.write("\u051f\3\2\2\2\u008a\u052c\3\2\2\2\u008c\u052e\3\2\2\2")
- buf.write("\u008e\u0549\3\2\2\2\u0090\u0564\3\2\2\2\u0092\u056c\3")
- buf.write("\2\2\2\u0094\u0571\3\2\2\2\u0096\u0579\3\2\2\2\u0098\u057e")
- buf.write("\3\2\2\2\u009a\u0594\3\2\2\2\u009c\u059e\3\2\2\2\u009e")
- buf.write("\u05a8\3\2\2\2\u00a0\u05aa\3\2\2\2\u00a2\u05c0\3\2\2\2")
- buf.write("\u00a4\u05d6\3\2\2\2\u00a6\u05e6\3\2\2\2\u00a8\u05ea\3")
- buf.write("\2\2\2\u00aa\u05ec\3\2\2\2\u00ac\u060a\3\2\2\2\u00ae\u061d")
- buf.write("\3\2\2\2\u00b0\u061f\3\2\2\2\u00b2\u0623\3\2\2\2\u00b4")
- buf.write("\u062a\3\2\2\2\u00b6\u062f\3\2\2\2\u00b8\u0633\3\2\2\2")
- buf.write("\u00ba\u0635\3\2\2\2\u00bc\u064a\3\2\2\2\u00be\u0658\3")
- buf.write("\2\2\2\u00c0\u065a\3\2\2\2\u00c2\u066f\3\2\2\2\u00c4\u0679")
- buf.write("\3\2\2\2\u00c6\u067d\3\2\2\2\u00c8\u067f\3\2\2\2\u00ca")
- buf.write("\u0695\3\2\2\2\u00cc\u06a9\3\2\2\2\u00ce\u06ba\3\2\2\2")
- buf.write("\u00d0\u06bc\3\2\2\2\u00d2\u06ce\3\2\2\2\u00d4\u06d8\3")
- buf.write("\2\2\2\u00d6\u06da\3\2\2\2\u00d8\u06f6\3\2\2\2\u00da\u0701")
- buf.write("\3\2\2\2\u00dc\u0703\3\2\2\2\u00de\u0725\3\2\2\2\u00e0")
- buf.write("\u072f\3\2\2\2\u00e2\u0731\3\2\2\2\u00e4\u0745\3\2\2\2")
- buf.write("\u00e6\u0751\3\2\2\2\u00e8\u0753\3\2\2\2\u00ea\u07b3\3")
- buf.write("\2\2\2\u00ec\u07c7\3\2\2\2\u00ee\u07cf\3\2\2\2\u00f0\u07d1")
- buf.write("\3\2\2\2\u00f2\u0831\3\2\2\2\u00f4\u0845\3\2\2\2\u00f6")
- buf.write("\u084d\3\2\2\2\u00f8\u0853\3\2\2\2\u00fa\u0855\3\2\2\2")
- buf.write("\u00fc\u085a\3\2\2\2\u00fe\u085c\3\2\2\2\u0100\u0864\3")
- buf.write("\2\2\2\u0102\u086a\3\2\2\2\u0104\u086c\3\2\2\2\u0106\u0878")
- buf.write("\3\2\2\2\u0108\u088a\3\2\2\2\u010a\u089c\3\2\2\2\u010c")
- buf.write("\u08b6\3\2\2\2\u010e\u08d0\3\2\2\2\u0110\u08ed\3\2\2\2")
- buf.write("\u0112\u08ef\3\2\2\2\u0114\u08f9\3\2\2\2\u0116\u0912\3")
- buf.write("\2\2\2\u0118\u093b\3\2\2\2\u011a\u093f\3\2\2\2\u011c\u0956")
- buf.write("\3\2\2\2\u011e\u09af\3\2\2\2\u0120\u09c0\3\2\2\2\u0122")
- buf.write("\u09c3\3\2\2\2\u0124\u09c5\3\2\2\2\u0126\u09cd\3\2\2\2")
- buf.write("\u0128\u09d5\3\2\2\2\u012a\u09dd\3\2\2\2\u012c\u09e5\3")
- buf.write("\2\2\2\u012e\u09ed\3\2\2\2\u0130\u09f8\3\2\2\2\u0132\u09fa")
- buf.write("\3\2\2\2\u0134\u0a09\3\2\2\2\u0136\u0a0b\3\2\2\2\u0138")
- buf.write("\u0a16\3\2\2\2\u013a\u0a18\3\2\2\2\u013c\u0a23\3\2\2\2")
- buf.write("\u013e\u0a25\3\2\2\2\u0140\u0a32\3\2\2\2\u0142\u0a39\3")
- buf.write("\2\2\2\u0144\u0a4a\3\2\2\2\u0146\u0a4c\3\2\2\2\u0148\u0a53")
- buf.write("\3\2\2\2\u014a\u0a5a\3\2\2\2\u014c\u0a63\3\2\2\2\u014e")
- buf.write("\u0a72\3\2\2\2\u0150\u0a74\3\2\2\2\u0152\u0a76\3\2\2\2")
- buf.write("\u0154\u0a87\3\2\2\2\u0156\u0a95\3\2\2\2\u0158\u0aa3\3")
- buf.write("\2\2\2\u015a\u0ab7\3\2\2\2\u015c\u0ab9\3\2\2\2\u015e\u0abf")
- buf.write("\3\2\2\2\u0160\u0ac4\3\2\2\2\u0162\u0ac9\3\2\2\2\u0164")
- buf.write("\u0ad4\3\2\2\2\u0166\u0ad6\3\2\2\2\u0168\u0adb\3\2\2\2")
- buf.write("\u016a\u0add\3\2\2\2\u016c\u0ae8\3\2\2\2\u016e\u0af4\3")
- buf.write("\2\2\2\u0170\u0af6\3\2\2\2\u0172\u0afb\3\2\2\2\u0174\u0b00")
- buf.write("\3\2\2\2\u0176\u0b15\3\2\2\2\u0178\u0b1a\3\2\2\2\u017a")
- buf.write("\u0b1f\3\2\2\2\u017c\u0b2a\3\2\2\2\u017e\u0b2f\3\2\2\2")
- buf.write("\u0180\u0b34\3\2\2\2\u0182\u0b39\3\2\2\2\u0184\u0b4b\3")
- buf.write("\2\2\2\u0186\u0b4d\3\2\2\2\u0188\u0b56\3\2\2\2\u018a\u0b68")
- buf.write("\3\2\2\2\u018c\u0b6a\3\2\2\2\u018e\u0b73\3\2\2\2\u0190")
- buf.write("\u0b7c\3\2\2\2\u0192\u0b90\3\2\2\2\u0194\u0b92\3\2\2\2")
- buf.write("\u0196\u019a\5\n\6\2\u0197\u019a\5\f\7\2\u0198\u019a\5")
- buf.write("\16\b\2\u0199\u0196\3\2\2\2\u0199\u0197\3\2\2\2\u0199")
- buf.write("\u0198\3\2\2\2\u019a\u019d\3\2\2\2\u019b\u0199\3\2\2\2")
- buf.write("\u019b\u019c\3\2\2\2\u019c\u019e\3\2\2\2\u019d\u019b\3")
- buf.write("\2\2\2\u019e\u019f\5.\30\2\u019f\3\3\2\2\2\u01a0\u01a1")
- buf.write("\7\3\2\2\u01a1\5\3\2\2\2\u01a2\u01a5\t\2\2\2\u01a3\u01a4")
- buf.write("\7!\2\2\u01a4\u01a6\7\u00fb\2\2\u01a5\u01a3\3\2\2\2\u01a5")
- buf.write("\u01a6\3\2\2\2\u01a6\u01a9\3\2\2\2\u01a7\u01a8\7!\2\2")
- buf.write("\u01a8\u01aa\7\u00fa\2\2\u01a9\u01a7\3\2\2\2\u01a9\u01aa")
- buf.write("\3\2\2\2\u01aa\7\3\2\2\2\u01ab\u01ad\7\u00fa\2\2\u01ac")
- buf.write("\u01ab\3\2\2\2\u01ac\u01ad\3\2\2\2\u01ad\t\3\2\2\2\u01ae")
- buf.write("\u01af\7\6\2\2\u01af\u01b0\7\7\2\2\u01b0\u01b4\7\30\2")
- buf.write("\2\u01b1\u01b5\5\4\3\2\u01b2\u01b5\5\6\4\2\u01b3\u01b5")
- buf.write("\5\b\5\2\u01b4\u01b1\3\2\2\2\u01b4\u01b2\3\2\2\2\u01b4")
- buf.write("\u01b3\3\2\2\2\u01b4\u01b5\3\2\2\2\u01b5\u01b6\3\2\2\2")
- buf.write("\u01b6\u01b7\7\31\2\2\u01b7\13\3\2\2\2\u01b8\u01ba\7\u0084")
- buf.write("\2\2\u01b9\u01b8\3\2\2\2\u01b9\u01ba\3\2\2\2\u01ba\u01bb")
- buf.write("\3\2\2\2\u01bb\u01bd\7P\2\2\u01bc\u01be\7O\2\2\u01bd\u01bc")
- buf.write("\3\2\2\2\u01bd\u01be\3\2\2\2\u01be\u01c0\3\2\2\2\u01bf")
- buf.write("\u01c1\7\u00fb\2\2\u01c0\u01bf\3\2\2\2\u01c0\u01c1\3\2")
- buf.write("\2\2\u01c1\u01c2\3\2\2\2\u01c2\u01c3\7\26\2\2\u01c3\u01c4")
- buf.write("\5\20\t\2\u01c4\u01c6\7\27\2\2\u01c5\u01c7\7\u00fb\2\2")
- buf.write("\u01c6\u01c5\3\2\2\2\u01c6\u01c7\3\2\2\2\u01c7\u01c8\3")
- buf.write("\2\2\2\u01c8\u01c9\7 \2\2\u01c9\r\3\2\2\2\u01ca\u01cc")
- buf.write("\7\u0084\2\2\u01cb\u01ca\3\2\2\2\u01cb\u01cc\3\2\2\2\u01cc")
- buf.write("\u01cd\3\2\2\2\u01cd\u01cf\7Q\2\2\u01ce\u01d0\7O\2\2\u01cf")
- buf.write("\u01ce\3\2\2\2\u01cf\u01d0\3\2\2\2\u01d0\u01d2\3\2\2\2")
- buf.write("\u01d1\u01d3\7\u00fb\2\2\u01d2\u01d1\3\2\2\2\u01d2\u01d3")
- buf.write("\3\2\2\2\u01d3\u01d4\3\2\2\2\u01d4\u01d5\7\26\2\2\u01d5")
- buf.write("\u01d6\5\20\t\2\u01d6\u01d8\7\27\2\2\u01d7\u01d9\7\u00fb")
- buf.write("\2\2\u01d8\u01d7\3\2\2\2\u01d8\u01d9\3\2\2\2\u01d9\u01da")
- buf.write("\3\2\2\2\u01da\u01db\7 \2\2\u01db\17\3\2\2\2\u01dc\u01eb")
- buf.write("\5\22\n\2\u01dd\u01eb\5\24\13\2\u01de\u01eb\5\26\f\2\u01df")
- buf.write("\u01eb\5\30\r\2\u01e0\u01eb\5\32\16\2\u01e1\u01eb\5\34")
- buf.write("\17\2\u01e2\u01eb\5\36\20\2\u01e3\u01eb\5 \21\2\u01e4")
- buf.write("\u01eb\5\"\22\2\u01e5\u01eb\5$\23\2\u01e6\u01eb\5&\24")
- buf.write("\2\u01e7\u01eb\5(\25\2\u01e8\u01eb\5*\26\2\u01e9\u01eb")
- buf.write("\5,\27\2\u01ea\u01dc\3\2\2\2\u01ea\u01dd\3\2\2\2\u01ea")
- buf.write("\u01de\3\2\2\2\u01ea\u01df\3\2\2\2\u01ea\u01e0\3\2\2\2")
- buf.write("\u01ea\u01e1\3\2\2\2\u01ea\u01e2\3\2\2\2\u01ea\u01e3\3")
- buf.write("\2\2\2\u01ea\u01e4\3\2\2\2\u01ea\u01e5\3\2\2\2\u01ea\u01e6")
- buf.write("\3\2\2\2\u01ea\u01e7\3\2\2\2\u01ea\u01e8\3\2\2\2\u01ea")
- buf.write("\u01e9\3\2\2\2\u01eb\u01ee\3\2\2\2\u01ec\u01ea\3\2\2\2")
- buf.write("\u01ec\u01ed\3\2\2\2\u01ed\21\3\2\2\2\u01ee\u01ec\3\2")
- buf.write("\2\2\u01ef\u01f0\7S\2\2\u01f0\u01f4\7\u00fb\2\2\u01f1")
- buf.write("\u01f2\7\32\2\2\u01f2\u01f3\7\u00fa\2\2\u01f3\u01f5\7")
- buf.write("\33\2\2\u01f4\u01f1\3\2\2\2\u01f4\u01f5\3\2\2\2\u01f5")
- buf.write("\u01f6\3\2\2\2\u01f6\u01f7\7 \2\2\u01f7\23\3\2\2\2\u01f8")
- buf.write("\u01f9\7T\2\2\u01f9\u01fd\7\u00fb\2\2\u01fa\u01fb\7\32")
- buf.write("\2\2\u01fb\u01fc\7\u00fa\2\2\u01fc\u01fe\7\33\2\2\u01fd")
- buf.write("\u01fa\3\2\2\2\u01fd\u01fe\3\2\2\2\u01fe\u01ff\3\2\2\2")
- buf.write("\u01ff\u0200\7 \2\2\u0200\25\3\2\2\2\u0201\u0202\7U\2")
- buf.write("\2\u0202\u0206\7\u00fb\2\2\u0203\u0204\7\32\2\2\u0204")
- buf.write("\u0205\7\u00fa\2\2\u0205\u0207\7\33\2\2\u0206\u0203\3")
- buf.write("\2\2\2\u0206\u0207\3\2\2\2\u0207\u0208\3\2\2\2\u0208\u0209")
- buf.write("\7 \2\2\u0209\27\3\2\2\2\u020a\u020b\7V\2\2\u020b\u020f")
- buf.write("\7\u00fb\2\2\u020c\u020d\7\32\2\2\u020d\u020e\7\u00fa")
- buf.write("\2\2\u020e\u0210\7\33\2\2\u020f\u020c\3\2\2\2\u020f\u0210")
- buf.write("\3\2\2\2\u0210\u0211\3\2\2\2\u0211\u0212\7 \2\2\u0212")
- buf.write("\31\3\2\2\2\u0213\u0214\7R\2\2\u0214\u0218\7\u00fb\2\2")
- buf.write("\u0215\u0216\7\32\2\2\u0216\u0217\7\u00fa\2\2\u0217\u0219")
- buf.write("\7\33\2\2\u0218\u0215\3\2\2\2\u0218\u0219\3\2\2\2\u0219")
- buf.write("\u021a\3\2\2\2\u021a\u021b\7 \2\2\u021b\33\3\2\2\2\u021c")
- buf.write("\u021d\7W\2\2\u021d\u0221\7\u00fb\2\2\u021e\u021f\7\32")
- buf.write("\2\2\u021f\u0220\7\u00fa\2\2\u0220\u0222\7\33\2\2\u0221")
- buf.write("\u021e\3\2\2\2\u0221\u0222\3\2\2\2\u0222\u0223\3\2\2\2")
- buf.write("\u0223\u0224\7 \2\2\u0224\35\3\2\2\2\u0225\u0226\7X\2")
- buf.write("\2\u0226\u022a\7\u00fb\2\2\u0227\u0228\7\32\2\2\u0228")
- buf.write("\u0229\7\u00fa\2\2\u0229\u022b\7\33\2\2\u022a\u0227\3")
- buf.write("\2\2\2\u022a\u022b\3\2\2\2\u022b\u022c\3\2\2\2\u022c\u022d")
- buf.write("\7 \2\2\u022d\37\3\2\2\2\u022e\u022f\7Y\2\2\u022f\u0233")
- buf.write("\7\u00fb\2\2\u0230\u0231\7\32\2\2\u0231\u0232\7\u00fa")
- buf.write("\2\2\u0232\u0234\7\33\2\2\u0233\u0230\3\2\2\2\u0233\u0234")
- buf.write("\3\2\2\2\u0234\u0235\3\2\2\2\u0235\u0236\7 \2\2\u0236")
- buf.write("!\3\2\2\2\u0237\u0238\7Z\2\2\u0238\u023c\7\u00fb\2\2\u0239")
- buf.write("\u023a\7\32\2\2\u023a\u023b\7\u00fa\2\2\u023b\u023d\7")
- buf.write("\33\2\2\u023c\u0239\3\2\2\2\u023c\u023d\3\2\2\2\u023d")
- buf.write("\u023e\3\2\2\2\u023e\u023f\7 \2\2\u023f#\3\2\2\2\u0240")
- buf.write("\u0241\7\u00fb\2\2\u0241\u0245\7\u00fb\2\2\u0242\u0243")
- buf.write("\7\32\2\2\u0243\u0244\7\u00fa\2\2\u0244\u0246\7\33\2\2")
- buf.write("\u0245\u0242\3\2\2\2\u0245\u0246\3\2\2\2\u0246\u0247\3")
- buf.write("\2\2\2\u0247\u0248\7 \2\2\u0248%\3\2\2\2\u0249\u024b\7")
- buf.write("S\2\2\u024a\u024c\7\u00fb\2\2\u024b\u024a\3\2\2\2\u024b")
- buf.write("\u024c\3\2\2\2\u024c\u024d\3\2\2\2\u024d\u024e\7\36\2")
- buf.write("\2\u024e\u024f\7\u00fa\2\2\u024f\u0250\7 \2\2\u0250\'")
- buf.write("\3\2\2\2\u0251\u0253\7T\2\2\u0252\u0254\7\u00fb\2\2\u0253")
- buf.write("\u0252\3\2\2\2\u0253\u0254\3\2\2\2\u0254\u0255\3\2\2\2")
- buf.write("\u0255\u0256\7\36\2\2\u0256\u0257\7\u00fa\2\2\u0257\u0258")
- buf.write("\7 \2\2\u0258)\3\2\2\2\u0259\u025b\7U\2\2\u025a\u025c")
- buf.write("\7\u00fb\2\2\u025b\u025a\3\2\2\2\u025b\u025c\3\2\2\2\u025c")
- buf.write("\u025d\3\2\2\2\u025d\u025e\7\36\2\2\u025e\u025f\7\u00fa")
- buf.write("\2\2\u025f\u0260\7 \2\2\u0260+\3\2\2\2\u0261\u0263\7V")
- buf.write("\2\2\u0262\u0264\7\u00fb\2\2\u0263\u0262\3\2\2\2\u0263")
- buf.write("\u0264\3\2\2\2\u0264\u0265\3\2\2\2\u0265\u0266\7\36\2")
- buf.write("\2\u0266\u0267\7\u00fa\2\2\u0267\u0268\7 \2\2\u0268-\3")
- buf.write("\2\2\2\u0269\u026a\7+\2\2\u026a\u026b\7[\2\2\u026b\u026c")
- buf.write("\7\b\2\2\u026c\u026d\5L\'\2\u026d\u026e\7!\2\2\u026e\u026f")
- buf.write("\7.\2\2\u026f\u0270\7\b\2\2\u0270\u0271\7\u00ec\2\2\u0271")
- buf.write("\u0272\7\30\2\2\u0272\u0273\7\u00fa\2\2\u0273\u0274\7")
- buf.write("\31\2\2\u0274\u0275\7!\2\2\u0275\u0276\7=\2\2\u0276\u0277")
- buf.write("\7\b\2\2\u0277\u0278\7\u00ec\2\2\u0278\u0279\7\30\2\2")
- buf.write("\u0279\u027a\7\u00fa\2\2\u027a\u027b\7\31\2\2\u027b\u0281")
- buf.write("\7!\2\2\u027c\u027d\7\u0083\2\2\u027d\u027e\7\b\2\2\u027e")
- buf.write("\u027f\5\60\31\2\u027f\u0280\7!\2\2\u0280\u0282\3\2\2")
- buf.write("\2\u0281\u027c\3\2\2\2\u0281\u0282\3\2\2\2\u0282\u0288")
- buf.write("\3\2\2\2\u0283\u0284\7\u0081\2\2\u0284\u0285\7\b\2\2\u0285")
- buf.write("\u0286\5\62\32\2\u0286\u0287\7!\2\2\u0287\u0289\3\2\2")
- buf.write("\2\u0288\u0283\3\2\2\2\u0288\u0289\3\2\2\2\u0289\u028f")
- buf.write("\3\2\2\2\u028a\u028b\7\u0082\2\2\u028b\u028c\7\b\2\2\u028c")
- buf.write("\u028d\5\66\34\2\u028d\u028e\7!\2\2\u028e\u0290\3\2\2")
- buf.write("\2\u028f\u028a\3\2\2\2\u028f\u0290\3\2\2\2\u0290\u0291")
- buf.write("\3\2\2\2\u0291\u0292\58\35\2\u0292\u0293\7-\2\2\u0293")
- buf.write("\u0294\7 \2\2\u0294/\3\2\2\2\u0295\u0298\5L\'\2\u0296")
- buf.write("\u0297\7(\2\2\u0297\u0299\5L\'\2\u0298\u0296\3\2\2\2\u0298")
- buf.write("\u0299\3\2\2\2\u0299\u029c\3\2\2\2\u029a\u029b\7(\2\2")
- buf.write("\u029b\u029d\5L\'\2\u029c\u029a\3\2\2\2\u029c\u029d\3")
- buf.write("\2\2\2\u029d\u02a0\3\2\2\2\u029e\u029f\7(\2\2\u029f\u02a1")
- buf.write("\5L\'\2\u02a0\u029e\3\2\2\2\u02a0\u02a1\3\2\2\2\u02a1")
- buf.write("\61\3\2\2\2\u02a2\u02a7\5\64\33\2\u02a3\u02a4\7(\2\2\u02a4")
- buf.write("\u02a6\5\64\33\2\u02a5\u02a3\3\2\2\2\u02a6\u02a9\3\2\2")
- buf.write("\2\u02a7\u02a5\3\2\2\2\u02a7\u02a8\3\2\2\2\u02a8\63\3")
- buf.write("\2\2\2\u02a9\u02a7\3\2\2\2\u02aa\u02ab\t\3\2\2\u02ab\65")
- buf.write("\3\2\2\2\u02ac\u02ad\t\4\2\2\u02ad\67\3\2\2\2\u02ae\u02b0")
- buf.write("\5:\36\2\u02af\u02ae\3\2\2\2\u02b0\u02b3\3\2\2\2\u02b1")
- buf.write("\u02af\3\2\2\2\u02b1\u02b2\3\2\2\2\u02b29\3\2\2\2\u02b3")
- buf.write("\u02b1\3\2\2\2\u02b4\u02bf\5d\63\2\u02b5\u02bf\5h\65\2")
- buf.write("\u02b6\u02bf\5j\66\2\u02b7\u02bf\5> \2\u02b8\u02bf\5@")
- buf.write("!\2\u02b9\u02bf\5D#\2\u02ba\u02bf\5<\37\2\u02bb\u02bf")
- buf.write("\5F$\2\u02bc\u02bf\5H%\2\u02bd\u02bf\5\u011c\u008f\2\u02be")
- buf.write("\u02b4\3\2\2\2\u02be\u02b5\3\2\2\2\u02be\u02b6\3\2\2\2")
- buf.write("\u02be\u02b7\3\2\2\2\u02be\u02b8\3\2\2\2\u02be\u02b9\3")
- buf.write("\2\2\2\u02be\u02ba\3\2\2\2\u02be\u02bb\3\2\2\2\u02be\u02bc")
- buf.write("\3\2\2\2\u02be\u02bd\3\2\2\2\u02bf;\3\2\2\2\u02c0\u02c1")
- buf.write("\7\u009b\2\2\u02c1\u02c2\7\u00fb\2\2\u02c2\u02c3\7!\2")
- buf.write("\2\u02c3\u02c4\7\62\2\2\u02c4\u02c5\7\b\2\2\u02c5\u02c6")
- buf.write("\7\u00ec\2\2\u02c6\u02c7\7\30\2\2\u02c7\u02c8\7\u00fa")
- buf.write("\2\2\u02c8\u02cd\7\31\2\2\u02c9\u02ca\7!\2\2\u02ca\u02cb")
- buf.write("\7\u009c\2\2\u02cb\u02cc\7\b\2\2\u02cc\u02ce\7\u00fa\2")
- buf.write("\2\u02cd\u02c9\3\2\2\2\u02cd\u02ce\3\2\2\2\u02ce\u02cf")
- buf.write("\3\2\2\2\u02cf\u02d0\7 \2\2\u02d0=\3\2\2\2\u02d1\u02e2")
- buf.write("\7\u009d\2\2\u02d2\u02d3\7\u00fb\2\2\u02d3\u02e3\7!\2")
- buf.write("\2\u02d4\u02d5\7V\2\2\u02d5\u02e3\7!\2\2\u02d6\u02d7\7")
- buf.write("U\2\2\u02d7\u02e3\7!\2\2\u02d8\u02d9\7T\2\2\u02d9\u02e3")
- buf.write("\7!\2\2\u02da\u02db\7S\2\2\u02db\u02e3\7!\2\2\u02dc\u02dd")
- buf.write("\7X\2\2\u02dd\u02e3\7!\2\2\u02de\u02df\7Y\2\2\u02df\u02e3")
- buf.write("\7!\2\2\u02e0\u02e1\7Z\2\2\u02e1\u02e3\7!\2\2\u02e2\u02d2")
- buf.write("\3\2\2\2\u02e2\u02d4\3\2\2\2\u02e2\u02d6\3\2\2\2\u02e2")
- buf.write("\u02d8\3\2\2\2\u02e2\u02da\3\2\2\2\u02e2\u02dc\3\2\2\2")
- buf.write("\u02e2\u02de\3\2\2\2\u02e2\u02e0\3\2\2\2\u02e3\u02e8\3")
- buf.write("\2\2\2\u02e4\u02e5\7\u008f\2\2\u02e5\u02e6\7\b\2\2\u02e6")
- buf.write("\u02e7\7\u00fa\2\2\u02e7\u02e9\7!\2\2\u02e8\u02e4\3\2")
- buf.write("\2\2\u02e8\u02e9\3\2\2\2\u02e9\u02ea\3\2\2\2\u02ea\u02eb")
- buf.write("\7\u008e\2\2\u02eb\u02ec\7\b\2\2\u02ec\u02ed\7\u00fb\2")
- buf.write("\2\u02ed\u02ee\7!\2\2\u02ee\u02ef\7[\2\2\u02ef\u02f0\7")
- buf.write("\b\2\2\u02f0\u02f1\5L\'\2\u02f1\u02f2\7 \2\2\u02f2?\3")
- buf.write("\2\2\2\u02f3\u0304\7\u009e\2\2\u02f4\u02f5\7\u00fb\2\2")
- buf.write("\u02f5\u0305\7!\2\2\u02f6\u02f7\7V\2\2\u02f7\u0305\7!")
- buf.write("\2\2\u02f8\u02f9\7U\2\2\u02f9\u0305\7!\2\2\u02fa\u02fb")
- buf.write("\7T\2\2\u02fb\u0305\7!\2\2\u02fc\u02fd\7S\2\2\u02fd\u0305")
- buf.write("\7!\2\2\u02fe\u02ff\7X\2\2\u02ff\u0305\7!\2\2\u0300\u0301")
- buf.write("\7Y\2\2\u0301\u0305\7!\2\2\u0302\u0303\7Z\2\2\u0303\u0305")
- buf.write("\7!\2\2\u0304\u02f4\3\2\2\2\u0304\u02f6\3\2\2\2\u0304")
- buf.write("\u02f8\3\2\2\2\u0304\u02fa\3\2\2\2\u0304\u02fc\3\2\2\2")
- buf.write("\u0304\u02fe\3\2\2\2\u0304\u0300\3\2\2\2\u0304\u0302\3")
- buf.write("\2\2\2\u0305\u030a\3\2\2\2\u0306\u0307\7\u008f\2\2\u0307")
- buf.write("\u0308\7\b\2\2\u0308\u0309\7\u00fa\2\2\u0309\u030b\7!")
- buf.write("\2\2\u030a\u0306\3\2\2\2\u030a\u030b\3\2\2\2\u030b\u030c")
- buf.write("\3\2\2\2\u030c\u030d\7\u009c\2\2\u030d\u030e\7\b\2\2\u030e")
- buf.write("\u0313\5B\"\2\u030f\u0310\7(\2\2\u0310\u0312\5B\"\2\u0311")
- buf.write("\u030f\3\2\2\2\u0312\u0315\3\2\2\2\u0313\u0311\3\2\2\2")
- buf.write("\u0313\u0314\3\2\2\2\u0314\u0316\3\2\2\2\u0315\u0313\3")
- buf.write("\2\2\2\u0316\u0326\7!\2\2\u0317\u0318\7\u008e\2\2\u0318")
- buf.write("\u0319\7\b\2\2\u0319\u031a\7\u00fb\2\2\u031a\u0327\7!")
- buf.write("\2\2\u031b\u031c\7\u008e\2\2\u031c\u031d\7\b\2\2\u031d")
- buf.write("\u031e\7\u00ec\2\2\u031e\u031f\7\30\2\2\u031f\u0320\7")
- buf.write("\u00fa\2\2\u0320\u0321\7\31\2\2\u0321\u0322\7!\2\2\u0322")
- buf.write("\u0323\7\u009f\2\2\u0323\u0324\7\b\2\2\u0324\u0325\7\u00fa")
- buf.write("\2\2\u0325\u0327\7!\2\2\u0326\u0317\3\2\2\2\u0326\u031b")
- buf.write("\3\2\2\2\u0327\u0328\3\2\2\2\u0328\u0329\7[\2\2\u0329")
- buf.write("\u032a\7\b\2\2\u032a\u032b\5L\'\2\u032b\u032c\7 \2\2\u032c")
- buf.write("A\3\2\2\2\u032d\u032e\7\u00fa\2\2\u032eC\3\2\2\2\u032f")
- buf.write("\u0330\7\u00a0\2\2\u0330\u0331\7\u00fb\2\2\u0331\u0336")
- buf.write("\7!\2\2\u0332\u0333\7\u008f\2\2\u0333\u0334\7\b\2\2\u0334")
- buf.write("\u0335\7\u00fa\2\2\u0335\u0337\7!\2\2\u0336\u0332\3\2")
- buf.write("\2\2\u0336\u0337\3\2\2\2\u0337\u033f\3\2\2\2\u0338\u0339")
- buf.write("\7\u008e\2\2\u0339\u033a\7\b\2\2\u033a\u033b\7\u00ec\2")
- buf.write("\2\u033b\u033c\7\30\2\2\u033c\u033d\7\u00fa\2\2\u033d")
- buf.write("\u033e\7\31\2\2\u033e\u0340\7!\2\2\u033f\u0338\3\2\2\2")
- buf.write("\u0340\u0341\3\2\2\2\u0341\u033f\3\2\2\2\u0341\u0342\3")
- buf.write("\2\2\2\u0342\u0343\3\2\2\2\u0343\u0344\7[\2\2\u0344\u0345")
- buf.write("\7\b\2\2\u0345\u0346\5L\'\2\u0346\u0347\7 \2\2\u0347E")
- buf.write("\3\2\2\2\u0348\u0349\7l\2\2\u0349\u034a\5\u0124\u0093")
- buf.write("\2\u034a\u034b\7 \2\2\u034b\u034c\58\35\2\u034c\u034d")
- buf.write("\7s\2\2\u034d\u034e\7 \2\2\u034eG\3\2\2\2\u034f\u0350")
- buf.write("\7k\2\2\u0350\u0351\5\u0124\u0093\2\u0351\u0352\7 \2\2")
- buf.write("\u0352\u0353\58\35\2\u0353\u0354\7s\2\2\u0354\u0355\7")
- buf.write(" \2\2\u0355I\3\2\2\2\u0356\u0357\7\u00fa\2\2\u0357\u0358")
- buf.write("\7!\2\2\u0358\u0359\7\u00fa\2\2\u0359\u035a\7!\2\2\u035a")
- buf.write("\u035b\7\u00fa\2\2\u035b\u035c\7!\2\2\u035c\u035d\7\u00fa")
- buf.write("\2\2\u035d\u035e\7!\2\2\u035e\u035f\7\u00fa\2\2\u035f")
- buf.write("\u0360\7!\2\2\u0360\u0361\7\u00fa\2\2\u0361\u0362\7!\2")
- buf.write("\2\u0362\u0363\7\u00fa\2\2\u0363\u0364\7!\2\2\u0364\u0365")
- buf.write("\7\u00fa\2\2\u0365K\3\2\2\2\u0366\u0367\7\26\2\2\u0367")
- buf.write("\u0368\7\u00fa\2\2\u0368\u0369\7!\2\2\u0369\u036a\7\u00fa")
- buf.write("\2\2\u036a\u036b\7!\2\2\u036b\u036c\7\u00fa\2\2\u036c")
- buf.write("\u0372\7!\2\2\u036d\u036e\7\26\2\2\u036e\u036f\5J&\2\u036f")
- buf.write("\u0370\7\27\2\2\u0370\u0373\3\2\2\2\u0371\u0373\5J&\2")
- buf.write("\u0372\u036d\3\2\2\2\u0372\u0371\3\2\2\2\u0373\u0374\3")
- buf.write("\2\2\2\u0374\u0375\7\27\2\2\u0375M\3\2\2\2\u0376\u0377")
- buf.write("\7\u00ec\2\2\u0377\u0378\7\30\2\2\u0378\u0379\7\u00fa")
- buf.write("\2\2\u0379\u037a\7\31\2\2\u037aO\3\2\2\2\u037b\u037c\5")
- buf.write("R*\2\u037c\u037d\5T+\2\u037dQ\3\2\2\2\u037e\u037f\7\u008e")
- buf.write("\2\2\u037f\u0380\7\b\2\2\u0380\u0381\7\u00fb\2\2\u0381")
- buf.write("\u0383\7!\2\2\u0382\u037e\3\2\2\2\u0382\u0383\3\2\2\2")
- buf.write("\u0383\u0389\3\2\2\2\u0384\u0385\7\u008f\2\2\u0385\u0386")
- buf.write("\7\b\2\2\u0386\u0387\5X-\2\u0387\u0388\7!\2\2\u0388\u038a")
- buf.write("\3\2\2\2\u0389\u0384\3\2\2\2\u0389\u038a\3\2\2\2\u038a")
- buf.write("\u038f\3\2\2\2\u038b\u038c\7\u0091\2\2\u038c\u038d\7\b")
- buf.write("\2\2\u038d\u038e\7\u00fa\2\2\u038e\u0390\7!\2\2\u038f")
- buf.write("\u038b\3\2\2\2\u038f\u0390\3\2\2\2\u0390S\3\2\2\2\u0391")
- buf.write("\u0392\7\62\2\2\u0392\u0393\7\b\2\2\u0393\u0394\7\u00ec")
- buf.write("\2\2\u0394\u0395\7\30\2\2\u0395\u0396\7\u00fa\2\2\u0396")
- buf.write("\u0397\7\31\2\2\u0397\u0398\7!\2\2\u0398\u0399\7=\2\2")
- buf.write("\u0399\u039a\7\b\2\2\u039a\u039b\7\u00ec\2\2\u039b\u039c")
- buf.write("\7\30\2\2\u039c\u039d\7\u00fa\2\2\u039d\u039e\7\31\2\2")
- buf.write("\u039eU\3\2\2\2\u039f\u03a8\7~\2\2\u03a0\u03a8\7y\2\2")
- buf.write("\u03a1\u03a8\7{\2\2\u03a2\u03a8\7\u0080\2\2\u03a3\u03a8")
- buf.write("\7|\2\2\u03a4\u03a8\7\177\2\2\u03a5\u03a8\7z\2\2\u03a6")
- buf.write("\u03a8\7}\2\2\u03a7\u039f\3\2\2\2\u03a7\u03a0\3\2\2\2")
- buf.write("\u03a7\u03a1\3\2\2\2\u03a7\u03a2\3\2\2\2\u03a7\u03a3\3")
- buf.write("\2\2\2\u03a7\u03a4\3\2\2\2\u03a7\u03a5\3\2\2\2\u03a7\u03a6")
- buf.write("\3\2\2\2\u03a8W\3\2\2\2\u03a9\u03aa\7\u00fb\2\2\u03aa")
- buf.write("\u03ab\7\32\2\2\u03ab\u03ac\7\u00fa\2\2\u03ac\u03b6\7")
- buf.write("\33\2\2\u03ad\u03b2\7\u00fb\2\2\u03ae\u03af\7\34\2\2\u03af")
- buf.write("\u03b1\5\u015c\u00af\2\u03b0\u03ae\3\2\2\2\u03b1\u03b4")
- buf.write("\3\2\2\2\u03b2\u03b0\3\2\2\2\u03b2\u03b3\3\2\2\2\u03b3")
- buf.write("\u03b6\3\2\2\2\u03b4\u03b2\3\2\2\2\u03b5\u03a9\3\2\2\2")
- buf.write("\u03b5\u03ad\3\2\2\2\u03b6Y\3\2\2\2\u03b7\u03b9\7\35\2")
- buf.write("\2\u03b8\u03b7\3\2\2\2\u03b8\u03b9\3\2\2\2\u03b9\u03ba")
- buf.write("\3\2\2\2\u03ba\u03e4\7\u00fa\2\2\u03bb\u03e4\7\u00d3\2")
- buf.write("\2\u03bc\u03e4\7\u00d4\2\2\u03bd\u03e4\7\u00d5\2\2\u03be")
- buf.write("\u03e4\7\u00d6\2\2\u03bf\u03e4\7\u00d7\2\2\u03c0\u03c1")
- buf.write("\7\u00fa\2\2\u03c1\u03c2\7\36\2\2\u03c2\u03c3\7\u00fa")
- buf.write("\2\2\u03c3\u03c4\7\36\2\2\u03c4\u03e4\7\u00fa\2\2\u03c5")
- buf.write("\u03c6\7\u00fa\2\2\u03c6\u03c7\7\37\2\2\u03c7\u03c8\7")
- buf.write("\u00fa\2\2\u03c8\u03c9\7\37\2\2\u03c9\u03e4\7\u00fa\2")
- buf.write("\2\u03ca\u03cb\7\u00fa\2\2\u03cb\u03cc\7 \2\2\u03cc\u03cd")
- buf.write("\7\u00fa\2\2\u03cd\u03ce\7 \2\2\u03ce\u03cf\5L\'\2\u03cf")
- buf.write("\u03d0\7 \2\2\u03d0\u03d1\7\u00ec\2\2\u03d1\u03d2\7\30")
- buf.write("\2\2\u03d2\u03d3\7\u00fa\2\2\u03d3\u03d4\7\31\2\2\u03d4")
- buf.write("\u03e4\3\2\2\2\u03d5\u03d6\7\u00ec\2\2\u03d6\u03d7\7\30")
- buf.write("\2\2\u03d7\u03d8\7\u00fa\2\2\u03d8\u03e4\7\31\2\2\u03d9")
- buf.write("\u03da\7\26\2\2\u03da\u03df\7\u00fa\2\2\u03db\u03dc\7")
- buf.write("!\2\2\u03dc\u03de\7\u00fa\2\2\u03dd\u03db\3\2\2\2\u03de")
- buf.write("\u03e1\3\2\2\2\u03df\u03dd\3\2\2\2\u03df\u03e0\3\2\2\2")
- buf.write("\u03e0\u03e2\3\2\2\2\u03e1\u03df\3\2\2\2\u03e2\u03e4\7")
- buf.write("\27\2\2\u03e3\u03b8\3\2\2\2\u03e3\u03bb\3\2\2\2\u03e3")
- buf.write("\u03bc\3\2\2\2\u03e3\u03bd\3\2\2\2\u03e3\u03be\3\2\2\2")
- buf.write("\u03e3\u03bf\3\2\2\2\u03e3\u03c0\3\2\2\2\u03e3\u03c5\3")
- buf.write("\2\2\2\u03e3\u03ca\3\2\2\2\u03e3\u03d5\3\2\2\2\u03e3\u03d9")
- buf.write("\3\2\2\2\u03e4[\3\2\2\2\u03e5\u03e6\7\u0092\2\2\u03e6")
- buf.write("\u03e7\7\b\2\2\u03e7\u03e8\7\t\2\2\u03e8\u03e9\7\30\2")
- buf.write("\2\u03e9\u03ea\7\u00fa\2\2\u03ea\u03eb\7\31\2\2\u03eb")
- buf.write("]\3\2\2\2\u03ec\u03ed\7\u0093\2\2\u03ed_\3\2\2\2\u03ee")
- buf.write("\u03f1\5\\/\2\u03ef\u03f1\5^\60\2\u03f0\u03ee\3\2\2\2")
- buf.write("\u03f0\u03ef\3\2\2\2\u03f1a\3\2\2\2\u03f2\u03f7\5`\61")
- buf.write("\2\u03f3\u03f4\7!\2\2\u03f4\u03f6\5`\61\2\u03f5\u03f3")
- buf.write("\3\2\2\2\u03f6\u03f9\3\2\2\2\u03f7\u03f5\3\2\2\2\u03f7")
- buf.write("\u03f8\3\2\2\2\u03f8c\3\2\2\2\u03f9\u03f7\3\2\2\2\u03fa")
- buf.write("\u03fb\7\67\2\2\u03fb\u03fc\7/\2\2\u03fc\u03fd\7\b\2\2")
- buf.write("\u03fd\u03fe\7\u00fa\2\2\u03fe\u03ff\7!\2\2\u03ff\u0400")
- buf.write("\7.\2\2\u0400\u0401\7\b\2\2\u0401\u0402\7\u00ec\2\2\u0402")
- buf.write("\u0403\7\30\2\2\u0403\u0404\7\u00fa\2\2\u0404\u0405\7")
- buf.write("\31\2\2\u0405\u0409\7 \2\2\u0406\u0408\5f\64\2\u0407\u0406")
- buf.write("\3\2\2\2\u0408\u040b\3\2\2\2\u0409\u0407\3\2\2\2\u0409")
- buf.write("\u040a\3\2\2\2\u040a\u040c\3\2\2\2\u040b\u0409\3\2\2\2")
- buf.write("\u040c\u040d\7\66\2\2\u040d\u040e\7 \2\2\u040ee\3\2\2")
- buf.write("\2\u040f\u041f\5j\66\2\u0410\u041f\5l\67\2\u0411\u041f")
- buf.write("\5n8\2\u0412\u041f\5\u00a4S\2\u0413\u041f\5p9\2\u0414")
- buf.write("\u041f\5\u0088E\2\u0415\u041f\5\u00f8}\2\u0416\u041f\5")
- buf.write("\u0118\u008d\2\u0417\u041f\5\u011a\u008e\2\u0418\u041f")
- buf.write("\5\u0110\u0089\2\u0419\u041f\5\u011c\u008f\2\u041a\u041f")
- buf.write("\5\u0120\u0091\2\u041b\u041c\5\u0096L\2\u041c\u041d\7")
- buf.write(" \2\2\u041d\u041f\3\2\2\2\u041e\u040f\3\2\2\2\u041e\u0410")
- buf.write("\3\2\2\2\u041e\u0411\3\2\2\2\u041e\u0412\3\2\2\2\u041e")
- buf.write("\u0413\3\2\2\2\u041e\u0414\3\2\2\2\u041e\u0415\3\2\2\2")
- buf.write("\u041e\u0416\3\2\2\2\u041e\u0417\3\2\2\2\u041e\u0418\3")
- buf.write("\2\2\2\u041e\u0419\3\2\2\2\u041e\u041a\3\2\2\2\u041e\u041b")
- buf.write("\3\2\2\2\u041fg\3\2\2\2\u0420\u0421\78\2\2\u0421\u0422")
- buf.write("\7/\2\2\u0422\u0423\7\b\2\2\u0423\u0424\7\u00fa\2\2\u0424")
- buf.write("\u0433\7!\2\2\u0425\u0426\79\2\2\u0426\u0427\7\b\2\2\u0427")
- buf.write("\u0428\7\u00ec\2\2\u0428\u0429\7\30\2\2\u0429\u042a\7")
- buf.write("\u00fa\2\2\u042a\u042b\7\31\2\2\u042b\u042c\7 \2\2\u042c")
- buf.write("\u042d\7:\2\2\u042d\u042e\7\b\2\2\u042e\u042f\5L\'\2\u042f")
- buf.write("\u0430\7 \2\2\u0430\u0432\3\2\2\2\u0431\u0425\3\2\2\2")
- buf.write("\u0432\u0435\3\2\2\2\u0433\u0431\3\2\2\2\u0433\u0434\3")
- buf.write("\2\2\2\u0434\u0439\3\2\2\2\u0435\u0433\3\2\2\2\u0436\u0438")
- buf.write("\5f\64\2\u0437\u0436\3\2\2\2\u0438\u043b\3\2\2\2\u0439")
- buf.write("\u0437\3\2\2\2\u0439\u043a\3\2\2\2\u043a\u043c\3\2\2\2")
- buf.write("\u043b\u0439\3\2\2\2\u043c\u043d\7\66\2\2\u043d\u043e")
- buf.write("\7 \2\2\u043ei\3\2\2\2\u043f\u0440\5\\/\2\u0440\u0441")
- buf.write("\7 \2\2\u0441k\3\2\2\2\u0442\u0443\5^\60\2\u0443\u0444")
- buf.write("\7 \2\2\u0444m\3\2\2\2\u0445\u0446\7\u0094\2\2\u0446\u0447")
- buf.write("\7\u00fb\2\2\u0447\u0448\7!\2\2\u0448\u0449\5\u0124\u0093")
- buf.write("\2\u0449\u044a\7\u0095\2\2\u044a\u044b\7 \2\2\u044bo\3")
- buf.write("\2\2\2\u044c\u0450\5r:\2\u044d\u0450\5z>\2\u044e\u0450")
- buf.write("\5~@\2\u044f\u044c\3\2\2\2\u044f\u044d\3\2\2\2\u044f\u044e")
- buf.write("\3\2\2\2\u0450q\3\2\2\2\u0451\u0452\7;\2\2\u0452\u0453")
- buf.write("\7>\2\2\u0453\u0454\7\b\2\2\u0454\u0455\7\u00ec\2\2\u0455")
- buf.write("\u0456\7\30\2\2\u0456\u0457\7\u00fa\2\2\u0457\u045c\7")
- buf.write("\31\2\2\u0458\u0459\7!\2\2\u0459\u045a\7@\2\2\u045a\u045b")
- buf.write("\7\b\2\2\u045b\u045d\5v<\2\u045c\u0458\3\2\2\2\u045c\u045d")
- buf.write("\3\2\2\2\u045d\u0472\3\2\2\2\u045e\u045f\7!\2\2\u045f")
- buf.write("\u0461\5b\62\2\u0460\u045e\3\2\2\2\u0460\u0461\3\2\2\2")
- buf.write("\u0461\u0462\3\2\2\2\u0462\u0473\7 \2\2\u0463\u0464\7")
- buf.write("!\2\2\u0464\u0466\5b\62\2\u0465\u0463\3\2\2\2\u0465\u0466")
- buf.write("\3\2\2\2\u0466\u046e\3\2\2\2\u0467\u046b\7!\2\2\u0468")
- buf.write("\u046a\5t;\2\u0469\u0468\3\2\2\2\u046a\u046d\3\2\2\2\u046b")
- buf.write("\u0469\3\2\2\2\u046b\u046c\3\2\2\2\u046c\u046f\3\2\2\2")
- buf.write("\u046d\u046b\3\2\2\2\u046e\u0467\3\2\2\2\u046e\u046f\3")
- buf.write("\2\2\2\u046f\u0470\3\2\2\2\u0470\u0471\7<\2\2\u0471\u0473")
- buf.write("\7 \2\2\u0472\u0460\3\2\2\2\u0472\u0465\3\2\2\2\u0473")
- buf.write("s\3\2\2\2\u0474\u0477\5p9\2\u0475\u0477\5\u0088E\2\u0476")
- buf.write("\u0474\3\2\2\2\u0476\u0475\3\2\2\2\u0477u\3\2\2\2\u0478")
- buf.write("\u047d\5x=\2\u0479\u047a\7(\2\2\u047a\u047c\5x=\2\u047b")
- buf.write("\u0479\3\2\2\2\u047c\u047f\3\2\2\2\u047d\u047b\3\2\2\2")
- buf.write("\u047d\u047e\3\2\2\2\u047ew\3\2\2\2\u047f\u047d\3\2\2")
- buf.write("\2\u0480\u0481\t\5\2\2\u0481y\3\2\2\2\u0482\u0483\7>\2")
- buf.write("\2\u0483\u0484\7=\2\2\u0484\u0485\7\b\2\2\u0485\u0486")
- buf.write("\7\u00ec\2\2\u0486\u0487\7\30\2\2\u0487\u0488\7\u00fa")
- buf.write("\2\2\u0488\u0489\7\31\2\2\u0489\u048a\7!\2\2\u048a\u048b")
- buf.write("\7>\2\2\u048b\u048c\7\b\2\2\u048c\u048d\7\u00ec\2\2\u048d")
- buf.write("\u048e\7\30\2\2\u048e\u048f\7\u00fa\2\2\u048f\u0497\7")
- buf.write("\31\2\2\u0490\u0491\7!\2\2\u0491\u0492\7>\2\2\u0492\u0493")
- buf.write("\7\b\2\2\u0493\u0494\7\u00ec\2\2\u0494\u0495\7\30\2\2")
- buf.write("\u0495\u0496\7\u00fa\2\2\u0496\u0498\7\31\2\2\u0497\u0490")
- buf.write("\3\2\2\2\u0497\u0498\3\2\2\2\u0498\u04a9\3\2\2\2\u0499")
- buf.write("\u049a\7!\2\2\u049a\u049b\7@\2\2\u049b\u049c\7\b\2\2\u049c")
- buf.write("\u04a1\5|?\2\u049d\u049e\7(\2\2\u049e\u04a0\5|?\2\u049f")
- buf.write("\u049d\3\2\2\2\u04a0\u04a3\3\2\2\2\u04a1\u049f\3\2\2\2")
- buf.write("\u04a1\u04a2\3\2\2\2\u04a2\u04a4\3\2\2\2\u04a3\u04a1\3")
- buf.write("\2\2\2\u04a4\u04a5\7!\2\2\u04a5\u04a6\7t\2\2\u04a6\u04a7")
- buf.write("\7\b\2\2\u04a7\u04a8\7\u00fa\2\2\u04a8\u04aa\3\2\2\2\u04a9")
- buf.write("\u0499\3\2\2\2\u04a9\u04aa\3\2\2\2\u04aa\u04ad\3\2\2\2")
- buf.write("\u04ab\u04ac\7!\2\2\u04ac\u04ae\5b\62\2\u04ad\u04ab\3")
- buf.write("\2\2\2\u04ad\u04ae\3\2\2\2\u04ae\u04af\3\2\2\2\u04af\u04b0")
- buf.write("\7 \2\2\u04b0{\3\2\2\2\u04b1\u04b4\7\u00fa\2\2\u04b2\u04b4")
- buf.write("\5V,\2\u04b3\u04b1\3\2\2\2\u04b3\u04b2\3\2\2\2\u04b4}")
- buf.write("\3\2\2\2\u04b5\u04b8\5\u0080A\2\u04b6\u04b8\5\u0086D\2")
- buf.write("\u04b7\u04b5\3\2\2\2\u04b7\u04b6\3\2\2\2\u04b8\177\3\2")
- buf.write("\2\2\u04b9\u04e9\7n\2\2\u04ba\u04bb\7*\2\2\u04bb\u04bc")
- buf.write("\7\b\2\2\u04bc\u04bd\7\u00ec\2\2\u04bd\u04be\7\30\2\2")
- buf.write("\u04be\u04bf\7\u00fa\2\2\u04bf\u04c0\7\31\2\2\u04c0\u04c1")
- buf.write("\7!\2\2\u04c1\u04c2\7o\2\2\u04c2\u04c3\7\b\2\2\u04c3\u04c4")
- buf.write("\5L\'\2\u04c4\u04c5\7!\2\2\u04c5\u04c6\7/\2\2\u04c6\u04c7")
- buf.write("\7\b\2\2\u04c7\u04c8\7\u00fa\2\2\u04c8\u04c9\7!\2\2\u04c9")
- buf.write("\u04ca\7\u0090\2\2\u04ca\u04cb\7\b\2\2\u04cb\u04cc\7\u00fa")
- buf.write("\2\2\u04cc\u04cd\7!\2\2\u04cd\u04ea\3\2\2\2\u04ce\u04cf")
- buf.write("\7o\2\2\u04cf\u04d0\7\b\2\2\u04d0\u04d1\5L\'\2\u04d1\u04d2")
- buf.write("\7!\2\2\u04d2\u04d3\7/\2\2\u04d3\u04d4\7\b\2\2\u04d4\u04d5")
- buf.write("\7\u00fa\2\2\u04d5\u04d6\7!\2\2\u04d6\u04d7\7\u0090\2")
- buf.write("\2\u04d7\u04d8\7\b\2\2\u04d8\u04d9\7\u00fa\2\2\u04d9\u04da")
- buf.write("\7!\2\2\u04da\u04ea\3\2\2\2\u04db\u04dc\7/\2\2\u04dc\u04dd")
- buf.write("\7\b\2\2\u04dd\u04de\7\u00fa\2\2\u04de\u04df\7!\2\2\u04df")
- buf.write("\u04e0\7\u0090\2\2\u04e0\u04e5\7\b\2\2\u04e1\u04e2\7\u00fb")
- buf.write("\2\2\u04e2\u04e6\7!\2\2\u04e3\u04e4\7\u00fa\2\2\u04e4")
- buf.write("\u04e6\7!\2\2\u04e5\u04e1\3\2\2\2\u04e5\u04e3\3\2\2\2")
- buf.write("\u04e6\u04ea\3\2\2\2\u04e7\u04e8\7\u00fa\2\2\u04e8\u04ea")
- buf.write("\7!\2\2\u04e9\u04ba\3\2\2\2\u04e9\u04ce\3\2\2\2\u04e9")
- buf.write("\u04db\3\2\2\2\u04e9\u04e7\3\2\2\2\u04e9\u04ea\3\2\2\2")
- buf.write("\u04ea\u04eb\3\2\2\2\u04eb\u04f0\5P)\2\u04ec\u04ed\7!")
- buf.write("\2\2\u04ed\u04ee\7@\2\2\u04ee\u04ef\7\b\2\2\u04ef\u04f1")
- buf.write("\5\u0082B\2\u04f0\u04ec\3\2\2\2\u04f0\u04f1\3\2\2\2\u04f1")
- buf.write("\u04f6\3\2\2\2\u04f2\u04f3\7!\2\2\u04f3\u04f4\7t\2\2\u04f4")
- buf.write("\u04f5\7\b\2\2\u04f5\u04f7\7\u00fa\2\2\u04f6\u04f2\3\2")
- buf.write("\2\2\u04f6\u04f7\3\2\2\2\u04f7\u04fa\3\2\2\2\u04f8\u04f9")
- buf.write("\7!\2\2\u04f9\u04fb\5\u00b4[\2\u04fa\u04f8\3\2\2\2\u04fa")
- buf.write("\u04fb\3\2\2\2\u04fb\u04fc\3\2\2\2\u04fc\u04fd\7 \2\2")
- buf.write("\u04fd\u0081\3\2\2\2\u04fe\u0503\5\u0084C\2\u04ff\u0500")
- buf.write("\7(\2\2\u0500\u0502\5\u0084C\2\u0501\u04ff\3\2\2\2\u0502")
- buf.write("\u0505\3\2\2\2\u0503\u0501\3\2\2\2\u0503\u0504\3\2\2\2")
- buf.write("\u0504\u0083\3\2\2\2\u0505\u0503\3\2\2\2\u0506\u0509\7")
- buf.write("\u00fa\2\2\u0507\u0509\5V,\2\u0508\u0506\3\2\2\2\u0508")
- buf.write("\u0507\3\2\2\2\u0509\u0085\3\2\2\2\u050a\u050b\7\u0099")
- buf.write("\2\2\u050b\u050c\7\u009b\2\2\u050c\u050d\7\b\2\2\u050d")
- buf.write("\u050e\7\u00fb\2\2\u050e\u050f\7!\2\2\u050f\u0510\5T+")
- buf.write("\2\u0510\u0514\7!\2\2\u0511\u0512\5b\62\2\u0512\u0513")
- buf.write("\7!\2\2\u0513\u0515\3\2\2\2\u0514\u0511\3\2\2\2\u0514")
- buf.write("\u0515\3\2\2\2\u0515\u0516\3\2\2\2\u0516\u0517\7\u009a")
- buf.write("\2\2\u0517\u0518\7 \2\2\u0518\u0087\3\2\2\2\u0519\u0520")
- buf.write("\5\u00b8]\2\u051a\u0520\5\u00e8u\2\u051b\u0520\5\u00c6")
- buf.write("d\2\u051c\u0520\5\u00d4k\2\u051d\u0520\5\u00e2r\2\u051e")
- buf.write("\u0520\5\u00f0y\2\u051f\u0519\3\2\2\2\u051f\u051a\3\2")
- buf.write("\2\2\u051f\u051b\3\2\2\2\u051f\u051c\3\2\2\2\u051f\u051d")
- buf.write("\3\2\2\2\u051f\u051e\3\2\2\2\u0520\u0089\3\2\2\2\u0521")
- buf.write("\u0522\5`\61\2\u0522\u0523\7!\2\2\u0523\u052d\3\2\2\2")
- buf.write("\u0524\u052d\5\u008cG\2\u0525\u052d\5\u008eH\2\u0526\u052d")
- buf.write("\5\u0090I\2\u0527\u052d\5\u0092J\2\u0528\u052d\5\u0094")
- buf.write("K\2\u0529\u052d\5\u011c\u008f\2\u052a\u052d\5\u0096L\2")
- buf.write("\u052b\u052d\5\u0098M\2\u052c\u0521\3\2\2\2\u052c\u0524")
- buf.write("\3\2\2\2\u052c\u0525\3\2\2\2\u052c\u0526\3\2\2\2\u052c")
- buf.write("\u0527\3\2\2\2\u052c\u0528\3\2\2\2\u052c\u0529\3\2\2\2")
- buf.write("\u052c\u052a\3\2\2\2\u052c\u052b\3\2\2\2\u052d\u008b\3")
- buf.write("\2\2\2\u052e\u052f\7p\2\2\u052f\u0530\7\62\2\2\u0530\u0531")
- buf.write("\7\b\2\2\u0531\u0532\7\u00ec\2\2\u0532\u0533\7\30\2\2")
- buf.write("\u0533\u0534\7\u00fa\2\2\u0534\u0535\7\31\2\2\u0535\u0542")
- buf.write("\7!\2\2\u0536\u0537\7@\2\2\u0537\u0538\7\b\2\2\u0538\u053d")
- buf.write("\5\u009eP\2\u0539\u053a\7(\2\2\u053a\u053c\5\u009eP\2")
- buf.write("\u053b\u0539\3\2\2\2\u053c\u053f\3\2\2\2\u053d\u053b\3")
- buf.write("\2\2\2\u053d\u053e\3\2\2\2\u053e\u0540\3\2\2\2\u053f\u053d")
- buf.write("\3\2\2\2\u0540\u0541\7!\2\2\u0541\u0543\3\2\2\2\u0542")
- buf.write("\u0536\3\2\2\2\u0542\u0543\3\2\2\2\u0543\u0544\3\2\2\2")
- buf.write("\u0544\u0545\5\u0124\u0093\2\u0545\u0547\7s\2\2\u0546")
- buf.write("\u0548\7 \2\2\u0547\u0546\3\2\2\2\u0547\u0548\3\2\2\2")
- buf.write("\u0548\u008d\3\2\2\2\u0549\u054a\7r\2\2\u054a\u054b\7")
- buf.write("\62\2\2\u054b\u054c\7\b\2\2\u054c\u054d\7\u00ec\2\2\u054d")
- buf.write("\u054e\7\30\2\2\u054e\u054f\7\u00fa\2\2\u054f\u0550\7")
- buf.write("\31\2\2\u0550\u055d\7!\2\2\u0551\u0552\7@\2\2\u0552\u0553")
- buf.write("\7\b\2\2\u0553\u0558\5\u009eP\2\u0554\u0555\7(\2\2\u0555")
- buf.write("\u0557\5\u009eP\2\u0556\u0554\3\2\2\2\u0557\u055a\3\2")
- buf.write("\2\2\u0558\u0556\3\2\2\2\u0558\u0559\3\2\2\2\u0559\u055b")
- buf.write("\3\2\2\2\u055a\u0558\3\2\2\2\u055b\u055c\7!\2\2\u055c")
- buf.write("\u055e\3\2\2\2\u055d\u0551\3\2\2\2\u055d\u055e\3\2\2\2")
- buf.write("\u055e\u055f\3\2\2\2\u055f\u0560\5\u0124\u0093\2\u0560")
- buf.write("\u0562\7s\2\2\u0561\u0563\7 \2\2\u0562\u0561\3\2\2\2\u0562")
- buf.write("\u0563\3\2\2\2\u0563\u008f\3\2\2\2\u0564\u0565\7l\2\2")
- buf.write("\u0565\u0566\5\u0124\u0093\2\u0566\u0567\7 \2\2\u0567")
- buf.write("\u0568\5\u00b4[\2\u0568\u056a\7s\2\2\u0569\u056b\7 \2")
- buf.write("\2\u056a\u0569\3\2\2\2\u056a\u056b\3\2\2\2\u056b\u0091")
- buf.write("\3\2\2\2\u056c\u056d\7\u00a4\2\2\u056d\u056e\7\u00a5\2")
- buf.write("\2\u056e\u056f\7\b\2\2\u056f\u0570\7\u00fa\2\2\u0570\u0093")
- buf.write("\3\2\2\2\u0571\u0572\7\u00a6\2\2\u0572\u0573\7\b\2\2\u0573")
- buf.write("\u0574\7\u00ec\2\2\u0574\u0575\7\30\2\2\u0575\u0576\7")
- buf.write("\u00fa\2\2\u0576\u0577\7\31\2\2\u0577\u0578\7!\2\2\u0578")
- buf.write("\u0095\3\2\2\2\u0579\u057a\7\u00eb\2\2\u057a\u057b\7\b")
- buf.write("\2\2\u057b\u057c\5L\'\2\u057c\u057d\7!\2\2\u057d\u0097")
- buf.write("\3\2\2\2\u057e\u057f\7q\2\2\u057f\u0580\7\62\2\2\u0580")
- buf.write("\u0581\7\b\2\2\u0581\u0582\7\u00ec\2\2\u0582\u0583\7\30")
- buf.write("\2\2\u0583\u0584\7\u00fa\2\2\u0584\u0585\7\31\2\2\u0585")
- buf.write("\u058a\7!\2\2\u0586\u0587\7M\2\2\u0587\u0588\7\b\2\2\u0588")
- buf.write("\u0589\7\u00fa\2\2\u0589\u058b\7!\2\2\u058a\u0586\3\2")
- buf.write("\2\2\u058a\u058b\3\2\2\2\u058b\u058c\3\2\2\2\u058c\u058d")
- buf.write("\5\u0124\u0093\2\u058d\u058f\7s\2\2\u058e\u0590\7 \2\2")
- buf.write("\u058f\u058e\3\2\2\2\u058f\u0590\3\2\2\2\u0590\u0099\3")
- buf.write("\2\2\2\u0591\u0593\5\u008aF\2\u0592\u0591\3\2\2\2\u0593")
- buf.write("\u0596\3\2\2\2\u0594\u0592\3\2\2\2\u0594\u0595\3\2\2\2")
- buf.write("\u0595\u009b\3\2\2\2\u0596\u0594\3\2\2\2\u0597\u059f\5")
- buf.write("\u00a0Q\2\u0598\u059f\5\u00a2R\2\u0599\u059f\5\u00a6T")
- buf.write("\2\u059a\u059f\5\u00a4S\2\u059b\u059f\5\u00a8U\2\u059c")
- buf.write("\u059f\5\u00b0Y\2\u059d\u059f\5\u00b2Z\2\u059e\u0597\3")
- buf.write("\2\2\2\u059e\u0598\3\2\2\2\u059e\u0599\3\2\2\2\u059e\u059a")
- buf.write("\3\2\2\2\u059e\u059b\3\2\2\2\u059e\u059c\3\2\2\2\u059e")
- buf.write("\u059d\3\2\2\2\u059f\u009d\3\2\2\2\u05a0\u05a9\7\u00fa")
- buf.write("\2\2\u05a1\u05a9\7y\2\2\u05a2\u05a9\7v\2\2\u05a3\u05a9")
- buf.write("\7u\2\2\u05a4\u05a9\7{\2\2\u05a5\u05a9\7|\2\2\u05a6\u05a9")
- buf.write("\7z\2\2\u05a7\u05a9\7}\2\2\u05a8\u05a0\3\2\2\2\u05a8\u05a1")
- buf.write("\3\2\2\2\u05a8\u05a2\3\2\2\2\u05a8\u05a3\3\2\2\2\u05a8")
- buf.write("\u05a4\3\2\2\2\u05a8\u05a5\3\2\2\2\u05a8\u05a6\3\2\2\2")
- buf.write("\u05a8\u05a7\3\2\2\2\u05a9\u009f\3\2\2\2\u05aa\u05ab\7")
- buf.write("k\2\2\u05ab\u05ac\5\u0124\u0093\2\u05ac\u05b9\7 \2\2\u05ad")
- buf.write("\u05ae\7@\2\2\u05ae\u05af\7\b\2\2\u05af\u05b4\5\u009e")
- buf.write("P\2\u05b0\u05b1\7(\2\2\u05b1\u05b3\5\u009eP\2\u05b2\u05b0")
- buf.write("\3\2\2\2\u05b3\u05b6\3\2\2\2\u05b4\u05b2\3\2\2\2\u05b4")
- buf.write("\u05b5\3\2\2\2\u05b5\u05b7\3\2\2\2\u05b6\u05b4\3\2\2\2")
- buf.write("\u05b7\u05b8\7!\2\2\u05b8\u05ba\3\2\2\2\u05b9\u05ad\3")
- buf.write("\2\2\2\u05b9\u05ba\3\2\2\2\u05ba\u05bb\3\2\2\2\u05bb\u05bc")
- buf.write("\5\u00b4[\2\u05bc\u05be\7s\2\2\u05bd\u05bf\7 \2\2\u05be")
- buf.write("\u05bd\3\2\2\2\u05be\u05bf\3\2\2\2\u05bf\u00a1\3\2\2\2")
- buf.write("\u05c0\u05c1\7K\2\2\u05c1\u05c2\5\u0124\u0093\2\u05c2")
- buf.write("\u05cf\7 \2\2\u05c3\u05c4\7@\2\2\u05c4\u05c5\7\b\2\2\u05c5")
- buf.write("\u05ca\5\u009eP\2\u05c6\u05c7\7(\2\2\u05c7\u05c9\5\u009e")
- buf.write("P\2\u05c8\u05c6\3\2\2\2\u05c9\u05cc\3\2\2\2\u05ca\u05c8")
- buf.write("\3\2\2\2\u05ca\u05cb\3\2\2\2\u05cb\u05cd\3\2\2\2\u05cc")
- buf.write("\u05ca\3\2\2\2\u05cd\u05ce\7!\2\2\u05ce\u05d0\3\2\2\2")
- buf.write("\u05cf\u05c3\3\2\2\2\u05cf\u05d0\3\2\2\2\u05d0\u05d1\3")
- buf.write("\2\2\2\u05d1\u05d2\5\u00b4[\2\u05d2\u05d4\7s\2\2\u05d3")
- buf.write("\u05d5\7 \2\2\u05d4\u05d3\3\2\2\2\u05d4\u05d5\3\2\2\2")
- buf.write("\u05d5\u00a3\3\2\2\2\u05d6\u05de\7c\2\2\u05d7\u05d8\5")
- buf.write("\u00a6T\2\u05d8\u05d9\7!\2\2\u05d9\u05df\3\2\2\2\u05da")
- buf.write("\u05db\7\b\2\2\u05db\u05dc\5Z.\2\u05dc\u05dd\7!\2\2\u05dd")
- buf.write("\u05df\3\2\2\2\u05de\u05d7\3\2\2\2\u05de\u05da\3\2\2\2")
- buf.write("\u05df\u05e4\3\2\2\2\u05e0\u05e1\7\u009b\2\2\u05e1\u05e2")
- buf.write("\7\b\2\2\u05e2\u05e3\7\u00fb\2\2\u05e3\u05e5\7!\2\2\u05e4")
- buf.write("\u05e0\3\2\2\2\u05e4\u05e5\3\2\2\2\u05e5\u00a5\3\2\2\2")
- buf.write("\u05e6\u05e7\7\u0096\2\2\u05e7\u05e8\7\b\2\2\u05e8\u05e9")
- buf.write("\5\u0124\u0093\2\u05e9\u00a7\3\2\2\2\u05ea\u05eb\5\u00aa")
- buf.write("V\2\u05eb\u00a9\3\2\2\2\u05ec\u05ed\7?\2\2\u05ed\u05ee")
- buf.write("\7>\2\2\u05ee\u05ef\7\b\2\2\u05ef\u05f0\7\u00ec\2\2\u05f0")
- buf.write("\u05f1\7\30\2\2\u05f1\u05f2\7\u00fa\2\2\u05f2\u05f3\7")
- buf.write("\31\2\2\u05f3\u05f4\7!\2\2\u05f4\u05f5\7\u0096\2\2\u05f5")
- buf.write("\u05f6\7\b\2\2\u05f6\u05f7\5Z.\2\u05f7\u05f8\7!\2\2\u05f8")
- buf.write("\u05f9\7@\2\2\u05f9\u05fa\7\b\2\2\u05fa\u05ff\5\u00ac")
- buf.write("W\2\u05fb\u05fc\7!\2\2\u05fc\u05fd\7t\2\2\u05fd\u05fe")
- buf.write("\7\b\2\2\u05fe\u0600\7\u00fa\2\2\u05ff\u05fb\3\2\2\2\u05ff")
- buf.write("\u0600\3\2\2\2\u0600\u0605\3\2\2\2\u0601\u0602\7!\2\2")
- buf.write("\u0602\u0604\5\\/\2\u0603\u0601\3\2\2\2\u0604\u0607\3")
- buf.write("\2\2\2\u0605\u0603\3\2\2\2\u0605\u0606\3\2\2\2\u0606\u0608")
- buf.write("\3\2\2\2\u0607\u0605\3\2\2\2\u0608\u0609\7 \2\2\u0609")
- buf.write("\u00ab\3\2\2\2\u060a\u060f\5\u00aeX\2\u060b\u060c\7(\2")
- buf.write("\2\u060c\u060e\5\u00aeX\2\u060d\u060b\3\2\2\2\u060e\u0611")
- buf.write("\3\2\2\2\u060f\u060d\3\2\2\2\u060f\u0610\3\2\2\2\u0610")
- buf.write("\u00ad\3\2\2\2\u0611\u060f\3\2\2\2\u0612\u061e\7\u00fa")
- buf.write("\2\2\u0613\u061e\7\u00ed\2\2\u0614\u061e\7\u00ee\2\2\u0615")
- buf.write("\u061e\7y\2\2\u0616\u061e\7{\2\2\u0617\u061e\7\u0080\2")
- buf.write("\2\u0618\u061e\7|\2\2\u0619\u061e\7v\2\2\u061a\u061e\7")
- buf.write("u\2\2\u061b\u061e\7z\2\2\u061c\u061e\7}\2\2\u061d\u0612")
- buf.write("\3\2\2\2\u061d\u0613\3\2\2\2\u061d\u0614\3\2\2\2\u061d")
- buf.write("\u0615\3\2\2\2\u061d\u0616\3\2\2\2\u061d\u0617\3\2\2\2")
- buf.write("\u061d\u0618\3\2\2\2\u061d\u0619\3\2\2\2\u061d\u061a\3")
- buf.write("\2\2\2\u061d\u061b\3\2\2\2\u061d\u061c\3\2\2\2\u061e\u00af")
- buf.write("\3\2\2\2\u061f\u0620\7\u0097\2\2\u0620\u0621\5\u0124\u0093")
- buf.write("\2\u0621\u0622\7 \2\2\u0622\u00b1\3\2\2\2\u0623\u0624")
- buf.write("\7\u0098\2\2\u0624\u0625\5\u0124\u0093\2\u0625\u0626\7")
- buf.write(" \2\2\u0626\u00b3\3\2\2\2\u0627\u0629\5\u00b6\\\2\u0628")
- buf.write("\u0627\3\2\2\2\u0629\u062c\3\2\2\2\u062a\u0628\3\2\2\2")
- buf.write("\u062a\u062b\3\2\2\2\u062b\u00b5\3\2\2\2\u062c\u062a\3")
- buf.write("\2\2\2\u062d\u0630\5\u008aF\2\u062e\u0630\5\u009cO\2\u062f")
- buf.write("\u062d\3\2\2\2\u062f\u062e\3\2\2\2\u0630\u00b7\3\2\2\2")
- buf.write("\u0631\u0634\5\u00ba^\2\u0632\u0634\5\u00c0a\2\u0633\u0631")
- buf.write("\3\2\2\2\u0633\u0632\3\2\2\2\u0634\u00b9\3\2\2\2\u0635")
- buf.write("\u0636\7\\\2\2\u0636\u0637\5R*\2\u0637\u0638\5T+\2\u0638")
- buf.write("\u063e\7!\2\2\u0639\u063a\7@\2\2\u063a\u063b\7\b\2\2\u063b")
- buf.write("\u063c\5\u00bc_\2\u063c\u063d\7!\2\2\u063d\u063f\3\2\2")
- buf.write("\2\u063e\u0639\3\2\2\2\u063e\u063f\3\2\2\2\u063f\u0644")
- buf.write("\3\2\2\2\u0640\u0641\7t\2\2\u0641\u0642\7\b\2\2\u0642")
- buf.write("\u0643\7\u00fa\2\2\u0643\u0645\7!\2\2\u0644\u0640\3\2")
- buf.write("\2\2\u0644\u0645\3\2\2\2\u0645\u0646\3\2\2\2\u0646\u0647")
- buf.write("\5\u00b4[\2\u0647\u0648\7]\2\2\u0648\u0649\7 \2\2\u0649")
- buf.write("\u00bb\3\2\2\2\u064a\u064f\5\u00be`\2\u064b\u064c\7(\2")
- buf.write("\2\u064c\u064e\5\u00be`\2\u064d\u064b\3\2\2\2\u064e\u0651")
- buf.write("\3\2\2\2\u064f\u064d\3\2\2\2\u064f\u0650\3\2\2\2\u0650")
- buf.write("\u00bd\3\2\2\2\u0651\u064f\3\2\2\2\u0652\u0659\7\u00fa")
- buf.write("\2\2\u0653\u0659\7u\2\2\u0654\u0659\7v\2\2\u0655\u0659")
- buf.write("\7w\2\2\u0656\u0659\7x\2\2\u0657\u0659\5V,\2\u0658\u0652")
- buf.write("\3\2\2\2\u0658\u0653\3\2\2\2\u0658\u0654\3\2\2\2\u0658")
- buf.write("\u0655\3\2\2\2\u0658\u0656\3\2\2\2\u0658\u0657\3\2\2\2")
- buf.write("\u0659\u00bf\3\2\2\2\u065a\u065b\7\u00a1\2\2\u065b\u065c")
- buf.write("\5P)\2\u065c\u0662\7!\2\2\u065d\u065e\7@\2\2\u065e\u065f")
- buf.write("\7\b\2\2\u065f\u0660\5\u00c2b\2\u0660\u0661\7!\2\2\u0661")
- buf.write("\u0663\3\2\2\2\u0662\u065d\3\2\2\2\u0662\u0663\3\2\2\2")
- buf.write("\u0663\u0664\3\2\2\2\u0664\u0665\7\u00a2\2\2\u0665\u0666")
- buf.write("\7\b\2\2\u0666\u0667\7\u00ec\2\2\u0667\u0668\7\30\2\2")
- buf.write("\u0668\u0669\7\u00fa\2\2\u0669\u066a\7\31\2\2\u066a\u066b")
- buf.write("\7!\2\2\u066b\u066c\5\u009aN\2\u066c\u066d\7\u00a3\2\2")
- buf.write("\u066d\u066e\7 \2\2\u066e\u00c1\3\2\2\2\u066f\u0674\5")
- buf.write("\u00c4c\2\u0670\u0671\7(\2\2\u0671\u0673\5\u00c4c\2\u0672")
- buf.write("\u0670\3\2\2\2\u0673\u0676\3\2\2\2\u0674\u0672\3\2\2\2")
- buf.write("\u0674\u0675\3\2\2\2\u0675\u00c3\3\2\2\2\u0676\u0674\3")
- buf.write("\2\2\2\u0677\u067a\7\u00fa\2\2\u0678\u067a\5V,\2\u0679")
- buf.write("\u0677\3\2\2\2\u0679\u0678\3\2\2\2\u067a\u00c5\3\2\2\2")
- buf.write("\u067b\u067e\5\u00c8e\2\u067c\u067e\5\u00d0i\2\u067d\u067b")
- buf.write("\3\2\2\2\u067d\u067c\3\2\2\2\u067e\u00c7\3\2\2\2\u067f")
- buf.write("\u0680\7^\2\2\u0680\u0681\5R*\2\u0681\u0682\5T+\2\u0682")
- buf.write("\u0688\7!\2\2\u0683\u0684\7@\2\2\u0684\u0685\7\b\2\2\u0685")
- buf.write("\u0686\5\u00ccg\2\u0686\u0687\7!\2\2\u0687\u0689\3\2\2")
- buf.write("\2\u0688\u0683\3\2\2\2\u0688\u0689\3\2\2\2\u0689\u068e")
- buf.write("\3\2\2\2\u068a\u068b\7t\2\2\u068b\u068c\7\b\2\2\u068c")
- buf.write("\u068d\7\u00fa\2\2\u068d\u068f\7!\2\2\u068e\u068a\3\2")
- buf.write("\2\2\u068e\u068f\3\2\2\2\u068f\u0690\3\2\2\2\u0690\u0691")
- buf.write("\5\u00caf\2\u0691\u0692\5\u00b4[\2\u0692\u0693\7_\2\2")
- buf.write("\u0693\u0694\7 \2\2\u0694\u00c9\3\2\2\2\u0695\u0696\7")
- buf.write("`\2\2\u0696\u0698\7\b\2\2\u0697\u0699\7\35\2\2\u0698\u0697")
- buf.write("\3\2\2\2\u0698\u0699\3\2\2\2\u0699\u069a\3\2\2\2\u069a")
- buf.write("\u069b\7\u00fa\2\2\u069b\u069c\7!\2\2\u069c\u069d\7a\2")
- buf.write("\2\u069d\u069f\7\b\2\2\u069e\u06a0\7\35\2\2\u069f\u069e")
- buf.write("\3\2\2\2\u069f\u06a0\3\2\2\2\u06a0\u06a1\3\2\2\2\u06a1")
- buf.write("\u06a2\7\u00fa\2\2\u06a2\u06a7\7!\2\2\u06a3\u06a4\7b\2")
- buf.write("\2\u06a4\u06a5\7\b\2\2\u06a5\u06a6\7\u00fa\2\2\u06a6\u06a8")
- buf.write("\7!\2\2\u06a7\u06a3\3\2\2\2\u06a7\u06a8\3\2\2\2\u06a8")
- buf.write("\u00cb\3\2\2\2\u06a9\u06ae\5\u00ceh\2\u06aa\u06ab\7(\2")
- buf.write("\2\u06ab\u06ad\5\u00ceh\2\u06ac\u06aa\3\2\2\2\u06ad\u06b0")
- buf.write("\3\2\2\2\u06ae\u06ac\3\2\2\2\u06ae\u06af\3\2\2\2\u06af")
- buf.write("\u00cd\3\2\2\2\u06b0\u06ae\3\2\2\2\u06b1\u06bb\7\u00fa")
- buf.write("\2\2\u06b2\u06bb\7\u00ef\2\2\u06b3\u06bb\7\u00f0\2\2\u06b4")
- buf.write("\u06bb\7\u00f1\2\2\u06b5\u06bb\7\u00f2\2\2\u06b6\u06bb")
- buf.write("\7\u00f3\2\2\u06b7\u06bb\7\u00f4\2\2\u06b8\u06bb\7\u00f5")
- buf.write("\2\2\u06b9\u06bb\5V,\2\u06ba\u06b1\3\2\2\2\u06ba\u06b2")
- buf.write("\3\2\2\2\u06ba\u06b3\3\2\2\2\u06ba\u06b4\3\2\2\2\u06ba")
- buf.write("\u06b5\3\2\2\2\u06ba\u06b6\3\2\2\2\u06ba\u06b7\3\2\2\2")
- buf.write("\u06ba\u06b8\3\2\2\2\u06ba\u06b9\3\2\2\2\u06bb\u00cf\3")
- buf.write("\2\2\2\u06bc\u06bd\7\60\2\2\u06bd\u06be\5R*\2\u06be\u06bf")
- buf.write("\5T+\2\u06bf\u06c5\7!\2\2\u06c0\u06c1\7@\2\2\u06c1\u06c2")
- buf.write("\7\b\2\2\u06c2\u06c3\5\u00d2j\2\u06c3\u06c4\7!\2\2\u06c4")
- buf.write("\u06c6\3\2\2\2\u06c5\u06c0\3\2\2\2\u06c5\u06c6\3\2\2\2")
- buf.write("\u06c6\u06c8\3\2\2\2\u06c7\u06c9\5\u00caf\2\u06c8\u06c7")
- buf.write("\3\2\2\2\u06c8\u06c9\3\2\2\2\u06c9\u06ca\3\2\2\2\u06ca")
- buf.write("\u06cb\5\u00b4[\2\u06cb\u06cc\7\61\2\2\u06cc\u06cd\7 ")
- buf.write("\2\2\u06cd\u00d1\3\2\2\2\u06ce\u06d3\5\u00ceh\2\u06cf")
- buf.write("\u06d0\7(\2\2\u06d0\u06d2\5\u00ceh\2\u06d1\u06cf\3\2\2")
- buf.write("\2\u06d2\u06d5\3\2\2\2\u06d3\u06d1\3\2\2\2\u06d3\u06d4")
- buf.write("\3\2\2\2\u06d4\u00d3\3\2\2\2\u06d5\u06d3\3\2\2\2\u06d6")
- buf.write("\u06d9\5\u00d6l\2\u06d7\u06d9\5\u00dco\2\u06d8\u06d6\3")
- buf.write("\2\2\2\u06d8\u06d7\3\2\2\2\u06d9\u00d5\3\2\2\2\u06da\u06db")
- buf.write("\7f\2\2\u06db\u06dc\5P)\2\u06dc\u06e2\7!\2\2\u06dd\u06de")
- buf.write("\7@\2\2\u06de\u06df\7\b\2\2\u06df\u06e0\5\u00d8m\2\u06e0")
- buf.write("\u06e1\7!\2\2\u06e1\u06e3\3\2\2\2\u06e2\u06dd\3\2\2\2")
- buf.write("\u06e2\u06e3\3\2\2\2\u06e3\u06e8\3\2\2\2\u06e4\u06e5\7")
- buf.write("t\2\2\u06e5\u06e6\7\b\2\2\u06e6\u06e7\7\u00fa\2\2\u06e7")
- buf.write("\u06e9\7!\2\2\u06e8\u06e4\3\2\2\2\u06e8\u06e9\3\2\2\2")
- buf.write("\u06e9\u06ea\3\2\2\2\u06ea\u06eb\7h\2\2\u06eb\u06ec\7")
- buf.write("\b\2\2\u06ec\u06ed\7\u00fa\2\2\u06ed\u06ee\7!\2\2\u06ee")
- buf.write("\u06ef\7i\2\2\u06ef\u06f0\7\b\2\2\u06f0\u06f1\7\u00fa")
- buf.write("\2\2\u06f1\u06f2\7!\2\2\u06f2\u06f3\5\u00b4[\2\u06f3\u06f4")
- buf.write("\7g\2\2\u06f4\u06f5\7 \2\2\u06f5\u00d7\3\2\2\2\u06f6\u06fb")
- buf.write("\5\u00dan\2\u06f7\u06f8\7(\2\2\u06f8\u06fa\5\u00dan\2")
- buf.write("\u06f9\u06f7\3\2\2\2\u06fa\u06fd\3\2\2\2\u06fb\u06f9\3")
- buf.write("\2\2\2\u06fb\u06fc\3\2\2\2\u06fc\u00d9\3\2\2\2\u06fd\u06fb")
- buf.write("\3\2\2\2\u06fe\u0702\7\u00fa\2\2\u06ff\u0702\7\13\2\2")
- buf.write("\u0700\u0702\5V,\2\u0701\u06fe\3\2\2\2\u0701\u06ff\3\2")
- buf.write("\2\2\u0701\u0700\3\2\2\2\u0702\u00db\3\2\2\2\u0703\u0704")
- buf.write("\7d\2\2\u0704\u0705\5P)\2\u0705\u070b\7!\2\2\u0706\u0707")
- buf.write("\7@\2\2\u0707\u0708\7\b\2\2\u0708\u0709\5\u00dep\2\u0709")
- buf.write("\u070a\7!\2\2\u070a\u070c\3\2\2\2\u070b\u0706\3\2\2\2")
- buf.write("\u070b\u070c\3\2\2\2\u070c\u0711\3\2\2\2\u070d\u070e\7")
- buf.write("t\2\2\u070e\u070f\7\b\2\2\u070f\u0710\7\u00fa\2\2\u0710")
- buf.write("\u0712\7!\2\2\u0711\u070d\3\2\2\2\u0711\u0712\3\2\2\2")
- buf.write("\u0712\u0713\3\2\2\2\u0713\u0714\7h\2\2\u0714\u0715\7")
- buf.write("\b\2\2\u0715\u0716\7\u00fa\2\2\u0716\u0717\7!\2\2\u0717")
- buf.write("\u0718\7i\2\2\u0718\u0719\7\b\2\2\u0719\u071a\7\u00fa")
- buf.write("\2\2\u071a\u071f\7!\2\2\u071b\u071c\7j\2\2\u071c\u071d")
- buf.write("\7\b\2\2\u071d\u071e\7\u00fa\2\2\u071e\u0720\7!\2\2\u071f")
- buf.write("\u071b\3\2\2\2\u071f\u0720\3\2\2\2\u0720\u0721\3\2\2\2")
- buf.write("\u0721\u0722\5\u00b4[\2\u0722\u0723\7e\2\2\u0723\u0724")
- buf.write("\7 \2\2\u0724\u00dd\3\2\2\2\u0725\u072a\5\u00e0q\2\u0726")
- buf.write("\u0727\7(\2\2\u0727\u0729\5\u00e0q\2\u0728\u0726\3\2\2")
- buf.write("\2\u0729\u072c\3\2\2\2\u072a\u0728\3\2\2\2\u072a\u072b")
- buf.write("\3\2\2\2\u072b\u00df\3\2\2\2\u072c\u072a\3\2\2\2\u072d")
- buf.write("\u0730\7\u00fa\2\2\u072e\u0730\5V,\2\u072f\u072d\3\2\2")
- buf.write("\2\u072f\u072e\3\2\2\2\u0730\u00e1\3\2\2\2\u0731\u0732")
- buf.write("\7\63\2\2\u0732\u0733\5P)\2\u0733\u0738\7!\2\2\u0734\u0735")
- buf.write("\7\64\2\2\u0735\u0736\7\b\2\2\u0736\u0737\7\u00fa\2\2")
- buf.write("\u0737\u0739\7!\2\2\u0738\u0734\3\2\2\2\u0738\u0739\3")
- buf.write("\2\2\2\u0739\u073f\3\2\2\2\u073a\u073b\7@\2\2\u073b\u073c")
- buf.write("\7\b\2\2\u073c\u073d\5\u00e4s\2\u073d\u073e\7!\2\2\u073e")
- buf.write("\u0740\3\2\2\2\u073f\u073a\3\2\2\2\u073f\u0740\3\2\2\2")
- buf.write("\u0740\u0741\3\2\2\2\u0741\u0742\5\u00b4[\2\u0742\u0743")
- buf.write("\7\65\2\2\u0743\u0744\7 \2\2\u0744\u00e3\3\2\2\2\u0745")
- buf.write("\u074a\5\u00e6t\2\u0746\u0747\7(\2\2\u0747\u0749\5\u00e6")
- buf.write("t\2\u0748\u0746\3\2\2\2\u0749\u074c\3\2\2\2\u074a\u0748")
- buf.write("\3\2\2\2\u074a\u074b\3\2\2\2\u074b\u00e5\3\2\2\2\u074c")
- buf.write("\u074a\3\2\2\2\u074d\u0752\7\u00fa\2\2\u074e\u0752\7\u00c0")
- buf.write("\2\2\u074f\u0752\7\u00c1\2\2\u0750\u0752\5V,\2\u0751\u074d")
- buf.write("\3\2\2\2\u0751\u074e\3\2\2\2\u0751\u074f\3\2\2\2\u0751")
- buf.write("\u0750\3\2\2\2\u0752\u00e7\3\2\2\2\u0753\u07ae\7A\2\2")
- buf.write("\u0754\u0755\5P)\2\u0755\u075b\7!\2\2\u0756\u0757\7@\2")
- buf.write("\2\u0757\u0758\7\b\2\2\u0758\u0759\5\u00ecw\2\u0759\u075a")
- buf.write("\7!\2\2\u075a\u075c\3\2\2\2\u075b\u0756\3\2\2\2\u075b")
- buf.write("\u075c\3\2\2\2\u075c\u075d\3\2\2\2\u075d\u075e\5\u00b4")
- buf.write("[\2\u075e\u07af\3\2\2\2\u075f\u0760\7C\2\2\u0760\u0761")
- buf.write("\7\u008f\2\2\u0761\u0762\7\b\2\2\u0762\u0763\7\u00fb\2")
- buf.write("\2\u0763\u0764\7\34\2\2\u0764\u0765\7\u00fb\2\2\u0765")
- buf.write("\u0766\7!\2\2\u0766\u0767\7\62\2\2\u0767\u0768\7\b\2\2")
- buf.write("\u0768\u0769\7\u00ec\2\2\u0769\u076a\7\30\2\2\u076a\u076b")
- buf.write("\7\u00fa\2\2\u076b\u076c\7\31\2\2\u076c\u076d\7!\2\2\u076d")
- buf.write("\u076e\7=\2\2\u076e\u076f\7\b\2\2\u076f\u0770\7\u00ec")
- buf.write("\2\2\u0770\u0771\7\30\2\2\u0771\u0772\7\u00fa\2\2\u0772")
- buf.write("\u0773\7\31\2\2\u0773\u0774\7!\2\2\u0774\u0775\5\u00ea")
- buf.write("v\2\u0775\u0776\7D\2\2\u0776\u0777\7\u008f\2\2\u0777\u0778")
- buf.write("\7\b\2\2\u0778\u0779\7\u00fb\2\2\u0779\u077a\7\34\2\2")
- buf.write("\u077a\u077b\7\u00fb\2\2\u077b\u077c\7!\2\2\u077c\u077d")
- buf.write("\7\62\2\2\u077d\u077e\7\b\2\2\u077e\u077f\7\u00ec\2\2")
- buf.write("\u077f\u0780\7\30\2\2\u0780\u0781\7\u00fa\2\2\u0781\u0782")
- buf.write("\7\31\2\2\u0782\u0783\7!\2\2\u0783\u0784\7=\2\2\u0784")
- buf.write("\u0785\7\b\2\2\u0785\u0786\7\u00ec\2\2\u0786\u0787\7\30")
- buf.write("\2\2\u0787\u0788\7\u00fa\2\2\u0788\u0789\7\31\2\2\u0789")
- buf.write("\u078a\7!\2\2\u078a\u078b\5\u00eav\2\u078b\u078c\7E\2")
- buf.write("\2\u078c\u078d\7\u008f\2\2\u078d\u078e\7\b\2\2\u078e\u078f")
- buf.write("\7\u00fb\2\2\u078f\u0790\7\34\2\2\u0790\u0791\7\u00fb")
- buf.write("\2\2\u0791\u0792\7!\2\2\u0792\u0793\7\62\2\2\u0793\u0794")
- buf.write("\7\b\2\2\u0794\u0795\7\u00ec\2\2\u0795\u0796\7\30\2\2")
- buf.write("\u0796\u0797\7\u00fa\2\2\u0797\u0798\7\31\2\2\u0798\u0799")
- buf.write("\7!\2\2\u0799\u079a\7=\2\2\u079a\u079b\7\b\2\2\u079b\u079c")
- buf.write("\7\u00ec\2\2\u079c\u079d\7\30\2\2\u079d\u079e\7\u00fa")
- buf.write("\2\2\u079e\u079f\7\31\2\2\u079f\u07a0\7!\2\2\u07a0\u07a6")
- buf.write("\5\u00eav\2\u07a1\u07a2\7@\2\2\u07a2\u07a3\7\b\2\2\u07a3")
- buf.write("\u07a4\5\u00ecw\2\u07a4\u07a5\7!\2\2\u07a5\u07a7\3\2\2")
- buf.write("\2\u07a6\u07a1\3\2\2\2\u07a6\u07a7\3\2\2\2\u07a7\u07ab")
- buf.write("\3\2\2\2\u07a8\u07aa\5\u008cG\2\u07a9\u07a8\3\2\2\2\u07aa")
- buf.write("\u07ad\3\2\2\2\u07ab\u07a9\3\2\2\2\u07ab\u07ac\3\2\2\2")
- buf.write("\u07ac\u07af\3\2\2\2\u07ad\u07ab\3\2\2\2\u07ae\u0754\3")
- buf.write("\2\2\2\u07ae\u075f\3\2\2\2\u07af\u07b0\3\2\2\2\u07b0\u07b1")
- buf.write("\7B\2\2\u07b1\u07b2\7 \2\2\u07b2\u00e9\3\2\2\2\u07b3\u07b4")
- buf.write("\7`\2\2\u07b4\u07b5\7\b\2\2\u07b5\u07b6\7\u00fa\2\2\u07b6")
- buf.write("\u07b7\7!\2\2\u07b7\u07b8\7a\2\2\u07b8\u07b9\7\b\2\2\u07b9")
- buf.write("\u07ba\7\u00fa\2\2\u07ba\u07bf\7!\2\2\u07bb\u07bc\7b\2")
- buf.write("\2\u07bc\u07bd\7\b\2\2\u07bd\u07be\7\u00fa\2\2\u07be\u07c0")
- buf.write("\7!\2\2\u07bf\u07bb\3\2\2\2\u07bf\u07c0\3\2\2\2\u07c0")
- buf.write("\u07c5\3\2\2\2\u07c1\u07c2\7c\2\2\u07c2\u07c3\7\b\2\2")
- buf.write("\u07c3\u07c4\7\u00fa\2\2\u07c4\u07c6\7!\2\2\u07c5\u07c1")
- buf.write("\3\2\2\2\u07c5\u07c6\3\2\2\2\u07c6\u00eb\3\2\2\2\u07c7")
- buf.write("\u07cc\5\u00eex\2\u07c8\u07c9\7(\2\2\u07c9\u07cb\5\u00ee")
- buf.write("x\2\u07ca\u07c8\3\2\2\2\u07cb\u07ce\3\2\2\2\u07cc\u07ca")
- buf.write("\3\2\2\2\u07cc\u07cd\3\2\2\2\u07cd\u00ed\3\2\2\2\u07ce")
- buf.write("\u07cc\3\2\2\2\u07cf\u07d0\t\6\2\2\u07d0\u00ef\3\2\2\2")
- buf.write("\u07d1\u082c\7F\2\2\u07d2\u07d3\5P)\2\u07d3\u07d9\7!\2")
- buf.write("\2\u07d4\u07d5\7@\2\2\u07d5\u07d6\7\b\2\2\u07d6\u07d7")
- buf.write("\5\u00f4{\2\u07d7\u07d8\7!\2\2\u07d8\u07da\3\2\2\2\u07d9")
- buf.write("\u07d4\3\2\2\2\u07d9\u07da\3\2\2\2\u07da\u07db\3\2\2\2")
- buf.write("\u07db\u07dc\5\u00b4[\2\u07dc\u082d\3\2\2\2\u07dd\u07de")
- buf.write("\7H\2\2\u07de\u07df\7\u008f\2\2\u07df\u07e0\7\b\2\2\u07e0")
- buf.write("\u07e1\7\u00fb\2\2\u07e1\u07e2\7\34\2\2\u07e2\u07e3\7")
- buf.write("\u00fb\2\2\u07e3\u07e4\7!\2\2\u07e4\u07e5\7\62\2\2\u07e5")
- buf.write("\u07e6\7\b\2\2\u07e6\u07e7\7\u00ec\2\2\u07e7\u07e8\7\30")
- buf.write("\2\2\u07e8\u07e9\7\u00fa\2\2\u07e9\u07ea\7\31\2\2\u07ea")
- buf.write("\u07eb\7!\2\2\u07eb\u07ec\7=\2\2\u07ec\u07ed\7\b\2\2\u07ed")
- buf.write("\u07ee\7\u00ec\2\2\u07ee\u07ef\7\30\2\2\u07ef\u07f0\7")
- buf.write("\u00fa\2\2\u07f0\u07f1\7\31\2\2\u07f1\u07f2\7!\2\2\u07f2")
- buf.write("\u07f3\5\u00f2z\2\u07f3\u07f4\7I\2\2\u07f4\u07f5\7\u008f")
- buf.write("\2\2\u07f5\u07f6\7\b\2\2\u07f6\u07f7\7\u00fb\2\2\u07f7")
- buf.write("\u07f8\7\34\2\2\u07f8\u07f9\7\u00fb\2\2\u07f9\u07fa\7")
- buf.write("!\2\2\u07fa\u07fb\7\62\2\2\u07fb\u07fc\7\b\2\2\u07fc\u07fd")
- buf.write("\7\u00ec\2\2\u07fd\u07fe\7\30\2\2\u07fe\u07ff\7\u00fa")
- buf.write("\2\2\u07ff\u0800\7\31\2\2\u0800\u0801\7!\2\2\u0801\u0802")
- buf.write("\7=\2\2\u0802\u0803\7\b\2\2\u0803\u0804\7\u00ec\2\2\u0804")
- buf.write("\u0805\7\30\2\2\u0805\u0806\7\u00fa\2\2\u0806\u0807\7")
- buf.write("\31\2\2\u0807\u0808\7!\2\2\u0808\u0809\5\u00f2z\2\u0809")
- buf.write("\u080a\7J\2\2\u080a\u080b\7\u008f\2\2\u080b\u080c\7\b")
- buf.write("\2\2\u080c\u080d\7\u00fb\2\2\u080d\u080e\7\34\2\2\u080e")
- buf.write("\u080f\7\u00fb\2\2\u080f\u0810\7!\2\2\u0810\u0811\7\62")
- buf.write("\2\2\u0811\u0812\7\b\2\2\u0812\u0813\7\u00ec\2\2\u0813")
- buf.write("\u0814\7\30\2\2\u0814\u0815\7\u00fa\2\2\u0815\u0816\7")
- buf.write("\31\2\2\u0816\u0817\7!\2\2\u0817\u0818\7=\2\2\u0818\u0819")
- buf.write("\7\b\2\2\u0819\u081a\7\u00ec\2\2\u081a\u081b\7\30\2\2")
- buf.write("\u081b\u081c\7\u00fa\2\2\u081c\u081d\7\31\2\2\u081d\u081e")
- buf.write("\7!\2\2\u081e\u0824\5\u00f2z\2\u081f\u0820\7@\2\2\u0820")
- buf.write("\u0821\7\b\2\2\u0821\u0822\5\u00f4{\2\u0822\u0823\7!\2")
- buf.write("\2\u0823\u0825\3\2\2\2\u0824\u081f\3\2\2\2\u0824\u0825")
- buf.write("\3\2\2\2\u0825\u0829\3\2\2\2\u0826\u0828\5\u008cG\2\u0827")
- buf.write("\u0826\3\2\2\2\u0828\u082b\3\2\2\2\u0829\u0827\3\2\2\2")
- buf.write("\u0829\u082a\3\2\2\2\u082a\u082d\3\2\2\2\u082b\u0829\3")
- buf.write("\2\2\2\u082c\u07d2\3\2\2\2\u082c\u07dd\3\2\2\2\u082d\u082e")
- buf.write("\3\2\2\2\u082e\u082f\7G\2\2\u082f\u0830\7 \2\2\u0830\u00f1")
- buf.write("\3\2\2\2\u0831\u0832\7`\2\2\u0832\u0833\7\b\2\2\u0833")
- buf.write("\u0834\7\u00fa\2\2\u0834\u0835\7!\2\2\u0835\u0836\7a\2")
- buf.write("\2\u0836\u0837\7\b\2\2\u0837\u0838\7\u00fa\2\2\u0838\u083d")
- buf.write("\7!\2\2\u0839\u083a\7b\2\2\u083a\u083b\7\b\2\2\u083b\u083c")
- buf.write("\7\u00fa\2\2\u083c\u083e\7!\2\2\u083d\u0839\3\2\2\2\u083d")
- buf.write("\u083e\3\2\2\2\u083e\u0843\3\2\2\2\u083f\u0840\7c\2\2")
- buf.write("\u0840\u0841\7\b\2\2\u0841\u0842\7\u00fa\2\2\u0842\u0844")
- buf.write("\7!\2\2\u0843\u083f\3\2\2\2\u0843\u0844\3\2\2\2\u0844")
- buf.write("\u00f3\3\2\2\2\u0845\u084a\5\u00f6|\2\u0846\u0847\7(\2")
- buf.write("\2\u0847\u0849\5\u00f6|\2\u0848\u0846\3\2\2\2\u0849\u084c")
- buf.write("\3\2\2\2\u084a\u0848\3\2\2\2\u084a\u084b\3\2\2\2\u084b")
- buf.write("\u00f5\3\2\2\2\u084c\u084a\3\2\2\2\u084d\u084e\t\7\2\2")
- buf.write("\u084e\u00f7\3\2\2\2\u084f\u0854\5\u0104\u0083\2\u0850")
- buf.write("\u0854\5\u00fc\177\2\u0851\u0854\5\u00fe\u0080\2\u0852")
- buf.write("\u0854\5\u010e\u0088\2\u0853\u084f\3\2\2\2\u0853\u0850")
- buf.write("\3\2\2\2\u0853\u0851\3\2\2\2\u0853\u0852\3\2\2\2\u0854")
- buf.write("\u00f9\3\2\2\2\u0855\u0856\5\u0104\u0083\2\u0856\u0857")
- buf.write("\5\u010a\u0086\2\u0857\u0858\5\u010c\u0087\2\u0858\u0859")
- buf.write("\5\u010e\u0088\2\u0859\u00fb\3\2\2\2\u085a\u085b\5\u010a")
- buf.write("\u0086\2\u085b\u00fd\3\2\2\2\u085c\u085d\5\u010c\u0087")
- buf.write("\2\u085d\u00ff\3\2\2\2\u085e\u0865\5p9\2\u085f\u0865\5")
- buf.write("\u0088E\2\u0860\u0865\5\u00f8}\2\u0861\u0865\5\u0118\u008d")
- buf.write("\2\u0862\u0865\5\u011c\u008f\2\u0863\u0865\5\u0110\u0089")
- buf.write("\2\u0864\u085e\3\2\2\2\u0864\u085f\3\2\2\2\u0864\u0860")
- buf.write("\3\2\2\2\u0864\u0861\3\2\2\2\u0864\u0862\3\2\2\2\u0864")
- buf.write("\u0863\3\2\2\2\u0865\u0101\3\2\2\2\u0866\u086b\5p9\2\u0867")
- buf.write("\u086b\5\u0088E\2\u0868\u086b\5\u0118\u008d\2\u0869\u086b")
- buf.write("\5\u0110\u0089\2\u086a\u0866\3\2\2\2\u086a\u0867\3\2\2")
- buf.write("\2\u086a\u0868\3\2\2\2\u086a\u0869\3\2\2\2\u086b\u0103")
- buf.write("\3\2\2\2\u086c\u086d\7l\2\2\u086d\u086e\5\u0124\u0093")
- buf.write("\2\u086e\u0872\7 \2\2\u086f\u0871\5\u0100\u0081\2\u0870")
- buf.write("\u086f\3\2\2\2\u0871\u0874\3\2\2\2\u0872\u0870\3\2\2\2")
- buf.write("\u0872\u0873\3\2\2\2\u0873\u0875\3\2\2\2\u0874\u0872\3")
- buf.write("\2\2\2\u0875\u0876\7s\2\2\u0876\u0877\7 \2\2\u0877\u0105")
- buf.write("\3\2\2\2\u0878\u0885\7k\2\2\u0879\u087a\7@\2\2\u087a\u087b")
- buf.write("\7\b\2\2\u087b\u0880\5\u009eP\2\u087c\u087d\7(\2\2\u087d")
- buf.write("\u087f\5\u009eP\2\u087e\u087c\3\2\2\2\u087f\u0882\3\2")
- buf.write("\2\2\u0880\u087e\3\2\2\2\u0880\u0881\3\2\2\2\u0881\u0883")
- buf.write("\3\2\2\2\u0882\u0880\3\2\2\2\u0883\u0884\7!\2\2\u0884")
- buf.write("\u0886\3\2\2\2\u0885\u0879\3\2\2\2\u0885\u0886\3\2\2\2")
- buf.write("\u0886\u0887\3\2\2\2\u0887\u0888\5\u0124\u0093\2\u0888")
- buf.write("\u0889\7 \2\2\u0889\u0107\3\2\2\2\u088a\u0897\7K\2\2\u088b")
- buf.write("\u088c\7@\2\2\u088c\u088d\7\b\2\2\u088d\u0892\5\u009e")
- buf.write("P\2\u088e\u088f\7(\2\2\u088f\u0891\5\u009eP\2\u0890\u088e")
- buf.write("\3\2\2\2\u0891\u0894\3\2\2\2\u0892\u0890\3\2\2\2\u0892")
- buf.write("\u0893\3\2\2\2\u0893\u0895\3\2\2\2\u0894\u0892\3\2\2\2")
- buf.write("\u0895\u0896\7!\2\2\u0896\u0898\3\2\2\2\u0897\u088b\3")
- buf.write("\2\2\2\u0897\u0898\3\2\2\2\u0898\u0899\3\2\2\2\u0899\u089a")
- buf.write("\5\u0124\u0093\2\u089a\u089b\7 \2\2\u089b\u0109\3\2\2")
- buf.write("\2\u089c\u08a9\7k\2\2\u089d\u089e\7@\2\2\u089e\u089f\7")
- buf.write("\b\2\2\u089f\u08a4\5\u009eP\2\u08a0\u08a1\7(\2\2\u08a1")
- buf.write("\u08a3\5\u009eP\2\u08a2\u08a0\3\2\2\2\u08a3\u08a6\3\2")
- buf.write("\2\2\u08a4\u08a2\3\2\2\2\u08a4\u08a5\3\2\2\2\u08a5\u08a7")
- buf.write("\3\2\2\2\u08a6\u08a4\3\2\2\2\u08a7\u08a8\7!\2\2\u08a8")
- buf.write("\u08aa\3\2\2\2\u08a9\u089d\3\2\2\2\u08a9\u08aa\3\2\2\2")
- buf.write("\u08aa\u08ab\3\2\2\2\u08ab\u08ac\5\u0124\u0093\2\u08ac")
- buf.write("\u08b0\7 \2\2\u08ad\u08af\5\u0100\u0081\2\u08ae\u08ad")
- buf.write("\3\2\2\2\u08af\u08b2\3\2\2\2\u08b0\u08ae\3\2\2\2\u08b0")
- buf.write("\u08b1\3\2\2\2\u08b1\u08b3\3\2\2\2\u08b2\u08b0\3\2\2\2")
- buf.write("\u08b3\u08b4\7s\2\2\u08b4\u08b5\7 \2\2\u08b5\u010b\3\2")
- buf.write("\2\2\u08b6\u08c3\7K\2\2\u08b7\u08b8\7@\2\2\u08b8\u08b9")
- buf.write("\7\b\2\2\u08b9\u08be\5\u009eP\2\u08ba\u08bb\7(\2\2\u08bb")
- buf.write("\u08bd\5\u009eP\2\u08bc\u08ba\3\2\2\2\u08bd\u08c0\3\2")
- buf.write("\2\2\u08be\u08bc\3\2\2\2\u08be\u08bf\3\2\2\2\u08bf\u08c1")
- buf.write("\3\2\2\2\u08c0\u08be\3\2\2\2\u08c1\u08c2\7!\2\2\u08c2")
- buf.write("\u08c4\3\2\2\2\u08c3\u08b7\3\2\2\2\u08c3\u08c4\3\2\2\2")
- buf.write("\u08c4\u08c5\3\2\2\2\u08c5\u08c6\5\u0124\u0093\2\u08c6")
- buf.write("\u08ca\7 \2\2\u08c7\u08c9\5\u0100\u0081\2\u08c8\u08c7")
- buf.write("\3\2\2\2\u08c9\u08cc\3\2\2\2\u08ca\u08c8\3\2\2\2\u08ca")
- buf.write("\u08cb\3\2\2\2\u08cb\u08cd\3\2\2\2\u08cc\u08ca\3\2\2\2")
- buf.write("\u08cd\u08ce\7s\2\2\u08ce\u08cf\7 \2\2\u08cf\u010d\3\2")
- buf.write("\2\2\u08d0\u08d1\7p\2\2\u08d1\u08d2\7\62\2\2\u08d2\u08d3")
- buf.write("\7\b\2\2\u08d3\u08d4\7\u00ec\2\2\u08d4\u08d5\7\30\2\2")
- buf.write("\u08d5\u08d6\7\u00fa\2\2\u08d6\u08d7\7\31\2\2\u08d7\u08e4")
- buf.write("\7!\2\2\u08d8\u08d9\7@\2\2\u08d9\u08da\7\b\2\2\u08da\u08df")
- buf.write("\5\u009eP\2\u08db\u08dc\7(\2\2\u08dc\u08de\5\u009eP\2")
- buf.write("\u08dd\u08db\3\2\2\2\u08de\u08e1\3\2\2\2\u08df\u08dd\3")
- buf.write("\2\2\2\u08df\u08e0\3\2\2\2\u08e0\u08e2\3\2\2\2\u08e1\u08df")
- buf.write("\3\2\2\2\u08e2\u08e3\7!\2\2\u08e3\u08e5\3\2\2\2\u08e4")
- buf.write("\u08d8\3\2\2\2\u08e4\u08e5\3\2\2\2\u08e5\u08e6\3\2\2\2")
- buf.write("\u08e6\u08e7\5\u0124\u0093\2\u08e7\u08e8\7s\2\2\u08e8")
- buf.write("\u08e9\7 \2\2\u08e9\u010f\3\2\2\2\u08ea\u08ee\5\u0112")
- buf.write("\u008a\2\u08eb\u08ee\5\u0114\u008b\2\u08ec\u08ee\5\u0116")
- buf.write("\u008c\2\u08ed\u08ea\3\2\2\2\u08ed\u08eb\3\2\2\2\u08ed")
- buf.write("\u08ec\3\2\2\2\u08ee\u0111\3\2\2\2\u08ef\u08f0\7m\2\2")
- buf.write("\u08f0\u08f1\7\u0096\2\2\u08f1\u08f2\7\b\2\2\u08f2\u08f3")
- buf.write("\7\u00fa\2\2\u08f3\u08f4\7!\2\2\u08f4\u08f5\7t\2\2\u08f5")
- buf.write("\u08f6\7\b\2\2\u08f6\u08f7\7\u00fa\2\2\u08f7\u08f8\7 ")
- buf.write("\2\2\u08f8\u0113\3\2\2\2\u08f9\u08fa\7N\2\2\u08fa\u08fb")
- buf.write("\7=\2\2\u08fb\u08fc\7\b\2\2\u08fc\u08fd\7\u00ec\2\2\u08fd")
- buf.write("\u08fe\7\30\2\2\u08fe\u08ff\7\u00fa\2\2\u08ff\u0900\7")
- buf.write("\31\2\2\u0900\u0901\7!\2\2\u0901\u0902\7>\2\2\u0902\u0903")
- buf.write("\7\b\2\2\u0903\u0904\7\u00ec\2\2\u0904\u0905\7\30\2\2")
- buf.write("\u0905\u0906\7\u00fa\2\2\u0906\u0907\7\31\2\2\u0907\u090e")
- buf.write("\7!\2\2\u0908\u0909\7>\2\2\u0909\u090a\7\b\2\2\u090a\u090b")
- buf.write("\7\u00ec\2\2\u090b\u090c\7\30\2\2\u090c\u090d\7\u00fa")
- buf.write("\2\2\u090d\u090f\7\31\2\2\u090e\u0908\3\2\2\2\u090e\u090f")
- buf.write("\3\2\2\2\u090f\u0910\3\2\2\2\u0910\u0911\7 \2\2\u0911")
- buf.write("\u0115\3\2\2\2\u0912\u0913\t\b\2\2\u0913\u0914\7\u0087")
- buf.write("\2\2\u0914\u0915\7!\2\2\u0915\u0916\7/\2\2\u0916\u0917")
- buf.write("\7\b\2\2\u0917\u0918\7\u00fa\2\2\u0918\u0919\7!\2\2\u0919")
- buf.write("\u091a\7\62\2\2\u091a\u091b\7\b\2\2\u091b\u091c\7\u00ec")
- buf.write("\2\2\u091c\u091d\7\30\2\2\u091d\u091e\7\u00fa\2\2\u091e")
- buf.write("\u091f\7\31\2\2\u091f\u0920\7!\2\2\u0920\u0921\7=\2\2")
- buf.write("\u0921\u0922\7\b\2\2\u0922\u0923\7\u00ec\2\2\u0923\u0924")
- buf.write("\7\30\2\2\u0924\u0925\7\u00fa\2\2\u0925\u0931\7\31\2\2")
- buf.write("\u0926\u0927\7!\2\2\u0927\u0928\7@\2\2\u0928\u0929\7\b")
- buf.write("\2\2\u0929\u092e\5\u009eP\2\u092a\u092b\7(\2\2\u092b\u092d")
- buf.write("\5\u009eP\2\u092c\u092a\3\2\2\2\u092d\u0930\3\2\2\2\u092e")
- buf.write("\u092c\3\2\2\2\u092e\u092f\3\2\2\2\u092f\u0932\3\2\2\2")
- buf.write("\u0930\u092e\3\2\2\2\u0931\u0926\3\2\2\2\u0931\u0932\3")
- buf.write("\2\2\2\u0932\u0937\3\2\2\2\u0933\u0934\7!\2\2\u0934\u0935")
- buf.write("\7t\2\2\u0935\u0936\7\b\2\2\u0936\u0938\7\u00fa\2\2\u0937")
- buf.write("\u0933\3\2\2\2\u0937\u0938\3\2\2\2\u0938\u0939\3\2\2\2")
- buf.write("\u0939\u093a\7 \2\2\u093a\u0117\3\2\2\2\u093b\u093c\7")
- buf.write("L\2\2\u093c\u093d\7\u00fa\2\2\u093d\u093e\7 \2\2\u093e")
- buf.write("\u0119\3\2\2\2\u093f\u0941\7\u0088\2\2\u0940\u0942\7!")
- buf.write("\2\2\u0941\u0940\3\2\2\2\u0941\u0942\3\2\2\2\u0942\u0943")
- buf.write("\3\2\2\2\u0943\u0944\7.\2\2\u0944\u0945\7\b\2\2\u0945")
- buf.write("\u0946\7\u00ec\2\2\u0946\u0947\7\30\2\2\u0947\u0948\7")
- buf.write("\u00fa\2\2\u0948\u0949\7\31\2\2\u0949\u0954\7!\2\2\u094a")
- buf.write("\u094b\7\u008d\2\2\u094b\u094c\7\u00fa\2\2\u094c\u094d")
- buf.write("\7!\2\2\u094d\u094e\7\u0089\2\2\u094e\u094f\t\t\2\2\u094f")
- buf.write("\u0955\7 \2\2\u0950\u0951\7M\2\2\u0951\u0952\7\b\2\2\u0952")
- buf.write("\u0953\7\u00fa\2\2\u0953\u0955\7 \2\2\u0954\u094a\3\2")
- buf.write("\2\2\u0954\u0950\3\2\2\2\u0955\u011b\3\2\2\2\u0956\u0957")
- buf.write("\7\u00a7\2\2\u0957\u0958\7[\2\2\u0958\u0959\7\b\2\2\u0959")
- buf.write("\u09a1\5L\'\2\u095a\u095b\7!\2\2\u095b\u095c\7\u00a9\2")
- buf.write("\2\u095c\u0999\7\b\2\2\u095d\u0961\7S\2\2\u095e\u095f")
- buf.write("\7\32\2\2\u095f\u0960\7\u00fa\2\2\u0960\u0962\7\33\2\2")
- buf.write("\u0961\u095e\3\2\2\2\u0961\u0962\3\2\2\2\u0962\u099a\3")
- buf.write("\2\2\2\u0963\u0967\7T\2\2\u0964\u0965\7\32\2\2\u0965\u0966")
- buf.write("\7\u00fa\2\2\u0966\u0968\7\33\2\2\u0967\u0964\3\2\2\2")
- buf.write("\u0967\u0968\3\2\2\2\u0968\u099a\3\2\2\2\u0969\u096d\7")
- buf.write("U\2\2\u096a\u096b\7\32\2\2\u096b\u096c\7\u00fa\2\2\u096c")
- buf.write("\u096e\7\33\2\2\u096d\u096a\3\2\2\2\u096d\u096e\3\2\2")
- buf.write("\2\u096e\u099a\3\2\2\2\u096f\u0973\7V\2\2\u0970\u0971")
- buf.write("\7\32\2\2\u0971\u0972\7\u00fa\2\2\u0972\u0974\7\33\2\2")
- buf.write("\u0973\u0970\3\2\2\2\u0973\u0974\3\2\2\2\u0974\u099a\3")
- buf.write("\2\2\2\u0975\u0979\7R\2\2\u0976\u0977\7\32\2\2\u0977\u0978")
- buf.write("\7\u00fa\2\2\u0978\u097a\7\33\2\2\u0979\u0976\3\2\2\2")
- buf.write("\u0979\u097a\3\2\2\2\u097a\u099a\3\2\2\2\u097b\u097f\7")
- buf.write("W\2\2\u097c\u097d\7\32\2\2\u097d\u097e\7\u00fa\2\2\u097e")
- buf.write("\u0980\7\33\2\2\u097f\u097c\3\2\2\2\u097f\u0980\3\2\2")
- buf.write("\2\u0980\u099a\3\2\2\2\u0981\u0985\7X\2\2\u0982\u0983")
- buf.write("\7\32\2\2\u0983\u0984\7\u00fa\2\2\u0984\u0986\7\33\2\2")
- buf.write("\u0985\u0982\3\2\2\2\u0985\u0986\3\2\2\2\u0986\u099a\3")
- buf.write("\2\2\2\u0987\u098b\7Y\2\2\u0988\u0989\7\32\2\2\u0989\u098a")
- buf.write("\7\u00fa\2\2\u098a\u098c\7\33\2\2\u098b\u0988\3\2\2\2")
- buf.write("\u098b\u098c\3\2\2\2\u098c\u099a\3\2\2\2\u098d\u0991\7")
- buf.write("Z\2\2\u098e\u098f\7\32\2\2\u098f\u0990\7\u00fa\2\2\u0990")
- buf.write("\u0992\7\33\2\2\u0991\u098e\3\2\2\2\u0991\u0992\3\2\2")
- buf.write("\2\u0992\u099a\3\2\2\2\u0993\u0997\7\u00fb\2\2\u0994\u0995")
- buf.write("\7\32\2\2\u0995\u0996\7\u00fa\2\2\u0996\u0998\7\33\2\2")
- buf.write("\u0997\u0994\3\2\2\2\u0997\u0998\3\2\2\2\u0998\u099a\3")
- buf.write("\2\2\2\u0999\u095d\3\2\2\2\u0999\u0963\3\2\2\2\u0999\u0969")
- buf.write("\3\2\2\2\u0999\u096f\3\2\2\2\u0999\u0975\3\2\2\2\u0999")
- buf.write("\u097b\3\2\2\2\u0999\u0981\3\2\2\2\u0999\u0987\3\2\2\2")
- buf.write("\u0999\u098d\3\2\2\2\u0999\u0993\3\2\2\2\u099a\u099e\3")
- buf.write("\2\2\2\u099b\u099d\5\u011e\u0090\2\u099c\u099b\3\2\2\2")
- buf.write("\u099d\u09a0\3\2\2\2\u099e\u099c\3\2\2\2\u099e\u099f\3")
- buf.write("\2\2\2\u099f\u09a2\3\2\2\2\u09a0\u099e\3\2\2\2\u09a1\u095a")
- buf.write("\3\2\2\2\u09a1\u09a2\3\2\2\2\u09a2\u09ab\3\2\2\2\u09a3")
- buf.write("\u09a7\7!\2\2\u09a4\u09a6\5\u011c\u008f\2\u09a5\u09a4")
- buf.write("\3\2\2\2\u09a6\u09a9\3\2\2\2\u09a7\u09a5\3\2\2\2\u09a7")
- buf.write("\u09a8\3\2\2\2\u09a8\u09aa\3\2\2\2\u09a9\u09a7\3\2\2\2")
- buf.write("\u09aa\u09ac\7\u00a8\2\2\u09ab\u09a3\3\2\2\2\u09ab\u09ac")
- buf.write("\3\2\2\2\u09ac\u09ad\3\2\2\2\u09ad\u09ae\7 \2\2\u09ae")
- buf.write("\u011d\3\2\2\2\u09af\u09b0\7!\2\2\u09b0\u09b4\7\u00aa")
- buf.write("\2\2\u09b1\u09b2\7\32\2\2\u09b2\u09b3\7\u00fa\2\2\u09b3")
- buf.write("\u09b5\7\33\2\2\u09b4\u09b1\3\2\2\2\u09b4\u09b5\3\2\2")
- buf.write("\2\u09b5\u09ba\3\2\2\2\u09b6\u09b7\7\34\2\2\u09b7\u09b9")
- buf.write("\5\u015c\u00af\2\u09b8\u09b6\3\2\2\2\u09b9\u09bc\3\2\2")
- buf.write("\2\u09ba\u09b8\3\2\2\2\u09ba\u09bb\3\2\2\2\u09bb\u09bd")
- buf.write("\3\2\2\2\u09bc\u09ba\3\2\2\2\u09bd\u09be\7\b\2\2\u09be")
- buf.write("\u09bf\7\u00fa\2\2\u09bf\u011f\3\2\2\2\u09c0\u09c1\5\u0122")
- buf.write("\u0092\2\u09c1\u09c2\7 \2\2\u09c2\u0121\3\2\2\2\u09c3")
- buf.write("\u09c4\7\u00ab\2\2\u09c4\u0123\3\2\2\2\u09c5\u09ca\5\u0128")
- buf.write("\u0095\2\u09c6\u09c7\7\u00dc\2\2\u09c7\u09c9\5\u0128\u0095")
- buf.write("\2\u09c8\u09c6\3\2\2\2\u09c9\u09cc\3\2\2\2\u09ca\u09c8")
- buf.write("\3\2\2\2\u09ca\u09cb\3\2\2\2\u09cb\u0125\3\2\2\2\u09cc")
- buf.write("\u09ca\3\2\2\2\u09cd\u09d2\5\u0128\u0095\2\u09ce\u09cf")
- buf.write("\7\u00dc\2\2\u09cf\u09d1\5\u0128\u0095\2\u09d0\u09ce\3")
- buf.write("\2\2\2\u09d1\u09d4\3\2\2\2\u09d2\u09d0\3\2\2\2\u09d2\u09d3")
- buf.write("\3\2\2\2\u09d3\u0127\3\2\2\2\u09d4\u09d2\3\2\2\2\u09d5")
- buf.write("\u09da\5\u012a\u0096\2\u09d6\u09d7\7\u00db\2\2\u09d7\u09d9")
- buf.write("\5\u012a\u0096\2\u09d8\u09d6\3\2\2\2\u09d9\u09dc\3\2\2")
- buf.write("\2\u09da\u09d8\3\2\2\2\u09da\u09db\3\2\2\2\u09db\u0129")
- buf.write("\3\2\2\2\u09dc\u09da\3\2\2\2\u09dd\u09e2\5\u012c\u0097")
- buf.write("\2\u09de\u09df\7(\2\2\u09df\u09e1\5\u012c\u0097\2\u09e0")
- buf.write("\u09de\3\2\2\2\u09e1\u09e4\3\2\2\2\u09e2\u09e0\3\2\2\2")
- buf.write("\u09e2\u09e3\3\2\2\2\u09e3\u012b\3\2\2\2\u09e4\u09e2\3")
- buf.write("\2\2\2\u09e5\u09ea\5\u012e\u0098\2\u09e6\u09e7\7)\2\2")
- buf.write("\u09e7\u09e9\5\u012e\u0098\2\u09e8\u09e6\3\2\2\2\u09e9")
- buf.write("\u09ec\3\2\2\2\u09ea\u09e8\3\2\2\2\u09ea\u09eb\3\2\2\2")
- buf.write("\u09eb\u012d\3\2\2\2\u09ec\u09ea\3\2\2\2\u09ed\u09f1\5")
- buf.write("\u0132\u009a\2\u09ee\u09f0\5\u0130\u0099\2\u09ef\u09ee")
- buf.write("\3\2\2\2\u09f0\u09f3\3\2\2\2\u09f1\u09ef\3\2\2\2\u09f1")
- buf.write("\u09f2\3\2\2\2\u09f2\u012f\3\2\2\2\u09f3\u09f1\3\2\2\2")
- buf.write("\u09f4\u09f5\7\"\2\2\u09f5\u09f9\5\u0132\u009a\2\u09f6")
- buf.write("\u09f7\7#\2\2\u09f7\u09f9\5\u0132\u009a\2\u09f8\u09f4")
- buf.write("\3\2\2\2\u09f8\u09f6\3\2\2\2\u09f9\u0131\3\2\2\2\u09fa")
- buf.write("\u09fe\5\u0136\u009c\2\u09fb\u09fd\5\u0134\u009b\2\u09fc")
- buf.write("\u09fb\3\2\2\2\u09fd\u0a00\3\2\2\2\u09fe\u09fc\3\2\2\2")
- buf.write("\u09fe\u09ff\3\2\2\2\u09ff\u0133\3\2\2\2\u0a00\u09fe\3")
- buf.write("\2\2\2\u0a01\u0a02\7%\2\2\u0a02\u0a0a\5\u0136\u009c\2")
- buf.write("\u0a03\u0a04\7$\2\2\u0a04\u0a0a\5\u0136\u009c\2\u0a05")
- buf.write("\u0a06\7\'\2\2\u0a06\u0a0a\5\u0136\u009c\2\u0a07\u0a08")
- buf.write("\7&\2\2\u0a08\u0a0a\5\u0136\u009c\2\u0a09\u0a01\3\2\2")
- buf.write("\2\u0a09\u0a03\3\2\2\2\u0a09\u0a05\3\2\2\2\u0a09\u0a07")
- buf.write("\3\2\2\2\u0a0a\u0135\3\2\2\2\u0a0b\u0a0f\5\u013a\u009e")
- buf.write("\2\u0a0c\u0a0e\5\u0138\u009d\2\u0a0d\u0a0c\3\2\2\2\u0a0e")
- buf.write("\u0a11\3\2\2\2\u0a0f\u0a0d\3\2\2\2\u0a0f\u0a10\3\2\2\2")
- buf.write("\u0a10\u0137\3\2\2\2\u0a11\u0a0f\3\2\2\2\u0a12\u0a13\7")
- buf.write("\f\2\2\u0a13\u0a17\5\u013a\u009e\2\u0a14\u0a15\7\r\2\2")
- buf.write("\u0a15\u0a17\5\u013a\u009e\2\u0a16\u0a12\3\2\2\2\u0a16")
- buf.write("\u0a14\3\2\2\2\u0a17\u0139\3\2\2\2\u0a18\u0a1c\5\u013e")
- buf.write("\u00a0\2\u0a19\u0a1b\5\u013c\u009f\2\u0a1a\u0a19\3\2\2")
- buf.write("\2\u0a1b\u0a1e\3\2\2\2\u0a1c\u0a1a\3\2\2\2\u0a1c\u0a1d")
- buf.write("\3\2\2\2\u0a1d\u013b\3\2\2\2\u0a1e\u0a1c\3\2\2\2\u0a1f")
- buf.write("\u0a20\7\16\2\2\u0a20\u0a24\5\u013e\u00a0\2\u0a21\u0a22")
- buf.write("\7\35\2\2\u0a22\u0a24\5\u013e\u00a0\2\u0a23\u0a1f\3\2")
- buf.write("\2\2\u0a23\u0a21\3\2\2\2\u0a24\u013d\3\2\2\2\u0a25\u0a29")
- buf.write("\5\u0142\u00a2\2\u0a26\u0a28\5\u0140\u00a1\2\u0a27\u0a26")
- buf.write("\3\2\2\2\u0a28\u0a2b\3\2\2\2\u0a29\u0a27\3\2\2\2\u0a29")
- buf.write("\u0a2a\3\2\2\2\u0a2a\u013f\3\2\2\2\u0a2b\u0a29\3\2\2\2")
- buf.write("\u0a2c\u0a2d\7\17\2\2\u0a2d\u0a33\5\u0142\u00a2\2\u0a2e")
- buf.write("\u0a2f\7\37\2\2\u0a2f\u0a33\5\u0142\u00a2\2\u0a30\u0a31")
- buf.write("\7\20\2\2\u0a31\u0a33\5\u0142\u00a2\2\u0a32\u0a2c\3\2")
- buf.write("\2\2\u0a32\u0a2e\3\2\2\2\u0a32\u0a30\3\2\2\2\u0a33\u0141")
- buf.write("\3\2\2\2\u0a34\u0a35\7\30\2\2\u0a35\u0a36\t\n\2\2\u0a36")
- buf.write("\u0a38\7\31\2\2\u0a37\u0a34\3\2\2\2\u0a38\u0a3b\3\2\2")
- buf.write("\2\u0a39\u0a37\3\2\2\2\u0a39\u0a3a\3\2\2\2\u0a3a\u0a3c")
- buf.write("\3\2\2\2\u0a3b\u0a39\3\2\2\2\u0a3c\u0a3d\5\u0144\u00a3")
- buf.write("\2\u0a3d\u0143\3\2\2\2\u0a3e\u0a4b\5\u0146\u00a4\2\u0a3f")
- buf.write("\u0a4b\5\u0148\u00a5\2\u0a40\u0a4b\5\u014a\u00a6\2\u0a41")
- buf.write("\u0a4b\5\u014c\u00a7\2\u0a42\u0a4b\5\u014e\u00a8\2\u0a43")
- buf.write("\u0a4b\5\u016c\u00b7\2\u0a44\u0a4b\5\u016e\u00b8\2\u0a45")
- buf.write("\u0a4b\5\u0184\u00c3\2\u0a46\u0a4b\5\u0194\u00cb\2\u0a47")
- buf.write("\u0a48\7\u00dd\2\2\u0a48\u0a4b\5\u0144\u00a3\2\u0a49\u0a4b")
- buf.write("\5\u014a\u00a6\2\u0a4a\u0a3e\3\2\2\2\u0a4a\u0a3f\3\2\2")
- buf.write("\2\u0a4a\u0a40\3\2\2\2\u0a4a\u0a41\3\2\2\2\u0a4a\u0a42")
- buf.write("\3\2\2\2\u0a4a\u0a43\3\2\2\2\u0a4a\u0a44\3\2\2\2\u0a4a")
- buf.write("\u0a45\3\2\2\2\u0a4a\u0a46\3\2\2\2\u0a4a\u0a47\3\2\2\2")
- buf.write("\u0a4a\u0a49\3\2\2\2\u0a4b\u0145\3\2\2\2\u0a4c\u0a4d\7")
- buf.write("\u00e7\2\2\u0a4d\u0a4e\7\30\2\2\u0a4e\u0a4f\5\u0126\u0094")
- buf.write("\2\u0a4f\u0a50\7!\2\2\u0a50\u0a51\5\u0126\u0094\2\u0a51")
- buf.write("\u0a52\7\31\2\2\u0a52\u0147\3\2\2\2\u0a53\u0a54\7\u00e5")
- buf.write("\2\2\u0a54\u0a55\7\30\2\2\u0a55\u0a56\5\u0126\u0094\2")
- buf.write("\u0a56\u0a57\7!\2\2\u0a57\u0a58\5\u0126\u0094\2\u0a58")
- buf.write("\u0a59\7\31\2\2\u0a59\u0149\3\2\2\2\u0a5a\u0a5b\7\u00e6")
- buf.write("\2\2\u0a5b\u0a5c\7\30\2\2\u0a5c\u0a5d\5\u0126\u0094\2")
- buf.write("\u0a5d\u0a5e\7!\2\2\u0a5e\u0a5f\5\u0126\u0094\2\u0a5f")
- buf.write("\u0a60\7!\2\2\u0a60\u0a61\5L\'\2\u0a61\u0a62\7\31\2\2")
- buf.write("\u0a62\u014b\3\2\2\2\u0a63\u0a64\7\30\2\2\u0a64\u0a65")
- buf.write("\5\u0126\u0094\2\u0a65\u0a66\7\31\2\2\u0a66\u014d\3\2")
- buf.write("\2\2\u0a67\u0a73\5\u0150\u00a9\2\u0a68\u0a73\5\u0152\u00aa")
- buf.write("\2\u0a69\u0a73\5\u0154\u00ab\2\u0a6a\u0a73\5\u0156\u00ac")
- buf.write("\2\u0a6b\u0a73\5\u0158\u00ad\2\u0a6c\u0a73\5\u015e\u00b0")
- buf.write("\2\u0a6d\u0a73\5\u0160\u00b1\2\u0a6e\u0a73\5\u0162\u00b2")
- buf.write("\2\u0a6f\u0a73\5\u0164\u00b3\2\u0a70\u0a73\5\u0166\u00b4")
- buf.write("\2\u0a71\u0a73\5\u016a\u00b6\2\u0a72\u0a67\3\2\2\2\u0a72")
- buf.write("\u0a68\3\2\2\2\u0a72\u0a69\3\2\2\2\u0a72\u0a6a\3\2\2\2")
- buf.write("\u0a72\u0a6b\3\2\2\2\u0a72\u0a6c\3\2\2\2\u0a72\u0a6d\3")
- buf.write("\2\2\2\u0a72\u0a6e\3\2\2\2\u0a72\u0a6f\3\2\2\2\u0a72\u0a70")
- buf.write("\3\2\2\2\u0a72\u0a71\3\2\2\2\u0a73\u014f\3\2\2\2\u0a74")
- buf.write("\u0a75\7\u00c7\2\2\u0a75\u0151\3\2\2\2\u0a76\u0a77\7\u00c8")
- buf.write("\2\2\u0a77\u0a78\7\u00c9\2\2\u0a78\u0a79\7\30\2\2\u0a79")
- buf.write("\u0a7a\7\u00fa\2\2\u0a7a\u0a85\7\31\2\2\u0a7b\u0a7c\7")
- buf.write("\"\2\2\u0a7c\u0a86\7\u00fa\2\2\u0a7d\u0a7e\7$\2\2\u0a7e")
- buf.write("\u0a86\7\u00fa\2\2\u0a7f\u0a80\7%\2\2\u0a80\u0a86\7\u00fa")
- buf.write("\2\2\u0a81\u0a82\7&\2\2\u0a82\u0a86\7\u00fa\2\2\u0a83")
- buf.write("\u0a84\7\'\2\2\u0a84\u0a86\7\u00fa\2\2\u0a85\u0a7b\3\2")
- buf.write("\2\2\u0a85\u0a7d\3\2\2\2\u0a85\u0a7f\3\2\2\2\u0a85\u0a81")
- buf.write("\3\2\2\2\u0a85\u0a83\3\2\2\2\u0a86\u0153\3\2\2\2\u0a87")
- buf.write("\u0a88\7\u00ca\2\2\u0a88\u0a93\5\u015a\u00ae\2\u0a89\u0a8a")
- buf.write("\7\"\2\2\u0a8a\u0a94\7\u00fa\2\2\u0a8b\u0a8c\7$\2\2\u0a8c")
- buf.write("\u0a94\7\u00fa\2\2\u0a8d\u0a8e\7%\2\2\u0a8e\u0a94\7\u00fa")
- buf.write("\2\2\u0a8f\u0a90\7&\2\2\u0a90\u0a94\7\u00fa\2\2\u0a91")
- buf.write("\u0a92\7\'\2\2\u0a92\u0a94\7\u00fa\2\2\u0a93\u0a89\3\2")
- buf.write("\2\2\u0a93\u0a8b\3\2\2\2\u0a93\u0a8d\3\2\2\2\u0a93\u0a8f")
- buf.write("\3\2\2\2\u0a93\u0a91\3\2\2\2\u0a94\u0155\3\2\2\2\u0a95")
- buf.write("\u0a96\7\u00cb\2\2\u0a96\u0aa1\5\u015a\u00ae\2\u0a97\u0a98")
- buf.write("\7\"\2\2\u0a98\u0aa2\5\u015a\u00ae\2\u0a99\u0a9a\7$\2")
- buf.write("\2\u0a9a\u0aa2\5\u015a\u00ae\2\u0a9b\u0a9c\7%\2\2\u0a9c")
- buf.write("\u0aa2\5\u015a\u00ae\2\u0a9d\u0a9e\7&\2\2\u0a9e\u0aa2")
- buf.write("\5\u015a\u00ae\2\u0a9f\u0aa0\7\'\2\2\u0aa0\u0aa2\5\u015a")
- buf.write("\u00ae\2\u0aa1\u0a97\3\2\2\2\u0aa1\u0a99\3\2\2\2\u0aa1")
- buf.write("\u0a9b\3\2\2\2\u0aa1\u0a9d\3\2\2\2\u0aa1\u0a9f\3\2\2\2")
- buf.write("\u0aa2\u0157\3\2\2\2\u0aa3\u0aa4\7\u00cc\2\2\u0aa4\u0aa5")
- buf.write("\5\u015a\u00ae\2\u0aa5\u0aa7\7\"\2\2\u0aa6\u0aa8\7\u00fa")
- buf.write("\2\2\u0aa7\u0aa6\3\2\2\2\u0aa8\u0aa9\3\2\2\2\u0aa9\u0aa7")
- buf.write("\3\2\2\2\u0aa9\u0aaa\3\2\2\2\u0aaa\u0159\3\2\2\2\u0aab")
- buf.write("\u0aac\7\u00fb\2\2\u0aac\u0aad\7\32\2\2\u0aad\u0aae\7")
- buf.write("\u00fa\2\2\u0aae\u0ab8\7\33\2\2\u0aaf\u0ab4\7\u00fb\2")
- buf.write("\2\u0ab0\u0ab1\7\34\2\2\u0ab1\u0ab3\5\u015c\u00af\2\u0ab2")
- buf.write("\u0ab0\3\2\2\2\u0ab3\u0ab6\3\2\2\2\u0ab4\u0ab2\3\2\2\2")
- buf.write("\u0ab4\u0ab5\3\2\2\2\u0ab5\u0ab8\3\2\2\2\u0ab6\u0ab4\3")
- buf.write("\2\2\2\u0ab7\u0aab\3\2\2\2\u0ab7\u0aaf\3\2\2\2\u0ab8\u015b")
- buf.write("\3\2\2\2\u0ab9\u0abd\7\u00fb\2\2\u0aba\u0abb\7\32\2\2")
- buf.write("\u0abb\u0abc\7\u00fa\2\2\u0abc\u0abe\7\33\2\2\u0abd\u0aba")
- buf.write("\3\2\2\2\u0abd\u0abe\3\2\2\2\u0abe\u015d\3\2\2\2\u0abf")
- buf.write("\u0ac0\7\u00cd\2\2\u0ac0\u0ac1\7\30\2\2\u0ac1\u0ac2\t")
- buf.write("\13\2\2\u0ac2\u0ac3\7\31\2\2\u0ac3\u015f\3\2\2\2\u0ac4")
- buf.write("\u0ac5\7\u00ce\2\2\u0ac5\u0ac6\7\30\2\2\u0ac6\u0ac7\7")
- buf.write("\u00fb\2\2\u0ac7\u0ac8\7\31\2\2\u0ac8\u0161\3\2\2\2\u0ac9")
- buf.write("\u0aca\7\u00cf\2\2\u0aca\u0ad0\7\30\2\2\u0acb\u0acc\7")
- buf.write("\u00ec\2\2\u0acc\u0acd\7\30\2\2\u0acd\u0ace\7\u00fa\2")
- buf.write("\2\u0ace\u0ad1\7\31\2\2\u0acf\u0ad1\7\u00fa\2\2\u0ad0")
- buf.write("\u0acb\3\2\2\2\u0ad0\u0acf\3\2\2\2\u0ad1\u0ad2\3\2\2\2")
- buf.write("\u0ad2\u0ad3\7\31\2\2\u0ad3\u0163\3\2\2\2\u0ad4\u0ad5")
- buf.write("\7\u00d0\2\2\u0ad5\u0165\3\2\2\2\u0ad6\u0ad7\7\u00d1\2")
- buf.write("\2\u0ad7\u0ad8\7\30\2\2\u0ad8\u0ad9\5L\'\2\u0ad9\u0ada")
- buf.write("\7\31\2\2\u0ada\u0167\3\2\2\2\u0adb\u0adc\t\f\2\2\u0adc")
- buf.write("\u0169\3\2\2\2\u0add\u0ade\7\u00d2\2\2\u0ade\u0adf\7\30")
- buf.write("\2\2\u0adf\u0ae4\5X-\2\u0ae0\u0ae1\7(\2\2\u0ae1\u0ae2")
- buf.write("\7@\2\2\u0ae2\u0ae3\7\b\2\2\u0ae3\u0ae5\5\u0168\u00b5")
- buf.write("\2\u0ae4\u0ae0\3\2\2\2\u0ae4\u0ae5\3\2\2\2\u0ae5\u0ae6")
- buf.write("\3\2\2\2\u0ae6\u0ae7\7\31\2\2\u0ae7\u016b\3\2\2\2\u0ae8")
- buf.write("\u0ae9\t\r\2\2\u0ae9\u016d\3\2\2\2\u0aea\u0af5\5\u0170")
- buf.write("\u00b9\2\u0aeb\u0af5\5\u0172\u00ba\2\u0aec\u0af5\5\u0174")
- buf.write("\u00bb\2\u0aed\u0af5\5\u0176\u00bc\2\u0aee\u0af5\5\u0178")
- buf.write("\u00bd\2\u0aef\u0af5\5\u017a\u00be\2\u0af0\u0af5\5\u017c")
- buf.write("\u00bf\2\u0af1\u0af5\5\u017e\u00c0\2\u0af2\u0af5\5\u0180")
- buf.write("\u00c1\2\u0af3\u0af5\5\u0182\u00c2\2\u0af4\u0aea\3\2\2")
- buf.write("\2\u0af4\u0aeb\3\2\2\2\u0af4\u0aec\3\2\2\2\u0af4\u0aed")
- buf.write("\3\2\2\2\u0af4\u0aee\3\2\2\2\u0af4\u0aef\3\2\2\2\u0af4")
- buf.write("\u0af0\3\2\2\2\u0af4\u0af1\3\2\2\2\u0af4\u0af2\3\2\2\2")
- buf.write("\u0af4\u0af3\3\2\2\2\u0af5\u016f\3\2\2\2\u0af6\u0af7\7")
- buf.write("\u00da\2\2\u0af7\u0af8\7\30\2\2\u0af8\u0af9\5\u0126\u0094")
- buf.write("\2\u0af9\u0afa\7\31\2\2\u0afa\u0171\3\2\2\2\u0afb\u0afc")
- buf.write("\7\u00df\2\2\u0afc\u0afd\7\30\2\2\u0afd\u0afe\5\u0126")
- buf.write("\u0094\2\u0afe\u0aff\7\31\2\2\u0aff\u0173\3\2\2\2\u0b00")
- buf.write("\u0b01\7\u00e8\2\2\u0b01\u0b09\7\30\2\2\u0b02\u0b03\7")
- buf.write("*\2\2\u0b03\u0b04\7\b\2\2\u0b04\u0b05\7\u00ec\2\2\u0b05")
- buf.write("\u0b06\7\30\2\2\u0b06\u0b07\7\u00fa\2\2\u0b07\u0b08\7")
- buf.write("\31\2\2\u0b08\u0b0a\7!\2\2\u0b09\u0b02\3\2\2\2\u0b09\u0b0a")
- buf.write("\3\2\2\2\u0b0a\u0b10\3\2\2\2\u0b0b\u0b0c\7[\2\2\u0b0c")
- buf.write("\u0b0d\7\b\2\2\u0b0d\u0b0e\5L\'\2\u0b0e\u0b0f\7!\2\2\u0b0f")
- buf.write("\u0b11\3\2\2\2\u0b10\u0b0b\3\2\2\2\u0b10\u0b11\3\2\2\2")
- buf.write("\u0b11\u0b12\3\2\2\2\u0b12\u0b13\5\u0126\u0094\2\u0b13")
- buf.write("\u0b14\7\31\2\2\u0b14\u0175\3\2\2\2\u0b15\u0b16\7\u00e9")
- buf.write("\2\2\u0b16\u0b17\7\30\2\2\u0b17\u0b18\5\u0126\u0094\2")
- buf.write("\u0b18\u0b19\7\31\2\2\u0b19\u0177\3\2\2\2\u0b1a\u0b1b")
- buf.write("\7\u00e0\2\2\u0b1b\u0b1c\7\30\2\2\u0b1c\u0b1d\5\u0126")
- buf.write("\u0094\2\u0b1d\u0b1e\7\31\2\2\u0b1e\u0179\3\2\2\2\u0b1f")
- buf.write("\u0b24\7\u00e1\2\2\u0b20\u0b21\7\21\2\2\u0b21\u0b22\7")
- buf.write("\b\2\2\u0b22\u0b23\7\u00fa\2\2\u0b23\u0b25\7!\2\2\u0b24")
- buf.write("\u0b20\3\2\2\2\u0b24\u0b25\3\2\2\2\u0b25\u0b26\3\2\2\2")
- buf.write("\u0b26\u0b27\7\30\2\2\u0b27\u0b28\5\u0126\u0094\2\u0b28")
- buf.write("\u0b29\7\31\2\2\u0b29\u017b\3\2\2\2\u0b2a\u0b2b\7\u00e2")
- buf.write("\2\2\u0b2b\u0b2c\7\30\2\2\u0b2c\u0b2d\5\u0126\u0094\2")
- buf.write("\u0b2d\u0b2e\7\31\2\2\u0b2e\u017d\3\2\2\2\u0b2f\u0b30")
- buf.write("\7\u00e3\2\2\u0b30\u0b31\7\30\2\2\u0b31\u0b32\5\u0126")
- buf.write("\u0094\2\u0b32\u0b33\7\31\2\2\u0b33\u017f\3\2\2\2\u0b34")
- buf.write("\u0b35\7\u00e4\2\2\u0b35\u0b36\7\30\2\2\u0b36\u0b37\5")
- buf.write("\u0126\u0094\2\u0b37\u0b38\7\31\2\2\u0b38\u0181\3\2\2")
- buf.write("\2\u0b39\u0b3a\7\u00de\2\2\u0b3a\u0b3b\7\30\2\2\u0b3b")
- buf.write("\u0b40\5X-\2\u0b3c\u0b3d\7(\2\2\u0b3d\u0b3e\7@\2\2\u0b3e")
- buf.write("\u0b3f\7\b\2\2\u0b3f\u0b41\5\u0168\u00b5\2\u0b40\u0b3c")
- buf.write("\3\2\2\2\u0b40\u0b41\3\2\2\2\u0b41\u0b42\3\2\2\2\u0b42")
- buf.write("\u0b43\7!\2\2\u0b43\u0b44\5\u0126\u0094\2\u0b44\u0b45")
- buf.write("\7\31\2\2\u0b45\u0183\3\2\2\2\u0b46\u0b4c\5\u0186\u00c4")
- buf.write("\2\u0b47\u0b4c\5\u0188\u00c5\2\u0b48\u0b4c\5\u018c\u00c7")
- buf.write("\2\u0b49\u0b4c\5\u018e\u00c8\2\u0b4a\u0b4c\5\u0190\u00c9")
- buf.write("\2\u0b4b\u0b46\3\2\2\2\u0b4b\u0b47\3\2\2\2\u0b4b\u0b48")
- buf.write("\3\2\2\2\u0b4b\u0b49\3\2\2\2\u0b4b\u0b4a\3\2\2\2\u0b4c")
- buf.write("\u0185\3\2\2\2\u0b4d\u0b4e\7\u00c2\2\2\u0b4e\u0b4f\7\30")
- buf.write("\2\2\u0b4f\u0b50\5\u0126\u0094\2\u0b50\u0b51\7\22\2\2")
- buf.write("\u0b51\u0b52\5\u0126\u0094\2\u0b52\u0b53\7\36\2\2\u0b53")
- buf.write("\u0b54\5\u0126\u0094\2\u0b54\u0b55\7\31\2\2\u0b55\u0187")
- buf.write("\3\2\2\2\u0b56\u0b57\7\u00c3\2\2\u0b57\u0b58\7\30\2\2")
- buf.write("\u0b58\u0b5d\5\u018a\u00c6\2\u0b59\u0b5a\7(\2\2\u0b5a")
- buf.write("\u0b5c\5\u018a\u00c6\2\u0b5b\u0b59\3\2\2\2\u0b5c\u0b5f")
- buf.write("\3\2\2\2\u0b5d\u0b5b\3\2\2\2\u0b5d\u0b5e\3\2\2\2\u0b5e")
- buf.write("\u0b60\3\2\2\2\u0b5f\u0b5d\3\2\2\2\u0b60\u0b61\7!\2\2")
- buf.write("\u0b61\u0b62\5\u0126\u0094\2\u0b62\u0b63\7!\2\2\u0b63")
- buf.write("\u0b64\5\u0126\u0094\2\u0b64\u0b65\7!\2\2\u0b65\u0b66")
- buf.write("\5\u0126\u0094\2\u0b66\u0b67\7\31\2\2\u0b67\u0189\3\2")
- buf.write("\2\2\u0b68\u0b69\t\16\2\2\u0b69\u018b\3\2\2\2\u0b6a\u0b6b")
- buf.write("\7\u00c4\2\2\u0b6b\u0b6c\7\30\2\2\u0b6c\u0b6d\5\u0126")
- buf.write("\u0094\2\u0b6d\u0b6e\7!\2\2\u0b6e\u0b6f\5\u0126\u0094")
- buf.write("\2\u0b6f\u0b70\7!\2\2\u0b70\u0b71\5\u0126\u0094\2\u0b71")
- buf.write("\u0b72\7\31\2\2\u0b72\u018d\3\2\2\2\u0b73\u0b74\7\u00c5")
- buf.write("\2\2\u0b74\u0b75\7\30\2\2\u0b75\u0b76\5\u0126\u0094\2")
- buf.write("\u0b76\u0b77\7!\2\2\u0b77\u0b78\5\u0126\u0094\2\u0b78")
- buf.write("\u0b79\7!\2\2\u0b79\u0b7a\5\u0126\u0094\2\u0b7a\u0b7b")
- buf.write("\7\31\2\2\u0b7b\u018f\3\2\2\2\u0b7c\u0b7d\7\u00c6\2\2")
- buf.write("\u0b7d\u0b7e\7\30\2\2\u0b7e\u0b7f\7@\2\2\u0b7f\u0b80\7")
- buf.write("\b\2\2\u0b80\u0b85\5\u0192\u00ca\2\u0b81\u0b82\7(\2\2")
- buf.write("\u0b82\u0b84\5\u0192\u00ca\2\u0b83\u0b81\3\2\2\2\u0b84")
- buf.write("\u0b87\3\2\2\2\u0b85\u0b83\3\2\2\2\u0b85\u0b86\3\2\2\2")
- buf.write("\u0b86\u0b88\3\2\2\2\u0b87\u0b85\3\2\2\2\u0b88\u0b89\7")
- buf.write("!\2\2\u0b89\u0b8a\5\u0126\u0094\2\u0b8a\u0b8b\7!\2\2\u0b8b")
- buf.write("\u0b8c\5\u0126\u0094\2\u0b8c\u0b8d\7!\2\2\u0b8d\u0b8e")
- buf.write("\5\u0126\u0094\2\u0b8e\u0b8f\7\31\2\2\u0b8f\u0191\3\2")
- buf.write("\2\2\u0b90\u0b91\t\17\2\2\u0b91\u0193\3\2\2\2\u0b92\u0b93")
- buf.write("\7\u00ea\2\2\u0b93\u0b94\7\30\2\2\u0b94\u0b95\5\u0126")
- buf.write("\u0094\2\u0b95\u0b9d\7\36\2\2\u0b96\u0b97\5\u0124\u0093")
- buf.write("\2\u0b97\u0b98\7!\2\2\u0b98\u0b99\5\u0124\u0093\2\u0b99")
- buf.write("\u0b9a\7 \2\2\u0b9a\u0b9c\3\2\2\2\u0b9b\u0b96\3\2\2\2")
- buf.write("\u0b9c\u0b9f\3\2\2\2\u0b9d\u0b9b\3\2\2\2\u0b9d\u0b9e\3")
- buf.write("\2\2\2\u0b9e\u0ba0\3\2\2\2\u0b9f\u0b9d\3\2\2\2\u0ba0\u0ba1")
- buf.write("\7\31\2\2\u0ba1\u0195\3\2\2\2\u00f0\u0199\u019b\u01a5")
- buf.write("\u01a9\u01ac\u01b4\u01b9\u01bd\u01c0\u01c6\u01cb\u01cf")
- buf.write("\u01d2\u01d8\u01ea\u01ec\u01f4\u01fd\u0206\u020f\u0218")
- buf.write("\u0221\u022a\u0233\u023c\u0245\u024b\u0253\u025b\u0263")
- buf.write("\u0281\u0288\u028f\u0298\u029c\u02a0\u02a7\u02b1\u02be")
- buf.write("\u02cd\u02e2\u02e8\u0304\u030a\u0313\u0326\u0336\u0341")
- buf.write("\u0372\u0382\u0389\u038f\u03a7\u03b2\u03b5\u03b8\u03df")
- buf.write("\u03e3\u03f0\u03f7\u0409\u041e\u0433\u0439\u044f\u045c")
- buf.write("\u0460\u0465\u046b\u046e\u0472\u0476\u047d\u0497\u04a1")
- buf.write("\u04a9\u04ad\u04b3\u04b7\u04e5\u04e9\u04f0\u04f6\u04fa")
- buf.write("\u0503\u0508\u0514\u051f\u052c\u053d\u0542\u0547\u0558")
- buf.write("\u055d\u0562\u056a\u058a\u058f\u0594\u059e\u05a8\u05b4")
- buf.write("\u05b9\u05be\u05ca\u05cf\u05d4\u05de\u05e4\u05ff\u0605")
- buf.write("\u060f\u061d\u062a\u062f\u0633\u063e\u0644\u064f\u0658")
- buf.write("\u0662\u0674\u0679\u067d\u0688\u068e\u0698\u069f\u06a7")
- buf.write("\u06ae\u06ba\u06c5\u06c8\u06d3\u06d8\u06e2\u06e8\u06fb")
- buf.write("\u0701\u070b\u0711\u071f\u072a\u072f\u0738\u073f\u074a")
- buf.write("\u0751\u075b\u07a6\u07ab\u07ae\u07bf\u07c5\u07cc\u07d9")
- buf.write("\u0824\u0829\u082c\u083d\u0843\u084a\u0853\u0864\u086a")
- buf.write("\u0872\u0880\u0885\u0892\u0897\u08a4\u08a9\u08b0\u08be")
- buf.write("\u08c3\u08ca\u08df\u08e4\u08ed\u090e\u092e\u0931\u0937")
- buf.write("\u0941\u0954\u0961\u0967\u096d\u0973\u0979\u097f\u0985")
- buf.write("\u098b\u0991\u0997\u0999\u099e\u09a1\u09a7\u09ab\u09b4")
- buf.write("\u09ba\u09ca\u09d2\u09da\u09e2\u09ea\u09f1\u09f8\u09fe")
- buf.write("\u0a09\u0a0f\u0a16\u0a1c\u0a23\u0a29\u0a32\u0a39\u0a4a")
- buf.write("\u0a72\u0a85\u0a93\u0aa1\u0aa9\u0ab4\u0ab7\u0abd\u0ad0")
- buf.write("\u0ae4\u0af4\u0b09\u0b10\u0b24\u0b40\u0b4b\u0b5d\u0b85")
- buf.write("\u0b9d")
+ buf.write("\u00f8\u00fa\2\u0c71\2\u019d\3\2\2\2\4\u01a3\3\2\2\2\6")
+ buf.write("\u01a5\3\2\2\2\b\u01af\3\2\2\2\n\u01b1\3\2\2\2\f\u01bc")
+ buf.write("\3\2\2\2\16\u01ce\3\2\2\2\20\u01ef\3\2\2\2\22\u01f2\3")
+ buf.write("\2\2\2\24\u01fb\3\2\2\2\26\u0204\3\2\2\2\30\u020d\3\2")
+ buf.write("\2\2\32\u0216\3\2\2\2\34\u021f\3\2\2\2\36\u0228\3\2\2")
+ buf.write("\2 \u0231\3\2\2\2\"\u023a\3\2\2\2$\u0243\3\2\2\2&\u024c")
+ buf.write("\3\2\2\2(\u0254\3\2\2\2*\u025c\3\2\2\2,\u0264\3\2\2\2")
+ buf.write(".\u026c\3\2\2\2\60\u0298\3\2\2\2\62\u02a5\3\2\2\2\64\u02ad")
+ buf.write("\3\2\2\2\66\u02af\3\2\2\28\u02b4\3\2\2\2:\u02c1\3\2\2")
+ buf.write("\2<\u02c3\3\2\2\2>\u02d4\3\2\2\2@\u02f6\3\2\2\2B\u0330")
+ buf.write("\3\2\2\2D\u0332\3\2\2\2F\u034b\3\2\2\2H\u0352\3\2\2\2")
+ buf.write("J\u0359\3\2\2\2L\u0369\3\2\2\2N\u0379\3\2\2\2P\u037e\3")
+ buf.write("\2\2\2R\u0385\3\2\2\2T\u0394\3\2\2\2V\u03aa\3\2\2\2X\u03b8")
+ buf.write("\3\2\2\2Z\u03e6\3\2\2\2\\\u03e8\3\2\2\2^\u03ef\3\2\2\2")
+ buf.write("`\u03f3\3\2\2\2b\u03f5\3\2\2\2d\u03fd\3\2\2\2f\u0421\3")
+ buf.write("\2\2\2h\u0423\3\2\2\2j\u0442\3\2\2\2l\u0445\3\2\2\2n\u0448")
+ buf.write("\3\2\2\2p\u0452\3\2\2\2r\u0454\3\2\2\2t\u0479\3\2\2\2")
+ buf.write("v\u047b\3\2\2\2x\u0483\3\2\2\2z\u0485\3\2\2\2|\u04b6\3")
+ buf.write("\2\2\2~\u04ba\3\2\2\2\u0080\u04bc\3\2\2\2\u0082\u0501")
+ buf.write("\3\2\2\2\u0084\u050b\3\2\2\2\u0086\u050d\3\2\2\2\u0088")
+ buf.write("\u0522\3\2\2\2\u008a\u052f\3\2\2\2\u008c\u0531\3\2\2\2")
+ buf.write("\u008e\u054c\3\2\2\2\u0090\u0567\3\2\2\2\u0092\u056f\3")
+ buf.write("\2\2\2\u0094\u0574\3\2\2\2\u0096\u057c\3\2\2\2\u0098\u0581")
+ buf.write("\3\2\2\2\u009a\u0597\3\2\2\2\u009c\u05a1\3\2\2\2\u009e")
+ buf.write("\u05ab\3\2\2\2\u00a0\u05ad\3\2\2\2\u00a2\u05c3\3\2\2\2")
+ buf.write("\u00a4\u05d9\3\2\2\2\u00a6\u05e9\3\2\2\2\u00a8\u05ed\3")
+ buf.write("\2\2\2\u00aa\u05ef\3\2\2\2\u00ac\u060d\3\2\2\2\u00ae\u0620")
+ buf.write("\3\2\2\2\u00b0\u0622\3\2\2\2\u00b2\u0626\3\2\2\2\u00b4")
+ buf.write("\u062d\3\2\2\2\u00b6\u0632\3\2\2\2\u00b8\u0636\3\2\2\2")
+ buf.write("\u00ba\u0638\3\2\2\2\u00bc\u064d\3\2\2\2\u00be\u065b\3")
+ buf.write("\2\2\2\u00c0\u065d\3\2\2\2\u00c2\u0672\3\2\2\2\u00c4\u067c")
+ buf.write("\3\2\2\2\u00c6\u0680\3\2\2\2\u00c8\u0682\3\2\2\2\u00ca")
+ buf.write("\u0698\3\2\2\2\u00cc\u06ac\3\2\2\2\u00ce\u06bd\3\2\2\2")
+ buf.write("\u00d0\u06bf\3\2\2\2\u00d2\u06d1\3\2\2\2\u00d4\u06db\3")
+ buf.write("\2\2\2\u00d6\u06dd\3\2\2\2\u00d8\u06f9\3\2\2\2\u00da\u0704")
+ buf.write("\3\2\2\2\u00dc\u0706\3\2\2\2\u00de\u0728\3\2\2\2\u00e0")
+ buf.write("\u0732\3\2\2\2\u00e2\u0734\3\2\2\2\u00e4\u0748\3\2\2\2")
+ buf.write("\u00e6\u0754\3\2\2\2\u00e8\u0756\3\2\2\2\u00ea\u07b6\3")
+ buf.write("\2\2\2\u00ec\u07ca\3\2\2\2\u00ee\u07d2\3\2\2\2\u00f0\u07d4")
+ buf.write("\3\2\2\2\u00f2\u0834\3\2\2\2\u00f4\u0848\3\2\2\2\u00f6")
+ buf.write("\u0850\3\2\2\2\u00f8\u0856\3\2\2\2\u00fa\u0858\3\2\2\2")
+ buf.write("\u00fc\u085d\3\2\2\2\u00fe\u085f\3\2\2\2\u0100\u0867\3")
+ buf.write("\2\2\2\u0102\u086d\3\2\2\2\u0104\u086f\3\2\2\2\u0106\u087b")
+ buf.write("\3\2\2\2\u0108\u088d\3\2\2\2\u010a\u089f\3\2\2\2\u010c")
+ buf.write("\u08b9\3\2\2\2\u010e\u08d3\3\2\2\2\u0110\u08f0\3\2\2\2")
+ buf.write("\u0112\u08f2\3\2\2\2\u0114\u08fc\3\2\2\2\u0116\u0915\3")
+ buf.write("\2\2\2\u0118\u093e\3\2\2\2\u011a\u0942\3\2\2\2\u011c\u0959")
+ buf.write("\3\2\2\2\u011e\u09b2\3\2\2\2\u0120\u09c3\3\2\2\2\u0122")
+ buf.write("\u09c6\3\2\2\2\u0124\u09c8\3\2\2\2\u0126\u09d0\3\2\2\2")
+ buf.write("\u0128\u09d8\3\2\2\2\u012a\u09e0\3\2\2\2\u012c\u09e8\3")
+ buf.write("\2\2\2\u012e\u09f0\3\2\2\2\u0130\u09fb\3\2\2\2\u0132\u09fd")
+ buf.write("\3\2\2\2\u0134\u0a0c\3\2\2\2\u0136\u0a0e\3\2\2\2\u0138")
+ buf.write("\u0a19\3\2\2\2\u013a\u0a1b\3\2\2\2\u013c\u0a26\3\2\2\2")
+ buf.write("\u013e\u0a28\3\2\2\2\u0140\u0a35\3\2\2\2\u0142\u0a3a\3")
+ buf.write("\2\2\2\u0144\u0a3f\3\2\2\2\u0146\u0a4e\3\2\2\2\u0148\u0a50")
+ buf.write("\3\2\2\2\u014a\u0a57\3\2\2\2\u014c\u0a5e\3\2\2\2\u014e")
+ buf.write("\u0a67\3\2\2\2\u0150\u0a76\3\2\2\2\u0152\u0a78\3\2\2\2")
+ buf.write("\u0154\u0a7a\3\2\2\2\u0156\u0a8b\3\2\2\2\u0158\u0a99\3")
+ buf.write("\2\2\2\u015a\u0aa7\3\2\2\2\u015c\u0abb\3\2\2\2\u015e\u0abd")
+ buf.write("\3\2\2\2\u0160\u0ac3\3\2\2\2\u0162\u0ac8\3\2\2\2\u0164")
+ buf.write("\u0acd\3\2\2\2\u0166\u0ad8\3\2\2\2\u0168\u0ada\3\2\2\2")
+ buf.write("\u016a\u0adf\3\2\2\2\u016c\u0ae1\3\2\2\2\u016e\u0aec\3")
+ buf.write("\2\2\2\u0170\u0af8\3\2\2\2\u0172\u0afa\3\2\2\2\u0174\u0aff")
+ buf.write("\3\2\2\2\u0176\u0b04\3\2\2\2\u0178\u0b19\3\2\2\2\u017a")
+ buf.write("\u0b1e\3\2\2\2\u017c\u0b23\3\2\2\2\u017e\u0b2e\3\2\2\2")
+ buf.write("\u0180\u0b33\3\2\2\2\u0182\u0b38\3\2\2\2\u0184\u0b3d\3")
+ buf.write("\2\2\2\u0186\u0b4f\3\2\2\2\u0188\u0b51\3\2\2\2\u018a\u0b5a")
+ buf.write("\3\2\2\2\u018c\u0b6c\3\2\2\2\u018e\u0b6e\3\2\2\2\u0190")
+ buf.write("\u0b77\3\2\2\2\u0192\u0b80\3\2\2\2\u0194\u0b94\3\2\2\2")
+ buf.write("\u0196\u0b96\3\2\2\2\u0198\u019c\5\n\6\2\u0199\u019c\5")
+ buf.write("\f\7\2\u019a\u019c\5\16\b\2\u019b\u0198\3\2\2\2\u019b")
+ buf.write("\u0199\3\2\2\2\u019b\u019a\3\2\2\2\u019c\u019f\3\2\2\2")
+ buf.write("\u019d\u019b\3\2\2\2\u019d\u019e\3\2\2\2\u019e\u01a1\3")
+ buf.write("\2\2\2\u019f\u019d\3\2\2\2\u01a0\u01a2\5.\30\2\u01a1\u01a0")
+ buf.write("\3\2\2\2\u01a1\u01a2\3\2\2\2\u01a2\3\3\2\2\2\u01a3\u01a4")
+ buf.write("\7\3\2\2\u01a4\5\3\2\2\2\u01a5\u01a8\t\2\2\2\u01a6\u01a7")
+ buf.write("\7!\2\2\u01a7\u01a9\7\u00fb\2\2\u01a8\u01a6\3\2\2\2\u01a8")
+ buf.write("\u01a9\3\2\2\2\u01a9\u01ac\3\2\2\2\u01aa\u01ab\7!\2\2")
+ buf.write("\u01ab\u01ad\7\u00fa\2\2\u01ac\u01aa\3\2\2\2\u01ac\u01ad")
+ buf.write("\3\2\2\2\u01ad\7\3\2\2\2\u01ae\u01b0\7\u00fa\2\2\u01af")
+ buf.write("\u01ae\3\2\2\2\u01af\u01b0\3\2\2\2\u01b0\t\3\2\2\2\u01b1")
+ buf.write("\u01b2\7\6\2\2\u01b2\u01b3\7\7\2\2\u01b3\u01b7\7\30\2")
+ buf.write("\2\u01b4\u01b8\5\4\3\2\u01b5\u01b8\5\6\4\2\u01b6\u01b8")
+ buf.write("\5\b\5\2\u01b7\u01b4\3\2\2\2\u01b7\u01b5\3\2\2\2\u01b7")
+ buf.write("\u01b6\3\2\2\2\u01b7\u01b8\3\2\2\2\u01b8\u01b9\3\2\2\2")
+ buf.write("\u01b9\u01ba\7\31\2\2\u01ba\13\3\2\2\2\u01bb\u01bd\7\u0084")
+ buf.write("\2\2\u01bc\u01bb\3\2\2\2\u01bc\u01bd\3\2\2\2\u01bd\u01be")
+ buf.write("\3\2\2\2\u01be\u01c0\7P\2\2\u01bf\u01c1\7O\2\2\u01c0\u01bf")
+ buf.write("\3\2\2\2\u01c0\u01c1\3\2\2\2\u01c1\u01c3\3\2\2\2\u01c2")
+ buf.write("\u01c4\7\u00fb\2\2\u01c3\u01c2\3\2\2\2\u01c3\u01c4\3\2")
+ buf.write("\2\2\u01c4\u01c5\3\2\2\2\u01c5\u01c6\7\26\2\2\u01c6\u01c7")
+ buf.write("\5\20\t\2\u01c7\u01c9\7\27\2\2\u01c8\u01ca\7\u00fb\2\2")
+ buf.write("\u01c9\u01c8\3\2\2\2\u01c9\u01ca\3\2\2\2\u01ca\u01cb\3")
+ buf.write("\2\2\2\u01cb\u01cc\7 \2\2\u01cc\r\3\2\2\2\u01cd\u01cf")
+ buf.write("\7\u0084\2\2\u01ce\u01cd\3\2\2\2\u01ce\u01cf\3\2\2\2\u01cf")
+ buf.write("\u01d0\3\2\2\2\u01d0\u01d2\7Q\2\2\u01d1\u01d3\7O\2\2\u01d2")
+ buf.write("\u01d1\3\2\2\2\u01d2\u01d3\3\2\2\2\u01d3\u01d5\3\2\2\2")
+ buf.write("\u01d4\u01d6\7\u00fb\2\2\u01d5\u01d4\3\2\2\2\u01d5\u01d6")
+ buf.write("\3\2\2\2\u01d6\u01d7\3\2\2\2\u01d7\u01d8\7\26\2\2\u01d8")
+ buf.write("\u01d9\5\20\t\2\u01d9\u01db\7\27\2\2\u01da\u01dc\7\u00fb")
+ buf.write("\2\2\u01db\u01da\3\2\2\2\u01db\u01dc\3\2\2\2\u01dc\u01dd")
+ buf.write("\3\2\2\2\u01dd\u01de\7 \2\2\u01de\17\3\2\2\2\u01df\u01ee")
+ buf.write("\5\22\n\2\u01e0\u01ee\5\24\13\2\u01e1\u01ee\5\26\f\2\u01e2")
+ buf.write("\u01ee\5\30\r\2\u01e3\u01ee\5\32\16\2\u01e4\u01ee\5\34")
+ buf.write("\17\2\u01e5\u01ee\5\36\20\2\u01e6\u01ee\5 \21\2\u01e7")
+ buf.write("\u01ee\5\"\22\2\u01e8\u01ee\5$\23\2\u01e9\u01ee\5&\24")
+ buf.write("\2\u01ea\u01ee\5(\25\2\u01eb\u01ee\5*\26\2\u01ec\u01ee")
+ buf.write("\5,\27\2\u01ed\u01df\3\2\2\2\u01ed\u01e0\3\2\2\2\u01ed")
+ buf.write("\u01e1\3\2\2\2\u01ed\u01e2\3\2\2\2\u01ed\u01e3\3\2\2\2")
+ buf.write("\u01ed\u01e4\3\2\2\2\u01ed\u01e5\3\2\2\2\u01ed\u01e6\3")
+ buf.write("\2\2\2\u01ed\u01e7\3\2\2\2\u01ed\u01e8\3\2\2\2\u01ed\u01e9")
+ buf.write("\3\2\2\2\u01ed\u01ea\3\2\2\2\u01ed\u01eb\3\2\2\2\u01ed")
+ buf.write("\u01ec\3\2\2\2\u01ee\u01f1\3\2\2\2\u01ef\u01ed\3\2\2\2")
+ buf.write("\u01ef\u01f0\3\2\2\2\u01f0\21\3\2\2\2\u01f1\u01ef\3\2")
+ buf.write("\2\2\u01f2\u01f3\7S\2\2\u01f3\u01f7\7\u00fb\2\2\u01f4")
+ buf.write("\u01f5\7\32\2\2\u01f5\u01f6\7\u00fa\2\2\u01f6\u01f8\7")
+ buf.write("\33\2\2\u01f7\u01f4\3\2\2\2\u01f7\u01f8\3\2\2\2\u01f8")
+ buf.write("\u01f9\3\2\2\2\u01f9\u01fa\7 \2\2\u01fa\23\3\2\2\2\u01fb")
+ buf.write("\u01fc\7T\2\2\u01fc\u0200\7\u00fb\2\2\u01fd\u01fe\7\32")
+ buf.write("\2\2\u01fe\u01ff\7\u00fa\2\2\u01ff\u0201\7\33\2\2\u0200")
+ buf.write("\u01fd\3\2\2\2\u0200\u0201\3\2\2\2\u0201\u0202\3\2\2\2")
+ buf.write("\u0202\u0203\7 \2\2\u0203\25\3\2\2\2\u0204\u0205\7U\2")
+ buf.write("\2\u0205\u0209\7\u00fb\2\2\u0206\u0207\7\32\2\2\u0207")
+ buf.write("\u0208\7\u00fa\2\2\u0208\u020a\7\33\2\2\u0209\u0206\3")
+ buf.write("\2\2\2\u0209\u020a\3\2\2\2\u020a\u020b\3\2\2\2\u020b\u020c")
+ buf.write("\7 \2\2\u020c\27\3\2\2\2\u020d\u020e\7V\2\2\u020e\u0212")
+ buf.write("\7\u00fb\2\2\u020f\u0210\7\32\2\2\u0210\u0211\7\u00fa")
+ buf.write("\2\2\u0211\u0213\7\33\2\2\u0212\u020f\3\2\2\2\u0212\u0213")
+ buf.write("\3\2\2\2\u0213\u0214\3\2\2\2\u0214\u0215\7 \2\2\u0215")
+ buf.write("\31\3\2\2\2\u0216\u0217\7R\2\2\u0217\u021b\7\u00fb\2\2")
+ buf.write("\u0218\u0219\7\32\2\2\u0219\u021a\7\u00fa\2\2\u021a\u021c")
+ buf.write("\7\33\2\2\u021b\u0218\3\2\2\2\u021b\u021c\3\2\2\2\u021c")
+ buf.write("\u021d\3\2\2\2\u021d\u021e\7 \2\2\u021e\33\3\2\2\2\u021f")
+ buf.write("\u0220\7W\2\2\u0220\u0224\7\u00fb\2\2\u0221\u0222\7\32")
+ buf.write("\2\2\u0222\u0223\7\u00fa\2\2\u0223\u0225\7\33\2\2\u0224")
+ buf.write("\u0221\3\2\2\2\u0224\u0225\3\2\2\2\u0225\u0226\3\2\2\2")
+ buf.write("\u0226\u0227\7 \2\2\u0227\35\3\2\2\2\u0228\u0229\7X\2")
+ buf.write("\2\u0229\u022d\7\u00fb\2\2\u022a\u022b\7\32\2\2\u022b")
+ buf.write("\u022c\7\u00fa\2\2\u022c\u022e\7\33\2\2\u022d\u022a\3")
+ buf.write("\2\2\2\u022d\u022e\3\2\2\2\u022e\u022f\3\2\2\2\u022f\u0230")
+ buf.write("\7 \2\2\u0230\37\3\2\2\2\u0231\u0232\7Y\2\2\u0232\u0236")
+ buf.write("\7\u00fb\2\2\u0233\u0234\7\32\2\2\u0234\u0235\7\u00fa")
+ buf.write("\2\2\u0235\u0237\7\33\2\2\u0236\u0233\3\2\2\2\u0236\u0237")
+ buf.write("\3\2\2\2\u0237\u0238\3\2\2\2\u0238\u0239\7 \2\2\u0239")
+ buf.write("!\3\2\2\2\u023a\u023b\7Z\2\2\u023b\u023f\7\u00fb\2\2\u023c")
+ buf.write("\u023d\7\32\2\2\u023d\u023e\7\u00fa\2\2\u023e\u0240\7")
+ buf.write("\33\2\2\u023f\u023c\3\2\2\2\u023f\u0240\3\2\2\2\u0240")
+ buf.write("\u0241\3\2\2\2\u0241\u0242\7 \2\2\u0242#\3\2\2\2\u0243")
+ buf.write("\u0244\7\u00fb\2\2\u0244\u0248\7\u00fb\2\2\u0245\u0246")
+ buf.write("\7\32\2\2\u0246\u0247\7\u00fa\2\2\u0247\u0249\7\33\2\2")
+ buf.write("\u0248\u0245\3\2\2\2\u0248\u0249\3\2\2\2\u0249\u024a\3")
+ buf.write("\2\2\2\u024a\u024b\7 \2\2\u024b%\3\2\2\2\u024c\u024e\7")
+ buf.write("S\2\2\u024d\u024f\7\u00fb\2\2\u024e\u024d\3\2\2\2\u024e")
+ buf.write("\u024f\3\2\2\2\u024f\u0250\3\2\2\2\u0250\u0251\7\36\2")
+ buf.write("\2\u0251\u0252\7\u00fa\2\2\u0252\u0253\7 \2\2\u0253\'")
+ buf.write("\3\2\2\2\u0254\u0256\7T\2\2\u0255\u0257\7\u00fb\2\2\u0256")
+ buf.write("\u0255\3\2\2\2\u0256\u0257\3\2\2\2\u0257\u0258\3\2\2\2")
+ buf.write("\u0258\u0259\7\36\2\2\u0259\u025a\7\u00fa\2\2\u025a\u025b")
+ buf.write("\7 \2\2\u025b)\3\2\2\2\u025c\u025e\7U\2\2\u025d\u025f")
+ buf.write("\7\u00fb\2\2\u025e\u025d\3\2\2\2\u025e\u025f\3\2\2\2\u025f")
+ buf.write("\u0260\3\2\2\2\u0260\u0261\7\36\2\2\u0261\u0262\7\u00fa")
+ buf.write("\2\2\u0262\u0263\7 \2\2\u0263+\3\2\2\2\u0264\u0266\7V")
+ buf.write("\2\2\u0265\u0267\7\u00fb\2\2\u0266\u0265\3\2\2\2\u0266")
+ buf.write("\u0267\3\2\2\2\u0267\u0268\3\2\2\2\u0268\u0269\7\36\2")
+ buf.write("\2\u0269\u026a\7\u00fa\2\2\u026a\u026b\7 \2\2\u026b-\3")
+ buf.write("\2\2\2\u026c\u026d\7+\2\2\u026d\u026e\7[\2\2\u026e\u026f")
+ buf.write("\7\b\2\2\u026f\u0270\5L\'\2\u0270\u0271\7!\2\2\u0271\u0272")
+ buf.write("\7.\2\2\u0272\u0273\7\b\2\2\u0273\u0274\7\u00ec\2\2\u0274")
+ buf.write("\u0275\7\30\2\2\u0275\u0276\7\u00fa\2\2\u0276\u0277\7")
+ buf.write("\31\2\2\u0277\u0278\7!\2\2\u0278\u0279\7=\2\2\u0279\u027a")
+ buf.write("\7\b\2\2\u027a\u027b\7\u00ec\2\2\u027b\u027c\7\30\2\2")
+ buf.write("\u027c\u027d\7\u00fa\2\2\u027d\u027e\7\31\2\2\u027e\u0284")
+ buf.write("\7!\2\2\u027f\u0280\7\u0083\2\2\u0280\u0281\7\b\2\2\u0281")
+ buf.write("\u0282\5\60\31\2\u0282\u0283\7!\2\2\u0283\u0285\3\2\2")
+ buf.write("\2\u0284\u027f\3\2\2\2\u0284\u0285\3\2\2\2\u0285\u028b")
+ buf.write("\3\2\2\2\u0286\u0287\7\u0081\2\2\u0287\u0288\7\b\2\2\u0288")
+ buf.write("\u0289\5\62\32\2\u0289\u028a\7!\2\2\u028a\u028c\3\2\2")
+ buf.write("\2\u028b\u0286\3\2\2\2\u028b\u028c\3\2\2\2\u028c\u0292")
+ buf.write("\3\2\2\2\u028d\u028e\7\u0082\2\2\u028e\u028f\7\b\2\2\u028f")
+ buf.write("\u0290\5\66\34\2\u0290\u0291\7!\2\2\u0291\u0293\3\2\2")
+ buf.write("\2\u0292\u028d\3\2\2\2\u0292\u0293\3\2\2\2\u0293\u0294")
+ buf.write("\3\2\2\2\u0294\u0295\58\35\2\u0295\u0296\7-\2\2\u0296")
+ buf.write("\u0297\7 \2\2\u0297/\3\2\2\2\u0298\u029b\5L\'\2\u0299")
+ buf.write("\u029a\7(\2\2\u029a\u029c\5L\'\2\u029b\u0299\3\2\2\2\u029b")
+ buf.write("\u029c\3\2\2\2\u029c\u029f\3\2\2\2\u029d\u029e\7(\2\2")
+ buf.write("\u029e\u02a0\5L\'\2\u029f\u029d\3\2\2\2\u029f\u02a0\3")
+ buf.write("\2\2\2\u02a0\u02a3\3\2\2\2\u02a1\u02a2\7(\2\2\u02a2\u02a4")
+ buf.write("\5L\'\2\u02a3\u02a1\3\2\2\2\u02a3\u02a4\3\2\2\2\u02a4")
+ buf.write("\61\3\2\2\2\u02a5\u02aa\5\64\33\2\u02a6\u02a7\7(\2\2\u02a7")
+ buf.write("\u02a9\5\64\33\2\u02a8\u02a6\3\2\2\2\u02a9\u02ac\3\2\2")
+ buf.write("\2\u02aa\u02a8\3\2\2\2\u02aa\u02ab\3\2\2\2\u02ab\63\3")
+ buf.write("\2\2\2\u02ac\u02aa\3\2\2\2\u02ad\u02ae\t\3\2\2\u02ae\65")
+ buf.write("\3\2\2\2\u02af\u02b0\t\4\2\2\u02b0\67\3\2\2\2\u02b1\u02b3")
+ buf.write("\5:\36\2\u02b2\u02b1\3\2\2\2\u02b3\u02b6\3\2\2\2\u02b4")
+ buf.write("\u02b2\3\2\2\2\u02b4\u02b5\3\2\2\2\u02b59\3\2\2\2\u02b6")
+ buf.write("\u02b4\3\2\2\2\u02b7\u02c2\5d\63\2\u02b8\u02c2\5h\65\2")
+ buf.write("\u02b9\u02c2\5j\66\2\u02ba\u02c2\5> \2\u02bb\u02c2\5@")
+ buf.write("!\2\u02bc\u02c2\5D#\2\u02bd\u02c2\5<\37\2\u02be\u02c2")
+ buf.write("\5F$\2\u02bf\u02c2\5H%\2\u02c0\u02c2\5\u011c\u008f\2\u02c1")
+ buf.write("\u02b7\3\2\2\2\u02c1\u02b8\3\2\2\2\u02c1\u02b9\3\2\2\2")
+ buf.write("\u02c1\u02ba\3\2\2\2\u02c1\u02bb\3\2\2\2\u02c1\u02bc\3")
+ buf.write("\2\2\2\u02c1\u02bd\3\2\2\2\u02c1\u02be\3\2\2\2\u02c1\u02bf")
+ buf.write("\3\2\2\2\u02c1\u02c0\3\2\2\2\u02c2;\3\2\2\2\u02c3\u02c4")
+ buf.write("\7\u009b\2\2\u02c4\u02c5\7\u00fb\2\2\u02c5\u02c6\7!\2")
+ buf.write("\2\u02c6\u02c7\7\62\2\2\u02c7\u02c8\7\b\2\2\u02c8\u02c9")
+ buf.write("\7\u00ec\2\2\u02c9\u02ca\7\30\2\2\u02ca\u02cb\7\u00fa")
+ buf.write("\2\2\u02cb\u02d0\7\31\2\2\u02cc\u02cd\7!\2\2\u02cd\u02ce")
+ buf.write("\7\u009c\2\2\u02ce\u02cf\7\b\2\2\u02cf\u02d1\7\u00fa\2")
+ buf.write("\2\u02d0\u02cc\3\2\2\2\u02d0\u02d1\3\2\2\2\u02d1\u02d2")
+ buf.write("\3\2\2\2\u02d2\u02d3\7 \2\2\u02d3=\3\2\2\2\u02d4\u02e5")
+ buf.write("\7\u009d\2\2\u02d5\u02d6\7\u00fb\2\2\u02d6\u02e6\7!\2")
+ buf.write("\2\u02d7\u02d8\7V\2\2\u02d8\u02e6\7!\2\2\u02d9\u02da\7")
+ buf.write("U\2\2\u02da\u02e6\7!\2\2\u02db\u02dc\7T\2\2\u02dc\u02e6")
+ buf.write("\7!\2\2\u02dd\u02de\7S\2\2\u02de\u02e6\7!\2\2\u02df\u02e0")
+ buf.write("\7X\2\2\u02e0\u02e6\7!\2\2\u02e1\u02e2\7Y\2\2\u02e2\u02e6")
+ buf.write("\7!\2\2\u02e3\u02e4\7Z\2\2\u02e4\u02e6\7!\2\2\u02e5\u02d5")
+ buf.write("\3\2\2\2\u02e5\u02d7\3\2\2\2\u02e5\u02d9\3\2\2\2\u02e5")
+ buf.write("\u02db\3\2\2\2\u02e5\u02dd\3\2\2\2\u02e5\u02df\3\2\2\2")
+ buf.write("\u02e5\u02e1\3\2\2\2\u02e5\u02e3\3\2\2\2\u02e6\u02eb\3")
+ buf.write("\2\2\2\u02e7\u02e8\7\u008f\2\2\u02e8\u02e9\7\b\2\2\u02e9")
+ buf.write("\u02ea\7\u00fa\2\2\u02ea\u02ec\7!\2\2\u02eb\u02e7\3\2")
+ buf.write("\2\2\u02eb\u02ec\3\2\2\2\u02ec\u02ed\3\2\2\2\u02ed\u02ee")
+ buf.write("\7\u008e\2\2\u02ee\u02ef\7\b\2\2\u02ef\u02f0\7\u00fb\2")
+ buf.write("\2\u02f0\u02f1\7!\2\2\u02f1\u02f2\7[\2\2\u02f2\u02f3\7")
+ buf.write("\b\2\2\u02f3\u02f4\5L\'\2\u02f4\u02f5\7 \2\2\u02f5?\3")
+ buf.write("\2\2\2\u02f6\u0307\7\u009e\2\2\u02f7\u02f8\7\u00fb\2\2")
+ buf.write("\u02f8\u0308\7!\2\2\u02f9\u02fa\7V\2\2\u02fa\u0308\7!")
+ buf.write("\2\2\u02fb\u02fc\7U\2\2\u02fc\u0308\7!\2\2\u02fd\u02fe")
+ buf.write("\7T\2\2\u02fe\u0308\7!\2\2\u02ff\u0300\7S\2\2\u0300\u0308")
+ buf.write("\7!\2\2\u0301\u0302\7X\2\2\u0302\u0308\7!\2\2\u0303\u0304")
+ buf.write("\7Y\2\2\u0304\u0308\7!\2\2\u0305\u0306\7Z\2\2\u0306\u0308")
+ buf.write("\7!\2\2\u0307\u02f7\3\2\2\2\u0307\u02f9\3\2\2\2\u0307")
+ buf.write("\u02fb\3\2\2\2\u0307\u02fd\3\2\2\2\u0307\u02ff\3\2\2\2")
+ buf.write("\u0307\u0301\3\2\2\2\u0307\u0303\3\2\2\2\u0307\u0305\3")
+ buf.write("\2\2\2\u0308\u030d\3\2\2\2\u0309\u030a\7\u008f\2\2\u030a")
+ buf.write("\u030b\7\b\2\2\u030b\u030c\7\u00fa\2\2\u030c\u030e\7!")
+ buf.write("\2\2\u030d\u0309\3\2\2\2\u030d\u030e\3\2\2\2\u030e\u030f")
+ buf.write("\3\2\2\2\u030f\u0310\7\u009c\2\2\u0310\u0311\7\b\2\2\u0311")
+ buf.write("\u0316\5B\"\2\u0312\u0313\7(\2\2\u0313\u0315\5B\"\2\u0314")
+ buf.write("\u0312\3\2\2\2\u0315\u0318\3\2\2\2\u0316\u0314\3\2\2\2")
+ buf.write("\u0316\u0317\3\2\2\2\u0317\u0319\3\2\2\2\u0318\u0316\3")
+ buf.write("\2\2\2\u0319\u0329\7!\2\2\u031a\u031b\7\u008e\2\2\u031b")
+ buf.write("\u031c\7\b\2\2\u031c\u031d\7\u00fb\2\2\u031d\u032a\7!")
+ buf.write("\2\2\u031e\u031f\7\u008e\2\2\u031f\u0320\7\b\2\2\u0320")
+ buf.write("\u0321\7\u00ec\2\2\u0321\u0322\7\30\2\2\u0322\u0323\7")
+ buf.write("\u00fa\2\2\u0323\u0324\7\31\2\2\u0324\u0325\7!\2\2\u0325")
+ buf.write("\u0326\7\u009f\2\2\u0326\u0327\7\b\2\2\u0327\u0328\7\u00fa")
+ buf.write("\2\2\u0328\u032a\7!\2\2\u0329\u031a\3\2\2\2\u0329\u031e")
+ buf.write("\3\2\2\2\u032a\u032b\3\2\2\2\u032b\u032c\7[\2\2\u032c")
+ buf.write("\u032d\7\b\2\2\u032d\u032e\5L\'\2\u032e\u032f\7 \2\2\u032f")
+ buf.write("A\3\2\2\2\u0330\u0331\7\u00fa\2\2\u0331C\3\2\2\2\u0332")
+ buf.write("\u0333\7\u00a0\2\2\u0333\u0334\7\u00fb\2\2\u0334\u0339")
+ buf.write("\7!\2\2\u0335\u0336\7\u008f\2\2\u0336\u0337\7\b\2\2\u0337")
+ buf.write("\u0338\7\u00fa\2\2\u0338\u033a\7!\2\2\u0339\u0335\3\2")
+ buf.write("\2\2\u0339\u033a\3\2\2\2\u033a\u0342\3\2\2\2\u033b\u033c")
+ buf.write("\7\u008e\2\2\u033c\u033d\7\b\2\2\u033d\u033e\7\u00ec\2")
+ buf.write("\2\u033e\u033f\7\30\2\2\u033f\u0340\7\u00fa\2\2\u0340")
+ buf.write("\u0341\7\31\2\2\u0341\u0343\7!\2\2\u0342\u033b\3\2\2\2")
+ buf.write("\u0343\u0344\3\2\2\2\u0344\u0342\3\2\2\2\u0344\u0345\3")
+ buf.write("\2\2\2\u0345\u0346\3\2\2\2\u0346\u0347\7[\2\2\u0347\u0348")
+ buf.write("\7\b\2\2\u0348\u0349\5L\'\2\u0349\u034a\7 \2\2\u034aE")
+ buf.write("\3\2\2\2\u034b\u034c\7l\2\2\u034c\u034d\5\u0124\u0093")
+ buf.write("\2\u034d\u034e\7 \2\2\u034e\u034f\58\35\2\u034f\u0350")
+ buf.write("\7s\2\2\u0350\u0351\7 \2\2\u0351G\3\2\2\2\u0352\u0353")
+ buf.write("\7k\2\2\u0353\u0354\5\u0124\u0093\2\u0354\u0355\7 \2\2")
+ buf.write("\u0355\u0356\58\35\2\u0356\u0357\7s\2\2\u0357\u0358\7")
+ buf.write(" \2\2\u0358I\3\2\2\2\u0359\u035a\7\u00fa\2\2\u035a\u035b")
+ buf.write("\7!\2\2\u035b\u035c\7\u00fa\2\2\u035c\u035d\7!\2\2\u035d")
+ buf.write("\u035e\7\u00fa\2\2\u035e\u035f\7!\2\2\u035f\u0360\7\u00fa")
+ buf.write("\2\2\u0360\u0361\7!\2\2\u0361\u0362\7\u00fa\2\2\u0362")
+ buf.write("\u0363\7!\2\2\u0363\u0364\7\u00fa\2\2\u0364\u0365\7!\2")
+ buf.write("\2\u0365\u0366\7\u00fa\2\2\u0366\u0367\7!\2\2\u0367\u0368")
+ buf.write("\7\u00fa\2\2\u0368K\3\2\2\2\u0369\u036a\7\26\2\2\u036a")
+ buf.write("\u036b\7\u00fa\2\2\u036b\u036c\7!\2\2\u036c\u036d\7\u00fa")
+ buf.write("\2\2\u036d\u036e\7!\2\2\u036e\u036f\7\u00fa\2\2\u036f")
+ buf.write("\u0375\7!\2\2\u0370\u0371\7\26\2\2\u0371\u0372\5J&\2\u0372")
+ buf.write("\u0373\7\27\2\2\u0373\u0376\3\2\2\2\u0374\u0376\5J&\2")
+ buf.write("\u0375\u0370\3\2\2\2\u0375\u0374\3\2\2\2\u0376\u0377\3")
+ buf.write("\2\2\2\u0377\u0378\7\27\2\2\u0378M\3\2\2\2\u0379\u037a")
+ buf.write("\7\u00ec\2\2\u037a\u037b\7\30\2\2\u037b\u037c\7\u00fa")
+ buf.write("\2\2\u037c\u037d\7\31\2\2\u037dO\3\2\2\2\u037e\u037f\5")
+ buf.write("R*\2\u037f\u0380\5T+\2\u0380Q\3\2\2\2\u0381\u0382\7\u008e")
+ buf.write("\2\2\u0382\u0383\7\b\2\2\u0383\u0384\7\u00fb\2\2\u0384")
+ buf.write("\u0386\7!\2\2\u0385\u0381\3\2\2\2\u0385\u0386\3\2\2\2")
+ buf.write("\u0386\u038c\3\2\2\2\u0387\u0388\7\u008f\2\2\u0388\u0389")
+ buf.write("\7\b\2\2\u0389\u038a\5X-\2\u038a\u038b\7!\2\2\u038b\u038d")
+ buf.write("\3\2\2\2\u038c\u0387\3\2\2\2\u038c\u038d\3\2\2\2\u038d")
+ buf.write("\u0392\3\2\2\2\u038e\u038f\7\u0091\2\2\u038f\u0390\7\b")
+ buf.write("\2\2\u0390\u0391\7\u00fa\2\2\u0391\u0393\7!\2\2\u0392")
+ buf.write("\u038e\3\2\2\2\u0392\u0393\3\2\2\2\u0393S\3\2\2\2\u0394")
+ buf.write("\u0395\7\62\2\2\u0395\u0396\7\b\2\2\u0396\u0397\7\u00ec")
+ buf.write("\2\2\u0397\u0398\7\30\2\2\u0398\u0399\7\u00fa\2\2\u0399")
+ buf.write("\u039a\7\31\2\2\u039a\u039b\7!\2\2\u039b\u039c\7=\2\2")
+ buf.write("\u039c\u039d\7\b\2\2\u039d\u039e\7\u00ec\2\2\u039e\u039f")
+ buf.write("\7\30\2\2\u039f\u03a0\7\u00fa\2\2\u03a0\u03a1\7\31\2\2")
+ buf.write("\u03a1U\3\2\2\2\u03a2\u03ab\7~\2\2\u03a3\u03ab\7y\2\2")
+ buf.write("\u03a4\u03ab\7{\2\2\u03a5\u03ab\7\u0080\2\2\u03a6\u03ab")
+ buf.write("\7|\2\2\u03a7\u03ab\7\177\2\2\u03a8\u03ab\7z\2\2\u03a9")
+ buf.write("\u03ab\7}\2\2\u03aa\u03a2\3\2\2\2\u03aa\u03a3\3\2\2\2")
+ buf.write("\u03aa\u03a4\3\2\2\2\u03aa\u03a5\3\2\2\2\u03aa\u03a6\3")
+ buf.write("\2\2\2\u03aa\u03a7\3\2\2\2\u03aa\u03a8\3\2\2\2\u03aa\u03a9")
+ buf.write("\3\2\2\2\u03abW\3\2\2\2\u03ac\u03ad\7\u00fb\2\2\u03ad")
+ buf.write("\u03ae\7\32\2\2\u03ae\u03af\7\u00fa\2\2\u03af\u03b9\7")
+ buf.write("\33\2\2\u03b0\u03b5\7\u00fb\2\2\u03b1\u03b2\7\34\2\2\u03b2")
+ buf.write("\u03b4\5\u015e\u00b0\2\u03b3\u03b1\3\2\2\2\u03b4\u03b7")
+ buf.write("\3\2\2\2\u03b5\u03b3\3\2\2\2\u03b5\u03b6\3\2\2\2\u03b6")
+ buf.write("\u03b9\3\2\2\2\u03b7\u03b5\3\2\2\2\u03b8\u03ac\3\2\2\2")
+ buf.write("\u03b8\u03b0\3\2\2\2\u03b9Y\3\2\2\2\u03ba\u03bc\7\35\2")
+ buf.write("\2\u03bb\u03ba\3\2\2\2\u03bb\u03bc\3\2\2\2\u03bc\u03bd")
+ buf.write("\3\2\2\2\u03bd\u03e7\7\u00fa\2\2\u03be\u03e7\7\u00d3\2")
+ buf.write("\2\u03bf\u03e7\7\u00d4\2\2\u03c0\u03e7\7\u00d5\2\2\u03c1")
+ buf.write("\u03e7\7\u00d6\2\2\u03c2\u03e7\7\u00d7\2\2\u03c3\u03c4")
+ buf.write("\7\u00fa\2\2\u03c4\u03c5\7\36\2\2\u03c5\u03c6\7\u00fa")
+ buf.write("\2\2\u03c6\u03c7\7\36\2\2\u03c7\u03e7\7\u00fa\2\2\u03c8")
+ buf.write("\u03c9\7\u00fa\2\2\u03c9\u03ca\7\37\2\2\u03ca\u03cb\7")
+ buf.write("\u00fa\2\2\u03cb\u03cc\7\37\2\2\u03cc\u03e7\7\u00fa\2")
+ buf.write("\2\u03cd\u03ce\7\u00fa\2\2\u03ce\u03cf\7 \2\2\u03cf\u03d0")
+ buf.write("\7\u00fa\2\2\u03d0\u03d1\7 \2\2\u03d1\u03d2\5L\'\2\u03d2")
+ buf.write("\u03d3\7 \2\2\u03d3\u03d4\7\u00ec\2\2\u03d4\u03d5\7\30")
+ buf.write("\2\2\u03d5\u03d6\7\u00fa\2\2\u03d6\u03d7\7\31\2\2\u03d7")
+ buf.write("\u03e7\3\2\2\2\u03d8\u03d9\7\u00ec\2\2\u03d9\u03da\7\30")
+ buf.write("\2\2\u03da\u03db\7\u00fa\2\2\u03db\u03e7\7\31\2\2\u03dc")
+ buf.write("\u03dd\7\26\2\2\u03dd\u03e2\7\u00fa\2\2\u03de\u03df\7")
+ buf.write("!\2\2\u03df\u03e1\7\u00fa\2\2\u03e0\u03de\3\2\2\2\u03e1")
+ buf.write("\u03e4\3\2\2\2\u03e2\u03e0\3\2\2\2\u03e2\u03e3\3\2\2\2")
+ buf.write("\u03e3\u03e5\3\2\2\2\u03e4\u03e2\3\2\2\2\u03e5\u03e7\7")
+ buf.write("\27\2\2\u03e6\u03bb\3\2\2\2\u03e6\u03be\3\2\2\2\u03e6")
+ buf.write("\u03bf\3\2\2\2\u03e6\u03c0\3\2\2\2\u03e6\u03c1\3\2\2\2")
+ buf.write("\u03e6\u03c2\3\2\2\2\u03e6\u03c3\3\2\2\2\u03e6\u03c8\3")
+ buf.write("\2\2\2\u03e6\u03cd\3\2\2\2\u03e6\u03d8\3\2\2\2\u03e6\u03dc")
+ buf.write("\3\2\2\2\u03e7[\3\2\2\2\u03e8\u03e9\7\u0092\2\2\u03e9")
+ buf.write("\u03ea\7\b\2\2\u03ea\u03eb\7\t\2\2\u03eb\u03ec\7\30\2")
+ buf.write("\2\u03ec\u03ed\7\u00fa\2\2\u03ed\u03ee\7\31\2\2\u03ee")
+ buf.write("]\3\2\2\2\u03ef\u03f0\7\u0093\2\2\u03f0_\3\2\2\2\u03f1")
+ buf.write("\u03f4\5\\/\2\u03f2\u03f4\5^\60\2\u03f3\u03f1\3\2\2\2")
+ buf.write("\u03f3\u03f2\3\2\2\2\u03f4a\3\2\2\2\u03f5\u03fa\5`\61")
+ buf.write("\2\u03f6\u03f7\7!\2\2\u03f7\u03f9\5`\61\2\u03f8\u03f6")
+ buf.write("\3\2\2\2\u03f9\u03fc\3\2\2\2\u03fa\u03f8\3\2\2\2\u03fa")
+ buf.write("\u03fb\3\2\2\2\u03fbc\3\2\2\2\u03fc\u03fa\3\2\2\2\u03fd")
+ buf.write("\u03fe\7\67\2\2\u03fe\u03ff\7/\2\2\u03ff\u0400\7\b\2\2")
+ buf.write("\u0400\u0401\7\u00fa\2\2\u0401\u0402\7!\2\2\u0402\u0403")
+ buf.write("\7.\2\2\u0403\u0404\7\b\2\2\u0404\u0405\7\u00ec\2\2\u0405")
+ buf.write("\u0406\7\30\2\2\u0406\u0407\7\u00fa\2\2\u0407\u0408\7")
+ buf.write("\31\2\2\u0408\u040c\7 \2\2\u0409\u040b\5f\64\2\u040a\u0409")
+ buf.write("\3\2\2\2\u040b\u040e\3\2\2\2\u040c\u040a\3\2\2\2\u040c")
+ buf.write("\u040d\3\2\2\2\u040d\u040f\3\2\2\2\u040e\u040c\3\2\2\2")
+ buf.write("\u040f\u0410\7\66\2\2\u0410\u0411\7 \2\2\u0411e\3\2\2")
+ buf.write("\2\u0412\u0422\5j\66\2\u0413\u0422\5l\67\2\u0414\u0422")
+ buf.write("\5n8\2\u0415\u0422\5\u00a4S\2\u0416\u0422\5p9\2\u0417")
+ buf.write("\u0422\5\u0088E\2\u0418\u0422\5\u00f8}\2\u0419\u0422\5")
+ buf.write("\u0118\u008d\2\u041a\u0422\5\u011a\u008e\2\u041b\u0422")
+ buf.write("\5\u0110\u0089\2\u041c\u0422\5\u011c\u008f\2\u041d\u0422")
+ buf.write("\5\u0120\u0091\2\u041e\u041f\5\u0096L\2\u041f\u0420\7")
+ buf.write(" \2\2\u0420\u0422\3\2\2\2\u0421\u0412\3\2\2\2\u0421\u0413")
+ buf.write("\3\2\2\2\u0421\u0414\3\2\2\2\u0421\u0415\3\2\2\2\u0421")
+ buf.write("\u0416\3\2\2\2\u0421\u0417\3\2\2\2\u0421\u0418\3\2\2\2")
+ buf.write("\u0421\u0419\3\2\2\2\u0421\u041a\3\2\2\2\u0421\u041b\3")
+ buf.write("\2\2\2\u0421\u041c\3\2\2\2\u0421\u041d\3\2\2\2\u0421\u041e")
+ buf.write("\3\2\2\2\u0422g\3\2\2\2\u0423\u0424\78\2\2\u0424\u0425")
+ buf.write("\7/\2\2\u0425\u0426\7\b\2\2\u0426\u0427\7\u00fa\2\2\u0427")
+ buf.write("\u0436\7!\2\2\u0428\u0429\79\2\2\u0429\u042a\7\b\2\2\u042a")
+ buf.write("\u042b\7\u00ec\2\2\u042b\u042c\7\30\2\2\u042c\u042d\7")
+ buf.write("\u00fa\2\2\u042d\u042e\7\31\2\2\u042e\u042f\7 \2\2\u042f")
+ buf.write("\u0430\7:\2\2\u0430\u0431\7\b\2\2\u0431\u0432\5L\'\2\u0432")
+ buf.write("\u0433\7 \2\2\u0433\u0435\3\2\2\2\u0434\u0428\3\2\2\2")
+ buf.write("\u0435\u0438\3\2\2\2\u0436\u0434\3\2\2\2\u0436\u0437\3")
+ buf.write("\2\2\2\u0437\u043c\3\2\2\2\u0438\u0436\3\2\2\2\u0439\u043b")
+ buf.write("\5f\64\2\u043a\u0439\3\2\2\2\u043b\u043e\3\2\2\2\u043c")
+ buf.write("\u043a\3\2\2\2\u043c\u043d\3\2\2\2\u043d\u043f\3\2\2\2")
+ buf.write("\u043e\u043c\3\2\2\2\u043f\u0440\7\66\2\2\u0440\u0441")
+ buf.write("\7 \2\2\u0441i\3\2\2\2\u0442\u0443\5\\/\2\u0443\u0444")
+ buf.write("\7 \2\2\u0444k\3\2\2\2\u0445\u0446\5^\60\2\u0446\u0447")
+ buf.write("\7 \2\2\u0447m\3\2\2\2\u0448\u0449\7\u0094\2\2\u0449\u044a")
+ buf.write("\7\u00fb\2\2\u044a\u044b\7!\2\2\u044b\u044c\5\u0124\u0093")
+ buf.write("\2\u044c\u044d\7\u0095\2\2\u044d\u044e\7 \2\2\u044eo\3")
+ buf.write("\2\2\2\u044f\u0453\5r:\2\u0450\u0453\5z>\2\u0451\u0453")
+ buf.write("\5~@\2\u0452\u044f\3\2\2\2\u0452\u0450\3\2\2\2\u0452\u0451")
+ buf.write("\3\2\2\2\u0453q\3\2\2\2\u0454\u0455\7;\2\2\u0455\u0456")
+ buf.write("\7>\2\2\u0456\u0457\7\b\2\2\u0457\u0458\7\u00ec\2\2\u0458")
+ buf.write("\u0459\7\30\2\2\u0459\u045a\7\u00fa\2\2\u045a\u045f\7")
+ buf.write("\31\2\2\u045b\u045c\7!\2\2\u045c\u045d\7@\2\2\u045d\u045e")
+ buf.write("\7\b\2\2\u045e\u0460\5v<\2\u045f\u045b\3\2\2\2\u045f\u0460")
+ buf.write("\3\2\2\2\u0460\u0475\3\2\2\2\u0461\u0462\7!\2\2\u0462")
+ buf.write("\u0464\5b\62\2\u0463\u0461\3\2\2\2\u0463\u0464\3\2\2\2")
+ buf.write("\u0464\u0465\3\2\2\2\u0465\u0476\7 \2\2\u0466\u0467\7")
+ buf.write("!\2\2\u0467\u0469\5b\62\2\u0468\u0466\3\2\2\2\u0468\u0469")
+ buf.write("\3\2\2\2\u0469\u0471\3\2\2\2\u046a\u046e\7!\2\2\u046b")
+ buf.write("\u046d\5t;\2\u046c\u046b\3\2\2\2\u046d\u0470\3\2\2\2\u046e")
+ buf.write("\u046c\3\2\2\2\u046e\u046f\3\2\2\2\u046f\u0472\3\2\2\2")
+ buf.write("\u0470\u046e\3\2\2\2\u0471\u046a\3\2\2\2\u0471\u0472\3")
+ buf.write("\2\2\2\u0472\u0473\3\2\2\2\u0473\u0474\7<\2\2\u0474\u0476")
+ buf.write("\7 \2\2\u0475\u0463\3\2\2\2\u0475\u0468\3\2\2\2\u0476")
+ buf.write("s\3\2\2\2\u0477\u047a\5p9\2\u0478\u047a\5\u0088E\2\u0479")
+ buf.write("\u0477\3\2\2\2\u0479\u0478\3\2\2\2\u047au\3\2\2\2\u047b")
+ buf.write("\u0480\5x=\2\u047c\u047d\7(\2\2\u047d\u047f\5x=\2\u047e")
+ buf.write("\u047c\3\2\2\2\u047f\u0482\3\2\2\2\u0480\u047e\3\2\2\2")
+ buf.write("\u0480\u0481\3\2\2\2\u0481w\3\2\2\2\u0482\u0480\3\2\2")
+ buf.write("\2\u0483\u0484\t\5\2\2\u0484y\3\2\2\2\u0485\u0486\7>\2")
+ buf.write("\2\u0486\u0487\7=\2\2\u0487\u0488\7\b\2\2\u0488\u0489")
+ buf.write("\7\u00ec\2\2\u0489\u048a\7\30\2\2\u048a\u048b\7\u00fa")
+ buf.write("\2\2\u048b\u048c\7\31\2\2\u048c\u048d\7!\2\2\u048d\u048e")
+ buf.write("\7>\2\2\u048e\u048f\7\b\2\2\u048f\u0490\7\u00ec\2\2\u0490")
+ buf.write("\u0491\7\30\2\2\u0491\u0492\7\u00fa\2\2\u0492\u049a\7")
+ buf.write("\31\2\2\u0493\u0494\7!\2\2\u0494\u0495\7>\2\2\u0495\u0496")
+ buf.write("\7\b\2\2\u0496\u0497\7\u00ec\2\2\u0497\u0498\7\30\2\2")
+ buf.write("\u0498\u0499\7\u00fa\2\2\u0499\u049b\7\31\2\2\u049a\u0493")
+ buf.write("\3\2\2\2\u049a\u049b\3\2\2\2\u049b\u04ac\3\2\2\2\u049c")
+ buf.write("\u049d\7!\2\2\u049d\u049e\7@\2\2\u049e\u049f\7\b\2\2\u049f")
+ buf.write("\u04a4\5|?\2\u04a0\u04a1\7(\2\2\u04a1\u04a3\5|?\2\u04a2")
+ buf.write("\u04a0\3\2\2\2\u04a3\u04a6\3\2\2\2\u04a4\u04a2\3\2\2\2")
+ buf.write("\u04a4\u04a5\3\2\2\2\u04a5\u04a7\3\2\2\2\u04a6\u04a4\3")
+ buf.write("\2\2\2\u04a7\u04a8\7!\2\2\u04a8\u04a9\7t\2\2\u04a9\u04aa")
+ buf.write("\7\b\2\2\u04aa\u04ab\7\u00fa\2\2\u04ab\u04ad\3\2\2\2\u04ac")
+ buf.write("\u049c\3\2\2\2\u04ac\u04ad\3\2\2\2\u04ad\u04b0\3\2\2\2")
+ buf.write("\u04ae\u04af\7!\2\2\u04af\u04b1\5b\62\2\u04b0\u04ae\3")
+ buf.write("\2\2\2\u04b0\u04b1\3\2\2\2\u04b1\u04b2\3\2\2\2\u04b2\u04b3")
+ buf.write("\7 \2\2\u04b3{\3\2\2\2\u04b4\u04b7\7\u00fa\2\2\u04b5\u04b7")
+ buf.write("\5V,\2\u04b6\u04b4\3\2\2\2\u04b6\u04b5\3\2\2\2\u04b7}")
+ buf.write("\3\2\2\2\u04b8\u04bb\5\u0080A\2\u04b9\u04bb\5\u0086D\2")
+ buf.write("\u04ba\u04b8\3\2\2\2\u04ba\u04b9\3\2\2\2\u04bb\177\3\2")
+ buf.write("\2\2\u04bc\u04ec\7n\2\2\u04bd\u04be\7*\2\2\u04be\u04bf")
+ buf.write("\7\b\2\2\u04bf\u04c0\7\u00ec\2\2\u04c0\u04c1\7\30\2\2")
+ buf.write("\u04c1\u04c2\7\u00fa\2\2\u04c2\u04c3\7\31\2\2\u04c3\u04c4")
+ buf.write("\7!\2\2\u04c4\u04c5\7o\2\2\u04c5\u04c6\7\b\2\2\u04c6\u04c7")
+ buf.write("\5L\'\2\u04c7\u04c8\7!\2\2\u04c8\u04c9\7/\2\2\u04c9\u04ca")
+ buf.write("\7\b\2\2\u04ca\u04cb\7\u00fa\2\2\u04cb\u04cc\7!\2\2\u04cc")
+ buf.write("\u04cd\7\u0090\2\2\u04cd\u04ce\7\b\2\2\u04ce\u04cf\7\u00fa")
+ buf.write("\2\2\u04cf\u04d0\7!\2\2\u04d0\u04ed\3\2\2\2\u04d1\u04d2")
+ buf.write("\7o\2\2\u04d2\u04d3\7\b\2\2\u04d3\u04d4\5L\'\2\u04d4\u04d5")
+ buf.write("\7!\2\2\u04d5\u04d6\7/\2\2\u04d6\u04d7\7\b\2\2\u04d7\u04d8")
+ buf.write("\7\u00fa\2\2\u04d8\u04d9\7!\2\2\u04d9\u04da\7\u0090\2")
+ buf.write("\2\u04da\u04db\7\b\2\2\u04db\u04dc\7\u00fa\2\2\u04dc\u04dd")
+ buf.write("\7!\2\2\u04dd\u04ed\3\2\2\2\u04de\u04df\7/\2\2\u04df\u04e0")
+ buf.write("\7\b\2\2\u04e0\u04e1\7\u00fa\2\2\u04e1\u04e2\7!\2\2\u04e2")
+ buf.write("\u04e3\7\u0090\2\2\u04e3\u04e8\7\b\2\2\u04e4\u04e5\7\u00fb")
+ buf.write("\2\2\u04e5\u04e9\7!\2\2\u04e6\u04e7\7\u00fa\2\2\u04e7")
+ buf.write("\u04e9\7!\2\2\u04e8\u04e4\3\2\2\2\u04e8\u04e6\3\2\2\2")
+ buf.write("\u04e9\u04ed\3\2\2\2\u04ea\u04eb\7\u00fa\2\2\u04eb\u04ed")
+ buf.write("\7!\2\2\u04ec\u04bd\3\2\2\2\u04ec\u04d1\3\2\2\2\u04ec")
+ buf.write("\u04de\3\2\2\2\u04ec\u04ea\3\2\2\2\u04ec\u04ed\3\2\2\2")
+ buf.write("\u04ed\u04ee\3\2\2\2\u04ee\u04f3\5P)\2\u04ef\u04f0\7!")
+ buf.write("\2\2\u04f0\u04f1\7@\2\2\u04f1\u04f2\7\b\2\2\u04f2\u04f4")
+ buf.write("\5\u0082B\2\u04f3\u04ef\3\2\2\2\u04f3\u04f4\3\2\2\2\u04f4")
+ buf.write("\u04f9\3\2\2\2\u04f5\u04f6\7!\2\2\u04f6\u04f7\7t\2\2\u04f7")
+ buf.write("\u04f8\7\b\2\2\u04f8\u04fa\7\u00fa\2\2\u04f9\u04f5\3\2")
+ buf.write("\2\2\u04f9\u04fa\3\2\2\2\u04fa\u04fd\3\2\2\2\u04fb\u04fc")
+ buf.write("\7!\2\2\u04fc\u04fe\5\u00b4[\2\u04fd\u04fb\3\2\2\2\u04fd")
+ buf.write("\u04fe\3\2\2\2\u04fe\u04ff\3\2\2\2\u04ff\u0500\7 \2\2")
+ buf.write("\u0500\u0081\3\2\2\2\u0501\u0506\5\u0084C\2\u0502\u0503")
+ buf.write("\7(\2\2\u0503\u0505\5\u0084C\2\u0504\u0502\3\2\2\2\u0505")
+ buf.write("\u0508\3\2\2\2\u0506\u0504\3\2\2\2\u0506\u0507\3\2\2\2")
+ buf.write("\u0507\u0083\3\2\2\2\u0508\u0506\3\2\2\2\u0509\u050c\7")
+ buf.write("\u00fa\2\2\u050a\u050c\5V,\2\u050b\u0509\3\2\2\2\u050b")
+ buf.write("\u050a\3\2\2\2\u050c\u0085\3\2\2\2\u050d\u050e\7\u0099")
+ buf.write("\2\2\u050e\u050f\7\u009b\2\2\u050f\u0510\7\b\2\2\u0510")
+ buf.write("\u0511\7\u00fb\2\2\u0511\u0512\7!\2\2\u0512\u0513\5T+")
+ buf.write("\2\u0513\u0517\7!\2\2\u0514\u0515\5b\62\2\u0515\u0516")
+ buf.write("\7!\2\2\u0516\u0518\3\2\2\2\u0517\u0514\3\2\2\2\u0517")
+ buf.write("\u0518\3\2\2\2\u0518\u0519\3\2\2\2\u0519\u051a\7\u009a")
+ buf.write("\2\2\u051a\u051b\7 \2\2\u051b\u0087\3\2\2\2\u051c\u0523")
+ buf.write("\5\u00b8]\2\u051d\u0523\5\u00e8u\2\u051e\u0523\5\u00c6")
+ buf.write("d\2\u051f\u0523\5\u00d4k\2\u0520\u0523\5\u00e2r\2\u0521")
+ buf.write("\u0523\5\u00f0y\2\u0522\u051c\3\2\2\2\u0522\u051d\3\2")
+ buf.write("\2\2\u0522\u051e\3\2\2\2\u0522\u051f\3\2\2\2\u0522\u0520")
+ buf.write("\3\2\2\2\u0522\u0521\3\2\2\2\u0523\u0089\3\2\2\2\u0524")
+ buf.write("\u0525\5`\61\2\u0525\u0526\7!\2\2\u0526\u0530\3\2\2\2")
+ buf.write("\u0527\u0530\5\u008cG\2\u0528\u0530\5\u008eH\2\u0529\u0530")
+ buf.write("\5\u0090I\2\u052a\u0530\5\u0092J\2\u052b\u0530\5\u0094")
+ buf.write("K\2\u052c\u0530\5\u011c\u008f\2\u052d\u0530\5\u0096L\2")
+ buf.write("\u052e\u0530\5\u0098M\2\u052f\u0524\3\2\2\2\u052f\u0527")
+ buf.write("\3\2\2\2\u052f\u0528\3\2\2\2\u052f\u0529\3\2\2\2\u052f")
+ buf.write("\u052a\3\2\2\2\u052f\u052b\3\2\2\2\u052f\u052c\3\2\2\2")
+ buf.write("\u052f\u052d\3\2\2\2\u052f\u052e\3\2\2\2\u0530\u008b\3")
+ buf.write("\2\2\2\u0531\u0532\7p\2\2\u0532\u0533\7\62\2\2\u0533\u0534")
+ buf.write("\7\b\2\2\u0534\u0535\7\u00ec\2\2\u0535\u0536\7\30\2\2")
+ buf.write("\u0536\u0537\7\u00fa\2\2\u0537\u0538\7\31\2\2\u0538\u0545")
+ buf.write("\7!\2\2\u0539\u053a\7@\2\2\u053a\u053b\7\b\2\2\u053b\u0540")
+ buf.write("\5\u009eP\2\u053c\u053d\7(\2\2\u053d\u053f\5\u009eP\2")
+ buf.write("\u053e\u053c\3\2\2\2\u053f\u0542\3\2\2\2\u0540\u053e\3")
+ buf.write("\2\2\2\u0540\u0541\3\2\2\2\u0541\u0543\3\2\2\2\u0542\u0540")
+ buf.write("\3\2\2\2\u0543\u0544\7!\2\2\u0544\u0546\3\2\2\2\u0545")
+ buf.write("\u0539\3\2\2\2\u0545\u0546\3\2\2\2\u0546\u0547\3\2\2\2")
+ buf.write("\u0547\u0548\5\u0124\u0093\2\u0548\u054a\7s\2\2\u0549")
+ buf.write("\u054b\7 \2\2\u054a\u0549\3\2\2\2\u054a\u054b\3\2\2\2")
+ buf.write("\u054b\u008d\3\2\2\2\u054c\u054d\7r\2\2\u054d\u054e\7")
+ buf.write("\62\2\2\u054e\u054f\7\b\2\2\u054f\u0550\7\u00ec\2\2\u0550")
+ buf.write("\u0551\7\30\2\2\u0551\u0552\7\u00fa\2\2\u0552\u0553\7")
+ buf.write("\31\2\2\u0553\u0560\7!\2\2\u0554\u0555\7@\2\2\u0555\u0556")
+ buf.write("\7\b\2\2\u0556\u055b\5\u009eP\2\u0557\u0558\7(\2\2\u0558")
+ buf.write("\u055a\5\u009eP\2\u0559\u0557\3\2\2\2\u055a\u055d\3\2")
+ buf.write("\2\2\u055b\u0559\3\2\2\2\u055b\u055c\3\2\2\2\u055c\u055e")
+ buf.write("\3\2\2\2\u055d\u055b\3\2\2\2\u055e\u055f\7!\2\2\u055f")
+ buf.write("\u0561\3\2\2\2\u0560\u0554\3\2\2\2\u0560\u0561\3\2\2\2")
+ buf.write("\u0561\u0562\3\2\2\2\u0562\u0563\5\u0124\u0093\2\u0563")
+ buf.write("\u0565\7s\2\2\u0564\u0566\7 \2\2\u0565\u0564\3\2\2\2\u0565")
+ buf.write("\u0566\3\2\2\2\u0566\u008f\3\2\2\2\u0567\u0568\7l\2\2")
+ buf.write("\u0568\u0569\5\u0124\u0093\2\u0569\u056a\7 \2\2\u056a")
+ buf.write("\u056b\5\u00b4[\2\u056b\u056d\7s\2\2\u056c\u056e\7 \2")
+ buf.write("\2\u056d\u056c\3\2\2\2\u056d\u056e\3\2\2\2\u056e\u0091")
+ buf.write("\3\2\2\2\u056f\u0570\7\u00a4\2\2\u0570\u0571\7\u00a5\2")
+ buf.write("\2\u0571\u0572\7\b\2\2\u0572\u0573\7\u00fa\2\2\u0573\u0093")
+ buf.write("\3\2\2\2\u0574\u0575\7\u00a6\2\2\u0575\u0576\7\b\2\2\u0576")
+ buf.write("\u0577\7\u00ec\2\2\u0577\u0578\7\30\2\2\u0578\u0579\7")
+ buf.write("\u00fa\2\2\u0579\u057a\7\31\2\2\u057a\u057b\7!\2\2\u057b")
+ buf.write("\u0095\3\2\2\2\u057c\u057d\7\u00eb\2\2\u057d\u057e\7\b")
+ buf.write("\2\2\u057e\u057f\5L\'\2\u057f\u0580\7!\2\2\u0580\u0097")
+ buf.write("\3\2\2\2\u0581\u0582\7q\2\2\u0582\u0583\7\62\2\2\u0583")
+ buf.write("\u0584\7\b\2\2\u0584\u0585\7\u00ec\2\2\u0585\u0586\7\30")
+ buf.write("\2\2\u0586\u0587\7\u00fa\2\2\u0587\u0588\7\31\2\2\u0588")
+ buf.write("\u058d\7!\2\2\u0589\u058a\7M\2\2\u058a\u058b\7\b\2\2\u058b")
+ buf.write("\u058c\7\u00fa\2\2\u058c\u058e\7!\2\2\u058d\u0589\3\2")
+ buf.write("\2\2\u058d\u058e\3\2\2\2\u058e\u058f\3\2\2\2\u058f\u0590")
+ buf.write("\5\u0124\u0093\2\u0590\u0592\7s\2\2\u0591\u0593\7 \2\2")
+ buf.write("\u0592\u0591\3\2\2\2\u0592\u0593\3\2\2\2\u0593\u0099\3")
+ buf.write("\2\2\2\u0594\u0596\5\u008aF\2\u0595\u0594\3\2\2\2\u0596")
+ buf.write("\u0599\3\2\2\2\u0597\u0595\3\2\2\2\u0597\u0598\3\2\2\2")
+ buf.write("\u0598\u009b\3\2\2\2\u0599\u0597\3\2\2\2\u059a\u05a2\5")
+ buf.write("\u00a0Q\2\u059b\u05a2\5\u00a2R\2\u059c\u05a2\5\u00a6T")
+ buf.write("\2\u059d\u05a2\5\u00a4S\2\u059e\u05a2\5\u00a8U\2\u059f")
+ buf.write("\u05a2\5\u00b0Y\2\u05a0\u05a2\5\u00b2Z\2\u05a1\u059a\3")
+ buf.write("\2\2\2\u05a1\u059b\3\2\2\2\u05a1\u059c\3\2\2\2\u05a1\u059d")
+ buf.write("\3\2\2\2\u05a1\u059e\3\2\2\2\u05a1\u059f\3\2\2\2\u05a1")
+ buf.write("\u05a0\3\2\2\2\u05a2\u009d\3\2\2\2\u05a3\u05ac\7\u00fa")
+ buf.write("\2\2\u05a4\u05ac\7y\2\2\u05a5\u05ac\7v\2\2\u05a6\u05ac")
+ buf.write("\7u\2\2\u05a7\u05ac\7{\2\2\u05a8\u05ac\7|\2\2\u05a9\u05ac")
+ buf.write("\7z\2\2\u05aa\u05ac\7}\2\2\u05ab\u05a3\3\2\2\2\u05ab\u05a4")
+ buf.write("\3\2\2\2\u05ab\u05a5\3\2\2\2\u05ab\u05a6\3\2\2\2\u05ab")
+ buf.write("\u05a7\3\2\2\2\u05ab\u05a8\3\2\2\2\u05ab\u05a9\3\2\2\2")
+ buf.write("\u05ab\u05aa\3\2\2\2\u05ac\u009f\3\2\2\2\u05ad\u05ae\7")
+ buf.write("k\2\2\u05ae\u05af\5\u0124\u0093\2\u05af\u05bc\7 \2\2\u05b0")
+ buf.write("\u05b1\7@\2\2\u05b1\u05b2\7\b\2\2\u05b2\u05b7\5\u009e")
+ buf.write("P\2\u05b3\u05b4\7(\2\2\u05b4\u05b6\5\u009eP\2\u05b5\u05b3")
+ buf.write("\3\2\2\2\u05b6\u05b9\3\2\2\2\u05b7\u05b5\3\2\2\2\u05b7")
+ buf.write("\u05b8\3\2\2\2\u05b8\u05ba\3\2\2\2\u05b9\u05b7\3\2\2\2")
+ buf.write("\u05ba\u05bb\7!\2\2\u05bb\u05bd\3\2\2\2\u05bc\u05b0\3")
+ buf.write("\2\2\2\u05bc\u05bd\3\2\2\2\u05bd\u05be\3\2\2\2\u05be\u05bf")
+ buf.write("\5\u00b4[\2\u05bf\u05c1\7s\2\2\u05c0\u05c2\7 \2\2\u05c1")
+ buf.write("\u05c0\3\2\2\2\u05c1\u05c2\3\2\2\2\u05c2\u00a1\3\2\2\2")
+ buf.write("\u05c3\u05c4\7K\2\2\u05c4\u05c5\5\u0124\u0093\2\u05c5")
+ buf.write("\u05d2\7 \2\2\u05c6\u05c7\7@\2\2\u05c7\u05c8\7\b\2\2\u05c8")
+ buf.write("\u05cd\5\u009eP\2\u05c9\u05ca\7(\2\2\u05ca\u05cc\5\u009e")
+ buf.write("P\2\u05cb\u05c9\3\2\2\2\u05cc\u05cf\3\2\2\2\u05cd\u05cb")
+ buf.write("\3\2\2\2\u05cd\u05ce\3\2\2\2\u05ce\u05d0\3\2\2\2\u05cf")
+ buf.write("\u05cd\3\2\2\2\u05d0\u05d1\7!\2\2\u05d1\u05d3\3\2\2\2")
+ buf.write("\u05d2\u05c6\3\2\2\2\u05d2\u05d3\3\2\2\2\u05d3\u05d4\3")
+ buf.write("\2\2\2\u05d4\u05d5\5\u00b4[\2\u05d5\u05d7\7s\2\2\u05d6")
+ buf.write("\u05d8\7 \2\2\u05d7\u05d6\3\2\2\2\u05d7\u05d8\3\2\2\2")
+ buf.write("\u05d8\u00a3\3\2\2\2\u05d9\u05e1\7c\2\2\u05da\u05db\5")
+ buf.write("\u00a6T\2\u05db\u05dc\7!\2\2\u05dc\u05e2\3\2\2\2\u05dd")
+ buf.write("\u05de\7\b\2\2\u05de\u05df\5Z.\2\u05df\u05e0\7!\2\2\u05e0")
+ buf.write("\u05e2\3\2\2\2\u05e1\u05da\3\2\2\2\u05e1\u05dd\3\2\2\2")
+ buf.write("\u05e2\u05e7\3\2\2\2\u05e3\u05e4\7\u009b\2\2\u05e4\u05e5")
+ buf.write("\7\b\2\2\u05e5\u05e6\7\u00fb\2\2\u05e6\u05e8\7!\2\2\u05e7")
+ buf.write("\u05e3\3\2\2\2\u05e7\u05e8\3\2\2\2\u05e8\u00a5\3\2\2\2")
+ buf.write("\u05e9\u05ea\7\u0096\2\2\u05ea\u05eb\7\b\2\2\u05eb\u05ec")
+ buf.write("\5\u0124\u0093\2\u05ec\u00a7\3\2\2\2\u05ed\u05ee\5\u00aa")
+ buf.write("V\2\u05ee\u00a9\3\2\2\2\u05ef\u05f0\7?\2\2\u05f0\u05f1")
+ buf.write("\7>\2\2\u05f1\u05f2\7\b\2\2\u05f2\u05f3\7\u00ec\2\2\u05f3")
+ buf.write("\u05f4\7\30\2\2\u05f4\u05f5\7\u00fa\2\2\u05f5\u05f6\7")
+ buf.write("\31\2\2\u05f6\u05f7\7!\2\2\u05f7\u05f8\7\u0096\2\2\u05f8")
+ buf.write("\u05f9\7\b\2\2\u05f9\u05fa\5Z.\2\u05fa\u05fb\7!\2\2\u05fb")
+ buf.write("\u05fc\7@\2\2\u05fc\u05fd\7\b\2\2\u05fd\u0602\5\u00ac")
+ buf.write("W\2\u05fe\u05ff\7!\2\2\u05ff\u0600\7t\2\2\u0600\u0601")
+ buf.write("\7\b\2\2\u0601\u0603\7\u00fa\2\2\u0602\u05fe\3\2\2\2\u0602")
+ buf.write("\u0603\3\2\2\2\u0603\u0608\3\2\2\2\u0604\u0605\7!\2\2")
+ buf.write("\u0605\u0607\5\\/\2\u0606\u0604\3\2\2\2\u0607\u060a\3")
+ buf.write("\2\2\2\u0608\u0606\3\2\2\2\u0608\u0609\3\2\2\2\u0609\u060b")
+ buf.write("\3\2\2\2\u060a\u0608\3\2\2\2\u060b\u060c\7 \2\2\u060c")
+ buf.write("\u00ab\3\2\2\2\u060d\u0612\5\u00aeX\2\u060e\u060f\7(\2")
+ buf.write("\2\u060f\u0611\5\u00aeX\2\u0610\u060e\3\2\2\2\u0611\u0614")
+ buf.write("\3\2\2\2\u0612\u0610\3\2\2\2\u0612\u0613\3\2\2\2\u0613")
+ buf.write("\u00ad\3\2\2\2\u0614\u0612\3\2\2\2\u0615\u0621\7\u00fa")
+ buf.write("\2\2\u0616\u0621\7\u00ed\2\2\u0617\u0621\7\u00ee\2\2\u0618")
+ buf.write("\u0621\7y\2\2\u0619\u0621\7{\2\2\u061a\u0621\7\u0080\2")
+ buf.write("\2\u061b\u0621\7|\2\2\u061c\u0621\7v\2\2\u061d\u0621\7")
+ buf.write("u\2\2\u061e\u0621\7z\2\2\u061f\u0621\7}\2\2\u0620\u0615")
+ buf.write("\3\2\2\2\u0620\u0616\3\2\2\2\u0620\u0617\3\2\2\2\u0620")
+ buf.write("\u0618\3\2\2\2\u0620\u0619\3\2\2\2\u0620\u061a\3\2\2\2")
+ buf.write("\u0620\u061b\3\2\2\2\u0620\u061c\3\2\2\2\u0620\u061d\3")
+ buf.write("\2\2\2\u0620\u061e\3\2\2\2\u0620\u061f\3\2\2\2\u0621\u00af")
+ buf.write("\3\2\2\2\u0622\u0623\7\u0097\2\2\u0623\u0624\5\u0124\u0093")
+ buf.write("\2\u0624\u0625\7 \2\2\u0625\u00b1\3\2\2\2\u0626\u0627")
+ buf.write("\7\u0098\2\2\u0627\u0628\5\u0124\u0093\2\u0628\u0629\7")
+ buf.write(" \2\2\u0629\u00b3\3\2\2\2\u062a\u062c\5\u00b6\\\2\u062b")
+ buf.write("\u062a\3\2\2\2\u062c\u062f\3\2\2\2\u062d\u062b\3\2\2\2")
+ buf.write("\u062d\u062e\3\2\2\2\u062e\u00b5\3\2\2\2\u062f\u062d\3")
+ buf.write("\2\2\2\u0630\u0633\5\u008aF\2\u0631\u0633\5\u009cO\2\u0632")
+ buf.write("\u0630\3\2\2\2\u0632\u0631\3\2\2\2\u0633\u00b7\3\2\2\2")
+ buf.write("\u0634\u0637\5\u00ba^\2\u0635\u0637\5\u00c0a\2\u0636\u0634")
+ buf.write("\3\2\2\2\u0636\u0635\3\2\2\2\u0637\u00b9\3\2\2\2\u0638")
+ buf.write("\u0639\7\\\2\2\u0639\u063a\5R*\2\u063a\u063b\5T+\2\u063b")
+ buf.write("\u0641\7!\2\2\u063c\u063d\7@\2\2\u063d\u063e\7\b\2\2\u063e")
+ buf.write("\u063f\5\u00bc_\2\u063f\u0640\7!\2\2\u0640\u0642\3\2\2")
+ buf.write("\2\u0641\u063c\3\2\2\2\u0641\u0642\3\2\2\2\u0642\u0647")
+ buf.write("\3\2\2\2\u0643\u0644\7t\2\2\u0644\u0645\7\b\2\2\u0645")
+ buf.write("\u0646\7\u00fa\2\2\u0646\u0648\7!\2\2\u0647\u0643\3\2")
+ buf.write("\2\2\u0647\u0648\3\2\2\2\u0648\u0649\3\2\2\2\u0649\u064a")
+ buf.write("\5\u00b4[\2\u064a\u064b\7]\2\2\u064b\u064c\7 \2\2\u064c")
+ buf.write("\u00bb\3\2\2\2\u064d\u0652\5\u00be`\2\u064e\u064f\7(\2")
+ buf.write("\2\u064f\u0651\5\u00be`\2\u0650\u064e\3\2\2\2\u0651\u0654")
+ buf.write("\3\2\2\2\u0652\u0650\3\2\2\2\u0652\u0653\3\2\2\2\u0653")
+ buf.write("\u00bd\3\2\2\2\u0654\u0652\3\2\2\2\u0655\u065c\7\u00fa")
+ buf.write("\2\2\u0656\u065c\7u\2\2\u0657\u065c\7v\2\2\u0658\u065c")
+ buf.write("\7w\2\2\u0659\u065c\7x\2\2\u065a\u065c\5V,\2\u065b\u0655")
+ buf.write("\3\2\2\2\u065b\u0656\3\2\2\2\u065b\u0657\3\2\2\2\u065b")
+ buf.write("\u0658\3\2\2\2\u065b\u0659\3\2\2\2\u065b\u065a\3\2\2\2")
+ buf.write("\u065c\u00bf\3\2\2\2\u065d\u065e\7\u00a1\2\2\u065e\u065f")
+ buf.write("\5P)\2\u065f\u0665\7!\2\2\u0660\u0661\7@\2\2\u0661\u0662")
+ buf.write("\7\b\2\2\u0662\u0663\5\u00c2b\2\u0663\u0664\7!\2\2\u0664")
+ buf.write("\u0666\3\2\2\2\u0665\u0660\3\2\2\2\u0665\u0666\3\2\2\2")
+ buf.write("\u0666\u0667\3\2\2\2\u0667\u0668\7\u00a2\2\2\u0668\u0669")
+ buf.write("\7\b\2\2\u0669\u066a\7\u00ec\2\2\u066a\u066b\7\30\2\2")
+ buf.write("\u066b\u066c\7\u00fa\2\2\u066c\u066d\7\31\2\2\u066d\u066e")
+ buf.write("\7!\2\2\u066e\u066f\5\u009aN\2\u066f\u0670\7\u00a3\2\2")
+ buf.write("\u0670\u0671\7 \2\2\u0671\u00c1\3\2\2\2\u0672\u0677\5")
+ buf.write("\u00c4c\2\u0673\u0674\7(\2\2\u0674\u0676\5\u00c4c\2\u0675")
+ buf.write("\u0673\3\2\2\2\u0676\u0679\3\2\2\2\u0677\u0675\3\2\2\2")
+ buf.write("\u0677\u0678\3\2\2\2\u0678\u00c3\3\2\2\2\u0679\u0677\3")
+ buf.write("\2\2\2\u067a\u067d\7\u00fa\2\2\u067b\u067d\5V,\2\u067c")
+ buf.write("\u067a\3\2\2\2\u067c\u067b\3\2\2\2\u067d\u00c5\3\2\2\2")
+ buf.write("\u067e\u0681\5\u00c8e\2\u067f\u0681\5\u00d0i\2\u0680\u067e")
+ buf.write("\3\2\2\2\u0680\u067f\3\2\2\2\u0681\u00c7\3\2\2\2\u0682")
+ buf.write("\u0683\7^\2\2\u0683\u0684\5R*\2\u0684\u0685\5T+\2\u0685")
+ buf.write("\u068b\7!\2\2\u0686\u0687\7@\2\2\u0687\u0688\7\b\2\2\u0688")
+ buf.write("\u0689\5\u00ccg\2\u0689\u068a\7!\2\2\u068a\u068c\3\2\2")
+ buf.write("\2\u068b\u0686\3\2\2\2\u068b\u068c\3\2\2\2\u068c\u0691")
+ buf.write("\3\2\2\2\u068d\u068e\7t\2\2\u068e\u068f\7\b\2\2\u068f")
+ buf.write("\u0690\7\u00fa\2\2\u0690\u0692\7!\2\2\u0691\u068d\3\2")
+ buf.write("\2\2\u0691\u0692\3\2\2\2\u0692\u0693\3\2\2\2\u0693\u0694")
+ buf.write("\5\u00caf\2\u0694\u0695\5\u00b4[\2\u0695\u0696\7_\2\2")
+ buf.write("\u0696\u0697\7 \2\2\u0697\u00c9\3\2\2\2\u0698\u0699\7")
+ buf.write("`\2\2\u0699\u069b\7\b\2\2\u069a\u069c\7\35\2\2\u069b\u069a")
+ buf.write("\3\2\2\2\u069b\u069c\3\2\2\2\u069c\u069d\3\2\2\2\u069d")
+ buf.write("\u069e\7\u00fa\2\2\u069e\u069f\7!\2\2\u069f\u06a0\7a\2")
+ buf.write("\2\u06a0\u06a2\7\b\2\2\u06a1\u06a3\7\35\2\2\u06a2\u06a1")
+ buf.write("\3\2\2\2\u06a2\u06a3\3\2\2\2\u06a3\u06a4\3\2\2\2\u06a4")
+ buf.write("\u06a5\7\u00fa\2\2\u06a5\u06aa\7!\2\2\u06a6\u06a7\7b\2")
+ buf.write("\2\u06a7\u06a8\7\b\2\2\u06a8\u06a9\7\u00fa\2\2\u06a9\u06ab")
+ buf.write("\7!\2\2\u06aa\u06a6\3\2\2\2\u06aa\u06ab\3\2\2\2\u06ab")
+ buf.write("\u00cb\3\2\2\2\u06ac\u06b1\5\u00ceh\2\u06ad\u06ae\7(\2")
+ buf.write("\2\u06ae\u06b0\5\u00ceh\2\u06af\u06ad\3\2\2\2\u06b0\u06b3")
+ buf.write("\3\2\2\2\u06b1\u06af\3\2\2\2\u06b1\u06b2\3\2\2\2\u06b2")
+ buf.write("\u00cd\3\2\2\2\u06b3\u06b1\3\2\2\2\u06b4\u06be\7\u00fa")
+ buf.write("\2\2\u06b5\u06be\7\u00ef\2\2\u06b6\u06be\7\u00f0\2\2\u06b7")
+ buf.write("\u06be\7\u00f1\2\2\u06b8\u06be\7\u00f2\2\2\u06b9\u06be")
+ buf.write("\7\u00f3\2\2\u06ba\u06be\7\u00f4\2\2\u06bb\u06be\7\u00f5")
+ buf.write("\2\2\u06bc\u06be\5V,\2\u06bd\u06b4\3\2\2\2\u06bd\u06b5")
+ buf.write("\3\2\2\2\u06bd\u06b6\3\2\2\2\u06bd\u06b7\3\2\2\2\u06bd")
+ buf.write("\u06b8\3\2\2\2\u06bd\u06b9\3\2\2\2\u06bd\u06ba\3\2\2\2")
+ buf.write("\u06bd\u06bb\3\2\2\2\u06bd\u06bc\3\2\2\2\u06be\u00cf\3")
+ buf.write("\2\2\2\u06bf\u06c0\7\60\2\2\u06c0\u06c1\5R*\2\u06c1\u06c2")
+ buf.write("\5T+\2\u06c2\u06c8\7!\2\2\u06c3\u06c4\7@\2\2\u06c4\u06c5")
+ buf.write("\7\b\2\2\u06c5\u06c6\5\u00d2j\2\u06c6\u06c7\7!\2\2\u06c7")
+ buf.write("\u06c9\3\2\2\2\u06c8\u06c3\3\2\2\2\u06c8\u06c9\3\2\2\2")
+ buf.write("\u06c9\u06cb\3\2\2\2\u06ca\u06cc\5\u00caf\2\u06cb\u06ca")
+ buf.write("\3\2\2\2\u06cb\u06cc\3\2\2\2\u06cc\u06cd\3\2\2\2\u06cd")
+ buf.write("\u06ce\5\u00b4[\2\u06ce\u06cf\7\61\2\2\u06cf\u06d0\7 ")
+ buf.write("\2\2\u06d0\u00d1\3\2\2\2\u06d1\u06d6\5\u00ceh\2\u06d2")
+ buf.write("\u06d3\7(\2\2\u06d3\u06d5\5\u00ceh\2\u06d4\u06d2\3\2\2")
+ buf.write("\2\u06d5\u06d8\3\2\2\2\u06d6\u06d4\3\2\2\2\u06d6\u06d7")
+ buf.write("\3\2\2\2\u06d7\u00d3\3\2\2\2\u06d8\u06d6\3\2\2\2\u06d9")
+ buf.write("\u06dc\5\u00d6l\2\u06da\u06dc\5\u00dco\2\u06db\u06d9\3")
+ buf.write("\2\2\2\u06db\u06da\3\2\2\2\u06dc\u00d5\3\2\2\2\u06dd\u06de")
+ buf.write("\7f\2\2\u06de\u06df\5P)\2\u06df\u06e5\7!\2\2\u06e0\u06e1")
+ buf.write("\7@\2\2\u06e1\u06e2\7\b\2\2\u06e2\u06e3\5\u00d8m\2\u06e3")
+ buf.write("\u06e4\7!\2\2\u06e4\u06e6\3\2\2\2\u06e5\u06e0\3\2\2\2")
+ buf.write("\u06e5\u06e6\3\2\2\2\u06e6\u06eb\3\2\2\2\u06e7\u06e8\7")
+ buf.write("t\2\2\u06e8\u06e9\7\b\2\2\u06e9\u06ea\7\u00fa\2\2\u06ea")
+ buf.write("\u06ec\7!\2\2\u06eb\u06e7\3\2\2\2\u06eb\u06ec\3\2\2\2")
+ buf.write("\u06ec\u06ed\3\2\2\2\u06ed\u06ee\7h\2\2\u06ee\u06ef\7")
+ buf.write("\b\2\2\u06ef\u06f0\7\u00fa\2\2\u06f0\u06f1\7!\2\2\u06f1")
+ buf.write("\u06f2\7i\2\2\u06f2\u06f3\7\b\2\2\u06f3\u06f4\7\u00fa")
+ buf.write("\2\2\u06f4\u06f5\7!\2\2\u06f5\u06f6\5\u00b4[\2\u06f6\u06f7")
+ buf.write("\7g\2\2\u06f7\u06f8\7 \2\2\u06f8\u00d7\3\2\2\2\u06f9\u06fe")
+ buf.write("\5\u00dan\2\u06fa\u06fb\7(\2\2\u06fb\u06fd\5\u00dan\2")
+ buf.write("\u06fc\u06fa\3\2\2\2\u06fd\u0700\3\2\2\2\u06fe\u06fc\3")
+ buf.write("\2\2\2\u06fe\u06ff\3\2\2\2\u06ff\u00d9\3\2\2\2\u0700\u06fe")
+ buf.write("\3\2\2\2\u0701\u0705\7\u00fa\2\2\u0702\u0705\7\13\2\2")
+ buf.write("\u0703\u0705\5V,\2\u0704\u0701\3\2\2\2\u0704\u0702\3\2")
+ buf.write("\2\2\u0704\u0703\3\2\2\2\u0705\u00db\3\2\2\2\u0706\u0707")
+ buf.write("\7d\2\2\u0707\u0708\5P)\2\u0708\u070e\7!\2\2\u0709\u070a")
+ buf.write("\7@\2\2\u070a\u070b\7\b\2\2\u070b\u070c\5\u00dep\2\u070c")
+ buf.write("\u070d\7!\2\2\u070d\u070f\3\2\2\2\u070e\u0709\3\2\2\2")
+ buf.write("\u070e\u070f\3\2\2\2\u070f\u0714\3\2\2\2\u0710\u0711\7")
+ buf.write("t\2\2\u0711\u0712\7\b\2\2\u0712\u0713\7\u00fa\2\2\u0713")
+ buf.write("\u0715\7!\2\2\u0714\u0710\3\2\2\2\u0714\u0715\3\2\2\2")
+ buf.write("\u0715\u0716\3\2\2\2\u0716\u0717\7h\2\2\u0717\u0718\7")
+ buf.write("\b\2\2\u0718\u0719\7\u00fa\2\2\u0719\u071a\7!\2\2\u071a")
+ buf.write("\u071b\7i\2\2\u071b\u071c\7\b\2\2\u071c\u071d\7\u00fa")
+ buf.write("\2\2\u071d\u0722\7!\2\2\u071e\u071f\7j\2\2\u071f\u0720")
+ buf.write("\7\b\2\2\u0720\u0721\7\u00fa\2\2\u0721\u0723\7!\2\2\u0722")
+ buf.write("\u071e\3\2\2\2\u0722\u0723\3\2\2\2\u0723\u0724\3\2\2\2")
+ buf.write("\u0724\u0725\5\u00b4[\2\u0725\u0726\7e\2\2\u0726\u0727")
+ buf.write("\7 \2\2\u0727\u00dd\3\2\2\2\u0728\u072d\5\u00e0q\2\u0729")
+ buf.write("\u072a\7(\2\2\u072a\u072c\5\u00e0q\2\u072b\u0729\3\2\2")
+ buf.write("\2\u072c\u072f\3\2\2\2\u072d\u072b\3\2\2\2\u072d\u072e")
+ buf.write("\3\2\2\2\u072e\u00df\3\2\2\2\u072f\u072d\3\2\2\2\u0730")
+ buf.write("\u0733\7\u00fa\2\2\u0731\u0733\5V,\2\u0732\u0730\3\2\2")
+ buf.write("\2\u0732\u0731\3\2\2\2\u0733\u00e1\3\2\2\2\u0734\u0735")
+ buf.write("\7\63\2\2\u0735\u0736\5P)\2\u0736\u073b\7!\2\2\u0737\u0738")
+ buf.write("\7\64\2\2\u0738\u0739\7\b\2\2\u0739\u073a\7\u00fa\2\2")
+ buf.write("\u073a\u073c\7!\2\2\u073b\u0737\3\2\2\2\u073b\u073c\3")
+ buf.write("\2\2\2\u073c\u0742\3\2\2\2\u073d\u073e\7@\2\2\u073e\u073f")
+ buf.write("\7\b\2\2\u073f\u0740\5\u00e4s\2\u0740\u0741\7!\2\2\u0741")
+ buf.write("\u0743\3\2\2\2\u0742\u073d\3\2\2\2\u0742\u0743\3\2\2\2")
+ buf.write("\u0743\u0744\3\2\2\2\u0744\u0745\5\u00b4[\2\u0745\u0746")
+ buf.write("\7\65\2\2\u0746\u0747\7 \2\2\u0747\u00e3\3\2\2\2\u0748")
+ buf.write("\u074d\5\u00e6t\2\u0749\u074a\7(\2\2\u074a\u074c\5\u00e6")
+ buf.write("t\2\u074b\u0749\3\2\2\2\u074c\u074f\3\2\2\2\u074d\u074b")
+ buf.write("\3\2\2\2\u074d\u074e\3\2\2\2\u074e\u00e5\3\2\2\2\u074f")
+ buf.write("\u074d\3\2\2\2\u0750\u0755\7\u00fa\2\2\u0751\u0755\7\u00c0")
+ buf.write("\2\2\u0752\u0755\7\u00c1\2\2\u0753\u0755\5V,\2\u0754\u0750")
+ buf.write("\3\2\2\2\u0754\u0751\3\2\2\2\u0754\u0752\3\2\2\2\u0754")
+ buf.write("\u0753\3\2\2\2\u0755\u00e7\3\2\2\2\u0756\u07b1\7A\2\2")
+ buf.write("\u0757\u0758\5P)\2\u0758\u075e\7!\2\2\u0759\u075a\7@\2")
+ buf.write("\2\u075a\u075b\7\b\2\2\u075b\u075c\5\u00ecw\2\u075c\u075d")
+ buf.write("\7!\2\2\u075d\u075f\3\2\2\2\u075e\u0759\3\2\2\2\u075e")
+ buf.write("\u075f\3\2\2\2\u075f\u0760\3\2\2\2\u0760\u0761\5\u00b4")
+ buf.write("[\2\u0761\u07b2\3\2\2\2\u0762\u0763\7C\2\2\u0763\u0764")
+ buf.write("\7\u008f\2\2\u0764\u0765\7\b\2\2\u0765\u0766\7\u00fb\2")
+ buf.write("\2\u0766\u0767\7\34\2\2\u0767\u0768\7\u00fb\2\2\u0768")
+ buf.write("\u0769\7!\2\2\u0769\u076a\7\62\2\2\u076a\u076b\7\b\2\2")
+ buf.write("\u076b\u076c\7\u00ec\2\2\u076c\u076d\7\30\2\2\u076d\u076e")
+ buf.write("\7\u00fa\2\2\u076e\u076f\7\31\2\2\u076f\u0770\7!\2\2\u0770")
+ buf.write("\u0771\7=\2\2\u0771\u0772\7\b\2\2\u0772\u0773\7\u00ec")
+ buf.write("\2\2\u0773\u0774\7\30\2\2\u0774\u0775\7\u00fa\2\2\u0775")
+ buf.write("\u0776\7\31\2\2\u0776\u0777\7!\2\2\u0777\u0778\5\u00ea")
+ buf.write("v\2\u0778\u0779\7D\2\2\u0779\u077a\7\u008f\2\2\u077a\u077b")
+ buf.write("\7\b\2\2\u077b\u077c\7\u00fb\2\2\u077c\u077d\7\34\2\2")
+ buf.write("\u077d\u077e\7\u00fb\2\2\u077e\u077f\7!\2\2\u077f\u0780")
+ buf.write("\7\62\2\2\u0780\u0781\7\b\2\2\u0781\u0782\7\u00ec\2\2")
+ buf.write("\u0782\u0783\7\30\2\2\u0783\u0784\7\u00fa\2\2\u0784\u0785")
+ buf.write("\7\31\2\2\u0785\u0786\7!\2\2\u0786\u0787\7=\2\2\u0787")
+ buf.write("\u0788\7\b\2\2\u0788\u0789\7\u00ec\2\2\u0789\u078a\7\30")
+ buf.write("\2\2\u078a\u078b\7\u00fa\2\2\u078b\u078c\7\31\2\2\u078c")
+ buf.write("\u078d\7!\2\2\u078d\u078e\5\u00eav\2\u078e\u078f\7E\2")
+ buf.write("\2\u078f\u0790\7\u008f\2\2\u0790\u0791\7\b\2\2\u0791\u0792")
+ buf.write("\7\u00fb\2\2\u0792\u0793\7\34\2\2\u0793\u0794\7\u00fb")
+ buf.write("\2\2\u0794\u0795\7!\2\2\u0795\u0796\7\62\2\2\u0796\u0797")
+ buf.write("\7\b\2\2\u0797\u0798\7\u00ec\2\2\u0798\u0799\7\30\2\2")
+ buf.write("\u0799\u079a\7\u00fa\2\2\u079a\u079b\7\31\2\2\u079b\u079c")
+ buf.write("\7!\2\2\u079c\u079d\7=\2\2\u079d\u079e\7\b\2\2\u079e\u079f")
+ buf.write("\7\u00ec\2\2\u079f\u07a0\7\30\2\2\u07a0\u07a1\7\u00fa")
+ buf.write("\2\2\u07a1\u07a2\7\31\2\2\u07a2\u07a3\7!\2\2\u07a3\u07a9")
+ buf.write("\5\u00eav\2\u07a4\u07a5\7@\2\2\u07a5\u07a6\7\b\2\2\u07a6")
+ buf.write("\u07a7\5\u00ecw\2\u07a7\u07a8\7!\2\2\u07a8\u07aa\3\2\2")
+ buf.write("\2\u07a9\u07a4\3\2\2\2\u07a9\u07aa\3\2\2\2\u07aa\u07ae")
+ buf.write("\3\2\2\2\u07ab\u07ad\5\u008cG\2\u07ac\u07ab\3\2\2\2\u07ad")
+ buf.write("\u07b0\3\2\2\2\u07ae\u07ac\3\2\2\2\u07ae\u07af\3\2\2\2")
+ buf.write("\u07af\u07b2\3\2\2\2\u07b0\u07ae\3\2\2\2\u07b1\u0757\3")
+ buf.write("\2\2\2\u07b1\u0762\3\2\2\2\u07b2\u07b3\3\2\2\2\u07b3\u07b4")
+ buf.write("\7B\2\2\u07b4\u07b5\7 \2\2\u07b5\u00e9\3\2\2\2\u07b6\u07b7")
+ buf.write("\7`\2\2\u07b7\u07b8\7\b\2\2\u07b8\u07b9\7\u00fa\2\2\u07b9")
+ buf.write("\u07ba\7!\2\2\u07ba\u07bb\7a\2\2\u07bb\u07bc\7\b\2\2\u07bc")
+ buf.write("\u07bd\7\u00fa\2\2\u07bd\u07c2\7!\2\2\u07be\u07bf\7b\2")
+ buf.write("\2\u07bf\u07c0\7\b\2\2\u07c0\u07c1\7\u00fa\2\2\u07c1\u07c3")
+ buf.write("\7!\2\2\u07c2\u07be\3\2\2\2\u07c2\u07c3\3\2\2\2\u07c3")
+ buf.write("\u07c8\3\2\2\2\u07c4\u07c5\7c\2\2\u07c5\u07c6\7\b\2\2")
+ buf.write("\u07c6\u07c7\7\u00fa\2\2\u07c7\u07c9\7!\2\2\u07c8\u07c4")
+ buf.write("\3\2\2\2\u07c8\u07c9\3\2\2\2\u07c9\u00eb\3\2\2\2\u07ca")
+ buf.write("\u07cf\5\u00eex\2\u07cb\u07cc\7(\2\2\u07cc\u07ce\5\u00ee")
+ buf.write("x\2\u07cd\u07cb\3\2\2\2\u07ce\u07d1\3\2\2\2\u07cf\u07cd")
+ buf.write("\3\2\2\2\u07cf\u07d0\3\2\2\2\u07d0\u00ed\3\2\2\2\u07d1")
+ buf.write("\u07cf\3\2\2\2\u07d2\u07d3\t\6\2\2\u07d3\u00ef\3\2\2\2")
+ buf.write("\u07d4\u082f\7F\2\2\u07d5\u07d6\5P)\2\u07d6\u07dc\7!\2")
+ buf.write("\2\u07d7\u07d8\7@\2\2\u07d8\u07d9\7\b\2\2\u07d9\u07da")
+ buf.write("\5\u00f4{\2\u07da\u07db\7!\2\2\u07db\u07dd\3\2\2\2\u07dc")
+ buf.write("\u07d7\3\2\2\2\u07dc\u07dd\3\2\2\2\u07dd\u07de\3\2\2\2")
+ buf.write("\u07de\u07df\5\u00b4[\2\u07df\u0830\3\2\2\2\u07e0\u07e1")
+ buf.write("\7H\2\2\u07e1\u07e2\7\u008f\2\2\u07e2\u07e3\7\b\2\2\u07e3")
+ buf.write("\u07e4\7\u00fb\2\2\u07e4\u07e5\7\34\2\2\u07e5\u07e6\7")
+ buf.write("\u00fb\2\2\u07e6\u07e7\7!\2\2\u07e7\u07e8\7\62\2\2\u07e8")
+ buf.write("\u07e9\7\b\2\2\u07e9\u07ea\7\u00ec\2\2\u07ea\u07eb\7\30")
+ buf.write("\2\2\u07eb\u07ec\7\u00fa\2\2\u07ec\u07ed\7\31\2\2\u07ed")
+ buf.write("\u07ee\7!\2\2\u07ee\u07ef\7=\2\2\u07ef\u07f0\7\b\2\2\u07f0")
+ buf.write("\u07f1\7\u00ec\2\2\u07f1\u07f2\7\30\2\2\u07f2\u07f3\7")
+ buf.write("\u00fa\2\2\u07f3\u07f4\7\31\2\2\u07f4\u07f5\7!\2\2\u07f5")
+ buf.write("\u07f6\5\u00f2z\2\u07f6\u07f7\7I\2\2\u07f7\u07f8\7\u008f")
+ buf.write("\2\2\u07f8\u07f9\7\b\2\2\u07f9\u07fa\7\u00fb\2\2\u07fa")
+ buf.write("\u07fb\7\34\2\2\u07fb\u07fc\7\u00fb\2\2\u07fc\u07fd\7")
+ buf.write("!\2\2\u07fd\u07fe\7\62\2\2\u07fe\u07ff\7\b\2\2\u07ff\u0800")
+ buf.write("\7\u00ec\2\2\u0800\u0801\7\30\2\2\u0801\u0802\7\u00fa")
+ buf.write("\2\2\u0802\u0803\7\31\2\2\u0803\u0804\7!\2\2\u0804\u0805")
+ buf.write("\7=\2\2\u0805\u0806\7\b\2\2\u0806\u0807\7\u00ec\2\2\u0807")
+ buf.write("\u0808\7\30\2\2\u0808\u0809\7\u00fa\2\2\u0809\u080a\7")
+ buf.write("\31\2\2\u080a\u080b\7!\2\2\u080b\u080c\5\u00f2z\2\u080c")
+ buf.write("\u080d\7J\2\2\u080d\u080e\7\u008f\2\2\u080e\u080f\7\b")
+ buf.write("\2\2\u080f\u0810\7\u00fb\2\2\u0810\u0811\7\34\2\2\u0811")
+ buf.write("\u0812\7\u00fb\2\2\u0812\u0813\7!\2\2\u0813\u0814\7\62")
+ buf.write("\2\2\u0814\u0815\7\b\2\2\u0815\u0816\7\u00ec\2\2\u0816")
+ buf.write("\u0817\7\30\2\2\u0817\u0818\7\u00fa\2\2\u0818\u0819\7")
+ buf.write("\31\2\2\u0819\u081a\7!\2\2\u081a\u081b\7=\2\2\u081b\u081c")
+ buf.write("\7\b\2\2\u081c\u081d\7\u00ec\2\2\u081d\u081e\7\30\2\2")
+ buf.write("\u081e\u081f\7\u00fa\2\2\u081f\u0820\7\31\2\2\u0820\u0821")
+ buf.write("\7!\2\2\u0821\u0827\5\u00f2z\2\u0822\u0823\7@\2\2\u0823")
+ buf.write("\u0824\7\b\2\2\u0824\u0825\5\u00f4{\2\u0825\u0826\7!\2")
+ buf.write("\2\u0826\u0828\3\2\2\2\u0827\u0822\3\2\2\2\u0827\u0828")
+ buf.write("\3\2\2\2\u0828\u082c\3\2\2\2\u0829\u082b\5\u008cG\2\u082a")
+ buf.write("\u0829\3\2\2\2\u082b\u082e\3\2\2\2\u082c\u082a\3\2\2\2")
+ buf.write("\u082c\u082d\3\2\2\2\u082d\u0830\3\2\2\2\u082e\u082c\3")
+ buf.write("\2\2\2\u082f\u07d5\3\2\2\2\u082f\u07e0\3\2\2\2\u0830\u0831")
+ buf.write("\3\2\2\2\u0831\u0832\7G\2\2\u0832\u0833\7 \2\2\u0833\u00f1")
+ buf.write("\3\2\2\2\u0834\u0835\7`\2\2\u0835\u0836\7\b\2\2\u0836")
+ buf.write("\u0837\7\u00fa\2\2\u0837\u0838\7!\2\2\u0838\u0839\7a\2")
+ buf.write("\2\u0839\u083a\7\b\2\2\u083a\u083b\7\u00fa\2\2\u083b\u0840")
+ buf.write("\7!\2\2\u083c\u083d\7b\2\2\u083d\u083e\7\b\2\2\u083e\u083f")
+ buf.write("\7\u00fa\2\2\u083f\u0841\7!\2\2\u0840\u083c\3\2\2\2\u0840")
+ buf.write("\u0841\3\2\2\2\u0841\u0846\3\2\2\2\u0842\u0843\7c\2\2")
+ buf.write("\u0843\u0844\7\b\2\2\u0844\u0845\7\u00fa\2\2\u0845\u0847")
+ buf.write("\7!\2\2\u0846\u0842\3\2\2\2\u0846\u0847\3\2\2\2\u0847")
+ buf.write("\u00f3\3\2\2\2\u0848\u084d\5\u00f6|\2\u0849\u084a\7(\2")
+ buf.write("\2\u084a\u084c\5\u00f6|\2\u084b\u0849\3\2\2\2\u084c\u084f")
+ buf.write("\3\2\2\2\u084d\u084b\3\2\2\2\u084d\u084e\3\2\2\2\u084e")
+ buf.write("\u00f5\3\2\2\2\u084f\u084d\3\2\2\2\u0850\u0851\t\7\2\2")
+ buf.write("\u0851\u00f7\3\2\2\2\u0852\u0857\5\u0104\u0083\2\u0853")
+ buf.write("\u0857\5\u00fc\177\2\u0854\u0857\5\u00fe\u0080\2\u0855")
+ buf.write("\u0857\5\u010e\u0088\2\u0856\u0852\3\2\2\2\u0856\u0853")
+ buf.write("\3\2\2\2\u0856\u0854\3\2\2\2\u0856\u0855\3\2\2\2\u0857")
+ buf.write("\u00f9\3\2\2\2\u0858\u0859\5\u0104\u0083\2\u0859\u085a")
+ buf.write("\5\u010a\u0086\2\u085a\u085b\5\u010c\u0087\2\u085b\u085c")
+ buf.write("\5\u010e\u0088\2\u085c\u00fb\3\2\2\2\u085d\u085e\5\u010a")
+ buf.write("\u0086\2\u085e\u00fd\3\2\2\2\u085f\u0860\5\u010c\u0087")
+ buf.write("\2\u0860\u00ff\3\2\2\2\u0861\u0868\5p9\2\u0862\u0868\5")
+ buf.write("\u0088E\2\u0863\u0868\5\u00f8}\2\u0864\u0868\5\u0118\u008d")
+ buf.write("\2\u0865\u0868\5\u011c\u008f\2\u0866\u0868\5\u0110\u0089")
+ buf.write("\2\u0867\u0861\3\2\2\2\u0867\u0862\3\2\2\2\u0867\u0863")
+ buf.write("\3\2\2\2\u0867\u0864\3\2\2\2\u0867\u0865\3\2\2\2\u0867")
+ buf.write("\u0866\3\2\2\2\u0868\u0101\3\2\2\2\u0869\u086e\5p9\2\u086a")
+ buf.write("\u086e\5\u0088E\2\u086b\u086e\5\u0118\u008d\2\u086c\u086e")
+ buf.write("\5\u0110\u0089\2\u086d\u0869\3\2\2\2\u086d\u086a\3\2\2")
+ buf.write("\2\u086d\u086b\3\2\2\2\u086d\u086c\3\2\2\2\u086e\u0103")
+ buf.write("\3\2\2\2\u086f\u0870\7l\2\2\u0870\u0871\5\u0124\u0093")
+ buf.write("\2\u0871\u0875\7 \2\2\u0872\u0874\5\u0100\u0081\2\u0873")
+ buf.write("\u0872\3\2\2\2\u0874\u0877\3\2\2\2\u0875\u0873\3\2\2\2")
+ buf.write("\u0875\u0876\3\2\2\2\u0876\u0878\3\2\2\2\u0877\u0875\3")
+ buf.write("\2\2\2\u0878\u0879\7s\2\2\u0879\u087a\7 \2\2\u087a\u0105")
+ buf.write("\3\2\2\2\u087b\u0888\7k\2\2\u087c\u087d\7@\2\2\u087d\u087e")
+ buf.write("\7\b\2\2\u087e\u0883\5\u009eP\2\u087f\u0880\7(\2\2\u0880")
+ buf.write("\u0882\5\u009eP\2\u0881\u087f\3\2\2\2\u0882\u0885\3\2")
+ buf.write("\2\2\u0883\u0881\3\2\2\2\u0883\u0884\3\2\2\2\u0884\u0886")
+ buf.write("\3\2\2\2\u0885\u0883\3\2\2\2\u0886\u0887\7!\2\2\u0887")
+ buf.write("\u0889\3\2\2\2\u0888\u087c\3\2\2\2\u0888\u0889\3\2\2\2")
+ buf.write("\u0889\u088a\3\2\2\2\u088a\u088b\5\u0124\u0093\2\u088b")
+ buf.write("\u088c\7 \2\2\u088c\u0107\3\2\2\2\u088d\u089a\7K\2\2\u088e")
+ buf.write("\u088f\7@\2\2\u088f\u0890\7\b\2\2\u0890\u0895\5\u009e")
+ buf.write("P\2\u0891\u0892\7(\2\2\u0892\u0894\5\u009eP\2\u0893\u0891")
+ buf.write("\3\2\2\2\u0894\u0897\3\2\2\2\u0895\u0893\3\2\2\2\u0895")
+ buf.write("\u0896\3\2\2\2\u0896\u0898\3\2\2\2\u0897\u0895\3\2\2\2")
+ buf.write("\u0898\u0899\7!\2\2\u0899\u089b\3\2\2\2\u089a\u088e\3")
+ buf.write("\2\2\2\u089a\u089b\3\2\2\2\u089b\u089c\3\2\2\2\u089c\u089d")
+ buf.write("\5\u0124\u0093\2\u089d\u089e\7 \2\2\u089e\u0109\3\2\2")
+ buf.write("\2\u089f\u08ac\7k\2\2\u08a0\u08a1\7@\2\2\u08a1\u08a2\7")
+ buf.write("\b\2\2\u08a2\u08a7\5\u009eP\2\u08a3\u08a4\7(\2\2\u08a4")
+ buf.write("\u08a6\5\u009eP\2\u08a5\u08a3\3\2\2\2\u08a6\u08a9\3\2")
+ buf.write("\2\2\u08a7\u08a5\3\2\2\2\u08a7\u08a8\3\2\2\2\u08a8\u08aa")
+ buf.write("\3\2\2\2\u08a9\u08a7\3\2\2\2\u08aa\u08ab\7!\2\2\u08ab")
+ buf.write("\u08ad\3\2\2\2\u08ac\u08a0\3\2\2\2\u08ac\u08ad\3\2\2\2")
+ buf.write("\u08ad\u08ae\3\2\2\2\u08ae\u08af\5\u0124\u0093\2\u08af")
+ buf.write("\u08b3\7 \2\2\u08b0\u08b2\5\u0100\u0081\2\u08b1\u08b0")
+ buf.write("\3\2\2\2\u08b2\u08b5\3\2\2\2\u08b3\u08b1\3\2\2\2\u08b3")
+ buf.write("\u08b4\3\2\2\2\u08b4\u08b6\3\2\2\2\u08b5\u08b3\3\2\2\2")
+ buf.write("\u08b6\u08b7\7s\2\2\u08b7\u08b8\7 \2\2\u08b8\u010b\3\2")
+ buf.write("\2\2\u08b9\u08c6\7K\2\2\u08ba\u08bb\7@\2\2\u08bb\u08bc")
+ buf.write("\7\b\2\2\u08bc\u08c1\5\u009eP\2\u08bd\u08be\7(\2\2\u08be")
+ buf.write("\u08c0\5\u009eP\2\u08bf\u08bd\3\2\2\2\u08c0\u08c3\3\2")
+ buf.write("\2\2\u08c1\u08bf\3\2\2\2\u08c1\u08c2\3\2\2\2\u08c2\u08c4")
+ buf.write("\3\2\2\2\u08c3\u08c1\3\2\2\2\u08c4\u08c5\7!\2\2\u08c5")
+ buf.write("\u08c7\3\2\2\2\u08c6\u08ba\3\2\2\2\u08c6\u08c7\3\2\2\2")
+ buf.write("\u08c7\u08c8\3\2\2\2\u08c8\u08c9\5\u0124\u0093\2\u08c9")
+ buf.write("\u08cd\7 \2\2\u08ca\u08cc\5\u0100\u0081\2\u08cb\u08ca")
+ buf.write("\3\2\2\2\u08cc\u08cf\3\2\2\2\u08cd\u08cb\3\2\2\2\u08cd")
+ buf.write("\u08ce\3\2\2\2\u08ce\u08d0\3\2\2\2\u08cf\u08cd\3\2\2\2")
+ buf.write("\u08d0\u08d1\7s\2\2\u08d1\u08d2\7 \2\2\u08d2\u010d\3\2")
+ buf.write("\2\2\u08d3\u08d4\7p\2\2\u08d4\u08d5\7\62\2\2\u08d5\u08d6")
+ buf.write("\7\b\2\2\u08d6\u08d7\7\u00ec\2\2\u08d7\u08d8\7\30\2\2")
+ buf.write("\u08d8\u08d9\7\u00fa\2\2\u08d9\u08da\7\31\2\2\u08da\u08e7")
+ buf.write("\7!\2\2\u08db\u08dc\7@\2\2\u08dc\u08dd\7\b\2\2\u08dd\u08e2")
+ buf.write("\5\u009eP\2\u08de\u08df\7(\2\2\u08df\u08e1\5\u009eP\2")
+ buf.write("\u08e0\u08de\3\2\2\2\u08e1\u08e4\3\2\2\2\u08e2\u08e0\3")
+ buf.write("\2\2\2\u08e2\u08e3\3\2\2\2\u08e3\u08e5\3\2\2\2\u08e4\u08e2")
+ buf.write("\3\2\2\2\u08e5\u08e6\7!\2\2\u08e6\u08e8\3\2\2\2\u08e7")
+ buf.write("\u08db\3\2\2\2\u08e7\u08e8\3\2\2\2\u08e8\u08e9\3\2\2\2")
+ buf.write("\u08e9\u08ea\5\u0124\u0093\2\u08ea\u08eb\7s\2\2\u08eb")
+ buf.write("\u08ec\7 \2\2\u08ec\u010f\3\2\2\2\u08ed\u08f1\5\u0112")
+ buf.write("\u008a\2\u08ee\u08f1\5\u0114\u008b\2\u08ef\u08f1\5\u0116")
+ buf.write("\u008c\2\u08f0\u08ed\3\2\2\2\u08f0\u08ee\3\2\2\2\u08f0")
+ buf.write("\u08ef\3\2\2\2\u08f1\u0111\3\2\2\2\u08f2\u08f3\7m\2\2")
+ buf.write("\u08f3\u08f4\7\u0096\2\2\u08f4\u08f5\7\b\2\2\u08f5\u08f6")
+ buf.write("\7\u00fa\2\2\u08f6\u08f7\7!\2\2\u08f7\u08f8\7t\2\2\u08f8")
+ buf.write("\u08f9\7\b\2\2\u08f9\u08fa\7\u00fa\2\2\u08fa\u08fb\7 ")
+ buf.write("\2\2\u08fb\u0113\3\2\2\2\u08fc\u08fd\7N\2\2\u08fd\u08fe")
+ buf.write("\7=\2\2\u08fe\u08ff\7\b\2\2\u08ff\u0900\7\u00ec\2\2\u0900")
+ buf.write("\u0901\7\30\2\2\u0901\u0902\7\u00fa\2\2\u0902\u0903\7")
+ buf.write("\31\2\2\u0903\u0904\7!\2\2\u0904\u0905\7>\2\2\u0905\u0906")
+ buf.write("\7\b\2\2\u0906\u0907\7\u00ec\2\2\u0907\u0908\7\30\2\2")
+ buf.write("\u0908\u0909\7\u00fa\2\2\u0909\u090a\7\31\2\2\u090a\u0911")
+ buf.write("\7!\2\2\u090b\u090c\7>\2\2\u090c\u090d\7\b\2\2\u090d\u090e")
+ buf.write("\7\u00ec\2\2\u090e\u090f\7\30\2\2\u090f\u0910\7\u00fa")
+ buf.write("\2\2\u0910\u0912\7\31\2\2\u0911\u090b\3\2\2\2\u0911\u0912")
+ buf.write("\3\2\2\2\u0912\u0913\3\2\2\2\u0913\u0914\7 \2\2\u0914")
+ buf.write("\u0115\3\2\2\2\u0915\u0916\t\b\2\2\u0916\u0917\7\u0087")
+ buf.write("\2\2\u0917\u0918\7!\2\2\u0918\u0919\7/\2\2\u0919\u091a")
+ buf.write("\7\b\2\2\u091a\u091b\7\u00fa\2\2\u091b\u091c\7!\2\2\u091c")
+ buf.write("\u091d\7\62\2\2\u091d\u091e\7\b\2\2\u091e\u091f\7\u00ec")
+ buf.write("\2\2\u091f\u0920\7\30\2\2\u0920\u0921\7\u00fa\2\2\u0921")
+ buf.write("\u0922\7\31\2\2\u0922\u0923\7!\2\2\u0923\u0924\7=\2\2")
+ buf.write("\u0924\u0925\7\b\2\2\u0925\u0926\7\u00ec\2\2\u0926\u0927")
+ buf.write("\7\30\2\2\u0927\u0928\7\u00fa\2\2\u0928\u0934\7\31\2\2")
+ buf.write("\u0929\u092a\7!\2\2\u092a\u092b\7@\2\2\u092b\u092c\7\b")
+ buf.write("\2\2\u092c\u0931\5\u009eP\2\u092d\u092e\7(\2\2\u092e\u0930")
+ buf.write("\5\u009eP\2\u092f\u092d\3\2\2\2\u0930\u0933\3\2\2\2\u0931")
+ buf.write("\u092f\3\2\2\2\u0931\u0932\3\2\2\2\u0932\u0935\3\2\2\2")
+ buf.write("\u0933\u0931\3\2\2\2\u0934\u0929\3\2\2\2\u0934\u0935\3")
+ buf.write("\2\2\2\u0935\u093a\3\2\2\2\u0936\u0937\7!\2\2\u0937\u0938")
+ buf.write("\7t\2\2\u0938\u0939\7\b\2\2\u0939\u093b\7\u00fa\2\2\u093a")
+ buf.write("\u0936\3\2\2\2\u093a\u093b\3\2\2\2\u093b\u093c\3\2\2\2")
+ buf.write("\u093c\u093d\7 \2\2\u093d\u0117\3\2\2\2\u093e\u093f\7")
+ buf.write("L\2\2\u093f\u0940\7\u00fa\2\2\u0940\u0941\7 \2\2\u0941")
+ buf.write("\u0119\3\2\2\2\u0942\u0944\7\u0088\2\2\u0943\u0945\7!")
+ buf.write("\2\2\u0944\u0943\3\2\2\2\u0944\u0945\3\2\2\2\u0945\u0946")
+ buf.write("\3\2\2\2\u0946\u0947\7.\2\2\u0947\u0948\7\b\2\2\u0948")
+ buf.write("\u0949\7\u00ec\2\2\u0949\u094a\7\30\2\2\u094a\u094b\7")
+ buf.write("\u00fa\2\2\u094b\u094c\7\31\2\2\u094c\u0957\7!\2\2\u094d")
+ buf.write("\u094e\7\u008d\2\2\u094e\u094f\7\u00fa\2\2\u094f\u0950")
+ buf.write("\7!\2\2\u0950\u0951\7\u0089\2\2\u0951\u0952\t\t\2\2\u0952")
+ buf.write("\u0958\7 \2\2\u0953\u0954\7M\2\2\u0954\u0955\7\b\2\2\u0955")
+ buf.write("\u0956\7\u00fa\2\2\u0956\u0958\7 \2\2\u0957\u094d\3\2")
+ buf.write("\2\2\u0957\u0953\3\2\2\2\u0958\u011b\3\2\2\2\u0959\u095a")
+ buf.write("\7\u00a7\2\2\u095a\u095b\7[\2\2\u095b\u095c\7\b\2\2\u095c")
+ buf.write("\u09a4\5L\'\2\u095d\u095e\7!\2\2\u095e\u095f\7\u00a9\2")
+ buf.write("\2\u095f\u099c\7\b\2\2\u0960\u0964\7S\2\2\u0961\u0962")
+ buf.write("\7\32\2\2\u0962\u0963\7\u00fa\2\2\u0963\u0965\7\33\2\2")
+ buf.write("\u0964\u0961\3\2\2\2\u0964\u0965\3\2\2\2\u0965\u099d\3")
+ buf.write("\2\2\2\u0966\u096a\7T\2\2\u0967\u0968\7\32\2\2\u0968\u0969")
+ buf.write("\7\u00fa\2\2\u0969\u096b\7\33\2\2\u096a\u0967\3\2\2\2")
+ buf.write("\u096a\u096b\3\2\2\2\u096b\u099d\3\2\2\2\u096c\u0970\7")
+ buf.write("U\2\2\u096d\u096e\7\32\2\2\u096e\u096f\7\u00fa\2\2\u096f")
+ buf.write("\u0971\7\33\2\2\u0970\u096d\3\2\2\2\u0970\u0971\3\2\2")
+ buf.write("\2\u0971\u099d\3\2\2\2\u0972\u0976\7V\2\2\u0973\u0974")
+ buf.write("\7\32\2\2\u0974\u0975\7\u00fa\2\2\u0975\u0977\7\33\2\2")
+ buf.write("\u0976\u0973\3\2\2\2\u0976\u0977\3\2\2\2\u0977\u099d\3")
+ buf.write("\2\2\2\u0978\u097c\7R\2\2\u0979\u097a\7\32\2\2\u097a\u097b")
+ buf.write("\7\u00fa\2\2\u097b\u097d\7\33\2\2\u097c\u0979\3\2\2\2")
+ buf.write("\u097c\u097d\3\2\2\2\u097d\u099d\3\2\2\2\u097e\u0982\7")
+ buf.write("W\2\2\u097f\u0980\7\32\2\2\u0980\u0981\7\u00fa\2\2\u0981")
+ buf.write("\u0983\7\33\2\2\u0982\u097f\3\2\2\2\u0982\u0983\3\2\2")
+ buf.write("\2\u0983\u099d\3\2\2\2\u0984\u0988\7X\2\2\u0985\u0986")
+ buf.write("\7\32\2\2\u0986\u0987\7\u00fa\2\2\u0987\u0989\7\33\2\2")
+ buf.write("\u0988\u0985\3\2\2\2\u0988\u0989\3\2\2\2\u0989\u099d\3")
+ buf.write("\2\2\2\u098a\u098e\7Y\2\2\u098b\u098c\7\32\2\2\u098c\u098d")
+ buf.write("\7\u00fa\2\2\u098d\u098f\7\33\2\2\u098e\u098b\3\2\2\2")
+ buf.write("\u098e\u098f\3\2\2\2\u098f\u099d\3\2\2\2\u0990\u0994\7")
+ buf.write("Z\2\2\u0991\u0992\7\32\2\2\u0992\u0993\7\u00fa\2\2\u0993")
+ buf.write("\u0995\7\33\2\2\u0994\u0991\3\2\2\2\u0994\u0995\3\2\2")
+ buf.write("\2\u0995\u099d\3\2\2\2\u0996\u099a\7\u00fb\2\2\u0997\u0998")
+ buf.write("\7\32\2\2\u0998\u0999\7\u00fa\2\2\u0999\u099b\7\33\2\2")
+ buf.write("\u099a\u0997\3\2\2\2\u099a\u099b\3\2\2\2\u099b\u099d\3")
+ buf.write("\2\2\2\u099c\u0960\3\2\2\2\u099c\u0966\3\2\2\2\u099c\u096c")
+ buf.write("\3\2\2\2\u099c\u0972\3\2\2\2\u099c\u0978\3\2\2\2\u099c")
+ buf.write("\u097e\3\2\2\2\u099c\u0984\3\2\2\2\u099c\u098a\3\2\2\2")
+ buf.write("\u099c\u0990\3\2\2\2\u099c\u0996\3\2\2\2\u099d\u09a1\3")
+ buf.write("\2\2\2\u099e\u09a0\5\u011e\u0090\2\u099f\u099e\3\2\2\2")
+ buf.write("\u09a0\u09a3\3\2\2\2\u09a1\u099f\3\2\2\2\u09a1\u09a2\3")
+ buf.write("\2\2\2\u09a2\u09a5\3\2\2\2\u09a3\u09a1\3\2\2\2\u09a4\u095d")
+ buf.write("\3\2\2\2\u09a4\u09a5\3\2\2\2\u09a5\u09ae\3\2\2\2\u09a6")
+ buf.write("\u09aa\7!\2\2\u09a7\u09a9\5\u011c\u008f\2\u09a8\u09a7")
+ buf.write("\3\2\2\2\u09a9\u09ac\3\2\2\2\u09aa\u09a8\3\2\2\2\u09aa")
+ buf.write("\u09ab\3\2\2\2\u09ab\u09ad\3\2\2\2\u09ac\u09aa\3\2\2\2")
+ buf.write("\u09ad\u09af\7\u00a8\2\2\u09ae\u09a6\3\2\2\2\u09ae\u09af")
+ buf.write("\3\2\2\2\u09af\u09b0\3\2\2\2\u09b0\u09b1\7 \2\2\u09b1")
+ buf.write("\u011d\3\2\2\2\u09b2\u09b3\7!\2\2\u09b3\u09b7\7\u00aa")
+ buf.write("\2\2\u09b4\u09b5\7\32\2\2\u09b5\u09b6\7\u00fa\2\2\u09b6")
+ buf.write("\u09b8\7\33\2\2\u09b7\u09b4\3\2\2\2\u09b7\u09b8\3\2\2")
+ buf.write("\2\u09b8\u09bd\3\2\2\2\u09b9\u09ba\7\34\2\2\u09ba\u09bc")
+ buf.write("\5\u015e\u00b0\2\u09bb\u09b9\3\2\2\2\u09bc\u09bf\3\2\2")
+ buf.write("\2\u09bd\u09bb\3\2\2\2\u09bd\u09be\3\2\2\2\u09be\u09c0")
+ buf.write("\3\2\2\2\u09bf\u09bd\3\2\2\2\u09c0\u09c1\7\b\2\2\u09c1")
+ buf.write("\u09c2\7\u00fa\2\2\u09c2\u011f\3\2\2\2\u09c3\u09c4\5\u0122")
+ buf.write("\u0092\2\u09c4\u09c5\7 \2\2\u09c5\u0121\3\2\2\2\u09c6")
+ buf.write("\u09c7\7\u00ab\2\2\u09c7\u0123\3\2\2\2\u09c8\u09cd\5\u0128")
+ buf.write("\u0095\2\u09c9\u09ca\7\u00dc\2\2\u09ca\u09cc\5\u0128\u0095")
+ buf.write("\2\u09cb\u09c9\3\2\2\2\u09cc\u09cf\3\2\2\2\u09cd\u09cb")
+ buf.write("\3\2\2\2\u09cd\u09ce\3\2\2\2\u09ce\u0125\3\2\2\2\u09cf")
+ buf.write("\u09cd\3\2\2\2\u09d0\u09d5\5\u0128\u0095\2\u09d1\u09d2")
+ buf.write("\7\u00dc\2\2\u09d2\u09d4\5\u0128\u0095\2\u09d3\u09d1\3")
+ buf.write("\2\2\2\u09d4\u09d7\3\2\2\2\u09d5\u09d3\3\2\2\2\u09d5\u09d6")
+ buf.write("\3\2\2\2\u09d6\u0127\3\2\2\2\u09d7\u09d5\3\2\2\2\u09d8")
+ buf.write("\u09dd\5\u012a\u0096\2\u09d9\u09da\7\u00db\2\2\u09da\u09dc")
+ buf.write("\5\u012a\u0096\2\u09db\u09d9\3\2\2\2\u09dc\u09df\3\2\2")
+ buf.write("\2\u09dd\u09db\3\2\2\2\u09dd\u09de\3\2\2\2\u09de\u0129")
+ buf.write("\3\2\2\2\u09df\u09dd\3\2\2\2\u09e0\u09e5\5\u012c\u0097")
+ buf.write("\2\u09e1\u09e2\7(\2\2\u09e2\u09e4\5\u012c\u0097\2\u09e3")
+ buf.write("\u09e1\3\2\2\2\u09e4\u09e7\3\2\2\2\u09e5\u09e3\3\2\2\2")
+ buf.write("\u09e5\u09e6\3\2\2\2\u09e6\u012b\3\2\2\2\u09e7\u09e5\3")
+ buf.write("\2\2\2\u09e8\u09ed\5\u012e\u0098\2\u09e9\u09ea\7)\2\2")
+ buf.write("\u09ea\u09ec\5\u012e\u0098\2\u09eb\u09e9\3\2\2\2\u09ec")
+ buf.write("\u09ef\3\2\2\2\u09ed\u09eb\3\2\2\2\u09ed\u09ee\3\2\2\2")
+ buf.write("\u09ee\u012d\3\2\2\2\u09ef\u09ed\3\2\2\2\u09f0\u09f4\5")
+ buf.write("\u0132\u009a\2\u09f1\u09f3\5\u0130\u0099\2\u09f2\u09f1")
+ buf.write("\3\2\2\2\u09f3\u09f6\3\2\2\2\u09f4\u09f2\3\2\2\2\u09f4")
+ buf.write("\u09f5\3\2\2\2\u09f5\u012f\3\2\2\2\u09f6\u09f4\3\2\2\2")
+ buf.write("\u09f7\u09f8\7\"\2\2\u09f8\u09fc\5\u0132\u009a\2\u09f9")
+ buf.write("\u09fa\7#\2\2\u09fa\u09fc\5\u0132\u009a\2\u09fb\u09f7")
+ buf.write("\3\2\2\2\u09fb\u09f9\3\2\2\2\u09fc\u0131\3\2\2\2\u09fd")
+ buf.write("\u0a01\5\u0136\u009c\2\u09fe\u0a00\5\u0134\u009b\2\u09ff")
+ buf.write("\u09fe\3\2\2\2\u0a00\u0a03\3\2\2\2\u0a01\u09ff\3\2\2\2")
+ buf.write("\u0a01\u0a02\3\2\2\2\u0a02\u0133\3\2\2\2\u0a03\u0a01\3")
+ buf.write("\2\2\2\u0a04\u0a05\7%\2\2\u0a05\u0a0d\5\u0136\u009c\2")
+ buf.write("\u0a06\u0a07\7$\2\2\u0a07\u0a0d\5\u0136\u009c\2\u0a08")
+ buf.write("\u0a09\7\'\2\2\u0a09\u0a0d\5\u0136\u009c\2\u0a0a\u0a0b")
+ buf.write("\7&\2\2\u0a0b\u0a0d\5\u0136\u009c\2\u0a0c\u0a04\3\2\2")
+ buf.write("\2\u0a0c\u0a06\3\2\2\2\u0a0c\u0a08\3\2\2\2\u0a0c\u0a0a")
+ buf.write("\3\2\2\2\u0a0d\u0135\3\2\2\2\u0a0e\u0a12\5\u013a\u009e")
+ buf.write("\2\u0a0f\u0a11\5\u0138\u009d\2\u0a10\u0a0f\3\2\2\2\u0a11")
+ buf.write("\u0a14\3\2\2\2\u0a12\u0a10\3\2\2\2\u0a12\u0a13\3\2\2\2")
+ buf.write("\u0a13\u0137\3\2\2\2\u0a14\u0a12\3\2\2\2\u0a15\u0a16\7")
+ buf.write("\f\2\2\u0a16\u0a1a\5\u013a\u009e\2\u0a17\u0a18\7\r\2\2")
+ buf.write("\u0a18\u0a1a\5\u013a\u009e\2\u0a19\u0a15\3\2\2\2\u0a19")
+ buf.write("\u0a17\3\2\2\2\u0a1a\u0139\3\2\2\2\u0a1b\u0a1f\5\u013e")
+ buf.write("\u00a0\2\u0a1c\u0a1e\5\u013c\u009f\2\u0a1d\u0a1c\3\2\2")
+ buf.write("\2\u0a1e\u0a21\3\2\2\2\u0a1f\u0a1d\3\2\2\2\u0a1f\u0a20")
+ buf.write("\3\2\2\2\u0a20\u013b\3\2\2\2\u0a21\u0a1f\3\2\2\2\u0a22")
+ buf.write("\u0a23\7\16\2\2\u0a23\u0a27\5\u013e\u00a0\2\u0a24\u0a25")
+ buf.write("\7\35\2\2\u0a25\u0a27\5\u013e\u00a0\2\u0a26\u0a22\3\2")
+ buf.write("\2\2\u0a26\u0a24\3\2\2\2\u0a27\u013d\3\2\2\2\u0a28\u0a2c")
+ buf.write("\5\u0142\u00a2\2\u0a29\u0a2b\5\u0140\u00a1\2\u0a2a\u0a29")
+ buf.write("\3\2\2\2\u0a2b\u0a2e\3\2\2\2\u0a2c\u0a2a\3\2\2\2\u0a2c")
+ buf.write("\u0a2d\3\2\2\2\u0a2d\u013f\3\2\2\2\u0a2e\u0a2c\3\2\2\2")
+ buf.write("\u0a2f\u0a30\7\17\2\2\u0a30\u0a36\5\u0142\u00a2\2\u0a31")
+ buf.write("\u0a32\7\37\2\2\u0a32\u0a36\5\u0142\u00a2\2\u0a33\u0a34")
+ buf.write("\7\20\2\2\u0a34\u0a36\5\u0142\u00a2\2\u0a35\u0a2f\3\2")
+ buf.write("\2\2\u0a35\u0a31\3\2\2\2\u0a35\u0a33\3\2\2\2\u0a36\u0141")
+ buf.write("\3\2\2\2\u0a37\u0a39\5\u0144\u00a3\2\u0a38\u0a37\3\2\2")
+ buf.write("\2\u0a39\u0a3c\3\2\2\2\u0a3a\u0a38\3\2\2\2\u0a3a\u0a3b")
+ buf.write("\3\2\2\2\u0a3b\u0a3d\3\2\2\2\u0a3c\u0a3a\3\2\2\2\u0a3d")
+ buf.write("\u0a3e\5\u0146\u00a4\2\u0a3e\u0143\3\2\2\2\u0a3f\u0a40")
+ buf.write("\7\30\2\2\u0a40\u0a41\t\n\2\2\u0a41\u0a42\7\31\2\2\u0a42")
+ buf.write("\u0145\3\2\2\2\u0a43\u0a4f\5\u0148\u00a5\2\u0a44\u0a4f")
+ buf.write("\5\u014a\u00a6\2\u0a45\u0a4f\5\u014c\u00a7\2\u0a46\u0a4f")
+ buf.write("\5\u014e\u00a8\2\u0a47\u0a4f\5\u0150\u00a9\2\u0a48\u0a4f")
+ buf.write("\5\u016e\u00b8\2\u0a49\u0a4f\5\u0170\u00b9\2\u0a4a\u0a4f")
+ buf.write("\5\u0186\u00c4\2\u0a4b\u0a4f\5\u0196\u00cc\2\u0a4c\u0a4d")
+ buf.write("\7\u00dd\2\2\u0a4d\u0a4f\5\u0146\u00a4\2\u0a4e\u0a43\3")
+ buf.write("\2\2\2\u0a4e\u0a44\3\2\2\2\u0a4e\u0a45\3\2\2\2\u0a4e\u0a46")
+ buf.write("\3\2\2\2\u0a4e\u0a47\3\2\2\2\u0a4e\u0a48\3\2\2\2\u0a4e")
+ buf.write("\u0a49\3\2\2\2\u0a4e\u0a4a\3\2\2\2\u0a4e\u0a4b\3\2\2\2")
+ buf.write("\u0a4e\u0a4c\3\2\2\2\u0a4f\u0147\3\2\2\2\u0a50\u0a51\7")
+ buf.write("\u00e7\2\2\u0a51\u0a52\7\30\2\2\u0a52\u0a53\5\u0126\u0094")
+ buf.write("\2\u0a53\u0a54\7!\2\2\u0a54\u0a55\5\u0126\u0094\2\u0a55")
+ buf.write("\u0a56\7\31\2\2\u0a56\u0149\3\2\2\2\u0a57\u0a58\7\u00e5")
+ buf.write("\2\2\u0a58\u0a59\7\30\2\2\u0a59\u0a5a\5\u0126\u0094\2")
+ buf.write("\u0a5a\u0a5b\7!\2\2\u0a5b\u0a5c\5\u0126\u0094\2\u0a5c")
+ buf.write("\u0a5d\7\31\2\2\u0a5d\u014b\3\2\2\2\u0a5e\u0a5f\7\u00e6")
+ buf.write("\2\2\u0a5f\u0a60\7\30\2\2\u0a60\u0a61\5\u0126\u0094\2")
+ buf.write("\u0a61\u0a62\7!\2\2\u0a62\u0a63\5\u0126\u0094\2\u0a63")
+ buf.write("\u0a64\7!\2\2\u0a64\u0a65\5L\'\2\u0a65\u0a66\7\31\2\2")
+ buf.write("\u0a66\u014d\3\2\2\2\u0a67\u0a68\7\30\2\2\u0a68\u0a69")
+ buf.write("\5\u0126\u0094\2\u0a69\u0a6a\7\31\2\2\u0a6a\u014f\3\2")
+ buf.write("\2\2\u0a6b\u0a77\5\u0152\u00aa\2\u0a6c\u0a77\5\u0154\u00ab")
+ buf.write("\2\u0a6d\u0a77\5\u0156\u00ac\2\u0a6e\u0a77\5\u0158\u00ad")
+ buf.write("\2\u0a6f\u0a77\5\u015a\u00ae\2\u0a70\u0a77\5\u0160\u00b1")
+ buf.write("\2\u0a71\u0a77\5\u0162\u00b2\2\u0a72\u0a77\5\u0164\u00b3")
+ buf.write("\2\u0a73\u0a77\5\u0166\u00b4\2\u0a74\u0a77\5\u0168\u00b5")
+ buf.write("\2\u0a75\u0a77\5\u016c\u00b7\2\u0a76\u0a6b\3\2\2\2\u0a76")
+ buf.write("\u0a6c\3\2\2\2\u0a76\u0a6d\3\2\2\2\u0a76\u0a6e\3\2\2\2")
+ buf.write("\u0a76\u0a6f\3\2\2\2\u0a76\u0a70\3\2\2\2\u0a76\u0a71\3")
+ buf.write("\2\2\2\u0a76\u0a72\3\2\2\2\u0a76\u0a73\3\2\2\2\u0a76\u0a74")
+ buf.write("\3\2\2\2\u0a76\u0a75\3\2\2\2\u0a77\u0151\3\2\2\2\u0a78")
+ buf.write("\u0a79\7\u00c7\2\2\u0a79\u0153\3\2\2\2\u0a7a\u0a7b\7\u00c8")
+ buf.write("\2\2\u0a7b\u0a7c\7\u00c9\2\2\u0a7c\u0a7d\7\30\2\2\u0a7d")
+ buf.write("\u0a7e\7\u00fa\2\2\u0a7e\u0a89\7\31\2\2\u0a7f\u0a80\7")
+ buf.write("\"\2\2\u0a80\u0a8a\7\u00fa\2\2\u0a81\u0a82\7$\2\2\u0a82")
+ buf.write("\u0a8a\7\u00fa\2\2\u0a83\u0a84\7%\2\2\u0a84\u0a8a\7\u00fa")
+ buf.write("\2\2\u0a85\u0a86\7&\2\2\u0a86\u0a8a\7\u00fa\2\2\u0a87")
+ buf.write("\u0a88\7\'\2\2\u0a88\u0a8a\7\u00fa\2\2\u0a89\u0a7f\3\2")
+ buf.write("\2\2\u0a89\u0a81\3\2\2\2\u0a89\u0a83\3\2\2\2\u0a89\u0a85")
+ buf.write("\3\2\2\2\u0a89\u0a87\3\2\2\2\u0a8a\u0155\3\2\2\2\u0a8b")
+ buf.write("\u0a8c\7\u00ca\2\2\u0a8c\u0a97\5\u015c\u00af\2\u0a8d\u0a8e")
+ buf.write("\7\"\2\2\u0a8e\u0a98\7\u00fa\2\2\u0a8f\u0a90\7$\2\2\u0a90")
+ buf.write("\u0a98\7\u00fa\2\2\u0a91\u0a92\7%\2\2\u0a92\u0a98\7\u00fa")
+ buf.write("\2\2\u0a93\u0a94\7&\2\2\u0a94\u0a98\7\u00fa\2\2\u0a95")
+ buf.write("\u0a96\7\'\2\2\u0a96\u0a98\7\u00fa\2\2\u0a97\u0a8d\3\2")
+ buf.write("\2\2\u0a97\u0a8f\3\2\2\2\u0a97\u0a91\3\2\2\2\u0a97\u0a93")
+ buf.write("\3\2\2\2\u0a97\u0a95\3\2\2\2\u0a98\u0157\3\2\2\2\u0a99")
+ buf.write("\u0a9a\7\u00cb\2\2\u0a9a\u0aa5\5\u015c\u00af\2\u0a9b\u0a9c")
+ buf.write("\7\"\2\2\u0a9c\u0aa6\5\u015c\u00af\2\u0a9d\u0a9e\7$\2")
+ buf.write("\2\u0a9e\u0aa6\5\u015c\u00af\2\u0a9f\u0aa0\7%\2\2\u0aa0")
+ buf.write("\u0aa6\5\u015c\u00af\2\u0aa1\u0aa2\7&\2\2\u0aa2\u0aa6")
+ buf.write("\5\u015c\u00af\2\u0aa3\u0aa4\7\'\2\2\u0aa4\u0aa6\5\u015c")
+ buf.write("\u00af\2\u0aa5\u0a9b\3\2\2\2\u0aa5\u0a9d\3\2\2\2\u0aa5")
+ buf.write("\u0a9f\3\2\2\2\u0aa5\u0aa1\3\2\2\2\u0aa5\u0aa3\3\2\2\2")
+ buf.write("\u0aa6\u0159\3\2\2\2\u0aa7\u0aa8\7\u00cc\2\2\u0aa8\u0aa9")
+ buf.write("\5\u015c\u00af\2\u0aa9\u0aab\7\"\2\2\u0aaa\u0aac\7\u00fa")
+ buf.write("\2\2\u0aab\u0aaa\3\2\2\2\u0aac\u0aad\3\2\2\2\u0aad\u0aab")
+ buf.write("\3\2\2\2\u0aad\u0aae\3\2\2\2\u0aae\u015b\3\2\2\2\u0aaf")
+ buf.write("\u0ab0\7\u00fb\2\2\u0ab0\u0ab1\7\32\2\2\u0ab1\u0ab2\7")
+ buf.write("\u00fa\2\2\u0ab2\u0abc\7\33\2\2\u0ab3\u0ab8\7\u00fb\2")
+ buf.write("\2\u0ab4\u0ab5\7\34\2\2\u0ab5\u0ab7\5\u015e\u00b0\2\u0ab6")
+ buf.write("\u0ab4\3\2\2\2\u0ab7\u0aba\3\2\2\2\u0ab8\u0ab6\3\2\2\2")
+ buf.write("\u0ab8\u0ab9\3\2\2\2\u0ab9\u0abc\3\2\2\2\u0aba\u0ab8\3")
+ buf.write("\2\2\2\u0abb\u0aaf\3\2\2\2\u0abb\u0ab3\3\2\2\2\u0abc\u015d")
+ buf.write("\3\2\2\2\u0abd\u0ac1\7\u00fb\2\2\u0abe\u0abf\7\32\2\2")
+ buf.write("\u0abf\u0ac0\7\u00fa\2\2\u0ac0\u0ac2\7\33\2\2\u0ac1\u0abe")
+ buf.write("\3\2\2\2\u0ac1\u0ac2\3\2\2\2\u0ac2\u015f\3\2\2\2\u0ac3")
+ buf.write("\u0ac4\7\u00cd\2\2\u0ac4\u0ac5\7\30\2\2\u0ac5\u0ac6\t")
+ buf.write("\13\2\2\u0ac6\u0ac7\7\31\2\2\u0ac7\u0161\3\2\2\2\u0ac8")
+ buf.write("\u0ac9\7\u00ce\2\2\u0ac9\u0aca\7\30\2\2\u0aca\u0acb\7")
+ buf.write("\u00fb\2\2\u0acb\u0acc\7\31\2\2\u0acc\u0163\3\2\2\2\u0acd")
+ buf.write("\u0ace\7\u00cf\2\2\u0ace\u0ad4\7\30\2\2\u0acf\u0ad0\7")
+ buf.write("\u00ec\2\2\u0ad0\u0ad1\7\30\2\2\u0ad1\u0ad2\7\u00fa\2")
+ buf.write("\2\u0ad2\u0ad5\7\31\2\2\u0ad3\u0ad5\7\u00fa\2\2\u0ad4")
+ buf.write("\u0acf\3\2\2\2\u0ad4\u0ad3\3\2\2\2\u0ad5\u0ad6\3\2\2\2")
+ buf.write("\u0ad6\u0ad7\7\31\2\2\u0ad7\u0165\3\2\2\2\u0ad8\u0ad9")
+ buf.write("\7\u00d0\2\2\u0ad9\u0167\3\2\2\2\u0ada\u0adb\7\u00d1\2")
+ buf.write("\2\u0adb\u0adc\7\30\2\2\u0adc\u0add\5L\'\2\u0add\u0ade")
+ buf.write("\7\31\2\2\u0ade\u0169\3\2\2\2\u0adf\u0ae0\t\f\2\2\u0ae0")
+ buf.write("\u016b\3\2\2\2\u0ae1\u0ae2\7\u00d2\2\2\u0ae2\u0ae3\7\30")
+ buf.write("\2\2\u0ae3\u0ae8\5X-\2\u0ae4\u0ae5\7(\2\2\u0ae5\u0ae6")
+ buf.write("\7@\2\2\u0ae6\u0ae7\7\b\2\2\u0ae7\u0ae9\5\u016a\u00b6")
+ buf.write("\2\u0ae8\u0ae4\3\2\2\2\u0ae8\u0ae9\3\2\2\2\u0ae9\u0aea")
+ buf.write("\3\2\2\2\u0aea\u0aeb\7\31\2\2\u0aeb\u016d\3\2\2\2\u0aec")
+ buf.write("\u0aed\t\r\2\2\u0aed\u016f\3\2\2\2\u0aee\u0af9\5\u0172")
+ buf.write("\u00ba\2\u0aef\u0af9\5\u0174\u00bb\2\u0af0\u0af9\5\u0176")
+ buf.write("\u00bc\2\u0af1\u0af9\5\u0178\u00bd\2\u0af2\u0af9\5\u017a")
+ buf.write("\u00be\2\u0af3\u0af9\5\u017c\u00bf\2\u0af4\u0af9\5\u017e")
+ buf.write("\u00c0\2\u0af5\u0af9\5\u0180\u00c1\2\u0af6\u0af9\5\u0182")
+ buf.write("\u00c2\2\u0af7\u0af9\5\u0184\u00c3\2\u0af8\u0aee\3\2\2")
+ buf.write("\2\u0af8\u0aef\3\2\2\2\u0af8\u0af0\3\2\2\2\u0af8\u0af1")
+ buf.write("\3\2\2\2\u0af8\u0af2\3\2\2\2\u0af8\u0af3\3\2\2\2\u0af8")
+ buf.write("\u0af4\3\2\2\2\u0af8\u0af5\3\2\2\2\u0af8\u0af6\3\2\2\2")
+ buf.write("\u0af8\u0af7\3\2\2\2\u0af9\u0171\3\2\2\2\u0afa\u0afb\7")
+ buf.write("\u00da\2\2\u0afb\u0afc\7\30\2\2\u0afc\u0afd\5\u0126\u0094")
+ buf.write("\2\u0afd\u0afe\7\31\2\2\u0afe\u0173\3\2\2\2\u0aff\u0b00")
+ buf.write("\7\u00df\2\2\u0b00\u0b01\7\30\2\2\u0b01\u0b02\5\u0126")
+ buf.write("\u0094\2\u0b02\u0b03\7\31\2\2\u0b03\u0175\3\2\2\2\u0b04")
+ buf.write("\u0b05\7\u00e8\2\2\u0b05\u0b0d\7\30\2\2\u0b06\u0b07\7")
+ buf.write("*\2\2\u0b07\u0b08\7\b\2\2\u0b08\u0b09\7\u00ec\2\2\u0b09")
+ buf.write("\u0b0a\7\30\2\2\u0b0a\u0b0b\7\u00fa\2\2\u0b0b\u0b0c\7")
+ buf.write("\31\2\2\u0b0c\u0b0e\7!\2\2\u0b0d\u0b06\3\2\2\2\u0b0d\u0b0e")
+ buf.write("\3\2\2\2\u0b0e\u0b14\3\2\2\2\u0b0f\u0b10\7[\2\2\u0b10")
+ buf.write("\u0b11\7\b\2\2\u0b11\u0b12\5L\'\2\u0b12\u0b13\7!\2\2\u0b13")
+ buf.write("\u0b15\3\2\2\2\u0b14\u0b0f\3\2\2\2\u0b14\u0b15\3\2\2\2")
+ buf.write("\u0b15\u0b16\3\2\2\2\u0b16\u0b17\5\u0126\u0094\2\u0b17")
+ buf.write("\u0b18\7\31\2\2\u0b18\u0177\3\2\2\2\u0b19\u0b1a\7\u00e9")
+ buf.write("\2\2\u0b1a\u0b1b\7\30\2\2\u0b1b\u0b1c\5\u0126\u0094\2")
+ buf.write("\u0b1c\u0b1d\7\31\2\2\u0b1d\u0179\3\2\2\2\u0b1e\u0b1f")
+ buf.write("\7\u00e0\2\2\u0b1f\u0b20\7\30\2\2\u0b20\u0b21\5\u0126")
+ buf.write("\u0094\2\u0b21\u0b22\7\31\2\2\u0b22\u017b\3\2\2\2\u0b23")
+ buf.write("\u0b28\7\u00e1\2\2\u0b24\u0b25\7\21\2\2\u0b25\u0b26\7")
+ buf.write("\b\2\2\u0b26\u0b27\7\u00fa\2\2\u0b27\u0b29\7!\2\2\u0b28")
+ buf.write("\u0b24\3\2\2\2\u0b28\u0b29\3\2\2\2\u0b29\u0b2a\3\2\2\2")
+ buf.write("\u0b2a\u0b2b\7\30\2\2\u0b2b\u0b2c\5\u0126\u0094\2\u0b2c")
+ buf.write("\u0b2d\7\31\2\2\u0b2d\u017d\3\2\2\2\u0b2e\u0b2f\7\u00e2")
+ buf.write("\2\2\u0b2f\u0b30\7\30\2\2\u0b30\u0b31\5\u0126\u0094\2")
+ buf.write("\u0b31\u0b32\7\31\2\2\u0b32\u017f\3\2\2\2\u0b33\u0b34")
+ buf.write("\7\u00e3\2\2\u0b34\u0b35\7\30\2\2\u0b35\u0b36\5\u0126")
+ buf.write("\u0094\2\u0b36\u0b37\7\31\2\2\u0b37\u0181\3\2\2\2\u0b38")
+ buf.write("\u0b39\7\u00e4\2\2\u0b39\u0b3a\7\30\2\2\u0b3a\u0b3b\5")
+ buf.write("\u0126\u0094\2\u0b3b\u0b3c\7\31\2\2\u0b3c\u0183\3\2\2")
+ buf.write("\2\u0b3d\u0b3e\7\u00de\2\2\u0b3e\u0b3f\7\30\2\2\u0b3f")
+ buf.write("\u0b44\5X-\2\u0b40\u0b41\7(\2\2\u0b41\u0b42\7@\2\2\u0b42")
+ buf.write("\u0b43\7\b\2\2\u0b43\u0b45\5\u016a\u00b6\2\u0b44\u0b40")
+ buf.write("\3\2\2\2\u0b44\u0b45\3\2\2\2\u0b45\u0b46\3\2\2\2\u0b46")
+ buf.write("\u0b47\7!\2\2\u0b47\u0b48\5\u0126\u0094\2\u0b48\u0b49")
+ buf.write("\7\31\2\2\u0b49\u0185\3\2\2\2\u0b4a\u0b50\5\u0188\u00c5")
+ buf.write("\2\u0b4b\u0b50\5\u018a\u00c6\2\u0b4c\u0b50\5\u018e\u00c8")
+ buf.write("\2\u0b4d\u0b50\5\u0190\u00c9\2\u0b4e\u0b50\5\u0192\u00ca")
+ buf.write("\2\u0b4f\u0b4a\3\2\2\2\u0b4f\u0b4b\3\2\2\2\u0b4f\u0b4c")
+ buf.write("\3\2\2\2\u0b4f\u0b4d\3\2\2\2\u0b4f\u0b4e\3\2\2\2\u0b50")
+ buf.write("\u0187\3\2\2\2\u0b51\u0b52\7\u00c2\2\2\u0b52\u0b53\7\30")
+ buf.write("\2\2\u0b53\u0b54\5\u0126\u0094\2\u0b54\u0b55\7\22\2\2")
+ buf.write("\u0b55\u0b56\5\u0126\u0094\2\u0b56\u0b57\7\36\2\2\u0b57")
+ buf.write("\u0b58\5\u0126\u0094\2\u0b58\u0b59\7\31\2\2\u0b59\u0189")
+ buf.write("\3\2\2\2\u0b5a\u0b5b\7\u00c3\2\2\u0b5b\u0b5c\7\30\2\2")
+ buf.write("\u0b5c\u0b61\5\u018c\u00c7\2\u0b5d\u0b5e\7(\2\2\u0b5e")
+ buf.write("\u0b60\5\u018c\u00c7\2\u0b5f\u0b5d\3\2\2\2\u0b60\u0b63")
+ buf.write("\3\2\2\2\u0b61\u0b5f\3\2\2\2\u0b61\u0b62\3\2\2\2\u0b62")
+ buf.write("\u0b64\3\2\2\2\u0b63\u0b61\3\2\2\2\u0b64\u0b65\7!\2\2")
+ buf.write("\u0b65\u0b66\5\u0126\u0094\2\u0b66\u0b67\7!\2\2\u0b67")
+ buf.write("\u0b68\5\u0126\u0094\2\u0b68\u0b69\7!\2\2\u0b69\u0b6a")
+ buf.write("\5\u0126\u0094\2\u0b6a\u0b6b\7\31\2\2\u0b6b\u018b\3\2")
+ buf.write("\2\2\u0b6c\u0b6d\t\16\2\2\u0b6d\u018d\3\2\2\2\u0b6e\u0b6f")
+ buf.write("\7\u00c4\2\2\u0b6f\u0b70\7\30\2\2\u0b70\u0b71\5\u0126")
+ buf.write("\u0094\2\u0b71\u0b72\7!\2\2\u0b72\u0b73\5\u0126\u0094")
+ buf.write("\2\u0b73\u0b74\7!\2\2\u0b74\u0b75\5\u0126\u0094\2\u0b75")
+ buf.write("\u0b76\7\31\2\2\u0b76\u018f\3\2\2\2\u0b77\u0b78\7\u00c5")
+ buf.write("\2\2\u0b78\u0b79\7\30\2\2\u0b79\u0b7a\5\u0126\u0094\2")
+ buf.write("\u0b7a\u0b7b\7!\2\2\u0b7b\u0b7c\5\u0126\u0094\2\u0b7c")
+ buf.write("\u0b7d\7!\2\2\u0b7d\u0b7e\5\u0126\u0094\2\u0b7e\u0b7f")
+ buf.write("\7\31\2\2\u0b7f\u0191\3\2\2\2\u0b80\u0b81\7\u00c6\2\2")
+ buf.write("\u0b81\u0b82\7\30\2\2\u0b82\u0b83\7@\2\2\u0b83\u0b84\7")
+ buf.write("\b\2\2\u0b84\u0b89\5\u0194\u00cb\2\u0b85\u0b86\7(\2\2")
+ buf.write("\u0b86\u0b88\5\u0194\u00cb\2\u0b87\u0b85\3\2\2\2\u0b88")
+ buf.write("\u0b8b\3\2\2\2\u0b89\u0b87\3\2\2\2\u0b89\u0b8a\3\2\2\2")
+ buf.write("\u0b8a\u0b8c\3\2\2\2\u0b8b\u0b89\3\2\2\2\u0b8c\u0b8d\7")
+ buf.write("!\2\2\u0b8d\u0b8e\5\u0126\u0094\2\u0b8e\u0b8f\7!\2\2\u0b8f")
+ buf.write("\u0b90\5\u0126\u0094\2\u0b90\u0b91\7!\2\2\u0b91\u0b92")
+ buf.write("\5\u0126\u0094\2\u0b92\u0b93\7\31\2\2\u0b93\u0193\3\2")
+ buf.write("\2\2\u0b94\u0b95\t\17\2\2\u0b95\u0195\3\2\2\2\u0b96\u0b97")
+ buf.write("\7\u00ea\2\2\u0b97\u0b98\7\30\2\2\u0b98\u0b99\5\u0126")
+ buf.write("\u0094\2\u0b99\u0ba1\7\36\2\2\u0b9a\u0b9b\5\u0124\u0093")
+ buf.write("\2\u0b9b\u0b9c\7!\2\2\u0b9c\u0b9d\5\u0124\u0093\2\u0b9d")
+ buf.write("\u0b9e\7 \2\2\u0b9e\u0ba0\3\2\2\2\u0b9f\u0b9a\3\2\2\2")
+ buf.write("\u0ba0\u0ba3\3\2\2\2\u0ba1\u0b9f\3\2\2\2\u0ba1\u0ba2\3")
+ buf.write("\2\2\2\u0ba2\u0ba4\3\2\2\2\u0ba3\u0ba1\3\2\2\2\u0ba4\u0ba5")
+ buf.write("\7\31\2\2\u0ba5\u0197\3\2\2\2\u00f1\u019b\u019d\u01a1")
+ buf.write("\u01a8\u01ac\u01af\u01b7\u01bc\u01c0\u01c3\u01c9\u01ce")
+ buf.write("\u01d2\u01d5\u01db\u01ed\u01ef\u01f7\u0200\u0209\u0212")
+ buf.write("\u021b\u0224\u022d\u0236\u023f\u0248\u024e\u0256\u025e")
+ buf.write("\u0266\u0284\u028b\u0292\u029b\u029f\u02a3\u02aa\u02b4")
+ buf.write("\u02c1\u02d0\u02e5\u02eb\u0307\u030d\u0316\u0329\u0339")
+ buf.write("\u0344\u0375\u0385\u038c\u0392\u03aa\u03b5\u03b8\u03bb")
+ buf.write("\u03e2\u03e6\u03f3\u03fa\u040c\u0421\u0436\u043c\u0452")
+ buf.write("\u045f\u0463\u0468\u046e\u0471\u0475\u0479\u0480\u049a")
+ buf.write("\u04a4\u04ac\u04b0\u04b6\u04ba\u04e8\u04ec\u04f3\u04f9")
+ buf.write("\u04fd\u0506\u050b\u0517\u0522\u052f\u0540\u0545\u054a")
+ buf.write("\u055b\u0560\u0565\u056d\u058d\u0592\u0597\u05a1\u05ab")
+ buf.write("\u05b7\u05bc\u05c1\u05cd\u05d2\u05d7\u05e1\u05e7\u0602")
+ buf.write("\u0608\u0612\u0620\u062d\u0632\u0636\u0641\u0647\u0652")
+ buf.write("\u065b\u0665\u0677\u067c\u0680\u068b\u0691\u069b\u06a2")
+ buf.write("\u06aa\u06b1\u06bd\u06c8\u06cb\u06d6\u06db\u06e5\u06eb")
+ buf.write("\u06fe\u0704\u070e\u0714\u0722\u072d\u0732\u073b\u0742")
+ buf.write("\u074d\u0754\u075e\u07a9\u07ae\u07b1\u07c2\u07c8\u07cf")
+ buf.write("\u07dc\u0827\u082c\u082f\u0840\u0846\u084d\u0856\u0867")
+ buf.write("\u086d\u0875\u0883\u0888\u0895\u089a\u08a7\u08ac\u08b3")
+ buf.write("\u08c1\u08c6\u08cd\u08e2\u08e7\u08f0\u0911\u0931\u0934")
+ buf.write("\u093a\u0944\u0957\u0964\u096a\u0970\u0976\u097c\u0982")
+ buf.write("\u0988\u098e\u0994\u099a\u099c\u09a1\u09a4\u09aa\u09ae")
+ buf.write("\u09b7\u09bd\u09cd\u09d5\u09dd\u09e5\u09ed\u09f4\u09fb")
+ buf.write("\u0a01\u0a0c\u0a12\u0a19\u0a1f\u0a26\u0a2c\u0a35\u0a3a")
+ buf.write("\u0a4e\u0a76\u0a89\u0a97\u0aa5\u0aad\u0ab8\u0abb\u0ac1")
+ buf.write("\u0ad4\u0ae8\u0af8\u0b0d\u0b14\u0b28\u0b44\u0b4f\u0b61")
+ buf.write("\u0b89\u0ba1")
return buf.getvalue()
@@ -1871,47 +1874,48 @@ class VfrSyntaxParser ( Parser ):
RULE_multdivmodTerm = 158
RULE_multdivmodTermSupplementary = 159
RULE_castTerm = 160
- RULE_atomTerm = 161
- RULE_vfrExpressionCatenate = 162
- RULE_vfrExpressionMatch = 163
- RULE_vfrExpressionMatch2 = 164
- RULE_vfrExpressionParen = 165
- RULE_vfrExpressionBuildInFunction = 166
- RULE_dupExp = 167
- RULE_vareqvalExp = 168
- RULE_ideqvalExp = 169
- RULE_ideqidExp = 170
- RULE_ideqvallistExp = 171
- RULE_vfrQuestionDataFieldName = 172
- RULE_arrayName = 173
- RULE_questionref1Exp = 174
- RULE_rulerefExp = 175
- RULE_stringref1Exp = 176
- RULE_pushthisExp = 177
- RULE_securityExp = 178
- RULE_numericVarStoreType = 179
- RULE_getExp = 180
- RULE_vfrExpressionConstant = 181
- RULE_vfrExpressionUnaryOp = 182
- RULE_lengthExp = 183
- RULE_bitwisenotExp = 184
- RULE_question23refExp = 185
- RULE_stringref2Exp = 186
- RULE_toboolExp = 187
- RULE_tostringExp = 188
- RULE_unintExp = 189
- RULE_toupperExp = 190
- RULE_tolwerExp = 191
- RULE_setExp = 192
- RULE_vfrExpressionTernaryOp = 193
- RULE_conditionalExp = 194
- RULE_findExp = 195
- RULE_findFormat = 196
- RULE_midExp = 197
- RULE_tokenExp = 198
- RULE_spanExp = 199
- RULE_spanFlags = 200
- RULE_vfrExpressionMap = 201
+ RULE_castTermSub = 161
+ RULE_atomTerm = 162
+ RULE_vfrExpressionCatenate = 163
+ RULE_vfrExpressionMatch = 164
+ RULE_vfrExpressionMatch2 = 165
+ RULE_vfrExpressionParen = 166
+ RULE_vfrExpressionBuildInFunction = 167
+ RULE_dupExp = 168
+ RULE_vareqvalExp = 169
+ RULE_ideqvalExp = 170
+ RULE_ideqidExp = 171
+ RULE_ideqvallistExp = 172
+ RULE_vfrQuestionDataFieldName = 173
+ RULE_arrayName = 174
+ RULE_questionref1Exp = 175
+ RULE_rulerefExp = 176
+ RULE_stringref1Exp = 177
+ RULE_pushthisExp = 178
+ RULE_securityExp = 179
+ RULE_numericVarStoreType = 180
+ RULE_getExp = 181
+ RULE_vfrExpressionConstant = 182
+ RULE_vfrExpressionUnaryOp = 183
+ RULE_lengthExp = 184
+ RULE_bitwisenotExp = 185
+ RULE_question23refExp = 186
+ RULE_stringref2Exp = 187
+ RULE_toboolExp = 188
+ RULE_tostringExp = 189
+ RULE_unintExp = 190
+ RULE_toupperExp = 191
+ RULE_tolwerExp = 192
+ RULE_setExp = 193
+ RULE_vfrExpressionTernaryOp = 194
+ RULE_conditionalExp = 195
+ RULE_findExp = 196
+ RULE_findFormat = 197
+ RULE_midExp = 198
+ RULE_tokenExp = 199
+ RULE_spanExp = 200
+ RULE_spanFlags = 201
+ RULE_vfrExpressionMap = 202
ruleNames = [ "vfrProgram", "pragmaPackShowDef", "pragmaPackStackDef",
"pragmaPackNumber", "vfrPragmaPackDefinition", "vfrDataStructDefinition",
@@ -1972,7 +1976,7 @@ class VfrSyntaxParser ( Parser ):
"compareTerm", "compareTermSupplementary", "shiftTerm",
"shiftTermSupplementary", "addMinusTerm", "addMinusTermSupplementary",
"multdivmodTerm", "multdivmodTermSupplementary", "castTerm",
- "atomTerm", "vfrExpressionCatenate", "vfrExpressionMatch",
+ "castTermSub", "atomTerm", "vfrExpressionCatenate", "vfrExpressionMatch",
"vfrExpressionMatch2", "vfrExpressionParen", "vfrExpressionBuildInFunction",
"dupExp", "vareqvalExp", "ideqvalExp", "ideqidExp", "ideqvallistExp",
"vfrQuestionDataFieldName", "arrayName", "questionref1Exp",
@@ -2257,10 +2261,6 @@ class VfrSyntaxParser ( Parser ):
super().__init__(parent, invokingState)
self.parser = parser
- def vfrFormSetDefinition(self):
- return self.getTypedRuleContext(VfrSyntaxParser.VfrFormSetDefinitionContext,0)
-
-
def vfrPragmaPackDefinition(self, i:int=None):
if i is None:
return self.getTypedRuleContexts(VfrSyntaxParser.VfrPragmaPackDefinitionContext)
@@ -2282,6 +2282,10 @@ class VfrSyntaxParser ( Parser ):
return self.getTypedRuleContext(VfrSyntaxParser.VfrDataUnionDefinitionContext,i)
+ def vfrFormSetDefinition(self):
+ return self.getTypedRuleContext(VfrSyntaxParser.VfrFormSetDefinitionContext,0)
+
+
def getRuleIndex(self):
return VfrSyntaxParser.RULE_vfrProgram
@@ -2301,35 +2305,41 @@ class VfrSyntaxParser ( Parser ):
self._la = 0 # Token type
try:
self.enterOuterAlt(localctx, 1)
- self.state = 409
+ self.state = 411
self._errHandler.sync(self)
_la = self._input.LA(1)
while _la==VfrSyntaxParser.T__3 or ((((_la - 78)) & ~0x3f) == 0 and ((1 << (_la - 78)) & ((1 << (VfrSyntaxParser.Struct - 78)) | (1 << (VfrSyntaxParser.Union - 78)) | (1 << (VfrSyntaxParser.TypeDef - 78)))) != 0):
- self.state = 407
+ self.state = 409
self._errHandler.sync(self)
la_ = self._interp.adaptivePredict(self._input,0,self._ctx)
if la_ == 1:
- self.state = 404
+ self.state = 406
self.vfrPragmaPackDefinition()
pass
elif la_ == 2:
- self.state = 405
+ self.state = 407
self.vfrDataStructDefinition()
pass
elif la_ == 3:
- self.state = 406
+ self.state = 408
self.vfrDataUnionDefinition()
pass
- self.state = 411
+ self.state = 413
self._errHandler.sync(self)
_la = self._input.LA(1)
- self.state = 412
- self.vfrFormSetDefinition()
+ self.state = 415
+ self._errHandler.sync(self)
+ _la = self._input.LA(1)
+ if _la==VfrSyntaxParser.FormSet:
+ self.state = 414
+ self.vfrFormSetDefinition()
+
+
except RecognitionException as re:
localctx.exception = re
self._errHandler.reportError(self, re)
@@ -2364,7 +2374,7 @@ class VfrSyntaxParser ( Parser ):
self.enterRule(localctx, 2, self.RULE_pragmaPackShowDef)
try:
self.enterOuterAlt(localctx, 1)
- self.state = 414
+ self.state = 417
self.match(VfrSyntaxParser.T__0)
except RecognitionException as re:
localctx.exception = re
@@ -2412,30 +2422,30 @@ class VfrSyntaxParser ( Parser ):
self._la = 0 # Token type
try:
self.enterOuterAlt(localctx, 1)
- self.state = 416
+ self.state = 419
_la = self._input.LA(1)
if not(_la==VfrSyntaxParser.T__1 or _la==VfrSyntaxParser.T__2):
self._errHandler.recoverInline(self)
else:
self._errHandler.reportMatch(self)
self.consume()
- self.state = 419
+ self.state = 422
self._errHandler.sync(self)
- la_ = self._interp.adaptivePredict(self._input,2,self._ctx)
+ la_ = self._interp.adaptivePredict(self._input,3,self._ctx)
if la_ == 1:
- self.state = 417
+ self.state = 420
self.match(VfrSyntaxParser.Comma)
- self.state = 418
+ self.state = 421
self.match(VfrSyntaxParser.StringIdentifier)
- self.state = 423
+ self.state = 426
self._errHandler.sync(self)
_la = self._input.LA(1)
if _la==VfrSyntaxParser.Comma:
- self.state = 421
+ self.state = 424
self.match(VfrSyntaxParser.Comma)
- self.state = 422
+ self.state = 425
self.match(VfrSyntaxParser.Number)
@@ -2476,11 +2486,11 @@ class VfrSyntaxParser ( Parser ):
self._la = 0 # Token type
try:
self.enterOuterAlt(localctx, 1)
- self.state = 426
+ self.state = 429
self._errHandler.sync(self)
_la = self._input.LA(1)
if _la==VfrSyntaxParser.Number:
- self.state = 425
+ self.state = 428
self.match(VfrSyntaxParser.Number)
@@ -2535,29 +2545,29 @@ class VfrSyntaxParser ( Parser ):
self.enterRule(localctx, 8, self.RULE_vfrPragmaPackDefinition)
try:
self.enterOuterAlt(localctx, 1)
- self.state = 428
+ self.state = 431
self.match(VfrSyntaxParser.T__3)
- self.state = 429
+ self.state = 432
self.match(VfrSyntaxParser.T__4)
- self.state = 430
+ self.state = 433
self.match(VfrSyntaxParser.OpenParen)
- self.state = 434
+ self.state = 437
self._errHandler.sync(self)
- la_ = self._interp.adaptivePredict(self._input,5,self._ctx)
+ la_ = self._interp.adaptivePredict(self._input,6,self._ctx)
if la_ == 1:
- self.state = 431
+ self.state = 434
self.pragmaPackShowDef()
elif la_ == 2:
- self.state = 432
+ self.state = 435
self.pragmaPackStackDef()
elif la_ == 3:
- self.state = 433
+ self.state = 436
self.pragmaPackNumber()
- self.state = 436
+ self.state = 439
self.match(VfrSyntaxParser.CloseParen)
except RecognitionException as re:
localctx.exception = re
@@ -2623,47 +2633,47 @@ class VfrSyntaxParser ( Parser ):
self._la = 0 # Token type
try:
self.enterOuterAlt(localctx, 1)
- self.state = 439
+ self.state = 442
self._errHandler.sync(self)
_la = self._input.LA(1)
if _la==VfrSyntaxParser.TypeDef:
- self.state = 438
+ self.state = 441
self.match(VfrSyntaxParser.TypeDef)
- self.state = 441
+ self.state = 444
self.match(VfrSyntaxParser.Struct)
- self.state = 443
+ self.state = 446
self._errHandler.sync(self)
_la = self._input.LA(1)
if _la==VfrSyntaxParser.NonNvDataMap:
- self.state = 442
+ self.state = 445
self.match(VfrSyntaxParser.NonNvDataMap)
- self.state = 446
+ self.state = 449
self._errHandler.sync(self)
_la = self._input.LA(1)
if _la==VfrSyntaxParser.StringIdentifier:
- self.state = 445
+ self.state = 448
localctx.N1 = self.match(VfrSyntaxParser.StringIdentifier)
- self.state = 448
+ self.state = 451
self.match(VfrSyntaxParser.OpenBrace)
- self.state = 449
+ self.state = 452
self.vfrDataStructFields(False)
- self.state = 450
+ self.state = 453
self.match(VfrSyntaxParser.CloseBrace)
- self.state = 452
+ self.state = 455
self._errHandler.sync(self)
_la = self._input.LA(1)
if _la==VfrSyntaxParser.StringIdentifier:
- self.state = 451
+ self.state = 454
localctx.N2 = self.match(VfrSyntaxParser.StringIdentifier)
- self.state = 454
+ self.state = 457
self.match(VfrSyntaxParser.Semicolon)
except RecognitionException as re:
localctx.exception = re
@@ -2729,47 +2739,47 @@ class VfrSyntaxParser ( Parser ):
self._la = 0 # Token type
try:
self.enterOuterAlt(localctx, 1)
- self.state = 457
+ self.state = 460
self._errHandler.sync(self)
_la = self._input.LA(1)
if _la==VfrSyntaxParser.TypeDef:
- self.state = 456
+ self.state = 459
self.match(VfrSyntaxParser.TypeDef)
- self.state = 459
+ self.state = 462
self.match(VfrSyntaxParser.Union)
- self.state = 461
+ self.state = 464
self._errHandler.sync(self)
_la = self._input.LA(1)
if _la==VfrSyntaxParser.NonNvDataMap:
- self.state = 460
+ self.state = 463
self.match(VfrSyntaxParser.NonNvDataMap)
- self.state = 464
+ self.state = 467
self._errHandler.sync(self)
_la = self._input.LA(1)
if _la==VfrSyntaxParser.StringIdentifier:
- self.state = 463
+ self.state = 466
localctx.N1 = self.match(VfrSyntaxParser.StringIdentifier)
- self.state = 466
+ self.state = 469
self.match(VfrSyntaxParser.OpenBrace)
- self.state = 467
+ self.state = 470
self.vfrDataStructFields(True)
- self.state = 468
+ self.state = 471
self.match(VfrSyntaxParser.CloseBrace)
- self.state = 470
+ self.state = 473
self._errHandler.sync(self)
_la = self._input.LA(1)
if _la==VfrSyntaxParser.StringIdentifier:
- self.state = 469
+ self.state = 472
localctx.N2 = self.match(VfrSyntaxParser.StringIdentifier)
- self.state = 472
+ self.state = 475
self.match(VfrSyntaxParser.Semicolon)
except RecognitionException as re:
localctx.exception = re
@@ -2905,85 +2915,85 @@ class VfrSyntaxParser ( Parser ):
self._la = 0 # Token type
try:
self.enterOuterAlt(localctx, 1)
- self.state = 490
+ self.state = 493
self._errHandler.sync(self)
_la = self._input.LA(1)
while ((((_la - 80)) & ~0x3f) == 0 and ((1 << (_la - 80)) & ((1 << (VfrSyntaxParser.Boolean - 80)) | (1 << (VfrSyntaxParser.Uint64 - 80)) | (1 << (VfrSyntaxParser.Uint32 - 80)) | (1 << (VfrSyntaxParser.Uint16 - 80)) | (1 << (VfrSyntaxParser.Uint8 - 80)) | (1 << (VfrSyntaxParser.EFI_STRING_ID - 80)) | (1 << (VfrSyntaxParser.EFI_HII_DATE - 80)) | (1 << (VfrSyntaxParser.EFI_HII_TIME - 80)) | (1 << (VfrSyntaxParser.EFI_HII_REF - 80)))) != 0) or _la==VfrSyntaxParser.StringIdentifier:
- self.state = 488
+ self.state = 491
self._errHandler.sync(self)
- la_ = self._interp.adaptivePredict(self._input,14,self._ctx)
+ la_ = self._interp.adaptivePredict(self._input,15,self._ctx)
if la_ == 1:
- self.state = 474
+ self.state = 477
self.dataStructField64(FieldInUnion)
pass
elif la_ == 2:
- self.state = 475
+ self.state = 478
self.dataStructField32(FieldInUnion)
pass
elif la_ == 3:
- self.state = 476
+ self.state = 479
self.dataStructField16(FieldInUnion)
pass
elif la_ == 4:
- self.state = 477
+ self.state = 480
self.dataStructField8(FieldInUnion)
pass
elif la_ == 5:
- self.state = 478
+ self.state = 481
self.dataStructFieldBool(FieldInUnion)
pass
elif la_ == 6:
- self.state = 479
+ self.state = 482
self.dataStructFieldString(FieldInUnion)
pass
elif la_ == 7:
- self.state = 480
+ self.state = 483
self.dataStructFieldDate(FieldInUnion)
pass
elif la_ == 8:
- self.state = 481
+ self.state = 484
self.dataStructFieldTime(FieldInUnion)
pass
elif la_ == 9:
- self.state = 482
+ self.state = 485
self.dataStructFieldRef(FieldInUnion)
pass
elif la_ == 10:
- self.state = 483
+ self.state = 486
self.dataStructFieldUser(FieldInUnion)
pass
elif la_ == 11:
- self.state = 484
+ self.state = 487
self.dataStructBitField64(FieldInUnion)
pass
elif la_ == 12:
- self.state = 485
+ self.state = 488
self.dataStructBitField32(FieldInUnion)
pass
elif la_ == 13:
- self.state = 486
+ self.state = 489
self.dataStructBitField16(FieldInUnion)
pass
elif la_ == 14:
- self.state = 487
+ self.state = 490
self.dataStructBitField8(FieldInUnion)
pass
- self.state = 492
+ self.state = 495
self._errHandler.sync(self)
_la = self._input.LA(1)
@@ -3042,23 +3052,23 @@ class VfrSyntaxParser ( Parser ):
self._la = 0 # Token type
try:
self.enterOuterAlt(localctx, 1)
- self.state = 493
+ self.state = 496
self.match(VfrSyntaxParser.Uint64)
- self.state = 494
+ self.state = 497
localctx.N = self.match(VfrSyntaxParser.StringIdentifier)
- self.state = 498
+ self.state = 501
self._errHandler.sync(self)
_la = self._input.LA(1)
if _la==VfrSyntaxParser.OpenBracket:
- self.state = 495
+ self.state = 498
self.match(VfrSyntaxParser.OpenBracket)
- self.state = 496
+ self.state = 499
self.match(VfrSyntaxParser.Number)
- self.state = 497
+ self.state = 500
self.match(VfrSyntaxParser.CloseBracket)
- self.state = 500
+ self.state = 503
self.match(VfrSyntaxParser.Semicolon)
except RecognitionException as re:
localctx.exception = re
@@ -3115,23 +3125,23 @@ class VfrSyntaxParser ( Parser ):
self._la = 0 # Token type
try:
self.enterOuterAlt(localctx, 1)
- self.state = 502
+ self.state = 505
self.match(VfrSyntaxParser.Uint32)
- self.state = 503
+ self.state = 506
localctx.N = self.match(VfrSyntaxParser.StringIdentifier)
- self.state = 507
+ self.state = 510
self._errHandler.sync(self)
_la = self._input.LA(1)
if _la==VfrSyntaxParser.OpenBracket:
- self.state = 504
+ self.state = 507
self.match(VfrSyntaxParser.OpenBracket)
- self.state = 505
+ self.state = 508
self.match(VfrSyntaxParser.Number)
- self.state = 506
+ self.state = 509
self.match(VfrSyntaxParser.CloseBracket)
- self.state = 509
+ self.state = 512
self.match(VfrSyntaxParser.Semicolon)
except RecognitionException as re:
localctx.exception = re
@@ -3188,23 +3198,23 @@ class VfrSyntaxParser ( Parser ):
self._la = 0 # Token type
try:
self.enterOuterAlt(localctx, 1)
- self.state = 511
+ self.state = 514
self.match(VfrSyntaxParser.Uint16)
- self.state = 512
+ self.state = 515
localctx.N = self.match(VfrSyntaxParser.StringIdentifier)
- self.state = 516
+ self.state = 519
self._errHandler.sync(self)
_la = self._input.LA(1)
if _la==VfrSyntaxParser.OpenBracket:
- self.state = 513
+ self.state = 516
self.match(VfrSyntaxParser.OpenBracket)
- self.state = 514
+ self.state = 517
self.match(VfrSyntaxParser.Number)
- self.state = 515
+ self.state = 518
self.match(VfrSyntaxParser.CloseBracket)
- self.state = 518
+ self.state = 521
self.match(VfrSyntaxParser.Semicolon)
except RecognitionException as re:
localctx.exception = re
@@ -3261,23 +3271,23 @@ class VfrSyntaxParser ( Parser ):
self._la = 0 # Token type
try:
self.enterOuterAlt(localctx, 1)
- self.state = 520
+ self.state = 523
self.match(VfrSyntaxParser.Uint8)
- self.state = 521
+ self.state = 524
localctx.N = self.match(VfrSyntaxParser.StringIdentifier)
- self.state = 525
+ self.state = 528
self._errHandler.sync(self)
_la = self._input.LA(1)
if _la==VfrSyntaxParser.OpenBracket:
- self.state = 522
+ self.state = 525
self.match(VfrSyntaxParser.OpenBracket)
- self.state = 523
+ self.state = 526
self.match(VfrSyntaxParser.Number)
- self.state = 524
+ self.state = 527
self.match(VfrSyntaxParser.CloseBracket)
- self.state = 527
+ self.state = 530
self.match(VfrSyntaxParser.Semicolon)
except RecognitionException as re:
localctx.exception = re
@@ -3334,23 +3344,23 @@ class VfrSyntaxParser ( Parser ):
self._la = 0 # Token type
try:
self.enterOuterAlt(localctx, 1)
- self.state = 529
+ self.state = 532
self.match(VfrSyntaxParser.Boolean)
- self.state = 530
+ self.state = 533
localctx.N = self.match(VfrSyntaxParser.StringIdentifier)
- self.state = 534
+ self.state = 537
self._errHandler.sync(self)
_la = self._input.LA(1)
if _la==VfrSyntaxParser.OpenBracket:
- self.state = 531
+ self.state = 534
self.match(VfrSyntaxParser.OpenBracket)
- self.state = 532
+ self.state = 535
self.match(VfrSyntaxParser.Number)
- self.state = 533
+ self.state = 536
self.match(VfrSyntaxParser.CloseBracket)
- self.state = 536
+ self.state = 539
self.match(VfrSyntaxParser.Semicolon)
except RecognitionException as re:
localctx.exception = re
@@ -3407,23 +3417,23 @@ class VfrSyntaxParser ( Parser ):
self._la = 0 # Token type
try:
self.enterOuterAlt(localctx, 1)
- self.state = 538
+ self.state = 541
self.match(VfrSyntaxParser.EFI_STRING_ID)
- self.state = 539
+ self.state = 542
localctx.N = self.match(VfrSyntaxParser.StringIdentifier)
- self.state = 543
+ self.state = 546
self._errHandler.sync(self)
_la = self._input.LA(1)
if _la==VfrSyntaxParser.OpenBracket:
- self.state = 540
+ self.state = 543
self.match(VfrSyntaxParser.OpenBracket)
- self.state = 541
+ self.state = 544
self.match(VfrSyntaxParser.Number)
- self.state = 542
+ self.state = 545
self.match(VfrSyntaxParser.CloseBracket)
- self.state = 545
+ self.state = 548
self.match(VfrSyntaxParser.Semicolon)
except RecognitionException as re:
localctx.exception = re
@@ -3480,23 +3490,23 @@ class VfrSyntaxParser ( Parser ):
self._la = 0 # Token type
try:
self.enterOuterAlt(localctx, 1)
- self.state = 547
+ self.state = 550
self.match(VfrSyntaxParser.EFI_HII_DATE)
- self.state = 548
+ self.state = 551
localctx.N = self.match(VfrSyntaxParser.StringIdentifier)
- self.state = 552
+ self.state = 555
self._errHandler.sync(self)
_la = self._input.LA(1)
if _la==VfrSyntaxParser.OpenBracket:
- self.state = 549
+ self.state = 552
self.match(VfrSyntaxParser.OpenBracket)
- self.state = 550
+ self.state = 553
self.match(VfrSyntaxParser.Number)
- self.state = 551
+ self.state = 554
self.match(VfrSyntaxParser.CloseBracket)
- self.state = 554
+ self.state = 557
self.match(VfrSyntaxParser.Semicolon)
except RecognitionException as re:
localctx.exception = re
@@ -3553,23 +3563,23 @@ class VfrSyntaxParser ( Parser ):
self._la = 0 # Token type
try:
self.enterOuterAlt(localctx, 1)
- self.state = 556
+ self.state = 559
self.match(VfrSyntaxParser.EFI_HII_TIME)
- self.state = 557
+ self.state = 560
localctx.N = self.match(VfrSyntaxParser.StringIdentifier)
- self.state = 561
+ self.state = 564
self._errHandler.sync(self)
_la = self._input.LA(1)
if _la==VfrSyntaxParser.OpenBracket:
- self.state = 558
+ self.state = 561
self.match(VfrSyntaxParser.OpenBracket)
- self.state = 559
+ self.state = 562
self.match(VfrSyntaxParser.Number)
- self.state = 560
+ self.state = 563
self.match(VfrSyntaxParser.CloseBracket)
- self.state = 563
+ self.state = 566
self.match(VfrSyntaxParser.Semicolon)
except RecognitionException as re:
localctx.exception = re
@@ -3626,23 +3636,23 @@ class VfrSyntaxParser ( Parser ):
self._la = 0 # Token type
try:
self.enterOuterAlt(localctx, 1)
- self.state = 565
+ self.state = 568
self.match(VfrSyntaxParser.EFI_HII_REF)
- self.state = 566
+ self.state = 569
localctx.N = self.match(VfrSyntaxParser.StringIdentifier)
- self.state = 570
+ self.state = 573
self._errHandler.sync(self)
_la = self._input.LA(1)
if _la==VfrSyntaxParser.OpenBracket:
- self.state = 567
+ self.state = 570
self.match(VfrSyntaxParser.OpenBracket)
- self.state = 568
+ self.state = 571
self.match(VfrSyntaxParser.Number)
- self.state = 569
+ self.state = 572
self.match(VfrSyntaxParser.CloseBracket)
- self.state = 572
+ self.state = 575
self.match(VfrSyntaxParser.Semicolon)
except RecognitionException as re:
localctx.exception = re
@@ -3700,23 +3710,23 @@ class VfrSyntaxParser ( Parser ):
self._la = 0 # Token type
try:
self.enterOuterAlt(localctx, 1)
- self.state = 574
+ self.state = 577
localctx.T = self.match(VfrSyntaxParser.StringIdentifier)
- self.state = 575
+ self.state = 578
localctx.N = self.match(VfrSyntaxParser.StringIdentifier)
- self.state = 579
+ self.state = 582
self._errHandler.sync(self)
_la = self._input.LA(1)
if _la==VfrSyntaxParser.OpenBracket:
- self.state = 576
+ self.state = 579
self.match(VfrSyntaxParser.OpenBracket)
- self.state = 577
+ self.state = 580
self.match(VfrSyntaxParser.Number)
- self.state = 578
+ self.state = 581
self.match(VfrSyntaxParser.CloseBracket)
- self.state = 581
+ self.state = 584
self.match(VfrSyntaxParser.Semicolon)
except RecognitionException as re:
localctx.exception = re
@@ -3771,21 +3781,21 @@ class VfrSyntaxParser ( Parser ):
self._la = 0 # Token type
try:
self.enterOuterAlt(localctx, 1)
- self.state = 583
+ self.state = 586
localctx.D = self.match(VfrSyntaxParser.Uint64)
- self.state = 585
+ self.state = 588
self._errHandler.sync(self)
_la = self._input.LA(1)
if _la==VfrSyntaxParser.StringIdentifier:
- self.state = 584
+ self.state = 587
localctx.N = self.match(VfrSyntaxParser.StringIdentifier)
- self.state = 587
+ self.state = 590
self.match(VfrSyntaxParser.Colon)
- self.state = 588
+ self.state = 591
self.match(VfrSyntaxParser.Number)
- self.state = 589
+ self.state = 592
self.match(VfrSyntaxParser.Semicolon)
except RecognitionException as re:
localctx.exception = re
@@ -3840,21 +3850,21 @@ class VfrSyntaxParser ( Parser ):
self._la = 0 # Token type
try:
self.enterOuterAlt(localctx, 1)
- self.state = 591
+ self.state = 594
localctx.D = self.match(VfrSyntaxParser.Uint32)
- self.state = 593
+ self.state = 596
self._errHandler.sync(self)
_la = self._input.LA(1)
if _la==VfrSyntaxParser.StringIdentifier:
- self.state = 592
+ self.state = 595
localctx.N = self.match(VfrSyntaxParser.StringIdentifier)
- self.state = 595
+ self.state = 598
self.match(VfrSyntaxParser.Colon)
- self.state = 596
+ self.state = 599
self.match(VfrSyntaxParser.Number)
- self.state = 597
+ self.state = 600
self.match(VfrSyntaxParser.Semicolon)
except RecognitionException as re:
localctx.exception = re
@@ -3909,21 +3919,21 @@ class VfrSyntaxParser ( Parser ):
self._la = 0 # Token type
try:
self.enterOuterAlt(localctx, 1)
- self.state = 599
+ self.state = 602
localctx.D = self.match(VfrSyntaxParser.Uint16)
- self.state = 601
+ self.state = 604
self._errHandler.sync(self)
_la = self._input.LA(1)
if _la==VfrSyntaxParser.StringIdentifier:
- self.state = 600
+ self.state = 603
localctx.N = self.match(VfrSyntaxParser.StringIdentifier)
- self.state = 603
+ self.state = 606
self.match(VfrSyntaxParser.Colon)
- self.state = 604
+ self.state = 607
self.match(VfrSyntaxParser.Number)
- self.state = 605
+ self.state = 608
self.match(VfrSyntaxParser.Semicolon)
except RecognitionException as re:
localctx.exception = re
@@ -3978,21 +3988,21 @@ class VfrSyntaxParser ( Parser ):
self._la = 0 # Token type
try:
self.enterOuterAlt(localctx, 1)
- self.state = 607
+ self.state = 610
localctx.D = self.match(VfrSyntaxParser.Uint8)
- self.state = 609
+ self.state = 612
self._errHandler.sync(self)
_la = self._input.LA(1)
if _la==VfrSyntaxParser.StringIdentifier:
- self.state = 608
+ self.state = 611
localctx.N = self.match(VfrSyntaxParser.StringIdentifier)
- self.state = 611
+ self.state = 614
self.match(VfrSyntaxParser.Colon)
- self.state = 612
+ self.state = 615
self.match(VfrSyntaxParser.Number)
- self.state = 613
+ self.state = 616
self.match(VfrSyntaxParser.Semicolon)
except RecognitionException as re:
localctx.exception = re
@@ -4008,7 +4018,7 @@ class VfrSyntaxParser ( Parser ):
def __init__(self, parser, parent:ParserRuleContext=None, invokingState:int=-1):
super().__init__(parent, invokingState)
self.parser = parser
- self.Node = VfrTreeNode(EFI_IFR_FORM_SET_OP)
+ self.Node = IfrTreeNode(EFI_IFR_FORM_SET_OP)
def FormSet(self):
return self.getToken(VfrSyntaxParser.FormSet, 0)
@@ -4106,91 +4116,91 @@ class VfrSyntaxParser ( Parser ):
self._la = 0 # Token type
try:
self.enterOuterAlt(localctx, 1)
- self.state = 615
+ self.state = 618
self.match(VfrSyntaxParser.FormSet)
- self.state = 616
+ self.state = 619
self.match(VfrSyntaxParser.Uuid)
- self.state = 617
+ self.state = 620
self.match(VfrSyntaxParser.T__5)
- self.state = 618
+ self.state = 621
self.guidDefinition()
- self.state = 619
+ self.state = 622
self.match(VfrSyntaxParser.Comma)
- self.state = 620
+ self.state = 623
self.match(VfrSyntaxParser.Title)
- self.state = 621
+ self.state = 624
self.match(VfrSyntaxParser.T__5)
- self.state = 622
+ self.state = 625
self.match(VfrSyntaxParser.StringToken)
- self.state = 623
+ self.state = 626
self.match(VfrSyntaxParser.OpenParen)
- self.state = 624
+ self.state = 627
self.match(VfrSyntaxParser.Number)
- self.state = 625
+ self.state = 628
self.match(VfrSyntaxParser.CloseParen)
- self.state = 626
+ self.state = 629
self.match(VfrSyntaxParser.Comma)
- self.state = 627
+ self.state = 630
self.match(VfrSyntaxParser.Help)
- self.state = 628
+ self.state = 631
self.match(VfrSyntaxParser.T__5)
- self.state = 629
+ self.state = 632
self.match(VfrSyntaxParser.StringToken)
- self.state = 630
+ self.state = 633
self.match(VfrSyntaxParser.OpenParen)
- self.state = 631
+ self.state = 634
self.match(VfrSyntaxParser.Number)
- self.state = 632
+ self.state = 635
self.match(VfrSyntaxParser.CloseParen)
- self.state = 633
+ self.state = 636
self.match(VfrSyntaxParser.Comma)
- self.state = 639
+ self.state = 642
self._errHandler.sync(self)
_la = self._input.LA(1)
if _la==VfrSyntaxParser.ClassGuid:
- self.state = 634
+ self.state = 637
self.match(VfrSyntaxParser.ClassGuid)
- self.state = 635
+ self.state = 638
self.match(VfrSyntaxParser.T__5)
- self.state = 636
+ self.state = 639
self.classguidDefinition(localctx.Node)
- self.state = 637
+ self.state = 640
self.match(VfrSyntaxParser.Comma)
- self.state = 646
+ self.state = 649
self._errHandler.sync(self)
_la = self._input.LA(1)
if _la==VfrSyntaxParser.Class:
- self.state = 641
+ self.state = 644
self.match(VfrSyntaxParser.Class)
- self.state = 642
+ self.state = 645
self.match(VfrSyntaxParser.T__5)
- self.state = 643
+ self.state = 646
self.classDefinition()
- self.state = 644
+ self.state = 647
self.match(VfrSyntaxParser.Comma)
- self.state = 653
+ self.state = 656
self._errHandler.sync(self)
_la = self._input.LA(1)
if _la==VfrSyntaxParser.Subclass:
- self.state = 648
+ self.state = 651
self.match(VfrSyntaxParser.Subclass)
- self.state = 649
+ self.state = 652
self.match(VfrSyntaxParser.T__5)
- self.state = 650
+ self.state = 653
self.subclassDefinition()
- self.state = 651
+ self.state = 654
self.match(VfrSyntaxParser.Comma)
- self.state = 655
+ self.state = 658
self.vfrFormSetList(localctx.Node)
- self.state = 656
+ self.state = 659
self.match(VfrSyntaxParser.EndFormSet)
- self.state = 657
+ self.state = 660
self.match(VfrSyntaxParser.Semicolon)
except RecognitionException as re:
localctx.exception = re
@@ -4242,35 +4252,35 @@ class VfrSyntaxParser ( Parser ):
self._la = 0 # Token type
try:
self.enterOuterAlt(localctx, 1)
- self.state = 659
- self.guidDefinition()
self.state = 662
+ self.guidDefinition()
+ self.state = 665
self._errHandler.sync(self)
- la_ = self._interp.adaptivePredict(self._input,33,self._ctx)
+ la_ = self._interp.adaptivePredict(self._input,34,self._ctx)
if la_ == 1:
- self.state = 660
+ self.state = 663
self.match(VfrSyntaxParser.BitWiseOr)
- self.state = 661
+ self.state = 664
self.guidDefinition()
- self.state = 666
+ self.state = 669
self._errHandler.sync(self)
- la_ = self._interp.adaptivePredict(self._input,34,self._ctx)
+ la_ = self._interp.adaptivePredict(self._input,35,self._ctx)
if la_ == 1:
- self.state = 664
+ self.state = 667
self.match(VfrSyntaxParser.BitWiseOr)
- self.state = 665
+ self.state = 668
self.guidDefinition()
- self.state = 670
+ self.state = 673
self._errHandler.sync(self)
_la = self._input.LA(1)
if _la==VfrSyntaxParser.BitWiseOr:
- self.state = 668
+ self.state = 671
self.match(VfrSyntaxParser.BitWiseOr)
- self.state = 669
+ self.state = 672
self.guidDefinition()
@@ -4288,7 +4298,7 @@ class VfrSyntaxParser ( Parser ):
def __init__(self, parser, parent:ParserRuleContext=None, invokingState:int=-1):
super().__init__(parent, invokingState)
self.parser = parser
- self.Node = VfrTreeNode(EFI_IFR_GUID_OP)
+ self.Node = IfrTreeNode(EFI_IFR_GUID_OP)
def validClassNames(self, i:int=None):
if i is None:
@@ -4322,17 +4332,17 @@ class VfrSyntaxParser ( Parser ):
self._la = 0 # Token type
try:
self.enterOuterAlt(localctx, 1)
- self.state = 672
+ self.state = 675
self.validClassNames()
- self.state = 677
+ self.state = 680
self._errHandler.sync(self)
_la = self._input.LA(1)
while _la==VfrSyntaxParser.BitWiseOr:
- self.state = 673
+ self.state = 676
self.match(VfrSyntaxParser.BitWiseOr)
- self.state = 674
+ self.state = 677
self.validClassNames()
- self.state = 679
+ self.state = 682
self._errHandler.sync(self)
_la = self._input.LA(1)
@@ -4395,7 +4405,7 @@ class VfrSyntaxParser ( Parser ):
self._la = 0 # Token type
try:
self.enterOuterAlt(localctx, 1)
- self.state = 680
+ self.state = 683
_la = self._input.LA(1)
if not(((((_la - 170)) & ~0x3f) == 0 and ((1 << (_la - 170)) & ((1 << (VfrSyntaxParser.ClassNonDevice - 170)) | (1 << (VfrSyntaxParser.ClassDiskDevice - 170)) | (1 << (VfrSyntaxParser.ClassVideoDevice - 170)) | (1 << (VfrSyntaxParser.ClassNetworkDevice - 170)) | (1 << (VfrSyntaxParser.ClassInputDevice - 170)) | (1 << (VfrSyntaxParser.ClassOnBoardDevice - 170)) | (1 << (VfrSyntaxParser.ClassOtherDevice - 170)))) != 0) or _la==VfrSyntaxParser.Number):
self._errHandler.recoverInline(self)
@@ -4416,7 +4426,7 @@ class VfrSyntaxParser ( Parser ):
def __init__(self, parser, parent:ParserRuleContext=None, invokingState:int=-1):
super().__init__(parent, invokingState)
self.parser = parser
- self.Node = VfrTreeNode(EFI_IFR_GUID_OP)
+ self.Node = IfrTreeNode(EFI_IFR_GUID_OP)
def SubclassSetupApplication(self):
return self.getToken(VfrSyntaxParser.SubclassSetupApplication, 0)
@@ -4452,7 +4462,7 @@ class VfrSyntaxParser ( Parser ):
self._la = 0 # Token type
try:
self.enterOuterAlt(localctx, 1)
- self.state = 682
+ self.state = 685
_la = self._input.LA(1)
if not(((((_la - 177)) & ~0x3f) == 0 and ((1 << (_la - 177)) & ((1 << (VfrSyntaxParser.SubclassSetupApplication - 177)) | (1 << (VfrSyntaxParser.SubclassGeneralApplication - 177)) | (1 << (VfrSyntaxParser.SubclassFrontPage - 177)) | (1 << (VfrSyntaxParser.SubclassSingleUse - 177)))) != 0) or _la==VfrSyntaxParser.Number):
self._errHandler.recoverInline(self)
@@ -4502,13 +4512,13 @@ class VfrSyntaxParser ( Parser ):
self._la = 0 # Token type
try:
self.enterOuterAlt(localctx, 1)
- self.state = 687
+ self.state = 690
self._errHandler.sync(self)
_la = self._input.LA(1)
while _la==VfrSyntaxParser.Form or _la==VfrSyntaxParser.FormMap or ((((_la - 105)) & ~0x3f) == 0 and ((1 << (_la - 105)) & ((1 << (VfrSyntaxParser.SuppressIf - 105)) | (1 << (VfrSyntaxParser.DisableIf - 105)) | (1 << (VfrSyntaxParser.Image - 105)) | (1 << (VfrSyntaxParser.DefaultStore - 105)) | (1 << (VfrSyntaxParser.Varstore - 105)) | (1 << (VfrSyntaxParser.Efivarstore - 105)) | (1 << (VfrSyntaxParser.NameValueVarStore - 105)) | (1 << (VfrSyntaxParser.GuidOp - 105)))) != 0):
- self.state = 684
+ self.state = 687
self.vfrFormSet()
- self.state = 689
+ self.state = 692
self._errHandler.sync(self)
_la = self._input.LA(1)
@@ -4586,47 +4596,47 @@ class VfrSyntaxParser ( Parser ):
self.enterRule(localctx, 56, self.RULE_vfrFormSet)
try:
self.enterOuterAlt(localctx, 1)
- self.state = 700
+ self.state = 703
self._errHandler.sync(self)
token = self._input.LA(1)
if token in [VfrSyntaxParser.Form]:
- self.state = 690
+ self.state = 693
self.vfrFormDefinition()
pass
elif token in [VfrSyntaxParser.FormMap]:
- self.state = 691
+ self.state = 694
self.vfrFormMapDefinition()
pass
elif token in [VfrSyntaxParser.Image]:
- self.state = 692
+ self.state = 695
self.vfrStatementImage()
pass
elif token in [VfrSyntaxParser.Varstore]:
- self.state = 693
+ self.state = 696
self.vfrStatementVarStoreLinear()
pass
elif token in [VfrSyntaxParser.Efivarstore]:
- self.state = 694
+ self.state = 697
self.vfrStatementVarStoreEfi()
pass
elif token in [VfrSyntaxParser.NameValueVarStore]:
- self.state = 695
+ self.state = 698
self.vfrStatementVarStoreNameValue()
pass
elif token in [VfrSyntaxParser.DefaultStore]:
- self.state = 696
+ self.state = 699
self.vfrStatementDefaultStore()
pass
elif token in [VfrSyntaxParser.DisableIf]:
- self.state = 697
+ self.state = 700
self.vfrStatementDisableIfFormSet()
pass
elif token in [VfrSyntaxParser.SuppressIf]:
- self.state = 698
+ self.state = 701
self.vfrStatementSuppressIfFormSet()
pass
elif token in [VfrSyntaxParser.GuidOp]:
- self.state = 699
+ self.state = 702
self.vfrStatementExtension()
pass
else:
@@ -4646,7 +4656,7 @@ class VfrSyntaxParser ( Parser ):
def __init__(self, parser, parent:ParserRuleContext=None, invokingState:int=-1):
super().__init__(parent, invokingState)
self.parser = parser
- self.Node = VfrTreeNode(EFI_IFR_DEFAULTSTORE_OP)
+ self.Node = IfrTreeNode(EFI_IFR_DEFAULTSTORE_OP)
self.N = None # Token
self.S = None # Token
self.A = None # Token
@@ -4706,39 +4716,39 @@ class VfrSyntaxParser ( Parser ):
self._la = 0 # Token type
try:
self.enterOuterAlt(localctx, 1)
- self.state = 702
+ self.state = 705
self.match(VfrSyntaxParser.DefaultStore)
- self.state = 703
+ self.state = 706
localctx.N = self.match(VfrSyntaxParser.StringIdentifier)
- self.state = 704
+ self.state = 707
self.match(VfrSyntaxParser.Comma)
- self.state = 705
+ self.state = 708
self.match(VfrSyntaxParser.Prompt)
- self.state = 706
+ self.state = 709
self.match(VfrSyntaxParser.T__5)
- self.state = 707
+ self.state = 710
self.match(VfrSyntaxParser.StringToken)
- self.state = 708
+ self.state = 711
self.match(VfrSyntaxParser.OpenParen)
- self.state = 709
+ self.state = 712
localctx.S = self.match(VfrSyntaxParser.Number)
- self.state = 710
+ self.state = 713
self.match(VfrSyntaxParser.CloseParen)
- self.state = 715
+ self.state = 718
self._errHandler.sync(self)
_la = self._input.LA(1)
if _la==VfrSyntaxParser.Comma:
- self.state = 711
+ self.state = 714
self.match(VfrSyntaxParser.Comma)
- self.state = 712
+ self.state = 715
self.match(VfrSyntaxParser.Attribute)
- self.state = 713
+ self.state = 716
self.match(VfrSyntaxParser.T__5)
- self.state = 714
+ self.state = 717
localctx.A = self.match(VfrSyntaxParser.Number)
- self.state = 717
+ self.state = 720
self.match(VfrSyntaxParser.Semicolon)
except RecognitionException as re:
localctx.exception = re
@@ -4754,7 +4764,7 @@ class VfrSyntaxParser ( Parser ):
def __init__(self, parser, parent:ParserRuleContext=None, invokingState:int=-1):
super().__init__(parent, invokingState)
self.parser = parser
- self.Node = VfrTreeNode(EFI_IFR_VARSTORE_OP)
+ self.Node = IfrTreeNode(EFI_IFR_VARSTORE_OP)
self.TN = None # Token
self.ID = None # Token
self.SN = None # Token
@@ -4833,91 +4843,91 @@ class VfrSyntaxParser ( Parser ):
self._la = 0 # Token type
try:
self.enterOuterAlt(localctx, 1)
- self.state = 719
+ self.state = 722
self.match(VfrSyntaxParser.Varstore)
- self.state = 736
+ self.state = 739
self._errHandler.sync(self)
token = self._input.LA(1)
if token in [VfrSyntaxParser.StringIdentifier]:
- self.state = 720
+ self.state = 723
localctx.TN = self.match(VfrSyntaxParser.StringIdentifier)
- self.state = 721
+ self.state = 724
self.match(VfrSyntaxParser.Comma)
pass
elif token in [VfrSyntaxParser.Uint8]:
- self.state = 722
+ self.state = 725
self.match(VfrSyntaxParser.Uint8)
- self.state = 723
+ self.state = 726
self.match(VfrSyntaxParser.Comma)
pass
elif token in [VfrSyntaxParser.Uint16]:
- self.state = 724
+ self.state = 727
self.match(VfrSyntaxParser.Uint16)
- self.state = 725
+ self.state = 728
self.match(VfrSyntaxParser.Comma)
pass
elif token in [VfrSyntaxParser.Uint32]:
- self.state = 726
+ self.state = 729
self.match(VfrSyntaxParser.Uint32)
- self.state = 727
+ self.state = 730
self.match(VfrSyntaxParser.Comma)
pass
elif token in [VfrSyntaxParser.Uint64]:
- self.state = 728
+ self.state = 731
self.match(VfrSyntaxParser.Uint64)
- self.state = 729
+ self.state = 732
self.match(VfrSyntaxParser.Comma)
pass
elif token in [VfrSyntaxParser.EFI_HII_DATE]:
- self.state = 730
+ self.state = 733
self.match(VfrSyntaxParser.EFI_HII_DATE)
- self.state = 731
+ self.state = 734
self.match(VfrSyntaxParser.Comma)
pass
elif token in [VfrSyntaxParser.EFI_HII_TIME]:
- self.state = 732
+ self.state = 735
self.match(VfrSyntaxParser.EFI_HII_TIME)
- self.state = 733
+ self.state = 736
self.match(VfrSyntaxParser.Comma)
pass
elif token in [VfrSyntaxParser.EFI_HII_REF]:
- self.state = 734
+ self.state = 737
self.match(VfrSyntaxParser.EFI_HII_REF)
- self.state = 735
+ self.state = 738
self.match(VfrSyntaxParser.Comma)
pass
else:
raise NoViableAltException(self)
- self.state = 742
+ self.state = 745
self._errHandler.sync(self)
_la = self._input.LA(1)
if _la==VfrSyntaxParser.VarId:
- self.state = 738
+ self.state = 741
self.match(VfrSyntaxParser.VarId)
- self.state = 739
+ self.state = 742
self.match(VfrSyntaxParser.T__5)
- self.state = 740
+ self.state = 743
localctx.ID = self.match(VfrSyntaxParser.Number)
- self.state = 741
+ self.state = 744
self.match(VfrSyntaxParser.Comma)
- self.state = 744
+ self.state = 747
self.match(VfrSyntaxParser.Name)
- self.state = 745
+ self.state = 748
self.match(VfrSyntaxParser.T__5)
- self.state = 746
+ self.state = 749
localctx.SN = self.match(VfrSyntaxParser.StringIdentifier)
- self.state = 747
+ self.state = 750
self.match(VfrSyntaxParser.Comma)
- self.state = 748
+ self.state = 751
self.match(VfrSyntaxParser.Uuid)
- self.state = 749
+ self.state = 752
self.match(VfrSyntaxParser.T__5)
- self.state = 750
+ self.state = 753
self.guidDefinition()
- self.state = 751
+ self.state = 754
self.match(VfrSyntaxParser.Semicolon)
except RecognitionException as re:
localctx.exception = re
@@ -4933,7 +4943,7 @@ class VfrSyntaxParser ( Parser ):
def __init__(self, parser, parent:ParserRuleContext=None, invokingState:int=-1):
super().__init__(parent, invokingState)
self.parser = parser
- self.Node = VfrTreeNode(EFI_IFR_VARSTORE_EFI_OP)
+ self.Node = IfrTreeNode(EFI_IFR_VARSTORE_EFI_OP)
self.TN = None # Token
self.ID = None # Token
self.SN = None # Token
@@ -5045,143 +5055,143 @@ class VfrSyntaxParser ( Parser ):
self._la = 0 # Token type
try:
self.enterOuterAlt(localctx, 1)
- self.state = 753
+ self.state = 756
self.match(VfrSyntaxParser.Efivarstore)
- self.state = 770
+ self.state = 773
self._errHandler.sync(self)
token = self._input.LA(1)
if token in [VfrSyntaxParser.StringIdentifier]:
- self.state = 754
+ self.state = 757
localctx.TN = self.match(VfrSyntaxParser.StringIdentifier)
- self.state = 755
+ self.state = 758
self.match(VfrSyntaxParser.Comma)
pass
elif token in [VfrSyntaxParser.Uint8]:
- self.state = 756
+ self.state = 759
self.match(VfrSyntaxParser.Uint8)
- self.state = 757
+ self.state = 760
self.match(VfrSyntaxParser.Comma)
pass
elif token in [VfrSyntaxParser.Uint16]:
- self.state = 758
+ self.state = 761
self.match(VfrSyntaxParser.Uint16)
- self.state = 759
+ self.state = 762
self.match(VfrSyntaxParser.Comma)
pass
elif token in [VfrSyntaxParser.Uint32]:
- self.state = 760
+ self.state = 763
self.match(VfrSyntaxParser.Uint32)
- self.state = 761
+ self.state = 764
self.match(VfrSyntaxParser.Comma)
pass
elif token in [VfrSyntaxParser.Uint64]:
- self.state = 762
+ self.state = 765
self.match(VfrSyntaxParser.Uint64)
- self.state = 763
+ self.state = 766
self.match(VfrSyntaxParser.Comma)
pass
elif token in [VfrSyntaxParser.EFI_HII_DATE]:
- self.state = 764
+ self.state = 767
self.match(VfrSyntaxParser.EFI_HII_DATE)
- self.state = 765
+ self.state = 768
self.match(VfrSyntaxParser.Comma)
pass
elif token in [VfrSyntaxParser.EFI_HII_TIME]:
- self.state = 766
+ self.state = 769
self.match(VfrSyntaxParser.EFI_HII_TIME)
- self.state = 767
+ self.state = 770
self.match(VfrSyntaxParser.Comma)
pass
elif token in [VfrSyntaxParser.EFI_HII_REF]:
- self.state = 768
+ self.state = 771
self.match(VfrSyntaxParser.EFI_HII_REF)
- self.state = 769
+ self.state = 772
self.match(VfrSyntaxParser.Comma)
pass
else:
raise NoViableAltException(self)
- self.state = 776
+ self.state = 779
self._errHandler.sync(self)
_la = self._input.LA(1)
if _la==VfrSyntaxParser.VarId:
- self.state = 772
+ self.state = 775
self.match(VfrSyntaxParser.VarId)
- self.state = 773
+ self.state = 776
self.match(VfrSyntaxParser.T__5)
- self.state = 774
+ self.state = 777
localctx.ID = self.match(VfrSyntaxParser.Number)
- self.state = 775
+ self.state = 778
self.match(VfrSyntaxParser.Comma)
- self.state = 778
+ self.state = 781
self.match(VfrSyntaxParser.Attribute)
- self.state = 779
+ self.state = 782
self.match(VfrSyntaxParser.T__5)
- self.state = 780
+ self.state = 783
self.vfrVarStoreEfiAttr()
- self.state = 785
+ self.state = 788
self._errHandler.sync(self)
_la = self._input.LA(1)
while _la==VfrSyntaxParser.BitWiseOr:
- self.state = 781
+ self.state = 784
self.match(VfrSyntaxParser.BitWiseOr)
- self.state = 782
+ self.state = 785
self.vfrVarStoreEfiAttr()
- self.state = 787
+ self.state = 790
self._errHandler.sync(self)
_la = self._input.LA(1)
- self.state = 788
+ self.state = 791
self.match(VfrSyntaxParser.Comma)
- self.state = 804
+ self.state = 807
self._errHandler.sync(self)
- la_ = self._interp.adaptivePredict(self._input,45,self._ctx)
+ la_ = self._interp.adaptivePredict(self._input,46,self._ctx)
if la_ == 1:
- self.state = 789
+ self.state = 792
self.match(VfrSyntaxParser.Name)
- self.state = 790
+ self.state = 793
self.match(VfrSyntaxParser.T__5)
- self.state = 791
+ self.state = 794
localctx.SN = self.match(VfrSyntaxParser.StringIdentifier)
- self.state = 792
+ self.state = 795
self.match(VfrSyntaxParser.Comma)
pass
elif la_ == 2:
- self.state = 793
+ self.state = 796
self.match(VfrSyntaxParser.Name)
- self.state = 794
+ self.state = 797
self.match(VfrSyntaxParser.T__5)
- self.state = 795
+ self.state = 798
self.match(VfrSyntaxParser.StringToken)
- self.state = 796
+ self.state = 799
self.match(VfrSyntaxParser.OpenParen)
- self.state = 797
+ self.state = 800
localctx.VN = self.match(VfrSyntaxParser.Number)
- self.state = 798
+ self.state = 801
self.match(VfrSyntaxParser.CloseParen)
- self.state = 799
+ self.state = 802
self.match(VfrSyntaxParser.Comma)
- self.state = 800
+ self.state = 803
self.match(VfrSyntaxParser.VarSize)
- self.state = 801
+ self.state = 804
self.match(VfrSyntaxParser.T__5)
- self.state = 802
+ self.state = 805
localctx.N = self.match(VfrSyntaxParser.Number)
- self.state = 803
+ self.state = 806
self.match(VfrSyntaxParser.Comma)
pass
- self.state = 806
+ self.state = 809
self.match(VfrSyntaxParser.Uuid)
- self.state = 807
+ self.state = 810
self.match(VfrSyntaxParser.T__5)
- self.state = 808
+ self.state = 811
self.guidDefinition()
- self.state = 809
+ self.state = 812
self.match(VfrSyntaxParser.Semicolon)
except RecognitionException as re:
localctx.exception = re
@@ -5220,7 +5230,7 @@ class VfrSyntaxParser ( Parser ):
self.enterRule(localctx, 64, self.RULE_vfrVarStoreEfiAttr)
try:
self.enterOuterAlt(localctx, 1)
- self.state = 811
+ self.state = 814
self.match(VfrSyntaxParser.Number)
except RecognitionException as re:
localctx.exception = re
@@ -5236,7 +5246,7 @@ class VfrSyntaxParser ( Parser ):
def __init__(self, parser, parent:ParserRuleContext=None, invokingState:int=-1):
super().__init__(parent, invokingState)
self.parser = parser
- self.Node = VfrTreeNode(EFI_IFR_VARSTORE_NAME_VALUE_OP)
+ self.Node = IfrTreeNode(EFI_IFR_VARSTORE_NAME_VALUE_OP)
self.SN = None # Token
self.ID = None # Token
@@ -5314,57 +5324,57 @@ class VfrSyntaxParser ( Parser ):
self._la = 0 # Token type
try:
self.enterOuterAlt(localctx, 1)
- self.state = 813
+ self.state = 816
self.match(VfrSyntaxParser.NameValueVarStore)
- self.state = 814
+ self.state = 817
localctx.SN = self.match(VfrSyntaxParser.StringIdentifier)
- self.state = 815
+ self.state = 818
self.match(VfrSyntaxParser.Comma)
- self.state = 820
+ self.state = 823
self._errHandler.sync(self)
_la = self._input.LA(1)
if _la==VfrSyntaxParser.VarId:
- self.state = 816
+ self.state = 819
self.match(VfrSyntaxParser.VarId)
- self.state = 817
+ self.state = 820
self.match(VfrSyntaxParser.T__5)
- self.state = 818
+ self.state = 821
localctx.ID = self.match(VfrSyntaxParser.Number)
- self.state = 819
+ self.state = 822
self.match(VfrSyntaxParser.Comma)
- self.state = 829
+ self.state = 832
self._errHandler.sync(self)
_la = self._input.LA(1)
while True:
- self.state = 822
+ self.state = 825
self.match(VfrSyntaxParser.Name)
- self.state = 823
+ self.state = 826
self.match(VfrSyntaxParser.T__5)
- self.state = 824
+ self.state = 827
self.match(VfrSyntaxParser.StringToken)
- self.state = 825
+ self.state = 828
self.match(VfrSyntaxParser.OpenParen)
- self.state = 826
+ self.state = 829
self.match(VfrSyntaxParser.Number)
- self.state = 827
+ self.state = 830
self.match(VfrSyntaxParser.CloseParen)
- self.state = 828
- self.match(VfrSyntaxParser.Comma)
self.state = 831
+ self.match(VfrSyntaxParser.Comma)
+ self.state = 834
self._errHandler.sync(self)
_la = self._input.LA(1)
if not (_la==VfrSyntaxParser.Name):
break
- self.state = 833
+ self.state = 836
self.match(VfrSyntaxParser.Uuid)
- self.state = 834
+ self.state = 837
self.match(VfrSyntaxParser.T__5)
- self.state = 835
+ self.state = 838
self.guidDefinition()
- self.state = 836
+ self.state = 839
self.match(VfrSyntaxParser.Semicolon)
except RecognitionException as re:
localctx.exception = re
@@ -5380,7 +5390,7 @@ class VfrSyntaxParser ( Parser ):
def __init__(self, parser, parent:ParserRuleContext=None, invokingState:int=-1):
super().__init__(parent, invokingState)
self.parser = parser
- self.Node = VfrTreeNode(EFI_IFR_DISABLE_IF_OP)
+ self.Node = IfrTreeNode(EFI_IFR_DISABLE_IF_OP)
def DisableIf(self):
return self.getToken(VfrSyntaxParser.DisableIf, 0)
@@ -5420,17 +5430,17 @@ class VfrSyntaxParser ( Parser ):
self.enterRule(localctx, 68, self.RULE_vfrStatementDisableIfFormSet)
try:
self.enterOuterAlt(localctx, 1)
- self.state = 838
+ self.state = 841
self.match(VfrSyntaxParser.DisableIf)
- self.state = 839
- self.vfrStatementExpression()
- self.state = 840
+ self.state = 842
+ self.vfrStatementExpression(localctx.Node)
+ self.state = 843
self.match(VfrSyntaxParser.Semicolon)
- self.state = 841
+ self.state = 844
self.vfrFormSetList(localctx.Node)
- self.state = 842
+ self.state = 845
self.match(VfrSyntaxParser.EndIf)
- self.state = 843
+ self.state = 846
self.match(VfrSyntaxParser.Semicolon)
except RecognitionException as re:
localctx.exception = re
@@ -5446,7 +5456,7 @@ class VfrSyntaxParser ( Parser ):
def __init__(self, parser, parent:ParserRuleContext=None, invokingState:int=-1):
super().__init__(parent, invokingState)
self.parser = parser
- self.Node = VfrTreeNode(EFI_IFR_SUPPRESS_IF_OP)
+ self.Node = IfrTreeNode(EFI_IFR_SUPPRESS_IF_OP)
def SuppressIf(self):
return self.getToken(VfrSyntaxParser.SuppressIf, 0)
@@ -5486,17 +5496,17 @@ class VfrSyntaxParser ( Parser ):
self.enterRule(localctx, 70, self.RULE_vfrStatementSuppressIfFormSet)
try:
self.enterOuterAlt(localctx, 1)
- self.state = 845
+ self.state = 848
self.match(VfrSyntaxParser.SuppressIf)
- self.state = 846
- self.vfrStatementExpression()
- self.state = 847
+ self.state = 849
+ self.vfrStatementExpression(localctx.Node)
+ self.state = 850
self.match(VfrSyntaxParser.Semicolon)
- self.state = 848
+ self.state = 851
self.vfrFormSetList(localctx.Node)
- self.state = 849
+ self.state = 852
self.match(VfrSyntaxParser.EndIf)
- self.state = 850
+ self.state = 853
self.match(VfrSyntaxParser.Semicolon)
except RecognitionException as re:
localctx.exception = re
@@ -5545,35 +5555,35 @@ class VfrSyntaxParser ( Parser ):
self.enterRule(localctx, 72, self.RULE_guidSubDefinition)
try:
self.enterOuterAlt(localctx, 1)
- self.state = 852
+ self.state = 855
self.match(VfrSyntaxParser.Number)
- self.state = 853
+ self.state = 856
self.match(VfrSyntaxParser.Comma)
- self.state = 854
+ self.state = 857
self.match(VfrSyntaxParser.Number)
- self.state = 855
+ self.state = 858
self.match(VfrSyntaxParser.Comma)
- self.state = 856
+ self.state = 859
self.match(VfrSyntaxParser.Number)
- self.state = 857
+ self.state = 860
self.match(VfrSyntaxParser.Comma)
- self.state = 858
+ self.state = 861
self.match(VfrSyntaxParser.Number)
- self.state = 859
+ self.state = 862
self.match(VfrSyntaxParser.Comma)
- self.state = 860
+ self.state = 863
self.match(VfrSyntaxParser.Number)
- self.state = 861
+ self.state = 864
self.match(VfrSyntaxParser.Comma)
- self.state = 862
+ self.state = 865
self.match(VfrSyntaxParser.Number)
- self.state = 863
+ self.state = 866
self.match(VfrSyntaxParser.Comma)
- self.state = 864
+ self.state = 867
self.match(VfrSyntaxParser.Number)
- self.state = 865
+ self.state = 868
self.match(VfrSyntaxParser.Comma)
- self.state = 866
+ self.state = 869
self.match(VfrSyntaxParser.Number)
except RecognitionException as re:
localctx.exception = re
@@ -5589,7 +5599,7 @@ class VfrSyntaxParser ( Parser ):
def __init__(self, parser, parent:ParserRuleContext=None, invokingState:int=-1):
super().__init__(parent, invokingState)
self.parser = parser
- self.Node = VfrTreeNode()
+ self.Node = IfrTreeNode()
self.Guid = EFI_GUID()
def OpenBrace(self, i:int=None):
@@ -5638,39 +5648,39 @@ class VfrSyntaxParser ( Parser ):
self.enterRule(localctx, 74, self.RULE_guidDefinition)
try:
self.enterOuterAlt(localctx, 1)
- self.state = 868
+ self.state = 871
self.match(VfrSyntaxParser.OpenBrace)
- self.state = 869
+ self.state = 872
self.match(VfrSyntaxParser.Number)
- self.state = 870
+ self.state = 873
self.match(VfrSyntaxParser.Comma)
- self.state = 871
+ self.state = 874
self.match(VfrSyntaxParser.Number)
- self.state = 872
+ self.state = 875
self.match(VfrSyntaxParser.Comma)
- self.state = 873
+ self.state = 876
self.match(VfrSyntaxParser.Number)
- self.state = 874
+ self.state = 877
self.match(VfrSyntaxParser.Comma)
- self.state = 880
+ self.state = 883
self._errHandler.sync(self)
token = self._input.LA(1)
if token in [VfrSyntaxParser.OpenBrace]:
- self.state = 875
+ self.state = 878
self.match(VfrSyntaxParser.OpenBrace)
- self.state = 876
+ self.state = 879
self.guidSubDefinition(localctx.Guid)
- self.state = 877
+ self.state = 880
self.match(VfrSyntaxParser.CloseBrace)
pass
elif token in [VfrSyntaxParser.Number]:
- self.state = 879
+ self.state = 882
self.guidSubDefinition(localctx.Guid)
pass
else:
raise NoViableAltException(self)
- self.state = 882
+ self.state = 885
self.match(VfrSyntaxParser.CloseBrace)
except RecognitionException as re:
localctx.exception = re
@@ -5718,13 +5728,13 @@ class VfrSyntaxParser ( Parser ):
self.enterRule(localctx, 76, self.RULE_getStringId)
try:
self.enterOuterAlt(localctx, 1)
- self.state = 884
+ self.state = 887
self.match(VfrSyntaxParser.StringToken)
- self.state = 885
+ self.state = 888
self.match(VfrSyntaxParser.OpenParen)
- self.state = 886
+ self.state = 889
self.match(VfrSyntaxParser.Number)
- self.state = 887
+ self.state = 890
self.match(VfrSyntaxParser.CloseParen)
except RecognitionException as re:
localctx.exception = re
@@ -5737,12 +5747,12 @@ class VfrSyntaxParser ( Parser ):
class VfrQuestionHeaderContext(ParserRuleContext):
- def __init__(self, parser, parent:ParserRuleContext=None, invokingState:int=-1, OpObj=None, QType=None):
+ def __init__(self, parser, parent:ParserRuleContext=None, invokingState:int=-1, Node=None, QType=None):
super().__init__(parent, invokingState)
self.parser = parser
- self.OpObj = None
+ self.Node = None
self.QType = None
- self.OpObj = OpObj
+ self.Node = Node
self.QType = QType
def vfrQuestionBaseInfo(self):
@@ -5765,16 +5775,16 @@ class VfrSyntaxParser ( Parser ):
- def vfrQuestionHeader(self, OpObj, QType):
+ def vfrQuestionHeader(self, Node, QType):
- localctx = VfrSyntaxParser.VfrQuestionHeaderContext(self, self._ctx, self.state, OpObj, QType)
+ localctx = VfrSyntaxParser.VfrQuestionHeaderContext(self, self._ctx, self.state, Node, QType)
self.enterRule(localctx, 78, self.RULE_vfrQuestionHeader)
try:
self.enterOuterAlt(localctx, 1)
- self.state = 889
- self.vfrQuestionBaseInfo(OpObj, QType)
- self.state = 890
- self.vfrStatementHeader(OpObj)
+ self.state = 892
+ self.vfrQuestionBaseInfo(Node, QType)
+ self.state = 893
+ self.vfrStatementHeader(Node)
except RecognitionException as re:
localctx.exception = re
self._errHandler.reportError(self, re)
@@ -5786,17 +5796,19 @@ class VfrSyntaxParser ( Parser ):
class VfrQuestionBaseInfoContext(ParserRuleContext):
- def __init__(self, parser, parent:ParserRuleContext=None, invokingState:int=-1, OpObj=None, QType=None):
+ def __init__(self, parser, parent:ParserRuleContext=None, invokingState:int=-1, Node=None, QType=None):
super().__init__(parent, invokingState)
self.parser = parser
- self.OpObj = None
+ self.Node = None
self.QType = None
self.BaseInfo = EFI_VARSTORE_INFO()
self.QId = EFI_QUESTION_ID_INVALID
self.CheckFlag = True
+ self.QName = None
+ self.VarIdStr = ''
self.QN = None # Token
self.ID = None # Token
- self.OpObj = OpObj
+ self.Node = Node
self.QType = QType
def Name(self):
@@ -5836,52 +5848,52 @@ class VfrSyntaxParser ( Parser ):
- def vfrQuestionBaseInfo(self, OpObj, QType):
+ def vfrQuestionBaseInfo(self, Node, QType):
- localctx = VfrSyntaxParser.VfrQuestionBaseInfoContext(self, self._ctx, self.state, OpObj, QType)
+ localctx = VfrSyntaxParser.VfrQuestionBaseInfoContext(self, self._ctx, self.state, Node, QType)
self.enterRule(localctx, 80, self.RULE_vfrQuestionBaseInfo)
self._la = 0 # Token type
try:
self.enterOuterAlt(localctx, 1)
- self.state = 896
+ self.state = 899
self._errHandler.sync(self)
_la = self._input.LA(1)
if _la==VfrSyntaxParser.Name:
- self.state = 892
+ self.state = 895
self.match(VfrSyntaxParser.Name)
- self.state = 893
+ self.state = 896
self.match(VfrSyntaxParser.T__5)
- self.state = 894
+ self.state = 897
localctx.QN = self.match(VfrSyntaxParser.StringIdentifier)
- self.state = 895
+ self.state = 898
self.match(VfrSyntaxParser.Comma)
- self.state = 903
+ self.state = 906
self._errHandler.sync(self)
_la = self._input.LA(1)
if _la==VfrSyntaxParser.VarId:
- self.state = 898
+ self.state = 901
self.match(VfrSyntaxParser.VarId)
- self.state = 899
+ self.state = 902
self.match(VfrSyntaxParser.T__5)
- self.state = 900
+ self.state = 903
self.vfrStorageVarId(localctx.BaseInfo, localctx.CheckFlag)
- self.state = 901
+ self.state = 904
self.match(VfrSyntaxParser.Comma)
- self.state = 909
+ self.state = 912
self._errHandler.sync(self)
_la = self._input.LA(1)
if _la==VfrSyntaxParser.QuestionId:
- self.state = 905
+ self.state = 908
self.match(VfrSyntaxParser.QuestionId)
- self.state = 906
+ self.state = 909
self.match(VfrSyntaxParser.T__5)
- self.state = 907
+ self.state = 910
localctx.ID = self.match(VfrSyntaxParser.Number)
- self.state = 908
+ self.state = 911
self.match(VfrSyntaxParser.Comma)
@@ -5896,11 +5908,11 @@ class VfrSyntaxParser ( Parser ):
class VfrStatementHeaderContext(ParserRuleContext):
- def __init__(self, parser, parent:ParserRuleContext=None, invokingState:int=-1, OpObj=None):
+ def __init__(self, parser, parent:ParserRuleContext=None, invokingState:int=-1, Node=None):
super().__init__(parent, invokingState)
self.parser = parser
- self.OpObj = None
- self.OpObj = OpObj
+ self.Node = None
+ self.Node = Node
def Prompt(self):
return self.getToken(VfrSyntaxParser.Prompt, 0)
@@ -5947,37 +5959,37 @@ class VfrSyntaxParser ( Parser ):
- def vfrStatementHeader(self, OpObj):
+ def vfrStatementHeader(self, Node):
- localctx = VfrSyntaxParser.VfrStatementHeaderContext(self, self._ctx, self.state, OpObj)
+ localctx = VfrSyntaxParser.VfrStatementHeaderContext(self, self._ctx, self.state, Node)
self.enterRule(localctx, 82, self.RULE_vfrStatementHeader)
try:
self.enterOuterAlt(localctx, 1)
- self.state = 911
+ self.state = 914
self.match(VfrSyntaxParser.Prompt)
- self.state = 912
+ self.state = 915
self.match(VfrSyntaxParser.T__5)
- self.state = 913
+ self.state = 916
self.match(VfrSyntaxParser.StringToken)
- self.state = 914
+ self.state = 917
self.match(VfrSyntaxParser.OpenParen)
- self.state = 915
+ self.state = 918
self.match(VfrSyntaxParser.Number)
- self.state = 916
+ self.state = 919
self.match(VfrSyntaxParser.CloseParen)
- self.state = 917
+ self.state = 920
self.match(VfrSyntaxParser.Comma)
- self.state = 918
+ self.state = 921
self.match(VfrSyntaxParser.Help)
- self.state = 919
+ self.state = 922
self.match(VfrSyntaxParser.T__5)
- self.state = 920
+ self.state = 923
self.match(VfrSyntaxParser.StringToken)
- self.state = 921
+ self.state = 924
self.match(VfrSyntaxParser.OpenParen)
- self.state = 922
+ self.state = 925
self.match(VfrSyntaxParser.Number)
- self.state = 923
+ self.state = 926
self.match(VfrSyntaxParser.CloseParen)
except RecognitionException as re:
localctx.exception = re
@@ -6039,47 +6051,47 @@ class VfrSyntaxParser ( Parser ):
localctx = VfrSyntaxParser.QuestionheaderFlagsFieldContext(self, self._ctx, self.state)
self.enterRule(localctx, 84, self.RULE_questionheaderFlagsField)
try:
- self.state = 933
+ self.state = 936
self._errHandler.sync(self)
token = self._input.LA(1)
if token in [VfrSyntaxParser.ReadOnlyFlag]:
self.enterOuterAlt(localctx, 1)
- self.state = 925
+ self.state = 928
self.match(VfrSyntaxParser.ReadOnlyFlag)
pass
elif token in [VfrSyntaxParser.InteractiveFlag]:
self.enterOuterAlt(localctx, 2)
- self.state = 926
+ self.state = 929
self.match(VfrSyntaxParser.InteractiveFlag)
pass
elif token in [VfrSyntaxParser.ResetRequiredFlag]:
self.enterOuterAlt(localctx, 3)
- self.state = 927
+ self.state = 930
self.match(VfrSyntaxParser.ResetRequiredFlag)
pass
elif token in [VfrSyntaxParser.RestStyleFlag]:
self.enterOuterAlt(localctx, 4)
- self.state = 928
+ self.state = 931
self.match(VfrSyntaxParser.RestStyleFlag)
pass
elif token in [VfrSyntaxParser.ReconnectRequiredFlag]:
self.enterOuterAlt(localctx, 5)
- self.state = 929
+ self.state = 932
self.match(VfrSyntaxParser.ReconnectRequiredFlag)
pass
elif token in [VfrSyntaxParser.OptionOnlyFlag]:
self.enterOuterAlt(localctx, 6)
- self.state = 930
+ self.state = 933
localctx.O = self.match(VfrSyntaxParser.OptionOnlyFlag)
pass
elif token in [VfrSyntaxParser.NVAccessFlag]:
self.enterOuterAlt(localctx, 7)
- self.state = 931
+ self.state = 934
localctx.N = self.match(VfrSyntaxParser.NVAccessFlag)
pass
elif token in [VfrSyntaxParser.LateCheckFlag]:
self.enterOuterAlt(localctx, 8)
- self.state = 932
+ self.state = 935
localctx.L = self.match(VfrSyntaxParser.LateCheckFlag)
pass
else:
@@ -6177,36 +6189,36 @@ class VfrSyntaxParser ( Parser ):
self.enterRule(localctx, 86, self.RULE_vfrStorageVarId)
self._la = 0 # Token type
try:
- self.state = 947
+ self.state = 950
self._errHandler.sync(self)
- la_ = self._interp.adaptivePredict(self._input,54,self._ctx)
+ la_ = self._interp.adaptivePredict(self._input,55,self._ctx)
if la_ == 1:
localctx = VfrSyntaxParser.VfrStorageVarIdRule1Context(self, localctx)
self.enterOuterAlt(localctx, 1)
- self.state = 935
+ self.state = 938
localctx.SN1 = self.match(VfrSyntaxParser.StringIdentifier)
- self.state = 936
+ self.state = 939
self.match(VfrSyntaxParser.OpenBracket)
- self.state = 937
+ self.state = 940
localctx.I = self.match(VfrSyntaxParser.Number)
- self.state = 938
+ self.state = 941
self.match(VfrSyntaxParser.CloseBracket)
pass
elif la_ == 2:
localctx = VfrSyntaxParser.VfrStorageVarIdRule2Context(self, localctx)
self.enterOuterAlt(localctx, 2)
- self.state = 939
+ self.state = 942
localctx.SN2 = self.match(VfrSyntaxParser.StringIdentifier)
- self.state = 944
+ self.state = 947
self._errHandler.sync(self)
_la = self._input.LA(1)
while _la==VfrSyntaxParser.Dot:
- self.state = 940
+ self.state = 943
self.match(VfrSyntaxParser.Dot)
- self.state = 941
+ self.state = 944
self.arrayName()
- self.state = 946
+ self.state = 949
self._errHandler.sync(self)
_la = self._input.LA(1)
@@ -6227,9 +6239,9 @@ class VfrSyntaxParser ( Parser ):
def __init__(self, parser, parent:ParserRuleContext=None, invokingState:int=-1):
super().__init__(parent, invokingState)
self.parser = parser
- self.Value = EFI_IFR_TYPE_VALUE()
self.ValueList = []
self.ListType = False
+ self.ValueType = None
def Number(self, i:int=None):
if i is None:
@@ -6316,136 +6328,136 @@ class VfrSyntaxParser ( Parser ):
self.enterRule(localctx, 88, self.RULE_vfrConstantValueField)
self._la = 0 # Token type
try:
- self.state = 993
+ self.state = 996
self._errHandler.sync(self)
- la_ = self._interp.adaptivePredict(self._input,57,self._ctx)
+ la_ = self._interp.adaptivePredict(self._input,58,self._ctx)
if la_ == 1:
self.enterOuterAlt(localctx, 1)
- self.state = 950
+ self.state = 953
self._errHandler.sync(self)
_la = self._input.LA(1)
if _la==VfrSyntaxParser.Negative:
- self.state = 949
+ self.state = 952
self.match(VfrSyntaxParser.Negative)
- self.state = 952
+ self.state = 955
self.match(VfrSyntaxParser.Number)
pass
elif la_ == 2:
self.enterOuterAlt(localctx, 2)
- self.state = 953
+ self.state = 956
self.match(VfrSyntaxParser.TrueSymbol)
pass
elif la_ == 3:
self.enterOuterAlt(localctx, 3)
- self.state = 954
+ self.state = 957
self.match(VfrSyntaxParser.FalseSymbol)
pass
elif la_ == 4:
self.enterOuterAlt(localctx, 4)
- self.state = 955
+ self.state = 958
self.match(VfrSyntaxParser.One)
pass
elif la_ == 5:
self.enterOuterAlt(localctx, 5)
- self.state = 956
+ self.state = 959
self.match(VfrSyntaxParser.Ones)
pass
elif la_ == 6:
self.enterOuterAlt(localctx, 6)
- self.state = 957
+ self.state = 960
self.match(VfrSyntaxParser.Zero)
pass
elif la_ == 7:
self.enterOuterAlt(localctx, 7)
- self.state = 958
+ self.state = 961
self.match(VfrSyntaxParser.Number)
- self.state = 959
+ self.state = 962
self.match(VfrSyntaxParser.Colon)
- self.state = 960
+ self.state = 963
self.match(VfrSyntaxParser.Number)
- self.state = 961
+ self.state = 964
self.match(VfrSyntaxParser.Colon)
- self.state = 962
+ self.state = 965
self.match(VfrSyntaxParser.Number)
pass
elif la_ == 8:
self.enterOuterAlt(localctx, 8)
- self.state = 963
+ self.state = 966
self.match(VfrSyntaxParser.Number)
- self.state = 964
+ self.state = 967
self.match(VfrSyntaxParser.Slash)
- self.state = 965
+ self.state = 968
self.match(VfrSyntaxParser.Number)
- self.state = 966
+ self.state = 969
self.match(VfrSyntaxParser.Slash)
- self.state = 967
+ self.state = 970
self.match(VfrSyntaxParser.Number)
pass
elif la_ == 9:
self.enterOuterAlt(localctx, 9)
- self.state = 968
+ self.state = 971
self.match(VfrSyntaxParser.Number)
- self.state = 969
+ self.state = 972
self.match(VfrSyntaxParser.Semicolon)
- self.state = 970
+ self.state = 973
self.match(VfrSyntaxParser.Number)
- self.state = 971
+ self.state = 974
self.match(VfrSyntaxParser.Semicolon)
- self.state = 972
+ self.state = 975
self.guidDefinition()
- self.state = 973
+ self.state = 976
self.match(VfrSyntaxParser.Semicolon)
- self.state = 974
+ self.state = 977
self.match(VfrSyntaxParser.StringToken)
- self.state = 975
+ self.state = 978
self.match(VfrSyntaxParser.OpenParen)
- self.state = 976
+ self.state = 979
self.match(VfrSyntaxParser.Number)
- self.state = 977
+ self.state = 980
self.match(VfrSyntaxParser.CloseParen)
pass
elif la_ == 10:
self.enterOuterAlt(localctx, 10)
- self.state = 979
+ self.state = 982
self.match(VfrSyntaxParser.StringToken)
- self.state = 980
+ self.state = 983
self.match(VfrSyntaxParser.OpenParen)
- self.state = 981
+ self.state = 984
self.match(VfrSyntaxParser.Number)
- self.state = 982
+ self.state = 985
self.match(VfrSyntaxParser.CloseParen)
pass
elif la_ == 11:
self.enterOuterAlt(localctx, 11)
- self.state = 983
+ self.state = 986
self.match(VfrSyntaxParser.OpenBrace)
- self.state = 984
+ self.state = 987
self.match(VfrSyntaxParser.Number)
- self.state = 989
+ self.state = 992
self._errHandler.sync(self)
_la = self._input.LA(1)
while _la==VfrSyntaxParser.Comma:
- self.state = 985
+ self.state = 988
self.match(VfrSyntaxParser.Comma)
- self.state = 986
+ self.state = 989
self.match(VfrSyntaxParser.Number)
- self.state = 991
+ self.state = 994
self._errHandler.sync(self)
_la = self._input.LA(1)
- self.state = 992
+ self.state = 995
self.match(VfrSyntaxParser.CloseBrace)
pass
@@ -6464,7 +6476,7 @@ class VfrSyntaxParser ( Parser ):
def __init__(self, parser, parent:ParserRuleContext=None, invokingState:int=-1):
super().__init__(parent, invokingState)
self.parser = parser
- self.Node = VfrTreeNode(EFI_IFR_IMAGE_OP)
+ self.Node = IfrTreeNode(EFI_IFR_IMAGE_OP)
def Image(self):
return self.getToken(VfrSyntaxParser.Image, 0)
@@ -6496,17 +6508,17 @@ class VfrSyntaxParser ( Parser ):
self.enterRule(localctx, 90, self.RULE_vfrImageTag)
try:
self.enterOuterAlt(localctx, 1)
- self.state = 995
+ self.state = 998
self.match(VfrSyntaxParser.Image)
- self.state = 996
+ self.state = 999
self.match(VfrSyntaxParser.T__5)
- self.state = 997
+ self.state = 1000
self.match(VfrSyntaxParser.T__6)
- self.state = 998
+ self.state = 1001
self.match(VfrSyntaxParser.OpenParen)
- self.state = 999
+ self.state = 1002
self.match(VfrSyntaxParser.Number)
- self.state = 1000
+ self.state = 1003
self.match(VfrSyntaxParser.CloseParen)
except RecognitionException as re:
localctx.exception = re
@@ -6522,7 +6534,7 @@ class VfrSyntaxParser ( Parser ):
def __init__(self, parser, parent:ParserRuleContext=None, invokingState:int=-1):
super().__init__(parent, invokingState)
self.parser = parser
- self.Node = VfrTreeNode(EFI_IFR_LOCKED_OP)
+ self.Node = IfrTreeNode(EFI_IFR_LOCKED_OP)
def Locked(self):
return self.getToken(VfrSyntaxParser.Locked, 0)
@@ -6545,7 +6557,7 @@ class VfrSyntaxParser ( Parser ):
self.enterRule(localctx, 92, self.RULE_vfrLockedTag)
try:
self.enterOuterAlt(localctx, 1)
- self.state = 1002
+ self.state = 1005
self.match(VfrSyntaxParser.Locked)
except RecognitionException as re:
localctx.exception = re
@@ -6588,17 +6600,17 @@ class VfrSyntaxParser ( Parser ):
localctx = VfrSyntaxParser.VfrStatementStatTagContext(self, self._ctx, self.state)
self.enterRule(localctx, 94, self.RULE_vfrStatementStatTag)
try:
- self.state = 1006
+ self.state = 1009
self._errHandler.sync(self)
token = self._input.LA(1)
if token in [VfrSyntaxParser.Image]:
self.enterOuterAlt(localctx, 1)
- self.state = 1004
+ self.state = 1007
self.vfrImageTag()
pass
elif token in [VfrSyntaxParser.Locked]:
self.enterOuterAlt(localctx, 2)
- self.state = 1005
+ self.state = 1008
self.vfrLockedTag()
pass
else:
@@ -6652,20 +6664,20 @@ class VfrSyntaxParser ( Parser ):
self.enterRule(localctx, 96, self.RULE_vfrStatementStatTagList)
try:
self.enterOuterAlt(localctx, 1)
- self.state = 1008
+ self.state = 1011
self.vfrStatementStatTag()
- self.state = 1013
+ self.state = 1016
self._errHandler.sync(self)
- _alt = self._interp.adaptivePredict(self._input,59,self._ctx)
+ _alt = self._interp.adaptivePredict(self._input,60,self._ctx)
while _alt!=2 and _alt!=ATN.INVALID_ALT_NUMBER:
if _alt==1:
- self.state = 1009
+ self.state = 1012
self.match(VfrSyntaxParser.Comma)
- self.state = 1010
+ self.state = 1013
self.vfrStatementStatTag()
- self.state = 1015
+ self.state = 1018
self._errHandler.sync(self)
- _alt = self._interp.adaptivePredict(self._input,59,self._ctx)
+ _alt = self._interp.adaptivePredict(self._input,60,self._ctx)
except RecognitionException as re:
localctx.exception = re
@@ -6681,7 +6693,7 @@ class VfrSyntaxParser ( Parser ):
def __init__(self, parser, parent:ParserRuleContext=None, invokingState:int=-1):
super().__init__(parent, invokingState)
self.parser = parser
- self.Node = VfrTreeNode(EFI_IFR_FORM_OP)
+ self.Node = IfrTreeNode(EFI_IFR_FORM_OP)
def Form(self):
return self.getToken(VfrSyntaxParser.Form, 0)
@@ -6745,43 +6757,43 @@ class VfrSyntaxParser ( Parser ):
self._la = 0 # Token type
try:
self.enterOuterAlt(localctx, 1)
- self.state = 1016
+ self.state = 1019
self.match(VfrSyntaxParser.Form)
- self.state = 1017
+ self.state = 1020
self.match(VfrSyntaxParser.FormId)
- self.state = 1018
+ self.state = 1021
self.match(VfrSyntaxParser.T__5)
- self.state = 1019
+ self.state = 1022
self.match(VfrSyntaxParser.Number)
- self.state = 1020
+ self.state = 1023
self.match(VfrSyntaxParser.Comma)
- self.state = 1021
+ self.state = 1024
self.match(VfrSyntaxParser.Title)
- self.state = 1022
+ self.state = 1025
self.match(VfrSyntaxParser.T__5)
- self.state = 1023
+ self.state = 1026
self.match(VfrSyntaxParser.StringToken)
- self.state = 1024
+ self.state = 1027
self.match(VfrSyntaxParser.OpenParen)
- self.state = 1025
+ self.state = 1028
self.match(VfrSyntaxParser.Number)
- self.state = 1026
+ self.state = 1029
self.match(VfrSyntaxParser.CloseParen)
- self.state = 1027
+ self.state = 1030
self.match(VfrSyntaxParser.Semicolon)
- self.state = 1031
+ self.state = 1034
self._errHandler.sync(self)
_la = self._input.LA(1)
while ((((_la - 46)) & ~0x3f) == 0 and ((1 << (_la - 46)) & ((1 << (VfrSyntaxParser.OneOf - 46)) | (1 << (VfrSyntaxParser.OrderedList - 46)) | (1 << (VfrSyntaxParser.Subtitle - 46)) | (1 << (VfrSyntaxParser.Text - 46)) | (1 << (VfrSyntaxParser.Date - 46)) | (1 << (VfrSyntaxParser.Time - 46)) | (1 << (VfrSyntaxParser.GrayOutIf - 46)) | (1 << (VfrSyntaxParser.Label - 46)) | (1 << (VfrSyntaxParser.Inventory - 46)) | (1 << (VfrSyntaxParser.CheckBox - 46)) | (1 << (VfrSyntaxParser.Numeric - 46)) | (1 << (VfrSyntaxParser.Default - 46)) | (1 << (VfrSyntaxParser.Password - 46)) | (1 << (VfrSyntaxParser.String - 46)) | (1 << (VfrSyntaxParser.SuppressIf - 46)) | (1 << (VfrSyntaxParser.DisableIf - 46)) | (1 << (VfrSyntaxParser.Hidden - 46)) | (1 << (VfrSyntaxParser.Goto - 46)))) != 0) or ((((_la - 110)) & ~0x3f) == 0 and ((1 << (_la - 110)) & ((1 << (VfrSyntaxParser.InconsistentIf - 110)) | (1 << (VfrSyntaxParser.Restore - 110)) | (1 << (VfrSyntaxParser.Save - 110)) | (1 << (VfrSyntaxParser.Banner - 110)) | (1 << (VfrSyntaxParser.Image - 110)) | (1 << (VfrSyntaxParser.Locked - 110)) | (1 << (VfrSyntaxParser.Rule - 110)) | (1 << (VfrSyntaxParser.ResetButton - 110)) | (1 << (VfrSyntaxParser.Action - 110)) | (1 << (VfrSyntaxParser.GuidOp - 110)) | (1 << (VfrSyntaxParser.Modal - 110)))) != 0) or _la==VfrSyntaxParser.RefreshGuid:
- self.state = 1028
+ self.state = 1031
self.vfrForm()
- self.state = 1033
+ self.state = 1036
self._errHandler.sync(self)
_la = self._input.LA(1)
- self.state = 1034
+ self.state = 1037
self.match(VfrSyntaxParser.EndForm)
- self.state = 1035
+ self.state = 1038
self.match(VfrSyntaxParser.Semicolon)
except RecognitionException as re:
localctx.exception = re
@@ -6872,61 +6884,61 @@ class VfrSyntaxParser ( Parser ):
self.enterRule(localctx, 100, self.RULE_vfrForm)
try:
self.enterOuterAlt(localctx, 1)
- self.state = 1052
+ self.state = 1055
self._errHandler.sync(self)
token = self._input.LA(1)
if token in [VfrSyntaxParser.Image]:
- self.state = 1037
+ self.state = 1040
self.vfrStatementImage()
pass
elif token in [VfrSyntaxParser.Locked]:
- self.state = 1038
+ self.state = 1041
self.vfrStatementLocked()
pass
elif token in [VfrSyntaxParser.Rule]:
- self.state = 1039
+ self.state = 1042
self.vfrStatementRules()
pass
elif token in [VfrSyntaxParser.Default]:
- self.state = 1040
+ self.state = 1043
self.vfrStatementDefault()
pass
elif token in [VfrSyntaxParser.Subtitle, VfrSyntaxParser.Text, VfrSyntaxParser.Goto, VfrSyntaxParser.ResetButton]:
- self.state = 1041
+ self.state = 1044
self.vfrStatementStat()
pass
elif token in [VfrSyntaxParser.OneOf, VfrSyntaxParser.OrderedList, VfrSyntaxParser.Date, VfrSyntaxParser.Time, VfrSyntaxParser.CheckBox, VfrSyntaxParser.Numeric, VfrSyntaxParser.Password, VfrSyntaxParser.String, VfrSyntaxParser.Action]:
- self.state = 1042
+ self.state = 1045
self.vfrStatementQuestions()
pass
elif token in [VfrSyntaxParser.GrayOutIf, VfrSyntaxParser.SuppressIf, VfrSyntaxParser.DisableIf, VfrSyntaxParser.InconsistentIf]:
- self.state = 1043
+ self.state = 1046
self.vfrStatementConditional()
pass
elif token in [VfrSyntaxParser.Label]:
- self.state = 1044
+ self.state = 1047
self.vfrStatementLabel()
pass
elif token in [VfrSyntaxParser.Banner]:
- self.state = 1045
+ self.state = 1048
self.vfrStatementBanner()
pass
elif token in [VfrSyntaxParser.Inventory, VfrSyntaxParser.Hidden, VfrSyntaxParser.Restore, VfrSyntaxParser.Save]:
- self.state = 1046
+ self.state = 1049
self.vfrStatementInvalid()
pass
elif token in [VfrSyntaxParser.GuidOp]:
- self.state = 1047
+ self.state = 1050
self.vfrStatementExtension()
pass
elif token in [VfrSyntaxParser.Modal]:
- self.state = 1048
+ self.state = 1051
self.vfrStatementModal()
pass
elif token in [VfrSyntaxParser.RefreshGuid]:
- self.state = 1049
+ self.state = 1052
self.vfrStatementRefreshEvent()
- self.state = 1050
+ self.state = 1053
self.match(VfrSyntaxParser.Semicolon)
pass
else:
@@ -6946,7 +6958,7 @@ class VfrSyntaxParser ( Parser ):
def __init__(self, parser, parent:ParserRuleContext=None, invokingState:int=-1):
super().__init__(parent, invokingState)
self.parser = parser
- self.Node = VfrTreeNode(EFI_IFR_FORM_MAP_OP)
+ self.Node = IfrTreeNode(EFI_IFR_FORM_MAP_OP)
self.S1 = None # Token
def FormMap(self):
@@ -7036,59 +7048,59 @@ class VfrSyntaxParser ( Parser ):
self._la = 0 # Token type
try:
self.enterOuterAlt(localctx, 1)
- self.state = 1054
+ self.state = 1057
self.match(VfrSyntaxParser.FormMap)
- self.state = 1055
+ self.state = 1058
self.match(VfrSyntaxParser.FormId)
- self.state = 1056
+ self.state = 1059
self.match(VfrSyntaxParser.T__5)
- self.state = 1057
+ self.state = 1060
localctx.S1 = self.match(VfrSyntaxParser.Number)
- self.state = 1058
+ self.state = 1061
self.match(VfrSyntaxParser.Comma)
- self.state = 1073
+ self.state = 1076
self._errHandler.sync(self)
_la = self._input.LA(1)
while _la==VfrSyntaxParser.MapTitle:
- self.state = 1059
+ self.state = 1062
self.match(VfrSyntaxParser.MapTitle)
- self.state = 1060
+ self.state = 1063
self.match(VfrSyntaxParser.T__5)
- self.state = 1061
+ self.state = 1064
self.match(VfrSyntaxParser.StringToken)
- self.state = 1062
+ self.state = 1065
self.match(VfrSyntaxParser.OpenParen)
- self.state = 1063
+ self.state = 1066
self.match(VfrSyntaxParser.Number)
- self.state = 1064
+ self.state = 1067
self.match(VfrSyntaxParser.CloseParen)
- self.state = 1065
+ self.state = 1068
self.match(VfrSyntaxParser.Semicolon)
- self.state = 1066
+ self.state = 1069
self.match(VfrSyntaxParser.MapGuid)
- self.state = 1067
+ self.state = 1070
self.match(VfrSyntaxParser.T__5)
- self.state = 1068
+ self.state = 1071
self.guidDefinition()
- self.state = 1069
+ self.state = 1072
self.match(VfrSyntaxParser.Semicolon)
- self.state = 1075
+ self.state = 1078
self._errHandler.sync(self)
_la = self._input.LA(1)
- self.state = 1079
+ self.state = 1082
self._errHandler.sync(self)
_la = self._input.LA(1)
while ((((_la - 46)) & ~0x3f) == 0 and ((1 << (_la - 46)) & ((1 << (VfrSyntaxParser.OneOf - 46)) | (1 << (VfrSyntaxParser.OrderedList - 46)) | (1 << (VfrSyntaxParser.Subtitle - 46)) | (1 << (VfrSyntaxParser.Text - 46)) | (1 << (VfrSyntaxParser.Date - 46)) | (1 << (VfrSyntaxParser.Time - 46)) | (1 << (VfrSyntaxParser.GrayOutIf - 46)) | (1 << (VfrSyntaxParser.Label - 46)) | (1 << (VfrSyntaxParser.Inventory - 46)) | (1 << (VfrSyntaxParser.CheckBox - 46)) | (1 << (VfrSyntaxParser.Numeric - 46)) | (1 << (VfrSyntaxParser.Default - 46)) | (1 << (VfrSyntaxParser.Password - 46)) | (1 << (VfrSyntaxParser.String - 46)) | (1 << (VfrSyntaxParser.SuppressIf - 46)) | (1 << (VfrSyntaxParser.DisableIf - 46)) | (1 << (VfrSyntaxParser.Hidden - 46)) | (1 << (VfrSyntaxParser.Goto - 46)))) != 0) or ((((_la - 110)) & ~0x3f) == 0 and ((1 << (_la - 110)) & ((1 << (VfrSyntaxParser.InconsistentIf - 110)) | (1 << (VfrSyntaxParser.Restore - 110)) | (1 << (VfrSyntaxParser.Save - 110)) | (1 << (VfrSyntaxParser.Banner - 110)) | (1 << (VfrSyntaxParser.Image - 110)) | (1 << (VfrSyntaxParser.Locked - 110)) | (1 << (VfrSyntaxParser.Rule - 110)) | (1 << (VfrSyntaxParser.ResetButton - 110)) | (1 << (VfrSyntaxParser.Action - 110)) | (1 << (VfrSyntaxParser.GuidOp - 110)) | (1 << (VfrSyntaxParser.Modal - 110)))) != 0) or _la==VfrSyntaxParser.RefreshGuid:
- self.state = 1076
+ self.state = 1079
self.vfrForm()
- self.state = 1081
+ self.state = 1084
self._errHandler.sync(self)
_la = self._input.LA(1)
- self.state = 1082
+ self.state = 1085
self.match(VfrSyntaxParser.EndForm)
- self.state = 1083
+ self.state = 1086
self.match(VfrSyntaxParser.Semicolon)
except RecognitionException as re:
localctx.exception = re
@@ -7131,9 +7143,9 @@ class VfrSyntaxParser ( Parser ):
self.enterRule(localctx, 104, self.RULE_vfrStatementImage)
try:
self.enterOuterAlt(localctx, 1)
- self.state = 1085
+ self.state = 1088
self.vfrImageTag()
- self.state = 1086
+ self.state = 1089
self.match(VfrSyntaxParser.Semicolon)
except RecognitionException as re:
localctx.exception = re
@@ -7176,9 +7188,9 @@ class VfrSyntaxParser ( Parser ):
self.enterRule(localctx, 106, self.RULE_vfrStatementLocked)
try:
self.enterOuterAlt(localctx, 1)
- self.state = 1088
+ self.state = 1091
self.vfrLockedTag()
- self.state = 1089
+ self.state = 1092
self.match(VfrSyntaxParser.Semicolon)
except RecognitionException as re:
localctx.exception = re
@@ -7194,7 +7206,7 @@ class VfrSyntaxParser ( Parser ):
def __init__(self, parser, parent:ParserRuleContext=None, invokingState:int=-1):
super().__init__(parent, invokingState)
self.parser = parser
- self.Node = VfrTreeNode(EFI_IFR_RULE_OP)
+ self.Node = IfrTreeNode(EFI_IFR_RULE_OP)
def Rule(self):
return self.getToken(VfrSyntaxParser.Rule, 0)
@@ -7233,17 +7245,17 @@ class VfrSyntaxParser ( Parser ):
self.enterRule(localctx, 108, self.RULE_vfrStatementRules)
try:
self.enterOuterAlt(localctx, 1)
- self.state = 1091
+ self.state = 1094
self.match(VfrSyntaxParser.Rule)
- self.state = 1092
+ self.state = 1095
self.match(VfrSyntaxParser.StringIdentifier)
- self.state = 1093
+ self.state = 1096
self.match(VfrSyntaxParser.Comma)
- self.state = 1094
- self.vfrStatementExpression()
- self.state = 1095
+ self.state = 1097
+ self.vfrStatementExpression(localctx.Node)
+ self.state = 1098
self.match(VfrSyntaxParser.EndRule)
- self.state = 1096
+ self.state = 1099
self.match(VfrSyntaxParser.Semicolon)
except RecognitionException as re:
localctx.exception = re
@@ -7290,22 +7302,22 @@ class VfrSyntaxParser ( Parser ):
localctx = VfrSyntaxParser.VfrStatementStatContext(self, self._ctx, self.state)
self.enterRule(localctx, 110, self.RULE_vfrStatementStat)
try:
- self.state = 1101
+ self.state = 1104
self._errHandler.sync(self)
token = self._input.LA(1)
if token in [VfrSyntaxParser.Subtitle]:
self.enterOuterAlt(localctx, 1)
- self.state = 1098
+ self.state = 1101
self.vfrStatementSubTitle()
pass
elif token in [VfrSyntaxParser.Text]:
self.enterOuterAlt(localctx, 2)
- self.state = 1099
+ self.state = 1102
self.vfrStatementStaticText()
pass
elif token in [VfrSyntaxParser.Goto, VfrSyntaxParser.ResetButton]:
self.enterOuterAlt(localctx, 3)
- self.state = 1100
+ self.state = 1103
self.vfrStatementCrossReference()
pass
else:
@@ -7325,8 +7337,7 @@ class VfrSyntaxParser ( Parser ):
def __init__(self, parser, parent:ParserRuleContext=None, invokingState:int=-1):
super().__init__(parent, invokingState)
self.parser = parser
- self.Node = VfrTreeNode(EFI_IFR_SUBTITLE_OP)
- self.OpObj = CIfrSubtitle()
+ self.Node = IfrTreeNode(EFI_IFR_SUBTITLE_OP)
def Subtitle(self):
return self.getToken(VfrSyntaxParser.Subtitle, 0)
@@ -7395,84 +7406,84 @@ class VfrSyntaxParser ( Parser ):
self._la = 0 # Token type
try:
self.enterOuterAlt(localctx, 1)
- self.state = 1103
+ self.state = 1106
self.match(VfrSyntaxParser.Subtitle)
- self.state = 1104
+ self.state = 1107
self.match(VfrSyntaxParser.Text)
- self.state = 1105
+ self.state = 1108
self.match(VfrSyntaxParser.T__5)
- self.state = 1106
+ self.state = 1109
self.match(VfrSyntaxParser.StringToken)
- self.state = 1107
+ self.state = 1110
self.match(VfrSyntaxParser.OpenParen)
- self.state = 1108
+ self.state = 1111
self.match(VfrSyntaxParser.Number)
- self.state = 1109
+ self.state = 1112
self.match(VfrSyntaxParser.CloseParen)
- self.state = 1114
+ self.state = 1117
self._errHandler.sync(self)
- la_ = self._interp.adaptivePredict(self._input,65,self._ctx)
+ la_ = self._interp.adaptivePredict(self._input,66,self._ctx)
if la_ == 1:
- self.state = 1110
+ self.state = 1113
self.match(VfrSyntaxParser.Comma)
- self.state = 1111
+ self.state = 1114
self.match(VfrSyntaxParser.FLAGS)
- self.state = 1112
+ self.state = 1115
self.match(VfrSyntaxParser.T__5)
- self.state = 1113
+ self.state = 1116
self.vfrSubtitleFlags()
- self.state = 1136
+ self.state = 1139
self._errHandler.sync(self)
- la_ = self._interp.adaptivePredict(self._input,70,self._ctx)
+ la_ = self._interp.adaptivePredict(self._input,71,self._ctx)
if la_ == 1:
- self.state = 1118
+ self.state = 1121
self._errHandler.sync(self)
_la = self._input.LA(1)
if _la==VfrSyntaxParser.Comma:
- self.state = 1116
+ self.state = 1119
self.match(VfrSyntaxParser.Comma)
- self.state = 1117
+ self.state = 1120
self.vfrStatementStatTagList(localctx.Node)
- self.state = 1120
+ self.state = 1123
self.match(VfrSyntaxParser.Semicolon)
pass
elif la_ == 2:
- self.state = 1123
+ self.state = 1126
self._errHandler.sync(self)
- la_ = self._interp.adaptivePredict(self._input,67,self._ctx)
+ la_ = self._interp.adaptivePredict(self._input,68,self._ctx)
if la_ == 1:
- self.state = 1121
+ self.state = 1124
self.match(VfrSyntaxParser.Comma)
- self.state = 1122
+ self.state = 1125
self.vfrStatementStatTagList(localctx.Node)
- self.state = 1132
+ self.state = 1135
self._errHandler.sync(self)
_la = self._input.LA(1)
if _la==VfrSyntaxParser.Comma:
- self.state = 1125
+ self.state = 1128
self.match(VfrSyntaxParser.Comma)
- self.state = 1129
+ self.state = 1132
self._errHandler.sync(self)
_la = self._input.LA(1)
while ((((_la - 46)) & ~0x3f) == 0 and ((1 << (_la - 46)) & ((1 << (VfrSyntaxParser.OneOf - 46)) | (1 << (VfrSyntaxParser.OrderedList - 46)) | (1 << (VfrSyntaxParser.Subtitle - 46)) | (1 << (VfrSyntaxParser.Text - 46)) | (1 << (VfrSyntaxParser.Date - 46)) | (1 << (VfrSyntaxParser.Time - 46)) | (1 << (VfrSyntaxParser.CheckBox - 46)) | (1 << (VfrSyntaxParser.Numeric - 46)) | (1 << (VfrSyntaxParser.Password - 46)) | (1 << (VfrSyntaxParser.String - 46)) | (1 << (VfrSyntaxParser.Goto - 46)))) != 0) or _la==VfrSyntaxParser.ResetButton or _la==VfrSyntaxParser.Action:
- self.state = 1126
+ self.state = 1129
self.vfrStatementSubTitleComponent()
- self.state = 1131
+ self.state = 1134
self._errHandler.sync(self)
_la = self._input.LA(1)
- self.state = 1134
+ self.state = 1137
self.match(VfrSyntaxParser.EndSubtitle)
- self.state = 1135
+ self.state = 1138
self.match(VfrSyntaxParser.Semicolon)
pass
@@ -7518,17 +7529,17 @@ class VfrSyntaxParser ( Parser ):
localctx = VfrSyntaxParser.VfrStatementSubTitleComponentContext(self, self._ctx, self.state)
self.enterRule(localctx, 114, self.RULE_vfrStatementSubTitleComponent)
try:
- self.state = 1140
+ self.state = 1143
self._errHandler.sync(self)
token = self._input.LA(1)
if token in [VfrSyntaxParser.Subtitle, VfrSyntaxParser.Text, VfrSyntaxParser.Goto, VfrSyntaxParser.ResetButton]:
self.enterOuterAlt(localctx, 1)
- self.state = 1138
+ self.state = 1141
self.vfrStatementStat()
pass
elif token in [VfrSyntaxParser.OneOf, VfrSyntaxParser.OrderedList, VfrSyntaxParser.Date, VfrSyntaxParser.Time, VfrSyntaxParser.CheckBox, VfrSyntaxParser.Numeric, VfrSyntaxParser.Password, VfrSyntaxParser.String, VfrSyntaxParser.Action]:
self.enterOuterAlt(localctx, 2)
- self.state = 1139
+ self.state = 1142
self.vfrStatementQuestions()
pass
else:
@@ -7582,17 +7593,17 @@ class VfrSyntaxParser ( Parser ):
self._la = 0 # Token type
try:
self.enterOuterAlt(localctx, 1)
- self.state = 1142
+ self.state = 1145
self.subtitleFlagsField()
- self.state = 1147
+ self.state = 1150
self._errHandler.sync(self)
_la = self._input.LA(1)
while _la==VfrSyntaxParser.BitWiseOr:
- self.state = 1143
+ self.state = 1146
self.match(VfrSyntaxParser.BitWiseOr)
- self.state = 1144
+ self.state = 1147
self.subtitleFlagsField()
- self.state = 1149
+ self.state = 1152
self._errHandler.sync(self)
_la = self._input.LA(1)
@@ -7634,7 +7645,7 @@ class VfrSyntaxParser ( Parser ):
self._la = 0 # Token type
try:
self.enterOuterAlt(localctx, 1)
- self.state = 1150
+ self.state = 1153
_la = self._input.LA(1)
if not(_la==VfrSyntaxParser.T__7 or _la==VfrSyntaxParser.Number):
self._errHandler.recoverInline(self)
@@ -7655,7 +7666,7 @@ class VfrSyntaxParser ( Parser ):
def __init__(self, parser, parent:ParserRuleContext=None, invokingState:int=-1):
super().__init__(parent, invokingState)
self.parser = parser
- self.Node = VfrTreeNode(EFI_IFR_TEXT_OP)
+ self.Node = IfrTreeNode(EFI_IFR_TEXT_OP)
self.S1 = None # Token
self.S2 = None # Token
self.S3 = None # Token
@@ -7746,99 +7757,99 @@ class VfrSyntaxParser ( Parser ):
self._la = 0 # Token type
try:
self.enterOuterAlt(localctx, 1)
- self.state = 1152
+ self.state = 1155
self.match(VfrSyntaxParser.Text)
- self.state = 1153
+ self.state = 1156
self.match(VfrSyntaxParser.Help)
- self.state = 1154
+ self.state = 1157
self.match(VfrSyntaxParser.T__5)
- self.state = 1155
+ self.state = 1158
self.match(VfrSyntaxParser.StringToken)
- self.state = 1156
+ self.state = 1159
self.match(VfrSyntaxParser.OpenParen)
- self.state = 1157
+ self.state = 1160
localctx.S1 = self.match(VfrSyntaxParser.Number)
- self.state = 1158
+ self.state = 1161
self.match(VfrSyntaxParser.CloseParen)
- self.state = 1159
+ self.state = 1162
self.match(VfrSyntaxParser.Comma)
- self.state = 1160
+ self.state = 1163
self.match(VfrSyntaxParser.Text)
- self.state = 1161
+ self.state = 1164
self.match(VfrSyntaxParser.T__5)
- self.state = 1162
+ self.state = 1165
self.match(VfrSyntaxParser.StringToken)
- self.state = 1163
+ self.state = 1166
self.match(VfrSyntaxParser.OpenParen)
- self.state = 1164
+ self.state = 1167
localctx.S2 = self.match(VfrSyntaxParser.Number)
- self.state = 1165
+ self.state = 1168
self.match(VfrSyntaxParser.CloseParen)
- self.state = 1173
+ self.state = 1176
self._errHandler.sync(self)
- la_ = self._interp.adaptivePredict(self._input,73,self._ctx)
+ la_ = self._interp.adaptivePredict(self._input,74,self._ctx)
if la_ == 1:
- self.state = 1166
+ self.state = 1169
self.match(VfrSyntaxParser.Comma)
- self.state = 1167
+ self.state = 1170
self.match(VfrSyntaxParser.Text)
- self.state = 1168
+ self.state = 1171
self.match(VfrSyntaxParser.T__5)
- self.state = 1169
+ self.state = 1172
self.match(VfrSyntaxParser.StringToken)
- self.state = 1170
+ self.state = 1173
self.match(VfrSyntaxParser.OpenParen)
- self.state = 1171
+ self.state = 1174
localctx.S3 = self.match(VfrSyntaxParser.Number)
- self.state = 1172
+ self.state = 1175
self.match(VfrSyntaxParser.CloseParen)
- self.state = 1191
+ self.state = 1194
self._errHandler.sync(self)
- la_ = self._interp.adaptivePredict(self._input,75,self._ctx)
+ la_ = self._interp.adaptivePredict(self._input,76,self._ctx)
if la_ == 1:
- self.state = 1175
+ self.state = 1178
self.match(VfrSyntaxParser.Comma)
- self.state = 1176
+ self.state = 1179
localctx.F = self.match(VfrSyntaxParser.FLAGS)
- self.state = 1177
+ self.state = 1180
self.match(VfrSyntaxParser.T__5)
- self.state = 1178
+ self.state = 1181
self.staticTextFlagsField()
- self.state = 1183
+ self.state = 1186
self._errHandler.sync(self)
_la = self._input.LA(1)
while _la==VfrSyntaxParser.BitWiseOr:
- self.state = 1179
+ self.state = 1182
self.match(VfrSyntaxParser.BitWiseOr)
- self.state = 1180
+ self.state = 1183
self.staticTextFlagsField()
- self.state = 1185
+ self.state = 1188
self._errHandler.sync(self)
_la = self._input.LA(1)
- self.state = 1186
+ self.state = 1189
self.match(VfrSyntaxParser.Comma)
- self.state = 1187
+ self.state = 1190
self.match(VfrSyntaxParser.Key)
- self.state = 1188
+ self.state = 1191
self.match(VfrSyntaxParser.T__5)
- self.state = 1189
+ self.state = 1192
localctx.S4 = self.match(VfrSyntaxParser.Number)
- self.state = 1195
+ self.state = 1198
self._errHandler.sync(self)
_la = self._input.LA(1)
if _la==VfrSyntaxParser.Comma:
- self.state = 1193
+ self.state = 1196
self.match(VfrSyntaxParser.Comma)
- self.state = 1194
+ self.state = 1197
self.vfrStatementStatTagList(localctx.Node)
- self.state = 1197
+ self.state = 1200
self.match(VfrSyntaxParser.Semicolon)
except RecognitionException as re:
localctx.exception = re
@@ -7881,17 +7892,17 @@ class VfrSyntaxParser ( Parser ):
localctx = VfrSyntaxParser.StaticTextFlagsFieldContext(self, self._ctx, self.state)
self.enterRule(localctx, 122, self.RULE_staticTextFlagsField)
try:
- self.state = 1201
+ self.state = 1204
self._errHandler.sync(self)
token = self._input.LA(1)
if token in [VfrSyntaxParser.Number]:
self.enterOuterAlt(localctx, 1)
- self.state = 1199
+ self.state = 1202
localctx.N = self.match(VfrSyntaxParser.Number)
pass
elif token in [VfrSyntaxParser.InteractiveFlag, VfrSyntaxParser.NVAccessFlag, VfrSyntaxParser.ResetRequiredFlag, VfrSyntaxParser.ReconnectRequiredFlag, VfrSyntaxParser.LateCheckFlag, VfrSyntaxParser.ReadOnlyFlag, VfrSyntaxParser.OptionOnlyFlag, VfrSyntaxParser.RestStyleFlag]:
self.enterOuterAlt(localctx, 2)
- self.state = 1200
+ self.state = 1203
self.questionheaderFlagsField()
pass
else:
@@ -7938,17 +7949,17 @@ class VfrSyntaxParser ( Parser ):
localctx = VfrSyntaxParser.VfrStatementCrossReferenceContext(self, self._ctx, self.state)
self.enterRule(localctx, 124, self.RULE_vfrStatementCrossReference)
try:
- self.state = 1205
+ self.state = 1208
self._errHandler.sync(self)
token = self._input.LA(1)
if token in [VfrSyntaxParser.Goto]:
self.enterOuterAlt(localctx, 1)
- self.state = 1203
+ self.state = 1206
self.vfrStatementGoto()
pass
elif token in [VfrSyntaxParser.ResetButton]:
self.enterOuterAlt(localctx, 2)
- self.state = 1204
+ self.state = 1207
self.vfrStatementResetButton()
pass
else:
@@ -7968,11 +7979,11 @@ class VfrSyntaxParser ( Parser ):
def __init__(self, parser, parent:ParserRuleContext=None, invokingState:int=-1):
super().__init__(parent, invokingState)
self.parser = parser
- self.Node = VfrTreeNode(EFI_IFR_REF_OP)
- self.OpObj = None
- self.OHObj = None
+ self.Node = IfrTreeNode(EFI_IFR_REF_OP)
self.QType = EFI_QUESION_TYPE.QUESTION_REF
self.QN = None # Token
+ self.N = None # Token
+ self.E = None # Token
def Goto(self):
return self.getToken(VfrSyntaxParser.Goto, 0)
@@ -8057,103 +8068,103 @@ class VfrSyntaxParser ( Parser ):
self._la = 0 # Token type
try:
self.enterOuterAlt(localctx, 1)
- self.state = 1207
+ self.state = 1210
self.match(VfrSyntaxParser.Goto)
- self.state = 1255
+ self.state = 1258
self._errHandler.sync(self)
token = self._input.LA(1)
if token in [VfrSyntaxParser.DevicePath]:
- self.state = 1208
+ self.state = 1211
self.match(VfrSyntaxParser.DevicePath)
- self.state = 1209
+ self.state = 1212
self.match(VfrSyntaxParser.T__5)
- self.state = 1210
+ self.state = 1213
self.match(VfrSyntaxParser.StringToken)
- self.state = 1211
+ self.state = 1214
self.match(VfrSyntaxParser.OpenParen)
- self.state = 1212
+ self.state = 1215
self.match(VfrSyntaxParser.Number)
- self.state = 1213
+ self.state = 1216
self.match(VfrSyntaxParser.CloseParen)
- self.state = 1214
+ self.state = 1217
self.match(VfrSyntaxParser.Comma)
- self.state = 1215
+ self.state = 1218
self.match(VfrSyntaxParser.FormSetGuid)
- self.state = 1216
+ self.state = 1219
self.match(VfrSyntaxParser.T__5)
- self.state = 1217
+ self.state = 1220
self.guidDefinition()
- self.state = 1218
+ self.state = 1221
self.match(VfrSyntaxParser.Comma)
- self.state = 1219
+ self.state = 1222
self.match(VfrSyntaxParser.FormId)
- self.state = 1220
+ self.state = 1223
self.match(VfrSyntaxParser.T__5)
- self.state = 1221
+ self.state = 1224
self.match(VfrSyntaxParser.Number)
- self.state = 1222
+ self.state = 1225
self.match(VfrSyntaxParser.Comma)
- self.state = 1223
+ self.state = 1226
self.match(VfrSyntaxParser.Question)
- self.state = 1224
+ self.state = 1227
self.match(VfrSyntaxParser.T__5)
- self.state = 1225
+ self.state = 1228
self.match(VfrSyntaxParser.Number)
- self.state = 1226
+ self.state = 1229
self.match(VfrSyntaxParser.Comma)
pass
elif token in [VfrSyntaxParser.FormSetGuid]:
- self.state = 1228
+ self.state = 1231
self.match(VfrSyntaxParser.FormSetGuid)
- self.state = 1229
+ self.state = 1232
self.match(VfrSyntaxParser.T__5)
- self.state = 1230
+ self.state = 1233
self.guidDefinition()
- self.state = 1231
+ self.state = 1234
self.match(VfrSyntaxParser.Comma)
- self.state = 1232
+ self.state = 1235
self.match(VfrSyntaxParser.FormId)
- self.state = 1233
+ self.state = 1236
self.match(VfrSyntaxParser.T__5)
- self.state = 1234
+ self.state = 1237
self.match(VfrSyntaxParser.Number)
- self.state = 1235
+ self.state = 1238
self.match(VfrSyntaxParser.Comma)
- self.state = 1236
+ self.state = 1239
self.match(VfrSyntaxParser.Question)
- self.state = 1237
+ self.state = 1240
self.match(VfrSyntaxParser.T__5)
- self.state = 1238
+ self.state = 1241
self.match(VfrSyntaxParser.Number)
- self.state = 1239
+ self.state = 1242
self.match(VfrSyntaxParser.Comma)
pass
elif token in [VfrSyntaxParser.FormId]:
- self.state = 1241
+ self.state = 1244
self.match(VfrSyntaxParser.FormId)
- self.state = 1242
+ self.state = 1245
self.match(VfrSyntaxParser.T__5)
- self.state = 1243
+ self.state = 1246
self.match(VfrSyntaxParser.Number)
- self.state = 1244
+ self.state = 1247
self.match(VfrSyntaxParser.Comma)
- self.state = 1245
+ self.state = 1248
self.match(VfrSyntaxParser.Question)
- self.state = 1246
+ self.state = 1249
self.match(VfrSyntaxParser.T__5)
- self.state = 1251
+ self.state = 1254
self._errHandler.sync(self)
token = self._input.LA(1)
if token in [VfrSyntaxParser.StringIdentifier]:
- self.state = 1247
+ self.state = 1250
localctx.QN = self.match(VfrSyntaxParser.StringIdentifier)
- self.state = 1248
+ self.state = 1251
self.match(VfrSyntaxParser.Comma)
pass
elif token in [VfrSyntaxParser.Number]:
- self.state = 1249
+ self.state = 1252
self.match(VfrSyntaxParser.Number)
- self.state = 1250
+ self.state = 1253
self.match(VfrSyntaxParser.Comma)
pass
else:
@@ -8161,56 +8172,56 @@ class VfrSyntaxParser ( Parser ):
pass
elif token in [VfrSyntaxParser.Number]:
- self.state = 1253
- self.match(VfrSyntaxParser.Number)
- self.state = 1254
+ self.state = 1256
+ localctx.N = self.match(VfrSyntaxParser.Number)
+ self.state = 1257
self.match(VfrSyntaxParser.Comma)
pass
elif token in [VfrSyntaxParser.Prompt, VfrSyntaxParser.Name, VfrSyntaxParser.VarId, VfrSyntaxParser.QuestionId]:
pass
else:
pass
- self.state = 1257
- self.vfrQuestionHeader(localctx.OpObj, localctx.QType)
- self.state = 1262
+ self.state = 1260
+ self.vfrQuestionHeader(localctx.Node, localctx.QType)
+ self.state = 1265
self._errHandler.sync(self)
- la_ = self._interp.adaptivePredict(self._input,81,self._ctx)
+ la_ = self._interp.adaptivePredict(self._input,82,self._ctx)
if la_ == 1:
- self.state = 1258
+ self.state = 1261
self.match(VfrSyntaxParser.Comma)
- self.state = 1259
+ self.state = 1262
self.match(VfrSyntaxParser.FLAGS)
- self.state = 1260
+ self.state = 1263
self.match(VfrSyntaxParser.T__5)
- self.state = 1261
- self.vfrGotoFlags(localctx.OpObj)
+ self.state = 1264
+ self.vfrGotoFlags()
- self.state = 1268
+ self.state = 1271
self._errHandler.sync(self)
- la_ = self._interp.adaptivePredict(self._input,82,self._ctx)
+ la_ = self._interp.adaptivePredict(self._input,83,self._ctx)
if la_ == 1:
- self.state = 1264
+ self.state = 1267
self.match(VfrSyntaxParser.Comma)
- self.state = 1265
+ self.state = 1268
self.match(VfrSyntaxParser.Key)
- self.state = 1266
+ self.state = 1269
self.match(VfrSyntaxParser.T__5)
- self.state = 1267
+ self.state = 1270
self.match(VfrSyntaxParser.Number)
- self.state = 1272
+ self.state = 1275
self._errHandler.sync(self)
_la = self._input.LA(1)
if _la==VfrSyntaxParser.Comma:
- self.state = 1270
- self.match(VfrSyntaxParser.Comma)
- self.state = 1271
+ self.state = 1273
+ localctx.E = self.match(VfrSyntaxParser.Comma)
+ self.state = 1274
self.vfrStatementQuestionOptionList(localctx.Node)
- self.state = 1274
+ self.state = 1277
self.match(VfrSyntaxParser.Semicolon)
except RecognitionException as re:
localctx.exception = re
@@ -8223,12 +8234,10 @@ class VfrSyntaxParser ( Parser ):
class VfrGotoFlagsContext(ParserRuleContext):
- def __init__(self, parser, parent:ParserRuleContext=None, invokingState:int=-1, Obj=None):
+ def __init__(self, parser, parent:ParserRuleContext=None, invokingState:int=-1):
super().__init__(parent, invokingState)
self.parser = parser
- self.Obj = None
self.GotoFlags = 0
- self.Obj = Obj
def gotoFlagsField(self, i:int=None):
if i is None:
@@ -8255,24 +8264,24 @@ class VfrSyntaxParser ( Parser ):
- def vfrGotoFlags(self, Obj):
+ def vfrGotoFlags(self):
- localctx = VfrSyntaxParser.VfrGotoFlagsContext(self, self._ctx, self.state, Obj)
+ localctx = VfrSyntaxParser.VfrGotoFlagsContext(self, self._ctx, self.state)
self.enterRule(localctx, 128, self.RULE_vfrGotoFlags)
self._la = 0 # Token type
try:
self.enterOuterAlt(localctx, 1)
- self.state = 1276
+ self.state = 1279
self.gotoFlagsField()
- self.state = 1281
+ self.state = 1284
self._errHandler.sync(self)
_la = self._input.LA(1)
while _la==VfrSyntaxParser.BitWiseOr:
- self.state = 1277
+ self.state = 1280
self.match(VfrSyntaxParser.BitWiseOr)
- self.state = 1278
+ self.state = 1281
self.gotoFlagsField()
- self.state = 1283
+ self.state = 1286
self._errHandler.sync(self)
_la = self._input.LA(1)
@@ -8317,17 +8326,17 @@ class VfrSyntaxParser ( Parser ):
localctx = VfrSyntaxParser.GotoFlagsFieldContext(self, self._ctx, self.state)
self.enterRule(localctx, 130, self.RULE_gotoFlagsField)
try:
- self.state = 1286
+ self.state = 1289
self._errHandler.sync(self)
token = self._input.LA(1)
if token in [VfrSyntaxParser.Number]:
self.enterOuterAlt(localctx, 1)
- self.state = 1284
+ self.state = 1287
localctx.N = self.match(VfrSyntaxParser.Number)
pass
elif token in [VfrSyntaxParser.InteractiveFlag, VfrSyntaxParser.NVAccessFlag, VfrSyntaxParser.ResetRequiredFlag, VfrSyntaxParser.ReconnectRequiredFlag, VfrSyntaxParser.LateCheckFlag, VfrSyntaxParser.ReadOnlyFlag, VfrSyntaxParser.OptionOnlyFlag, VfrSyntaxParser.RestStyleFlag]:
self.enterOuterAlt(localctx, 2)
- self.state = 1285
+ self.state = 1288
self.questionheaderFlagsField()
pass
else:
@@ -8347,8 +8356,7 @@ class VfrSyntaxParser ( Parser ):
def __init__(self, parser, parent:ParserRuleContext=None, invokingState:int=-1):
super().__init__(parent, invokingState)
self.parser = parser
- self.Node = VfrTreeNode(EFI_IFR_RESET_BUTTON_OP)
- self.OpObj = CIfrResetButton()
+ self.Node = IfrTreeNode(EFI_IFR_RESET_BUTTON_OP)
self.N = None # Token
def ResetButton(self):
@@ -8399,33 +8407,33 @@ class VfrSyntaxParser ( Parser ):
self._la = 0 # Token type
try:
self.enterOuterAlt(localctx, 1)
- self.state = 1288
+ self.state = 1291
self.match(VfrSyntaxParser.ResetButton)
- self.state = 1289
+ self.state = 1292
self.match(VfrSyntaxParser.DefaultStore)
- self.state = 1290
+ self.state = 1293
self.match(VfrSyntaxParser.T__5)
- self.state = 1291
+ self.state = 1294
localctx.N = self.match(VfrSyntaxParser.StringIdentifier)
- self.state = 1292
+ self.state = 1295
self.match(VfrSyntaxParser.Comma)
- self.state = 1293
- self.vfrStatementHeader(localctx.OpObj)
- self.state = 1294
+ self.state = 1296
+ self.vfrStatementHeader(localctx.Node)
+ self.state = 1297
self.match(VfrSyntaxParser.Comma)
- self.state = 1298
+ self.state = 1301
self._errHandler.sync(self)
_la = self._input.LA(1)
if _la==VfrSyntaxParser.Image or _la==VfrSyntaxParser.Locked:
- self.state = 1295
+ self.state = 1298
self.vfrStatementStatTagList(localctx.Node)
- self.state = 1296
+ self.state = 1299
self.match(VfrSyntaxParser.Comma)
- self.state = 1300
+ self.state = 1303
self.match(VfrSyntaxParser.EndResetButton)
- self.state = 1301
+ self.state = 1304
self.match(VfrSyntaxParser.Semicolon)
except RecognitionException as re:
localctx.exception = re
@@ -8484,37 +8492,37 @@ class VfrSyntaxParser ( Parser ):
localctx = VfrSyntaxParser.VfrStatementQuestionsContext(self, self._ctx, self.state)
self.enterRule(localctx, 134, self.RULE_vfrStatementQuestions)
try:
- self.state = 1309
+ self.state = 1312
self._errHandler.sync(self)
token = self._input.LA(1)
if token in [VfrSyntaxParser.CheckBox, VfrSyntaxParser.Action]:
self.enterOuterAlt(localctx, 1)
- self.state = 1303
+ self.state = 1306
self.vfrStatementBooleanType()
pass
elif token in [VfrSyntaxParser.Date]:
self.enterOuterAlt(localctx, 2)
- self.state = 1304
+ self.state = 1307
self.vfrStatementDate()
pass
elif token in [VfrSyntaxParser.OneOf, VfrSyntaxParser.Numeric]:
self.enterOuterAlt(localctx, 3)
- self.state = 1305
+ self.state = 1308
self.vfrStatementNumericType()
pass
elif token in [VfrSyntaxParser.Password, VfrSyntaxParser.String]:
self.enterOuterAlt(localctx, 4)
- self.state = 1306
+ self.state = 1309
self.vfrStatementStringType()
pass
elif token in [VfrSyntaxParser.OrderedList]:
self.enterOuterAlt(localctx, 5)
- self.state = 1307
+ self.state = 1310
self.vfrStatementOrderedList()
pass
elif token in [VfrSyntaxParser.Time]:
self.enterOuterAlt(localctx, 6)
- self.state = 1308
+ self.state = 1311
self.vfrStatementTime()
pass
else:
@@ -8592,54 +8600,54 @@ class VfrSyntaxParser ( Parser ):
localctx = VfrSyntaxParser.VfrStatementQuestionTagContext(self, self._ctx, self.state)
self.enterRule(localctx, 136, self.RULE_vfrStatementQuestionTag)
try:
- self.state = 1322
+ self.state = 1325
self._errHandler.sync(self)
token = self._input.LA(1)
if token in [VfrSyntaxParser.Image, VfrSyntaxParser.Locked]:
self.enterOuterAlt(localctx, 1)
- self.state = 1311
+ self.state = 1314
self.vfrStatementStatTag()
- self.state = 1312
+ self.state = 1315
self.match(VfrSyntaxParser.Comma)
pass
elif token in [VfrSyntaxParser.InconsistentIf]:
self.enterOuterAlt(localctx, 2)
- self.state = 1314
+ self.state = 1317
self.vfrStatementInconsistentIf()
pass
elif token in [VfrSyntaxParser.NoSubmitIf]:
self.enterOuterAlt(localctx, 3)
- self.state = 1315
+ self.state = 1318
self.vfrStatementNoSubmitIf()
pass
elif token in [VfrSyntaxParser.DisableIf]:
self.enterOuterAlt(localctx, 4)
- self.state = 1316
+ self.state = 1319
self.vfrStatementDisableIfQuest()
pass
elif token in [VfrSyntaxParser.Refresh]:
self.enterOuterAlt(localctx, 5)
- self.state = 1317
+ self.state = 1320
self.vfrStatementRefresh()
pass
elif token in [VfrSyntaxParser.VarstoreDevice]:
self.enterOuterAlt(localctx, 6)
- self.state = 1318
+ self.state = 1321
self.vfrStatementVarstoreDevice()
pass
elif token in [VfrSyntaxParser.GuidOp]:
self.enterOuterAlt(localctx, 7)
- self.state = 1319
+ self.state = 1322
self.vfrStatementExtension()
pass
elif token in [VfrSyntaxParser.RefreshGuid]:
self.enterOuterAlt(localctx, 8)
- self.state = 1320
+ self.state = 1323
self.vfrStatementRefreshEvent()
pass
elif token in [VfrSyntaxParser.WarningIf]:
self.enterOuterAlt(localctx, 9)
- self.state = 1321
+ self.state = 1324
self.vfrStatementWarningIf()
pass
else:
@@ -8659,7 +8667,7 @@ class VfrSyntaxParser ( Parser ):
def __init__(self, parser, parent:ParserRuleContext=None, invokingState:int=-1):
super().__init__(parent, invokingState)
self.parser = parser
- self.Node = VfrTreeNode(EFI_IFR_INCONSISTENT_IF_OP)
+ self.Node = IfrTreeNode(EFI_IFR_INCONSISTENT_IF_OP)
def InconsistentIf(self):
return self.getToken(VfrSyntaxParser.InconsistentIf, 0)
@@ -8730,57 +8738,57 @@ class VfrSyntaxParser ( Parser ):
self._la = 0 # Token type
try:
self.enterOuterAlt(localctx, 1)
- self.state = 1324
+ self.state = 1327
self.match(VfrSyntaxParser.InconsistentIf)
- self.state = 1325
+ self.state = 1328
self.match(VfrSyntaxParser.Prompt)
- self.state = 1326
+ self.state = 1329
self.match(VfrSyntaxParser.T__5)
- self.state = 1327
+ self.state = 1330
self.match(VfrSyntaxParser.StringToken)
- self.state = 1328
+ self.state = 1331
self.match(VfrSyntaxParser.OpenParen)
- self.state = 1329
+ self.state = 1332
self.match(VfrSyntaxParser.Number)
- self.state = 1330
+ self.state = 1333
self.match(VfrSyntaxParser.CloseParen)
- self.state = 1331
+ self.state = 1334
self.match(VfrSyntaxParser.Comma)
- self.state = 1344
+ self.state = 1347
self._errHandler.sync(self)
_la = self._input.LA(1)
if _la==VfrSyntaxParser.FLAGS:
- self.state = 1332
+ self.state = 1335
self.match(VfrSyntaxParser.FLAGS)
- self.state = 1333
+ self.state = 1336
self.match(VfrSyntaxParser.T__5)
- self.state = 1334
+ self.state = 1337
self.flagsField()
- self.state = 1339
+ self.state = 1342
self._errHandler.sync(self)
_la = self._input.LA(1)
while _la==VfrSyntaxParser.BitWiseOr:
- self.state = 1335
+ self.state = 1338
self.match(VfrSyntaxParser.BitWiseOr)
- self.state = 1336
+ self.state = 1339
self.flagsField()
- self.state = 1341
+ self.state = 1344
self._errHandler.sync(self)
_la = self._input.LA(1)
- self.state = 1342
+ self.state = 1345
self.match(VfrSyntaxParser.Comma)
- self.state = 1346
- self.vfrStatementExpression()
- self.state = 1347
- self.match(VfrSyntaxParser.EndIf)
self.state = 1349
+ self.vfrStatementExpression(localctx.Node)
+ self.state = 1350
+ self.match(VfrSyntaxParser.EndIf)
+ self.state = 1352
self._errHandler.sync(self)
- la_ = self._interp.adaptivePredict(self._input,91,self._ctx)
+ la_ = self._interp.adaptivePredict(self._input,92,self._ctx)
if la_ == 1:
- self.state = 1348
+ self.state = 1351
self.match(VfrSyntaxParser.Semicolon)
@@ -8798,7 +8806,7 @@ class VfrSyntaxParser ( Parser ):
def __init__(self, parser, parent:ParserRuleContext=None, invokingState:int=-1):
super().__init__(parent, invokingState)
self.parser = parser
- self.Node = VfrTreeNode(EFI_IFR_NO_SUBMIT_IF_OP)
+ self.Node = IfrTreeNode(EFI_IFR_NO_SUBMIT_IF_OP)
def NoSubmitIf(self):
return self.getToken(VfrSyntaxParser.NoSubmitIf, 0)
@@ -8869,57 +8877,57 @@ class VfrSyntaxParser ( Parser ):
self._la = 0 # Token type
try:
self.enterOuterAlt(localctx, 1)
- self.state = 1351
+ self.state = 1354
self.match(VfrSyntaxParser.NoSubmitIf)
- self.state = 1352
+ self.state = 1355
self.match(VfrSyntaxParser.Prompt)
- self.state = 1353
+ self.state = 1356
self.match(VfrSyntaxParser.T__5)
- self.state = 1354
+ self.state = 1357
self.match(VfrSyntaxParser.StringToken)
- self.state = 1355
+ self.state = 1358
self.match(VfrSyntaxParser.OpenParen)
- self.state = 1356
+ self.state = 1359
self.match(VfrSyntaxParser.Number)
- self.state = 1357
+ self.state = 1360
self.match(VfrSyntaxParser.CloseParen)
- self.state = 1358
+ self.state = 1361
self.match(VfrSyntaxParser.Comma)
- self.state = 1371
+ self.state = 1374
self._errHandler.sync(self)
_la = self._input.LA(1)
if _la==VfrSyntaxParser.FLAGS:
- self.state = 1359
+ self.state = 1362
self.match(VfrSyntaxParser.FLAGS)
- self.state = 1360
+ self.state = 1363
self.match(VfrSyntaxParser.T__5)
- self.state = 1361
+ self.state = 1364
self.flagsField()
- self.state = 1366
+ self.state = 1369
self._errHandler.sync(self)
_la = self._input.LA(1)
while _la==VfrSyntaxParser.BitWiseOr:
- self.state = 1362
+ self.state = 1365
self.match(VfrSyntaxParser.BitWiseOr)
- self.state = 1363
+ self.state = 1366
self.flagsField()
- self.state = 1368
+ self.state = 1371
self._errHandler.sync(self)
_la = self._input.LA(1)
- self.state = 1369
+ self.state = 1372
self.match(VfrSyntaxParser.Comma)
- self.state = 1373
- self.vfrStatementExpression()
- self.state = 1374
- self.match(VfrSyntaxParser.EndIf)
self.state = 1376
+ self.vfrStatementExpression(localctx.Node)
+ self.state = 1377
+ self.match(VfrSyntaxParser.EndIf)
+ self.state = 1379
self._errHandler.sync(self)
- la_ = self._interp.adaptivePredict(self._input,94,self._ctx)
+ la_ = self._interp.adaptivePredict(self._input,95,self._ctx)
if la_ == 1:
- self.state = 1375
+ self.state = 1378
self.match(VfrSyntaxParser.Semicolon)
@@ -8937,7 +8945,7 @@ class VfrSyntaxParser ( Parser ):
def __init__(self, parser, parent:ParserRuleContext=None, invokingState:int=-1):
super().__init__(parent, invokingState)
self.parser = parser
- self.Node = VfrTreeNode(EFI_IFR_DISABLE_IF_OP)
+ self.Node = IfrTreeNode(EFI_IFR_DISABLE_IF_OP)
def DisableIf(self):
return self.getToken(VfrSyntaxParser.DisableIf, 0)
@@ -8977,21 +8985,21 @@ class VfrSyntaxParser ( Parser ):
self.enterRule(localctx, 142, self.RULE_vfrStatementDisableIfQuest)
try:
self.enterOuterAlt(localctx, 1)
- self.state = 1378
+ self.state = 1381
self.match(VfrSyntaxParser.DisableIf)
- self.state = 1379
- self.vfrStatementExpression()
- self.state = 1380
+ self.state = 1382
+ self.vfrStatementExpression(localctx.Node)
+ self.state = 1383
self.match(VfrSyntaxParser.Semicolon)
- self.state = 1381
+ self.state = 1384
self.vfrStatementQuestionOptionList(localctx.Node)
- self.state = 1382
+ self.state = 1385
self.match(VfrSyntaxParser.EndIf)
- self.state = 1384
+ self.state = 1387
self._errHandler.sync(self)
- la_ = self._interp.adaptivePredict(self._input,95,self._ctx)
+ la_ = self._interp.adaptivePredict(self._input,96,self._ctx)
if la_ == 1:
- self.state = 1383
+ self.state = 1386
self.match(VfrSyntaxParser.Semicolon)
@@ -9009,7 +9017,7 @@ class VfrSyntaxParser ( Parser ):
def __init__(self, parser, parent:ParserRuleContext=None, invokingState:int=-1):
super().__init__(parent, invokingState)
self.parser = parser
- self.Node = VfrTreeNode(EFI_IFR_REFRESH_OP)
+ self.Node = IfrTreeNode(EFI_IFR_REFRESH_OP)
def Refresh(self):
return self.getToken(VfrSyntaxParser.Refresh, 0)
@@ -9038,13 +9046,13 @@ class VfrSyntaxParser ( Parser ):
self.enterRule(localctx, 144, self.RULE_vfrStatementRefresh)
try:
self.enterOuterAlt(localctx, 1)
- self.state = 1386
+ self.state = 1389
self.match(VfrSyntaxParser.Refresh)
- self.state = 1387
+ self.state = 1390
self.match(VfrSyntaxParser.Interval)
- self.state = 1388
+ self.state = 1391
self.match(VfrSyntaxParser.T__5)
- self.state = 1389
+ self.state = 1392
self.match(VfrSyntaxParser.Number)
except RecognitionException as re:
localctx.exception = re
@@ -9060,7 +9068,7 @@ class VfrSyntaxParser ( Parser ):
def __init__(self, parser, parent:ParserRuleContext=None, invokingState:int=-1):
super().__init__(parent, invokingState)
self.parser = parser
- self.Node = VfrTreeNode(EFI_IFR_VARSTORE_DEVICE_OP)
+ self.Node = IfrTreeNode(EFI_IFR_VARSTORE_DEVICE_OP)
def VarstoreDevice(self):
return self.getToken(VfrSyntaxParser.VarstoreDevice, 0)
@@ -9098,19 +9106,19 @@ class VfrSyntaxParser ( Parser ):
self.enterRule(localctx, 146, self.RULE_vfrStatementVarstoreDevice)
try:
self.enterOuterAlt(localctx, 1)
- self.state = 1391
+ self.state = 1394
self.match(VfrSyntaxParser.VarstoreDevice)
- self.state = 1392
+ self.state = 1395
self.match(VfrSyntaxParser.T__5)
- self.state = 1393
+ self.state = 1396
self.match(VfrSyntaxParser.StringToken)
- self.state = 1394
+ self.state = 1397
self.match(VfrSyntaxParser.OpenParen)
- self.state = 1395
+ self.state = 1398
self.match(VfrSyntaxParser.Number)
- self.state = 1396
+ self.state = 1399
self.match(VfrSyntaxParser.CloseParen)
- self.state = 1397
+ self.state = 1400
self.match(VfrSyntaxParser.Comma)
except RecognitionException as re:
localctx.exception = re
@@ -9126,7 +9134,7 @@ class VfrSyntaxParser ( Parser ):
def __init__(self, parser, parent:ParserRuleContext=None, invokingState:int=-1):
super().__init__(parent, invokingState)
self.parser = parser
- self.Node = VfrTreeNode(EFI_IFR_REFRESH_ID_OP)
+ self.Node = IfrTreeNode(EFI_IFR_REFRESH_ID_OP)
def RefreshGuid(self):
return self.getToken(VfrSyntaxParser.RefreshGuid, 0)
@@ -9156,13 +9164,13 @@ class VfrSyntaxParser ( Parser ):
self.enterRule(localctx, 148, self.RULE_vfrStatementRefreshEvent)
try:
self.enterOuterAlt(localctx, 1)
- self.state = 1399
+ self.state = 1402
self.match(VfrSyntaxParser.RefreshGuid)
- self.state = 1400
+ self.state = 1403
self.match(VfrSyntaxParser.T__5)
- self.state = 1401
+ self.state = 1404
self.guidDefinition()
- self.state = 1402
+ self.state = 1405
self.match(VfrSyntaxParser.Comma)
except RecognitionException as re:
localctx.exception = re
@@ -9178,7 +9186,7 @@ class VfrSyntaxParser ( Parser ):
def __init__(self, parser, parent:ParserRuleContext=None, invokingState:int=-1):
super().__init__(parent, invokingState)
self.parser = parser
- self.Node = VfrTreeNode(EFI_IFR_WARNING_IF_OP)
+ self.Node = IfrTreeNode(EFI_IFR_WARNING_IF_OP)
def WarningIf(self):
return self.getToken(VfrSyntaxParser.WarningIf, 0)
@@ -9239,45 +9247,45 @@ class VfrSyntaxParser ( Parser ):
self._la = 0 # Token type
try:
self.enterOuterAlt(localctx, 1)
- self.state = 1404
+ self.state = 1407
self.match(VfrSyntaxParser.WarningIf)
- self.state = 1405
+ self.state = 1408
self.match(VfrSyntaxParser.Prompt)
- self.state = 1406
+ self.state = 1409
self.match(VfrSyntaxParser.T__5)
- self.state = 1407
+ self.state = 1410
self.match(VfrSyntaxParser.StringToken)
- self.state = 1408
+ self.state = 1411
self.match(VfrSyntaxParser.OpenParen)
- self.state = 1409
+ self.state = 1412
self.match(VfrSyntaxParser.Number)
- self.state = 1410
+ self.state = 1413
self.match(VfrSyntaxParser.CloseParen)
- self.state = 1411
+ self.state = 1414
self.match(VfrSyntaxParser.Comma)
- self.state = 1416
+ self.state = 1419
self._errHandler.sync(self)
_la = self._input.LA(1)
if _la==VfrSyntaxParser.Timeout:
- self.state = 1412
+ self.state = 1415
self.match(VfrSyntaxParser.Timeout)
- self.state = 1413
+ self.state = 1416
self.match(VfrSyntaxParser.T__5)
- self.state = 1414
+ self.state = 1417
self.match(VfrSyntaxParser.Number)
- self.state = 1415
+ self.state = 1418
self.match(VfrSyntaxParser.Comma)
- self.state = 1418
- self.vfrStatementExpression()
- self.state = 1419
- self.match(VfrSyntaxParser.EndIf)
self.state = 1421
+ self.vfrStatementExpression(localctx.Node)
+ self.state = 1422
+ self.match(VfrSyntaxParser.EndIf)
+ self.state = 1424
self._errHandler.sync(self)
- la_ = self._interp.adaptivePredict(self._input,97,self._ctx)
+ la_ = self._interp.adaptivePredict(self._input,98,self._ctx)
if la_ == 1:
- self.state = 1420
+ self.state = 1423
self.match(VfrSyntaxParser.Semicolon)
@@ -9324,13 +9332,13 @@ class VfrSyntaxParser ( Parser ):
self._la = 0 # Token type
try:
self.enterOuterAlt(localctx, 1)
- self.state = 1426
+ self.state = 1429
self._errHandler.sync(self)
_la = self._input.LA(1)
while ((((_la - 106)) & ~0x3f) == 0 and ((1 << (_la - 106)) & ((1 << (VfrSyntaxParser.DisableIf - 106)) | (1 << (VfrSyntaxParser.InconsistentIf - 106)) | (1 << (VfrSyntaxParser.WarningIf - 106)) | (1 << (VfrSyntaxParser.NoSubmitIf - 106)) | (1 << (VfrSyntaxParser.Image - 106)) | (1 << (VfrSyntaxParser.Locked - 106)) | (1 << (VfrSyntaxParser.Refresh - 106)) | (1 << (VfrSyntaxParser.VarstoreDevice - 106)) | (1 << (VfrSyntaxParser.GuidOp - 106)))) != 0) or _la==VfrSyntaxParser.RefreshGuid:
- self.state = 1423
+ self.state = 1426
self.vfrStatementQuestionTag()
- self.state = 1428
+ self.state = 1431
self._errHandler.sync(self)
_la = self._input.LA(1)
@@ -9395,42 +9403,42 @@ class VfrSyntaxParser ( Parser ):
localctx = VfrSyntaxParser.VfrStatementQuestionOptionTagContext(self, self._ctx, self.state)
self.enterRule(localctx, 154, self.RULE_vfrStatementQuestionOptionTag)
try:
- self.state = 1436
+ self.state = 1439
self._errHandler.sync(self)
token = self._input.LA(1)
if token in [VfrSyntaxParser.SuppressIf]:
self.enterOuterAlt(localctx, 1)
- self.state = 1429
+ self.state = 1432
self.vfrStatementSuppressIfQuest()
pass
elif token in [VfrSyntaxParser.GrayOutIf]:
self.enterOuterAlt(localctx, 2)
- self.state = 1430
+ self.state = 1433
self.vfrStatementGrayOutIfQuest()
pass
elif token in [VfrSyntaxParser.Value]:
self.enterOuterAlt(localctx, 3)
- self.state = 1431
+ self.state = 1434
self.vfrStatementValue()
pass
elif token in [VfrSyntaxParser.Default]:
self.enterOuterAlt(localctx, 4)
- self.state = 1432
+ self.state = 1435
self.vfrStatementDefault()
pass
elif token in [VfrSyntaxParser.Option]:
self.enterOuterAlt(localctx, 5)
- self.state = 1433
+ self.state = 1436
self.vfrStatementOptions()
pass
elif token in [VfrSyntaxParser.Read]:
self.enterOuterAlt(localctx, 6)
- self.state = 1434
+ self.state = 1437
self.vfrStatementRead()
pass
elif token in [VfrSyntaxParser.Write]:
self.enterOuterAlt(localctx, 7)
- self.state = 1435
+ self.state = 1438
self.vfrStatementWrite()
pass
else:
@@ -9494,47 +9502,47 @@ class VfrSyntaxParser ( Parser ):
localctx = VfrSyntaxParser.FlagsFieldContext(self, self._ctx, self.state)
self.enterRule(localctx, 156, self.RULE_flagsField)
try:
- self.state = 1446
+ self.state = 1449
self._errHandler.sync(self)
token = self._input.LA(1)
if token in [VfrSyntaxParser.Number]:
self.enterOuterAlt(localctx, 1)
- self.state = 1438
+ self.state = 1441
self.match(VfrSyntaxParser.Number)
pass
elif token in [VfrSyntaxParser.InteractiveFlag]:
self.enterOuterAlt(localctx, 2)
- self.state = 1439
+ self.state = 1442
self.match(VfrSyntaxParser.InteractiveFlag)
pass
elif token in [VfrSyntaxParser.ManufacturingFlag]:
self.enterOuterAlt(localctx, 3)
- self.state = 1440
+ self.state = 1443
self.match(VfrSyntaxParser.ManufacturingFlag)
pass
elif token in [VfrSyntaxParser.DefaultFlag]:
self.enterOuterAlt(localctx, 4)
- self.state = 1441
+ self.state = 1444
self.match(VfrSyntaxParser.DefaultFlag)
pass
elif token in [VfrSyntaxParser.ResetRequiredFlag]:
self.enterOuterAlt(localctx, 5)
- self.state = 1442
+ self.state = 1445
self.match(VfrSyntaxParser.ResetRequiredFlag)
pass
elif token in [VfrSyntaxParser.ReconnectRequiredFlag]:
self.enterOuterAlt(localctx, 6)
- self.state = 1443
+ self.state = 1446
self.match(VfrSyntaxParser.ReconnectRequiredFlag)
pass
elif token in [VfrSyntaxParser.NVAccessFlag]:
self.enterOuterAlt(localctx, 7)
- self.state = 1444
+ self.state = 1447
localctx.N = self.match(VfrSyntaxParser.NVAccessFlag)
pass
elif token in [VfrSyntaxParser.LateCheckFlag]:
self.enterOuterAlt(localctx, 8)
- self.state = 1445
+ self.state = 1448
localctx.L = self.match(VfrSyntaxParser.LateCheckFlag)
pass
else:
@@ -9554,7 +9562,7 @@ class VfrSyntaxParser ( Parser ):
def __init__(self, parser, parent:ParserRuleContext=None, invokingState:int=-1):
super().__init__(parent, invokingState)
self.parser = parser
- self.Node = VfrTreeNode(EFI_IFR_SUPPRESS_IF_OP)
+ self.Node = IfrTreeNode(EFI_IFR_SUPPRESS_IF_OP)
def SuppressIf(self):
return self.getToken(VfrSyntaxParser.SuppressIf, 0)
@@ -9614,47 +9622,47 @@ class VfrSyntaxParser ( Parser ):
self._la = 0 # Token type
try:
self.enterOuterAlt(localctx, 1)
- self.state = 1448
+ self.state = 1451
self.match(VfrSyntaxParser.SuppressIf)
- self.state = 1449
- self.vfrStatementExpression()
- self.state = 1450
+ self.state = 1452
+ self.vfrStatementExpression(localctx.Node)
+ self.state = 1453
self.match(VfrSyntaxParser.Semicolon)
- self.state = 1463
+ self.state = 1466
self._errHandler.sync(self)
_la = self._input.LA(1)
if _la==VfrSyntaxParser.FLAGS:
- self.state = 1451
+ self.state = 1454
self.match(VfrSyntaxParser.FLAGS)
- self.state = 1452
+ self.state = 1455
self.match(VfrSyntaxParser.T__5)
- self.state = 1453
+ self.state = 1456
self.flagsField()
- self.state = 1458
+ self.state = 1461
self._errHandler.sync(self)
_la = self._input.LA(1)
while _la==VfrSyntaxParser.BitWiseOr:
- self.state = 1454
+ self.state = 1457
self.match(VfrSyntaxParser.BitWiseOr)
- self.state = 1455
+ self.state = 1458
self.flagsField()
- self.state = 1460
+ self.state = 1463
self._errHandler.sync(self)
_la = self._input.LA(1)
- self.state = 1461
+ self.state = 1464
self.match(VfrSyntaxParser.Comma)
- self.state = 1465
+ self.state = 1468
self.vfrStatementQuestionOptionList(localctx.Node)
- self.state = 1466
+ self.state = 1469
self.match(VfrSyntaxParser.EndIf)
- self.state = 1468
+ self.state = 1471
self._errHandler.sync(self)
- la_ = self._interp.adaptivePredict(self._input,103,self._ctx)
+ la_ = self._interp.adaptivePredict(self._input,104,self._ctx)
if la_ == 1:
- self.state = 1467
+ self.state = 1470
self.match(VfrSyntaxParser.Semicolon)
@@ -9672,7 +9680,7 @@ class VfrSyntaxParser ( Parser ):
def __init__(self, parser, parent:ParserRuleContext=None, invokingState:int=-1):
super().__init__(parent, invokingState)
self.parser = parser
- self.Node = VfrTreeNode(EFI_IFR_SUPPRESS_IF_OP)
+ self.Node = IfrTreeNode(EFI_IFR_SUPPRESS_IF_OP)
def GrayOutIf(self):
return self.getToken(VfrSyntaxParser.GrayOutIf, 0)
@@ -9732,47 +9740,47 @@ class VfrSyntaxParser ( Parser ):
self._la = 0 # Token type
try:
self.enterOuterAlt(localctx, 1)
- self.state = 1470
+ self.state = 1473
self.match(VfrSyntaxParser.GrayOutIf)
- self.state = 1471
- self.vfrStatementExpression()
- self.state = 1472
+ self.state = 1474
+ self.vfrStatementExpression(localctx.Node)
+ self.state = 1475
self.match(VfrSyntaxParser.Semicolon)
- self.state = 1485
+ self.state = 1488
self._errHandler.sync(self)
_la = self._input.LA(1)
if _la==VfrSyntaxParser.FLAGS:
- self.state = 1473
+ self.state = 1476
self.match(VfrSyntaxParser.FLAGS)
- self.state = 1474
+ self.state = 1477
self.match(VfrSyntaxParser.T__5)
- self.state = 1475
+ self.state = 1478
self.flagsField()
- self.state = 1480
+ self.state = 1483
self._errHandler.sync(self)
_la = self._input.LA(1)
while _la==VfrSyntaxParser.BitWiseOr:
- self.state = 1476
+ self.state = 1479
self.match(VfrSyntaxParser.BitWiseOr)
- self.state = 1477
+ self.state = 1480
self.flagsField()
- self.state = 1482
+ self.state = 1485
self._errHandler.sync(self)
_la = self._input.LA(1)
- self.state = 1483
+ self.state = 1486
self.match(VfrSyntaxParser.Comma)
- self.state = 1487
+ self.state = 1490
self.vfrStatementQuestionOptionList(localctx.Node)
- self.state = 1488
+ self.state = 1491
self.match(VfrSyntaxParser.EndIf)
- self.state = 1490
+ self.state = 1493
self._errHandler.sync(self)
- la_ = self._interp.adaptivePredict(self._input,106,self._ctx)
+ la_ = self._interp.adaptivePredict(self._input,107,self._ctx)
if la_ == 1:
- self.state = 1489
+ self.state = 1492
self.match(VfrSyntaxParser.Semicolon)
@@ -9790,17 +9798,14 @@ class VfrSyntaxParser ( Parser ):
def __init__(self, parser, parent:ParserRuleContext=None, invokingState:int=-1):
super().__init__(parent, invokingState)
self.parser = parser
- self.Node = VfrTreeNode(EFI_IFR_DEFAULT_OP)
+ self.Node = IfrTreeNode(EFI_IFR_DEFAULT_OP)
self.D = None # Token
+ self.V = None # VfrStatementValueContext
self.SN = None # Token
def Default(self):
return self.getToken(VfrSyntaxParser.Default, 0)
- def vfrStatementValue(self):
- return self.getTypedRuleContext(VfrSyntaxParser.VfrStatementValueContext,0)
-
-
def Comma(self, i:int=None):
if i is None:
return self.getTokens(VfrSyntaxParser.Comma)
@@ -9811,6 +9816,10 @@ class VfrSyntaxParser ( Parser ):
return self.getTypedRuleContext(VfrSyntaxParser.VfrConstantValueFieldContext,0)
+ def vfrStatementValue(self):
+ return self.getTypedRuleContext(VfrSyntaxParser.VfrStatementValueContext,0)
+
+
def DefaultStore(self):
return self.getToken(VfrSyntaxParser.DefaultStore, 0)
@@ -9836,40 +9845,40 @@ class VfrSyntaxParser ( Parser ):
self._la = 0 # Token type
try:
self.enterOuterAlt(localctx, 1)
- self.state = 1492
+ self.state = 1495
localctx.D = self.match(VfrSyntaxParser.Default)
- self.state = 1500
+ self.state = 1503
self._errHandler.sync(self)
token = self._input.LA(1)
if token in [VfrSyntaxParser.Value]:
- self.state = 1493
- self.vfrStatementValue()
- self.state = 1494
+ self.state = 1496
+ localctx.V = self.vfrStatementValue()
+ self.state = 1497
self.match(VfrSyntaxParser.Comma)
pass
elif token in [VfrSyntaxParser.T__5]:
- self.state = 1496
+ self.state = 1499
self.match(VfrSyntaxParser.T__5)
- self.state = 1497
+ self.state = 1500
self.vfrConstantValueField()
- self.state = 1498
+ self.state = 1501
self.match(VfrSyntaxParser.Comma)
pass
else:
raise NoViableAltException(self)
- self.state = 1506
+ self.state = 1509
self._errHandler.sync(self)
_la = self._input.LA(1)
if _la==VfrSyntaxParser.DefaultStore:
- self.state = 1502
+ self.state = 1505
self.match(VfrSyntaxParser.DefaultStore)
- self.state = 1503
+ self.state = 1506
self.match(VfrSyntaxParser.T__5)
- self.state = 1504
+ self.state = 1507
localctx.SN = self.match(VfrSyntaxParser.StringIdentifier)
- self.state = 1505
+ self.state = 1508
self.match(VfrSyntaxParser.Comma)
@@ -9887,7 +9896,7 @@ class VfrSyntaxParser ( Parser ):
def __init__(self, parser, parent:ParserRuleContext=None, invokingState:int=-1):
super().__init__(parent, invokingState)
self.parser = parser
- self.Node = VfrTreeNode(EFI_IFR_VALUE_OP)
+ self.Node = IfrTreeNode(EFI_IFR_VALUE_OP)
def Value(self):
return self.getToken(VfrSyntaxParser.Value, 0)
@@ -9914,12 +9923,12 @@ class VfrSyntaxParser ( Parser ):
self.enterRule(localctx, 164, self.RULE_vfrStatementValue)
try:
self.enterOuterAlt(localctx, 1)
- self.state = 1508
+ self.state = 1511
self.match(VfrSyntaxParser.Value)
- self.state = 1509
+ self.state = 1512
self.match(VfrSyntaxParser.T__5)
- self.state = 1510
- self.vfrStatementExpression()
+ self.state = 1513
+ self.vfrStatementExpression(localctx.Node)
except RecognitionException as re:
localctx.exception = re
self._errHandler.reportError(self, re)
@@ -9958,7 +9967,7 @@ class VfrSyntaxParser ( Parser ):
self.enterRule(localctx, 166, self.RULE_vfrStatementOptions)
try:
self.enterOuterAlt(localctx, 1)
- self.state = 1512
+ self.state = 1515
self.vfrStatementOneOfOption()
except RecognitionException as re:
localctx.exception = re
@@ -9974,9 +9983,10 @@ class VfrSyntaxParser ( Parser ):
def __init__(self, parser, parent:ParserRuleContext=None, invokingState:int=-1):
super().__init__(parent, invokingState)
self.parser = parser
- self.Node = VfrTreeNode(EFI_IFR_ONE_OF_OPTION_OP)
+ self.Node = IfrTreeNode(EFI_IFR_ONE_OF_OPTION_OP)
self.F = None # Token
self.KN = None # Token
+ self.T = None # Token
def Option(self):
return self.getToken(VfrSyntaxParser.Option, 0)
@@ -10051,63 +10061,63 @@ class VfrSyntaxParser ( Parser ):
self._la = 0 # Token type
try:
self.enterOuterAlt(localctx, 1)
- self.state = 1514
+ self.state = 1517
self.match(VfrSyntaxParser.Option)
- self.state = 1515
+ self.state = 1518
self.match(VfrSyntaxParser.Text)
- self.state = 1516
+ self.state = 1519
self.match(VfrSyntaxParser.T__5)
- self.state = 1517
+ self.state = 1520
self.match(VfrSyntaxParser.StringToken)
- self.state = 1518
+ self.state = 1521
self.match(VfrSyntaxParser.OpenParen)
- self.state = 1519
+ self.state = 1522
self.match(VfrSyntaxParser.Number)
- self.state = 1520
+ self.state = 1523
self.match(VfrSyntaxParser.CloseParen)
- self.state = 1521
+ self.state = 1524
self.match(VfrSyntaxParser.Comma)
- self.state = 1522
+ self.state = 1525
self.match(VfrSyntaxParser.Value)
- self.state = 1523
+ self.state = 1526
self.match(VfrSyntaxParser.T__5)
- self.state = 1524
+ self.state = 1527
self.vfrConstantValueField()
- self.state = 1525
+ self.state = 1528
self.match(VfrSyntaxParser.Comma)
- self.state = 1526
+ self.state = 1529
localctx.F = self.match(VfrSyntaxParser.FLAGS)
- self.state = 1527
+ self.state = 1530
self.match(VfrSyntaxParser.T__5)
- self.state = 1528
+ self.state = 1531
self.vfrOneOfOptionFlags()
- self.state = 1533
+ self.state = 1536
self._errHandler.sync(self)
- la_ = self._interp.adaptivePredict(self._input,109,self._ctx)
+ la_ = self._interp.adaptivePredict(self._input,110,self._ctx)
if la_ == 1:
- self.state = 1529
+ self.state = 1532
self.match(VfrSyntaxParser.Comma)
- self.state = 1530
+ self.state = 1533
self.match(VfrSyntaxParser.Key)
- self.state = 1531
+ self.state = 1534
self.match(VfrSyntaxParser.T__5)
- self.state = 1532
+ self.state = 1535
localctx.KN = self.match(VfrSyntaxParser.Number)
- self.state = 1539
+ self.state = 1542
self._errHandler.sync(self)
_la = self._input.LA(1)
while _la==VfrSyntaxParser.Comma:
- self.state = 1535
- self.match(VfrSyntaxParser.Comma)
- self.state = 1536
+ self.state = 1538
+ localctx.T = self.match(VfrSyntaxParser.Comma)
+ self.state = 1539
self.vfrImageTag()
- self.state = 1541
+ self.state = 1544
self._errHandler.sync(self)
_la = self._input.LA(1)
- self.state = 1542
+ self.state = 1545
self.match(VfrSyntaxParser.Semicolon)
except RecognitionException as re:
localctx.exception = re
@@ -10158,17 +10168,17 @@ class VfrSyntaxParser ( Parser ):
self._la = 0 # Token type
try:
self.enterOuterAlt(localctx, 1)
- self.state = 1544
+ self.state = 1547
self.oneofoptionFlagsField()
- self.state = 1549
+ self.state = 1552
self._errHandler.sync(self)
_la = self._input.LA(1)
while _la==VfrSyntaxParser.BitWiseOr:
- self.state = 1545
+ self.state = 1548
self.match(VfrSyntaxParser.BitWiseOr)
- self.state = 1546
+ self.state = 1549
self.oneofoptionFlagsField()
- self.state = 1551
+ self.state = 1554
self._errHandler.sync(self)
_la = self._input.LA(1)
@@ -10241,62 +10251,62 @@ class VfrSyntaxParser ( Parser ):
localctx = VfrSyntaxParser.OneofoptionFlagsFieldContext(self, self._ctx, self.state)
self.enterRule(localctx, 172, self.RULE_oneofoptionFlagsField)
try:
- self.state = 1563
+ self.state = 1566
self._errHandler.sync(self)
token = self._input.LA(1)
if token in [VfrSyntaxParser.Number]:
self.enterOuterAlt(localctx, 1)
- self.state = 1552
+ self.state = 1555
self.match(VfrSyntaxParser.Number)
pass
elif token in [VfrSyntaxParser.OptionDefault]:
self.enterOuterAlt(localctx, 2)
- self.state = 1553
+ self.state = 1556
self.match(VfrSyntaxParser.OptionDefault)
pass
elif token in [VfrSyntaxParser.OptionDefaultMfg]:
self.enterOuterAlt(localctx, 3)
- self.state = 1554
+ self.state = 1557
self.match(VfrSyntaxParser.OptionDefaultMfg)
pass
elif token in [VfrSyntaxParser.InteractiveFlag]:
self.enterOuterAlt(localctx, 4)
- self.state = 1555
+ self.state = 1558
self.match(VfrSyntaxParser.InteractiveFlag)
pass
elif token in [VfrSyntaxParser.ResetRequiredFlag]:
self.enterOuterAlt(localctx, 5)
- self.state = 1556
+ self.state = 1559
self.match(VfrSyntaxParser.ResetRequiredFlag)
pass
elif token in [VfrSyntaxParser.RestStyleFlag]:
self.enterOuterAlt(localctx, 6)
- self.state = 1557
+ self.state = 1560
self.match(VfrSyntaxParser.RestStyleFlag)
pass
elif token in [VfrSyntaxParser.ReconnectRequiredFlag]:
self.enterOuterAlt(localctx, 7)
- self.state = 1558
+ self.state = 1561
self.match(VfrSyntaxParser.ReconnectRequiredFlag)
pass
elif token in [VfrSyntaxParser.ManufacturingFlag]:
self.enterOuterAlt(localctx, 8)
- self.state = 1559
+ self.state = 1562
self.match(VfrSyntaxParser.ManufacturingFlag)
pass
elif token in [VfrSyntaxParser.DefaultFlag]:
self.enterOuterAlt(localctx, 9)
- self.state = 1560
+ self.state = 1563
self.match(VfrSyntaxParser.DefaultFlag)
pass
elif token in [VfrSyntaxParser.NVAccessFlag]:
self.enterOuterAlt(localctx, 10)
- self.state = 1561
+ self.state = 1564
localctx.A = self.match(VfrSyntaxParser.NVAccessFlag)
pass
elif token in [VfrSyntaxParser.LateCheckFlag]:
self.enterOuterAlt(localctx, 11)
- self.state = 1562
+ self.state = 1565
localctx.L = self.match(VfrSyntaxParser.LateCheckFlag)
pass
else:
@@ -10316,7 +10326,7 @@ class VfrSyntaxParser ( Parser ):
def __init__(self, parser, parent:ParserRuleContext=None, invokingState:int=-1):
super().__init__(parent, invokingState)
self.parser = parser
- self.Node = VfrTreeNode(EFI_IFR_READ_OP)
+ self.Node = IfrTreeNode(EFI_IFR_READ_OP)
def Read(self):
return self.getToken(VfrSyntaxParser.Read, 0)
@@ -10346,11 +10356,11 @@ class VfrSyntaxParser ( Parser ):
self.enterRule(localctx, 174, self.RULE_vfrStatementRead)
try:
self.enterOuterAlt(localctx, 1)
- self.state = 1565
+ self.state = 1568
self.match(VfrSyntaxParser.Read)
- self.state = 1566
- self.vfrStatementExpression()
- self.state = 1567
+ self.state = 1569
+ self.vfrStatementExpression(localctx.Node)
+ self.state = 1570
self.match(VfrSyntaxParser.Semicolon)
except RecognitionException as re:
localctx.exception = re
@@ -10366,7 +10376,7 @@ class VfrSyntaxParser ( Parser ):
def __init__(self, parser, parent:ParserRuleContext=None, invokingState:int=-1):
super().__init__(parent, invokingState)
self.parser = parser
- self.Node = VfrTreeNode(EFI_IFR_WRITE_OP)
+ self.Node = IfrTreeNode(EFI_IFR_WRITE_OP)
def Write(self):
return self.getToken(VfrSyntaxParser.Write, 0)
@@ -10396,11 +10406,11 @@ class VfrSyntaxParser ( Parser ):
self.enterRule(localctx, 176, self.RULE_vfrStatementWrite)
try:
self.enterOuterAlt(localctx, 1)
- self.state = 1569
+ self.state = 1572
self.match(VfrSyntaxParser.Write)
- self.state = 1570
- self.vfrStatementExpression()
- self.state = 1571
+ self.state = 1573
+ self.vfrStatementExpression(localctx.Node)
+ self.state = 1574
self.match(VfrSyntaxParser.Semicolon)
except RecognitionException as re:
localctx.exception = re
@@ -10445,13 +10455,13 @@ class VfrSyntaxParser ( Parser ):
self._la = 0 # Token type
try:
self.enterOuterAlt(localctx, 1)
- self.state = 1576
+ self.state = 1579
self._errHandler.sync(self)
_la = self._input.LA(1)
while ((((_la - 61)) & ~0x3f) == 0 and ((1 << (_la - 61)) & ((1 << (VfrSyntaxParser.Option - 61)) | (1 << (VfrSyntaxParser.GrayOutIf - 61)) | (1 << (VfrSyntaxParser.Default - 61)) | (1 << (VfrSyntaxParser.SuppressIf - 61)) | (1 << (VfrSyntaxParser.DisableIf - 61)) | (1 << (VfrSyntaxParser.InconsistentIf - 61)) | (1 << (VfrSyntaxParser.WarningIf - 61)) | (1 << (VfrSyntaxParser.NoSubmitIf - 61)))) != 0) or ((((_la - 144)) & ~0x3f) == 0 and ((1 << (_la - 144)) & ((1 << (VfrSyntaxParser.Image - 144)) | (1 << (VfrSyntaxParser.Locked - 144)) | (1 << (VfrSyntaxParser.Value - 144)) | (1 << (VfrSyntaxParser.Read - 144)) | (1 << (VfrSyntaxParser.Write - 144)) | (1 << (VfrSyntaxParser.Refresh - 144)) | (1 << (VfrSyntaxParser.VarstoreDevice - 144)) | (1 << (VfrSyntaxParser.GuidOp - 144)))) != 0) or _la==VfrSyntaxParser.RefreshGuid:
- self.state = 1573
+ self.state = 1576
self.vfrStatementQuestionOption()
- self.state = 1578
+ self.state = 1581
self._errHandler.sync(self)
_la = self._input.LA(1)
@@ -10496,17 +10506,17 @@ class VfrSyntaxParser ( Parser ):
localctx = VfrSyntaxParser.VfrStatementQuestionOptionContext(self, self._ctx, self.state)
self.enterRule(localctx, 180, self.RULE_vfrStatementQuestionOption)
try:
- self.state = 1581
+ self.state = 1584
self._errHandler.sync(self)
token = self._input.LA(1)
if token in [VfrSyntaxParser.DisableIf, VfrSyntaxParser.InconsistentIf, VfrSyntaxParser.WarningIf, VfrSyntaxParser.NoSubmitIf, VfrSyntaxParser.Image, VfrSyntaxParser.Locked, VfrSyntaxParser.Refresh, VfrSyntaxParser.VarstoreDevice, VfrSyntaxParser.GuidOp, VfrSyntaxParser.RefreshGuid]:
self.enterOuterAlt(localctx, 1)
- self.state = 1579
+ self.state = 1582
self.vfrStatementQuestionTag()
pass
elif token in [VfrSyntaxParser.Option, VfrSyntaxParser.GrayOutIf, VfrSyntaxParser.Default, VfrSyntaxParser.SuppressIf, VfrSyntaxParser.Value, VfrSyntaxParser.Read, VfrSyntaxParser.Write]:
self.enterOuterAlt(localctx, 2)
- self.state = 1580
+ self.state = 1583
self.vfrStatementQuestionOptionTag()
pass
else:
@@ -10553,17 +10563,17 @@ class VfrSyntaxParser ( Parser ):
localctx = VfrSyntaxParser.VfrStatementBooleanTypeContext(self, self._ctx, self.state)
self.enterRule(localctx, 182, self.RULE_vfrStatementBooleanType)
try:
- self.state = 1585
+ self.state = 1588
self._errHandler.sync(self)
token = self._input.LA(1)
if token in [VfrSyntaxParser.CheckBox]:
self.enterOuterAlt(localctx, 1)
- self.state = 1583
+ self.state = 1586
self.vfrStatementCheckBox()
pass
elif token in [VfrSyntaxParser.Action]:
self.enterOuterAlt(localctx, 2)
- self.state = 1584
+ self.state = 1587
self.vfrStatementAction()
pass
else:
@@ -10583,8 +10593,8 @@ class VfrSyntaxParser ( Parser ):
def __init__(self, parser, parent:ParserRuleContext=None, invokingState:int=-1):
super().__init__(parent, invokingState)
self.parser = parser
- self.Node = VfrTreeNode(EFI_IFR_CHECKBOX_OP)
- self.OpObj = CIfrCheckBox()
+ self.Node = IfrTreeNode(EFI_IFR_CHECKBOX_OP)
+ self.GuidNode = IfrTreeNode(EFI_IFR_GUID_OP)
self.QType = EFI_QUESION_TYPE.QUESTION_NORMAL
self.L = None # Token
self.F = None # Token
@@ -10648,47 +10658,47 @@ class VfrSyntaxParser ( Parser ):
self._la = 0 # Token type
try:
self.enterOuterAlt(localctx, 1)
- self.state = 1587
- localctx.L = self.match(VfrSyntaxParser.CheckBox)
- self.state = 1588
- self.vfrQuestionBaseInfo(localctx.OpObj, localctx.QType)
- self.state = 1589
- self.vfrStatementHeader(localctx.OpObj)
self.state = 1590
+ localctx.L = self.match(VfrSyntaxParser.CheckBox)
+ self.state = 1591
+ self.vfrQuestionBaseInfo(localctx.Node, localctx.QType)
+ self.state = 1592
+ self.vfrStatementHeader(localctx.Node)
+ self.state = 1593
self.match(VfrSyntaxParser.Comma)
- self.state = 1596
+ self.state = 1599
self._errHandler.sync(self)
_la = self._input.LA(1)
if _la==VfrSyntaxParser.FLAGS:
- self.state = 1591
+ self.state = 1594
localctx.F = self.match(VfrSyntaxParser.FLAGS)
- self.state = 1592
+ self.state = 1595
self.match(VfrSyntaxParser.T__5)
- self.state = 1593
+ self.state = 1596
self.vfrCheckBoxFlags()
- self.state = 1594
+ self.state = 1597
self.match(VfrSyntaxParser.Comma)
- self.state = 1602
+ self.state = 1605
self._errHandler.sync(self)
_la = self._input.LA(1)
if _la==VfrSyntaxParser.Key:
- self.state = 1598
+ self.state = 1601
self.match(VfrSyntaxParser.Key)
- self.state = 1599
+ self.state = 1602
self.match(VfrSyntaxParser.T__5)
- self.state = 1600
+ self.state = 1603
self.match(VfrSyntaxParser.Number)
- self.state = 1601
+ self.state = 1604
self.match(VfrSyntaxParser.Comma)
- self.state = 1604
+ self.state = 1607
self.vfrStatementQuestionOptionList(localctx.Node)
- self.state = 1605
+ self.state = 1608
self.match(VfrSyntaxParser.EndCheckBox)
- self.state = 1606
+ self.state = 1609
self.match(VfrSyntaxParser.Semicolon)
except RecognitionException as re:
localctx.exception = re
@@ -10739,17 +10749,17 @@ class VfrSyntaxParser ( Parser ):
self._la = 0 # Token type
try:
self.enterOuterAlt(localctx, 1)
- self.state = 1608
+ self.state = 1611
self.checkboxFlagsField()
- self.state = 1613
+ self.state = 1616
self._errHandler.sync(self)
_la = self._input.LA(1)
while _la==VfrSyntaxParser.BitWiseOr:
- self.state = 1609
+ self.state = 1612
self.match(VfrSyntaxParser.BitWiseOr)
- self.state = 1610
+ self.state = 1613
self.checkboxFlagsField()
- self.state = 1615
+ self.state = 1618
self._errHandler.sync(self)
_la = self._input.LA(1)
@@ -10808,37 +10818,37 @@ class VfrSyntaxParser ( Parser ):
localctx = VfrSyntaxParser.CheckboxFlagsFieldContext(self, self._ctx, self.state)
self.enterRule(localctx, 188, self.RULE_checkboxFlagsField)
try:
- self.state = 1622
+ self.state = 1625
self._errHandler.sync(self)
token = self._input.LA(1)
if token in [VfrSyntaxParser.Number]:
self.enterOuterAlt(localctx, 1)
- self.state = 1616
+ self.state = 1619
self.match(VfrSyntaxParser.Number)
pass
elif token in [VfrSyntaxParser.DefaultFlag]:
self.enterOuterAlt(localctx, 2)
- self.state = 1617
+ self.state = 1620
localctx.D = self.match(VfrSyntaxParser.DefaultFlag)
pass
elif token in [VfrSyntaxParser.ManufacturingFlag]:
self.enterOuterAlt(localctx, 3)
- self.state = 1618
+ self.state = 1621
localctx.M = self.match(VfrSyntaxParser.ManufacturingFlag)
pass
elif token in [VfrSyntaxParser.CheckBoxDefaultFlag]:
self.enterOuterAlt(localctx, 4)
- self.state = 1619
+ self.state = 1622
self.match(VfrSyntaxParser.CheckBoxDefaultFlag)
pass
elif token in [VfrSyntaxParser.CheckBoxDefaultMfgFlag]:
self.enterOuterAlt(localctx, 5)
- self.state = 1620
+ self.state = 1623
self.match(VfrSyntaxParser.CheckBoxDefaultMfgFlag)
pass
elif token in [VfrSyntaxParser.InteractiveFlag, VfrSyntaxParser.NVAccessFlag, VfrSyntaxParser.ResetRequiredFlag, VfrSyntaxParser.ReconnectRequiredFlag, VfrSyntaxParser.LateCheckFlag, VfrSyntaxParser.ReadOnlyFlag, VfrSyntaxParser.OptionOnlyFlag, VfrSyntaxParser.RestStyleFlag]:
self.enterOuterAlt(localctx, 6)
- self.state = 1621
+ self.state = 1624
self.questionheaderFlagsField()
pass
else:
@@ -10858,8 +10868,7 @@ class VfrSyntaxParser ( Parser ):
def __init__(self, parser, parent:ParserRuleContext=None, invokingState:int=-1):
super().__init__(parent, invokingState)
self.parser = parser
- self.Node = VfrTreeNode(EFI_IFR_ACTION_OP)
- self.OpObj = CIfrAction()
+ self.Node = IfrTreeNode(EFI_IFR_ACTION_OP)
self.QType = EFI_QUESION_TYPE.QUESTION_NORMAL
def Action(self):
@@ -10926,45 +10935,45 @@ class VfrSyntaxParser ( Parser ):
self._la = 0 # Token type
try:
self.enterOuterAlt(localctx, 1)
- self.state = 1624
+ self.state = 1627
self.match(VfrSyntaxParser.Action)
- self.state = 1625
- self.vfrQuestionHeader(localctx.OpObj, localctx.QType)
- self.state = 1626
+ self.state = 1628
+ self.vfrQuestionHeader(localctx.Node, localctx.QType)
+ self.state = 1629
self.match(VfrSyntaxParser.Comma)
- self.state = 1632
+ self.state = 1635
self._errHandler.sync(self)
_la = self._input.LA(1)
if _la==VfrSyntaxParser.FLAGS:
- self.state = 1627
+ self.state = 1630
self.match(VfrSyntaxParser.FLAGS)
- self.state = 1628
+ self.state = 1631
self.match(VfrSyntaxParser.T__5)
- self.state = 1629
+ self.state = 1632
self.vfrActionFlags()
- self.state = 1630
+ self.state = 1633
self.match(VfrSyntaxParser.Comma)
- self.state = 1634
+ self.state = 1637
self.match(VfrSyntaxParser.Config)
- self.state = 1635
+ self.state = 1638
self.match(VfrSyntaxParser.T__5)
- self.state = 1636
+ self.state = 1639
self.match(VfrSyntaxParser.StringToken)
- self.state = 1637
+ self.state = 1640
self.match(VfrSyntaxParser.OpenParen)
- self.state = 1638
+ self.state = 1641
self.match(VfrSyntaxParser.Number)
- self.state = 1639
+ self.state = 1642
self.match(VfrSyntaxParser.CloseParen)
- self.state = 1640
+ self.state = 1643
self.match(VfrSyntaxParser.Comma)
- self.state = 1641
+ self.state = 1644
self.vfrStatementQuestionTagList(localctx.Node)
- self.state = 1642
+ self.state = 1645
self.match(VfrSyntaxParser.EndAction)
- self.state = 1643
+ self.state = 1646
self.match(VfrSyntaxParser.Semicolon)
except RecognitionException as re:
localctx.exception = re
@@ -11014,17 +11023,17 @@ class VfrSyntaxParser ( Parser ):
self._la = 0 # Token type
try:
self.enterOuterAlt(localctx, 1)
- self.state = 1645
+ self.state = 1648
self.actionFlagsField()
- self.state = 1650
+ self.state = 1653
self._errHandler.sync(self)
_la = self._input.LA(1)
while _la==VfrSyntaxParser.BitWiseOr:
- self.state = 1646
+ self.state = 1649
self.match(VfrSyntaxParser.BitWiseOr)
- self.state = 1647
+ self.state = 1650
self.actionFlagsField()
- self.state = 1652
+ self.state = 1655
self._errHandler.sync(self)
_la = self._input.LA(1)
@@ -11069,17 +11078,17 @@ class VfrSyntaxParser ( Parser ):
localctx = VfrSyntaxParser.ActionFlagsFieldContext(self, self._ctx, self.state)
self.enterRule(localctx, 194, self.RULE_actionFlagsField)
try:
- self.state = 1655
+ self.state = 1658
self._errHandler.sync(self)
token = self._input.LA(1)
if token in [VfrSyntaxParser.Number]:
self.enterOuterAlt(localctx, 1)
- self.state = 1653
+ self.state = 1656
localctx.N = self.match(VfrSyntaxParser.Number)
pass
elif token in [VfrSyntaxParser.InteractiveFlag, VfrSyntaxParser.NVAccessFlag, VfrSyntaxParser.ResetRequiredFlag, VfrSyntaxParser.ReconnectRequiredFlag, VfrSyntaxParser.LateCheckFlag, VfrSyntaxParser.ReadOnlyFlag, VfrSyntaxParser.OptionOnlyFlag, VfrSyntaxParser.RestStyleFlag]:
self.enterOuterAlt(localctx, 2)
- self.state = 1654
+ self.state = 1657
self.questionheaderFlagsField()
pass
else:
@@ -11126,17 +11135,17 @@ class VfrSyntaxParser ( Parser ):
localctx = VfrSyntaxParser.VfrStatementNumericTypeContext(self, self._ctx, self.state)
self.enterRule(localctx, 196, self.RULE_vfrStatementNumericType)
try:
- self.state = 1659
+ self.state = 1662
self._errHandler.sync(self)
token = self._input.LA(1)
if token in [VfrSyntaxParser.Numeric]:
self.enterOuterAlt(localctx, 1)
- self.state = 1657
+ self.state = 1660
self.vfrStatementNumeric()
pass
elif token in [VfrSyntaxParser.OneOf]:
self.enterOuterAlt(localctx, 2)
- self.state = 1658
+ self.state = 1661
self.vfrStatementOneOf()
pass
else:
@@ -11156,8 +11165,8 @@ class VfrSyntaxParser ( Parser ):
def __init__(self, parser, parent:ParserRuleContext=None, invokingState:int=-1):
super().__init__(parent, invokingState)
self.parser = parser
- self.Node = VfrTreeNode(EFI_IFR_NUMERIC_OP)
- self.OpObj = CIfrNumeric()
+ self.Node = IfrTreeNode(EFI_IFR_NUMERIC_OP)
+ self.GuidNode = IfrTreeNode(EFI_IFR_GUID_OP)
self.QType = EFI_QUESION_TYPE.QUESTION_NORMAL
self.F = None # Token
@@ -11224,49 +11233,49 @@ class VfrSyntaxParser ( Parser ):
self._la = 0 # Token type
try:
self.enterOuterAlt(localctx, 1)
- self.state = 1661
- self.match(VfrSyntaxParser.Numeric)
- self.state = 1662
- self.vfrQuestionBaseInfo(localctx.OpObj, localctx.QType)
- self.state = 1663
- self.vfrStatementHeader(localctx.OpObj)
self.state = 1664
+ self.match(VfrSyntaxParser.Numeric)
+ self.state = 1665
+ self.vfrQuestionBaseInfo(localctx.Node, localctx.QType)
+ self.state = 1666
+ self.vfrStatementHeader(localctx.Node)
+ self.state = 1667
self.match(VfrSyntaxParser.Comma)
- self.state = 1670
+ self.state = 1673
self._errHandler.sync(self)
_la = self._input.LA(1)
if _la==VfrSyntaxParser.FLAGS:
- self.state = 1665
+ self.state = 1668
localctx.F = self.match(VfrSyntaxParser.FLAGS)
- self.state = 1666
+ self.state = 1669
self.match(VfrSyntaxParser.T__5)
- self.state = 1667
+ self.state = 1670
self.vfrNumericFlags()
- self.state = 1668
+ self.state = 1671
self.match(VfrSyntaxParser.Comma)
- self.state = 1676
+ self.state = 1679
self._errHandler.sync(self)
_la = self._input.LA(1)
if _la==VfrSyntaxParser.Key:
- self.state = 1672
+ self.state = 1675
self.match(VfrSyntaxParser.Key)
- self.state = 1673
+ self.state = 1676
self.match(VfrSyntaxParser.T__5)
- self.state = 1674
+ self.state = 1677
self.match(VfrSyntaxParser.Number)
- self.state = 1675
+ self.state = 1678
self.match(VfrSyntaxParser.Comma)
- self.state = 1678
- self.vfrSetMinMaxStep(localctx.OpObj)
- self.state = 1679
+ self.state = 1681
+ self.vfrSetMinMaxStep(localctx.Node)
+ self.state = 1682
self.vfrStatementQuestionOptionList(localctx.Node)
- self.state = 1680
+ self.state = 1683
self.match(VfrSyntaxParser.EndNumeric)
- self.state = 1681
+ self.state = 1684
self.match(VfrSyntaxParser.Semicolon)
except RecognitionException as re:
localctx.exception = re
@@ -11279,16 +11288,16 @@ class VfrSyntaxParser ( Parser ):
class VfrSetMinMaxStepContext(ParserRuleContext):
- def __init__(self, parser, parent:ParserRuleContext=None, invokingState:int=-1, OpObj=None):
+ def __init__(self, parser, parent:ParserRuleContext=None, invokingState:int=-1, Node=None):
super().__init__(parent, invokingState)
self.parser = parser
- self.OpObj = None
+ self.Node = None
self.N1 = None # Token
self.I = None # Token
self.N2 = None # Token
self.A = None # Token
self.S = None # Token
- self.OpObj = OpObj
+ self.Node = Node
def Minimum(self):
return self.getToken(VfrSyntaxParser.Minimum, 0)
@@ -11329,56 +11338,56 @@ class VfrSyntaxParser ( Parser ):
- def vfrSetMinMaxStep(self, OpObj):
+ def vfrSetMinMaxStep(self, Node):
- localctx = VfrSyntaxParser.VfrSetMinMaxStepContext(self, self._ctx, self.state, OpObj)
+ localctx = VfrSyntaxParser.VfrSetMinMaxStepContext(self, self._ctx, self.state, Node)
self.enterRule(localctx, 200, self.RULE_vfrSetMinMaxStep)
self._la = 0 # Token type
try:
self.enterOuterAlt(localctx, 1)
- self.state = 1683
+ self.state = 1686
self.match(VfrSyntaxParser.Minimum)
- self.state = 1684
+ self.state = 1687
self.match(VfrSyntaxParser.T__5)
- self.state = 1686
+ self.state = 1689
self._errHandler.sync(self)
_la = self._input.LA(1)
if _la==VfrSyntaxParser.Negative:
- self.state = 1685
+ self.state = 1688
localctx.N1 = self.match(VfrSyntaxParser.Negative)
- self.state = 1688
+ self.state = 1691
localctx.I = self.match(VfrSyntaxParser.Number)
- self.state = 1689
+ self.state = 1692
self.match(VfrSyntaxParser.Comma)
- self.state = 1690
+ self.state = 1693
self.match(VfrSyntaxParser.Maximum)
- self.state = 1691
+ self.state = 1694
self.match(VfrSyntaxParser.T__5)
- self.state = 1693
+ self.state = 1696
self._errHandler.sync(self)
_la = self._input.LA(1)
if _la==VfrSyntaxParser.Negative:
- self.state = 1692
+ self.state = 1695
localctx.N2 = self.match(VfrSyntaxParser.Negative)
- self.state = 1695
+ self.state = 1698
localctx.A = self.match(VfrSyntaxParser.Number)
- self.state = 1696
+ self.state = 1699
self.match(VfrSyntaxParser.Comma)
- self.state = 1701
+ self.state = 1704
self._errHandler.sync(self)
_la = self._input.LA(1)
if _la==VfrSyntaxParser.Step:
- self.state = 1697
+ self.state = 1700
self.match(VfrSyntaxParser.Step)
- self.state = 1698
+ self.state = 1701
self.match(VfrSyntaxParser.T__5)
- self.state = 1699
+ self.state = 1702
localctx.S = self.match(VfrSyntaxParser.Number)
- self.state = 1700
+ self.state = 1703
self.match(VfrSyntaxParser.Comma)
@@ -11399,6 +11408,7 @@ class VfrSyntaxParser ( Parser ):
self.HFlags = 0
self.LFlags = 0
self.IsDisplaySpecified = False
+ self.UpdateVarType = False
def numericFlagsField(self, i:int=None):
if i is None:
@@ -11432,17 +11442,17 @@ class VfrSyntaxParser ( Parser ):
self._la = 0 # Token type
try:
self.enterOuterAlt(localctx, 1)
- self.state = 1703
+ self.state = 1706
self.numericFlagsField()
- self.state = 1708
+ self.state = 1711
self._errHandler.sync(self)
_la = self._input.LA(1)
while _la==VfrSyntaxParser.BitWiseOr:
- self.state = 1704
+ self.state = 1707
self.match(VfrSyntaxParser.BitWiseOr)
- self.state = 1705
+ self.state = 1708
self.numericFlagsField()
- self.state = 1710
+ self.state = 1713
self._errHandler.sync(self)
_la = self._input.LA(1)
@@ -11510,52 +11520,52 @@ class VfrSyntaxParser ( Parser ):
localctx = VfrSyntaxParser.NumericFlagsFieldContext(self, self._ctx, self.state)
self.enterRule(localctx, 204, self.RULE_numericFlagsField)
try:
- self.state = 1720
+ self.state = 1723
self._errHandler.sync(self)
token = self._input.LA(1)
if token in [VfrSyntaxParser.Number]:
self.enterOuterAlt(localctx, 1)
- self.state = 1711
+ self.state = 1714
localctx.N = self.match(VfrSyntaxParser.Number)
pass
elif token in [VfrSyntaxParser.NumericSizeOne]:
self.enterOuterAlt(localctx, 2)
- self.state = 1712
+ self.state = 1715
self.match(VfrSyntaxParser.NumericSizeOne)
pass
elif token in [VfrSyntaxParser.NumericSizeTwo]:
self.enterOuterAlt(localctx, 3)
- self.state = 1713
+ self.state = 1716
self.match(VfrSyntaxParser.NumericSizeTwo)
pass
elif token in [VfrSyntaxParser.NumericSizeFour]:
self.enterOuterAlt(localctx, 4)
- self.state = 1714
+ self.state = 1717
self.match(VfrSyntaxParser.NumericSizeFour)
pass
elif token in [VfrSyntaxParser.NumericSizeEight]:
self.enterOuterAlt(localctx, 5)
- self.state = 1715
+ self.state = 1718
self.match(VfrSyntaxParser.NumericSizeEight)
pass
elif token in [VfrSyntaxParser.DisPlayIntDec]:
self.enterOuterAlt(localctx, 6)
- self.state = 1716
+ self.state = 1719
self.match(VfrSyntaxParser.DisPlayIntDec)
pass
elif token in [VfrSyntaxParser.DisPlayUIntDec]:
self.enterOuterAlt(localctx, 7)
- self.state = 1717
+ self.state = 1720
self.match(VfrSyntaxParser.DisPlayUIntDec)
pass
elif token in [VfrSyntaxParser.DisPlayUIntHex]:
self.enterOuterAlt(localctx, 8)
- self.state = 1718
+ self.state = 1721
self.match(VfrSyntaxParser.DisPlayUIntHex)
pass
elif token in [VfrSyntaxParser.InteractiveFlag, VfrSyntaxParser.NVAccessFlag, VfrSyntaxParser.ResetRequiredFlag, VfrSyntaxParser.ReconnectRequiredFlag, VfrSyntaxParser.LateCheckFlag, VfrSyntaxParser.ReadOnlyFlag, VfrSyntaxParser.OptionOnlyFlag, VfrSyntaxParser.RestStyleFlag]:
self.enterOuterAlt(localctx, 9)
- self.state = 1719
+ self.state = 1722
self.questionheaderFlagsField()
pass
else:
@@ -11575,8 +11585,8 @@ class VfrSyntaxParser ( Parser ):
def __init__(self, parser, parent:ParserRuleContext=None, invokingState:int=-1):
super().__init__(parent, invokingState)
self.parser = parser
- self.Node = VfrTreeNode(EFI_IFR_ONE_OF_OP)
- self.OpObj = CIfrOneOf()
+ self.Node = IfrTreeNode(EFI_IFR_ONE_OF_OP)
+ self.GuidNode = IfrTreeNode(EFI_IFR_GUID_OP)
self.QType = EFI_QUESION_TYPE.QUESTION_NORMAL
self.F = None # Token
@@ -11637,41 +11647,41 @@ class VfrSyntaxParser ( Parser ):
self._la = 0 # Token type
try:
self.enterOuterAlt(localctx, 1)
- self.state = 1722
- self.match(VfrSyntaxParser.OneOf)
- self.state = 1723
- self.vfrQuestionBaseInfo(localctx.OpObj, localctx.QType)
- self.state = 1724
- self.vfrStatementHeader(localctx.OpObj)
self.state = 1725
+ self.match(VfrSyntaxParser.OneOf)
+ self.state = 1726
+ self.vfrQuestionBaseInfo(localctx.Node, localctx.QType)
+ self.state = 1727
+ self.vfrStatementHeader(localctx.Node)
+ self.state = 1728
self.match(VfrSyntaxParser.Comma)
- self.state = 1731
+ self.state = 1734
self._errHandler.sync(self)
_la = self._input.LA(1)
if _la==VfrSyntaxParser.FLAGS:
- self.state = 1726
+ self.state = 1729
localctx.F = self.match(VfrSyntaxParser.FLAGS)
- self.state = 1727
+ self.state = 1730
self.match(VfrSyntaxParser.T__5)
- self.state = 1728
+ self.state = 1731
self.vfrOneofFlagsField()
- self.state = 1729
+ self.state = 1732
self.match(VfrSyntaxParser.Comma)
- self.state = 1734
+ self.state = 1737
self._errHandler.sync(self)
_la = self._input.LA(1)
if _la==VfrSyntaxParser.Minimum:
- self.state = 1733
- self.vfrSetMinMaxStep(localctx.OpObj)
+ self.state = 1736
+ self.vfrSetMinMaxStep(localctx.Node)
- self.state = 1736
+ self.state = 1739
self.vfrStatementQuestionOptionList(localctx.Node)
- self.state = 1737
+ self.state = 1740
self.match(VfrSyntaxParser.EndOneOf)
- self.state = 1738
+ self.state = 1741
self.match(VfrSyntaxParser.Semicolon)
except RecognitionException as re:
localctx.exception = re
@@ -11689,6 +11699,7 @@ class VfrSyntaxParser ( Parser ):
self.parser = parser
self.HFlags = 0
self.LFlags = 0
+ self.UpdateVarType = False
def numericFlagsField(self, i:int=None):
if i is None:
@@ -11722,17 +11733,17 @@ class VfrSyntaxParser ( Parser ):
self._la = 0 # Token type
try:
self.enterOuterAlt(localctx, 1)
- self.state = 1740
+ self.state = 1743
self.numericFlagsField()
- self.state = 1745
+ self.state = 1748
self._errHandler.sync(self)
_la = self._input.LA(1)
while _la==VfrSyntaxParser.BitWiseOr:
- self.state = 1741
+ self.state = 1744
self.match(VfrSyntaxParser.BitWiseOr)
- self.state = 1742
+ self.state = 1745
self.numericFlagsField()
- self.state = 1747
+ self.state = 1750
self._errHandler.sync(self)
_la = self._input.LA(1)
@@ -11777,17 +11788,17 @@ class VfrSyntaxParser ( Parser ):
localctx = VfrSyntaxParser.VfrStatementStringTypeContext(self, self._ctx, self.state)
self.enterRule(localctx, 210, self.RULE_vfrStatementStringType)
try:
- self.state = 1750
+ self.state = 1753
self._errHandler.sync(self)
token = self._input.LA(1)
if token in [VfrSyntaxParser.String]:
self.enterOuterAlt(localctx, 1)
- self.state = 1748
+ self.state = 1751
self.vfrStatementString()
pass
elif token in [VfrSyntaxParser.Password]:
self.enterOuterAlt(localctx, 2)
- self.state = 1749
+ self.state = 1752
self.vfrStatementPassword()
pass
else:
@@ -11807,8 +11818,7 @@ class VfrSyntaxParser ( Parser ):
def __init__(self, parser, parent:ParserRuleContext=None, invokingState:int=-1):
super().__init__(parent, invokingState)
self.parser = parser
- self.Node = VfrTreeNode(EFI_IFR_STRING_OP)
- self.OpObj = CIfrString()
+ self.Node = IfrTreeNode(EFI_IFR_STRING_OP)
self.QType = EFI_QUESION_TYPE.QUESTION_NORMAL
self.F = None # Token
self.Min = None # Token
@@ -11878,61 +11888,61 @@ class VfrSyntaxParser ( Parser ):
self._la = 0 # Token type
try:
self.enterOuterAlt(localctx, 1)
- self.state = 1752
+ self.state = 1755
self.match(VfrSyntaxParser.String)
- self.state = 1753
- self.vfrQuestionHeader(localctx.OpObj, localctx.QType)
- self.state = 1754
+ self.state = 1756
+ self.vfrQuestionHeader(localctx.Node, localctx.QType)
+ self.state = 1757
self.match(VfrSyntaxParser.Comma)
- self.state = 1760
+ self.state = 1763
self._errHandler.sync(self)
_la = self._input.LA(1)
if _la==VfrSyntaxParser.FLAGS:
- self.state = 1755
+ self.state = 1758
localctx.F = self.match(VfrSyntaxParser.FLAGS)
- self.state = 1756
+ self.state = 1759
self.match(VfrSyntaxParser.T__5)
- self.state = 1757
+ self.state = 1760
self.vfrStringFlagsField()
- self.state = 1758
+ self.state = 1761
self.match(VfrSyntaxParser.Comma)
- self.state = 1766
+ self.state = 1769
self._errHandler.sync(self)
_la = self._input.LA(1)
if _la==VfrSyntaxParser.Key:
- self.state = 1762
+ self.state = 1765
self.match(VfrSyntaxParser.Key)
- self.state = 1763
+ self.state = 1766
self.match(VfrSyntaxParser.T__5)
- self.state = 1764
+ self.state = 1767
self.match(VfrSyntaxParser.Number)
- self.state = 1765
+ self.state = 1768
self.match(VfrSyntaxParser.Comma)
- self.state = 1768
+ self.state = 1771
localctx.Min = self.match(VfrSyntaxParser.MinSize)
- self.state = 1769
+ self.state = 1772
self.match(VfrSyntaxParser.T__5)
- self.state = 1770
+ self.state = 1773
self.match(VfrSyntaxParser.Number)
- self.state = 1771
+ self.state = 1774
self.match(VfrSyntaxParser.Comma)
- self.state = 1772
+ self.state = 1775
localctx.Max = self.match(VfrSyntaxParser.MaxSize)
- self.state = 1773
+ self.state = 1776
self.match(VfrSyntaxParser.T__5)
- self.state = 1774
+ self.state = 1777
self.match(VfrSyntaxParser.Number)
- self.state = 1775
+ self.state = 1778
self.match(VfrSyntaxParser.Comma)
- self.state = 1776
+ self.state = 1779
self.vfrStatementQuestionOptionList(localctx.Node)
- self.state = 1777
+ self.state = 1780
self.match(VfrSyntaxParser.EndString)
- self.state = 1778
+ self.state = 1781
self.match(VfrSyntaxParser.Semicolon)
except RecognitionException as re:
localctx.exception = re
@@ -11983,17 +11993,17 @@ class VfrSyntaxParser ( Parser ):
self._la = 0 # Token type
try:
self.enterOuterAlt(localctx, 1)
- self.state = 1780
+ self.state = 1783
self.stringFlagsField()
- self.state = 1785
+ self.state = 1788
self._errHandler.sync(self)
_la = self._input.LA(1)
while _la==VfrSyntaxParser.BitWiseOr:
- self.state = 1781
+ self.state = 1784
self.match(VfrSyntaxParser.BitWiseOr)
- self.state = 1782
+ self.state = 1785
self.stringFlagsField()
- self.state = 1787
+ self.state = 1790
self._errHandler.sync(self)
_la = self._input.LA(1)
@@ -12039,22 +12049,22 @@ class VfrSyntaxParser ( Parser ):
localctx = VfrSyntaxParser.StringFlagsFieldContext(self, self._ctx, self.state)
self.enterRule(localctx, 216, self.RULE_stringFlagsField)
try:
- self.state = 1791
+ self.state = 1794
self._errHandler.sync(self)
token = self._input.LA(1)
if token in [VfrSyntaxParser.Number]:
self.enterOuterAlt(localctx, 1)
- self.state = 1788
+ self.state = 1791
localctx.N = self.match(VfrSyntaxParser.Number)
pass
elif token in [VfrSyntaxParser.T__8]:
self.enterOuterAlt(localctx, 2)
- self.state = 1789
+ self.state = 1792
self.match(VfrSyntaxParser.T__8)
pass
elif token in [VfrSyntaxParser.InteractiveFlag, VfrSyntaxParser.NVAccessFlag, VfrSyntaxParser.ResetRequiredFlag, VfrSyntaxParser.ReconnectRequiredFlag, VfrSyntaxParser.LateCheckFlag, VfrSyntaxParser.ReadOnlyFlag, VfrSyntaxParser.OptionOnlyFlag, VfrSyntaxParser.RestStyleFlag]:
self.enterOuterAlt(localctx, 3)
- self.state = 1790
+ self.state = 1793
self.questionheaderFlagsField()
pass
else:
@@ -12074,8 +12084,7 @@ class VfrSyntaxParser ( Parser ):
def __init__(self, parser, parent:ParserRuleContext=None, invokingState:int=-1):
super().__init__(parent, invokingState)
self.parser = parser
- self.Node = VfrTreeNode(EFI_IFR_PASSWORD_OP)
- self.OpObj = CIfrPassword()
+ self.Node = IfrTreeNode(EFI_IFR_PASSWORD_OP)
self.QType = EFI_QUESION_TYPE.QUESTION_NORMAL
self.F = None # Token
self.Min = None # Token
@@ -12148,75 +12157,75 @@ class VfrSyntaxParser ( Parser ):
self._la = 0 # Token type
try:
self.enterOuterAlt(localctx, 1)
- self.state = 1793
+ self.state = 1796
self.match(VfrSyntaxParser.Password)
- self.state = 1794
- self.vfrQuestionHeader(localctx.OpObj, localctx.QType)
- self.state = 1795
+ self.state = 1797
+ self.vfrQuestionHeader(localctx.Node, localctx.QType)
+ self.state = 1798
self.match(VfrSyntaxParser.Comma)
- self.state = 1801
+ self.state = 1804
self._errHandler.sync(self)
_la = self._input.LA(1)
if _la==VfrSyntaxParser.FLAGS:
- self.state = 1796
+ self.state = 1799
localctx.F = self.match(VfrSyntaxParser.FLAGS)
- self.state = 1797
+ self.state = 1800
self.match(VfrSyntaxParser.T__5)
- self.state = 1798
+ self.state = 1801
self.vfrPasswordFlagsField()
- self.state = 1799
+ self.state = 1802
self.match(VfrSyntaxParser.Comma)
- self.state = 1807
+ self.state = 1810
self._errHandler.sync(self)
_la = self._input.LA(1)
if _la==VfrSyntaxParser.Key:
- self.state = 1803
+ self.state = 1806
self.match(VfrSyntaxParser.Key)
- self.state = 1804
+ self.state = 1807
self.match(VfrSyntaxParser.T__5)
- self.state = 1805
+ self.state = 1808
self.match(VfrSyntaxParser.Number)
- self.state = 1806
+ self.state = 1809
self.match(VfrSyntaxParser.Comma)
- self.state = 1809
+ self.state = 1812
localctx.Min = self.match(VfrSyntaxParser.MinSize)
- self.state = 1810
+ self.state = 1813
self.match(VfrSyntaxParser.T__5)
- self.state = 1811
+ self.state = 1814
self.match(VfrSyntaxParser.Number)
- self.state = 1812
+ self.state = 1815
self.match(VfrSyntaxParser.Comma)
- self.state = 1813
+ self.state = 1816
localctx.Max = self.match(VfrSyntaxParser.MaxSize)
- self.state = 1814
+ self.state = 1817
self.match(VfrSyntaxParser.T__5)
- self.state = 1815
+ self.state = 1818
self.match(VfrSyntaxParser.Number)
- self.state = 1816
+ self.state = 1819
self.match(VfrSyntaxParser.Comma)
- self.state = 1821
+ self.state = 1824
self._errHandler.sync(self)
_la = self._input.LA(1)
if _la==VfrSyntaxParser.Encoding:
- self.state = 1817
+ self.state = 1820
self.match(VfrSyntaxParser.Encoding)
- self.state = 1818
+ self.state = 1821
self.match(VfrSyntaxParser.T__5)
- self.state = 1819
+ self.state = 1822
self.match(VfrSyntaxParser.Number)
- self.state = 1820
+ self.state = 1823
self.match(VfrSyntaxParser.Comma)
- self.state = 1823
+ self.state = 1826
self.vfrStatementQuestionOptionList(localctx.Node)
- self.state = 1824
+ self.state = 1827
self.match(VfrSyntaxParser.EndPassword)
- self.state = 1825
+ self.state = 1828
self.match(VfrSyntaxParser.Semicolon)
except RecognitionException as re:
localctx.exception = re
@@ -12266,17 +12275,17 @@ class VfrSyntaxParser ( Parser ):
self._la = 0 # Token type
try:
self.enterOuterAlt(localctx, 1)
- self.state = 1827
+ self.state = 1830
self.passwordFlagsField()
- self.state = 1832
+ self.state = 1835
self._errHandler.sync(self)
_la = self._input.LA(1)
while _la==VfrSyntaxParser.BitWiseOr:
- self.state = 1828
+ self.state = 1831
self.match(VfrSyntaxParser.BitWiseOr)
- self.state = 1829
+ self.state = 1832
self.passwordFlagsField()
- self.state = 1834
+ self.state = 1837
self._errHandler.sync(self)
_la = self._input.LA(1)
@@ -12320,17 +12329,17 @@ class VfrSyntaxParser ( Parser ):
localctx = VfrSyntaxParser.PasswordFlagsFieldContext(self, self._ctx, self.state)
self.enterRule(localctx, 222, self.RULE_passwordFlagsField)
try:
- self.state = 1837
+ self.state = 1840
self._errHandler.sync(self)
token = self._input.LA(1)
if token in [VfrSyntaxParser.Number]:
self.enterOuterAlt(localctx, 1)
- self.state = 1835
+ self.state = 1838
self.match(VfrSyntaxParser.Number)
pass
elif token in [VfrSyntaxParser.InteractiveFlag, VfrSyntaxParser.NVAccessFlag, VfrSyntaxParser.ResetRequiredFlag, VfrSyntaxParser.ReconnectRequiredFlag, VfrSyntaxParser.LateCheckFlag, VfrSyntaxParser.ReadOnlyFlag, VfrSyntaxParser.OptionOnlyFlag, VfrSyntaxParser.RestStyleFlag]:
self.enterOuterAlt(localctx, 2)
- self.state = 1836
+ self.state = 1839
self.questionheaderFlagsField()
pass
else:
@@ -12350,8 +12359,7 @@ class VfrSyntaxParser ( Parser ):
def __init__(self, parser, parent:ParserRuleContext=None, invokingState:int=-1):
super().__init__(parent, invokingState)
self.parser = parser
- self.Node = VfrTreeNode(EFI_IFR_ORDERED_LIST_OP)
- self.OpObj = CIfrOrderedList()
+ self.Node = IfrTreeNode(EFI_IFR_ORDERED_LIST_OP)
self.QType = EFI_QUESION_TYPE.QUESTION_NORMAL
self.M = None # Token
self.F = None # Token
@@ -12411,45 +12419,45 @@ class VfrSyntaxParser ( Parser ):
self._la = 0 # Token type
try:
self.enterOuterAlt(localctx, 1)
- self.state = 1839
+ self.state = 1842
self.match(VfrSyntaxParser.OrderedList)
- self.state = 1840
- self.vfrQuestionHeader(localctx.OpObj, localctx.QType)
- self.state = 1841
+ self.state = 1843
+ self.vfrQuestionHeader(localctx.Node, localctx.QType)
+ self.state = 1844
self.match(VfrSyntaxParser.Comma)
- self.state = 1846
+ self.state = 1849
self._errHandler.sync(self)
_la = self._input.LA(1)
if _la==VfrSyntaxParser.MaxContainers:
- self.state = 1842
+ self.state = 1845
localctx.M = self.match(VfrSyntaxParser.MaxContainers)
- self.state = 1843
+ self.state = 1846
self.match(VfrSyntaxParser.T__5)
- self.state = 1844
+ self.state = 1847
self.match(VfrSyntaxParser.Number)
- self.state = 1845
+ self.state = 1848
self.match(VfrSyntaxParser.Comma)
- self.state = 1853
+ self.state = 1856
self._errHandler.sync(self)
_la = self._input.LA(1)
if _la==VfrSyntaxParser.FLAGS:
- self.state = 1848
+ self.state = 1851
localctx.F = self.match(VfrSyntaxParser.FLAGS)
- self.state = 1849
+ self.state = 1852
self.match(VfrSyntaxParser.T__5)
- self.state = 1850
+ self.state = 1853
self.vfrOrderedListFlags()
- self.state = 1851
+ self.state = 1854
self.match(VfrSyntaxParser.Comma)
- self.state = 1855
+ self.state = 1858
self.vfrStatementQuestionOptionList(localctx.Node)
- self.state = 1856
+ self.state = 1859
self.match(VfrSyntaxParser.EndList)
- self.state = 1857
+ self.state = 1860
self.match(VfrSyntaxParser.Semicolon)
except RecognitionException as re:
localctx.exception = re
@@ -12500,17 +12508,17 @@ class VfrSyntaxParser ( Parser ):
self._la = 0 # Token type
try:
self.enterOuterAlt(localctx, 1)
- self.state = 1859
+ self.state = 1862
self.orderedlistFlagsField()
- self.state = 1864
+ self.state = 1867
self._errHandler.sync(self)
_la = self._input.LA(1)
while _la==VfrSyntaxParser.BitWiseOr:
- self.state = 1860
+ self.state = 1863
self.match(VfrSyntaxParser.BitWiseOr)
- self.state = 1861
+ self.state = 1864
self.orderedlistFlagsField()
- self.state = 1866
+ self.state = 1869
self._errHandler.sync(self)
_la = self._input.LA(1)
@@ -12561,27 +12569,27 @@ class VfrSyntaxParser ( Parser ):
localctx = VfrSyntaxParser.OrderedlistFlagsFieldContext(self, self._ctx, self.state)
self.enterRule(localctx, 228, self.RULE_orderedlistFlagsField)
try:
- self.state = 1871
+ self.state = 1874
self._errHandler.sync(self)
token = self._input.LA(1)
if token in [VfrSyntaxParser.Number]:
self.enterOuterAlt(localctx, 1)
- self.state = 1867
+ self.state = 1870
self.match(VfrSyntaxParser.Number)
pass
elif token in [VfrSyntaxParser.UniQueFlag]:
self.enterOuterAlt(localctx, 2)
- self.state = 1868
+ self.state = 1871
self.match(VfrSyntaxParser.UniQueFlag)
pass
elif token in [VfrSyntaxParser.NoEmptyFlag]:
self.enterOuterAlt(localctx, 3)
- self.state = 1869
+ self.state = 1872
self.match(VfrSyntaxParser.NoEmptyFlag)
pass
elif token in [VfrSyntaxParser.InteractiveFlag, VfrSyntaxParser.NVAccessFlag, VfrSyntaxParser.ResetRequiredFlag, VfrSyntaxParser.ReconnectRequiredFlag, VfrSyntaxParser.LateCheckFlag, VfrSyntaxParser.ReadOnlyFlag, VfrSyntaxParser.OptionOnlyFlag, VfrSyntaxParser.RestStyleFlag]:
self.enterOuterAlt(localctx, 4)
- self.state = 1870
+ self.state = 1873
self.questionheaderFlagsField()
pass
else:
@@ -12601,10 +12609,9 @@ class VfrSyntaxParser ( Parser ):
def __init__(self, parser, parent:ParserRuleContext=None, invokingState:int=-1):
super().__init__(parent, invokingState)
self.parser = parser
- self.Node = VfrTreeNode(EFI_IFR_DATE_OP)
- self.OpObj = CIfrDate()
+ self.Node = IfrTreeNode(EFI_IFR_DATE_OP)
self.QType = EFI_QUESION_TYPE.QUESTION_DATE
- self.Val = EFI_IFR_TYPE_VALUE()
+ self.Val = EFI_HII_DATE()
self.F1 = None # Token
self.F2 = None # Token
@@ -12734,187 +12741,187 @@ class VfrSyntaxParser ( Parser ):
self._la = 0 # Token type
try:
self.enterOuterAlt(localctx, 1)
- self.state = 1873
+ self.state = 1876
self.match(VfrSyntaxParser.Date)
- self.state = 1964
+ self.state = 1967
self._errHandler.sync(self)
token = self._input.LA(1)
if token in [VfrSyntaxParser.Prompt, VfrSyntaxParser.Name, VfrSyntaxParser.VarId, VfrSyntaxParser.QuestionId]:
- self.state = 1874
- self.vfrQuestionHeader(localctx.OpObj, localctx.QType)
- self.state = 1875
+ self.state = 1877
+ self.vfrQuestionHeader(localctx.Node, localctx.QType)
+ self.state = 1878
self.match(VfrSyntaxParser.Comma)
- self.state = 1881
+ self.state = 1884
self._errHandler.sync(self)
_la = self._input.LA(1)
if _la==VfrSyntaxParser.FLAGS:
- self.state = 1876
+ self.state = 1879
localctx.F1 = self.match(VfrSyntaxParser.FLAGS)
- self.state = 1877
+ self.state = 1880
self.match(VfrSyntaxParser.T__5)
- self.state = 1878
+ self.state = 1881
self.vfrDateFlags()
- self.state = 1879
+ self.state = 1882
self.match(VfrSyntaxParser.Comma)
- self.state = 1883
+ self.state = 1886
self.vfrStatementQuestionOptionList(localctx.Node)
pass
elif token in [VfrSyntaxParser.Year]:
- self.state = 1885
- self.match(VfrSyntaxParser.Year)
- self.state = 1886
- self.match(VfrSyntaxParser.VarId)
- self.state = 1887
- self.match(VfrSyntaxParser.T__5)
self.state = 1888
- self.match(VfrSyntaxParser.StringIdentifier)
+ self.match(VfrSyntaxParser.Year)
self.state = 1889
- self.match(VfrSyntaxParser.Dot)
+ self.match(VfrSyntaxParser.VarId)
self.state = 1890
- self.match(VfrSyntaxParser.StringIdentifier)
+ self.match(VfrSyntaxParser.T__5)
self.state = 1891
- self.match(VfrSyntaxParser.Comma)
+ self.match(VfrSyntaxParser.StringIdentifier)
self.state = 1892
- self.match(VfrSyntaxParser.Prompt)
+ self.match(VfrSyntaxParser.Dot)
self.state = 1893
- self.match(VfrSyntaxParser.T__5)
+ self.match(VfrSyntaxParser.StringIdentifier)
self.state = 1894
- self.match(VfrSyntaxParser.StringToken)
+ self.match(VfrSyntaxParser.Comma)
self.state = 1895
- self.match(VfrSyntaxParser.OpenParen)
+ self.match(VfrSyntaxParser.Prompt)
self.state = 1896
- self.match(VfrSyntaxParser.Number)
+ self.match(VfrSyntaxParser.T__5)
self.state = 1897
- self.match(VfrSyntaxParser.CloseParen)
+ self.match(VfrSyntaxParser.StringToken)
self.state = 1898
- self.match(VfrSyntaxParser.Comma)
+ self.match(VfrSyntaxParser.OpenParen)
self.state = 1899
- self.match(VfrSyntaxParser.Help)
+ self.match(VfrSyntaxParser.Number)
self.state = 1900
- self.match(VfrSyntaxParser.T__5)
+ self.match(VfrSyntaxParser.CloseParen)
self.state = 1901
- self.match(VfrSyntaxParser.StringToken)
+ self.match(VfrSyntaxParser.Comma)
self.state = 1902
- self.match(VfrSyntaxParser.OpenParen)
+ self.match(VfrSyntaxParser.Help)
self.state = 1903
- self.match(VfrSyntaxParser.Number)
+ self.match(VfrSyntaxParser.T__5)
self.state = 1904
- self.match(VfrSyntaxParser.CloseParen)
+ self.match(VfrSyntaxParser.StringToken)
self.state = 1905
- self.match(VfrSyntaxParser.Comma)
+ self.match(VfrSyntaxParser.OpenParen)
self.state = 1906
- self.minMaxDateStepDefault(localctx.Val.date, 0)
+ self.match(VfrSyntaxParser.Number)
self.state = 1907
- self.match(VfrSyntaxParser.Month)
+ self.match(VfrSyntaxParser.CloseParen)
self.state = 1908
- self.match(VfrSyntaxParser.VarId)
+ self.match(VfrSyntaxParser.Comma)
self.state = 1909
- self.match(VfrSyntaxParser.T__5)
+ self.minMaxDateStepDefault(localctx.Node, localctx.Val, 0)
self.state = 1910
- self.match(VfrSyntaxParser.StringIdentifier)
+ self.match(VfrSyntaxParser.Month)
self.state = 1911
- self.match(VfrSyntaxParser.Dot)
+ self.match(VfrSyntaxParser.VarId)
self.state = 1912
- self.match(VfrSyntaxParser.StringIdentifier)
+ self.match(VfrSyntaxParser.T__5)
self.state = 1913
- self.match(VfrSyntaxParser.Comma)
+ self.match(VfrSyntaxParser.StringIdentifier)
self.state = 1914
- self.match(VfrSyntaxParser.Prompt)
+ self.match(VfrSyntaxParser.Dot)
self.state = 1915
- self.match(VfrSyntaxParser.T__5)
+ self.match(VfrSyntaxParser.StringIdentifier)
self.state = 1916
- self.match(VfrSyntaxParser.StringToken)
+ self.match(VfrSyntaxParser.Comma)
self.state = 1917
- self.match(VfrSyntaxParser.OpenParen)
+ self.match(VfrSyntaxParser.Prompt)
self.state = 1918
- self.match(VfrSyntaxParser.Number)
+ self.match(VfrSyntaxParser.T__5)
self.state = 1919
- self.match(VfrSyntaxParser.CloseParen)
+ self.match(VfrSyntaxParser.StringToken)
self.state = 1920
- self.match(VfrSyntaxParser.Comma)
+ self.match(VfrSyntaxParser.OpenParen)
self.state = 1921
- self.match(VfrSyntaxParser.Help)
+ self.match(VfrSyntaxParser.Number)
self.state = 1922
- self.match(VfrSyntaxParser.T__5)
+ self.match(VfrSyntaxParser.CloseParen)
self.state = 1923
- self.match(VfrSyntaxParser.StringToken)
+ self.match(VfrSyntaxParser.Comma)
self.state = 1924
- self.match(VfrSyntaxParser.OpenParen)
+ self.match(VfrSyntaxParser.Help)
self.state = 1925
- self.match(VfrSyntaxParser.Number)
+ self.match(VfrSyntaxParser.T__5)
self.state = 1926
- self.match(VfrSyntaxParser.CloseParen)
+ self.match(VfrSyntaxParser.StringToken)
self.state = 1927
- self.match(VfrSyntaxParser.Comma)
+ self.match(VfrSyntaxParser.OpenParen)
self.state = 1928
- self.minMaxDateStepDefault(localctx.Val.date, 1)
+ self.match(VfrSyntaxParser.Number)
self.state = 1929
- self.match(VfrSyntaxParser.Day)
+ self.match(VfrSyntaxParser.CloseParen)
self.state = 1930
- self.match(VfrSyntaxParser.VarId)
+ self.match(VfrSyntaxParser.Comma)
self.state = 1931
- self.match(VfrSyntaxParser.T__5)
+ self.minMaxDateStepDefault(localctx.Node, localctx.Val, 1)
self.state = 1932
- self.match(VfrSyntaxParser.StringIdentifier)
+ self.match(VfrSyntaxParser.Day)
self.state = 1933
- self.match(VfrSyntaxParser.Dot)
+ self.match(VfrSyntaxParser.VarId)
self.state = 1934
- self.match(VfrSyntaxParser.StringIdentifier)
+ self.match(VfrSyntaxParser.T__5)
self.state = 1935
- self.match(VfrSyntaxParser.Comma)
+ self.match(VfrSyntaxParser.StringIdentifier)
self.state = 1936
- self.match(VfrSyntaxParser.Prompt)
+ self.match(VfrSyntaxParser.Dot)
self.state = 1937
- self.match(VfrSyntaxParser.T__5)
+ self.match(VfrSyntaxParser.StringIdentifier)
self.state = 1938
- self.match(VfrSyntaxParser.StringToken)
+ self.match(VfrSyntaxParser.Comma)
self.state = 1939
- self.match(VfrSyntaxParser.OpenParen)
+ self.match(VfrSyntaxParser.Prompt)
self.state = 1940
- self.match(VfrSyntaxParser.Number)
+ self.match(VfrSyntaxParser.T__5)
self.state = 1941
- self.match(VfrSyntaxParser.CloseParen)
+ self.match(VfrSyntaxParser.StringToken)
self.state = 1942
- self.match(VfrSyntaxParser.Comma)
+ self.match(VfrSyntaxParser.OpenParen)
self.state = 1943
- self.match(VfrSyntaxParser.Help)
+ self.match(VfrSyntaxParser.Number)
self.state = 1944
- self.match(VfrSyntaxParser.T__5)
+ self.match(VfrSyntaxParser.CloseParen)
self.state = 1945
- self.match(VfrSyntaxParser.StringToken)
+ self.match(VfrSyntaxParser.Comma)
self.state = 1946
- self.match(VfrSyntaxParser.OpenParen)
+ self.match(VfrSyntaxParser.Help)
self.state = 1947
- self.match(VfrSyntaxParser.Number)
+ self.match(VfrSyntaxParser.T__5)
self.state = 1948
- self.match(VfrSyntaxParser.CloseParen)
+ self.match(VfrSyntaxParser.StringToken)
self.state = 1949
- self.match(VfrSyntaxParser.Comma)
+ self.match(VfrSyntaxParser.OpenParen)
self.state = 1950
- self.minMaxDateStepDefault(localctx.Val.date, 2)
- self.state = 1956
+ self.match(VfrSyntaxParser.Number)
+ self.state = 1951
+ self.match(VfrSyntaxParser.CloseParen)
+ self.state = 1952
+ self.match(VfrSyntaxParser.Comma)
+ self.state = 1953
+ self.minMaxDateStepDefault(localctx.Node, localctx.Val, 2)
+ self.state = 1959
self._errHandler.sync(self)
_la = self._input.LA(1)
if _la==VfrSyntaxParser.FLAGS:
- self.state = 1951
+ self.state = 1954
localctx.F2 = self.match(VfrSyntaxParser.FLAGS)
- self.state = 1952
+ self.state = 1955
self.match(VfrSyntaxParser.T__5)
- self.state = 1953
+ self.state = 1956
self.vfrDateFlags()
- self.state = 1954
+ self.state = 1957
self.match(VfrSyntaxParser.Comma)
- self.state = 1961
+ self.state = 1964
self._errHandler.sync(self)
_la = self._input.LA(1)
while _la==VfrSyntaxParser.InconsistentIf:
- self.state = 1958
+ self.state = 1961
self.vfrStatementInconsistentIf()
- self.state = 1963
+ self.state = 1966
self._errHandler.sync(self)
_la = self._input.LA(1)
@@ -12922,9 +12929,9 @@ class VfrSyntaxParser ( Parser ):
else:
raise NoViableAltException(self)
- self.state = 1966
+ self.state = 1969
self.match(VfrSyntaxParser.EndDate)
- self.state = 1967
+ self.state = 1970
self.match(VfrSyntaxParser.Semicolon)
except RecognitionException as re:
localctx.exception = re
@@ -12937,12 +12944,14 @@ class VfrSyntaxParser ( Parser ):
class MinMaxDateStepDefaultContext(ParserRuleContext):
- def __init__(self, parser, parent:ParserRuleContext=None, invokingState:int=-1, Date=None, KeyValue=None):
+ def __init__(self, parser, parent:ParserRuleContext=None, invokingState:int=-1, Node=None, Date=None, KeyValue=None):
super().__init__(parent, invokingState)
self.parser = parser
+ self.Node = None
self.Date = None
self.KeyValue = None
self.N = None # Token
+ self.Node = Node
self.Date = Date
self.KeyValue = KeyValue
@@ -12982,54 +12991,54 @@ class VfrSyntaxParser ( Parser ):
- def minMaxDateStepDefault(self, Date, KeyValue):
+ def minMaxDateStepDefault(self, Node, Date, KeyValue):
- localctx = VfrSyntaxParser.MinMaxDateStepDefaultContext(self, self._ctx, self.state, Date, KeyValue)
+ localctx = VfrSyntaxParser.MinMaxDateStepDefaultContext(self, self._ctx, self.state, Node, Date, KeyValue)
self.enterRule(localctx, 232, self.RULE_minMaxDateStepDefault)
self._la = 0 # Token type
try:
self.enterOuterAlt(localctx, 1)
- self.state = 1969
+ self.state = 1972
self.match(VfrSyntaxParser.Minimum)
- self.state = 1970
+ self.state = 1973
self.match(VfrSyntaxParser.T__5)
- self.state = 1971
+ self.state = 1974
self.match(VfrSyntaxParser.Number)
- self.state = 1972
+ self.state = 1975
self.match(VfrSyntaxParser.Comma)
- self.state = 1973
+ self.state = 1976
self.match(VfrSyntaxParser.Maximum)
- self.state = 1974
+ self.state = 1977
self.match(VfrSyntaxParser.T__5)
- self.state = 1975
+ self.state = 1978
self.match(VfrSyntaxParser.Number)
- self.state = 1976
+ self.state = 1979
self.match(VfrSyntaxParser.Comma)
- self.state = 1981
+ self.state = 1984
self._errHandler.sync(self)
_la = self._input.LA(1)
if _la==VfrSyntaxParser.Step:
- self.state = 1977
+ self.state = 1980
self.match(VfrSyntaxParser.Step)
- self.state = 1978
+ self.state = 1981
self.match(VfrSyntaxParser.T__5)
- self.state = 1979
+ self.state = 1982
self.match(VfrSyntaxParser.Number)
- self.state = 1980
+ self.state = 1983
self.match(VfrSyntaxParser.Comma)
- self.state = 1987
+ self.state = 1990
self._errHandler.sync(self)
_la = self._input.LA(1)
if _la==VfrSyntaxParser.Default:
- self.state = 1983
+ self.state = 1986
self.match(VfrSyntaxParser.Default)
- self.state = 1984
+ self.state = 1987
self.match(VfrSyntaxParser.T__5)
- self.state = 1985
+ self.state = 1988
localctx.N = self.match(VfrSyntaxParser.Number)
- self.state = 1986
+ self.state = 1989
self.match(VfrSyntaxParser.Comma)
@@ -13081,17 +13090,17 @@ class VfrSyntaxParser ( Parser ):
self._la = 0 # Token type
try:
self.enterOuterAlt(localctx, 1)
- self.state = 1989
+ self.state = 1992
self.dateFlagsField()
- self.state = 1994
+ self.state = 1997
self._errHandler.sync(self)
_la = self._input.LA(1)
while _la==VfrSyntaxParser.BitWiseOr:
- self.state = 1990
+ self.state = 1993
self.match(VfrSyntaxParser.BitWiseOr)
- self.state = 1991
+ self.state = 1994
self.dateFlagsField()
- self.state = 1996
+ self.state = 1999
self._errHandler.sync(self)
_la = self._input.LA(1)
@@ -13151,7 +13160,7 @@ class VfrSyntaxParser ( Parser ):
self._la = 0 # Token type
try:
self.enterOuterAlt(localctx, 1)
- self.state = 1997
+ self.state = 2000
_la = self._input.LA(1)
if not(((((_la - 181)) & ~0x3f) == 0 and ((1 << (_la - 181)) & ((1 << (VfrSyntaxParser.YearSupppressFlag - 181)) | (1 << (VfrSyntaxParser.MonthSuppressFlag - 181)) | (1 << (VfrSyntaxParser.DaySuppressFlag - 181)) | (1 << (VfrSyntaxParser.StorageNormalFlag - 181)) | (1 << (VfrSyntaxParser.StorageTimeFlag - 181)) | (1 << (VfrSyntaxParser.StorageWakeUpFlag - 181)))) != 0) or _la==VfrSyntaxParser.Number):
self._errHandler.recoverInline(self)
@@ -13172,10 +13181,9 @@ class VfrSyntaxParser ( Parser ):
def __init__(self, parser, parent:ParserRuleContext=None, invokingState:int=-1):
super().__init__(parent, invokingState)
self.parser = parser
- self.Node = VfrTreeNode(EFI_IFR_TIME_OP)
- self.OpObj = CIfrTime()
+ self.Node = IfrTreeNode(EFI_IFR_TIME_OP)
self.QType = EFI_QUESION_TYPE.QUESTION_TIME
- self.Val = EFI_IFR_TYPE_VALUE()
+ self.Val = EFI_HII_TIME()
self.F1 = None # Token
self.F2 = None # Token
@@ -13305,187 +13313,187 @@ class VfrSyntaxParser ( Parser ):
self._la = 0 # Token type
try:
self.enterOuterAlt(localctx, 1)
- self.state = 1999
+ self.state = 2002
self.match(VfrSyntaxParser.Time)
- self.state = 2090
+ self.state = 2093
self._errHandler.sync(self)
token = self._input.LA(1)
if token in [VfrSyntaxParser.Prompt, VfrSyntaxParser.Name, VfrSyntaxParser.VarId, VfrSyntaxParser.QuestionId]:
- self.state = 2000
- self.vfrQuestionHeader(localctx.OpObj, localctx.QType)
- self.state = 2001
+ self.state = 2003
+ self.vfrQuestionHeader(localctx.Node, localctx.QType)
+ self.state = 2004
self.match(VfrSyntaxParser.Comma)
- self.state = 2007
+ self.state = 2010
self._errHandler.sync(self)
_la = self._input.LA(1)
if _la==VfrSyntaxParser.FLAGS:
- self.state = 2002
+ self.state = 2005
localctx.F1 = self.match(VfrSyntaxParser.FLAGS)
- self.state = 2003
+ self.state = 2006
self.match(VfrSyntaxParser.T__5)
- self.state = 2004
+ self.state = 2007
self.vfrTimeFlags()
- self.state = 2005
+ self.state = 2008
self.match(VfrSyntaxParser.Comma)
- self.state = 2009
+ self.state = 2012
self.vfrStatementQuestionOptionList(localctx.Node)
pass
elif token in [VfrSyntaxParser.Hour]:
- self.state = 2011
- self.match(VfrSyntaxParser.Hour)
- self.state = 2012
- self.match(VfrSyntaxParser.VarId)
- self.state = 2013
- self.match(VfrSyntaxParser.T__5)
self.state = 2014
- self.match(VfrSyntaxParser.StringIdentifier)
+ self.match(VfrSyntaxParser.Hour)
self.state = 2015
- self.match(VfrSyntaxParser.Dot)
+ self.match(VfrSyntaxParser.VarId)
self.state = 2016
- self.match(VfrSyntaxParser.StringIdentifier)
+ self.match(VfrSyntaxParser.T__5)
self.state = 2017
- self.match(VfrSyntaxParser.Comma)
+ self.match(VfrSyntaxParser.StringIdentifier)
self.state = 2018
- self.match(VfrSyntaxParser.Prompt)
+ self.match(VfrSyntaxParser.Dot)
self.state = 2019
- self.match(VfrSyntaxParser.T__5)
+ self.match(VfrSyntaxParser.StringIdentifier)
self.state = 2020
- self.match(VfrSyntaxParser.StringToken)
+ self.match(VfrSyntaxParser.Comma)
self.state = 2021
- self.match(VfrSyntaxParser.OpenParen)
+ self.match(VfrSyntaxParser.Prompt)
self.state = 2022
- self.match(VfrSyntaxParser.Number)
+ self.match(VfrSyntaxParser.T__5)
self.state = 2023
- self.match(VfrSyntaxParser.CloseParen)
+ self.match(VfrSyntaxParser.StringToken)
self.state = 2024
- self.match(VfrSyntaxParser.Comma)
+ self.match(VfrSyntaxParser.OpenParen)
self.state = 2025
- self.match(VfrSyntaxParser.Help)
+ self.match(VfrSyntaxParser.Number)
self.state = 2026
- self.match(VfrSyntaxParser.T__5)
+ self.match(VfrSyntaxParser.CloseParen)
self.state = 2027
- self.match(VfrSyntaxParser.StringToken)
+ self.match(VfrSyntaxParser.Comma)
self.state = 2028
- self.match(VfrSyntaxParser.OpenParen)
+ self.match(VfrSyntaxParser.Help)
self.state = 2029
- self.match(VfrSyntaxParser.Number)
+ self.match(VfrSyntaxParser.T__5)
self.state = 2030
- self.match(VfrSyntaxParser.CloseParen)
+ self.match(VfrSyntaxParser.StringToken)
self.state = 2031
- self.match(VfrSyntaxParser.Comma)
+ self.match(VfrSyntaxParser.OpenParen)
self.state = 2032
- self.minMaxTimeStepDefault(localctx.Val.time, 0)
+ self.match(VfrSyntaxParser.Number)
self.state = 2033
- self.match(VfrSyntaxParser.Minute)
+ self.match(VfrSyntaxParser.CloseParen)
self.state = 2034
- self.match(VfrSyntaxParser.VarId)
+ self.match(VfrSyntaxParser.Comma)
self.state = 2035
- self.match(VfrSyntaxParser.T__5)
+ self.minMaxTimeStepDefault(localctx.Node, localctx.Val, 0)
self.state = 2036
- self.match(VfrSyntaxParser.StringIdentifier)
+ self.match(VfrSyntaxParser.Minute)
self.state = 2037
- self.match(VfrSyntaxParser.Dot)
+ self.match(VfrSyntaxParser.VarId)
self.state = 2038
- self.match(VfrSyntaxParser.StringIdentifier)
+ self.match(VfrSyntaxParser.T__5)
self.state = 2039
- self.match(VfrSyntaxParser.Comma)
+ self.match(VfrSyntaxParser.StringIdentifier)
self.state = 2040
- self.match(VfrSyntaxParser.Prompt)
+ self.match(VfrSyntaxParser.Dot)
self.state = 2041
- self.match(VfrSyntaxParser.T__5)
+ self.match(VfrSyntaxParser.StringIdentifier)
self.state = 2042
- self.match(VfrSyntaxParser.StringToken)
+ self.match(VfrSyntaxParser.Comma)
self.state = 2043
- self.match(VfrSyntaxParser.OpenParen)
+ self.match(VfrSyntaxParser.Prompt)
self.state = 2044
- self.match(VfrSyntaxParser.Number)
+ self.match(VfrSyntaxParser.T__5)
self.state = 2045
- self.match(VfrSyntaxParser.CloseParen)
+ self.match(VfrSyntaxParser.StringToken)
self.state = 2046
- self.match(VfrSyntaxParser.Comma)
+ self.match(VfrSyntaxParser.OpenParen)
self.state = 2047
- self.match(VfrSyntaxParser.Help)
+ self.match(VfrSyntaxParser.Number)
self.state = 2048
- self.match(VfrSyntaxParser.T__5)
+ self.match(VfrSyntaxParser.CloseParen)
self.state = 2049
- self.match(VfrSyntaxParser.StringToken)
+ self.match(VfrSyntaxParser.Comma)
self.state = 2050
- self.match(VfrSyntaxParser.OpenParen)
+ self.match(VfrSyntaxParser.Help)
self.state = 2051
- self.match(VfrSyntaxParser.Number)
+ self.match(VfrSyntaxParser.T__5)
self.state = 2052
- self.match(VfrSyntaxParser.CloseParen)
+ self.match(VfrSyntaxParser.StringToken)
self.state = 2053
- self.match(VfrSyntaxParser.Comma)
+ self.match(VfrSyntaxParser.OpenParen)
self.state = 2054
- self.minMaxTimeStepDefault(localctx.Val.time, 1)
+ self.match(VfrSyntaxParser.Number)
self.state = 2055
- self.match(VfrSyntaxParser.Second)
+ self.match(VfrSyntaxParser.CloseParen)
self.state = 2056
- self.match(VfrSyntaxParser.VarId)
+ self.match(VfrSyntaxParser.Comma)
self.state = 2057
- self.match(VfrSyntaxParser.T__5)
+ self.minMaxTimeStepDefault(localctx.Node, localctx.Val, 1)
self.state = 2058
- self.match(VfrSyntaxParser.StringIdentifier)
+ self.match(VfrSyntaxParser.Second)
self.state = 2059
- self.match(VfrSyntaxParser.Dot)
+ self.match(VfrSyntaxParser.VarId)
self.state = 2060
- self.match(VfrSyntaxParser.StringIdentifier)
+ self.match(VfrSyntaxParser.T__5)
self.state = 2061
- self.match(VfrSyntaxParser.Comma)
+ self.match(VfrSyntaxParser.StringIdentifier)
self.state = 2062
- self.match(VfrSyntaxParser.Prompt)
+ self.match(VfrSyntaxParser.Dot)
self.state = 2063
- self.match(VfrSyntaxParser.T__5)
+ self.match(VfrSyntaxParser.StringIdentifier)
self.state = 2064
- self.match(VfrSyntaxParser.StringToken)
+ self.match(VfrSyntaxParser.Comma)
self.state = 2065
- self.match(VfrSyntaxParser.OpenParen)
+ self.match(VfrSyntaxParser.Prompt)
self.state = 2066
- self.match(VfrSyntaxParser.Number)
+ self.match(VfrSyntaxParser.T__5)
self.state = 2067
- self.match(VfrSyntaxParser.CloseParen)
+ self.match(VfrSyntaxParser.StringToken)
self.state = 2068
- self.match(VfrSyntaxParser.Comma)
+ self.match(VfrSyntaxParser.OpenParen)
self.state = 2069
- self.match(VfrSyntaxParser.Help)
+ self.match(VfrSyntaxParser.Number)
self.state = 2070
- self.match(VfrSyntaxParser.T__5)
+ self.match(VfrSyntaxParser.CloseParen)
self.state = 2071
- self.match(VfrSyntaxParser.StringToken)
+ self.match(VfrSyntaxParser.Comma)
self.state = 2072
- self.match(VfrSyntaxParser.OpenParen)
+ self.match(VfrSyntaxParser.Help)
self.state = 2073
- self.match(VfrSyntaxParser.Number)
+ self.match(VfrSyntaxParser.T__5)
self.state = 2074
- self.match(VfrSyntaxParser.CloseParen)
+ self.match(VfrSyntaxParser.StringToken)
self.state = 2075
- self.match(VfrSyntaxParser.Comma)
+ self.match(VfrSyntaxParser.OpenParen)
self.state = 2076
- self.minMaxTimeStepDefault(localctx.Val.time, 2)
- self.state = 2082
+ self.match(VfrSyntaxParser.Number)
+ self.state = 2077
+ self.match(VfrSyntaxParser.CloseParen)
+ self.state = 2078
+ self.match(VfrSyntaxParser.Comma)
+ self.state = 2079
+ self.minMaxTimeStepDefault(localctx.Node, localctx.Val, 2)
+ self.state = 2085
self._errHandler.sync(self)
_la = self._input.LA(1)
if _la==VfrSyntaxParser.FLAGS:
- self.state = 2077
+ self.state = 2080
localctx.F2 = self.match(VfrSyntaxParser.FLAGS)
- self.state = 2078
+ self.state = 2081
self.match(VfrSyntaxParser.T__5)
- self.state = 2079
+ self.state = 2082
self.vfrTimeFlags()
- self.state = 2080
+ self.state = 2083
self.match(VfrSyntaxParser.Comma)
- self.state = 2087
+ self.state = 2090
self._errHandler.sync(self)
_la = self._input.LA(1)
while _la==VfrSyntaxParser.InconsistentIf:
- self.state = 2084
+ self.state = 2087
self.vfrStatementInconsistentIf()
- self.state = 2089
+ self.state = 2092
self._errHandler.sync(self)
_la = self._input.LA(1)
@@ -13493,9 +13501,9 @@ class VfrSyntaxParser ( Parser ):
else:
raise NoViableAltException(self)
- self.state = 2092
+ self.state = 2095
self.match(VfrSyntaxParser.EndTime)
- self.state = 2093
+ self.state = 2096
self.match(VfrSyntaxParser.Semicolon)
except RecognitionException as re:
localctx.exception = re
@@ -13508,12 +13516,14 @@ class VfrSyntaxParser ( Parser ):
class MinMaxTimeStepDefaultContext(ParserRuleContext):
- def __init__(self, parser, parent:ParserRuleContext=None, invokingState:int=-1, Time=None, KeyValue=None):
+ def __init__(self, parser, parent:ParserRuleContext=None, invokingState:int=-1, Node=None, Time=None, KeyValue=None):
super().__init__(parent, invokingState)
self.parser = parser
+ self.Node = None
self.Time = None
self.KeyValue = None
self.N = None # Token
+ self.Node = Node
self.Time = Time
self.KeyValue = KeyValue
@@ -13553,54 +13563,54 @@ class VfrSyntaxParser ( Parser ):
- def minMaxTimeStepDefault(self, Time, KeyValue):
+ def minMaxTimeStepDefault(self, Node, Time, KeyValue):
- localctx = VfrSyntaxParser.MinMaxTimeStepDefaultContext(self, self._ctx, self.state, Time, KeyValue)
+ localctx = VfrSyntaxParser.MinMaxTimeStepDefaultContext(self, self._ctx, self.state, Node, Time, KeyValue)
self.enterRule(localctx, 240, self.RULE_minMaxTimeStepDefault)
self._la = 0 # Token type
try:
self.enterOuterAlt(localctx, 1)
- self.state = 2095
+ self.state = 2098
self.match(VfrSyntaxParser.Minimum)
- self.state = 2096
+ self.state = 2099
self.match(VfrSyntaxParser.T__5)
- self.state = 2097
+ self.state = 2100
self.match(VfrSyntaxParser.Number)
- self.state = 2098
+ self.state = 2101
self.match(VfrSyntaxParser.Comma)
- self.state = 2099
+ self.state = 2102
self.match(VfrSyntaxParser.Maximum)
- self.state = 2100
+ self.state = 2103
self.match(VfrSyntaxParser.T__5)
- self.state = 2101
+ self.state = 2104
self.match(VfrSyntaxParser.Number)
- self.state = 2102
+ self.state = 2105
self.match(VfrSyntaxParser.Comma)
- self.state = 2107
+ self.state = 2110
self._errHandler.sync(self)
_la = self._input.LA(1)
if _la==VfrSyntaxParser.Step:
- self.state = 2103
+ self.state = 2106
self.match(VfrSyntaxParser.Step)
- self.state = 2104
+ self.state = 2107
self.match(VfrSyntaxParser.T__5)
- self.state = 2105
+ self.state = 2108
self.match(VfrSyntaxParser.Number)
- self.state = 2106
+ self.state = 2109
self.match(VfrSyntaxParser.Comma)
- self.state = 2113
+ self.state = 2116
self._errHandler.sync(self)
_la = self._input.LA(1)
if _la==VfrSyntaxParser.Default:
- self.state = 2109
+ self.state = 2112
self.match(VfrSyntaxParser.Default)
- self.state = 2110
+ self.state = 2113
self.match(VfrSyntaxParser.T__5)
- self.state = 2111
+ self.state = 2114
localctx.N = self.match(VfrSyntaxParser.Number)
- self.state = 2112
+ self.state = 2115
self.match(VfrSyntaxParser.Comma)
@@ -13652,17 +13662,17 @@ class VfrSyntaxParser ( Parser ):
self._la = 0 # Token type
try:
self.enterOuterAlt(localctx, 1)
- self.state = 2115
+ self.state = 2118
self.timeFlagsField()
- self.state = 2120
+ self.state = 2123
self._errHandler.sync(self)
_la = self._input.LA(1)
while _la==VfrSyntaxParser.BitWiseOr:
- self.state = 2116
+ self.state = 2119
self.match(VfrSyntaxParser.BitWiseOr)
- self.state = 2117
+ self.state = 2120
self.timeFlagsField()
- self.state = 2122
+ self.state = 2125
self._errHandler.sync(self)
_la = self._input.LA(1)
@@ -13722,7 +13732,7 @@ class VfrSyntaxParser ( Parser ):
self._la = 0 # Token type
try:
self.enterOuterAlt(localctx, 1)
- self.state = 2123
+ self.state = 2126
_la = self._input.LA(1)
if not(((((_la - 184)) & ~0x3f) == 0 and ((1 << (_la - 184)) & ((1 << (VfrSyntaxParser.HourSupppressFlag - 184)) | (1 << (VfrSyntaxParser.MinuteSuppressFlag - 184)) | (1 << (VfrSyntaxParser.SecondSuppressFlag - 184)) | (1 << (VfrSyntaxParser.StorageNormalFlag - 184)) | (1 << (VfrSyntaxParser.StorageTimeFlag - 184)) | (1 << (VfrSyntaxParser.StorageWakeUpFlag - 184)))) != 0) or _la==VfrSyntaxParser.Number):
self._errHandler.recoverInline(self)
@@ -13778,27 +13788,27 @@ class VfrSyntaxParser ( Parser ):
localctx = VfrSyntaxParser.VfrStatementConditionalContext(self, self._ctx, self.state)
self.enterRule(localctx, 246, self.RULE_vfrStatementConditional)
try:
- self.state = 2129
+ self.state = 2132
self._errHandler.sync(self)
token = self._input.LA(1)
if token in [VfrSyntaxParser.DisableIf]:
self.enterOuterAlt(localctx, 1)
- self.state = 2125
+ self.state = 2128
self.vfrStatementDisableIfStat()
pass
elif token in [VfrSyntaxParser.SuppressIf]:
self.enterOuterAlt(localctx, 2)
- self.state = 2126
+ self.state = 2129
self.vfrStatementSuppressIfStat()
pass
elif token in [VfrSyntaxParser.GrayOutIf]:
self.enterOuterAlt(localctx, 3)
- self.state = 2127
+ self.state = 2130
self.vfrStatementGrayOutIfStat()
pass
elif token in [VfrSyntaxParser.InconsistentIf]:
self.enterOuterAlt(localctx, 4)
- self.state = 2128
+ self.state = 2131
self.vfrStatementInconsistentIfStat()
pass
else:
@@ -13854,13 +13864,13 @@ class VfrSyntaxParser ( Parser ):
self.enterRule(localctx, 248, self.RULE_vfrStatementConditionalNew)
try:
self.enterOuterAlt(localctx, 1)
- self.state = 2131
+ self.state = 2134
self.vfrStatementDisableIfStat()
- self.state = 2132
+ self.state = 2135
self.vfrStatementSuppressIfStatNew()
- self.state = 2133
+ self.state = 2136
self.vfrStatementGrayOutIfStatNew()
- self.state = 2134
+ self.state = 2137
self.vfrStatementInconsistentIfStat()
except RecognitionException as re:
localctx.exception = re
@@ -13900,7 +13910,7 @@ class VfrSyntaxParser ( Parser ):
self.enterRule(localctx, 250, self.RULE_vfrStatementSuppressIfStat)
try:
self.enterOuterAlt(localctx, 1)
- self.state = 2136
+ self.state = 2139
self.vfrStatementSuppressIfStatNew()
except RecognitionException as re:
localctx.exception = re
@@ -13940,7 +13950,7 @@ class VfrSyntaxParser ( Parser ):
self.enterRule(localctx, 252, self.RULE_vfrStatementGrayOutIfStat)
try:
self.enterOuterAlt(localctx, 1)
- self.state = 2138
+ self.state = 2141
self.vfrStatementGrayOutIfStatNew()
except RecognitionException as re:
localctx.exception = re
@@ -13999,37 +14009,37 @@ class VfrSyntaxParser ( Parser ):
localctx = VfrSyntaxParser.VfrStatementStatListContext(self, self._ctx, self.state)
self.enterRule(localctx, 254, self.RULE_vfrStatementStatList)
try:
- self.state = 2146
+ self.state = 2149
self._errHandler.sync(self)
token = self._input.LA(1)
if token in [VfrSyntaxParser.Subtitle, VfrSyntaxParser.Text, VfrSyntaxParser.Goto, VfrSyntaxParser.ResetButton]:
self.enterOuterAlt(localctx, 1)
- self.state = 2140
+ self.state = 2143
self.vfrStatementStat()
pass
elif token in [VfrSyntaxParser.OneOf, VfrSyntaxParser.OrderedList, VfrSyntaxParser.Date, VfrSyntaxParser.Time, VfrSyntaxParser.CheckBox, VfrSyntaxParser.Numeric, VfrSyntaxParser.Password, VfrSyntaxParser.String, VfrSyntaxParser.Action]:
self.enterOuterAlt(localctx, 2)
- self.state = 2141
+ self.state = 2144
self.vfrStatementQuestions()
pass
elif token in [VfrSyntaxParser.GrayOutIf, VfrSyntaxParser.SuppressIf, VfrSyntaxParser.DisableIf, VfrSyntaxParser.InconsistentIf]:
self.enterOuterAlt(localctx, 3)
- self.state = 2142
+ self.state = 2145
self.vfrStatementConditional()
pass
elif token in [VfrSyntaxParser.Label]:
self.enterOuterAlt(localctx, 4)
- self.state = 2143
+ self.state = 2146
self.vfrStatementLabel()
pass
elif token in [VfrSyntaxParser.GuidOp]:
self.enterOuterAlt(localctx, 5)
- self.state = 2144
+ self.state = 2147
self.vfrStatementExtension()
pass
elif token in [VfrSyntaxParser.Inventory, VfrSyntaxParser.Hidden, VfrSyntaxParser.Restore, VfrSyntaxParser.Save]:
self.enterOuterAlt(localctx, 6)
- self.state = 2145
+ self.state = 2148
self.vfrStatementInvalid()
pass
else:
@@ -14083,27 +14093,27 @@ class VfrSyntaxParser ( Parser ):
localctx = VfrSyntaxParser.VfrStatementStatListOldContext(self, self._ctx, self.state)
self.enterRule(localctx, 256, self.RULE_vfrStatementStatListOld)
try:
- self.state = 2152
+ self.state = 2155
self._errHandler.sync(self)
token = self._input.LA(1)
if token in [VfrSyntaxParser.Subtitle, VfrSyntaxParser.Text, VfrSyntaxParser.Goto, VfrSyntaxParser.ResetButton]:
self.enterOuterAlt(localctx, 1)
- self.state = 2148
+ self.state = 2151
self.vfrStatementStat()
pass
elif token in [VfrSyntaxParser.OneOf, VfrSyntaxParser.OrderedList, VfrSyntaxParser.Date, VfrSyntaxParser.Time, VfrSyntaxParser.CheckBox, VfrSyntaxParser.Numeric, VfrSyntaxParser.Password, VfrSyntaxParser.String, VfrSyntaxParser.Action]:
self.enterOuterAlt(localctx, 2)
- self.state = 2149
+ self.state = 2152
self.vfrStatementQuestions()
pass
elif token in [VfrSyntaxParser.Label]:
self.enterOuterAlt(localctx, 3)
- self.state = 2150
+ self.state = 2153
self.vfrStatementLabel()
pass
elif token in [VfrSyntaxParser.Inventory, VfrSyntaxParser.Hidden, VfrSyntaxParser.Restore, VfrSyntaxParser.Save]:
self.enterOuterAlt(localctx, 4)
- self.state = 2151
+ self.state = 2154
self.vfrStatementInvalid()
pass
else:
@@ -14123,7 +14133,7 @@ class VfrSyntaxParser ( Parser ):
def __init__(self, parser, parent:ParserRuleContext=None, invokingState:int=-1):
super().__init__(parent, invokingState)
self.parser = parser
- self.Node = VfrTreeNode(EFI_IFR_DISABLE_IF_OP)
+ self.Node = IfrTreeNode(EFI_IFR_DISABLE_IF_OP)
def DisableIf(self):
return self.getToken(VfrSyntaxParser.DisableIf, 0)
@@ -14167,25 +14177,25 @@ class VfrSyntaxParser ( Parser ):
self._la = 0 # Token type
try:
self.enterOuterAlt(localctx, 1)
- self.state = 2154
+ self.state = 2157
self.match(VfrSyntaxParser.DisableIf)
- self.state = 2155
- self.vfrStatementExpression()
- self.state = 2156
+ self.state = 2158
+ self.vfrStatementExpression(localctx.Node)
+ self.state = 2159
self.match(VfrSyntaxParser.Semicolon)
- self.state = 2160
+ self.state = 2163
self._errHandler.sync(self)
_la = self._input.LA(1)
while ((((_la - 46)) & ~0x3f) == 0 and ((1 << (_la - 46)) & ((1 << (VfrSyntaxParser.OneOf - 46)) | (1 << (VfrSyntaxParser.OrderedList - 46)) | (1 << (VfrSyntaxParser.Subtitle - 46)) | (1 << (VfrSyntaxParser.Text - 46)) | (1 << (VfrSyntaxParser.Date - 46)) | (1 << (VfrSyntaxParser.Time - 46)) | (1 << (VfrSyntaxParser.GrayOutIf - 46)) | (1 << (VfrSyntaxParser.Label - 46)) | (1 << (VfrSyntaxParser.Inventory - 46)) | (1 << (VfrSyntaxParser.CheckBox - 46)) | (1 << (VfrSyntaxParser.Numeric - 46)) | (1 << (VfrSyntaxParser.Password - 46)) | (1 << (VfrSyntaxParser.String - 46)) | (1 << (VfrSyntaxParser.SuppressIf - 46)) | (1 << (VfrSyntaxParser.DisableIf - 46)) | (1 << (VfrSyntaxParser.Hidden - 46)) | (1 << (VfrSyntaxParser.Goto - 46)))) != 0) or ((((_la - 110)) & ~0x3f) == 0 and ((1 << (_la - 110)) & ((1 << (VfrSyntaxParser.InconsistentIf - 110)) | (1 << (VfrSyntaxParser.Restore - 110)) | (1 << (VfrSyntaxParser.Save - 110)) | (1 << (VfrSyntaxParser.ResetButton - 110)) | (1 << (VfrSyntaxParser.Action - 110)) | (1 << (VfrSyntaxParser.GuidOp - 110)))) != 0):
- self.state = 2157
+ self.state = 2160
self.vfrStatementStatList()
- self.state = 2162
+ self.state = 2165
self._errHandler.sync(self)
_la = self._input.LA(1)
- self.state = 2163
+ self.state = 2166
self.match(VfrSyntaxParser.EndIf)
- self.state = 2164
+ self.state = 2167
self.match(VfrSyntaxParser.Semicolon)
except RecognitionException as re:
localctx.exception = re
@@ -14201,6 +14211,7 @@ class VfrSyntaxParser ( Parser ):
def __init__(self, parser, parent:ParserRuleContext=None, invokingState:int=-1):
super().__init__(parent, invokingState)
self.parser = parser
+ self.Node = None
def SuppressIf(self):
return self.getToken(VfrSyntaxParser.SuppressIf, 0)
@@ -14250,37 +14261,37 @@ class VfrSyntaxParser ( Parser ):
self._la = 0 # Token type
try:
self.enterOuterAlt(localctx, 1)
- self.state = 2166
+ self.state = 2169
self.match(VfrSyntaxParser.SuppressIf)
- self.state = 2179
+ self.state = 2182
self._errHandler.sync(self)
_la = self._input.LA(1)
if _la==VfrSyntaxParser.FLAGS:
- self.state = 2167
+ self.state = 2170
self.match(VfrSyntaxParser.FLAGS)
- self.state = 2168
+ self.state = 2171
self.match(VfrSyntaxParser.T__5)
- self.state = 2169
+ self.state = 2172
self.flagsField()
- self.state = 2174
+ self.state = 2177
self._errHandler.sync(self)
_la = self._input.LA(1)
while _la==VfrSyntaxParser.BitWiseOr:
- self.state = 2170
+ self.state = 2173
self.match(VfrSyntaxParser.BitWiseOr)
- self.state = 2171
+ self.state = 2174
self.flagsField()
- self.state = 2176
+ self.state = 2179
self._errHandler.sync(self)
_la = self._input.LA(1)
- self.state = 2177
+ self.state = 2180
self.match(VfrSyntaxParser.Comma)
- self.state = 2181
- self.vfrStatementExpression()
- self.state = 2182
+ self.state = 2184
+ self.vfrStatementExpression(localctx.Node)
+ self.state = 2185
self.match(VfrSyntaxParser.Semicolon)
except RecognitionException as re:
localctx.exception = re
@@ -14296,6 +14307,7 @@ class VfrSyntaxParser ( Parser ):
def __init__(self, parser, parent:ParserRuleContext=None, invokingState:int=-1):
super().__init__(parent, invokingState)
self.parser = parser
+ self.Node = None
def GrayOutIf(self):
return self.getToken(VfrSyntaxParser.GrayOutIf, 0)
@@ -14345,37 +14357,37 @@ class VfrSyntaxParser ( Parser ):
self._la = 0 # Token type
try:
self.enterOuterAlt(localctx, 1)
- self.state = 2184
+ self.state = 2187
self.match(VfrSyntaxParser.GrayOutIf)
- self.state = 2197
+ self.state = 2200
self._errHandler.sync(self)
_la = self._input.LA(1)
if _la==VfrSyntaxParser.FLAGS:
- self.state = 2185
+ self.state = 2188
self.match(VfrSyntaxParser.FLAGS)
- self.state = 2186
+ self.state = 2189
self.match(VfrSyntaxParser.T__5)
- self.state = 2187
+ self.state = 2190
self.flagsField()
- self.state = 2192
+ self.state = 2195
self._errHandler.sync(self)
_la = self._input.LA(1)
while _la==VfrSyntaxParser.BitWiseOr:
- self.state = 2188
+ self.state = 2191
self.match(VfrSyntaxParser.BitWiseOr)
- self.state = 2189
+ self.state = 2192
self.flagsField()
- self.state = 2194
+ self.state = 2197
self._errHandler.sync(self)
_la = self._input.LA(1)
- self.state = 2195
+ self.state = 2198
self.match(VfrSyntaxParser.Comma)
- self.state = 2199
- self.vfrStatementExpression()
- self.state = 2200
+ self.state = 2202
+ self.vfrStatementExpression(localctx.Node)
+ self.state = 2203
self.match(VfrSyntaxParser.Semicolon)
except RecognitionException as re:
localctx.exception = re
@@ -14391,7 +14403,7 @@ class VfrSyntaxParser ( Parser ):
def __init__(self, parser, parent:ParserRuleContext=None, invokingState:int=-1):
super().__init__(parent, invokingState)
self.parser = parser
- self.Node = VfrTreeNode(EFI_IFR_SUPPRESS_IF_OP)
+ self.Node = IfrTreeNode(EFI_IFR_SUPPRESS_IF_OP)
def SuppressIf(self):
return self.getToken(VfrSyntaxParser.SuppressIf, 0)
@@ -14454,51 +14466,51 @@ class VfrSyntaxParser ( Parser ):
self._la = 0 # Token type
try:
self.enterOuterAlt(localctx, 1)
- self.state = 2202
+ self.state = 2205
self.match(VfrSyntaxParser.SuppressIf)
- self.state = 2215
+ self.state = 2218
self._errHandler.sync(self)
_la = self._input.LA(1)
if _la==VfrSyntaxParser.FLAGS:
- self.state = 2203
+ self.state = 2206
self.match(VfrSyntaxParser.FLAGS)
- self.state = 2204
+ self.state = 2207
self.match(VfrSyntaxParser.T__5)
- self.state = 2205
+ self.state = 2208
self.flagsField()
- self.state = 2210
+ self.state = 2213
self._errHandler.sync(self)
_la = self._input.LA(1)
while _la==VfrSyntaxParser.BitWiseOr:
- self.state = 2206
+ self.state = 2209
self.match(VfrSyntaxParser.BitWiseOr)
- self.state = 2207
+ self.state = 2210
self.flagsField()
- self.state = 2212
+ self.state = 2215
self._errHandler.sync(self)
_la = self._input.LA(1)
- self.state = 2213
+ self.state = 2216
self.match(VfrSyntaxParser.Comma)
- self.state = 2217
- self.vfrStatementExpression()
- self.state = 2218
+ self.state = 2220
+ self.vfrStatementExpression(localctx.Node)
+ self.state = 2221
self.match(VfrSyntaxParser.Semicolon)
- self.state = 2222
+ self.state = 2225
self._errHandler.sync(self)
_la = self._input.LA(1)
while ((((_la - 46)) & ~0x3f) == 0 and ((1 << (_la - 46)) & ((1 << (VfrSyntaxParser.OneOf - 46)) | (1 << (VfrSyntaxParser.OrderedList - 46)) | (1 << (VfrSyntaxParser.Subtitle - 46)) | (1 << (VfrSyntaxParser.Text - 46)) | (1 << (VfrSyntaxParser.Date - 46)) | (1 << (VfrSyntaxParser.Time - 46)) | (1 << (VfrSyntaxParser.GrayOutIf - 46)) | (1 << (VfrSyntaxParser.Label - 46)) | (1 << (VfrSyntaxParser.Inventory - 46)) | (1 << (VfrSyntaxParser.CheckBox - 46)) | (1 << (VfrSyntaxParser.Numeric - 46)) | (1 << (VfrSyntaxParser.Password - 46)) | (1 << (VfrSyntaxParser.String - 46)) | (1 << (VfrSyntaxParser.SuppressIf - 46)) | (1 << (VfrSyntaxParser.DisableIf - 46)) | (1 << (VfrSyntaxParser.Hidden - 46)) | (1 << (VfrSyntaxParser.Goto - 46)))) != 0) or ((((_la - 110)) & ~0x3f) == 0 and ((1 << (_la - 110)) & ((1 << (VfrSyntaxParser.InconsistentIf - 110)) | (1 << (VfrSyntaxParser.Restore - 110)) | (1 << (VfrSyntaxParser.Save - 110)) | (1 << (VfrSyntaxParser.ResetButton - 110)) | (1 << (VfrSyntaxParser.Action - 110)) | (1 << (VfrSyntaxParser.GuidOp - 110)))) != 0):
- self.state = 2219
+ self.state = 2222
self.vfrStatementStatList()
- self.state = 2224
+ self.state = 2227
self._errHandler.sync(self)
_la = self._input.LA(1)
- self.state = 2225
+ self.state = 2228
self.match(VfrSyntaxParser.EndIf)
- self.state = 2226
+ self.state = 2229
self.match(VfrSyntaxParser.Semicolon)
except RecognitionException as re:
localctx.exception = re
@@ -14514,7 +14526,7 @@ class VfrSyntaxParser ( Parser ):
def __init__(self, parser, parent:ParserRuleContext=None, invokingState:int=-1):
super().__init__(parent, invokingState)
self.parser = parser
- self.Node = VfrTreeNode(EFI_IFR_GRAY_OUT_IF_OP)
+ self.Node = IfrTreeNode(EFI_IFR_GRAY_OUT_IF_OP)
def GrayOutIf(self):
return self.getToken(VfrSyntaxParser.GrayOutIf, 0)
@@ -14577,51 +14589,51 @@ class VfrSyntaxParser ( Parser ):
self._la = 0 # Token type
try:
self.enterOuterAlt(localctx, 1)
- self.state = 2228
+ self.state = 2231
self.match(VfrSyntaxParser.GrayOutIf)
- self.state = 2241
+ self.state = 2244
self._errHandler.sync(self)
_la = self._input.LA(1)
if _la==VfrSyntaxParser.FLAGS:
- self.state = 2229
+ self.state = 2232
self.match(VfrSyntaxParser.FLAGS)
- self.state = 2230
+ self.state = 2233
self.match(VfrSyntaxParser.T__5)
- self.state = 2231
+ self.state = 2234
self.flagsField()
- self.state = 2236
+ self.state = 2239
self._errHandler.sync(self)
_la = self._input.LA(1)
while _la==VfrSyntaxParser.BitWiseOr:
- self.state = 2232
+ self.state = 2235
self.match(VfrSyntaxParser.BitWiseOr)
- self.state = 2233
+ self.state = 2236
self.flagsField()
- self.state = 2238
+ self.state = 2241
self._errHandler.sync(self)
_la = self._input.LA(1)
- self.state = 2239
+ self.state = 2242
self.match(VfrSyntaxParser.Comma)
- self.state = 2243
- self.vfrStatementExpression()
- self.state = 2244
+ self.state = 2246
+ self.vfrStatementExpression(localctx.Node)
+ self.state = 2247
self.match(VfrSyntaxParser.Semicolon)
- self.state = 2248
+ self.state = 2251
self._errHandler.sync(self)
_la = self._input.LA(1)
while ((((_la - 46)) & ~0x3f) == 0 and ((1 << (_la - 46)) & ((1 << (VfrSyntaxParser.OneOf - 46)) | (1 << (VfrSyntaxParser.OrderedList - 46)) | (1 << (VfrSyntaxParser.Subtitle - 46)) | (1 << (VfrSyntaxParser.Text - 46)) | (1 << (VfrSyntaxParser.Date - 46)) | (1 << (VfrSyntaxParser.Time - 46)) | (1 << (VfrSyntaxParser.GrayOutIf - 46)) | (1 << (VfrSyntaxParser.Label - 46)) | (1 << (VfrSyntaxParser.Inventory - 46)) | (1 << (VfrSyntaxParser.CheckBox - 46)) | (1 << (VfrSyntaxParser.Numeric - 46)) | (1 << (VfrSyntaxParser.Password - 46)) | (1 << (VfrSyntaxParser.String - 46)) | (1 << (VfrSyntaxParser.SuppressIf - 46)) | (1 << (VfrSyntaxParser.DisableIf - 46)) | (1 << (VfrSyntaxParser.Hidden - 46)) | (1 << (VfrSyntaxParser.Goto - 46)))) != 0) or ((((_la - 110)) & ~0x3f) == 0 and ((1 << (_la - 110)) & ((1 << (VfrSyntaxParser.InconsistentIf - 110)) | (1 << (VfrSyntaxParser.Restore - 110)) | (1 << (VfrSyntaxParser.Save - 110)) | (1 << (VfrSyntaxParser.ResetButton - 110)) | (1 << (VfrSyntaxParser.Action - 110)) | (1 << (VfrSyntaxParser.GuidOp - 110)))) != 0):
- self.state = 2245
+ self.state = 2248
self.vfrStatementStatList()
- self.state = 2250
+ self.state = 2253
self._errHandler.sync(self)
_la = self._input.LA(1)
- self.state = 2251
+ self.state = 2254
self.match(VfrSyntaxParser.EndIf)
- self.state = 2252
+ self.state = 2255
self.match(VfrSyntaxParser.Semicolon)
except RecognitionException as re:
localctx.exception = re
@@ -14637,7 +14649,7 @@ class VfrSyntaxParser ( Parser ):
def __init__(self, parser, parent:ParserRuleContext=None, invokingState:int=-1):
super().__init__(parent, invokingState)
self.parser = parser
- self.Node = VfrTreeNode(EFI_IFR_INCONSISTENT_IF_OP)
+ self.Node = IfrTreeNode(EFI_IFR_INCONSISTENT_IF_OP)
def InconsistentIf(self):
return self.getToken(VfrSyntaxParser.InconsistentIf, 0)
@@ -14708,53 +14720,53 @@ class VfrSyntaxParser ( Parser ):
self._la = 0 # Token type
try:
self.enterOuterAlt(localctx, 1)
- self.state = 2254
+ self.state = 2257
self.match(VfrSyntaxParser.InconsistentIf)
- self.state = 2255
+ self.state = 2258
self.match(VfrSyntaxParser.Prompt)
- self.state = 2256
+ self.state = 2259
self.match(VfrSyntaxParser.T__5)
- self.state = 2257
+ self.state = 2260
self.match(VfrSyntaxParser.StringToken)
- self.state = 2258
+ self.state = 2261
self.match(VfrSyntaxParser.OpenParen)
- self.state = 2259
+ self.state = 2262
self.match(VfrSyntaxParser.Number)
- self.state = 2260
+ self.state = 2263
self.match(VfrSyntaxParser.CloseParen)
- self.state = 2261
+ self.state = 2264
self.match(VfrSyntaxParser.Comma)
- self.state = 2274
+ self.state = 2277
self._errHandler.sync(self)
_la = self._input.LA(1)
if _la==VfrSyntaxParser.FLAGS:
- self.state = 2262
+ self.state = 2265
self.match(VfrSyntaxParser.FLAGS)
- self.state = 2263
+ self.state = 2266
self.match(VfrSyntaxParser.T__5)
- self.state = 2264
+ self.state = 2267
self.flagsField()
- self.state = 2269
+ self.state = 2272
self._errHandler.sync(self)
_la = self._input.LA(1)
while _la==VfrSyntaxParser.BitWiseOr:
- self.state = 2265
+ self.state = 2268
self.match(VfrSyntaxParser.BitWiseOr)
- self.state = 2266
+ self.state = 2269
self.flagsField()
- self.state = 2271
+ self.state = 2274
self._errHandler.sync(self)
_la = self._input.LA(1)
- self.state = 2272
+ self.state = 2275
self.match(VfrSyntaxParser.Comma)
- self.state = 2276
- self.vfrStatementExpression()
- self.state = 2277
+ self.state = 2279
+ self.vfrStatementExpression(localctx.Node)
+ self.state = 2280
self.match(VfrSyntaxParser.EndIf)
- self.state = 2278
+ self.state = 2281
self.match(VfrSyntaxParser.Semicolon)
except RecognitionException as re:
localctx.exception = re
@@ -14800,22 +14812,22 @@ class VfrSyntaxParser ( Parser ):
localctx = VfrSyntaxParser.VfrStatementInvalidContext(self, self._ctx, self.state)
self.enterRule(localctx, 270, self.RULE_vfrStatementInvalid)
try:
- self.state = 2283
+ self.state = 2286
self._errHandler.sync(self)
token = self._input.LA(1)
if token in [VfrSyntaxParser.Hidden]:
self.enterOuterAlt(localctx, 1)
- self.state = 2280
+ self.state = 2283
self.vfrStatementInvalidHidden()
pass
elif token in [VfrSyntaxParser.Inventory]:
self.enterOuterAlt(localctx, 2)
- self.state = 2281
+ self.state = 2284
self.vfrStatementInvalidInventory()
pass
elif token in [VfrSyntaxParser.Restore, VfrSyntaxParser.Save]:
self.enterOuterAlt(localctx, 3)
- self.state = 2282
+ self.state = 2285
self.vfrStatementInvalidSaveRestoreDefaults()
pass
else:
@@ -14875,23 +14887,23 @@ class VfrSyntaxParser ( Parser ):
self.enterRule(localctx, 272, self.RULE_vfrStatementInvalidHidden)
try:
self.enterOuterAlt(localctx, 1)
- self.state = 2285
+ self.state = 2288
self.match(VfrSyntaxParser.Hidden)
- self.state = 2286
+ self.state = 2289
self.match(VfrSyntaxParser.Value)
- self.state = 2287
+ self.state = 2290
self.match(VfrSyntaxParser.T__5)
- self.state = 2288
+ self.state = 2291
self.match(VfrSyntaxParser.Number)
- self.state = 2289
+ self.state = 2292
self.match(VfrSyntaxParser.Comma)
- self.state = 2290
+ self.state = 2293
self.match(VfrSyntaxParser.Key)
- self.state = 2291
+ self.state = 2294
self.match(VfrSyntaxParser.T__5)
- self.state = 2292
+ self.state = 2295
self.match(VfrSyntaxParser.Number)
- self.state = 2293
+ self.state = 2296
self.match(VfrSyntaxParser.Semicolon)
except RecognitionException as re:
localctx.exception = re
@@ -14972,55 +14984,55 @@ class VfrSyntaxParser ( Parser ):
self._la = 0 # Token type
try:
self.enterOuterAlt(localctx, 1)
- self.state = 2295
+ self.state = 2298
self.match(VfrSyntaxParser.Inventory)
- self.state = 2296
+ self.state = 2299
self.match(VfrSyntaxParser.Help)
- self.state = 2297
+ self.state = 2300
self.match(VfrSyntaxParser.T__5)
- self.state = 2298
+ self.state = 2301
self.match(VfrSyntaxParser.StringToken)
- self.state = 2299
+ self.state = 2302
self.match(VfrSyntaxParser.OpenParen)
- self.state = 2300
+ self.state = 2303
self.match(VfrSyntaxParser.Number)
- self.state = 2301
+ self.state = 2304
self.match(VfrSyntaxParser.CloseParen)
- self.state = 2302
+ self.state = 2305
self.match(VfrSyntaxParser.Comma)
- self.state = 2303
+ self.state = 2306
self.match(VfrSyntaxParser.Text)
- self.state = 2304
+ self.state = 2307
self.match(VfrSyntaxParser.T__5)
- self.state = 2305
+ self.state = 2308
self.match(VfrSyntaxParser.StringToken)
- self.state = 2306
+ self.state = 2309
self.match(VfrSyntaxParser.OpenParen)
- self.state = 2307
+ self.state = 2310
self.match(VfrSyntaxParser.Number)
- self.state = 2308
+ self.state = 2311
self.match(VfrSyntaxParser.CloseParen)
- self.state = 2309
+ self.state = 2312
self.match(VfrSyntaxParser.Comma)
- self.state = 2316
+ self.state = 2319
self._errHandler.sync(self)
_la = self._input.LA(1)
if _la==VfrSyntaxParser.Text:
- self.state = 2310
+ self.state = 2313
self.match(VfrSyntaxParser.Text)
- self.state = 2311
+ self.state = 2314
self.match(VfrSyntaxParser.T__5)
- self.state = 2312
+ self.state = 2315
self.match(VfrSyntaxParser.StringToken)
- self.state = 2313
+ self.state = 2316
self.match(VfrSyntaxParser.OpenParen)
- self.state = 2314
+ self.state = 2317
self.match(VfrSyntaxParser.Number)
- self.state = 2315
+ self.state = 2318
self.match(VfrSyntaxParser.CloseParen)
- self.state = 2318
+ self.state = 2321
self.match(VfrSyntaxParser.Semicolon)
except RecognitionException as re:
localctx.exception = re
@@ -15126,92 +15138,92 @@ class VfrSyntaxParser ( Parser ):
self._la = 0 # Token type
try:
self.enterOuterAlt(localctx, 1)
- self.state = 2320
+ self.state = 2323
_la = self._input.LA(1)
if not(_la==VfrSyntaxParser.Restore or _la==VfrSyntaxParser.Save):
self._errHandler.recoverInline(self)
else:
self._errHandler.reportMatch(self)
self.consume()
- self.state = 2321
+ self.state = 2324
self.match(VfrSyntaxParser.Defaults)
- self.state = 2322
+ self.state = 2325
self.match(VfrSyntaxParser.Comma)
- self.state = 2323
+ self.state = 2326
self.match(VfrSyntaxParser.FormId)
- self.state = 2324
+ self.state = 2327
self.match(VfrSyntaxParser.T__5)
- self.state = 2325
+ self.state = 2328
self.match(VfrSyntaxParser.Number)
- self.state = 2326
+ self.state = 2329
self.match(VfrSyntaxParser.Comma)
- self.state = 2327
+ self.state = 2330
self.match(VfrSyntaxParser.Prompt)
- self.state = 2328
+ self.state = 2331
self.match(VfrSyntaxParser.T__5)
- self.state = 2329
+ self.state = 2332
self.match(VfrSyntaxParser.StringToken)
- self.state = 2330
+ self.state = 2333
self.match(VfrSyntaxParser.OpenParen)
- self.state = 2331
+ self.state = 2334
self.match(VfrSyntaxParser.Number)
- self.state = 2332
+ self.state = 2335
self.match(VfrSyntaxParser.CloseParen)
- self.state = 2333
+ self.state = 2336
self.match(VfrSyntaxParser.Comma)
- self.state = 2334
+ self.state = 2337
self.match(VfrSyntaxParser.Help)
- self.state = 2335
+ self.state = 2338
self.match(VfrSyntaxParser.T__5)
- self.state = 2336
+ self.state = 2339
self.match(VfrSyntaxParser.StringToken)
- self.state = 2337
+ self.state = 2340
self.match(VfrSyntaxParser.OpenParen)
- self.state = 2338
+ self.state = 2341
self.match(VfrSyntaxParser.Number)
- self.state = 2339
+ self.state = 2342
self.match(VfrSyntaxParser.CloseParen)
- self.state = 2351
+ self.state = 2354
self._errHandler.sync(self)
- la_ = self._interp.adaptivePredict(self._input,181,self._ctx)
+ la_ = self._interp.adaptivePredict(self._input,182,self._ctx)
if la_ == 1:
- self.state = 2340
+ self.state = 2343
self.match(VfrSyntaxParser.Comma)
- self.state = 2341
+ self.state = 2344
self.match(VfrSyntaxParser.FLAGS)
- self.state = 2342
+ self.state = 2345
self.match(VfrSyntaxParser.T__5)
- self.state = 2343
+ self.state = 2346
self.flagsField()
- self.state = 2348
+ self.state = 2351
self._errHandler.sync(self)
_la = self._input.LA(1)
while _la==VfrSyntaxParser.BitWiseOr:
- self.state = 2344
+ self.state = 2347
self.match(VfrSyntaxParser.BitWiseOr)
- self.state = 2345
+ self.state = 2348
self.flagsField()
- self.state = 2350
+ self.state = 2353
self._errHandler.sync(self)
_la = self._input.LA(1)
- self.state = 2357
+ self.state = 2360
self._errHandler.sync(self)
_la = self._input.LA(1)
if _la==VfrSyntaxParser.Comma:
- self.state = 2353
+ self.state = 2356
self.match(VfrSyntaxParser.Comma)
- self.state = 2354
+ self.state = 2357
self.match(VfrSyntaxParser.Key)
- self.state = 2355
+ self.state = 2358
self.match(VfrSyntaxParser.T__5)
- self.state = 2356
+ self.state = 2359
self.match(VfrSyntaxParser.Number)
- self.state = 2359
+ self.state = 2362
self.match(VfrSyntaxParser.Semicolon)
except RecognitionException as re:
localctx.exception = re
@@ -15227,7 +15239,7 @@ class VfrSyntaxParser ( Parser ):
def __init__(self, parser, parent:ParserRuleContext=None, invokingState:int=-1):
super().__init__(parent, invokingState)
self.parser = parser
- self.Node = VfrTreeNode(EFI_IFR_GUID_OP)
+ self.Node = IfrTreeNode(EFI_IFR_GUID_OP)
def Label(self):
return self.getToken(VfrSyntaxParser.Label, 0)
@@ -15256,11 +15268,11 @@ class VfrSyntaxParser ( Parser ):
self.enterRule(localctx, 278, self.RULE_vfrStatementLabel)
try:
self.enterOuterAlt(localctx, 1)
- self.state = 2361
+ self.state = 2364
self.match(VfrSyntaxParser.Label)
- self.state = 2362
+ self.state = 2365
self.match(VfrSyntaxParser.Number)
- self.state = 2363
+ self.state = 2366
self.match(VfrSyntaxParser.Semicolon)
except RecognitionException as re:
localctx.exception = re
@@ -15276,7 +15288,7 @@ class VfrSyntaxParser ( Parser ):
def __init__(self, parser, parent:ParserRuleContext=None, invokingState:int=-1):
super().__init__(parent, invokingState)
self.parser = parser
- self.Node = VfrTreeNode(EFI_IFR_GUID_OP)
+ self.Node = IfrTreeNode(EFI_IFR_GUID_OP)
def Banner(self):
return self.getToken(VfrSyntaxParser.Banner, 0)
@@ -15345,60 +15357,60 @@ class VfrSyntaxParser ( Parser ):
self._la = 0 # Token type
try:
self.enterOuterAlt(localctx, 1)
- self.state = 2365
+ self.state = 2368
self.match(VfrSyntaxParser.Banner)
- self.state = 2367
+ self.state = 2370
self._errHandler.sync(self)
_la = self._input.LA(1)
if _la==VfrSyntaxParser.Comma:
- self.state = 2366
+ self.state = 2369
self.match(VfrSyntaxParser.Comma)
- self.state = 2369
+ self.state = 2372
self.match(VfrSyntaxParser.Title)
- self.state = 2370
+ self.state = 2373
self.match(VfrSyntaxParser.T__5)
- self.state = 2371
+ self.state = 2374
self.match(VfrSyntaxParser.StringToken)
- self.state = 2372
+ self.state = 2375
self.match(VfrSyntaxParser.OpenParen)
- self.state = 2373
+ self.state = 2376
self.match(VfrSyntaxParser.Number)
- self.state = 2374
+ self.state = 2377
self.match(VfrSyntaxParser.CloseParen)
- self.state = 2375
+ self.state = 2378
self.match(VfrSyntaxParser.Comma)
- self.state = 2386
+ self.state = 2389
self._errHandler.sync(self)
token = self._input.LA(1)
if token in [VfrSyntaxParser.Line]:
- self.state = 2376
+ self.state = 2379
self.match(VfrSyntaxParser.Line)
- self.state = 2377
+ self.state = 2380
self.match(VfrSyntaxParser.Number)
- self.state = 2378
+ self.state = 2381
self.match(VfrSyntaxParser.Comma)
- self.state = 2379
+ self.state = 2382
self.match(VfrSyntaxParser.Align)
- self.state = 2380
+ self.state = 2383
_la = self._input.LA(1)
if not(((((_la - 136)) & ~0x3f) == 0 and ((1 << (_la - 136)) & ((1 << (VfrSyntaxParser.Left - 136)) | (1 << (VfrSyntaxParser.Right - 136)) | (1 << (VfrSyntaxParser.Center - 136)))) != 0)):
self._errHandler.recoverInline(self)
else:
self._errHandler.reportMatch(self)
self.consume()
- self.state = 2381
+ self.state = 2384
self.match(VfrSyntaxParser.Semicolon)
pass
elif token in [VfrSyntaxParser.Timeout]:
- self.state = 2382
+ self.state = 2385
self.match(VfrSyntaxParser.Timeout)
- self.state = 2383
+ self.state = 2386
self.match(VfrSyntaxParser.T__5)
- self.state = 2384
+ self.state = 2387
self.match(VfrSyntaxParser.Number)
- self.state = 2385
+ self.state = 2388
self.match(VfrSyntaxParser.Semicolon)
pass
else:
@@ -15418,8 +15430,8 @@ class VfrSyntaxParser ( Parser ):
def __init__(self, parser, parent:ParserRuleContext=None, invokingState:int=-1):
super().__init__(parent, invokingState)
self.parser = parser
- self.Node = VfrTreeNode(EFI_IFR_GUID_OP)
- self.DataBuff = None
+ self.Node = IfrTreeNode(EFI_IFR_GUID_OP)
+ self.Buffer = None
self.Size = 0
self.TypeName = ''
self.TypeSize = 0
@@ -15524,183 +15536,183 @@ class VfrSyntaxParser ( Parser ):
self._la = 0 # Token type
try:
self.enterOuterAlt(localctx, 1)
- self.state = 2388
+ self.state = 2391
self.match(VfrSyntaxParser.GuidOp)
- self.state = 2389
+ self.state = 2392
self.match(VfrSyntaxParser.Uuid)
- self.state = 2390
+ self.state = 2393
self.match(VfrSyntaxParser.T__5)
- self.state = 2391
+ self.state = 2394
self.guidDefinition()
- self.state = 2463
+ self.state = 2466
self._errHandler.sync(self)
- la_ = self._interp.adaptivePredict(self._input,197,self._ctx)
+ la_ = self._interp.adaptivePredict(self._input,198,self._ctx)
if la_ == 1:
- self.state = 2392
+ self.state = 2395
self.match(VfrSyntaxParser.Comma)
- self.state = 2393
+ self.state = 2396
localctx.D = self.match(VfrSyntaxParser.DataType)
- self.state = 2394
+ self.state = 2397
self.match(VfrSyntaxParser.T__5)
- self.state = 2455
+ self.state = 2458
self._errHandler.sync(self)
token = self._input.LA(1)
if token in [VfrSyntaxParser.Uint64]:
- self.state = 2395
+ self.state = 2398
self.match(VfrSyntaxParser.Uint64)
- self.state = 2399
+ self.state = 2402
self._errHandler.sync(self)
_la = self._input.LA(1)
if _la==VfrSyntaxParser.OpenBracket:
- self.state = 2396
+ self.state = 2399
self.match(VfrSyntaxParser.OpenBracket)
- self.state = 2397
+ self.state = 2400
self.match(VfrSyntaxParser.Number)
- self.state = 2398
+ self.state = 2401
self.match(VfrSyntaxParser.CloseBracket)
pass
elif token in [VfrSyntaxParser.Uint32]:
- self.state = 2401
+ self.state = 2404
self.match(VfrSyntaxParser.Uint32)
- self.state = 2405
+ self.state = 2408
self._errHandler.sync(self)
_la = self._input.LA(1)
if _la==VfrSyntaxParser.OpenBracket:
- self.state = 2402
+ self.state = 2405
self.match(VfrSyntaxParser.OpenBracket)
- self.state = 2403
+ self.state = 2406
self.match(VfrSyntaxParser.Number)
- self.state = 2404
+ self.state = 2407
self.match(VfrSyntaxParser.CloseBracket)
pass
elif token in [VfrSyntaxParser.Uint16]:
- self.state = 2407
+ self.state = 2410
self.match(VfrSyntaxParser.Uint16)
- self.state = 2411
+ self.state = 2414
self._errHandler.sync(self)
_la = self._input.LA(1)
if _la==VfrSyntaxParser.OpenBracket:
- self.state = 2408
+ self.state = 2411
self.match(VfrSyntaxParser.OpenBracket)
- self.state = 2409
+ self.state = 2412
self.match(VfrSyntaxParser.Number)
- self.state = 2410
+ self.state = 2413
self.match(VfrSyntaxParser.CloseBracket)
pass
elif token in [VfrSyntaxParser.Uint8]:
- self.state = 2413
+ self.state = 2416
self.match(VfrSyntaxParser.Uint8)
- self.state = 2417
+ self.state = 2420
self._errHandler.sync(self)
_la = self._input.LA(1)
if _la==VfrSyntaxParser.OpenBracket:
- self.state = 2414
+ self.state = 2417
self.match(VfrSyntaxParser.OpenBracket)
- self.state = 2415
+ self.state = 2418
self.match(VfrSyntaxParser.Number)
- self.state = 2416
+ self.state = 2419
self.match(VfrSyntaxParser.CloseBracket)
pass
elif token in [VfrSyntaxParser.Boolean]:
- self.state = 2419
+ self.state = 2422
self.match(VfrSyntaxParser.Boolean)
- self.state = 2423
+ self.state = 2426
self._errHandler.sync(self)
_la = self._input.LA(1)
if _la==VfrSyntaxParser.OpenBracket:
- self.state = 2420
+ self.state = 2423
self.match(VfrSyntaxParser.OpenBracket)
- self.state = 2421
+ self.state = 2424
self.match(VfrSyntaxParser.Number)
- self.state = 2422
+ self.state = 2425
self.match(VfrSyntaxParser.CloseBracket)
pass
elif token in [VfrSyntaxParser.EFI_STRING_ID]:
- self.state = 2425
+ self.state = 2428
self.match(VfrSyntaxParser.EFI_STRING_ID)
- self.state = 2429
+ self.state = 2432
self._errHandler.sync(self)
_la = self._input.LA(1)
if _la==VfrSyntaxParser.OpenBracket:
- self.state = 2426
+ self.state = 2429
self.match(VfrSyntaxParser.OpenBracket)
- self.state = 2427
+ self.state = 2430
self.match(VfrSyntaxParser.Number)
- self.state = 2428
+ self.state = 2431
self.match(VfrSyntaxParser.CloseBracket)
pass
elif token in [VfrSyntaxParser.EFI_HII_DATE]:
- self.state = 2431
+ self.state = 2434
self.match(VfrSyntaxParser.EFI_HII_DATE)
- self.state = 2435
+ self.state = 2438
self._errHandler.sync(self)
_la = self._input.LA(1)
if _la==VfrSyntaxParser.OpenBracket:
- self.state = 2432
+ self.state = 2435
self.match(VfrSyntaxParser.OpenBracket)
- self.state = 2433
+ self.state = 2436
self.match(VfrSyntaxParser.Number)
- self.state = 2434
+ self.state = 2437
self.match(VfrSyntaxParser.CloseBracket)
pass
elif token in [VfrSyntaxParser.EFI_HII_TIME]:
- self.state = 2437
+ self.state = 2440
self.match(VfrSyntaxParser.EFI_HII_TIME)
- self.state = 2441
+ self.state = 2444
self._errHandler.sync(self)
_la = self._input.LA(1)
if _la==VfrSyntaxParser.OpenBracket:
- self.state = 2438
+ self.state = 2441
self.match(VfrSyntaxParser.OpenBracket)
- self.state = 2439
+ self.state = 2442
self.match(VfrSyntaxParser.Number)
- self.state = 2440
+ self.state = 2443
self.match(VfrSyntaxParser.CloseBracket)
pass
elif token in [VfrSyntaxParser.EFI_HII_REF]:
- self.state = 2443
+ self.state = 2446
self.match(VfrSyntaxParser.EFI_HII_REF)
- self.state = 2447
+ self.state = 2450
self._errHandler.sync(self)
_la = self._input.LA(1)
if _la==VfrSyntaxParser.OpenBracket:
- self.state = 2444
+ self.state = 2447
self.match(VfrSyntaxParser.OpenBracket)
- self.state = 2445
+ self.state = 2448
self.match(VfrSyntaxParser.Number)
- self.state = 2446
+ self.state = 2449
self.match(VfrSyntaxParser.CloseBracket)
pass
elif token in [VfrSyntaxParser.StringIdentifier]:
- self.state = 2449
+ self.state = 2452
self.match(VfrSyntaxParser.StringIdentifier)
- self.state = 2453
+ self.state = 2456
self._errHandler.sync(self)
_la = self._input.LA(1)
if _la==VfrSyntaxParser.OpenBracket:
- self.state = 2450
+ self.state = 2453
self.match(VfrSyntaxParser.OpenBracket)
- self.state = 2451
+ self.state = 2454
self.match(VfrSyntaxParser.Number)
- self.state = 2452
+ self.state = 2455
self.match(VfrSyntaxParser.CloseBracket)
@@ -15708,40 +15720,40 @@ class VfrSyntaxParser ( Parser ):
else:
raise NoViableAltException(self)
- self.state = 2460
+ self.state = 2463
self._errHandler.sync(self)
- _alt = self._interp.adaptivePredict(self._input,196,self._ctx)
+ _alt = self._interp.adaptivePredict(self._input,197,self._ctx)
while _alt!=2 and _alt!=ATN.INVALID_ALT_NUMBER:
if _alt==1:
- self.state = 2457
- self.vfrExtensionData(localctx.DataBuff)
- self.state = 2462
+ self.state = 2460
+ self.vfrExtensionData()
+ self.state = 2465
self._errHandler.sync(self)
- _alt = self._interp.adaptivePredict(self._input,196,self._ctx)
+ _alt = self._interp.adaptivePredict(self._input,197,self._ctx)
- self.state = 2473
+ self.state = 2476
self._errHandler.sync(self)
_la = self._input.LA(1)
if _la==VfrSyntaxParser.Comma:
- self.state = 2465
+ self.state = 2468
self.match(VfrSyntaxParser.Comma)
- self.state = 2469
+ self.state = 2472
self._errHandler.sync(self)
_la = self._input.LA(1)
while _la==VfrSyntaxParser.GuidOp:
- self.state = 2466
+ self.state = 2469
self.vfrStatementExtension()
- self.state = 2471
+ self.state = 2474
self._errHandler.sync(self)
_la = self._input.LA(1)
- self.state = 2472
+ self.state = 2475
self.match(VfrSyntaxParser.EndGuidOp)
- self.state = 2475
+ self.state = 2478
self.match(VfrSyntaxParser.Semicolon)
except RecognitionException as re:
localctx.exception = re
@@ -15754,13 +15766,14 @@ class VfrSyntaxParser ( Parser ):
class VfrExtensionDataContext(ParserRuleContext):
- def __init__(self, parser, parent:ParserRuleContext=None, invokingState:int=-1, DataBuff=None):
+ def __init__(self, parser, parent:ParserRuleContext=None, invokingState:int=-1):
super().__init__(parent, invokingState)
self.parser = parser
- self.DataBuff = None
- self.IsStruct = None
+ self.TFName = ''
+ self.FName = ''
+ self.TFValue = None
+ self.I = None # Token
self.N = None # Token
- self.DataBuff = DataBuff
def Comma(self):
return self.getToken(VfrSyntaxParser.Comma, 0)
@@ -15805,44 +15818,44 @@ class VfrSyntaxParser ( Parser ):
- def vfrExtensionData(self, DataBuff):
+ def vfrExtensionData(self):
- localctx = VfrSyntaxParser.VfrExtensionDataContext(self, self._ctx, self.state, DataBuff)
+ localctx = VfrSyntaxParser.VfrExtensionDataContext(self, self._ctx, self.state)
self.enterRule(localctx, 284, self.RULE_vfrExtensionData)
self._la = 0 # Token type
try:
self.enterOuterAlt(localctx, 1)
- self.state = 2477
+ self.state = 2480
self.match(VfrSyntaxParser.Comma)
- self.state = 2478
+ self.state = 2481
self.match(VfrSyntaxParser.Data)
- self.state = 2482
+ self.state = 2485
self._errHandler.sync(self)
_la = self._input.LA(1)
if _la==VfrSyntaxParser.OpenBracket:
- self.state = 2479
+ self.state = 2482
self.match(VfrSyntaxParser.OpenBracket)
- self.state = 2480
- self.match(VfrSyntaxParser.Number)
- self.state = 2481
+ self.state = 2483
+ localctx.I = self.match(VfrSyntaxParser.Number)
+ self.state = 2484
self.match(VfrSyntaxParser.CloseBracket)
- self.state = 2488
+ self.state = 2491
self._errHandler.sync(self)
_la = self._input.LA(1)
while _la==VfrSyntaxParser.Dot:
- self.state = 2484
+ self.state = 2487
self.match(VfrSyntaxParser.Dot)
- self.state = 2485
+ self.state = 2488
self.arrayName()
- self.state = 2490
+ self.state = 2493
self._errHandler.sync(self)
_la = self._input.LA(1)
- self.state = 2491
+ self.state = 2494
self.match(VfrSyntaxParser.T__5)
- self.state = 2492
+ self.state = 2495
localctx.N = self.match(VfrSyntaxParser.Number)
except RecognitionException as re:
localctx.exception = re
@@ -15885,9 +15898,9 @@ class VfrSyntaxParser ( Parser ):
self.enterRule(localctx, 286, self.RULE_vfrStatementModal)
try:
self.enterOuterAlt(localctx, 1)
- self.state = 2494
+ self.state = 2497
self.vfrModalTag()
- self.state = 2495
+ self.state = 2498
self.match(VfrSyntaxParser.Semicolon)
except RecognitionException as re:
localctx.exception = re
@@ -15903,7 +15916,7 @@ class VfrSyntaxParser ( Parser ):
def __init__(self, parser, parent:ParserRuleContext=None, invokingState:int=-1):
super().__init__(parent, invokingState)
self.parser = parser
- self.Node = VfrTreeNode(EFI_IFR_MODAL_TAG_OP)
+ self.Node = IfrTreeNode(EFI_IFR_MODAL_TAG_OP)
def Modal(self):
return self.getToken(VfrSyntaxParser.Modal, 0)
@@ -15926,7 +15939,7 @@ class VfrSyntaxParser ( Parser ):
self.enterRule(localctx, 288, self.RULE_vfrModalTag)
try:
self.enterOuterAlt(localctx, 1)
- self.state = 2497
+ self.state = 2500
self.match(VfrSyntaxParser.Modal)
except RecognitionException as re:
localctx.exception = re
@@ -15939,10 +15952,14 @@ class VfrSyntaxParser ( Parser ):
class VfrStatementExpressionContext(ParserRuleContext):
- def __init__(self, parser, parent:ParserRuleContext=None, invokingState:int=-1):
+ def __init__(self, parser, parent:ParserRuleContext=None, invokingState:int=-1, ParentNode=None):
super().__init__(parent, invokingState)
self.parser = parser
+ self.ParentNode = None
self.ExpInfo = ExpressionInfo()
+ self.Nodes = []
+ self.L = None # Token
+ self.ParentNode = ParentNode
def andTerm(self, i:int=None):
if i is None:
@@ -15969,24 +15986,24 @@ class VfrSyntaxParser ( Parser ):
- def vfrStatementExpression(self):
+ def vfrStatementExpression(self, ParentNode):
- localctx = VfrSyntaxParser.VfrStatementExpressionContext(self, self._ctx, self.state)
+ localctx = VfrSyntaxParser.VfrStatementExpressionContext(self, self._ctx, self.state, ParentNode)
self.enterRule(localctx, 290, self.RULE_vfrStatementExpression)
self._la = 0 # Token type
try:
self.enterOuterAlt(localctx, 1)
- self.state = 2499
+ self.state = 2502
self.andTerm(localctx.ExpInfo)
- self.state = 2504
+ self.state = 2507
self._errHandler.sync(self)
_la = self._input.LA(1)
while _la==VfrSyntaxParser.OR:
- self.state = 2500
- self.match(VfrSyntaxParser.OR)
- self.state = 2501
+ self.state = 2503
+ localctx.L = self.match(VfrSyntaxParser.OR)
+ self.state = 2504
self.andTerm(localctx.ExpInfo)
- self.state = 2506
+ self.state = 2509
self._errHandler.sync(self)
_la = self._input.LA(1)
@@ -16001,10 +16018,13 @@ class VfrSyntaxParser ( Parser ):
class VfrStatementExpressionSubContext(ParserRuleContext):
- def __init__(self, parser, parent:ParserRuleContext=None, invokingState:int=-1):
+ def __init__(self, parser, parent:ParserRuleContext=None, invokingState:int=-1, ParentNodes=None):
super().__init__(parent, invokingState)
self.parser = parser
+ self.ParentNodes = None
self.ExpInfo = ExpressionInfo()
+ self.Nodes = []
+ self.ParentNodes = ParentNodes
def andTerm(self, i:int=None):
if i is None:
@@ -16031,24 +16051,24 @@ class VfrSyntaxParser ( Parser ):
- def vfrStatementExpressionSub(self):
+ def vfrStatementExpressionSub(self, ParentNodes):
- localctx = VfrSyntaxParser.VfrStatementExpressionSubContext(self, self._ctx, self.state)
+ localctx = VfrSyntaxParser.VfrStatementExpressionSubContext(self, self._ctx, self.state, ParentNodes)
self.enterRule(localctx, 292, self.RULE_vfrStatementExpressionSub)
self._la = 0 # Token type
try:
self.enterOuterAlt(localctx, 1)
- self.state = 2507
+ self.state = 2510
self.andTerm(localctx.ExpInfo)
- self.state = 2512
+ self.state = 2515
self._errHandler.sync(self)
_la = self._input.LA(1)
while _la==VfrSyntaxParser.OR:
- self.state = 2508
+ self.state = 2511
self.match(VfrSyntaxParser.OR)
- self.state = 2509
+ self.state = 2512
self.andTerm(localctx.ExpInfo)
- self.state = 2514
+ self.state = 2517
self._errHandler.sync(self)
_la = self._input.LA(1)
@@ -16067,7 +16087,9 @@ class VfrSyntaxParser ( Parser ):
super().__init__(parent, invokingState)
self.parser = parser
self.ExpInfo = None
- self.CIfrAndList = []
+ self.Nodes = []
+ self.Line = None
+ self.L = None # Token
self.ExpInfo = ExpInfo
def bitwiseorTerm(self, i:int=None):
@@ -16102,17 +16124,17 @@ class VfrSyntaxParser ( Parser ):
self._la = 0 # Token type
try:
self.enterOuterAlt(localctx, 1)
- self.state = 2515
+ self.state = 2518
self.bitwiseorTerm(ExpInfo)
- self.state = 2520
+ self.state = 2523
self._errHandler.sync(self)
_la = self._input.LA(1)
while _la==VfrSyntaxParser.AND:
- self.state = 2516
- self.match(VfrSyntaxParser.AND)
- self.state = 2517
+ self.state = 2519
+ localctx.L = self.match(VfrSyntaxParser.AND)
+ self.state = 2520
self.bitwiseorTerm(ExpInfo)
- self.state = 2522
+ self.state = 2525
self._errHandler.sync(self)
_la = self._input.LA(1)
@@ -16131,7 +16153,9 @@ class VfrSyntaxParser ( Parser ):
super().__init__(parent, invokingState)
self.parser = parser
self.ExpInfo = None
- self.CIfrBitWiseOrList = []
+ self.Nodes = []
+ self.Line = None
+ self.L = None # Token
self.ExpInfo = ExpInfo
def bitwiseandTerm(self, i:int=None):
@@ -16166,17 +16190,17 @@ class VfrSyntaxParser ( Parser ):
self._la = 0 # Token type
try:
self.enterOuterAlt(localctx, 1)
- self.state = 2523
+ self.state = 2526
self.bitwiseandTerm(ExpInfo)
- self.state = 2528
+ self.state = 2531
self._errHandler.sync(self)
_la = self._input.LA(1)
while _la==VfrSyntaxParser.BitWiseOr:
- self.state = 2524
- self.match(VfrSyntaxParser.BitWiseOr)
- self.state = 2525
+ self.state = 2527
+ localctx.L = self.match(VfrSyntaxParser.BitWiseOr)
+ self.state = 2528
self.bitwiseandTerm(ExpInfo)
- self.state = 2530
+ self.state = 2533
self._errHandler.sync(self)
_la = self._input.LA(1)
@@ -16195,7 +16219,9 @@ class VfrSyntaxParser ( Parser ):
super().__init__(parent, invokingState)
self.parser = parser
self.ExpInfo = None
- self.CIfrBitWiseAndList = []
+ self.Nodes = []
+ self.Line = None
+ self.L = None # Token
self.ExpInfo = ExpInfo
def equalTerm(self, i:int=None):
@@ -16230,17 +16256,17 @@ class VfrSyntaxParser ( Parser ):
self._la = 0 # Token type
try:
self.enterOuterAlt(localctx, 1)
- self.state = 2531
+ self.state = 2534
self.equalTerm(ExpInfo)
- self.state = 2536
+ self.state = 2539
self._errHandler.sync(self)
_la = self._input.LA(1)
while _la==VfrSyntaxParser.BitWiseAnd:
- self.state = 2532
- self.match(VfrSyntaxParser.BitWiseAnd)
- self.state = 2533
+ self.state = 2535
+ localctx.L = self.match(VfrSyntaxParser.BitWiseAnd)
+ self.state = 2536
self.equalTerm(ExpInfo)
- self.state = 2538
+ self.state = 2541
self._errHandler.sync(self)
_la = self._input.LA(1)
@@ -16259,8 +16285,8 @@ class VfrSyntaxParser ( Parser ):
super().__init__(parent, invokingState)
self.parser = parser
self.ExpInfo = None
- self.CIfrEqualList = []
- self.CIfrNotEqualList = []
+ self.Nodes = []
+ self.Line = None
self.ExpInfo = ExpInfo
def compareTerm(self):
@@ -16293,15 +16319,15 @@ class VfrSyntaxParser ( Parser ):
self._la = 0 # Token type
try:
self.enterOuterAlt(localctx, 1)
- self.state = 2539
- self.compareTerm(localctx.ExpInfo)
- self.state = 2543
+ self.state = 2542
+ self.compareTerm(ExpInfo)
+ self.state = 2546
self._errHandler.sync(self)
_la = self._input.LA(1)
while _la==VfrSyntaxParser.Equal or _la==VfrSyntaxParser.NotEqual:
- self.state = 2540
- self.equalTermSupplementary(localctx.CIfrEqualList, localctx.CIfrNotEqualList, ExpInfo)
- self.state = 2545
+ self.state = 2543
+ self.equalTermSupplementary(ExpInfo)
+ self.state = 2548
self._errHandler.sync(self)
_la = self._input.LA(1)
@@ -16316,14 +16342,11 @@ class VfrSyntaxParser ( Parser ):
class EqualTermSupplementaryContext(ParserRuleContext):
- def __init__(self, parser, parent:ParserRuleContext=None, invokingState:int=-1, CIfrEqualList=None, CIfrNotEqualList=None, ExpInfo=None):
+ def __init__(self, parser, parent:ParserRuleContext=None, invokingState:int=-1, ExpInfo=None):
super().__init__(parent, invokingState)
self.parser = parser
- self.CIfrEqualList = None
- self.CIfrNotEqualList = None
self.ExpInfo = None
- self.CIfrEqualList = CIfrEqualList
- self.CIfrNotEqualList = CIfrNotEqualList
+ self.Nodes = []
self.ExpInfo = ExpInfo
@@ -16333,9 +16356,8 @@ class VfrSyntaxParser ( Parser ):
def copyFrom(self, ctx:ParserRuleContext):
super().copyFrom(ctx)
- self.CIfrEqualList = ctx.CIfrEqualList
- self.CIfrNotEqualList = ctx.CIfrNotEqualList
self.ExpInfo = ctx.ExpInfo
+ self.Nodes = ctx.Nodes
@@ -16378,28 +16400,28 @@ class VfrSyntaxParser ( Parser ):
- def equalTermSupplementary(self, CIfrEqualList, CIfrNotEqualList, ExpInfo):
+ def equalTermSupplementary(self, ExpInfo):
- localctx = VfrSyntaxParser.EqualTermSupplementaryContext(self, self._ctx, self.state, CIfrEqualList, CIfrNotEqualList, ExpInfo)
+ localctx = VfrSyntaxParser.EqualTermSupplementaryContext(self, self._ctx, self.state, ExpInfo)
self.enterRule(localctx, 302, self.RULE_equalTermSupplementary)
try:
- self.state = 2550
+ self.state = 2553
self._errHandler.sync(self)
token = self._input.LA(1)
if token in [VfrSyntaxParser.Equal]:
localctx = VfrSyntaxParser.EqualTermEqualRuleContext(self, localctx)
self.enterOuterAlt(localctx, 1)
- self.state = 2546
+ self.state = 2549
self.match(VfrSyntaxParser.Equal)
- self.state = 2547
+ self.state = 2550
self.compareTerm(ExpInfo)
pass
elif token in [VfrSyntaxParser.NotEqual]:
localctx = VfrSyntaxParser.EqualTermNotEqualRuleContext(self, localctx)
self.enterOuterAlt(localctx, 2)
- self.state = 2548
+ self.state = 2551
self.match(VfrSyntaxParser.NotEqual)
- self.state = 2549
+ self.state = 2552
self.compareTerm(ExpInfo)
pass
else:
@@ -16420,10 +16442,7 @@ class VfrSyntaxParser ( Parser ):
super().__init__(parent, invokingState)
self.parser = parser
self.ExpInfo = None
- self.CIfrLessThanList = []
- self.CIfrLessEqualList = []
- self.CIfrGreaterThanList = []
- self.CIfrGreaterEqualList = []
+ self.Nodes = []
self.ExpInfo = ExpInfo
def shiftTerm(self):
@@ -16456,15 +16475,15 @@ class VfrSyntaxParser ( Parser ):
self._la = 0 # Token type
try:
self.enterOuterAlt(localctx, 1)
- self.state = 2552
+ self.state = 2555
self.shiftTerm(ExpInfo)
- self.state = 2556
+ self.state = 2559
self._errHandler.sync(self)
_la = self._input.LA(1)
while (((_la) & ~0x3f) == 0 and ((1 << _la) & ((1 << VfrSyntaxParser.LessEqual) | (1 << VfrSyntaxParser.Less) | (1 << VfrSyntaxParser.GreaterEqual) | (1 << VfrSyntaxParser.Greater))) != 0):
- self.state = 2553
- self.compareTermSupplementary(localctx.CIfrLessThanList, localctx.CIfrLessEqualList, localctx.CIfrGreaterThanList, localctx.CIfrGreaterEqualList, ExpInfo)
- self.state = 2558
+ self.state = 2556
+ self.compareTermSupplementary(ExpInfo)
+ self.state = 2561
self._errHandler.sync(self)
_la = self._input.LA(1)
@@ -16479,18 +16498,11 @@ class VfrSyntaxParser ( Parser ):
class CompareTermSupplementaryContext(ParserRuleContext):
- def __init__(self, parser, parent:ParserRuleContext=None, invokingState:int=-1, CIfrLessThanList=None, CIfrLessEqualList=None, CIfrGreaterThanList=None, CIfrGreaterEqualList=None, ExpInfo=None):
+ def __init__(self, parser, parent:ParserRuleContext=None, invokingState:int=-1, ExpInfo=None):
super().__init__(parent, invokingState)
self.parser = parser
- self.CIfrLessThanList = None
- self.CIfrLessEqualList = None
- self.CIfrGreaterThanList = None
- self.CIfrGreaterEqualList = None
self.ExpInfo = None
- self.CIfrLessThanList = CIfrLessThanList
- self.CIfrLessEqualList = CIfrLessEqualList
- self.CIfrGreaterThanList = CIfrGreaterThanList
- self.CIfrGreaterEqualList = CIfrGreaterEqualList
+ self.Nodes = []
self.ExpInfo = ExpInfo
@@ -16500,11 +16512,8 @@ class VfrSyntaxParser ( Parser ):
def copyFrom(self, ctx:ParserRuleContext):
super().copyFrom(ctx)
- self.CIfrLessThanList = ctx.CIfrLessThanList
- self.CIfrLessEqualList = ctx.CIfrLessEqualList
- self.CIfrGreaterThanList = ctx.CIfrGreaterThanList
- self.CIfrGreaterEqualList = ctx.CIfrGreaterEqualList
self.ExpInfo = ctx.ExpInfo
+ self.Nodes = ctx.Nodes
@@ -16585,44 +16594,44 @@ class VfrSyntaxParser ( Parser ):
- def compareTermSupplementary(self, CIfrLessThanList, CIfrLessEqualList, CIfrGreaterThanList, CIfrGreaterEqualList, ExpInfo):
+ def compareTermSupplementary(self, ExpInfo):
- localctx = VfrSyntaxParser.CompareTermSupplementaryContext(self, self._ctx, self.state, CIfrLessThanList, CIfrLessEqualList, CIfrGreaterThanList, CIfrGreaterEqualList, ExpInfo)
+ localctx = VfrSyntaxParser.CompareTermSupplementaryContext(self, self._ctx, self.state, ExpInfo)
self.enterRule(localctx, 306, self.RULE_compareTermSupplementary)
try:
- self.state = 2567
+ self.state = 2570
self._errHandler.sync(self)
token = self._input.LA(1)
if token in [VfrSyntaxParser.Less]:
localctx = VfrSyntaxParser.CompareTermLessRuleContext(self, localctx)
self.enterOuterAlt(localctx, 1)
- self.state = 2559
+ self.state = 2562
self.match(VfrSyntaxParser.Less)
- self.state = 2560
+ self.state = 2563
self.shiftTerm(ExpInfo)
pass
elif token in [VfrSyntaxParser.LessEqual]:
localctx = VfrSyntaxParser.CompareTermLessEqualRuleContext(self, localctx)
self.enterOuterAlt(localctx, 2)
- self.state = 2561
+ self.state = 2564
self.match(VfrSyntaxParser.LessEqual)
- self.state = 2562
+ self.state = 2565
self.shiftTerm(ExpInfo)
pass
elif token in [VfrSyntaxParser.Greater]:
localctx = VfrSyntaxParser.CompareTermGreaterRuleContext(self, localctx)
self.enterOuterAlt(localctx, 3)
- self.state = 2563
+ self.state = 2566
self.match(VfrSyntaxParser.Greater)
- self.state = 2564
+ self.state = 2567
self.shiftTerm(ExpInfo)
pass
elif token in [VfrSyntaxParser.GreaterEqual]:
localctx = VfrSyntaxParser.CompareTermGreaterEqualRuleContext(self, localctx)
self.enterOuterAlt(localctx, 4)
- self.state = 2565
+ self.state = 2568
self.match(VfrSyntaxParser.GreaterEqual)
- self.state = 2566
+ self.state = 2569
self.shiftTerm(ExpInfo)
pass
else:
@@ -16643,8 +16652,7 @@ class VfrSyntaxParser ( Parser ):
super().__init__(parent, invokingState)
self.parser = parser
self.ExpInfo = None
- self.CIfrShiftLeftList = []
- self.CIfrShiftRightList = []
+ self.Nodes = []
self.ExpInfo = ExpInfo
def addMinusTerm(self):
@@ -16677,15 +16685,15 @@ class VfrSyntaxParser ( Parser ):
self._la = 0 # Token type
try:
self.enterOuterAlt(localctx, 1)
- self.state = 2569
+ self.state = 2572
self.addMinusTerm(ExpInfo)
- self.state = 2573
+ self.state = 2576
self._errHandler.sync(self)
_la = self._input.LA(1)
while _la==VfrSyntaxParser.T__9 or _la==VfrSyntaxParser.T__10:
- self.state = 2570
- self.shiftTermSupplementary(localctx.CIfrShiftLeftList, localctx.CIfrShiftRightList, ExpInfo)
- self.state = 2575
+ self.state = 2573
+ self.shiftTermSupplementary(ExpInfo)
+ self.state = 2578
self._errHandler.sync(self)
_la = self._input.LA(1)
@@ -16700,14 +16708,11 @@ class VfrSyntaxParser ( Parser ):
class ShiftTermSupplementaryContext(ParserRuleContext):
- def __init__(self, parser, parent:ParserRuleContext=None, invokingState:int=-1, CIfrShiftLeftList=None, CIfrShiftRightList=None, ExpInfo=None):
+ def __init__(self, parser, parent:ParserRuleContext=None, invokingState:int=-1, ExpInfo=None):
super().__init__(parent, invokingState)
self.parser = parser
- self.CIfrShiftLeftList = None
- self.CIfrShiftRightList = None
self.ExpInfo = None
- self.CIfrShiftLeftList = CIfrShiftLeftList
- self.CIfrShiftRightList = CIfrShiftRightList
+ self.Nodes = []
self.ExpInfo = ExpInfo
@@ -16717,9 +16722,8 @@ class VfrSyntaxParser ( Parser ):
def copyFrom(self, ctx:ParserRuleContext):
super().copyFrom(ctx)
- self.CIfrShiftLeftList = ctx.CIfrShiftLeftList
- self.CIfrShiftRightList = ctx.CIfrShiftRightList
self.ExpInfo = ctx.ExpInfo
+ self.Nodes = ctx.Nodes
@@ -16758,28 +16762,28 @@ class VfrSyntaxParser ( Parser ):
- def shiftTermSupplementary(self, CIfrShiftLeftList, CIfrShiftRightList, ExpInfo):
+ def shiftTermSupplementary(self, ExpInfo):
- localctx = VfrSyntaxParser.ShiftTermSupplementaryContext(self, self._ctx, self.state, CIfrShiftLeftList, CIfrShiftRightList, ExpInfo)
+ localctx = VfrSyntaxParser.ShiftTermSupplementaryContext(self, self._ctx, self.state, ExpInfo)
self.enterRule(localctx, 310, self.RULE_shiftTermSupplementary)
try:
- self.state = 2580
+ self.state = 2583
self._errHandler.sync(self)
token = self._input.LA(1)
if token in [VfrSyntaxParser.T__9]:
localctx = VfrSyntaxParser.ShiftTermLeftContext(self, localctx)
self.enterOuterAlt(localctx, 1)
- self.state = 2576
+ self.state = 2579
self.match(VfrSyntaxParser.T__9)
- self.state = 2577
+ self.state = 2580
self.addMinusTerm(ExpInfo)
pass
elif token in [VfrSyntaxParser.T__10]:
localctx = VfrSyntaxParser.ShiftTermRightContext(self, localctx)
self.enterOuterAlt(localctx, 2)
- self.state = 2578
+ self.state = 2581
self.match(VfrSyntaxParser.T__10)
- self.state = 2579
+ self.state = 2582
self.addMinusTerm(ExpInfo)
pass
else:
@@ -16800,8 +16804,7 @@ class VfrSyntaxParser ( Parser ):
super().__init__(parent, invokingState)
self.parser = parser
self.ExpInfo = None
- self.CIfrAddList = []
- self.CIfrSubtractList = []
+ self.Nodes = []
self.ExpInfo = ExpInfo
def multdivmodTerm(self):
@@ -16834,15 +16837,15 @@ class VfrSyntaxParser ( Parser ):
self._la = 0 # Token type
try:
self.enterOuterAlt(localctx, 1)
- self.state = 2582
+ self.state = 2585
self.multdivmodTerm(ExpInfo)
- self.state = 2586
+ self.state = 2589
self._errHandler.sync(self)
_la = self._input.LA(1)
while _la==VfrSyntaxParser.T__11 or _la==VfrSyntaxParser.Negative:
- self.state = 2583
- self.addMinusTermSupplementary(localctx.CIfrAddList, localctx.CIfrSubtractList, ExpInfo)
- self.state = 2588
+ self.state = 2586
+ self.addMinusTermSupplementary(ExpInfo)
+ self.state = 2591
self._errHandler.sync(self)
_la = self._input.LA(1)
@@ -16857,14 +16860,11 @@ class VfrSyntaxParser ( Parser ):
class AddMinusTermSupplementaryContext(ParserRuleContext):
- def __init__(self, parser, parent:ParserRuleContext=None, invokingState:int=-1, CIfrAddList=None, CIfrSubtractList=None, ExpInfo=None):
+ def __init__(self, parser, parent:ParserRuleContext=None, invokingState:int=-1, ExpInfo=None):
super().__init__(parent, invokingState)
self.parser = parser
- self.CIfrAddList = None
- self.CIfrSubtractList = None
self.ExpInfo = None
- self.CIfrAddList = CIfrAddList
- self.CIfrSubtractList = CIfrSubtractList
+ self.Nodes = []
self.ExpInfo = ExpInfo
@@ -16874,9 +16874,8 @@ class VfrSyntaxParser ( Parser ):
def copyFrom(self, ctx:ParserRuleContext):
super().copyFrom(ctx)
- self.CIfrAddList = ctx.CIfrAddList
- self.CIfrSubtractList = ctx.CIfrSubtractList
self.ExpInfo = ctx.ExpInfo
+ self.Nodes = ctx.Nodes
@@ -16917,28 +16916,28 @@ class VfrSyntaxParser ( Parser ):
- def addMinusTermSupplementary(self, CIfrAddList, CIfrSubtractList, ExpInfo):
+ def addMinusTermSupplementary(self, ExpInfo):
- localctx = VfrSyntaxParser.AddMinusTermSupplementaryContext(self, self._ctx, self.state, CIfrAddList, CIfrSubtractList, ExpInfo)
+ localctx = VfrSyntaxParser.AddMinusTermSupplementaryContext(self, self._ctx, self.state, ExpInfo)
self.enterRule(localctx, 314, self.RULE_addMinusTermSupplementary)
try:
- self.state = 2593
+ self.state = 2596
self._errHandler.sync(self)
token = self._input.LA(1)
if token in [VfrSyntaxParser.T__11]:
localctx = VfrSyntaxParser.AddMinusTermpAddContext(self, localctx)
self.enterOuterAlt(localctx, 1)
- self.state = 2589
+ self.state = 2592
self.match(VfrSyntaxParser.T__11)
- self.state = 2590
+ self.state = 2593
self.multdivmodTerm(ExpInfo)
pass
elif token in [VfrSyntaxParser.Negative]:
localctx = VfrSyntaxParser.AddMinusTermSubtractContext(self, localctx)
self.enterOuterAlt(localctx, 2)
- self.state = 2591
+ self.state = 2594
self.match(VfrSyntaxParser.Negative)
- self.state = 2592
+ self.state = 2595
self.multdivmodTerm(ExpInfo)
pass
else:
@@ -16959,9 +16958,7 @@ class VfrSyntaxParser ( Parser ):
super().__init__(parent, invokingState)
self.parser = parser
self.ExpInfo = None
- self.CIfrMultiplyList = []
- self.CIfrDivideList = []
- self.CIfrModuloList = []
+ self.Nodes = []
self.ExpInfo = ExpInfo
def castTerm(self):
@@ -16994,15 +16991,15 @@ class VfrSyntaxParser ( Parser ):
self._la = 0 # Token type
try:
self.enterOuterAlt(localctx, 1)
- self.state = 2595
+ self.state = 2598
self.castTerm(ExpInfo)
- self.state = 2599
+ self.state = 2602
self._errHandler.sync(self)
_la = self._input.LA(1)
while (((_la) & ~0x3f) == 0 and ((1 << _la) & ((1 << VfrSyntaxParser.T__12) | (1 << VfrSyntaxParser.T__13) | (1 << VfrSyntaxParser.Slash))) != 0):
- self.state = 2596
- self.multdivmodTermSupplementary(localctx.CIfrMultiplyList, localctx.CIfrDivideList, localctx.CIfrModuloList, ExpInfo)
- self.state = 2601
+ self.state = 2599
+ self.multdivmodTermSupplementary(ExpInfo)
+ self.state = 2604
self._errHandler.sync(self)
_la = self._input.LA(1)
@@ -17017,16 +17014,11 @@ class VfrSyntaxParser ( Parser ):
class MultdivmodTermSupplementaryContext(ParserRuleContext):
- def __init__(self, parser, parent:ParserRuleContext=None, invokingState:int=-1, CIfrMultiplyList=None, CIfrDivideList=None, CIfrModuloList=None, ExpInfo=None):
+ def __init__(self, parser, parent:ParserRuleContext=None, invokingState:int=-1, ExpInfo=None):
super().__init__(parent, invokingState)
self.parser = parser
- self.CIfrMultiplyList = None
- self.CIfrDivideList = None
- self.CIfrModuloList = None
self.ExpInfo = None
- self.CIfrMultiplyList = CIfrMultiplyList
- self.CIfrDivideList = CIfrDivideList
- self.CIfrModuloList = CIfrModuloList
+ self.Nodes = []
self.ExpInfo = ExpInfo
@@ -17036,10 +17028,8 @@ class VfrSyntaxParser ( Parser ):
def copyFrom(self, ctx:ParserRuleContext):
super().copyFrom(ctx)
- self.CIfrMultiplyList = ctx.CIfrMultiplyList
- self.CIfrDivideList = ctx.CIfrDivideList
- self.CIfrModuloList = ctx.CIfrModuloList
self.ExpInfo = ctx.ExpInfo
+ self.Nodes = ctx.Nodes
@@ -17097,36 +17087,36 @@ class VfrSyntaxParser ( Parser ):
- def multdivmodTermSupplementary(self, CIfrMultiplyList, CIfrDivideList, CIfrModuloList, ExpInfo):
+ def multdivmodTermSupplementary(self, ExpInfo):
- localctx = VfrSyntaxParser.MultdivmodTermSupplementaryContext(self, self._ctx, self.state, CIfrMultiplyList, CIfrDivideList, CIfrModuloList, ExpInfo)
+ localctx = VfrSyntaxParser.MultdivmodTermSupplementaryContext(self, self._ctx, self.state, ExpInfo)
self.enterRule(localctx, 318, self.RULE_multdivmodTermSupplementary)
try:
- self.state = 2608
+ self.state = 2611
self._errHandler.sync(self)
token = self._input.LA(1)
if token in [VfrSyntaxParser.T__12]:
localctx = VfrSyntaxParser.MultdivmodTermMulContext(self, localctx)
self.enterOuterAlt(localctx, 1)
- self.state = 2602
+ self.state = 2605
self.match(VfrSyntaxParser.T__12)
- self.state = 2603
+ self.state = 2606
self.castTerm(ExpInfo)
pass
elif token in [VfrSyntaxParser.Slash]:
localctx = VfrSyntaxParser.MultdivmodTermDivContext(self, localctx)
self.enterOuterAlt(localctx, 2)
- self.state = 2604
+ self.state = 2607
self.match(VfrSyntaxParser.Slash)
- self.state = 2605
+ self.state = 2608
self.castTerm(ExpInfo)
pass
elif token in [VfrSyntaxParser.T__13]:
localctx = VfrSyntaxParser.MultdivmodTermModuloContext(self, localctx)
self.enterOuterAlt(localctx, 3)
- self.state = 2606
+ self.state = 2609
self.match(VfrSyntaxParser.T__13)
- self.state = 2607
+ self.state = 2610
self.castTerm(ExpInfo)
pass
else:
@@ -17147,55 +17137,19 @@ class VfrSyntaxParser ( Parser ):
super().__init__(parent, invokingState)
self.parser = parser
self.ExpInfo = None
- self.TBObj = None
- self.TUObj = None
+ self.Nodes = []
self.ExpInfo = ExpInfo
def atomTerm(self):
return self.getTypedRuleContext(VfrSyntaxParser.AtomTermContext,0)
- def OpenParen(self, i:int=None):
- if i is None:
- return self.getTokens(VfrSyntaxParser.OpenParen)
- else:
- return self.getToken(VfrSyntaxParser.OpenParen, i)
-
- def CloseParen(self, i:int=None):
- if i is None:
- return self.getTokens(VfrSyntaxParser.CloseParen)
- else:
- return self.getToken(VfrSyntaxParser.CloseParen, i)
-
- def Boolean(self, i:int=None):
- if i is None:
- return self.getTokens(VfrSyntaxParser.Boolean)
- else:
- return self.getToken(VfrSyntaxParser.Boolean, i)
-
- def Uint64(self, i:int=None):
- if i is None:
- return self.getTokens(VfrSyntaxParser.Uint64)
- else:
- return self.getToken(VfrSyntaxParser.Uint64, i)
-
- def Uint32(self, i:int=None):
- if i is None:
- return self.getTokens(VfrSyntaxParser.Uint32)
- else:
- return self.getToken(VfrSyntaxParser.Uint32, i)
-
- def Uint16(self, i:int=None):
+ def castTermSub(self, i:int=None):
if i is None:
- return self.getTokens(VfrSyntaxParser.Uint16)
+ return self.getTypedRuleContexts(VfrSyntaxParser.CastTermSubContext)
else:
- return self.getToken(VfrSyntaxParser.Uint16, i)
+ return self.getTypedRuleContext(VfrSyntaxParser.CastTermSubContext,i)
- def Uint8(self, i:int=None):
- if i is None:
- return self.getTokens(VfrSyntaxParser.Uint8)
- else:
- return self.getToken(VfrSyntaxParser.Uint8, i)
def getRuleIndex(self):
return VfrSyntaxParser.RULE_castTerm
@@ -17213,30 +17167,20 @@ class VfrSyntaxParser ( Parser ):
localctx = VfrSyntaxParser.CastTermContext(self, self._ctx, self.state, ExpInfo)
self.enterRule(localctx, 320, self.RULE_castTerm)
- self._la = 0 # Token type
try:
self.enterOuterAlt(localctx, 1)
- self.state = 2615
+ self.state = 2616
self._errHandler.sync(self)
- _alt = self._interp.adaptivePredict(self._input,217,self._ctx)
+ _alt = self._interp.adaptivePredict(self._input,218,self._ctx)
while _alt!=2 and _alt!=ATN.INVALID_ALT_NUMBER:
if _alt==1:
- self.state = 2610
- self.match(VfrSyntaxParser.OpenParen)
- self.state = 2611
- _la = self._input.LA(1)
- if not(((((_la - 80)) & ~0x3f) == 0 and ((1 << (_la - 80)) & ((1 << (VfrSyntaxParser.Boolean - 80)) | (1 << (VfrSyntaxParser.Uint64 - 80)) | (1 << (VfrSyntaxParser.Uint32 - 80)) | (1 << (VfrSyntaxParser.Uint16 - 80)) | (1 << (VfrSyntaxParser.Uint8 - 80)))) != 0)):
- self._errHandler.recoverInline(self)
- else:
- self._errHandler.reportMatch(self)
- self.consume()
- self.state = 2612
- self.match(VfrSyntaxParser.CloseParen)
- self.state = 2617
+ self.state = 2613
+ self.castTermSub()
+ self.state = 2618
self._errHandler.sync(self)
- _alt = self._interp.adaptivePredict(self._input,217,self._ctx)
+ _alt = self._interp.adaptivePredict(self._input,218,self._ctx)
- self.state = 2618
+ self.state = 2619
self.atomTerm(ExpInfo)
except RecognitionException as re:
localctx.exception = re
@@ -17247,12 +17191,80 @@ class VfrSyntaxParser ( Parser ):
return localctx
+ class CastTermSubContext(ParserRuleContext):
+
+ def __init__(self, parser, parent:ParserRuleContext=None, invokingState:int=-1):
+ super().__init__(parent, invokingState)
+ self.parser = parser
+ self.CastType = 0xFF
+
+ def OpenParen(self):
+ return self.getToken(VfrSyntaxParser.OpenParen, 0)
+
+ def CloseParen(self):
+ return self.getToken(VfrSyntaxParser.CloseParen, 0)
+
+ def Boolean(self):
+ return self.getToken(VfrSyntaxParser.Boolean, 0)
+
+ def Uint64(self):
+ return self.getToken(VfrSyntaxParser.Uint64, 0)
+
+ def Uint32(self):
+ return self.getToken(VfrSyntaxParser.Uint32, 0)
+
+ def Uint16(self):
+ return self.getToken(VfrSyntaxParser.Uint16, 0)
+
+ def Uint8(self):
+ return self.getToken(VfrSyntaxParser.Uint8, 0)
+
+ def getRuleIndex(self):
+ return VfrSyntaxParser.RULE_castTermSub
+
+ def accept(self, visitor:ParseTreeVisitor):
+ if hasattr( visitor, "visitCastTermSub" ):
+ return visitor.visitCastTermSub(self)
+ else:
+ return visitor.visitChildren(self)
+
+
+
+
+ def castTermSub(self):
+
+ localctx = VfrSyntaxParser.CastTermSubContext(self, self._ctx, self.state)
+ self.enterRule(localctx, 322, self.RULE_castTermSub)
+ self._la = 0 # Token type
+ try:
+ self.enterOuterAlt(localctx, 1)
+ self.state = 2621
+ self.match(VfrSyntaxParser.OpenParen)
+ self.state = 2622
+ _la = self._input.LA(1)
+ if not(((((_la - 80)) & ~0x3f) == 0 and ((1 << (_la - 80)) & ((1 << (VfrSyntaxParser.Boolean - 80)) | (1 << (VfrSyntaxParser.Uint64 - 80)) | (1 << (VfrSyntaxParser.Uint32 - 80)) | (1 << (VfrSyntaxParser.Uint16 - 80)) | (1 << (VfrSyntaxParser.Uint8 - 80)))) != 0)):
+ self._errHandler.recoverInline(self)
+ else:
+ self._errHandler.reportMatch(self)
+ self.consume()
+ self.state = 2623
+ self.match(VfrSyntaxParser.CloseParen)
+ except RecognitionException as re:
+ localctx.exception = re
+ self._errHandler.reportError(self, re)
+ self._errHandler.recover(self, re)
+ finally:
+ self.exitRule()
+ return localctx
+
+
class AtomTermContext(ParserRuleContext):
def __init__(self, parser, parent:ParserRuleContext=None, invokingState:int=-1, ExpInfo=None):
super().__init__(parent, invokingState)
self.parser = parser
self.ExpInfo = None
+ self.Nodes = []
self.ExpInfo = ExpInfo
def vfrExpressionCatenate(self):
@@ -17313,79 +17325,65 @@ class VfrSyntaxParser ( Parser ):
def atomTerm(self, ExpInfo):
localctx = VfrSyntaxParser.AtomTermContext(self, self._ctx, self.state, ExpInfo)
- self.enterRule(localctx, 322, self.RULE_atomTerm)
+ self.enterRule(localctx, 324, self.RULE_atomTerm)
try:
- self.state = 2632
+ self.state = 2636
self._errHandler.sync(self)
- la_ = self._interp.adaptivePredict(self._input,218,self._ctx)
- if la_ == 1:
+ token = self._input.LA(1)
+ if token in [VfrSyntaxParser.Catenate]:
self.enterOuterAlt(localctx, 1)
- self.state = 2620
+ self.state = 2625
self.vfrExpressionCatenate(ExpInfo)
pass
-
- elif la_ == 2:
+ elif token in [VfrSyntaxParser.Match]:
self.enterOuterAlt(localctx, 2)
- self.state = 2621
+ self.state = 2626
self.vfrExpressionMatch(ExpInfo)
pass
-
- elif la_ == 3:
+ elif token in [VfrSyntaxParser.Match2]:
self.enterOuterAlt(localctx, 3)
- self.state = 2622
+ self.state = 2627
self.vfrExpressionMatch2(ExpInfo)
pass
-
- elif la_ == 4:
+ elif token in [VfrSyntaxParser.OpenParen]:
self.enterOuterAlt(localctx, 4)
- self.state = 2623
+ self.state = 2628
self.vfrExpressionParen(ExpInfo)
pass
-
- elif la_ == 5:
+ elif token in [VfrSyntaxParser.Dup, VfrSyntaxParser.VarEqVal, VfrSyntaxParser.IdEqVal, VfrSyntaxParser.IdEqId, VfrSyntaxParser.IdEqValList, VfrSyntaxParser.QuestionRef, VfrSyntaxParser.RuleRef, VfrSyntaxParser.StringRef, VfrSyntaxParser.PushThis, VfrSyntaxParser.Security, VfrSyntaxParser.Get]:
self.enterOuterAlt(localctx, 5)
- self.state = 2624
+ self.state = 2629
self.vfrExpressionBuildInFunction(ExpInfo)
pass
-
- elif la_ == 6:
+ elif token in [VfrSyntaxParser.TrueSymbol, VfrSyntaxParser.FalseSymbol, VfrSyntaxParser.One, VfrSyntaxParser.Ones, VfrSyntaxParser.Zero, VfrSyntaxParser.Undefined, VfrSyntaxParser.Version, VfrSyntaxParser.Number]:
self.enterOuterAlt(localctx, 6)
- self.state = 2625
+ self.state = 2630
self.vfrExpressionConstant(ExpInfo)
pass
-
- elif la_ == 7:
+ elif token in [VfrSyntaxParser.Length, VfrSyntaxParser.Set, VfrSyntaxParser.BitWiseNot, VfrSyntaxParser.BoolVal, VfrSyntaxParser.StringVal, VfrSyntaxParser.UnIntVal, VfrSyntaxParser.ToUpper, VfrSyntaxParser.ToLower, VfrSyntaxParser.QuestionRefVal, VfrSyntaxParser.StringRefVal]:
self.enterOuterAlt(localctx, 7)
- self.state = 2626
+ self.state = 2631
self.vfrExpressionUnaryOp(ExpInfo)
pass
-
- elif la_ == 8:
+ elif token in [VfrSyntaxParser.Cond, VfrSyntaxParser.Find, VfrSyntaxParser.Mid, VfrSyntaxParser.Tok, VfrSyntaxParser.Span]:
self.enterOuterAlt(localctx, 8)
- self.state = 2627
+ self.state = 2632
self.vfrExpressionTernaryOp(ExpInfo)
pass
-
- elif la_ == 9:
+ elif token in [VfrSyntaxParser.Map]:
self.enterOuterAlt(localctx, 9)
- self.state = 2628
+ self.state = 2633
self.vfrExpressionMap(ExpInfo)
pass
-
- elif la_ == 10:
+ elif token in [VfrSyntaxParser.NOT]:
self.enterOuterAlt(localctx, 10)
- self.state = 2629
+ self.state = 2634
self.match(VfrSyntaxParser.NOT)
- self.state = 2630
+ self.state = 2635
self.atomTerm(ExpInfo)
pass
-
- elif la_ == 11:
- self.enterOuterAlt(localctx, 11)
- self.state = 2631
- self.vfrExpressionMatch2(ExpInfo)
- pass
-
+ else:
+ raise NoViableAltException(self)
except RecognitionException as re:
localctx.exception = re
@@ -17402,7 +17400,7 @@ class VfrSyntaxParser ( Parser ):
super().__init__(parent, invokingState)
self.parser = parser
self.ExpInfo = None
- self.CObj = None
+ self.Nodes = []
self.ExpInfo = ExpInfo
def Catenate(self):
@@ -17439,20 +17437,20 @@ class VfrSyntaxParser ( Parser ):
def vfrExpressionCatenate(self, ExpInfo):
localctx = VfrSyntaxParser.VfrExpressionCatenateContext(self, self._ctx, self.state, ExpInfo)
- self.enterRule(localctx, 324, self.RULE_vfrExpressionCatenate)
+ self.enterRule(localctx, 326, self.RULE_vfrExpressionCatenate)
try:
self.enterOuterAlt(localctx, 1)
- self.state = 2634
+ self.state = 2638
self.match(VfrSyntaxParser.Catenate)
- self.state = 2635
+ self.state = 2639
self.match(VfrSyntaxParser.OpenParen)
- self.state = 2636
- self.vfrStatementExpressionSub()
- self.state = 2637
+ self.state = 2640
+ self.vfrStatementExpressionSub(localctx.Nodes)
+ self.state = 2641
self.match(VfrSyntaxParser.Comma)
- self.state = 2638
- self.vfrStatementExpressionSub()
- self.state = 2639
+ self.state = 2642
+ self.vfrStatementExpressionSub(localctx.Nodes)
+ self.state = 2643
self.match(VfrSyntaxParser.CloseParen)
except RecognitionException as re:
localctx.exception = re
@@ -17469,7 +17467,7 @@ class VfrSyntaxParser ( Parser ):
super().__init__(parent, invokingState)
self.parser = parser
self.ExpInfo = None
- self.MObj = None
+ self.Nodes = []
self.ExpInfo = ExpInfo
def Match(self):
@@ -17506,20 +17504,20 @@ class VfrSyntaxParser ( Parser ):
def vfrExpressionMatch(self, ExpInfo):
localctx = VfrSyntaxParser.VfrExpressionMatchContext(self, self._ctx, self.state, ExpInfo)
- self.enterRule(localctx, 326, self.RULE_vfrExpressionMatch)
+ self.enterRule(localctx, 328, self.RULE_vfrExpressionMatch)
try:
self.enterOuterAlt(localctx, 1)
- self.state = 2641
+ self.state = 2645
self.match(VfrSyntaxParser.Match)
- self.state = 2642
+ self.state = 2646
self.match(VfrSyntaxParser.OpenParen)
- self.state = 2643
- self.vfrStatementExpressionSub()
- self.state = 2644
+ self.state = 2647
+ self.vfrStatementExpressionSub(localctx.Nodes)
+ self.state = 2648
self.match(VfrSyntaxParser.Comma)
- self.state = 2645
- self.vfrStatementExpressionSub()
- self.state = 2646
+ self.state = 2649
+ self.vfrStatementExpressionSub(localctx.Nodes)
+ self.state = 2650
self.match(VfrSyntaxParser.CloseParen)
except RecognitionException as re:
localctx.exception = re
@@ -17536,7 +17534,7 @@ class VfrSyntaxParser ( Parser ):
super().__init__(parent, invokingState)
self.parser = parser
self.ExpInfo = None
- self.M2Obj = None
+ self.Nodes = []
self.ExpInfo = ExpInfo
def Match2(self):
@@ -17580,24 +17578,24 @@ class VfrSyntaxParser ( Parser ):
def vfrExpressionMatch2(self, ExpInfo):
localctx = VfrSyntaxParser.VfrExpressionMatch2Context(self, self._ctx, self.state, ExpInfo)
- self.enterRule(localctx, 328, self.RULE_vfrExpressionMatch2)
+ self.enterRule(localctx, 330, self.RULE_vfrExpressionMatch2)
try:
self.enterOuterAlt(localctx, 1)
- self.state = 2648
+ self.state = 2652
self.match(VfrSyntaxParser.Match2)
- self.state = 2649
+ self.state = 2653
self.match(VfrSyntaxParser.OpenParen)
- self.state = 2650
- self.vfrStatementExpressionSub()
- self.state = 2651
+ self.state = 2654
+ self.vfrStatementExpressionSub(localctx.Nodes)
+ self.state = 2655
self.match(VfrSyntaxParser.Comma)
- self.state = 2652
- self.vfrStatementExpressionSub()
- self.state = 2653
+ self.state = 2656
+ self.vfrStatementExpressionSub(localctx.Nodes)
+ self.state = 2657
self.match(VfrSyntaxParser.Comma)
- self.state = 2654
+ self.state = 2658
self.guidDefinition()
- self.state = 2655
+ self.state = 2659
self.match(VfrSyntaxParser.CloseParen)
except RecognitionException as re:
localctx.exception = re
@@ -17614,6 +17612,7 @@ class VfrSyntaxParser ( Parser ):
super().__init__(parent, invokingState)
self.parser = parser
self.ExpInfo = None
+ self.Nodes = []
self.ExpInfo = ExpInfo
def OpenParen(self):
@@ -17641,14 +17640,14 @@ class VfrSyntaxParser ( Parser ):
def vfrExpressionParen(self, ExpInfo):
localctx = VfrSyntaxParser.VfrExpressionParenContext(self, self._ctx, self.state, ExpInfo)
- self.enterRule(localctx, 330, self.RULE_vfrExpressionParen)
+ self.enterRule(localctx, 332, self.RULE_vfrExpressionParen)
try:
self.enterOuterAlt(localctx, 1)
- self.state = 2657
+ self.state = 2661
self.match(VfrSyntaxParser.OpenParen)
- self.state = 2658
- self.vfrStatementExpressionSub()
- self.state = 2659
+ self.state = 2662
+ self.vfrStatementExpressionSub(localctx.Nodes)
+ self.state = 2663
self.match(VfrSyntaxParser.CloseParen)
except RecognitionException as re:
localctx.exception = re
@@ -17665,6 +17664,7 @@ class VfrSyntaxParser ( Parser ):
super().__init__(parent, invokingState)
self.parser = parser
self.ExpInfo = None
+ self.Node = None
self.ExpInfo = ExpInfo
def dupExp(self):
@@ -17726,64 +17726,64 @@ class VfrSyntaxParser ( Parser ):
def vfrExpressionBuildInFunction(self, ExpInfo):
localctx = VfrSyntaxParser.VfrExpressionBuildInFunctionContext(self, self._ctx, self.state, ExpInfo)
- self.enterRule(localctx, 332, self.RULE_vfrExpressionBuildInFunction)
+ self.enterRule(localctx, 334, self.RULE_vfrExpressionBuildInFunction)
try:
- self.state = 2672
+ self.state = 2676
self._errHandler.sync(self)
token = self._input.LA(1)
if token in [VfrSyntaxParser.Dup]:
self.enterOuterAlt(localctx, 1)
- self.state = 2661
+ self.state = 2665
self.dupExp(ExpInfo)
pass
elif token in [VfrSyntaxParser.VarEqVal]:
self.enterOuterAlt(localctx, 2)
- self.state = 2662
+ self.state = 2666
self.vareqvalExp(ExpInfo)
pass
elif token in [VfrSyntaxParser.IdEqVal]:
self.enterOuterAlt(localctx, 3)
- self.state = 2663
+ self.state = 2667
self.ideqvalExp(ExpInfo)
pass
elif token in [VfrSyntaxParser.IdEqId]:
self.enterOuterAlt(localctx, 4)
- self.state = 2664
+ self.state = 2668
self.ideqidExp(ExpInfo)
pass
elif token in [VfrSyntaxParser.IdEqValList]:
self.enterOuterAlt(localctx, 5)
- self.state = 2665
+ self.state = 2669
self.ideqvallistExp(ExpInfo)
pass
elif token in [VfrSyntaxParser.QuestionRef]:
self.enterOuterAlt(localctx, 6)
- self.state = 2666
+ self.state = 2670
self.questionref1Exp(ExpInfo)
pass
elif token in [VfrSyntaxParser.RuleRef]:
self.enterOuterAlt(localctx, 7)
- self.state = 2667
+ self.state = 2671
self.rulerefExp(ExpInfo)
pass
elif token in [VfrSyntaxParser.StringRef]:
self.enterOuterAlt(localctx, 8)
- self.state = 2668
+ self.state = 2672
self.stringref1Exp(ExpInfo)
pass
elif token in [VfrSyntaxParser.PushThis]:
self.enterOuterAlt(localctx, 9)
- self.state = 2669
+ self.state = 2673
self.pushthisExp(ExpInfo)
pass
elif token in [VfrSyntaxParser.Security]:
self.enterOuterAlt(localctx, 10)
- self.state = 2670
+ self.state = 2674
self.securityExp(ExpInfo)
pass
elif token in [VfrSyntaxParser.Get]:
self.enterOuterAlt(localctx, 11)
- self.state = 2671
+ self.state = 2675
self.getExp(ExpInfo)
pass
else:
@@ -17804,7 +17804,7 @@ class VfrSyntaxParser ( Parser ):
super().__init__(parent, invokingState)
self.parser = parser
self.ExpInfo = None
- self.DObj = None
+ self.Node = IfrTreeNode(EFI_IFR_DUP_OP)
self.ExpInfo = ExpInfo
def Dup(self):
@@ -17825,10 +17825,10 @@ class VfrSyntaxParser ( Parser ):
def dupExp(self, ExpInfo):
localctx = VfrSyntaxParser.DupExpContext(self, self._ctx, self.state, ExpInfo)
- self.enterRule(localctx, 334, self.RULE_dupExp)
+ self.enterRule(localctx, 336, self.RULE_dupExp)
try:
self.enterOuterAlt(localctx, 1)
- self.state = 2674
+ self.state = 2678
self.match(VfrSyntaxParser.Dup)
except RecognitionException as re:
localctx.exception = re
@@ -17845,6 +17845,8 @@ class VfrSyntaxParser ( Parser ):
super().__init__(parent, invokingState)
self.parser = parser
self.ExpInfo = None
+ self.Node = None
+ self.VN = None # Token
self.ExpInfo = ExpInfo
def VarEqVal(self):
@@ -17856,15 +17858,15 @@ class VfrSyntaxParser ( Parser ):
def OpenParen(self):
return self.getToken(VfrSyntaxParser.OpenParen, 0)
+ def CloseParen(self):
+ return self.getToken(VfrSyntaxParser.CloseParen, 0)
+
def Number(self, i:int=None):
if i is None:
return self.getTokens(VfrSyntaxParser.Number)
else:
return self.getToken(VfrSyntaxParser.Number, i)
- def CloseParen(self):
- return self.getToken(VfrSyntaxParser.CloseParen, 0)
-
def Equal(self):
return self.getToken(VfrSyntaxParser.Equal, 0)
@@ -17895,50 +17897,50 @@ class VfrSyntaxParser ( Parser ):
def vareqvalExp(self, ExpInfo):
localctx = VfrSyntaxParser.VareqvalExpContext(self, self._ctx, self.state, ExpInfo)
- self.enterRule(localctx, 336, self.RULE_vareqvalExp)
+ self.enterRule(localctx, 338, self.RULE_vareqvalExp)
try:
self.enterOuterAlt(localctx, 1)
- self.state = 2676
+ self.state = 2680
self.match(VfrSyntaxParser.VarEqVal)
- self.state = 2677
+ self.state = 2681
self.match(VfrSyntaxParser.Var)
- self.state = 2678
+ self.state = 2682
self.match(VfrSyntaxParser.OpenParen)
- self.state = 2679
- self.match(VfrSyntaxParser.Number)
- self.state = 2680
+ self.state = 2683
+ localctx.VN = self.match(VfrSyntaxParser.Number)
+ self.state = 2684
self.match(VfrSyntaxParser.CloseParen)
- self.state = 2691
+ self.state = 2695
self._errHandler.sync(self)
token = self._input.LA(1)
if token in [VfrSyntaxParser.Equal]:
- self.state = 2681
+ self.state = 2685
self.match(VfrSyntaxParser.Equal)
- self.state = 2682
+ self.state = 2686
self.match(VfrSyntaxParser.Number)
pass
elif token in [VfrSyntaxParser.LessEqual]:
- self.state = 2683
+ self.state = 2687
self.match(VfrSyntaxParser.LessEqual)
- self.state = 2684
+ self.state = 2688
self.match(VfrSyntaxParser.Number)
pass
elif token in [VfrSyntaxParser.Less]:
- self.state = 2685
+ self.state = 2689
self.match(VfrSyntaxParser.Less)
- self.state = 2686
+ self.state = 2690
self.match(VfrSyntaxParser.Number)
pass
elif token in [VfrSyntaxParser.GreaterEqual]:
- self.state = 2687
+ self.state = 2691
self.match(VfrSyntaxParser.GreaterEqual)
- self.state = 2688
+ self.state = 2692
self.match(VfrSyntaxParser.Number)
pass
elif token in [VfrSyntaxParser.Greater]:
- self.state = 2689
+ self.state = 2693
self.match(VfrSyntaxParser.Greater)
- self.state = 2690
+ self.state = 2694
self.match(VfrSyntaxParser.Number)
pass
else:
@@ -17959,6 +17961,7 @@ class VfrSyntaxParser ( Parser ):
super().__init__(parent, invokingState)
self.parser = parser
self.ExpInfo = None
+ self.Node = None
self.I = None # Token
self.ExpInfo = ExpInfo
@@ -18002,44 +18005,44 @@ class VfrSyntaxParser ( Parser ):
def ideqvalExp(self, ExpInfo):
localctx = VfrSyntaxParser.IdeqvalExpContext(self, self._ctx, self.state, ExpInfo)
- self.enterRule(localctx, 338, self.RULE_ideqvalExp)
+ self.enterRule(localctx, 340, self.RULE_ideqvalExp)
try:
self.enterOuterAlt(localctx, 1)
- self.state = 2693
+ self.state = 2697
localctx.I = self.match(VfrSyntaxParser.IdEqVal)
- self.state = 2694
+ self.state = 2698
self.vfrQuestionDataFieldName()
- self.state = 2705
+ self.state = 2709
self._errHandler.sync(self)
token = self._input.LA(1)
if token in [VfrSyntaxParser.Equal]:
- self.state = 2695
+ self.state = 2699
self.match(VfrSyntaxParser.Equal)
- self.state = 2696
+ self.state = 2700
self.match(VfrSyntaxParser.Number)
pass
elif token in [VfrSyntaxParser.LessEqual]:
- self.state = 2697
+ self.state = 2701
self.match(VfrSyntaxParser.LessEqual)
- self.state = 2698
+ self.state = 2702
self.match(VfrSyntaxParser.Number)
pass
elif token in [VfrSyntaxParser.Less]:
- self.state = 2699
+ self.state = 2703
self.match(VfrSyntaxParser.Less)
- self.state = 2700
+ self.state = 2704
self.match(VfrSyntaxParser.Number)
pass
elif token in [VfrSyntaxParser.GreaterEqual]:
- self.state = 2701
+ self.state = 2705
self.match(VfrSyntaxParser.GreaterEqual)
- self.state = 2702
+ self.state = 2706
self.match(VfrSyntaxParser.Number)
pass
elif token in [VfrSyntaxParser.Greater]:
- self.state = 2703
+ self.state = 2707
self.match(VfrSyntaxParser.Greater)
- self.state = 2704
+ self.state = 2708
self.match(VfrSyntaxParser.Number)
pass
else:
@@ -18060,6 +18063,7 @@ class VfrSyntaxParser ( Parser ):
super().__init__(parent, invokingState)
self.parser = parser
self.ExpInfo = None
+ self.Node = None
self.I = None # Token
self.E = None # Token
self.LE = None # Token
@@ -18108,44 +18112,44 @@ class VfrSyntaxParser ( Parser ):
def ideqidExp(self, ExpInfo):
localctx = VfrSyntaxParser.IdeqidExpContext(self, self._ctx, self.state, ExpInfo)
- self.enterRule(localctx, 340, self.RULE_ideqidExp)
+ self.enterRule(localctx, 342, self.RULE_ideqidExp)
try:
self.enterOuterAlt(localctx, 1)
- self.state = 2707
+ self.state = 2711
localctx.I = self.match(VfrSyntaxParser.IdEqId)
- self.state = 2708
+ self.state = 2712
self.vfrQuestionDataFieldName()
- self.state = 2719
+ self.state = 2723
self._errHandler.sync(self)
token = self._input.LA(1)
if token in [VfrSyntaxParser.Equal]:
- self.state = 2709
+ self.state = 2713
localctx.E = self.match(VfrSyntaxParser.Equal)
- self.state = 2710
+ self.state = 2714
self.vfrQuestionDataFieldName()
pass
elif token in [VfrSyntaxParser.LessEqual]:
- self.state = 2711
+ self.state = 2715
localctx.LE = self.match(VfrSyntaxParser.LessEqual)
- self.state = 2712
+ self.state = 2716
self.vfrQuestionDataFieldName()
pass
elif token in [VfrSyntaxParser.Less]:
- self.state = 2713
+ self.state = 2717
localctx.L = self.match(VfrSyntaxParser.Less)
- self.state = 2714
+ self.state = 2718
self.vfrQuestionDataFieldName()
pass
elif token in [VfrSyntaxParser.GreaterEqual]:
- self.state = 2715
+ self.state = 2719
localctx.BE = self.match(VfrSyntaxParser.GreaterEqual)
- self.state = 2716
+ self.state = 2720
self.vfrQuestionDataFieldName()
pass
elif token in [VfrSyntaxParser.Greater]:
- self.state = 2717
+ self.state = 2721
localctx.B = self.match(VfrSyntaxParser.Greater)
- self.state = 2718
+ self.state = 2722
self.vfrQuestionDataFieldName()
pass
else:
@@ -18166,6 +18170,7 @@ class VfrSyntaxParser ( Parser ):
super().__init__(parent, invokingState)
self.parser = parser
self.ExpInfo = None
+ self.Node = None
self.ExpInfo = ExpInfo
def IdEqValList(self):
@@ -18199,23 +18204,23 @@ class VfrSyntaxParser ( Parser ):
def ideqvallistExp(self, ExpInfo):
localctx = VfrSyntaxParser.IdeqvallistExpContext(self, self._ctx, self.state, ExpInfo)
- self.enterRule(localctx, 342, self.RULE_ideqvallistExp)
+ self.enterRule(localctx, 344, self.RULE_ideqvallistExp)
self._la = 0 # Token type
try:
self.enterOuterAlt(localctx, 1)
- self.state = 2721
+ self.state = 2725
self.match(VfrSyntaxParser.IdEqValList)
- self.state = 2722
+ self.state = 2726
self.vfrQuestionDataFieldName()
- self.state = 2723
+ self.state = 2727
self.match(VfrSyntaxParser.Equal)
- self.state = 2725
+ self.state = 2729
self._errHandler.sync(self)
_la = self._input.LA(1)
while True:
- self.state = 2724
+ self.state = 2728
self.match(VfrSyntaxParser.Number)
- self.state = 2727
+ self.state = 2731
self._errHandler.sync(self)
_la = self._input.LA(1)
if not (_la==VfrSyntaxParser.Number):
@@ -18310,39 +18315,39 @@ class VfrSyntaxParser ( Parser ):
def vfrQuestionDataFieldName(self):
localctx = VfrSyntaxParser.VfrQuestionDataFieldNameContext(self, self._ctx, self.state)
- self.enterRule(localctx, 344, self.RULE_vfrQuestionDataFieldName)
+ self.enterRule(localctx, 346, self.RULE_vfrQuestionDataFieldName)
self._la = 0 # Token type
try:
- self.state = 2741
+ self.state = 2745
self._errHandler.sync(self)
- la_ = self._interp.adaptivePredict(self._input,225,self._ctx)
+ la_ = self._interp.adaptivePredict(self._input,226,self._ctx)
if la_ == 1:
localctx = VfrSyntaxParser.VfrQuestionDataFieldNameRule1Context(self, localctx)
self.enterOuterAlt(localctx, 1)
- self.state = 2729
+ self.state = 2733
localctx.SN1 = self.match(VfrSyntaxParser.StringIdentifier)
- self.state = 2730
+ self.state = 2734
self.match(VfrSyntaxParser.OpenBracket)
- self.state = 2731
+ self.state = 2735
localctx.I = self.match(VfrSyntaxParser.Number)
- self.state = 2732
+ self.state = 2736
self.match(VfrSyntaxParser.CloseBracket)
pass
elif la_ == 2:
localctx = VfrSyntaxParser.VfrQuestionDataFieldNameRule2Context(self, localctx)
self.enterOuterAlt(localctx, 2)
- self.state = 2733
+ self.state = 2737
localctx.SN2 = self.match(VfrSyntaxParser.StringIdentifier)
- self.state = 2738
+ self.state = 2742
self._errHandler.sync(self)
_la = self._input.LA(1)
while _la==VfrSyntaxParser.Dot:
- self.state = 2734
+ self.state = 2738
self.match(VfrSyntaxParser.Dot)
- self.state = 2735
+ self.state = 2739
self.arrayName()
- self.state = 2740
+ self.state = 2744
self._errHandler.sync(self)
_la = self._input.LA(1)
@@ -18394,21 +18399,21 @@ class VfrSyntaxParser ( Parser ):
def arrayName(self):
localctx = VfrSyntaxParser.ArrayNameContext(self, self._ctx, self.state)
- self.enterRule(localctx, 346, self.RULE_arrayName)
+ self.enterRule(localctx, 348, self.RULE_arrayName)
self._la = 0 # Token type
try:
self.enterOuterAlt(localctx, 1)
- self.state = 2743
- self.match(VfrSyntaxParser.StringIdentifier)
self.state = 2747
+ self.match(VfrSyntaxParser.StringIdentifier)
+ self.state = 2751
self._errHandler.sync(self)
_la = self._input.LA(1)
if _la==VfrSyntaxParser.OpenBracket:
- self.state = 2744
+ self.state = 2748
self.match(VfrSyntaxParser.OpenBracket)
- self.state = 2745
+ self.state = 2749
localctx.N = self.match(VfrSyntaxParser.Number)
- self.state = 2746
+ self.state = 2750
self.match(VfrSyntaxParser.CloseBracket)
@@ -18427,6 +18432,7 @@ class VfrSyntaxParser ( Parser ):
super().__init__(parent, invokingState)
self.parser = parser
self.ExpInfo = None
+ self.Node = IfrTreeNode(EFI_IFR_QUESTION_REF1_OP)
self.ExpInfo = ExpInfo
def QuestionRef(self):
@@ -18459,22 +18465,22 @@ class VfrSyntaxParser ( Parser ):
def questionref1Exp(self, ExpInfo):
localctx = VfrSyntaxParser.Questionref1ExpContext(self, self._ctx, self.state, ExpInfo)
- self.enterRule(localctx, 348, self.RULE_questionref1Exp)
+ self.enterRule(localctx, 350, self.RULE_questionref1Exp)
self._la = 0 # Token type
try:
self.enterOuterAlt(localctx, 1)
- self.state = 2749
+ self.state = 2753
self.match(VfrSyntaxParser.QuestionRef)
- self.state = 2750
+ self.state = 2754
self.match(VfrSyntaxParser.OpenParen)
- self.state = 2751
+ self.state = 2755
_la = self._input.LA(1)
if not(_la==VfrSyntaxParser.Number or _la==VfrSyntaxParser.StringIdentifier):
self._errHandler.recoverInline(self)
else:
self._errHandler.reportMatch(self)
self.consume()
- self.state = 2752
+ self.state = 2756
self.match(VfrSyntaxParser.CloseParen)
except RecognitionException as re:
localctx.exception = re
@@ -18491,6 +18497,7 @@ class VfrSyntaxParser ( Parser ):
super().__init__(parent, invokingState)
self.parser = parser
self.ExpInfo = None
+ self.Node = IfrTreeNode(EFI_IFR_RULE_REF_OP)
self.ExpInfo = ExpInfo
def RuleRef(self):
@@ -18520,16 +18527,16 @@ class VfrSyntaxParser ( Parser ):
def rulerefExp(self, ExpInfo):
localctx = VfrSyntaxParser.RulerefExpContext(self, self._ctx, self.state, ExpInfo)
- self.enterRule(localctx, 350, self.RULE_rulerefExp)
+ self.enterRule(localctx, 352, self.RULE_rulerefExp)
try:
self.enterOuterAlt(localctx, 1)
- self.state = 2754
+ self.state = 2758
self.match(VfrSyntaxParser.RuleRef)
- self.state = 2755
+ self.state = 2759
self.match(VfrSyntaxParser.OpenParen)
- self.state = 2756
+ self.state = 2760
self.match(VfrSyntaxParser.StringIdentifier)
- self.state = 2757
+ self.state = 2761
self.match(VfrSyntaxParser.CloseParen)
except RecognitionException as re:
localctx.exception = re
@@ -18546,6 +18553,7 @@ class VfrSyntaxParser ( Parser ):
super().__init__(parent, invokingState)
self.parser = parser
self.ExpInfo = None
+ self.Node = IfrTreeNode(EFI_IFR_STRING_REF1_OP)
self.ExpInfo = ExpInfo
def StringRef(self):
@@ -18584,34 +18592,34 @@ class VfrSyntaxParser ( Parser ):
def stringref1Exp(self, ExpInfo):
localctx = VfrSyntaxParser.Stringref1ExpContext(self, self._ctx, self.state, ExpInfo)
- self.enterRule(localctx, 352, self.RULE_stringref1Exp)
+ self.enterRule(localctx, 354, self.RULE_stringref1Exp)
try:
self.enterOuterAlt(localctx, 1)
- self.state = 2759
+ self.state = 2763
self.match(VfrSyntaxParser.StringRef)
- self.state = 2760
+ self.state = 2764
self.match(VfrSyntaxParser.OpenParen)
- self.state = 2766
+ self.state = 2770
self._errHandler.sync(self)
token = self._input.LA(1)
if token in [VfrSyntaxParser.StringToken]:
- self.state = 2761
+ self.state = 2765
self.match(VfrSyntaxParser.StringToken)
- self.state = 2762
+ self.state = 2766
self.match(VfrSyntaxParser.OpenParen)
- self.state = 2763
+ self.state = 2767
self.match(VfrSyntaxParser.Number)
- self.state = 2764
+ self.state = 2768
self.match(VfrSyntaxParser.CloseParen)
pass
elif token in [VfrSyntaxParser.Number]:
- self.state = 2765
+ self.state = 2769
self.match(VfrSyntaxParser.Number)
pass
else:
raise NoViableAltException(self)
- self.state = 2768
+ self.state = 2772
self.match(VfrSyntaxParser.CloseParen)
except RecognitionException as re:
localctx.exception = re
@@ -18628,6 +18636,7 @@ class VfrSyntaxParser ( Parser ):
super().__init__(parent, invokingState)
self.parser = parser
self.ExpInfo = None
+ self.Node = IfrTreeNode(EFI_IFR_THIS_OP)
self.ExpInfo = ExpInfo
def PushThis(self):
@@ -18648,10 +18657,10 @@ class VfrSyntaxParser ( Parser ):
def pushthisExp(self, ExpInfo):
localctx = VfrSyntaxParser.PushthisExpContext(self, self._ctx, self.state, ExpInfo)
- self.enterRule(localctx, 354, self.RULE_pushthisExp)
+ self.enterRule(localctx, 356, self.RULE_pushthisExp)
try:
self.enterOuterAlt(localctx, 1)
- self.state = 2770
+ self.state = 2774
self.match(VfrSyntaxParser.PushThis)
except RecognitionException as re:
localctx.exception = re
@@ -18668,6 +18677,7 @@ class VfrSyntaxParser ( Parser ):
super().__init__(parent, invokingState)
self.parser = parser
self.ExpInfo = None
+ self.Node = IfrTreeNode(EFI_IFR_SECURITY_OP)
self.ExpInfo = ExpInfo
def Security(self):
@@ -18698,16 +18708,16 @@ class VfrSyntaxParser ( Parser ):
def securityExp(self, ExpInfo):
localctx = VfrSyntaxParser.SecurityExpContext(self, self._ctx, self.state, ExpInfo)
- self.enterRule(localctx, 356, self.RULE_securityExp)
+ self.enterRule(localctx, 358, self.RULE_securityExp)
try:
self.enterOuterAlt(localctx, 1)
- self.state = 2772
+ self.state = 2776
self.match(VfrSyntaxParser.Security)
- self.state = 2773
+ self.state = 2777
self.match(VfrSyntaxParser.OpenParen)
- self.state = 2774
+ self.state = 2778
self.guidDefinition()
- self.state = 2775
+ self.state = 2779
self.match(VfrSyntaxParser.CloseParen)
except RecognitionException as re:
localctx.exception = re
@@ -18752,11 +18762,11 @@ class VfrSyntaxParser ( Parser ):
def numericVarStoreType(self):
localctx = VfrSyntaxParser.NumericVarStoreTypeContext(self, self._ctx, self.state)
- self.enterRule(localctx, 358, self.RULE_numericVarStoreType)
+ self.enterRule(localctx, 360, self.RULE_numericVarStoreType)
self._la = 0 # Token type
try:
self.enterOuterAlt(localctx, 1)
- self.state = 2777
+ self.state = 2781
_la = self._input.LA(1)
if not(((((_la - 237)) & ~0x3f) == 0 and ((1 << (_la - 237)) & ((1 << (VfrSyntaxParser.NumericSizeOne - 237)) | (1 << (VfrSyntaxParser.NumericSizeTwo - 237)) | (1 << (VfrSyntaxParser.NumericSizeFour - 237)) | (1 << (VfrSyntaxParser.NumericSizeEight - 237)))) != 0)):
self._errHandler.recoverInline(self)
@@ -18779,7 +18789,7 @@ class VfrSyntaxParser ( Parser ):
self.parser = parser
self.ExpInfo = None
self.BaseInfo = EFI_VARSTORE_INFO()
- self.GObj = None
+ self.Node = IfrTreeNode(EFI_IFR_GET_OP)
self.ExpInfo = ExpInfo
def Get(self):
@@ -18820,31 +18830,31 @@ class VfrSyntaxParser ( Parser ):
def getExp(self, ExpInfo):
localctx = VfrSyntaxParser.GetExpContext(self, self._ctx, self.state, ExpInfo)
- self.enterRule(localctx, 360, self.RULE_getExp)
+ self.enterRule(localctx, 362, self.RULE_getExp)
self._la = 0 # Token type
try:
self.enterOuterAlt(localctx, 1)
- self.state = 2779
+ self.state = 2783
self.match(VfrSyntaxParser.Get)
- self.state = 2780
+ self.state = 2784
self.match(VfrSyntaxParser.OpenParen)
- self.state = 2781
+ self.state = 2785
self.vfrStorageVarId(localctx.BaseInfo, False)
- self.state = 2786
+ self.state = 2790
self._errHandler.sync(self)
_la = self._input.LA(1)
if _la==VfrSyntaxParser.BitWiseOr:
- self.state = 2782
+ self.state = 2786
self.match(VfrSyntaxParser.BitWiseOr)
- self.state = 2783
+ self.state = 2787
self.match(VfrSyntaxParser.FLAGS)
- self.state = 2784
+ self.state = 2788
self.match(VfrSyntaxParser.T__5)
- self.state = 2785
+ self.state = 2789
self.numericVarStoreType()
- self.state = 2788
+ self.state = 2792
self.match(VfrSyntaxParser.CloseParen)
except RecognitionException as re:
localctx.exception = re
@@ -18861,6 +18871,7 @@ class VfrSyntaxParser ( Parser ):
super().__init__(parent, invokingState)
self.parser = parser
self.ExpInfo = None
+ self.Node = None
self.ExpInfo = ExpInfo
def TrueSymbol(self):
@@ -18902,11 +18913,11 @@ class VfrSyntaxParser ( Parser ):
def vfrExpressionConstant(self, ExpInfo):
localctx = VfrSyntaxParser.VfrExpressionConstantContext(self, self._ctx, self.state, ExpInfo)
- self.enterRule(localctx, 362, self.RULE_vfrExpressionConstant)
+ self.enterRule(localctx, 364, self.RULE_vfrExpressionConstant)
self._la = 0 # Token type
try:
self.enterOuterAlt(localctx, 1)
- self.state = 2790
+ self.state = 2794
_la = self._input.LA(1)
if not(((((_la - 209)) & ~0x3f) == 0 and ((1 << (_la - 209)) & ((1 << (VfrSyntaxParser.TrueSymbol - 209)) | (1 << (VfrSyntaxParser.FalseSymbol - 209)) | (1 << (VfrSyntaxParser.One - 209)) | (1 << (VfrSyntaxParser.Ones - 209)) | (1 << (VfrSyntaxParser.Zero - 209)) | (1 << (VfrSyntaxParser.Undefined - 209)) | (1 << (VfrSyntaxParser.Version - 209)) | (1 << (VfrSyntaxParser.Number - 209)))) != 0)):
self._errHandler.recoverInline(self)
@@ -18928,6 +18939,7 @@ class VfrSyntaxParser ( Parser ):
super().__init__(parent, invokingState)
self.parser = parser
self.ExpInfo = None
+ self.Nodes = None
self.ExpInfo = ExpInfo
def lengthExp(self):
@@ -18985,59 +18997,59 @@ class VfrSyntaxParser ( Parser ):
def vfrExpressionUnaryOp(self, ExpInfo):
localctx = VfrSyntaxParser.VfrExpressionUnaryOpContext(self, self._ctx, self.state, ExpInfo)
- self.enterRule(localctx, 364, self.RULE_vfrExpressionUnaryOp)
+ self.enterRule(localctx, 366, self.RULE_vfrExpressionUnaryOp)
try:
- self.state = 2802
+ self.state = 2806
self._errHandler.sync(self)
token = self._input.LA(1)
if token in [VfrSyntaxParser.Length]:
self.enterOuterAlt(localctx, 1)
- self.state = 2792
+ self.state = 2796
self.lengthExp(ExpInfo)
pass
elif token in [VfrSyntaxParser.BitWiseNot]:
self.enterOuterAlt(localctx, 2)
- self.state = 2793
+ self.state = 2797
self.bitwisenotExp(ExpInfo)
pass
elif token in [VfrSyntaxParser.QuestionRefVal]:
self.enterOuterAlt(localctx, 3)
- self.state = 2794
+ self.state = 2798
self.question23refExp(ExpInfo)
pass
elif token in [VfrSyntaxParser.StringRefVal]:
self.enterOuterAlt(localctx, 4)
- self.state = 2795
+ self.state = 2799
self.stringref2Exp(ExpInfo)
pass
elif token in [VfrSyntaxParser.BoolVal]:
self.enterOuterAlt(localctx, 5)
- self.state = 2796
+ self.state = 2800
self.toboolExp(ExpInfo)
pass
elif token in [VfrSyntaxParser.StringVal]:
self.enterOuterAlt(localctx, 6)
- self.state = 2797
+ self.state = 2801
self.tostringExp(ExpInfo)
pass
elif token in [VfrSyntaxParser.UnIntVal]:
self.enterOuterAlt(localctx, 7)
- self.state = 2798
+ self.state = 2802
self.unintExp(ExpInfo)
pass
elif token in [VfrSyntaxParser.ToUpper]:
self.enterOuterAlt(localctx, 8)
- self.state = 2799
+ self.state = 2803
self.toupperExp(ExpInfo)
pass
elif token in [VfrSyntaxParser.ToLower]:
self.enterOuterAlt(localctx, 9)
- self.state = 2800
+ self.state = 2804
self.tolwerExp(ExpInfo)
pass
elif token in [VfrSyntaxParser.Set]:
self.enterOuterAlt(localctx, 10)
- self.state = 2801
+ self.state = 2805
self.setExp(ExpInfo)
pass
else:
@@ -19058,7 +19070,7 @@ class VfrSyntaxParser ( Parser ):
super().__init__(parent, invokingState)
self.parser = parser
self.ExpInfo = None
- self.LObj = None
+ self.Nodes = []
self.ExpInfo = ExpInfo
def Length(self):
@@ -19089,16 +19101,16 @@ class VfrSyntaxParser ( Parser ):
def lengthExp(self, ExpInfo):
localctx = VfrSyntaxParser.LengthExpContext(self, self._ctx, self.state, ExpInfo)
- self.enterRule(localctx, 366, self.RULE_lengthExp)
+ self.enterRule(localctx, 368, self.RULE_lengthExp)
try:
self.enterOuterAlt(localctx, 1)
- self.state = 2804
+ self.state = 2808
self.match(VfrSyntaxParser.Length)
- self.state = 2805
+ self.state = 2809
self.match(VfrSyntaxParser.OpenParen)
- self.state = 2806
- self.vfrStatementExpressionSub()
- self.state = 2807
+ self.state = 2810
+ self.vfrStatementExpressionSub(localctx.Nodes)
+ self.state = 2811
self.match(VfrSyntaxParser.CloseParen)
except RecognitionException as re:
localctx.exception = re
@@ -19115,7 +19127,7 @@ class VfrSyntaxParser ( Parser ):
super().__init__(parent, invokingState)
self.parser = parser
self.ExpInfo = None
- self.BWNObj = None
+ self.Nodes = []
self.ExpInfo = ExpInfo
def BitWiseNot(self):
@@ -19146,16 +19158,16 @@ class VfrSyntaxParser ( Parser ):
def bitwisenotExp(self, ExpInfo):
localctx = VfrSyntaxParser.BitwisenotExpContext(self, self._ctx, self.state, ExpInfo)
- self.enterRule(localctx, 368, self.RULE_bitwisenotExp)
+ self.enterRule(localctx, 370, self.RULE_bitwisenotExp)
try:
self.enterOuterAlt(localctx, 1)
- self.state = 2809
+ self.state = 2813
self.match(VfrSyntaxParser.BitWiseNot)
- self.state = 2810
+ self.state = 2814
self.match(VfrSyntaxParser.OpenParen)
- self.state = 2811
- self.vfrStatementExpressionSub()
- self.state = 2812
+ self.state = 2815
+ self.vfrStatementExpressionSub(localctx.Nodes)
+ self.state = 2816
self.match(VfrSyntaxParser.CloseParen)
except RecognitionException as re:
localctx.exception = re
@@ -19172,6 +19184,7 @@ class VfrSyntaxParser ( Parser ):
super().__init__(parent, invokingState)
self.parser = parser
self.ExpInfo = None
+ self.Nodes = []
self.ExpInfo = ExpInfo
def QuestionRefVal(self):
@@ -19230,51 +19243,51 @@ class VfrSyntaxParser ( Parser ):
def question23refExp(self, ExpInfo):
localctx = VfrSyntaxParser.Question23refExpContext(self, self._ctx, self.state, ExpInfo)
- self.enterRule(localctx, 370, self.RULE_question23refExp)
+ self.enterRule(localctx, 372, self.RULE_question23refExp)
self._la = 0 # Token type
try:
self.enterOuterAlt(localctx, 1)
- self.state = 2814
+ self.state = 2818
self.match(VfrSyntaxParser.QuestionRefVal)
- self.state = 2815
+ self.state = 2819
self.match(VfrSyntaxParser.OpenParen)
- self.state = 2823
+ self.state = 2827
self._errHandler.sync(self)
_la = self._input.LA(1)
if _la==VfrSyntaxParser.DevicePath:
- self.state = 2816
+ self.state = 2820
self.match(VfrSyntaxParser.DevicePath)
- self.state = 2817
+ self.state = 2821
self.match(VfrSyntaxParser.T__5)
- self.state = 2818
+ self.state = 2822
self.match(VfrSyntaxParser.StringToken)
- self.state = 2819
+ self.state = 2823
self.match(VfrSyntaxParser.OpenParen)
- self.state = 2820
+ self.state = 2824
self.match(VfrSyntaxParser.Number)
- self.state = 2821
+ self.state = 2825
self.match(VfrSyntaxParser.CloseParen)
- self.state = 2822
+ self.state = 2826
self.match(VfrSyntaxParser.Comma)
- self.state = 2830
+ self.state = 2834
self._errHandler.sync(self)
_la = self._input.LA(1)
if _la==VfrSyntaxParser.Uuid:
- self.state = 2825
+ self.state = 2829
self.match(VfrSyntaxParser.Uuid)
- self.state = 2826
+ self.state = 2830
self.match(VfrSyntaxParser.T__5)
- self.state = 2827
+ self.state = 2831
self.guidDefinition()
- self.state = 2828
+ self.state = 2832
self.match(VfrSyntaxParser.Comma)
- self.state = 2832
- self.vfrStatementExpressionSub()
- self.state = 2833
+ self.state = 2836
+ self.vfrStatementExpressionSub(localctx.Nodes)
+ self.state = 2837
self.match(VfrSyntaxParser.CloseParen)
except RecognitionException as re:
localctx.exception = re
@@ -19291,7 +19304,7 @@ class VfrSyntaxParser ( Parser ):
super().__init__(parent, invokingState)
self.parser = parser
self.ExpInfo = None
- self.SR2Obj = None
+ self.Nodes = []
self.ExpInfo = ExpInfo
def StringRefVal(self):
@@ -19322,16 +19335,16 @@ class VfrSyntaxParser ( Parser ):
def stringref2Exp(self, ExpInfo):
localctx = VfrSyntaxParser.Stringref2ExpContext(self, self._ctx, self.state, ExpInfo)
- self.enterRule(localctx, 372, self.RULE_stringref2Exp)
+ self.enterRule(localctx, 374, self.RULE_stringref2Exp)
try:
self.enterOuterAlt(localctx, 1)
- self.state = 2835
+ self.state = 2839
self.match(VfrSyntaxParser.StringRefVal)
- self.state = 2836
+ self.state = 2840
self.match(VfrSyntaxParser.OpenParen)
- self.state = 2837
- self.vfrStatementExpressionSub()
- self.state = 2838
+ self.state = 2841
+ self.vfrStatementExpressionSub(localctx.Nodes)
+ self.state = 2842
self.match(VfrSyntaxParser.CloseParen)
except RecognitionException as re:
localctx.exception = re
@@ -19348,7 +19361,7 @@ class VfrSyntaxParser ( Parser ):
super().__init__(parent, invokingState)
self.parser = parser
self.ExpInfo = None
- self.TBObj = None
+ self.Nodes = []
self.ExpInfo = ExpInfo
def BoolVal(self):
@@ -19379,16 +19392,16 @@ class VfrSyntaxParser ( Parser ):
def toboolExp(self, ExpInfo):
localctx = VfrSyntaxParser.ToboolExpContext(self, self._ctx, self.state, ExpInfo)
- self.enterRule(localctx, 374, self.RULE_toboolExp)
+ self.enterRule(localctx, 376, self.RULE_toboolExp)
try:
self.enterOuterAlt(localctx, 1)
- self.state = 2840
+ self.state = 2844
self.match(VfrSyntaxParser.BoolVal)
- self.state = 2841
+ self.state = 2845
self.match(VfrSyntaxParser.OpenParen)
- self.state = 2842
- self.vfrStatementExpressionSub()
- self.state = 2843
+ self.state = 2846
+ self.vfrStatementExpressionSub(localctx.Nodes)
+ self.state = 2847
self.match(VfrSyntaxParser.CloseParen)
except RecognitionException as re:
localctx.exception = re
@@ -19405,7 +19418,7 @@ class VfrSyntaxParser ( Parser ):
super().__init__(parent, invokingState)
self.parser = parser
self.ExpInfo = None
- self.TSObj = None
+ self.Nodes = []
self.ExpInfo = ExpInfo
def StringVal(self):
@@ -19442,31 +19455,31 @@ class VfrSyntaxParser ( Parser ):
def tostringExp(self, ExpInfo):
localctx = VfrSyntaxParser.TostringExpContext(self, self._ctx, self.state, ExpInfo)
- self.enterRule(localctx, 376, self.RULE_tostringExp)
+ self.enterRule(localctx, 378, self.RULE_tostringExp)
self._la = 0 # Token type
try:
self.enterOuterAlt(localctx, 1)
- self.state = 2845
+ self.state = 2849
self.match(VfrSyntaxParser.StringVal)
- self.state = 2850
+ self.state = 2854
self._errHandler.sync(self)
_la = self._input.LA(1)
if _la==VfrSyntaxParser.T__14:
- self.state = 2846
+ self.state = 2850
self.match(VfrSyntaxParser.T__14)
- self.state = 2847
+ self.state = 2851
self.match(VfrSyntaxParser.T__5)
- self.state = 2848
+ self.state = 2852
self.match(VfrSyntaxParser.Number)
- self.state = 2849
+ self.state = 2853
self.match(VfrSyntaxParser.Comma)
- self.state = 2852
+ self.state = 2856
self.match(VfrSyntaxParser.OpenParen)
- self.state = 2853
- self.vfrStatementExpressionSub()
- self.state = 2854
+ self.state = 2857
+ self.vfrStatementExpressionSub(localctx.Nodes)
+ self.state = 2858
self.match(VfrSyntaxParser.CloseParen)
except RecognitionException as re:
localctx.exception = re
@@ -19483,7 +19496,7 @@ class VfrSyntaxParser ( Parser ):
super().__init__(parent, invokingState)
self.parser = parser
self.ExpInfo = None
- self.TUObj = None
+ self.Nodes = []
self.ExpInfo = ExpInfo
def UnIntVal(self):
@@ -19514,16 +19527,16 @@ class VfrSyntaxParser ( Parser ):
def unintExp(self, ExpInfo):
localctx = VfrSyntaxParser.UnintExpContext(self, self._ctx, self.state, ExpInfo)
- self.enterRule(localctx, 378, self.RULE_unintExp)
+ self.enterRule(localctx, 380, self.RULE_unintExp)
try:
self.enterOuterAlt(localctx, 1)
- self.state = 2856
+ self.state = 2860
self.match(VfrSyntaxParser.UnIntVal)
- self.state = 2857
+ self.state = 2861
self.match(VfrSyntaxParser.OpenParen)
- self.state = 2858
- self.vfrStatementExpressionSub()
- self.state = 2859
+ self.state = 2862
+ self.vfrStatementExpressionSub(localctx.Nodes)
+ self.state = 2863
self.match(VfrSyntaxParser.CloseParen)
except RecognitionException as re:
localctx.exception = re
@@ -19540,7 +19553,7 @@ class VfrSyntaxParser ( Parser ):
super().__init__(parent, invokingState)
self.parser = parser
self.ExpInfo = None
- self.TUObj = None
+ self.Nodes = []
self.ExpInfo = ExpInfo
def ToUpper(self):
@@ -19571,16 +19584,16 @@ class VfrSyntaxParser ( Parser ):
def toupperExp(self, ExpInfo):
localctx = VfrSyntaxParser.ToupperExpContext(self, self._ctx, self.state, ExpInfo)
- self.enterRule(localctx, 380, self.RULE_toupperExp)
+ self.enterRule(localctx, 382, self.RULE_toupperExp)
try:
self.enterOuterAlt(localctx, 1)
- self.state = 2861
+ self.state = 2865
self.match(VfrSyntaxParser.ToUpper)
- self.state = 2862
+ self.state = 2866
self.match(VfrSyntaxParser.OpenParen)
- self.state = 2863
- self.vfrStatementExpressionSub()
- self.state = 2864
+ self.state = 2867
+ self.vfrStatementExpressionSub(localctx.Nodes)
+ self.state = 2868
self.match(VfrSyntaxParser.CloseParen)
except RecognitionException as re:
localctx.exception = re
@@ -19597,7 +19610,7 @@ class VfrSyntaxParser ( Parser ):
super().__init__(parent, invokingState)
self.parser = parser
self.ExpInfo = None
- self.TLObj = None
+ self.Nodes = []
self.ExpInfo = ExpInfo
def ToLower(self):
@@ -19628,16 +19641,16 @@ class VfrSyntaxParser ( Parser ):
def tolwerExp(self, ExpInfo):
localctx = VfrSyntaxParser.TolwerExpContext(self, self._ctx, self.state, ExpInfo)
- self.enterRule(localctx, 382, self.RULE_tolwerExp)
+ self.enterRule(localctx, 384, self.RULE_tolwerExp)
try:
self.enterOuterAlt(localctx, 1)
- self.state = 2866
+ self.state = 2870
self.match(VfrSyntaxParser.ToLower)
- self.state = 2867
+ self.state = 2871
self.match(VfrSyntaxParser.OpenParen)
- self.state = 2868
- self.vfrStatementExpressionSub()
- self.state = 2869
+ self.state = 2872
+ self.vfrStatementExpressionSub(localctx.Nodes)
+ self.state = 2873
self.match(VfrSyntaxParser.CloseParen)
except RecognitionException as re:
localctx.exception = re
@@ -19655,7 +19668,7 @@ class VfrSyntaxParser ( Parser ):
self.parser = parser
self.ExpInfo = None
self.BaseInfo = EFI_VARSTORE_INFO()
- self.TSObj = None
+ self.Nodes = []
self.ExpInfo = ExpInfo
def Set(self):
@@ -19703,35 +19716,35 @@ class VfrSyntaxParser ( Parser ):
def setExp(self, ExpInfo):
localctx = VfrSyntaxParser.SetExpContext(self, self._ctx, self.state, ExpInfo)
- self.enterRule(localctx, 384, self.RULE_setExp)
+ self.enterRule(localctx, 386, self.RULE_setExp)
self._la = 0 # Token type
try:
self.enterOuterAlt(localctx, 1)
- self.state = 2871
+ self.state = 2875
self.match(VfrSyntaxParser.Set)
- self.state = 2872
+ self.state = 2876
self.match(VfrSyntaxParser.OpenParen)
- self.state = 2873
+ self.state = 2877
self.vfrStorageVarId(localctx.BaseInfo, False)
- self.state = 2878
+ self.state = 2882
self._errHandler.sync(self)
_la = self._input.LA(1)
if _la==VfrSyntaxParser.BitWiseOr:
- self.state = 2874
+ self.state = 2878
self.match(VfrSyntaxParser.BitWiseOr)
- self.state = 2875
+ self.state = 2879
self.match(VfrSyntaxParser.FLAGS)
- self.state = 2876
+ self.state = 2880
self.match(VfrSyntaxParser.T__5)
- self.state = 2877
+ self.state = 2881
self.numericVarStoreType()
- self.state = 2880
+ self.state = 2884
self.match(VfrSyntaxParser.Comma)
- self.state = 2881
- self.vfrStatementExpressionSub()
- self.state = 2882
+ self.state = 2885
+ self.vfrStatementExpressionSub(localctx.Nodes)
+ self.state = 2886
self.match(VfrSyntaxParser.CloseParen)
except RecognitionException as re:
localctx.exception = re
@@ -19748,6 +19761,7 @@ class VfrSyntaxParser ( Parser ):
super().__init__(parent, invokingState)
self.parser = parser
self.ExpInfo = None
+ self.Nodes = None
self.ExpInfo = ExpInfo
def conditionalExp(self):
@@ -19785,34 +19799,34 @@ class VfrSyntaxParser ( Parser ):
def vfrExpressionTernaryOp(self, ExpInfo):
localctx = VfrSyntaxParser.VfrExpressionTernaryOpContext(self, self._ctx, self.state, ExpInfo)
- self.enterRule(localctx, 386, self.RULE_vfrExpressionTernaryOp)
+ self.enterRule(localctx, 388, self.RULE_vfrExpressionTernaryOp)
try:
- self.state = 2889
+ self.state = 2893
self._errHandler.sync(self)
token = self._input.LA(1)
if token in [VfrSyntaxParser.Cond]:
self.enterOuterAlt(localctx, 1)
- self.state = 2884
+ self.state = 2888
self.conditionalExp(ExpInfo)
pass
elif token in [VfrSyntaxParser.Find]:
self.enterOuterAlt(localctx, 2)
- self.state = 2885
+ self.state = 2889
self.findExp(ExpInfo)
pass
elif token in [VfrSyntaxParser.Mid]:
self.enterOuterAlt(localctx, 3)
- self.state = 2886
+ self.state = 2890
self.midExp(ExpInfo)
pass
elif token in [VfrSyntaxParser.Tok]:
self.enterOuterAlt(localctx, 4)
- self.state = 2887
+ self.state = 2891
self.tokenExp(ExpInfo)
pass
elif token in [VfrSyntaxParser.Span]:
self.enterOuterAlt(localctx, 5)
- self.state = 2888
+ self.state = 2892
self.spanExp(ExpInfo)
pass
else:
@@ -19833,7 +19847,7 @@ class VfrSyntaxParser ( Parser ):
super().__init__(parent, invokingState)
self.parser = parser
self.ExpInfo = None
- self.CObj = None
+ self.Nodes = []
self.ExpInfo = ExpInfo
def Cond(self):
@@ -19870,24 +19884,24 @@ class VfrSyntaxParser ( Parser ):
def conditionalExp(self, ExpInfo):
localctx = VfrSyntaxParser.ConditionalExpContext(self, self._ctx, self.state, ExpInfo)
- self.enterRule(localctx, 388, self.RULE_conditionalExp)
+ self.enterRule(localctx, 390, self.RULE_conditionalExp)
try:
self.enterOuterAlt(localctx, 1)
- self.state = 2891
- self.match(VfrSyntaxParser.Cond)
- self.state = 2892
- self.match(VfrSyntaxParser.OpenParen)
- self.state = 2893
- self.vfrStatementExpressionSub()
- self.state = 2894
- self.match(VfrSyntaxParser.T__15)
self.state = 2895
- self.vfrStatementExpressionSub()
+ self.match(VfrSyntaxParser.Cond)
self.state = 2896
- self.match(VfrSyntaxParser.Colon)
+ self.match(VfrSyntaxParser.OpenParen)
self.state = 2897
- self.vfrStatementExpressionSub()
+ self.vfrStatementExpressionSub(localctx.Nodes)
self.state = 2898
+ self.match(VfrSyntaxParser.T__15)
+ self.state = 2899
+ self.vfrStatementExpressionSub(localctx.Nodes)
+ self.state = 2900
+ self.match(VfrSyntaxParser.Colon)
+ self.state = 2901
+ self.vfrStatementExpressionSub(localctx.Nodes)
+ self.state = 2902
self.match(VfrSyntaxParser.CloseParen)
except RecognitionException as re:
localctx.exception = re
@@ -19904,7 +19918,7 @@ class VfrSyntaxParser ( Parser ):
super().__init__(parent, invokingState)
self.parser = parser
self.ExpInfo = None
- self.FObj = None
+ self.Nodes = []
self.ExpInfo = ExpInfo
def Find(self):
@@ -19957,41 +19971,41 @@ class VfrSyntaxParser ( Parser ):
def findExp(self, ExpInfo):
localctx = VfrSyntaxParser.FindExpContext(self, self._ctx, self.state, ExpInfo)
- self.enterRule(localctx, 390, self.RULE_findExp)
+ self.enterRule(localctx, 392, self.RULE_findExp)
self._la = 0 # Token type
try:
self.enterOuterAlt(localctx, 1)
- self.state = 2900
+ self.state = 2904
self.match(VfrSyntaxParser.Find)
- self.state = 2901
+ self.state = 2905
self.match(VfrSyntaxParser.OpenParen)
- self.state = 2902
+ self.state = 2906
self.findFormat(ExpInfo)
- self.state = 2907
+ self.state = 2911
self._errHandler.sync(self)
_la = self._input.LA(1)
while _la==VfrSyntaxParser.BitWiseOr:
- self.state = 2903
+ self.state = 2907
self.match(VfrSyntaxParser.BitWiseOr)
- self.state = 2904
+ self.state = 2908
self.findFormat(ExpInfo)
- self.state = 2909
+ self.state = 2913
self._errHandler.sync(self)
_la = self._input.LA(1)
- self.state = 2910
- self.match(VfrSyntaxParser.Comma)
- self.state = 2911
- self.vfrStatementExpressionSub()
- self.state = 2912
- self.match(VfrSyntaxParser.Comma)
- self.state = 2913
- self.vfrStatementExpressionSub()
self.state = 2914
self.match(VfrSyntaxParser.Comma)
self.state = 2915
- self.vfrStatementExpressionSub()
+ self.vfrStatementExpressionSub(localctx.Nodes)
self.state = 2916
+ self.match(VfrSyntaxParser.Comma)
+ self.state = 2917
+ self.vfrStatementExpressionSub(localctx.Nodes)
+ self.state = 2918
+ self.match(VfrSyntaxParser.Comma)
+ self.state = 2919
+ self.vfrStatementExpressionSub(localctx.Nodes)
+ self.state = 2920
self.match(VfrSyntaxParser.CloseParen)
except RecognitionException as re:
localctx.exception = re
@@ -20032,11 +20046,11 @@ class VfrSyntaxParser ( Parser ):
def findFormat(self, ExpInfo):
localctx = VfrSyntaxParser.FindFormatContext(self, self._ctx, self.state, ExpInfo)
- self.enterRule(localctx, 392, self.RULE_findFormat)
+ self.enterRule(localctx, 394, self.RULE_findFormat)
self._la = 0 # Token type
try:
self.enterOuterAlt(localctx, 1)
- self.state = 2918
+ self.state = 2922
_la = self._input.LA(1)
if not(_la==VfrSyntaxParser.Insensitive or _la==VfrSyntaxParser.Sensitive):
self._errHandler.recoverInline(self)
@@ -20058,7 +20072,7 @@ class VfrSyntaxParser ( Parser ):
super().__init__(parent, invokingState)
self.parser = parser
self.ExpInfo = None
- self.MObj = None
+ self.Nodes = []
self.ExpInfo = ExpInfo
def Mid(self):
@@ -20098,24 +20112,24 @@ class VfrSyntaxParser ( Parser ):
def midExp(self, ExpInfo):
localctx = VfrSyntaxParser.MidExpContext(self, self._ctx, self.state, ExpInfo)
- self.enterRule(localctx, 394, self.RULE_midExp)
+ self.enterRule(localctx, 396, self.RULE_midExp)
try:
self.enterOuterAlt(localctx, 1)
- self.state = 2920
- self.match(VfrSyntaxParser.Mid)
- self.state = 2921
- self.match(VfrSyntaxParser.OpenParen)
- self.state = 2922
- self.vfrStatementExpressionSub()
- self.state = 2923
- self.match(VfrSyntaxParser.Comma)
self.state = 2924
- self.vfrStatementExpressionSub()
+ self.match(VfrSyntaxParser.Mid)
self.state = 2925
- self.match(VfrSyntaxParser.Comma)
+ self.match(VfrSyntaxParser.OpenParen)
self.state = 2926
- self.vfrStatementExpressionSub()
+ self.vfrStatementExpressionSub(localctx.Nodes)
self.state = 2927
+ self.match(VfrSyntaxParser.Comma)
+ self.state = 2928
+ self.vfrStatementExpressionSub(localctx.Nodes)
+ self.state = 2929
+ self.match(VfrSyntaxParser.Comma)
+ self.state = 2930
+ self.vfrStatementExpressionSub(localctx.Nodes)
+ self.state = 2931
self.match(VfrSyntaxParser.CloseParen)
except RecognitionException as re:
localctx.exception = re
@@ -20132,7 +20146,7 @@ class VfrSyntaxParser ( Parser ):
super().__init__(parent, invokingState)
self.parser = parser
self.ExpInfo = None
- self.TObj = None
+ self.Nodes = []
self.ExpInfo = ExpInfo
def Tok(self):
@@ -20172,24 +20186,24 @@ class VfrSyntaxParser ( Parser ):
def tokenExp(self, ExpInfo):
localctx = VfrSyntaxParser.TokenExpContext(self, self._ctx, self.state, ExpInfo)
- self.enterRule(localctx, 396, self.RULE_tokenExp)
+ self.enterRule(localctx, 398, self.RULE_tokenExp)
try:
self.enterOuterAlt(localctx, 1)
- self.state = 2929
- self.match(VfrSyntaxParser.Tok)
- self.state = 2930
- self.match(VfrSyntaxParser.OpenParen)
- self.state = 2931
- self.vfrStatementExpressionSub()
- self.state = 2932
- self.match(VfrSyntaxParser.Comma)
self.state = 2933
- self.vfrStatementExpressionSub()
+ self.match(VfrSyntaxParser.Tok)
self.state = 2934
- self.match(VfrSyntaxParser.Comma)
+ self.match(VfrSyntaxParser.OpenParen)
self.state = 2935
- self.vfrStatementExpressionSub()
+ self.vfrStatementExpressionSub(localctx.Nodes)
self.state = 2936
+ self.match(VfrSyntaxParser.Comma)
+ self.state = 2937
+ self.vfrStatementExpressionSub(localctx.Nodes)
+ self.state = 2938
+ self.match(VfrSyntaxParser.Comma)
+ self.state = 2939
+ self.vfrStatementExpressionSub(localctx.Nodes)
+ self.state = 2940
self.match(VfrSyntaxParser.CloseParen)
except RecognitionException as re:
localctx.exception = re
@@ -20206,7 +20220,7 @@ class VfrSyntaxParser ( Parser ):
super().__init__(parent, invokingState)
self.parser = parser
self.ExpInfo = None
- self.SObj = None
+ self.Nodes = []
self.ExpInfo = ExpInfo
def Span(self):
@@ -20262,45 +20276,45 @@ class VfrSyntaxParser ( Parser ):
def spanExp(self, ExpInfo):
localctx = VfrSyntaxParser.SpanExpContext(self, self._ctx, self.state, ExpInfo)
- self.enterRule(localctx, 398, self.RULE_spanExp)
+ self.enterRule(localctx, 400, self.RULE_spanExp)
self._la = 0 # Token type
try:
self.enterOuterAlt(localctx, 1)
- self.state = 2938
+ self.state = 2942
self.match(VfrSyntaxParser.Span)
- self.state = 2939
+ self.state = 2943
self.match(VfrSyntaxParser.OpenParen)
- self.state = 2940
+ self.state = 2944
self.match(VfrSyntaxParser.FLAGS)
- self.state = 2941
+ self.state = 2945
self.match(VfrSyntaxParser.T__5)
- self.state = 2942
+ self.state = 2946
self.spanFlags()
- self.state = 2947
+ self.state = 2951
self._errHandler.sync(self)
_la = self._input.LA(1)
while _la==VfrSyntaxParser.BitWiseOr:
- self.state = 2943
+ self.state = 2947
self.match(VfrSyntaxParser.BitWiseOr)
- self.state = 2944
+ self.state = 2948
self.spanFlags()
- self.state = 2949
+ self.state = 2953
self._errHandler.sync(self)
_la = self._input.LA(1)
- self.state = 2950
- self.match(VfrSyntaxParser.Comma)
- self.state = 2951
- self.vfrStatementExpressionSub()
- self.state = 2952
- self.match(VfrSyntaxParser.Comma)
- self.state = 2953
- self.vfrStatementExpressionSub()
self.state = 2954
self.match(VfrSyntaxParser.Comma)
self.state = 2955
- self.vfrStatementExpressionSub()
+ self.vfrStatementExpressionSub(localctx.Nodes)
self.state = 2956
+ self.match(VfrSyntaxParser.Comma)
+ self.state = 2957
+ self.vfrStatementExpressionSub(localctx.Nodes)
+ self.state = 2958
+ self.match(VfrSyntaxParser.Comma)
+ self.state = 2959
+ self.vfrStatementExpressionSub(localctx.Nodes)
+ self.state = 2960
self.match(VfrSyntaxParser.CloseParen)
except RecognitionException as re:
localctx.exception = re
@@ -20342,11 +20356,11 @@ class VfrSyntaxParser ( Parser ):
def spanFlags(self):
localctx = VfrSyntaxParser.SpanFlagsContext(self, self._ctx, self.state)
- self.enterRule(localctx, 400, self.RULE_spanFlags)
+ self.enterRule(localctx, 402, self.RULE_spanFlags)
self._la = 0 # Token type
try:
self.enterOuterAlt(localctx, 1)
- self.state = 2958
+ self.state = 2962
_la = self._input.LA(1)
if not(((((_la - 246)) & ~0x3f) == 0 and ((1 << (_la - 246)) & ((1 << (VfrSyntaxParser.LastNonMatch - 246)) | (1 << (VfrSyntaxParser.FirstNonMatch - 246)) | (1 << (VfrSyntaxParser.Number - 246)))) != 0)):
self._errHandler.recoverInline(self)
@@ -20368,7 +20382,8 @@ class VfrSyntaxParser ( Parser ):
super().__init__(parent, invokingState)
self.parser = parser
self.ExpInfo = None
- self.MObj = None
+ self.Nodes = []
+ self.Node = IfrTreeNode()
self.ExpInfo = ExpInfo
def Map(self):
@@ -20421,35 +20436,35 @@ class VfrSyntaxParser ( Parser ):
def vfrExpressionMap(self, ExpInfo):
localctx = VfrSyntaxParser.VfrExpressionMapContext(self, self._ctx, self.state, ExpInfo)
- self.enterRule(localctx, 402, self.RULE_vfrExpressionMap)
+ self.enterRule(localctx, 404, self.RULE_vfrExpressionMap)
self._la = 0 # Token type
try:
self.enterOuterAlt(localctx, 1)
- self.state = 2960
+ self.state = 2964
self.match(VfrSyntaxParser.Map)
- self.state = 2961
+ self.state = 2965
self.match(VfrSyntaxParser.OpenParen)
- self.state = 2962
- self.vfrStatementExpressionSub()
- self.state = 2963
+ self.state = 2966
+ self.vfrStatementExpressionSub(localctx.Nodes)
+ self.state = 2967
self.match(VfrSyntaxParser.Colon)
- self.state = 2971
+ self.state = 2975
self._errHandler.sync(self)
_la = self._input.LA(1)
while _la==VfrSyntaxParser.OpenParen or ((((_la - 192)) & ~0x3f) == 0 and ((1 << (_la - 192)) & ((1 << (VfrSyntaxParser.Cond - 192)) | (1 << (VfrSyntaxParser.Find - 192)) | (1 << (VfrSyntaxParser.Mid - 192)) | (1 << (VfrSyntaxParser.Tok - 192)) | (1 << (VfrSyntaxParser.Span - 192)) | (1 << (VfrSyntaxParser.Dup - 192)) | (1 << (VfrSyntaxParser.VarEqVal - 192)) | (1 << (VfrSyntaxParser.IdEqVal - 192)) | (1 << (VfrSyntaxParser.IdEqId - 192)) | (1 << (VfrSyntaxParser.IdEqValList - 192)) | (1 << (VfrSyntaxParser.QuestionRef - 192)) | (1 << (VfrSyntaxParser.RuleRef - 192)) | (1 << (VfrSyntaxParser.StringRef - 192)) | (1 << (VfrSyntaxParser.PushThis - 192)) | (1 << (VfrSyntaxParser.Security - 192)) | (1 << (VfrSyntaxParser.Get - 192)) | (1 << (VfrSyntaxParser.TrueSymbol - 192)) | (1 << (VfrSyntaxParser.FalseSymbol - 192)) | (1 << (VfrSyntaxParser.One - 192)) | (1 << (VfrSyntaxParser.Ones - 192)) | (1 << (VfrSyntaxParser.Zero - 192)) | (1 << (VfrSyntaxParser.Undefined - 192)) | (1 << (VfrSyntaxParser.Version - 192)) | (1 << (VfrSyntaxParser.Length - 192)) | (1 << (VfrSyntaxParser.NOT - 192)) | (1 << (VfrSyntaxParser.Set - 192)) | (1 << (VfrSyntaxParser.BitWiseNot - 192)) | (1 << (VfrSyntaxParser.BoolVal - 192)) | (1 << (VfrSyntaxParser.StringVal - 192)) | (1 << (VfrSyntaxParser.UnIntVal - 192)) | (1 << (VfrSyntaxParser.ToUpper - 192)) | (1 << (VfrSyntaxParser.ToLower - 192)) | (1 << (VfrSyntaxParser.Match - 192)) | (1 << (VfrSyntaxParser.Match2 - 192)) | (1 << (VfrSyntaxParser.Catenate - 192)) | (1 << (VfrSyntaxParser.QuestionRefVal - 192)) | (1 << (VfrSyntaxParser.StringRefVal - 192)) | (1 << (VfrSyntaxParser.Map - 192)) | (1 << (VfrSyntaxParser.Number - 192)))) != 0):
- self.state = 2964
- self.vfrStatementExpression()
- self.state = 2965
+ self.state = 2968
+ self.vfrStatementExpression(localctx.Node)
+ self.state = 2969
self.match(VfrSyntaxParser.Comma)
- self.state = 2966
- self.vfrStatementExpression()
- self.state = 2967
+ self.state = 2970
+ self.vfrStatementExpression(localctx.Node)
+ self.state = 2971
self.match(VfrSyntaxParser.Semicolon)
- self.state = 2973
+ self.state = 2977
self._errHandler.sync(self)
_la = self._input.LA(1)
- self.state = 2974
+ self.state = 2978
self.match(VfrSyntaxParser.CloseParen)
except RecognitionException as re:
localctx.exception = re
diff --git a/BaseTools/Source/Python/VfrCompiler/VfrSyntaxVisitor.py b/BaseTools/Source/Python/VfrCompiler/VfrSyntaxVisitor.py
index 8d0e907a75..7234c0675c 100644
--- a/BaseTools/Source/Python/VfrCompiler/VfrSyntaxVisitor.py
+++ b/BaseTools/Source/Python/VfrCompiler/VfrSyntaxVisitor.py
@@ -1,79 +1,69 @@
-from cgi import print_environ_usage
-from email.errors import NonASCIILocalPartDefect, NonPrintableDefect
-from enum import Flag
-from fileinput import lineno
-from http.client import ResponseNotReady
-from itertools import count
-from modulefinder import STORE_NAME
-from msilib.schema import CreateFolder
-from re import T
-from sre_parse import FLAGS
-from tokenize import Number
+## @file
+# The file is defined to parse Vfr syntax
+#
+# Copyright (c) 2022-, Intel Corporation. All rights reserved.<BR>
+# SPDX-License-Identifier: BSD-2-Clause-Patent
+##
+
from antlr4 import *
-from VfrCompiler.CommonCtypes import *
-from VfrCompiler.VfrFormPkg import *
-from VfrCompiler.VfrUtility import *
-from VfrCompiler.VfrTree import *
-import ctypes
-import struct
+from VfrCompiler.IfrCtypes import *
+from VfrCompiler.IfrFormPkg import *
+from VfrCompiler.IfrUtility import *
+from VfrCompiler.IfrTree import *
+from VfrCompiler.IfrError import *
+from VfrCompiler.IfrPreProcess import *
if __name__ is not None and "." in __name__:
from .VfrSyntaxParser import VfrSyntaxParser
else:
from VfrSyntaxParser import VfrSyntaxParser
-gCVfrVarDataTypeDB = CVfrVarDataTypeDB()
-gCVfrDefaultStore = CVfrDefaultStore()
-gCVfrDataStorage = CVfrDataStorage()
# This class defines a complete generic visitor for a parse tree produced by VfrSyntaxParser.
class VfrSyntaxVisitor(ParseTreeVisitor):
- gZeroEfiIfrTypeValue = EFI_IFR_TYPE_VALUE()
-
- def __init__(self):
- self.__OverrideClassGuid = None
- self.__ParserStatus = 0
- self.__CIfrOpHdrIndex = -1
- self.__ConstantOnlyInExpression = False
- self.__UsedDefaultArray = []
-
- self.__CVfrRulesDB = CVfrRulesDB()
- self.__CIfrOpHdr = [] #
- self.__CIfrOpHdrLineNo = []
- self.__CurrQestVarInfo = EFI_VARSTORE_INFO()
-
- self.__CVfrQuestionDB = CVfrQuestionDB()
- self.__CurrentQuestion = None
- self.__CurrentMinMaxData = None #
-
- self.__IsStringOp = False
- self.__IsOrderedList = False
- self.__IsCheckBoxOp = False
- self.__Root = VfrTreeNode()
-
+ def __init__(
+ self,
+ PreProcessDB: PreProcessDB = None,
+ Root=None,
+ OverrideClassGuid=None,
+ QuestionDB: VfrQuestionDB = None,
+ ):
+ self.Root = Root if Root != None else IfrTreeNode()
+ self.PreProcessDB = PreProcessDB
+ self.OverrideClassGuid = OverrideClassGuid
+ self.VfrQuestionDB = QuestionDB if QuestionDB != None else VfrQuestionDB()
+ self.ParserStatus = 0
+ self.Value = None
+ self.LastFormNode = None
+ self.IfrOpHdrIndex = 0
+ self.ConstantOnlyInExpression = False
+ self.IfrOpHdr = [None]
+ self.IfrOpHdrLineNo = [0]
+ self.UsedDefaultArray = []
+ self.VfrRulesDB = VfrRulesDB()
+ self.CurrQestVarInfo = EFI_VARSTORE_INFO()
+ self.CurrentQuestion = None
+ self.CurrentMinMaxData = None
+ self.IsStringOp = False
+ self.IsOrderedList = False
+ self.IsCheckBoxOp = False
+ self.NeedAdjustOpcode = False
# Visit a parse tree produced by VfrSyntaxParser#vfrProgram.
- def visitVfrProgram(self, ctx:VfrSyntaxParser.VfrProgramContext):
-
- #self.__CVfrQuestionDB.PrintAllQuestion('test\\Questions.txt')
- #gCVfrVarDataTypeDB.Dump("test\\DataTypeInfo.txt")
-
+ def visitVfrProgram(self, ctx: VfrSyntaxParser.VfrProgramContext):
return self.visitChildren(ctx)
# Visit a parse tree produced by VfrSyntaxParser#pragmaPackShowDef.
- def visitPragmaPackShowDef(self, ctx:VfrSyntaxParser.PragmaPackShowDefContext):
-
+ def visitPragmaPackShowDef(self, ctx: VfrSyntaxParser.PragmaPackShowDefContext):
Line = ctx.start.line
- gCVfrVarDataTypeDB.Pack(Line, VFR_PACK_SHOW)
+ gVfrVarDataTypeDB.Pack(Line, VFR_PACK_SHOW)
return self.visitChildren(ctx)
-
# Visit a parse tree produced by VfrSyntaxParser#pragmaPackStackDef.
- def visitPragmaPackStackDef(self, ctx:VfrSyntaxParser.PragmaPackStackDefContext):
+ def visitPragmaPackStackDef(self, ctx: VfrSyntaxParser.PragmaPackStackDefContext):
+ Identifier = self.TransId(ctx.StringIdentifier())
- Identifier = self.__TransId(ctx.StringIdentifier())
-
- if str(ctx.getChild(0)) == 'push':
+ if str(ctx.getChild(0)) == "push":
Action = VFR_PACK_PUSH
else:
Action = VFR_PACK_POP
@@ -81,217 +71,273 @@ class VfrSyntaxVisitor(ParseTreeVisitor):
if ctx.Number() != None:
Action |= VFR_PACK_ASSIGN
- PackNumber = self.__TransNum(ctx.Number(), DEFAULT_PACK_ALIGN)
+ PackNumber = self.TransNum(ctx.Number(), DEFAULT_PACK_ALIGN)
Line = ctx.start.line
- gCVfrVarDataTypeDB.Pack(Line, Action, Identifier, PackNumber)
+ gVfrVarDataTypeDB.Pack(Line, Action, Identifier, PackNumber)
return self.visitChildren(ctx)
-
# Visit a parse tree produced by VfrSyntaxParser#pragmaPackNumber.
- def visitPragmaPackNumber(self, ctx:VfrSyntaxParser.PragmaPackNumberContext):
-
+ def visitPragmaPackNumber(self, ctx: VfrSyntaxParser.PragmaPackNumberContext):
Line = ctx.start.line
- PackNumber = self.__TransNum(ctx.Number(), DEFAULT_PACK_ALIGN)
+ PackNumber = self.TransNum(ctx.Number(), DEFAULT_PACK_ALIGN)
- gCVfrVarDataTypeDB.Pack(Line, VFR_PACK_ASSIGN, None, PackNumber)
+ gVfrVarDataTypeDB.Pack(Line, VFR_PACK_ASSIGN, None, PackNumber)
return self.visitChildren(ctx)
-
# Visit a parse tree produced by VfrSyntaxParser#vfrPragmaPackDefinition.
- def visitVfrPragmaPackDefinition(
- self, ctx: VfrSyntaxParser.VfrPragmaPackDefinitionContext):
+ def visitVfrPragmaPackDefinition(self, ctx: VfrSyntaxParser.VfrPragmaPackDefinitionContext):
return self.visitChildren(ctx)
-
# Visit a parse tree produced by VfrSyntaxParser#vfrDataStructDefinition.
def visitVfrDataStructDefinition(self, ctx: VfrSyntaxParser.VfrDataStructDefinitionContext):
-
- gCVfrVarDataTypeDB.DeclareDataTypeBegin()
+ gVfrVarDataTypeDB.DeclareDataTypeBegin()
if ctx.N1 != None:
- ReturnCode = gCVfrVarDataTypeDB.SetNewTypeName(ctx.N1.text)
- self.__ErrorHandler(ReturnCode, ctx.N1.line, ctx.N1.text)
+ ReturnCode = gVfrVarDataTypeDB.SetNewTypeName(ctx.N1.text)
+ self.ErrorHandler(ReturnCode, ctx.N1.line, ctx.N1.text)
if ctx.N2 != None:
- ReturnCode = gCVfrVarDataTypeDB.SetNewTypeName(ctx.N2.text)
- self.__ErrorHandler(ReturnCode, ctx.N2.line, ctx.N2.text)
+ ReturnCode = gVfrVarDataTypeDB.SetNewTypeName(ctx.N2.text)
+ self.ErrorHandler(ReturnCode, ctx.N2.line, ctx.N2.text)
self.visitChildren(ctx)
- gCVfrVarDataTypeDB.DeclareDataTypeEnd()
-
+ gVfrVarDataTypeDB.DeclareDataTypeEnd()
return None
-
# Visit a parse tree produced by VfrSyntaxParser#vfrDataUnionDefinition.
- def visitVfrDataUnionDefinition(self, ctx:VfrSyntaxParser.VfrDataUnionDefinitionContext):
- gCVfrVarDataTypeDB.DeclareDataTypeBegin()
+ def visitVfrDataUnionDefinition(self, ctx: VfrSyntaxParser.VfrDataUnionDefinitionContext):
+ gVfrVarDataTypeDB.DeclareDataTypeBegin()
if ctx.N1 != None:
- ReturnCode = gCVfrVarDataTypeDB.SetNewTypeName(ctx.N1.text)
- self.__ErrorHandler(ReturnCode, ctx.N1.line, ctx.N1.text)
+ ReturnCode = gVfrVarDataTypeDB.SetNewTypeName(ctx.N1.text)
+ self.ErrorHandler(ReturnCode, ctx.N1.line, ctx.N1.text)
if ctx.N2 != None:
- ReturnCode = gCVfrVarDataTypeDB.SetNewTypeName(ctx.N2.text)
- self.__ErrorHandler(ReturnCode, ctx.N2.line, ctx.N2.text)
+ ReturnCode = gVfrVarDataTypeDB.SetNewTypeName(ctx.N2.text)
+ self.ErrorHandler(ReturnCode, ctx.N2.line, ctx.N2.text)
self.visitChildren(ctx)
- gCVfrVarDataTypeDB.DeclareDataTypeEnd()
+ gVfrVarDataTypeDB.DeclareDataTypeEnd()
return None
-
# Visit a parse tree produced by VfrSyntaxParser#vfrDataStructFields.
- def visitVfrDataStructFields(self, ctx:VfrSyntaxParser.VfrDataStructFieldsContext):
-
+ def visitVfrDataStructFields(self, ctx: VfrSyntaxParser.VfrDataStructFieldsContext):
return self.visitChildren(ctx)
-
# Visit a parse tree produced by VfrSyntaxParser#dataStructField64.
- def visitDataStructField64(self, ctx:VfrSyntaxParser.DataStructField64Context):
- ArrayNum = self.__TransNum(ctx.Number())
- ReturnCode = gCVfrVarDataTypeDB.DataTypeAddField(ctx.N.text, 'UINT64', ArrayNum, ctx.FieldInUnion)
- self.__ErrorHandler(ReturnCode, ctx.N.line, ctx.N.text)
+ def visitDataStructField64(self, ctx: VfrSyntaxParser.DataStructField64Context):
+ ArrayNum = self.TransNum(ctx.Number())
+ ReturnCode = gVfrVarDataTypeDB.DataTypeAddField(
+ ctx.N.text, "UINT64", ArrayNum, ctx.FieldInUnion
+ )
+ self.ErrorHandler(ReturnCode, ctx.N.line, ctx.N.text)
return self.visitChildren(ctx)
-
# Visit a parse tree produced by VfrSyntaxParser#dataStructField32.
- def visitDataStructField32(self, ctx:VfrSyntaxParser.DataStructField32Context):
- ArrayNum = self.__TransNum(ctx.Number())
- ReturnCode = gCVfrVarDataTypeDB.DataTypeAddField(ctx.N.text, 'UINT32', ArrayNum, ctx.FieldInUnion)
- self.__ErrorHandler(ReturnCode, ctx.N.line, ctx.N.text)
+ def visitDataStructField32(self, ctx: VfrSyntaxParser.DataStructField32Context):
+ ArrayNum = self.TransNum(ctx.Number())
+ ReturnCode = gVfrVarDataTypeDB.DataTypeAddField(
+ ctx.N.text, "UINT32", ArrayNum, ctx.FieldInUnion
+ )
+ self.ErrorHandler(ReturnCode, ctx.N.line, ctx.N.text)
return self.visitChildren(ctx)
-
# Visit a parse tree produced by VfrSyntaxParser#dataStructField16.
- def visitDataStructField16(self, ctx:VfrSyntaxParser.DataStructField16Context):
- ArrayNum = self.__TransNum(ctx.Number())
- ReturnCode = gCVfrVarDataTypeDB.DataTypeAddField(ctx.N.text, 'UINT16', ArrayNum, ctx.FieldInUnion)
- self.__ErrorHandler(ReturnCode, ctx.N.line, ctx.N.text)
+ def visitDataStructField16(self, ctx: VfrSyntaxParser.DataStructField16Context):
+ ArrayNum = self.TransNum(ctx.Number())
+ ReturnCode = gVfrVarDataTypeDB.DataTypeAddField(
+ ctx.N.text, "UINT16", ArrayNum, ctx.FieldInUnion
+ )
+ self.ErrorHandler(ReturnCode, ctx.N.line, ctx.N.text)
return self.visitChildren(ctx)
-
# Visit a parse tree produced by VfrSyntaxParser#dataStructField8.
- def visitDataStructField8(self, ctx:VfrSyntaxParser.DataStructField8Context):
- ArrayNum = self.__TransNum(ctx.Number())
- ReturnCode = gCVfrVarDataTypeDB.DataTypeAddField(ctx.N.text, 'UINT8', ArrayNum, ctx.FieldInUnion)
- self.__ErrorHandler(ReturnCode, ctx.N.line, ctx.N.text)
+ def visitDataStructField8(self, ctx: VfrSyntaxParser.DataStructField8Context):
+ ArrayNum = self.TransNum(ctx.Number())
+ ReturnCode = gVfrVarDataTypeDB.DataTypeAddField(
+ ctx.N.text, "UINT8", ArrayNum, ctx.FieldInUnion
+ )
+ self.ErrorHandler(ReturnCode, ctx.N.line, ctx.N.text)
return self.visitChildren(ctx)
-
# Visit a parse tree produced by VfrSyntaxParser#dataStructFieldBool.
- def visitDataStructFieldBool(self, ctx:VfrSyntaxParser.DataStructFieldBoolContext):
- ArrayNum = self.__TransNum(ctx.Number())
- ReturnCode = gCVfrVarDataTypeDB.DataTypeAddField(ctx.N.text, 'BOOLEAN', ArrayNum, ctx.FieldInUnion)
- self.__ErrorHandler(ReturnCode, ctx.N.line, ctx.N.text)
+ def visitDataStructFieldBool(self, ctx: VfrSyntaxParser.DataStructFieldBoolContext):
+ ArrayNum = self.TransNum(ctx.Number())
+ ReturnCode = gVfrVarDataTypeDB.DataTypeAddField(
+ ctx.N.text, "BOOLEAN", ArrayNum, ctx.FieldInUnion
+ )
+ self.ErrorHandler(ReturnCode, ctx.N.line, ctx.N.text)
return self.visitChildren(ctx)
-
# Visit a parse tree produced by VfrSyntaxParser#dataStructFieldString.
- def visitDataStructFieldString(self, ctx:VfrSyntaxParser.DataStructFieldStringContext):
- ArrayNum = self.__TransNum(ctx.Number())
- ReturnCode = gCVfrVarDataTypeDB.DataTypeAddField(ctx.N.text, 'EFI_STRING_ID', ArrayNum, ctx.FieldInUnion)
- self.__ErrorHandler(ReturnCode, ctx.N.line, ctx.N.text)
+ def visitDataStructFieldString(self, ctx: VfrSyntaxParser.DataStructFieldStringContext):
+ ArrayNum = self.TransNum(ctx.Number())
+ ReturnCode = gVfrVarDataTypeDB.DataTypeAddField(
+ ctx.N.text, "EFI_STRING_ID", ArrayNum, ctx.FieldInUnion
+ )
+ self.ErrorHandler(ReturnCode, ctx.N.line, ctx.N.text)
return self.visitChildren(ctx)
-
# Visit a parse tree produced by VfrSyntaxParser#dataStructFieldDate.
- def visitDataStructFieldDate(self, ctx:VfrSyntaxParser.DataStructFieldDateContext):
- ArrayNum = self.__TransNum(ctx.Number())
- ReturnCode = gCVfrVarDataTypeDB.DataTypeAddField(ctx.N.text, 'EFI_HII_DATE', ArrayNum, ctx.FieldInUnion)
- self.__ErrorHandler(ReturnCode, ctx.N.line, ctx.N.text)
+ def visitDataStructFieldDate(self, ctx: VfrSyntaxParser.DataStructFieldDateContext):
+ ArrayNum = self.TransNum(ctx.Number())
+ ReturnCode = gVfrVarDataTypeDB.DataTypeAddField(
+ ctx.N.text, "EFI_HII_DATE", ArrayNum, ctx.FieldInUnion
+ )
+ self.ErrorHandler(ReturnCode, ctx.N.line, ctx.N.text)
return self.visitChildren(ctx)
-
# Visit a parse tree produced by VfrSyntaxParser#dataStructFieldTime.
- def visitDataStructFieldTime(self, ctx:VfrSyntaxParser.DataStructFieldTimeContext):
- ArrayNum = self.__TransNum(ctx.Number())
- ReturnCode = gCVfrVarDataTypeDB.DataTypeAddField(ctx.N.text, 'EFI_HII_TIME', ArrayNum, ctx.FieldInUnion)
- self.__ErrorHandler(ReturnCode, ctx.N.line, ctx.N.text)
+ def visitDataStructFieldTime(self, ctx: VfrSyntaxParser.DataStructFieldTimeContext):
+ ArrayNum = self.TransNum(ctx.Number())
+ ReturnCode = gVfrVarDataTypeDB.DataTypeAddField(
+ ctx.N.text, "EFI_HII_TIME", ArrayNum, ctx.FieldInUnion
+ )
+ self.ErrorHandler(ReturnCode, ctx.N.line, ctx.N.text)
return self.visitChildren(ctx)
-
# Visit a parse tree produced by VfrSyntaxParser#dataStructFieldRef.
- def visitDataStructFieldRef(self, ctx:VfrSyntaxParser.DataStructFieldRefContext):
- ArrayNum = self.__TransNum(ctx.Number())
- ReturnCode = gCVfrVarDataTypeDB.DataTypeAddField(ctx.N.text, 'EFI_HII_REF', ArrayNum, ctx.FieldInUnion)
- self.__ErrorHandler(ReturnCode, ctx.N.line, ctx.N.text)
+ def visitDataStructFieldRef(self, ctx: VfrSyntaxParser.DataStructFieldRefContext):
+ ArrayNum = self.TransNum(ctx.Number())
+ ReturnCode = gVfrVarDataTypeDB.DataTypeAddField(
+ ctx.N.text, "EFI_HII_REF", ArrayNum, ctx.FieldInUnion
+ )
+ self.ErrorHandler(ReturnCode, ctx.N.line, ctx.N.text)
return self.visitChildren(ctx)
-
# Visit a parse tree produced by VfrSyntaxParser#dataStructFieldUser.
- def visitDataStructFieldUser(self, ctx:VfrSyntaxParser.DataStructFieldUserContext):
- ArrayNum = self.__TransNum(ctx.Number())
- if ctx.T.text != 'CHAR16':
- ReturnCode = gCVfrVarDataTypeDB.DataTypeAddField(ctx.N.text, ctx.T.text, ArrayNum, ctx.FieldInUnion)
+ def visitDataStructFieldUser(self, ctx: VfrSyntaxParser.DataStructFieldUserContext):
+ ArrayNum = self.TransNum(ctx.Number())
+ if ctx.T.text != "CHAR16":
+ ReturnCode = gVfrVarDataTypeDB.DataTypeAddField(
+ ctx.N.text, ctx.T.text, ArrayNum, ctx.FieldInUnion
+ )
else:
- ReturnCode = gCVfrVarDataTypeDB.DataTypeAddField(ctx.N.text, 'UINT16', ArrayNum, ctx.FieldInUnion)
- self.__ErrorHandler(ReturnCode, ctx.N.line, ctx.N.text)
+ ReturnCode = gVfrVarDataTypeDB.DataTypeAddField(
+ ctx.N.text, "UINT16", ArrayNum, ctx.FieldInUnion
+ )
+ self.ErrorHandler(ReturnCode, ctx.N.line, ctx.N.text)
return self.visitChildren(ctx)
# Visit a parse tree produced by VfrSyntaxParser#dataStructBitField64.
- def visitDataStructBitField64(self, ctx:VfrSyntaxParser.DataStructBitField64Context):
- Width = self.__TransNum(ctx.Number())
+ def visitDataStructBitField64(self, ctx: VfrSyntaxParser.DataStructBitField64Context):
+ Width = self.TransNum(ctx.Number())
if ctx.N != None:
- self.__ErrorHandler(gCVfrVarDataTypeDB.DataTypeAddBitField(ctx.N.text, 'UINT64', Width, ctx.FieldInUnion), ctx.N.line, ctx.N.text)
+ self.ErrorHandler(
+ gVfrVarDataTypeDB.DataTypeAddBitField(
+ ctx.N.text, "UINT64", Width, ctx.FieldInUnion
+ ),
+ ctx.N.line,
+ ctx.N.text,
+ )
else:
- self.__ErrorHandler(gCVfrVarDataTypeDB.DataTypeAddBitField(None, 'UINT64', Width, ctx.FieldInUnion), ctx.D.line, ctx.D.text)
+ self.ErrorHandler(
+ gVfrVarDataTypeDB.DataTypeAddBitField(None, "UINT64", Width, ctx.FieldInUnion),
+ ctx.D.line,
+ ctx.D.text,
+ )
return self.visitChildren(ctx)
-
# Visit a parse tree produced by VfrSyntaxParser#dataStructBitField32.
- def visitDataStructBitField32(self, ctx:VfrSyntaxParser.DataStructBitField32Context):
- Width = self.__TransNum(ctx.Number())
+ def visitDataStructBitField32(self, ctx: VfrSyntaxParser.DataStructBitField32Context):
+ Width = self.TransNum(ctx.Number())
if ctx.N != None:
- self.__ErrorHandler(gCVfrVarDataTypeDB.DataTypeAddBitField(ctx.N.text, 'UINT32', Width, ctx.FieldInUnion), ctx.N.line, ctx.N.text)
+ self.ErrorHandler(
+ gVfrVarDataTypeDB.DataTypeAddBitField(
+ ctx.N.text, "UINT32", Width, ctx.FieldInUnion
+ ),
+ ctx.N.line,
+ ctx.N.text,
+ )
else:
- self.__ErrorHandler(gCVfrVarDataTypeDB.DataTypeAddBitField(None, 'UINT32', Width, ctx.FieldInUnion), ctx.D.line, ctx.D.text)
+ self.ErrorHandler(
+ gVfrVarDataTypeDB.DataTypeAddBitField(None, "UINT32", Width, ctx.FieldInUnion),
+ ctx.D.line,
+ ctx.D.text,
+ )
return self.visitChildren(ctx)
-
# Visit a parse tree produced by VfrSyntaxParser#dataStructBitField16.
- def visitDataStructBitField16(self, ctx:VfrSyntaxParser.DataStructBitField16Context):
- Width = self.__TransNum(ctx.Number())
+ def visitDataStructBitField16(self, ctx: VfrSyntaxParser.DataStructBitField16Context):
+ Width = self.TransNum(ctx.Number())
if ctx.N != None:
- self.__ErrorHandler(gCVfrVarDataTypeDB.DataTypeAddBitField(ctx.N.text, 'UINT16', Width, ctx.FieldInUnion), ctx.N.line, ctx.N.text)
+ self.ErrorHandler(
+ gVfrVarDataTypeDB.DataTypeAddBitField(
+ ctx.N.text, "UINT16", Width, ctx.FieldInUnion
+ ),
+ ctx.N.line,
+ ctx.N.text,
+ )
else:
- self.__ErrorHandler(gCVfrVarDataTypeDB.DataTypeAddBitField(None, 'UINT16', Width, ctx.FieldInUnion), ctx.D.line, ctx.D.text)
+ self.ErrorHandler(
+ gVfrVarDataTypeDB.DataTypeAddBitField(None, "UINT16", Width, ctx.FieldInUnion),
+ ctx.D.line,
+ ctx.D.text,
+ )
return self.visitChildren(ctx)
-
# Visit a parse tree produced by VfrSyntaxParser#dataStructBitField8.
- def visitDataStructBitField8(self, ctx:VfrSyntaxParser.DataStructBitField8Context):
- Width = self.__TransNum(ctx.Number())
+ def visitDataStructBitField8(self, ctx: VfrSyntaxParser.DataStructBitField8Context):
+ Width = self.TransNum(ctx.Number())
if ctx.N != None:
- self.__ErrorHandler(gCVfrVarDataTypeDB.DataTypeAddBitField(ctx.N.text, 'UINT8', Width, ctx.FieldInUnion), ctx.N.line, ctx.N.text)
+ self.ErrorHandler(
+ gVfrVarDataTypeDB.DataTypeAddBitField(ctx.N.text, "UINT8", Width, ctx.FieldInUnion),
+ ctx.N.line,
+ ctx.N.text,
+ )
else:
- self.__ErrorHandler(gCVfrVarDataTypeDB.DataTypeAddBitField(None, 'UINT8', Width, ctx.FieldInUnion), ctx.D.line, ctx.D.text)
+ self.ErrorHandler(
+ gVfrVarDataTypeDB.DataTypeAddBitField(None, "UINT8", Width, ctx.FieldInUnion),
+ ctx.D.line,
+ ctx.D.text,
+ )
return self.visitChildren(ctx)
- def __DeclareStandardDefaultStorage(self, LineNo):
-
- DSObj = CIfrDefaultStore()
- gCVfrDefaultStore.RegisterDefaultStore(DSObj.GetDefaultStore(), "Standard Defaults", EFI_STRING_ID_INVALID, EFI_HII_DEFAULT_CLASS_STANDARD)
- DSObj.SetLineNo (LineNo)
- DSObj.SetDefaultName (EFI_STRING_ID_INVALID)
- DSObj.SetDefaultId (EFI_HII_DEFAULT_CLASS_STANDARD)
-
- DSObjMF = CIfrDefaultStore()
- gCVfrDefaultStore.RegisterDefaultStore(DSObjMF.GetDefaultStore(), "Standard ManuFacturing", EFI_STRING_ID_INVALID, EFI_HII_DEFAULT_CLASS_MANUFACTURING)
- DSObjMF.SetLineNo (LineNo)
- DSObjMF.SetDefaultName (EFI_STRING_ID_INVALID)
- DSObjMF.SetDefaultId (EFI_HII_DEFAULT_CLASS_MANUFACTURING)
-
+ def DeclareStandardDefaultStorage(self, LineNo):
+ DSObj = IfrDefaultStore("Standard Defaults")
+ gVfrDefaultStore.RegisterDefaultStore(
+ DSObj.DefaultStore,
+ "Standard Defaults",
+ EFI_STRING_ID_INVALID,
+ EFI_HII_DEFAULT_CLASS_STANDARD,
+ )
+ DSObj.SetLineNo(LineNo)
+ DSObj.SetDefaultName(EFI_STRING_ID_INVALID)
+ DSObj.SetDefaultId(EFI_HII_DEFAULT_CLASS_STANDARD)
+ DsNode = IfrTreeNode(
+ EFI_IFR_DEFAULTSTORE_OP, DSObj, gFormPkg.StructToStream(DSObj.GetInfo())
+ )
+
+ DSObjMF = IfrDefaultStore("Standard ManuFacturing")
+ gVfrDefaultStore.RegisterDefaultStore(
+ DSObjMF.DefaultStore,
+ "Standard ManuFacturing",
+ EFI_STRING_ID_INVALID,
+ EFI_HII_DEFAULT_CLASS_MANUFACTURING,
+ )
+ DSObjMF.SetLineNo(LineNo)
+ DSObjMF.SetDefaultName(EFI_STRING_ID_INVALID)
+ DSObjMF.SetDefaultId(EFI_HII_DEFAULT_CLASS_MANUFACTURING)
+ DsNodeMF = IfrTreeNode(
+ EFI_IFR_DEFAULTSTORE_OP, DSObjMF, gFormPkg.StructToStream(DSObjMF.GetInfo())
+ )
+
+ return DsNode, DsNodeMF
# Visit a parse tree produced by VfrSyntaxParser#vfrFormSetDefinition.
- def visitVfrFormSetDefinition(self, ctx:VfrSyntaxParser.VfrFormSetDefinitionContext):
- self.__InsertChild(self.__Root, ctx)
- self.__InsertChild(ctx.Node, ctx.classDefinition())
- self.__InsertChild(ctx.Node, ctx.subclassDefinition())
- Line = ctx.start.line
- self.__DeclareStandardDefaultStorage(Line)
+ def visitVfrFormSetDefinition(self, ctx: VfrSyntaxParser.VfrFormSetDefinitionContext):
+ self.InsertChild(self.Root, ctx)
+ self.InsertChild(ctx.Node, ctx.classDefinition())
+ self.InsertChild(ctx.Node, ctx.subclassDefinition())
+
+ DsNode, DsNodeMF = self.DeclareStandardDefaultStorage(ctx.start.line)
+ ctx.Node.insertChild(DsNode)
+ ctx.Node.insertChild(DsNodeMF)
self.visitChildren(ctx)
+
ClassGuidNum = 0
GuidList = []
if ctx.classguidDefinition() != None:
@@ -300,68 +346,101 @@ class VfrSyntaxVisitor(ParseTreeVisitor):
DefaultClassGuid = EFI_HII_PLATFORM_SETUP_FORMSET_GUID
- if (self.__OverrideClassGuid != None and ClassGuidNum >=4):
- self.__ErrorHandler(VfrReturnCode.VFR_RETURN_INVALID_PARAMETER, Line, None, 'Already has 4 class guids, can not add extra class guid!')
+ if self.OverrideClassGuid != None and ClassGuidNum >= 4:
+ self.ErrorHandler(
+ VfrReturnCode.VFR_RETURN_INVALID_PARAMETER,
+ ctx.start.line,
+ None,
+ "Already has 4 class guids, can not add extra class guid!",
+ )
if ClassGuidNum == 0:
- if self.__OverrideClassGuid != None:
- ClassGuidNum = 2
+ if self.OverrideClassGuid != None:
+ ClassGuidNum = 2
else:
- ClassGuidNum = 1
- FSObj = CIfrFormSet(sizeof(EFI_IFR_FORM_SET) + ClassGuidNum * sizeof(EFI_GUID))
+ ClassGuidNum = 1
+ FSObj = IfrFormSet(sizeof(EFI_IFR_FORM_SET) + ClassGuidNum * sizeof(EFI_GUID))
FSObj.SetClassGuid(DefaultClassGuid)
- if (self.__OverrideClassGuid != None):
- FSObj.SetClassGuid(self.__OverrideClassGuid)
+ if self.OverrideClassGuid != None:
+ FSObj.SetClassGuid(self.OverrideClassGuid)
elif ClassGuidNum == 1:
- if self.__OverrideClassGuid != None:
- ClassGuidNum += 1
- FSObj = CIfrFormSet(sizeof(EFI_IFR_FORM_SET) + ClassGuidNum * sizeof(EFI_GUID))
+ if self.OverrideClassGuid != None:
+ ClassGuidNum += 1
+ FSObj = IfrFormSet(sizeof(EFI_IFR_FORM_SET) + ClassGuidNum * sizeof(EFI_GUID))
FSObj.SetClassGuid(GuidList[0])
- if (self.__OverrideClassGuid != None):
- FSObj.SetClassGuid(self.__OverrideClassGuid)
+ if self.OverrideClassGuid != None:
+ FSObj.SetClassGuid(self.OverrideClassGuid)
elif ClassGuidNum == 2:
- if self.__OverrideClassGuid != None:
+ if self.OverrideClassGuid != None:
ClassGuidNum += 1
- FSObj = CIfrFormSet(sizeof(EFI_IFR_FORM_SET) + ClassGuidNum * sizeof(EFI_GUID))
+ FSObj = IfrFormSet(sizeof(EFI_IFR_FORM_SET) + ClassGuidNum * sizeof(EFI_GUID))
FSObj.SetClassGuid(GuidList[0])
FSObj.SetClassGuid(GuidList[1])
- if (self.__OverrideClassGuid != None):
- FSObj.SetClassGuid(self.__OverrideClassGuid)
+ if self.OverrideClassGuid != None:
+ FSObj.SetClassGuid(self.OverrideClassGuid)
elif ClassGuidNum == 3:
- if self.__OverrideClassGuid != None:
- ClassGuidNum += 1
- FSObj = CIfrFormSet(sizeof(EFI_IFR_FORM_SET) + ClassGuidNum * sizeof(EFI_GUID))
+ if self.OverrideClassGuid != None:
+ ClassGuidNum += 1
+ FSObj = IfrFormSet(sizeof(EFI_IFR_FORM_SET) + ClassGuidNum * sizeof(EFI_GUID))
FSObj.SetClassGuid(GuidList[0])
FSObj.SetClassGuid(GuidList[1])
FSObj.SetClassGuid(GuidList[2])
- if (self.__OverrideClassGuid != None):
- FSObj.SetClassGuid(self.__OverrideClassGuid)
+ if self.OverrideClassGuid != None:
+ FSObj.SetClassGuid(self.OverrideClassGuid)
elif ClassGuidNum == 4:
- if self.__OverrideClassGuid != None:
- ClassGuidNum += 1
- FSObj = CIfrFormSet(sizeof(EFI_IFR_FORM_SET) + ClassGuidNum * sizeof(EFI_GUID))
+ if self.OverrideClassGuid != None:
+ ClassGuidNum += 1
+ FSObj = IfrFormSet(sizeof(EFI_IFR_FORM_SET) + ClassGuidNum * sizeof(EFI_GUID))
FSObj.SetClassGuid(GuidList[0])
FSObj.SetClassGuid(GuidList[1])
FSObj.SetClassGuid(GuidList[2])
FSObj.SetClassGuid(GuidList[3])
- FSObj.SetLineNo(Line)
+ FSObj.SetLineNo(ctx.start.line)
FSObj.SetGuid(ctx.guidDefinition().Guid)
- FSObj.SetFormSetTitle(self.__TransNum(ctx.Number(0)))
- FSObj.SetHelp(self.__TransNum(ctx.Number(1)))
+ FSObj.SetFormSetTitle(self.TransNum(ctx.Number(0)))
+ FSObj.SetHelp(self.TransNum(ctx.Number(1)))
+ FSObj.SetClassGuidNum(len(GuidList))
ctx.Node.Data = FSObj
- # Declare undefined Question so that they can be used in expression.
+ ctx.Node.Buffer = gFormPkg.StructToStream(FSObj.GetInfo())
+ if len(GuidList) == 0:
+ ctx.Node.Buffer += gFormPkg.StructToStream(DefaultClassGuid)
+ else:
+ for i in range(0, len(GuidList)):
+ ctx.Node.Buffer += gFormPkg.StructToStream(GuidList[i])
+ # Declare undefined Question so that they can be used in expression.
+ InsertOpCodeList = None
+ if gFormPkg.HavePendingUnassigned():
+ InsertOpCodeList, ReturnCode = gFormPkg.DeclarePendingQuestion(
+ gVfrVarDataTypeDB, gVfrDataStorage, self.VfrQuestionDB, ctx.stop.line
+ )
+ Status = 0 if ReturnCode == VfrReturnCode.VFR_RETURN_SUCCESS else 1
+ self.ParserStatus += Status
+ self.NeedAdjustOpcode = True
+
+ self.InsertEndNode(ctx.Node, ctx.stop.line)
+
+ if self.NeedAdjustOpcode:
+ self.LastFormNode.Child.pop()
+ for InsertOpCode in InsertOpCodeList:
+ InsertNode = IfrTreeNode(
+ InsertOpCode.OpCode,
+ InsertOpCode.Data,
+ gFormPkg.StructToStream(InsertOpCode.Data.GetInfo()),
+ )
+ self.LastFormNode.insertChild(InsertNode)
+
+ gFormPkg.BuildPkg(self.Root)
return ctx.Node
# Visit a parse tree produced by VfrSyntaxParser#classguidDefinition.
- def visitClassguidDefinition(self, ctx:VfrSyntaxParser.ClassguidDefinitionContext):
-
+ def visitClassguidDefinition(self, ctx: VfrSyntaxParser.ClassguidDefinitionContext):
self.visitChildren(ctx)
for GuidCtx in ctx.guidDefinition():
@@ -369,10 +448,9 @@ class VfrSyntaxVisitor(ParseTreeVisitor):
return ctx.Node
-
# Visit a parse tree produced by VfrSyntaxParser#classDefinition.
- def visitClassDefinition(self, ctx:VfrSyntaxParser.ClassDefinitionContext):
- CObj = CIfrClass()
+ def visitClassDefinition(self, ctx: VfrSyntaxParser.ClassDefinitionContext):
+ CObj = IfrClass()
self.visitChildren(ctx)
Class = 0
for ClassNameCtx in ctx.validClassNames():
@@ -380,14 +458,14 @@ class VfrSyntaxVisitor(ParseTreeVisitor):
Line = ctx.start.line
CObj.SetLineNo(Line)
CObj.SetClass(Class)
+ CObj.SetClassStr(self.ExtractOriginalText(ctx))
ctx.Node.Data = CObj
+ ctx.Node.Buffer = gFormPkg.StructToStream(CObj.GetInfo())
return ctx.Node
-
# Visit a parse tree produced by VfrSyntaxParser#validClassNames.
- def visitValidClassNames(self, ctx:VfrSyntaxParser.ValidClassNamesContext):
-
+ def visitValidClassNames(self, ctx: VfrSyntaxParser.ValidClassNamesContext):
self.visitChildren(ctx)
if ctx.ClassNonDevice() != None:
@@ -405,14 +483,13 @@ class VfrSyntaxVisitor(ParseTreeVisitor):
elif ctx.ClassOtherDevice() != None:
ctx.ClassName = EFI_OTHER_DEVICE_CLASS
else:
- ctx.ClassName = self.__TransNum(ctx.Number())
+ ctx.ClassName = self.TransNum(ctx.Number())
return ctx.ClassName
-
# Visit a parse tree produced by VfrSyntaxParser#subclassDefinition.
- def visitSubclassDefinition(self, ctx:VfrSyntaxParser.SubclassDefinitionContext):
- SubObj = CIfrSubClass()
+ def visitSubclassDefinition(self, ctx: VfrSyntaxParser.SubclassDefinitionContext):
+ SubObj = IfrSubClass()
self.visitChildren(ctx)
@@ -428,24 +505,26 @@ class VfrSyntaxVisitor(ParseTreeVisitor):
elif ctx.SubclassSingleUse() != None:
SubClass |= EFI_SINGLE_USE_SUBCLASS
else:
- SubClass = self.__TransNum(ctx.Number())
+ SubClass = self.TransNum(ctx.Number())
SubObj.SetSubClass(SubClass)
+ SubObj.SetSubClassStr(self.ExtractOriginalText(ctx))
+
ctx.Node.Data = SubObj
+ ctx.Node.Buffer = gFormPkg.StructToStream(SubObj.GetInfo())
return ctx.Node
-
# Visit a parse tree produced by VfrSyntaxParser#vfrFormSetList.
- def visitVfrFormSetList(self, ctx:VfrSyntaxParser.VfrFormSetListContext):
+ def visitVfrFormSetList(self, ctx: VfrSyntaxParser.VfrFormSetListContext):
self.visitChildren(ctx)
for Ctx in ctx.vfrFormSet():
- self.__InsertChild(ctx.Node, Ctx)
+ self.InsertChild(ctx.Node, Ctx)
return ctx.Node
# Visit a parse tree produced by VfrSyntaxParser#vfrFormSet.
- def visitVfrFormSet(self, ctx:VfrSyntaxParser.VfrFormSetContext):
+ def visitVfrFormSet(self, ctx: VfrSyntaxParser.VfrFormSetContext):
self.visitChildren(ctx)
if ctx.vfrFormDefinition() != None:
@@ -472,75 +551,91 @@ class VfrSyntaxVisitor(ParseTreeVisitor):
return ctx.Node
# Visit a parse tree produced by VfrSyntaxParser#vfrStatementDefaultStore.
- def visitVfrStatementDefaultStore(self, ctx:VfrSyntaxParser.VfrStatementDefaultStoreContext):
- DSObj = CIfrDefaultStore()
+ def visitVfrStatementDefaultStore(self, ctx: VfrSyntaxParser.VfrStatementDefaultStoreContext):
Line = ctx.start.line
self.visitChildren(ctx)
RefName = ctx.N.text
- DefaultStoreNameId = self.__TransNum(ctx.S.text)
-
- DefaultId = EFI_HII_DEFAULT_CLASS_STANDARD if ctx.Attribute()== None else self.__TransNum(ctx.A.text)
-
- if gCVfrDefaultStore.DefaultIdRegistered(DefaultId) == False:
- self.__ErrorHandler(gCVfrDefaultStore.RegisterDefaultStore(DSObj.GetDefaultStore(), RefName, DefaultStoreNameId, DefaultId) , Line)
+ DSObj = IfrDefaultStore(RefName)
+ DefaultStoreNameId = self.TransNum(ctx.S.text)
+ DefaultId = (
+ EFI_HII_DEFAULT_CLASS_STANDARD if ctx.Attribute() == None else self.TransNum(ctx.A.text)
+ )
+ if ctx.Attribute() != None:
+ DSObj.HasAttr = True
+
+ if gVfrDefaultStore.DefaultIdRegistered(DefaultId) == False:
+ self.ErrorHandler(
+ gVfrDefaultStore.RegisterDefaultStore(
+ DSObj.DefaultStore, RefName, DefaultStoreNameId, DefaultId
+ ),
+ Line,
+ )
DSObj.SetDefaultName(DefaultStoreNameId)
- DSObj.SetDefaultId (DefaultId)
+ DSObj.SetDefaultId(DefaultId)
DSObj.SetLineNo(Line)
+ ctx.Node.Data = DSObj
+ ctx.Node.Buffer = gFormPkg.StructToStream(DSObj.GetInfo())
else:
- pNode, ReturnCode = gCVfrDefaultStore.ReRegisterDefaultStoreById(DefaultId, RefName, DefaultStoreNameId)
- self.__ErrorHandler(ReturnCode, Line)
- DSObj.SetDefaultStore = pNode.ObjAddr
- DSObj.SetLineNo(Line)
-
- ctx.Node.Data = DSObj
-
+ pNode, ReturnCode = gVfrDefaultStore.ReRegisterDefaultStoreById(
+ DefaultId, RefName, DefaultStoreNameId
+ )
+ self.ErrorHandler(ReturnCode, Line)
+ ctx.Node.OpCode = EFI_IFR_SHOWN_DEFAULTSTORE_OP # For display in YAML
+ DSObj.SetDefaultId(DefaultId)
+ DSObj.SetDefaultName(DefaultStoreNameId)
+ ctx.Node.Data = DSObj
return ctx.Node
-
# Visit a parse tree produced by VfrSyntaxParser#vfrStatementVarStoreLinear.
- def visitVfrStatementVarStoreLinear(self, ctx:VfrSyntaxParser.VfrStatementVarStoreLinearContext):
- VSObj = CIfrVarStore()
+ def visitVfrStatementVarStoreLinear(
+ self, ctx: VfrSyntaxParser.VfrStatementVarStoreLinearContext
+ ):
self.visitChildren(ctx)
- Line = ctx.start.line
- VSObj.SetLineNo(Line)
TypeName = str(ctx.getChild(1))
- if TypeName == 'CHAR16':
- TypeName = 'UINT16'
+ if TypeName == "CHAR16":
+ TypeName = "UINT16"
IsBitVarStore = False
if ctx.TN != None:
- IsBitVarStore = gCVfrVarDataTypeDB.DataTypeHasBitField(ctx.TN.text)
+ IsBitVarStore = gVfrVarDataTypeDB.DataTypeHasBitField(ctx.TN.text)
VarStoreId = EFI_VARSTORE_ID_INVALID
if ctx.VarId() != None:
- VarStoreId = self.__TransNum(ctx.ID.text)
- self.__CompareErrorHandler(VarStoreId!=0, True, ctx.ID.line, ctx.ID.text, 'varid 0 is not allowed.')
+ VarStoreId = self.TransNum(ctx.ID.text)
+ self.CompareErrorHandler(
+ VarStoreId != 0, True, ctx.ID.line, ctx.ID.text, "varid 0 is not allowed."
+ )
StoreName = ctx.SN.text
+ VSObj = IfrVarStore(TypeName, StoreName)
+ Line = ctx.start.line
+ VSObj.SetLineNo(Line)
+ VSObj.SetHasVarStoreId(ctx.VarId() != None)
Guid = ctx.guidDefinition().Guid
- self.__ErrorHandler(gCVfrDataStorage.DeclareBufferVarStore(StoreName, Guid, gCVfrVarDataTypeDB, TypeName, VarStoreId, IsBitVarStore), Line)
+ self.ErrorHandler(
+ gVfrDataStorage.DeclareBufferVarStore(
+ StoreName, Guid, gVfrVarDataTypeDB, TypeName, VarStoreId, IsBitVarStore
+ ),
+ Line,
+ )
VSObj.SetGuid(Guid)
- VarStoreId, ReturnCode = gCVfrDataStorage.GetVarStoreId(StoreName, Guid)
- self.__ErrorHandler(ReturnCode, ctx.SN.line, ctx.SN.text)
+ VarStoreId, ReturnCode = gVfrDataStorage.GetVarStoreId(StoreName, Guid)
+ self.ErrorHandler(ReturnCode, ctx.SN.line, ctx.SN.text)
VSObj.SetVarStoreId(VarStoreId)
- Size, ReturnCode = gCVfrVarDataTypeDB.GetDataTypeSizeByTypeName(TypeName)
- self.__ErrorHandler(ReturnCode, Line)
+ Size, ReturnCode = gVfrVarDataTypeDB.GetDataTypeSizeByTypeName(TypeName)
+ self.ErrorHandler(ReturnCode, Line)
VSObj.SetSize(Size)
- VSObj.SetName(StoreName)
-
ctx.Node.Data = VSObj
+ ctx.Node.Buffer = gFormPkg.StructToStream(VSObj.GetInfo())
+ ctx.Node.Buffer += bytes("\0", encoding="utf-8")
return VSObj
-
# Visit a parse tree produced by VfrSyntaxParser#vfrStatementVarStoreEfi.
- def visitVfrStatementVarStoreEfi(self, ctx:VfrSyntaxParser.VfrStatementVarStoreEfiContext):
-
- VSEObj = CIfrVarStoreEfi()
+ def visitVfrStatementVarStoreEfi(self, ctx: VfrSyntaxParser.VfrStatementVarStoreEfiContext):
self.visitChildren(ctx)
Line = ctx.start.line
- VSEObj.SetLineNo(Line)
Guid = ctx.guidDefinition().Guid
@@ -549,76 +644,128 @@ class VfrSyntaxVisitor(ParseTreeVisitor):
VarStoreId = EFI_VARSTORE_ID_INVALID
IsUEFI23EfiVarstore = True
ReturnCode = None
+ NameStringId = None
+ VarSize = None
TypeName = str(ctx.getChild(1))
- if TypeName == 'CHAR16':
- TypeName = 'UINT16'
+ if TypeName == "CHAR16":
+ TypeName = "UINT16"
elif ctx.TN != None:
CustomizedName = True
- IsBitVarStore = gCVfrVarDataTypeDB.DataTypeHasBitField(TypeName)
+ IsBitVarStore = gVfrVarDataTypeDB.DataTypeHasBitField(TypeName)
if ctx.VarId() != None:
- VarStoreId = self.__TransNum(ctx.ID.text)
- self.__CompareErrorHandler(VarStoreId!=0, True, ctx.ID.line, ctx.ID.text, 'varid 0 is not allowed.')
+ VarStoreId = self.TransNum(ctx.ID.text)
+ self.CompareErrorHandler(
+ VarStoreId != 0, True, ctx.ID.line, ctx.ID.text, "varid 0 is not allowed."
+ )
Attributes = 0
- for AtrCtx in ctx.vfrVarStoreEfiAttr():
- Attributes |= AtrCtx.Attr
- VSEObj.SetAttributes(Attributes)
+ AttributesText = ""
+ for i in range(0, len(ctx.vfrVarStoreEfiAttr())):
+ Attributes |= ctx.vfrVarStoreEfiAttr(i).Attr
+
+ if i != len(ctx.vfrVarStoreEfiAttr()) - 1:
+ AttributesText += f"{ctx.vfrVarStoreEfiAttr(i).Attr:#010x} | "
+ else:
+ AttributesText += f"{ctx.vfrVarStoreEfiAttr(i).Attr:#010x}"
if ctx.SN != None:
StoreName = ctx.SN.text
else:
IsUEFI23EfiVarstore = False
- NameStringId = self.__TransNum(ctx.VN.text)
- StoreName = gCVfrStringDB.GetVarStoreNameFromStringId(NameStringId) #
+ NameStringId = self.TransNum(ctx.VN.text)
+ StoreName = gVfrStringDB.GetVarStoreNameFromStringId(NameStringId) #
if StoreName == None:
- gCVfrErrorHandle.HandleWarning(VfrReturnCode.VFR_RETURN_UNSUPPORTED, ctx.VN.line, 'Can\'t get varstore name for this StringId!')
- if not(CustomizedName):
- self.__ErrorHandler(VfrReturnCode.VFR_RETURN_UNSUPPORTED, Line, 'Old style efivarstore must have String Identifier!')
- Size = self.__TransNum(ctx.N.text)
- if Size == 1: TypeName = 'UINT8'
- elif Size == 2: TypeName = 'UINT16'
- elif Size == 4: TypeName = 'UINT32'
- elif Size == 8: TypeName = 'UINT64'
+ gVfrErrorHandle.HandleWarning(
+ VfrReturnCode.VFR_RETURN_UNSUPPORTED,
+ ctx.VN.line,
+ "Can't get varstore name for this StringId!",
+ )
+ if not (CustomizedName):
+ self.ErrorHandler(
+ VfrReturnCode.VFR_RETURN_UNSUPPORTED,
+ Line,
+ "Old style efivarstore must have String Identifier!",
+ )
+ Size = self.TransNum(ctx.N.text)
+ if Size == 1:
+ TypeName = "UINT8"
+ elif Size == 2:
+ TypeName = "UINT16"
+ elif Size == 4:
+ TypeName = "UINT32"
+ elif Size == 8:
+ TypeName = "UINT64"
else:
- self.__ErrorHandler(VfrReturnCode.VFR_RETURN_UNSUPPORTED, ctx.N.line, ctx.N.text)
+ self.ErrorHandler(VfrReturnCode.VFR_RETURN_UNSUPPORTED, ctx.N.line, ctx.N.text)
if IsUEFI23EfiVarstore:
- self.__ErrorHandler(gCVfrDataStorage.DeclareBufferVarStore(StoreName, Guid, gCVfrVarDataTypeDB, TypeName, VarStoreId, IsBitVarStore, Attributes), Line)
- VarStoreId, ReturnCode = gCVfrDataStorage.GetVarStoreId(StoreName, Guid)
- self.__ErrorHandler(ReturnCode, ctx.SN.line, ctx.SN.text)
- Size, ReturnCode = gCVfrVarDataTypeDB.GetDataTypeSizeByTypeName(TypeName)
- self.__ErrorHandler(ReturnCode, Line)
+ self.ErrorHandler(
+ gVfrDataStorage.DeclareBufferVarStore(
+ StoreName,
+ Guid,
+ gVfrVarDataTypeDB,
+ TypeName,
+ VarStoreId,
+ IsBitVarStore,
+ Attributes,
+ ),
+ Line,
+ )
+ VarStoreId, ReturnCode = gVfrDataStorage.GetVarStoreId(StoreName, Guid)
+ self.ErrorHandler(ReturnCode, ctx.SN.line, ctx.SN.text)
+ Size, ReturnCode = gVfrVarDataTypeDB.GetDataTypeSizeByTypeName(TypeName)
+ self.ErrorHandler(ReturnCode, Line)
else:
- self.__ErrorHandler(gCVfrDataStorage.DeclareBufferVarStore(self.__GetText(ctx.TN), Guid, gCVfrVarDataTypeDB, TypeName, VarStoreId, IsBitVarStore, Attributes), Line) #
- VarStoreId, ReturnCode = gCVfrDataStorage.GetVarStoreId(self.__GetText(ctx.TN), Guid)
- self.__ErrorHandler(ReturnCode, ctx.VN.line, ctx.VN.text)
- Size, ReturnCode = gCVfrVarDataTypeDB.GetDataTypeSizeByTypeName(TypeName)
- self.__ErrorHandler(ReturnCode, ctx.N.line)
-
+ self.ErrorHandler(
+ gVfrDataStorage.DeclareBufferVarStore(
+ self.GetText(ctx.TN),
+ Guid,
+ gVfrVarDataTypeDB,
+ TypeName,
+ VarStoreId,
+ IsBitVarStore,
+ Attributes,
+ ),
+ Line,
+ ) #
+ VarStoreId, ReturnCode = gVfrDataStorage.GetVarStoreId(self.GetText(ctx.TN), Guid)
+ self.ErrorHandler(ReturnCode, ctx.VN.line, ctx.VN.text)
+ Size, ReturnCode = gVfrVarDataTypeDB.GetDataTypeSizeByTypeName(TypeName)
+ self.ErrorHandler(ReturnCode, ctx.N.line)
+
+ VSEObj = IfrVarStoreEfi(TypeName, StoreName)
+ VSEObj.SetLineNo(Line)
+ VSEObj.SetHasVarStoreId(ctx.VarId() != None)
VSEObj.SetGuid(Guid)
- VSEObj.SetVarStoreId (VarStoreId)
+ VSEObj.SetVarStoreId(VarStoreId)
VSEObj.SetSize(Size)
- VSEObj.SetName(StoreName)
+ VSEObj.SetAttributes(Attributes)
+ VSEObj.SetAttributesText(AttributesText)
+ VSEObj.SetNameStringId(NameStringId)
+ VSEObj.SetVarSize(VarSize)
ctx.Node.Data = VSEObj
+ ctx.Node.Buffer = gFormPkg.StructToStream(VSEObj.GetInfo())
+ ctx.Node.Buffer += bytes("\0", encoding="utf-8")
return ctx.Node
# Visit a parse tree produced by VfrSyntaxParser#vfrVarStoreEfiAttr.
- def visitVfrVarStoreEfiAttr(self, ctx:VfrSyntaxParser.VfrVarStoreEfiAttrContext):
-
+ def visitVfrVarStoreEfiAttr(self, ctx: VfrSyntaxParser.VfrVarStoreEfiAttrContext):
self.visitChildren(ctx)
- ctx.Attr = self.__TransNum(ctx.Number())
+ ctx.Attr = self.TransNum(ctx.Number())
return ctx.Attr
# Visit a parse tree produced by VfrSyntaxParser#vfrStatementVarStoreNameValue.
- def visitVfrStatementVarStoreNameValue(self, ctx:VfrSyntaxParser.VfrStatementVarStoreNameValueContext):
-
- VSNVObj = CIfrVarStoreNameValue()
+ def visitVfrStatementVarStoreNameValue(
+ self, ctx: VfrSyntaxParser.VfrStatementVarStoreNameValueContext
+ ):
+ StoreName = ctx.SN.text
+ VSNVObj = IfrVarStoreNameValue(StoreName)
self.visitChildren(ctx)
Guid = ctx.guidDefinition().Guid
@@ -627,118 +774,118 @@ class VfrSyntaxVisitor(ParseTreeVisitor):
if ctx.VarId() != None:
HasVarStoreId = True
- VarStoreId = self.__TransNum(ctx.ID.text)
- self.__CompareErrorHandler(VarStoreId !=0, True, ctx.ID.line, ctx.ID.text, 'varid 0 is not allowed')
+ VarStoreId = self.TransNum(ctx.ID.text)
+ self.CompareErrorHandler(
+ VarStoreId != 0, True, ctx.ID.line, ctx.ID.text, "varid 0 is not allowed"
+ )
- StoreName = ctx.SN.text
Created = False
- sIndex = 0 if HasVarStoreId == False else 1
- eIndex = len(ctx.Name())
+ sIndex = 0 if HasVarStoreId == False else 1
+ eIndex = sIndex + len(ctx.Name())
for i in range(sIndex, eIndex):
if Created == False:
- self.__ErrorHandler(gCVfrDataStorage.DeclareNameVarStoreBegin(StoreName, VarStoreId), ctx.SN.line, ctx.SN.text)
+ self.ErrorHandler(
+ gVfrDataStorage.DeclareNameVarStoreBegin(StoreName, VarStoreId),
+ ctx.SN.line,
+ ctx.SN.text,
+ )
Created = True
- Item = self.__TransNum(ctx.Number(i))
- gCVfrDataStorage.NameTableAddItem(Item)
+ Item = self.TransNum(ctx.Number(i))
+ VSNVObj.SetNameItemList(Item)
+ gVfrDataStorage.NameTableAddItem(Item)
- gCVfrDataStorage.DeclareNameVarStoreEnd(Guid)
+ gVfrDataStorage.DeclareNameVarStoreEnd(Guid)
VSNVObj.SetLineNo(ctx.start.line)
VSNVObj.SetGuid(Guid)
- VarstoreId, ReturnCode = gCVfrDataStorage.GetVarStoreId(StoreName, Guid)
- self.__ErrorHandler(ReturnCode, ctx.SN.line, ctx.SN.text)
+ VarstoreId, ReturnCode = gVfrDataStorage.GetVarStoreId(StoreName, Guid)
+ self.ErrorHandler(ReturnCode, ctx.SN.line, ctx.SN.text)
VSNVObj.SetVarStoreId(VarstoreId)
+ VSNVObj.SetHasVarStoreId(HasVarStoreId)
ctx.Node.Data = VSNVObj
+ ctx.Node.Buffer = gFormPkg.StructToStream(VSNVObj.GetInfo())
return ctx.Node
# Visit a parse tree produced by VfrSyntaxParser#vfrStatementDisableIfFormSet.
- def visitVfrStatementDisableIfFormSet(self, ctx:VfrSyntaxParser.VfrStatementDisableIfFormSetContext):
-
- DIObj = CIfrDisableIf()
+ def visitVfrStatementDisableIfFormSet(
+ self, ctx: VfrSyntaxParser.VfrStatementDisableIfFormSetContext
+ ):
+ DIObj = IfrDisableIf()
DIObj.SetLineNo(ctx.start.line)
- self.__ConstantOnlyInExpression = True
+ self.ConstantOnlyInExpression = True
ctx.Node.Data = DIObj
- Condition = 'disableif' + ' ' + self.__ExtractOriginalText(ctx.vfrStatementExpression())
- ctx.Node.Condition = Condition
+ ctx.Node.Condition = (
+ "disableif" + " " + self.ExtractOriginalText(ctx.vfrStatementExpression())
+ )
+ ctx.Node.Expression = self.ExtractOriginalText(ctx.vfrStatementExpression())
self.visitChildren(ctx)
+ self.InsertEndNode(ctx.Node, ctx.stop.line)
return ctx.Node
# Visit a parse tree produced by VfrSyntaxParser#vfrStatementSuppressIfFormSet.
- def visitVfrStatementSuppressIfFormSet(self, ctx:VfrSyntaxParser.VfrStatementSuppressIfFormSetContext):
-
- SIObj = CIfrSuppressIf()
+ def visitVfrStatementSuppressIfFormSet(
+ self, ctx: VfrSyntaxParser.VfrStatementSuppressIfFormSetContext
+ ):
+ SIObj = IfrSuppressIf()
SIObj.SetLineNo(ctx.start.line)
ctx.Node.Data = SIObj
- Condition = 'suppressif' + ' ' + self.__ExtractOriginalText(ctx.vfrStatementExpression())
- ctx.Node.Condition = Condition
+ ctx.Node.Condition = (
+ "suppressif" + " " + self.ExtractOriginalText(ctx.vfrStatementExpression())
+ )
+ ctx.Node.Expression = self.ExtractOriginalText(ctx.vfrStatementExpression())
self.visitChildren(ctx)
+ self.InsertEndNode(ctx.Node, ctx.stop.line)
return ctx.Node
-
# Visit a parse tree produced by VfrSyntaxParser#guidSubDefinition.
- def visitGuidSubDefinition(self, ctx:VfrSyntaxParser.GuidSubDefinitionContext):
-
- ctx.Guid.Data4[0] = self.__TransNum(ctx.Number(0))
- ctx.Guid.Data4[1] = self.__TransNum(ctx.Number(1))
- ctx.Guid.Data4[2] = self.__TransNum(ctx.Number(2))
- ctx.Guid.Data4[3] = self.__TransNum(ctx.Number(3))
- ctx.Guid.Data4[4] = self.__TransNum(ctx.Number(4))
- ctx.Guid.Data4[5] = self.__TransNum(ctx.Number(5))
- ctx.Guid.Data4[6] = self.__TransNum(ctx.Number(6))
- ctx.Guid.Data4[7] = self.__TransNum(ctx.Number(7))
+ def visitGuidSubDefinition(self, ctx: VfrSyntaxParser.GuidSubDefinitionContext):
+ ctx.Guid.Data4[0] = self.TransNum(ctx.Number(0))
+ ctx.Guid.Data4[1] = self.TransNum(ctx.Number(1))
+ ctx.Guid.Data4[2] = self.TransNum(ctx.Number(2))
+ ctx.Guid.Data4[3] = self.TransNum(ctx.Number(3))
+ ctx.Guid.Data4[4] = self.TransNum(ctx.Number(4))
+ ctx.Guid.Data4[5] = self.TransNum(ctx.Number(5))
+ ctx.Guid.Data4[6] = self.TransNum(ctx.Number(6))
+ ctx.Guid.Data4[7] = self.TransNum(ctx.Number(7))
return self.visitChildren(ctx)
-
# Visit a parse tree produced by VfrSyntaxParser#guidDefinition.
- def visitGuidDefinition(self, ctx:VfrSyntaxParser.GuidDefinitionContext):
-
+ def visitGuidDefinition(self, ctx: VfrSyntaxParser.GuidDefinitionContext):
self.visitChildren(ctx)
- ctx.Guid.Data1 = self.__TransNum(ctx.Number(0))
- ctx.Guid.Data2 = self.__TransNum(ctx.Number(1))
- ctx.Guid.Data3 = self.__TransNum(ctx.Number(2))
+ ctx.Guid.Data1 = self.TransNum(ctx.Number(0))
+ ctx.Guid.Data2 = self.TransNum(ctx.Number(1))
+ ctx.Guid.Data3 = self.TransNum(ctx.Number(2))
return None
-
# Visit a parse tree produced by VfrSyntaxParser#getStringId.
- def visitGetStringId(self, ctx:VfrSyntaxParser.GetStringIdContext):
-
- ctx.StringId = self.__TransNum(ctx.Number())
+ def visitGetStringId(self, ctx: VfrSyntaxParser.GetStringIdContext):
+ ctx.StringId = self.TransNum(ctx.Number())
return self.visitChildren(ctx)
-
# Visit a parse tree produced by VfrSyntaxParser#vfrStatementHeader.
- def visitVfrStatementHeader(self, ctx:VfrSyntaxParser.VfrStatementHeaderContext):
-
- ctx.OpObj = ctx.parentCtx.OpObj
- if ctx.OpObj != None:
- Prompt = self.__TransNum(ctx.Number(0))
- ctx.OpObj.SetPrompt(Prompt)
- Help = self.__TransNum(ctx.Number(1))
- ctx.OpObj.SetHelp(Help)
+ def visitVfrStatementHeader(self, ctx: VfrSyntaxParser.VfrStatementHeaderContext):
+ if ctx.Node.Data != None:
+ Prompt = self.TransNum(ctx.Number(0))
+ ctx.Node.Data.SetPrompt(Prompt)
+ Help = self.TransNum(ctx.Number(1))
+ ctx.Node.Data.SetHelp(Help)
return self.visitChildren(ctx)
-
# Visit a parse tree produced by VfrSyntaxParser#vfrQuestionHeader.
- def visitVfrQuestionHeader(self, ctx:VfrSyntaxParser.VfrQuestionHeaderContext):
-
- ctx.OpObj = ctx.parentCtx.OpObj
-
- return self.visitChildren(ctx)
+ def visitVfrQuestionHeader(self, ctx: VfrSyntaxParser.VfrQuestionHeaderContext):
+ return self.visitChildren(ctx)
# Visit a parse tree produced by VfrSyntaxParser#vfrQuestionBaseInfo.
- def visitVfrQuestionBaseInfo(self, ctx:VfrSyntaxParser.VfrQuestionBaseInfoContext):
-
- ctx.OpObj = ctx.parentCtx.OpObj
-
+ def visitVfrQuestionBaseInfo(self, ctx: VfrSyntaxParser.VfrQuestionBaseInfoContext):
ctx.BaseInfo.VarType = EFI_IFR_TYPE_OTHER
ctx.BaseInfo.VarTotalSize = 0
ctx.BaseInfo.Info.VarOffset = EFI_VAROFFSET_INVALID
@@ -748,59 +895,91 @@ class VfrSyntaxVisitor(ParseTreeVisitor):
QName = None
QId = EFI_QUESTION_ID_INVALID
ReturnCode = None
+ self.UsedDefaultArray = []
self.visitChildren(ctx)
+
if ctx.Name() != None:
QName = ctx.QN.text
- ReturnCode = self.__CVfrQuestionDB.FindQuestionByName(QName)
- self.__CompareErrorHandler(ReturnCode, VfrReturnCode.VFR_RETURN_UNDEFINED, ctx.QN.line, ctx.QN.text, 'has already been used please used anther name')
-
- VarIdStr = '' if ctx.VarId() == None else ctx.vfrStorageVarId().VarIdStr
+ ReturnCode = self.VfrQuestionDB.FindQuestionByName(QName)
+ self.CompareErrorHandler(
+ ReturnCode,
+ VfrReturnCode.VFR_RETURN_UNDEFINED,
+ ctx.QN.line,
+ ctx.QN.text,
+ "has already been used please used anther name",
+ )
+
+ VarIdStr = "" if ctx.VarId() == None else ctx.vfrStorageVarId().VarIdStr
if ctx.QuestionId() != None:
- QId = self.__TransNum(ctx.ID.text)
- ReturnCode = self.__CVfrQuestionDB.FindQuestionById(QId)
- self.__CompareErrorHandler(ReturnCode, VfrReturnCode.VFR_RETURN_UNDEFINED, ctx.ID.line, ctx.ID.text, 'has already been used please used anther number')
+ QId = self.TransNum(ctx.ID.text)
+ ReturnCode = self.VfrQuestionDB.FindQuestionById(QId)
+ self.CompareErrorHandler(
+ ReturnCode,
+ VfrReturnCode.VFR_RETURN_UNDEFINED,
+ ctx.ID.line,
+ ctx.ID.text,
+ "has already been used please used anther number",
+ )
if ctx.QType == EFI_QUESION_TYPE.QUESTION_NORMAL:
- if self.__IsCheckBoxOp:
+ if self.IsCheckBoxOp:
ctx.BaseInfo.VarType = EFI_IFR_TYPE_BOOLEAN
- QId, ReturnCode = self.__CVfrQuestionDB.RegisterQuestion(QName, VarIdStr, QId)
- self.__ErrorHandler(ReturnCode, ctx.start.line)
+ QId, ReturnCode = self.VfrQuestionDB.RegisterQuestion(QName, VarIdStr, QId, gFormPkg)
+ self.ErrorHandler(ReturnCode, ctx.start.line)
elif ctx.QType == EFI_QUESION_TYPE.QUESTION_DATE:
ctx.BaseInfo.VarType = EFI_IFR_TYPE_DATE
- QId, ReturnCode = self.__CVfrQuestionDB.RegisterNewDateQuestion(QName, VarIdStr, QId)
- self.__ErrorHandler(ReturnCode, ctx.start.line)
+ QId, ReturnCode = self.VfrQuestionDB.RegisterNewDateQuestion(
+ QName, VarIdStr, QId, gFormPkg
+ )
+ self.ErrorHandler(ReturnCode, ctx.start.line)
elif ctx.QType == EFI_QUESION_TYPE.QUESTION_TIME:
ctx.BaseInfo.VarType = EFI_IFR_TYPE_TIME
- QId, ReturnCode = self.__CVfrQuestionDB.RegisterNewTimeQuestion(QName, VarIdStr, QId)
- self.__ErrorHandler(ReturnCode, ctx.start.line)
+ QId, ReturnCode = self.VfrQuestionDB.RegisterNewTimeQuestion(
+ QName, VarIdStr, QId, gFormPkg
+ )
+ self.ErrorHandler(ReturnCode, ctx.start.line)
elif ctx.QType == EFI_QUESION_TYPE.QUESTION_REF:
ctx.BaseInfo.VarType = EFI_IFR_TYPE_REF
- if VarIdStr != '': #stand for question with storage.
- QId, ReturnCode = self.__CVfrQuestionDB.RegisterRefQuestion(QName, VarIdStr, QId)
- self.__ErrorHandler(ReturnCode, ctx.start.line)
+ if VarIdStr != "": # stand for question with storage.
+ QId, ReturnCode = self.VfrQuestionDB.RegisterRefQuestion(
+ QName, VarIdStr, QId, gFormPkg
+ )
+ self.ErrorHandler(ReturnCode, ctx.start.line)
else:
- QId, ReturnCode = self.__CVfrQuestionDB.RegisterQuestion(QName, None, QId)
- self.__ErrorHandler(ReturnCode, ctx.start.line)
+ QId, ReturnCode = self.VfrQuestionDB.RegisterQuestion(QName, None, QId, gFormPkg)
+ self.ErrorHandler(ReturnCode, ctx.start.line)
else:
- self.__ErrorHandler(VfrReturnCode.VFR_RETURN_FATAL_ERROR, ctx.start.line)
-
- self.__CurrQestVarInfo = ctx.BaseInfo
-
- if ctx.OpObj != None:
- ctx.OpObj.SetQuestionId(QId)
+ self.ErrorHandler(VfrReturnCode.VFR_RETURN_FATAL_ERROR, ctx.start.line)
+
+ self.CurrQestVarInfo = ctx.BaseInfo
+
+ if ctx.Node.OpCode == EFI_IFR_ONE_OF_OP:
+ # need to further update the VarType
+ ctx.Node.Data = IfrOneOf(EFI_IFR_TYPE_NUM_SIZE_64, QName, VarIdStr)
+ self.CurrentQuestion = ctx.Node.Data
+ self.CurrentMinMaxData = ctx.Node.Data
+
+ elif ctx.Node.OpCode == EFI_IFR_NUMERIC_OP:
+ ctx.Node.Data = IfrNumeric(EFI_IFR_TYPE_NUM_SIZE_64, QName, VarIdStr)
+ self.CurrentQuestion = ctx.Node.Data
+ self.CurrentMinMaxData = ctx.Node.Data
+
+ if ctx.Node.Data != None:
+ ctx.Node.Data.SetQName(QName)
+ ctx.Node.Data.SetVarIdStr(VarIdStr)
+ ctx.Node.Data.SetQuestionId(QId)
+ ctx.Node.Data.SetHasQuestionId(ctx.QuestionId() != None)
if ctx.BaseInfo.VarStoreId != EFI_VARSTORE_ID_INVALID:
- ctx.OpObj.SetVarStoreInfo(ctx.BaseInfo)
-
- return ctx.OpObj
+ ctx.Node.Data.SetVarStoreInfo(ctx.BaseInfo)
+ return ctx.Node
# Visit a parse tree produced by VfrSyntaxParser#questionheaderFlagsField.
- def visitQuestionheaderFlagsField(self, ctx:VfrSyntaxParser.QuestionheaderFlagsFieldContext):
-
+ def visitQuestionheaderFlagsField(self, ctx: VfrSyntaxParser.QuestionheaderFlagsFieldContext):
self.visitChildren(ctx)
if ctx.ReadOnlyFlag() != None:
ctx.QHFlag = 0x01
@@ -818,282 +997,333 @@ class VfrSyntaxVisitor(ParseTreeVisitor):
ctx.QHFlag = 0x40
elif ctx.OptionOnlyFlag() != None:
- gCVfrErrorHandle.HandleWarning(EFI_VFR_WARNING_CODE.VFR_WARNING_OBSOLETED_FRAMEWORK_OPCODE, ctx.O.line, ctx.O.text)
+ gVfrErrorHandle.HandleWarning(
+ EFI_VFR_WARNING_CODE.VFR_WARNING_OBSOLETED_FRAMEWORK_OPCODE, ctx.O.line, ctx.O.text
+ )
elif ctx.NVAccessFlag() != None:
- gCVfrErrorHandle.HandleWarning(EFI_VFR_WARNING_CODE.VFR_WARNING_OBSOLETED_FRAMEWORK_OPCODE, ctx.N.line, ctx.N.text)
+ gVfrErrorHandle.HandleWarning(
+ EFI_VFR_WARNING_CODE.VFR_WARNING_OBSOLETED_FRAMEWORK_OPCODE, ctx.N.line, ctx.N.text
+ )
elif ctx.LateCheckFlag() != None:
- gCVfrErrorHandle.HandleWarning(EFI_VFR_WARNING_CODE.VFR_WARNING_OBSOLETED_FRAMEWORK_OPCODE, ctx.L.line, ctx.L.text)
+ gVfrErrorHandle.HandleWarning(
+ EFI_VFR_WARNING_CODE.VFR_WARNING_OBSOLETED_FRAMEWORK_OPCODE, ctx.L.line, ctx.L.text
+ )
return ctx.QHFlag
# Visit a parse tree produced by VfrSyntaxParser#vfrStorageVarIdRule1.
- def visitVfrStorageVarIdRule1(self, ctx:VfrSyntaxParser.VfrStorageVarIdRule1Context):
-
+ def visitVfrStorageVarIdRule1(self, ctx: VfrSyntaxParser.VfrStorageVarIdRule1Context):
self.visitChildren(ctx)
SName = ctx.SN1.text
ctx.VarIdStr += SName
- Idx = self.__TransNum(ctx.I.text)
- ctx.VarIdStr += '['
+ Idx = self.TransNum(ctx.I.text)
+ ctx.VarIdStr += "["
ctx.VarIdStr += ctx.I.text
- ctx.VarIdStr += ']'
+ ctx.VarIdStr += "]"
- ctx.BaseInfo.VarStoreId, ReturnCode = gCVfrDataStorage.GetVarStoreId(SName)
+ ctx.BaseInfo.VarStoreId, ReturnCode = gVfrDataStorage.GetVarStoreId(SName)
if ctx.CheckFlag or ReturnCode == VfrReturnCode.VFR_RETURN_SUCCESS:
- self.__ErrorHandler(ReturnCode, ctx.SN1.line, ctx.SN1.text)
- self.__ErrorHandler(gCVfrDataStorage.GetNameVarStoreInfo(ctx.BaseInfo, Idx), ctx.SN1.line, ctx.SN1.text)
+ self.ErrorHandler(ReturnCode, ctx.SN1.line, ctx.SN1.text)
+ self.ErrorHandler(
+ gVfrDataStorage.GetNameVarStoreInfo(ctx.BaseInfo, Idx), ctx.SN1.line, ctx.SN1.text
+ )
return ctx.VarIdStr
-
# Visit a parse tree produced by VfrSyntaxParser#vfrStorageVarIdRule2.
- def visitVfrStorageVarIdRule2(self, ctx:VfrSyntaxParser.VfrStorageVarIdRule2Context):
-
+ def visitVfrStorageVarIdRule2(self, ctx: VfrSyntaxParser.VfrStorageVarIdRule2Context):
self.visitChildren(ctx)
- VarStr = '' # type.field
+ VarStr = "" # type.field
SName = ctx.SN2.text
ctx.VarIdStr += SName
- ctx.BaseInfo.VarStoreId, ReturnCode = gCVfrDataStorage.GetVarStoreId(SName)
+ ctx.BaseInfo.VarStoreId, ReturnCode = gVfrDataStorage.GetVarStoreId(SName)
if ctx.CheckFlag or ReturnCode == VfrReturnCode.VFR_RETURN_SUCCESS:
- self.__ErrorHandler(ReturnCode, ctx.SN2.line, ctx.SN2.text)
- VarStoreType = gCVfrDataStorage.GetVarStoreType(ctx.BaseInfo.VarStoreId)
- if VarStoreType == EFI_VFR_VARSTORE_TYPE.EFI_VFR_VARSTORE_BUFFER or VarStoreType == EFI_VFR_VARSTORE_TYPE.EFI_VFR_VARSTORE_BUFFER_BITS:
- TName, ReturnCode2 = gCVfrDataStorage.GetBufferVarStoreDataTypeName(ctx.BaseInfo.VarStoreId)
- self.__ErrorHandler(ReturnCode2, ctx.SN2.line, ctx.SN2.text)
+ self.ErrorHandler(ReturnCode, ctx.SN2.line, ctx.SN2.text)
+ VarStoreType = gVfrDataStorage.GetVarStoreType(ctx.BaseInfo.VarStoreId)
+ if (
+ VarStoreType == EFI_VFR_VARSTORE_TYPE.EFI_VFR_VARSTORE_BUFFER
+ or VarStoreType == EFI_VFR_VARSTORE_TYPE.EFI_VFR_VARSTORE_BUFFER_BITS
+ ):
+ TName, ReturnCode2 = gVfrDataStorage.GetBufferVarStoreDataTypeName(
+ ctx.BaseInfo.VarStoreId
+ )
+ self.ErrorHandler(ReturnCode2, ctx.SN2.line, ctx.SN2.text)
VarStr += TName
Count = len(ctx.Dot())
for i in range(0, Count):
if ctx.CheckFlag or ReturnCode == VfrReturnCode.VFR_RETURN_SUCCESS:
- cond = (VarStoreType != EFI_VFR_VARSTORE_TYPE.EFI_VFR_VARSTORE_BUFFER) and (VarStoreType != EFI_VFR_VARSTORE_TYPE.EFI_VFR_VARSTORE_BUFFER_BITS)
- ReturnCode = VfrReturnCode.VFR_RETURN_EFIVARSTORE_USE_ERROR if cond else VfrReturnCode.VFR_RETURN_SUCCESS
- self.__ErrorHandler(ReturnCode, ctx.SN2.line, ctx.SN2.text)
-
- ctx.VarIdStr += '.'
- VarStr += '.'
+ cond = (VarStoreType != EFI_VFR_VARSTORE_TYPE.EFI_VFR_VARSTORE_BUFFER) and (
+ VarStoreType != EFI_VFR_VARSTORE_TYPE.EFI_VFR_VARSTORE_BUFFER_BITS
+ )
+ ReturnCode = (
+ VfrReturnCode.VFR_RETURN_EFIVARSTORE_USE_ERROR
+ if cond
+ else VfrReturnCode.VFR_RETURN_SUCCESS
+ )
+ self.ErrorHandler(ReturnCode, ctx.SN2.line, ctx.SN2.text)
+
+ ctx.VarIdStr += "."
+ VarStr += "."
ctx.VarIdStr += ctx.arrayName(i).SubStr
VarStr += ctx.arrayName(i).SubStrZ
if VarStoreType == EFI_VFR_VARSTORE_TYPE.EFI_VFR_VARSTORE_EFI:
- self.__ErrorHandler(gCVfrDataStorage.GetEfiVarStoreInfo(ctx.BaseInfo), ctx.SN2.line, ctx.SN2.text)
-
- elif VarStoreType == EFI_VFR_VARSTORE_TYPE.EFI_VFR_VARSTORE_BUFFER or VarStoreType == EFI_VFR_VARSTORE_TYPE.EFI_VFR_VARSTORE_BUFFER_BITS:
- ctx.BaseInfo.Info.VarOffset, ctx.BaseInfo.VarType, ctx.BaseInfo.VarTotalSize, ctx.BaseInfo.IsBitVar, ReturnCode = gCVfrVarDataTypeDB.GetDataFieldInfo(VarStr)
- self.__ErrorHandler(ReturnCode, ctx.SN2.line, VarStr)
- VarGuid = gCVfrDataStorage.GetVarStoreGuid(ctx.BaseInfo.VarStoreId)
- self.__ErrorHandler(gCVfrBufferConfig.Register(SName, VarGuid), ctx.SN2.line)
- Dummy = self.gZeroEfiIfrTypeValue
- ReturnCode = VfrReturnCode(gCVfrBufferConfig.Write(
- 'a',
- SName,
- VarGuid,
- None,
- ctx.BaseInfo.VarType,
+ self.ErrorHandler(
+ gVfrDataStorage.GetEfiVarStoreInfo(ctx.BaseInfo), ctx.SN2.line, ctx.SN2.text
+ )
+
+ elif (
+ VarStoreType == EFI_VFR_VARSTORE_TYPE.EFI_VFR_VARSTORE_BUFFER
+ or VarStoreType == EFI_VFR_VARSTORE_TYPE.EFI_VFR_VARSTORE_BUFFER_BITS
+ ):
+ (
ctx.BaseInfo.Info.VarOffset,
+ ctx.BaseInfo.VarType,
ctx.BaseInfo.VarTotalSize,
- Dummy)) #?the definition of dummy is needed to check
- self.__ErrorHandler(ReturnCode, ctx.SN2.line)
- self.__ErrorHandler(gCVfrDataStorage.AddBufferVarStoreFieldInfo(ctx.BaseInfo), ctx.SN2.line)
+ ctx.BaseInfo.IsBitVar,
+ ReturnCode,
+ ) = gVfrVarDataTypeDB.GetDataFieldInfo(VarStr)
+ self.ErrorHandler(ReturnCode, ctx.SN2.line, VarStr)
+ VarGuid = gVfrDataStorage.GetVarStoreGuid(ctx.BaseInfo.VarStoreId)
+ self.ErrorHandler(gVfrBufferConfig.Register(SName, VarGuid), ctx.SN2.line)
+ ReturnCode = VfrReturnCode(
+ gVfrBufferConfig.Write(
+ "a",
+ SName,
+ VarGuid,
+ None,
+ ctx.BaseInfo.VarType,
+ ctx.BaseInfo.Info.VarOffset,
+ ctx.BaseInfo.VarTotalSize,
+ self.Value,
+ )
+ )
+ self.ErrorHandler(ReturnCode, ctx.SN2.line)
+ self.ErrorHandler(
+ gVfrDataStorage.AddBufferVarStoreFieldInfo(ctx.BaseInfo), ctx.SN2.line
+ )
return ctx.VarIdStr
# Visit a parse tree produced by VfrSyntaxParser#vfrConstantValueField.
- def visitVfrConstantValueField(self, ctx:VfrSyntaxParser.VfrConstantValueFieldContext):
+ def visitVfrConstantValueField(self, ctx: VfrSyntaxParser.VfrConstantValueFieldContext):
self.visitChildren(ctx)
IntDecStyle = False
- if self.__CurrentMinMaxData != None and self.__CurrentMinMaxData.IsNumericOpcode():
- NumericQst = CIfrNumeric(self.__CurrentQuestion) #
- IntDecStyle = True if (NumericQst.GetNumericFlags() & EFI_IFR_DISPLAY) == 0 else False #
+ if self.CurrentMinMaxData != None and self.CurrentMinMaxData.IsNumericOpcode():
+ NumericQst = IfrNumeric(self.CurrentQuestion) #
+ IntDecStyle = (
+ True if (NumericQst.GetNumericFlags() & EFI_IFR_DISPLAY) == 0 else False
+ ) #
if ctx.TrueSymbol() != None:
- ctx.Value.b = 1
+ ctx.ValueList.append(1)
elif ctx.FalseSymbol() != None:
- ctx.Value.b = 0
+ ctx.ValueList.append(0)
elif ctx.One() != None:
- ctx.Value.u8 = int(ctx.getText())
+ ctx.ValueList.append(int(ctx.getText()))
elif ctx.Ones() != None:
- ctx.Value.u64 = int(ctx.getText())
+ ctx.ValueList.append(int(ctx.getText()))
elif ctx.Zero() != None:
- ctx.Value.u8 = int(ctx.getText())
+ ctx.ValueList.append(int(ctx.getText()))
elif ctx.Colon() != []:
- ctx.Value.time.Hour = self.__TransNum(ctx.Number(0))
- ctx.Value.time.Minute = self.__TransNum(ctx.Number(1))
- ctx.Value.time.Second = self.__TransNum(ctx.Number(2))
+ Time = EFI_HII_TIME()
+ Time.Hour = self.TransNum(ctx.Number(0))
+ Time.Minute = self.TransNum(ctx.Number(1))
+ Time.Second = self.TransNum(ctx.Number(2))
+ ctx.ValueList.append(Time)
elif ctx.Slash() != []:
- ctx.Value.date.Year = self.__TransNum(ctx.Number(0))
- ctx.Value.date.Month = self.__TransNum(ctx.Number(1))
- ctx.Value.date.Day = self.__TransNum(ctx.Number(2))
+ Date = EFI_HII_DATE()
+ Date.Year = self.TransNum(ctx.Number(0))
+ Date.Month = self.TransNum(ctx.Number(1))
+ Date.Day = self.TransNum(ctx.Number(2))
+ ctx.ValueList.append(Date)
elif ctx.Semicolon() != []:
- ctx.Value.ref.QuestionId = self.__TransNum(ctx.Number(0))
- ctx.Value.ref.FormId = self.__TransNum(ctx.Number(1))
- ctx.Value.ref.DevicePath = self.__TransNum(ctx.Number(2))
- ctx.Value.ref.FormSetGuid = ctx.guidDefinition().Guid
+ Ref = EFI_HII_REF()
+ Ref.QuestionId = self.TransNum(ctx.Number(0))
+ Ref.FormId = self.TransNum(ctx.Number(1))
+ Ref.DevicePath = self.TransNum(ctx.Number(2))
+ Ref.FormSetGuid = ctx.guidDefinition().Guid
+ ctx.ValueList.append(Ref)
elif ctx.StringToken() != None:
- ctx.Value.string = self.__TransNum(ctx.Number(0))
+ ctx.ValueList.append(self.TransNum(ctx.Number(0)))
elif ctx.OpenBrace() != None:
ctx.ListType = True
- Type = self.__CurrQestVarInfo.VarType
+ Type = self.CurrQestVarInfo.VarType
for i in range(0, len(ctx.Number())):
- TempValue = EFI_IFR_TYPE_VALUE()
- if Type == EFI_IFR_TYPE_NUM_SIZE_8:
- TempValue.u8 = self.__TransNum(ctx.Number(i))
- ctx.ValueList.append(TempValue)
-
- if Type == EFI_IFR_TYPE_NUM_SIZE_16:
- TempValue.u16 = self.__TransNum(ctx.Number(i))
- ctx.ValueList.append(TempValue)
-
- if Type == EFI_IFR_TYPE_NUM_SIZE_32:
- TempValue.u32 = self.__TransNum(ctx.Number(i))
- ctx.ValueList.append(TempValue)
+ ctx.ValueList.append(self.TransNum(ctx.Number(i)))
- if Type == EFI_IFR_TYPE_NUM_SIZE_64:
- TempValue.u64 = self.__TransNum(ctx.Number(i))
- ctx.ValueList.append(TempValue)
else:
Negative = True if ctx.Negative() != None else False
# The value stored in bit fields is always set to UINT32 type.
- if self.__CurrQestVarInfo.IsBitVar:
- ctx.Value.u32 = self.__TransNum(ctx.Number(0))
+ if self.CurrQestVarInfo.IsBitVar:
+ ctx.ValueList.append(self.TransNum(ctx.Number(0)))
else:
- Type = self.__CurrQestVarInfo.VarType
+ Type = self.CurrQestVarInfo.VarType
if Type == EFI_IFR_TYPE_NUM_SIZE_8:
- ctx.Value.u8 = self.__TransNum(ctx.Number(0))
+ Value = self.TransNum(ctx.Number(0))
if IntDecStyle:
if Negative:
- if ctx.Value.u8 > 0x80:
- self.__ErrorHandler(VfrReturnCode.VFR_RETURN_INVALID_PARAMETER, ctx.start.line, "INT8 type can't big than 0x7F, small than -0x80")
+ if Value > 0x80:
+ self.ErrorHandler(
+ VfrReturnCode.VFR_RETURN_INVALID_PARAMETER,
+ ctx.start.line,
+ "INT8 type can't big than 0x7F, small than -0x80",
+ )
else:
- if ctx.Value.u8 > 0x7F:
- self.__ErrorHandler(VfrReturnCode.VFR_RETURN_INVALID_PARAMETER, ctx.start.line, "INT8 type can't big than 0x7F, small than -0x80")
+ if Value > 0x7F:
+ self.ErrorHandler(
+ VfrReturnCode.VFR_RETURN_INVALID_PARAMETER,
+ ctx.start.line,
+ "INT8 type can't big than 0x7F, small than -0x80",
+ )
if Negative:
- ctx.Value.u8 = ~ctx.Value.u8 + 1
+ Value = ~Value + 1
+ ctx.ValueList.append(Value)
if Type == EFI_IFR_TYPE_NUM_SIZE_16:
- ctx.Value.u16 = self.__TransNum(ctx.Number(0))
+ Value = self.TransNum(ctx.Number(0))
if IntDecStyle:
if Negative:
- if ctx.Value.u16 > 0x8000:
- self.__ErrorHandler(VfrReturnCode.VFR_RETURN_INVALID_PARAMETER, ctx.start.line, "INT16 type can't big than 0x7FFF, small than -0x8000")
+ if Value > 0x8000:
+ self.ErrorHandler(
+ VfrReturnCode.VFR_RETURN_INVALID_PARAMETER,
+ ctx.start.line,
+ "INT16 type can't big than 0x7FFF, small than -0x8000",
+ )
else:
- if ctx.Value.u16 > 0x7FFF:
- self.__ErrorHandler(VfrReturnCode.VFR_RETURN_INVALID_PARAMETER, ctx.start.line, "INT16 type can't big than 0x7FFF, small than -0x8000")
+ if Value > 0x7FFF:
+ self.ErrorHandler(
+ VfrReturnCode.VFR_RETURN_INVALID_PARAMETER,
+ ctx.start.line,
+ "INT16 type can't big than 0x7FFF, small than -0x8000",
+ )
if Negative:
- ctx.Value.u16 = ~ctx.Value.u16 + 1
+ Value = ~Value + 1
+ ctx.ValueList.append(Value)
if Type == EFI_IFR_TYPE_NUM_SIZE_32:
- ctx.Value.u32 = self.__TransNum(ctx.Number(0))
+ Value = self.TransNum(ctx.Number(0))
if IntDecStyle:
if Negative:
- if ctx.Value.u32 > 0x80000000:
- self.__ErrorHandler(VfrReturnCode.VFR_RETURN_INVALID_PARAMETER, ctx.start.line, "INT32 type can't big than 0x7FFFFFFF, small than -0x80000000")
+ if Value > 0x80000000:
+ self.ErrorHandler(
+ VfrReturnCode.VFR_RETURN_INVALID_PARAMETER,
+ ctx.start.line,
+ "INT32 type can't big than 0x7FFFFFFF, small than -0x80000000",
+ )
else:
- if ctx.Value.u32 > 0X7FFFFFFF:
- self.__ErrorHandler(VfrReturnCode.VFR_RETURN_INVALID_PARAMETER, ctx.start.line, "INT32 type can't big than 0x7FFFFFFF, small than -0x80000000")
+ if Value > 0x7FFFFFFF:
+ self.ErrorHandler(
+ VfrReturnCode.VFR_RETURN_INVALID_PARAMETER,
+ ctx.start.line,
+ "INT32 type can't big than 0x7FFFFFFF, small than -0x80000000",
+ )
if Negative:
- ctx.Value.u32 = ~ctx.Value.u32 + 1
+ Value = ~Value + 1
+ ctx.ValueList.append(Value)
if Type == EFI_IFR_TYPE_NUM_SIZE_64:
- ctx.Value.u64 = self.__TransNum(ctx.Number(0))
+ Value = self.TransNum(ctx.Number(0))
if IntDecStyle:
if Negative:
- if ctx.Value.u64 > 0x8000000000000000:
- self.__ErrorHandler(VfrReturnCode.VFR_RETURN_INVALID_PARAMETER, ctx.start.line, "INT64 type can't big than 0x7FFFFFFFFFFFFFFF, small than -0x8000000000000000")
+ if Value > 0x8000000000000000:
+ self.ErrorHandler(
+ VfrReturnCode.VFR_RETURN_INVALID_PARAMETER,
+ ctx.start.line,
+ "INT64 type can't big than 0x7FFFFFFFFFFFFFFF, small than -0x8000000000000000",
+ )
else:
- if ctx.Value.u64 > 0x7FFFFFFFFFFFFFFF:
- self.__ErrorHandler(VfrReturnCode.VFR_RETURN_INVALID_PARAMETER, ctx.start.line, "INT64 type can't big than 0x7FFFFFFFFFFFFFFF, small than -0x8000000000000000")
+ if Value > 0x7FFFFFFFFFFFFFFF:
+ self.ErrorHandler(
+ VfrReturnCode.VFR_RETURN_INVALID_PARAMETER,
+ ctx.start.line,
+ "INT64 type can't big than 0x7FFFFFFFFFFFFFFF, small than -0x8000000000000000",
+ )
if Negative:
- ctx.Value.u64 = ~ctx.Value.u64 + 1
-
- if Type == EFI_IFR_TYPE_BOOLEAN:
- ctx.Value.b = self.__TransNum(ctx.Number(0))
-
- if Type == EFI_IFR_TYPE_BOOLEAN:
- ctx.Value.string = self.__TransNum(ctx.Number(0))
+ Value = ~Value + 1
+ ctx.ValueList.append(Value)
- return ctx.Value, ctx.ValueList
+ else:
+ ctx.ValueList.append(self.TransNum(ctx.Number(0)))
+ return ctx.ValueList
# Visit a parse tree produced by VfrSyntaxParser#vfrImageTag.
- def visitVfrImageTag(self, ctx:VfrSyntaxParser.VfrImageTagContext):
-
- IObj = CIfrImage()
+ def visitVfrImageTag(self, ctx: VfrSyntaxParser.VfrImageTagContext):
+ IObj = IfrImage()
self.visitChildren(ctx)
IObj.SetLineNo(ctx.start.line)
- IObj.SetImageId(self.__TransNum(ctx.Number()))
+ IObj.SetImageId(self.TransNum(ctx.Number()))
ctx.Node.Data = IObj
-
+ ctx.Node.Buffer = gFormPkg.StructToStream(IObj.GetInfo())
return ctx.Node
-
# Visit a parse tree produced by VfrSyntaxParser#vfrLockedTag.
- def visitVfrLockedTag(self, ctx:VfrSyntaxParser.VfrLockedTagContext):
-
- LObj=CIfrLocked()
+ def visitVfrLockedTag(self, ctx: VfrSyntaxParser.VfrLockedTagContext):
+ LObj = IfrLocked()
self.visitChildren(ctx)
LObj.SetLineNo(ctx.start.line)
ctx.Node.Data = LObj
-
+ ctx.Node.Buffer = gFormPkg.StructToStream(LObj.GetInfo())
return ctx.Node
-
# Visit a parse tree produced by VfrSyntaxParser#vfrStatementStatTag.
- def visitVfrStatementStatTag(self, ctx:VfrSyntaxParser.VfrStatementStatTagContext):
-
+ def visitVfrStatementStatTag(self, ctx: VfrSyntaxParser.VfrStatementStatTagContext):
self.visitChildren(ctx)
if ctx.vfrImageTag() != None:
ctx.Node = ctx.vfrImageTag().Node
- else:
+ elif ctx.vfrLockedTag() != None:
ctx.Node = ctx.vfrLockedTag().Node
return ctx.Node
-
# Visit a parse tree produced by VfrSyntaxParser#vfrStatementStatTagList.
- def visitVfrStatementStatTagList(self, ctx:VfrSyntaxParser.VfrStatementStatTagListContext):
-
+ def visitVfrStatementStatTagList(self, ctx: VfrSyntaxParser.VfrStatementStatTagListContext):
self.visitChildren(ctx)
for Ctx in ctx.vfrStatementStatTag():
- self.__InsertChild(ctx.Node, Ctx)
+ self.InsertChild(ctx.Node, Ctx)
return ctx.Node
-
# Visit a parse tree produced by VfrSyntaxParser#vfrFormDefinition.
- def visitVfrFormDefinition(self, ctx:VfrSyntaxParser.VfrFormDefinitionContext):
-
- FObj = CIfrForm()
+ def visitVfrFormDefinition(self, ctx: VfrSyntaxParser.VfrFormDefinitionContext):
+ FObj = IfrForm()
self.visitChildren(ctx)
FObj.SetLineNo(ctx.start.line)
- FormId = self.__TransNum(ctx.Number(0))
+ FormId = self.TransNum(ctx.Number(0))
FObj.SetFormId(FormId)
- FormTitle = self.__TransNum(ctx.Number(1))
+ FormTitle = self.TransNum(ctx.Number(1))
FObj.SetFormTitle(FormTitle)
ctx.Node.Data = FObj
for Ctx in ctx.vfrForm():
- self.__InsertChild(ctx.Node, Ctx)
+ self.InsertChild(ctx.Node, Ctx)
+ ctx.Node.Buffer = gFormPkg.StructToStream(FObj.GetInfo())
+
+ self.InsertEndNode(ctx.Node, ctx.stop.line)
+ self.LastFormNode = ctx.Node
return ctx.Node
# Visit a parse tree produced by VfrSyntaxParser#vfrForm.
- def visitVfrForm(self, ctx:VfrSyntaxParser.VfrFormContext):
-
+ def visitVfrForm(self, ctx: VfrSyntaxParser.VfrFormContext):
self.visitChildren(ctx)
if ctx.vfrStatementImage() != None:
ctx.Node = ctx.vfrStatementImage().Node
@@ -1124,63 +1354,70 @@ class VfrSyntaxVisitor(ParseTreeVisitor):
return ctx.Node
-
# Visit a parse tree produced by VfrSyntaxParser#vfrFormMapDefinition.
- def visitVfrFormMapDefinition(self, ctx:VfrSyntaxParser.VfrFormMapDefinitionContext):
-
- FMapObj = CIfrFormMap()
+ def visitVfrFormMapDefinition(self, ctx: VfrSyntaxParser.VfrFormMapDefinitionContext):
+ FMapObj = IfrFormMap()
self.visitChildren(ctx)
+ FormMapMethodNumber = len(ctx.MapTitle())
Line = ctx.start.line
FMapObj.SetLineNo(Line)
- self.__ErrorHandler(FMapObj.SetFormId(self.__TransNum(ctx.S1.text)), ctx.S1.line, ctx.S1.line)
- FormMapMethodNumber = len(ctx.MapTitle())
+ self.ErrorHandler(FMapObj.SetFormId(self.TransNum(ctx.S1.text)), ctx.S1.line, ctx.S1.line)
if FormMapMethodNumber == 0:
- self.__ErrorHandler(VfrReturnCode.VFR_RETURN_INVALID_PARAMETER, Line, 'No MapMethod is set for FormMap!')
+ self.ErrorHandler(
+ VfrReturnCode.VFR_RETURN_INVALID_PARAMETER, Line, "No MapMethod is set for FormMap!"
+ )
else:
for i in range(0, FormMapMethodNumber):
- FMapObj.SetFormMapMethod(self.__TransNum(ctx.Number(i+1)), ctx.guidDefinition(i).Guid)
+ FMapObj.SetFormMapMethod(
+ self.TransNum(ctx.Number(i + 1)), ctx.guidDefinition(i).Guid
+ )
+ FormMap = FMapObj.GetInfo()
+ MethodMapList = FMapObj.GetMethodMapList()
+ for MethodMap in MethodMapList:
+ # Extend Header Size for MethodMapList
+ FormMap.Header.Length += sizeof(EFI_IFR_FORM_MAP_METHOD)
+
ctx.Node.Data = FMapObj
+ ctx.Node.Buffer = gFormPkg.StructToStream(FormMap)
+ for MethodMap in MethodMapList:
+ ctx.Node.Buffer += gFormPkg.StructToStream(MethodMap)
for Ctx in ctx.vfrForm():
- self.__InsertChild(ctx.Node, Ctx)
+ self.InsertChild(ctx.Node, Ctx)
+ self.InsertEndNode(ctx.Node, ctx.stop.line)
return ctx.Node
-
# Visit a parse tree produced by VfrSyntaxParser#vfrStatementImage.
- def visitVfrStatementImage(self, ctx:VfrSyntaxParser.VfrStatementImageContext):
-
+ def visitVfrStatementImage(self, ctx: VfrSyntaxParser.VfrStatementImageContext):
self.visitChildren(ctx)
ctx.Node = ctx.vfrImageTag().Node
return ctx.Node
-
# Visit a parse tree produced by VfrSyntaxParser#vfrStatementLocked.
- def visitVfrStatementLocked(self, ctx:VfrSyntaxParser.VfrStatementLockedContext):
-
+ def visitVfrStatementLocked(self, ctx: VfrSyntaxParser.VfrStatementLockedContext):
self.visitChildren(ctx)
ctx.Node = ctx.vfrLockedTag().Node
return ctx.Node
# Visit a parse tree produced by VfrSyntaxParser#vfrStatementRules.
- def visitVfrStatementRules(self, ctx:VfrSyntaxParser.VfrStatementRulesContext):
-
- RObj = CIfrRule()
+ def visitVfrStatementRules(self, ctx: VfrSyntaxParser.VfrStatementRulesContext):
+ RObj = IfrRule()
self.visitChildren(ctx)
RObj.SetLineNo(ctx.start.line)
- RuleName = self.__TransId(ctx.StringIdentifier())
- self.__CVfrRulesDB.RegisterRule(RuleName)
- RObj.SetRuleId(self.__CVfrRulesDB.GetRuleId(RuleName))
+ RuleName = self.TransId(ctx.StringIdentifier())
+ RObj.SetRuleName(RuleName)
+ self.VfrRulesDB.RegisterRule(RuleName)
+ RObj.SetRuleId(self.VfrRulesDB.GetRuleId(RuleName))
ctx.Node.Data = RObj
- ctx.Node.Expression = self.__ExtractOriginalText(ctx.vfrStatementExpression())
-
# expression
- # end rule
+ ctx.Node.Expression = self.ExtractOriginalText(ctx.vfrStatementExpression())
+ ctx.Node.Buffer = gFormPkg.StructToStream(RObj.GetInfo())
+ self.InsertEndNode(ctx.Node, ctx.stop.line)
return ctx.Node
# Visit a parse tree produced by VfrSyntaxParser#vfrStatementStat.
- def visitVfrStatementStat(self, ctx:VfrSyntaxParser.VfrStatementStatContext):
-
+ def visitVfrStatementStat(self, ctx: VfrSyntaxParser.VfrStatementStatContext):
self.visitChildren(ctx)
if ctx.vfrStatementSubTitle() != None:
ctx.Node = ctx.vfrStatementSubTitle().Node
@@ -1190,35 +1427,35 @@ class VfrSyntaxVisitor(ParseTreeVisitor):
ctx.Node = ctx.vfrStatementCrossReference().Node
return ctx.Node
-
-
# Visit a parse tree produced by VfrSyntaxParser#vfrStatementSubTitle.
- def visitVfrStatementSubTitle(self, ctx:VfrSyntaxParser.VfrStatementSubTitleContext):
-
- SObj = ctx.OpObj
+ def visitVfrStatementSubTitle(self, ctx: VfrSyntaxParser.VfrStatementSubTitleContext):
+ SObj = IfrSubtitle()
Line = ctx.start.line
SObj.SetLineNo(Line)
- Prompt = self.__TransNum(ctx.Number())
+ Prompt = self.TransNum(ctx.Number())
SObj.SetPrompt(Prompt)
self.visitChildren(ctx)
if ctx.vfrSubtitleFlags() != None:
SObj.SetFlags(ctx.vfrSubtitleFlags().SubFlags)
+ SObj.SetFlagsStream(self.ExtractOriginalText(ctx.vfrSubtitleFlags()))
- ctx.Node.Data = SObj
- self.__InsertChild(ctx.Node, ctx.vfrStatementStatTagList())
+ ctx.Node.Buffer = gFormPkg.StructToStream(SObj.GetInfo())
# sequence question
for Ctx in ctx.vfrStatementSubTitleComponent():
- self.__InsertChild(ctx.Node, Ctx)
+ self.InsertChild(ctx.Node, Ctx)
+ ctx.Node.Data = SObj
+ self.InsertEndNode(ctx.Node, ctx.stop.line)
return ctx.Node
# Visit a parse tree produced by VfrSyntaxParser#vfrStatementSubTitleComponent.
- def visitVfrStatementSubTitleComponent(self, ctx:VfrSyntaxParser.VfrStatementSubTitleComponentContext):
-
+ def visitVfrStatementSubTitleComponent(
+ self, ctx: VfrSyntaxParser.VfrStatementSubTitleComponentContext
+ ):
self.visitChildren(ctx)
if ctx.vfrStatementQuestions() != None:
ctx.Node = ctx.vfrStatementQuestions().Node
@@ -1226,10 +1463,8 @@ class VfrSyntaxVisitor(ParseTreeVisitor):
ctx.Node = ctx.vfrStatementStat().Node
return ctx.Node
-
# Visit a parse tree produced by VfrSyntaxParser#vfrSubtitleFlags.
- def visitVfrSubtitleFlags(self, ctx:VfrSyntaxParser.VfrSubtitleFlagsContext):
-
+ def visitVfrSubtitleFlags(self, ctx: VfrSyntaxParser.VfrSubtitleFlagsContext):
self.visitChildren(ctx)
for FlagsFieldCtx in ctx.subtitleFlagsField():
@@ -1237,83 +1472,87 @@ class VfrSyntaxVisitor(ParseTreeVisitor):
return None
-
# Visit a parse tree produced by VfrSyntaxParser#subtitleFlagsField.
- def visitSubtitleFlagsField(self, ctx:VfrSyntaxParser.SubtitleFlagsFieldContext):
-
+ def visitSubtitleFlagsField(self, ctx: VfrSyntaxParser.SubtitleFlagsFieldContext):
if ctx.Number() != None:
- ctx.Flag = self.__TransNum(ctx.Number())
+ ctx.Flag = self.TransNum(ctx.Number())
else:
ctx.Flag = 0x01
return self.visitChildren(ctx)
-
# Visit a parse tree produced by VfrSyntaxParser#vfrStatementStaticText.
- def visitVfrStatementStaticText(self, ctx:VfrSyntaxParser.VfrStatementStaticTextContext):
-
+ def visitVfrStatementStaticText(self, ctx: VfrSyntaxParser.VfrStatementStaticTextContext):
self.visitChildren(ctx)
QId = EFI_QUESTION_ID_INVALID
- Help = self.__TransNum(ctx.S1.text)
- Prompt = self.__TransNum(ctx.S2.text)
+ Help = self.TransNum(ctx.S1.text)
+ Prompt = self.TransNum(ctx.S2.text)
TxtTwo = EFI_STRING_ID_INVALID
if ctx.S3 != None:
- TxtTwo = self.__TransNum(ctx.S3.text)
+ TxtTwo = self.TransNum(ctx.S3.text)
TextFlags = 0
- for FlagsFieldCtx in ctx.staticTextFlagsField():
- TextFlags |= FlagsFieldCtx.Flag
+ FlagsStream = ""
+ for i in range(0, len(ctx.staticTextFlagsField())):
+ TextFlags |= ctx.staticTextFlagsField(i).Flag
+ FlagsStream += self.ExtractOriginalText(ctx.staticTextFlagsField(i))
+ if i != len(ctx.staticTextFlagsField()) - 1:
+ FlagsStream += " | "
if TextFlags & EFI_IFR_FLAG_CALLBACK:
if TxtTwo != EFI_STRING_ID_INVALID:
- gCVfrErrorHandle.HandleWarning(EFI_VFR_WARNING_CODE.VFR_WARNING_ACTION_WITH_TEXT_TWO, ctx.S3.line, ctx.S3.text)
+ gVfrErrorHandle.HandleWarning(
+ EFI_VFR_WARNING_CODE.VFR_WARNING_ACTION_WITH_TEXT_TWO, ctx.S3.line, ctx.S3.text
+ )
- AObj = CIfrAction()
- QId, _ = self.__CVfrQuestionDB.RegisterQuestion(None, None, QId)
+ AObj = IfrAction()
+ QId, _ = self.VfrQuestionDB.RegisterQuestion(None, None, QId, gFormPkg)
AObj.SetLineNo(ctx.F.line)
AObj.SetQuestionId(QId)
AObj.SetHelp(Help)
AObj.SetPrompt(Prompt)
- self.__ErrorHandler(AObj.SetFlags(TextFlags), ctx.F.line)
+ AObj.SetFlagsStream(FlagsStream)
+ self.ErrorHandler(AObj.SetFlags(TextFlags), ctx.F.line)
if ctx.Key() != None:
- Key = self.__TransNum(ctx.S4.text)
- self.__AssignQuestionKey(AObj, Key)
+ AObj.SetHasKey(True)
+ Key = self.TransNum(ctx.S4.text)
+ self.AssignQuestionKey(AObj, Key)
ctx.Node.Data = AObj
- ctx.Node.OpCode = EFI_IFR_ACTION_OP #
-
+ ctx.Node.OpCode = EFI_IFR_TEXT_OP #
+ ctx.Node.Buffer = gFormPkg.StructToStream(AObj.GetInfo())
+ self.InsertEndNode(ctx.Node, ctx.stop.line)
else:
- TObj = CIfrText()
+ TObj = IfrText()
Line = ctx.start.line
TObj.SetLineNo(Line)
TObj.SetHelp(Help)
TObj.SetPrompt(Prompt)
- TObj.SetTextTwo(TxtTwo)
+ if TxtTwo != EFI_STRING_ID_INVALID:
+ TObj.SetTextTwo(TxtTwo)
+ TObj.SetHasTextTwo(True)
ctx.Node.Data = TObj
+ ctx.Node.Buffer = gFormPkg.StructToStream(TObj.GetInfo())
return ctx.Node
-
-
# Visit a parse tree produced by VfrSyntaxParser#staticTextFlagsField.
- def visitStaticTextFlagsField(self, ctx:VfrSyntaxParser.StaticTextFlagsFieldContext):
-
+ def visitStaticTextFlagsField(self, ctx: VfrSyntaxParser.StaticTextFlagsFieldContext):
self.visitChildren(ctx)
if ctx.Number() != None:
- ctx.Flag = self.__TransNum(ctx.N.text)
+ ctx.Flag = self.TransNum(ctx.N.text)
if ctx.Flag != 0:
- self.__ErrorHandler(VfrReturnCode.VFR_RETURN_UNSUPPORTED, ctx.N.line)
+ self.ErrorHandler(VfrReturnCode.VFR_RETURN_UNSUPPORTED, ctx.N.line)
else:
-
ctx.Flag = ctx.questionheaderFlagsField().QHFlag
return ctx.Flag
-
# Visit a parse tree produced by VfrSyntaxParser#vfrStatementCrossReference.
- def visitVfrStatementCrossReference(self, ctx:VfrSyntaxParser.VfrStatementCrossReferenceContext):
-
+ def visitVfrStatementCrossReference(
+ self, ctx: VfrSyntaxParser.VfrStatementCrossReferenceContext
+ ):
self.visitChildren(ctx)
if ctx.vfrStatementGoto() != None:
ctx.Node = ctx.vfrStatementGoto().Node
@@ -1321,142 +1560,127 @@ class VfrSyntaxVisitor(ParseTreeVisitor):
ctx.Node = ctx.vfrStatementResetButton().Node
return ctx.Node
-
-
# Visit a parse tree produced by VfrSyntaxParser#vfrStatementGoto.
- def visitVfrStatementGoto(self, ctx:VfrSyntaxParser.VfrStatementGotoContext):
-
+ def visitVfrStatementGoto(self, ctx: VfrSyntaxParser.VfrStatementGotoContext):
RefType = 5
DevPath = EFI_STRING_ID_INVALID
QId = EFI_QUESTION_ID_INVALID
BitMask = 0
Line = ctx.start.line
- R5Obj = CIfrRef5()
+ R5Obj = IfrRef5()
R5Obj.SetLineNo(Line)
- ctx.OpObj = R5Obj
- #ctx.OHObj = R5Obj
+ GObj = R5Obj
if ctx.DevicePath() != None:
RefType = 4
- DevPath = self.__TransNum(ctx.Number(0))
- FId = self.__TransNum(ctx.Number(1))
- QId = self.__TransNum(ctx.Number(2))
- R4Obj = CIfrRef4()
+ DevPath = self.TransNum(ctx.Number(0))
+ FId = self.TransNum(ctx.Number(1))
+ QId = self.TransNum(ctx.Number(2))
+ R4Obj = IfrRef4()
R4Obj.SetLineNo(Line)
R4Obj.SetDevicePath(DevPath)
R4Obj.SetFormId(FId)
- R4Obj.SetQuestionId(QId)
- ctx.OpObj = R4Obj
- #ctx.OHObj = R4Obj
+ R4Obj.SetQId(QId)
+ GObj = R4Obj
elif ctx.FormSetGuid() != None:
RefType = 3
- FId = self.__TransNum(ctx.Number(0))
- QId = self.__TransNum(ctx.Number(1))
- R3Obj = CIfrRef3()
+ FId = self.TransNum(ctx.Number(0))
+ QId = self.TransNum(ctx.Number(1))
+ R3Obj = IfrRef3()
R3Obj.SetLineNo(Line)
R3Obj.SetFormId(FId)
- R3Obj.SetQuestionId(QId)
- ctx.OpObj = R3Obj
- #ctx.OHObj = R3Obj
+ R3Obj.SetQId(QId)
+ GObj = R3Obj
- elif ctx.FormId() != None:
- FId = self.__TransNum(ctx.Number(0))
+ elif ctx.Question() != None:
+ FId = self.TransNum(ctx.Number(0))
RefType = 2
if ctx.QN != None:
Name = ctx.QN.text
- QId, BitMask, _ = self.__CVfrQuestionDB.GetQuestionId(Name)
+ QId, BitMask, _ = self.VfrQuestionDB.GetQuestionId(Name)
if QId == EFI_QUESTION_ID_INVALID:
- self.__ErrorHandler(VfrReturnCode.VFR_RETURN_UNDEFINED, ctx.QN.line)
+ self.ErrorHandler(VfrReturnCode.VFR_RETURN_UNDEFINED, ctx.QN.line)
else:
- QId = self.__TransNum(ctx.Number(1))
- R2Obj = CIfrRef2()
+ QId = self.TransNum(ctx.Number(1))
+ R2Obj = IfrRef2()
R2Obj.SetLineNo(Line)
R2Obj.SetFormId(FId)
- R2Obj.SetQuestionId(QId)
- ctx.OpObj = R2Obj
- # ctx.OHObj = R2Obj
+ R2Obj.SetQId(QId)
+ GObj = R2Obj
-
- elif str(ctx.getChild(1)) == str(ctx.Number(0)):
+ elif ctx.N != None:
RefType = 1
- FId = self.__TransNum(ctx.Number(0))
- RObj = CIfrRef()
+ FId = self.TransNum(ctx.Number(0))
+ RObj = IfrRef()
RObj.SetLineNo(Line)
RObj.SetFormId(FId)
- ctx.OpObj = RObj
- # ctx.OHObj = RObj
+ GObj = RObj
+
+ ctx.Node.Data = GObj
self.visitChildren(ctx)
- if self.__CurrQestVarInfo.VarType == EFI_IFR_TYPE_OTHER:
- self.__CurrQestVarInfo.VarType == EFI_IFR_TYPE_REF
+ if self.CurrQestVarInfo.VarType == EFI_IFR_TYPE_OTHER:
+ self.CurrQestVarInfo.VarType == EFI_IFR_TYPE_REF
if RefType == 4 or RefType == 3:
- ctx.OpObj.SetFormSetId(ctx.guidDefinition().Guid)
- # ctx.OHObj.SetFormSetId(ctx.guidDefinition().Guid)
+ GObj.SetFormSetId(ctx.guidDefinition().Guid)
if ctx.FLAGS() != None:
- ctx.OpObj.SetFlags(ctx.vfrGotoFlags().GotoFlags)
- # ctx.OHObj.SetFlags(ctx.vfrGotoFlags().GotoFlags)
+ GObj.SetFlags(ctx.vfrGotoFlags().GotoFlags)
if ctx.Key() != None:
index = int(len(ctx.Number())) - 1
- Key = self.__TransNum(ctx.Number(index))
- self.__AssignQuestionKey(ctx.OpObj, Key)
-
- # ctx.OHObj.SetScope(1)
- ctx.OpObj.SetScope(1)
- ctx.Node.Data = ctx.OpObj
+ Key = self.TransNum(ctx.Number(index))
+ self.AssignQuestionKey(GObj, Key)
+ GObj.SetHasKey(True)
+
+ if ctx.vfrStatementQuestionOptionList() != None:
+ GObj.SetScope(1)
+ self.InsertEndNode(ctx.Node, ctx.E.line)
+ ctx.Node.Buffer = gFormPkg.StructToStream(GObj.GetInfo())
return ctx.Node
-
# Visit a parse tree produced by VfrSyntaxParser#vfrGotoFlags.
- def visitVfrGotoFlags(self, ctx:VfrSyntaxParser.VfrGotoFlagsContext):
-
+ def visitVfrGotoFlags(self, ctx: VfrSyntaxParser.VfrGotoFlagsContext):
self.visitChildren(ctx)
for FlagsFieldCtx in ctx.gotoFlagsField():
ctx.GotoFlags |= FlagsFieldCtx.Flag
return ctx.GotoFlags
-
-
# Visit a parse tree produced by VfrSyntaxParser#gotoFlagsField.
- def visitGotoFlagsField(self, ctx:VfrSyntaxParser.GotoFlagsFieldContext):
-
+ def visitGotoFlagsField(self, ctx: VfrSyntaxParser.GotoFlagsFieldContext):
self.visitChildren(ctx)
if ctx.N != None:
- if self.__TransNum(ctx.N.text) != 0:
- self.__ErrorHandler(VfrReturnCode.VFR_RETURN_UNSUPPORTED, ctx.N.line)
+ if self.TransNum(ctx.N.text) != 0:
+ self.ErrorHandler(VfrReturnCode.VFR_RETURN_UNSUPPORTED, ctx.N.line)
else:
ctx.Flag = ctx.questionheaderFlagsField().QHFlag
return ctx.Flag
-
# Visit a parse tree produced by VfrSyntaxParser#vfrStatementResetButton.
- def visitVfrStatementResetButton(self, ctx:VfrSyntaxParser.VfrStatementResetButtonContext):
-
+ def visitVfrStatementResetButton(self, ctx: VfrSyntaxParser.VfrStatementResetButtonContext):
+ Defaultstore = ctx.N.text
+ RBObj = IfrResetButton(Defaultstore)
+ ctx.Node.Data = RBObj
self.visitChildren(ctx)
-
- RBObj = ctx.OpObj
Line = ctx.start.line
RBObj.SetLineNo(Line)
- defaultstore = ctx.N.text
- DefaultId, ReturnCode = gCVfrDefaultStore.GetDefaultId(defaultstore)
- self.__ErrorHandler(ReturnCode, ctx.N.line)
+ DefaultId, ReturnCode = gVfrDefaultStore.GetDefaultId(Defaultstore)
+ self.ErrorHandler(ReturnCode, ctx.N.line)
RBObj.SetDefaultId(DefaultId)
- ctx.Node.Data = RBObj
+ ctx.Node.Buffer = gFormPkg.StructToStream(RBObj.GetInfo())
+ self.InsertEndNode(ctx.Node, ctx.stop.line)
return ctx.Node
-
# Visit a parse tree produced by VfrSyntaxParser#vfrStatementQuestions.
- def visitVfrStatementQuestions(self, ctx:VfrSyntaxParser.VfrStatementQuestionsContext):
-
+ def visitVfrStatementQuestions(self, ctx: VfrSyntaxParser.VfrStatementQuestionsContext):
self.visitChildren(ctx)
if ctx.vfrStatementBooleanType() != None:
ctx.Node = ctx.vfrStatementBooleanType().Node
@@ -1473,10 +1697,8 @@ class VfrSyntaxVisitor(ParseTreeVisitor):
return ctx.Node
-
# Visit a parse tree produced by VfrSyntaxParser#vfrStatementQuestionTag.
- def visitVfrStatementQuestionTag(self, ctx:VfrSyntaxParser.VfrStatementQuestionTagContext):
-
+ def visitVfrStatementQuestionTag(self, ctx: VfrSyntaxParser.VfrStatementQuestionTagContext):
self.visitChildren(ctx)
if ctx.vfrStatementStatTag() != None:
ctx.Node = ctx.vfrStatementStatTag().Node
@@ -1499,104 +1721,141 @@ class VfrSyntaxVisitor(ParseTreeVisitor):
return ctx.Node
-
# Visit a parse tree produced by VfrSyntaxParser#vfrStatementInconsistentIf.
- def visitVfrStatementInconsistentIf(self, ctx:VfrSyntaxParser.VfrStatementInconsistentIfContext):
-
- IIObj = CIfrInconsistentIf()
+ def visitVfrStatementInconsistentIf(
+ self, ctx: VfrSyntaxParser.VfrStatementInconsistentIfContext
+ ):
+ IIObj = IfrInconsistentIf2()
self.visitChildren(ctx)
IIObj.SetLineNo(ctx.start.line)
- IIObj.SetError(self.__TransNum(ctx.Number()))
+ IIObj.SetError(self.TransNum(ctx.Number()))
+
+ if ctx.FLAGS() != None:
+ Flags = ""
+ for i in range(0, len(ctx.flagsField())):
+ Flags += self.ExtractOriginalText(ctx.flagsField(i))
+ if i != len(ctx.flagsField()) - 1:
+ Flags += " | "
+ IIObj.SetFlagsStream(Flags)
ctx.Node.Data = IIObj
- ctx.Node.Expression = self.__ExtractOriginalText(ctx.vfrStatementExpression())
- return ctx.Node
+ ctx.Node.Buffer = gFormPkg.StructToStream(IIObj.GetInfo())
+ ctx.Node.Condition = (
+ "inconsistentif" + " " + self.ExtractOriginalText(ctx.vfrStatementExpression())
+ )
+ ctx.Node.Expression = self.ExtractOriginalText(ctx.vfrStatementExpression())
+ self.InsertEndNode(ctx.Node, ctx.stop.line)
+ return ctx.Node
# Visit a parse tree produced by VfrSyntaxParser#vfrStatementNoSubmitIf.
- def visitVfrStatementNoSubmitIf(self, ctx:VfrSyntaxParser.VfrStatementNoSubmitIfContext):
- NSIObj = CIfrNoSubmitIf()
+ def visitVfrStatementNoSubmitIf(self, ctx: VfrSyntaxParser.VfrStatementNoSubmitIfContext):
+ NSIObj = IfrNoSubmitIf()
self.visitChildren(ctx)
NSIObj.SetLineNo(ctx.start.line)
- NSIObj.SetError(self.__TransNum(ctx.Number()))
+ NSIObj.SetError(self.TransNum(ctx.Number()))
+ if ctx.FLAGS() != None:
+ Flags = ""
+ for i in range(0, len(ctx.flagsField())):
+ Flags += self.ExtractOriginalText(ctx.flagsField(i))
+ if i != len(ctx.flagsField()) - 1:
+ Flags += " | "
+ NSIObj.SetFlagsStream(Flags)
+
ctx.Node.Data = NSIObj
- ctx.Node.Expression = self.__ExtractOriginalText(ctx.vfrStatementExpression())
+ ctx.Node.Buffer = gFormPkg.StructToStream(NSIObj.GetInfo())
+ ctx.Node.Expression = self.ExtractOriginalText(ctx.vfrStatementExpression())
+ self.InsertEndNode(ctx.Node, ctx.stop.line)
return ctx.Node
-
# Visit a parse tree produced by VfrSyntaxParser#vfrStatementDisableIfQuest.
- def visitVfrStatementDisableIfQuest(self, ctx:VfrSyntaxParser.VfrStatementDisableIfQuestContext):
- DIObj = CIfrDisableIf()
+ def visitVfrStatementDisableIfQuest(
+ self, ctx: VfrSyntaxParser.VfrStatementDisableIfQuestContext
+ ):
+ DIObj = IfrDisableIf()
self.visitChildren(ctx)
DIObj.SetLineNo(ctx.start.line)
ctx.Node.Data = DIObj
- ctx.Node.Expression = self.__ExtractOriginalText(ctx.vfrStatementExpression())
+ ctx.Node.Buffer = gFormPkg.StructToStream(DIObj.GetInfo())
+ ctx.Node.Condition = (
+ "disableif" + " " + self.ExtractOriginalText(ctx.vfrStatementExpression())
+ )
+ ctx.Node.Expression = self.ExtractOriginalText(ctx.vfrStatementExpression())
+ self.InsertEndNode(ctx.Node, ctx.stop.line)
return ctx.Node
-
# Visit a parse tree produced by VfrSyntaxParser#vfrStatementRefresh.
- def visitVfrStatementRefresh(self, ctx:VfrSyntaxParser.VfrStatementRefreshContext):
- RObj = CIfrRefresh()
+ def visitVfrStatementRefresh(self, ctx: VfrSyntaxParser.VfrStatementRefreshContext):
+ RObj = IfrRefresh()
self.visitChildren(ctx)
RObj.SetLineNo(ctx.start.line)
- RObj.SetRefreshInterval(self.__TransNum(ctx.Number()))
+ RObj.SetRefreshInterval(self.TransNum(ctx.Number()))
ctx.Node.Data = RObj
+ ctx.Node.Buffer = gFormPkg.StructToStream(RObj.GetInfo())
return ctx.Node
# Visit a parse tree produced by VfrSyntaxParser#vfrStatementVarstoreDevice.
- def visitVfrStatementVarstoreDevice(self, ctx:VfrSyntaxParser.VfrStatementVarstoreDeviceContext):
- VDObj = CIfrVarStoreDevice()
+ def visitVfrStatementVarstoreDevice(
+ self, ctx: VfrSyntaxParser.VfrStatementVarstoreDeviceContext
+ ):
+ VDObj = IfrVarStoreDevice()
self.visitChildren(ctx)
VDObj.SetLineNo(ctx.start.line)
- VDObj.SetDevicePath(self.__TransNum(ctx.Number()))
+ VDObj.SetDevicePath(self.TransNum(ctx.Number()))
ctx.Node.Data = VDObj
+ ctx.Node.Buffer = gFormPkg.StructToStream(VDObj.GetInfo())
return ctx.Node
# Visit a parse tree produced by VfrSyntaxParser#vfrStatementRefreshEvent.
- def visitVfrStatementRefreshEvent(self, ctx:VfrSyntaxParser.VfrStatementRefreshEventContext):
- RiObj = CIfrRefreshId()
+ def visitVfrStatementRefreshEvent(self, ctx: VfrSyntaxParser.VfrStatementRefreshEventContext):
+ RiObj = IfrRefreshId()
self.visitChildren(ctx)
RiObj.SetLineNo(ctx.start.line)
RiObj.SetRefreshEventGroutId(ctx.guidDefinition().Guid)
ctx.Node.Data = RiObj
+ ctx.Node.Buffer = gFormPkg.StructToStream(RiObj.GetInfo())
return ctx.Node
# Visit a parse tree produced by VfrSyntaxParser#vfrStatementWarningIf.
- def visitVfrStatementWarningIf(self, ctx:VfrSyntaxParser.VfrStatementWarningIfContext):
- WIObj = CIfrWarningIf()
+ def visitVfrStatementWarningIf(self, ctx: VfrSyntaxParser.VfrStatementWarningIfContext):
+ WIObj = IfrWarningIf()
self.visitChildren(ctx)
WIObj.SetLineNo(ctx.start.line)
- WIObj.SetWarning(self.__TransNum(ctx.Number(0)))
- WIObj.SetTimeOut(self.__TransNum(ctx.Number(1)))
+ WIObj.SetWarning(self.TransNum(ctx.Number(0)))
+ if ctx.Timeout() != None:
+ WIObj.SetTimeOut(self.TransNum(ctx.Number(1)))
+ WIObj.SetHasHasTimeOut(True)
ctx.Node.Data = WIObj
- ctx.Node.Expression = self.__ExtractOriginalText(ctx.vfrStatementExpression())
-
+ ctx.Node.Buffer = gFormPkg.StructToStream(WIObj.GetInfo())
+ ctx.Node.Expression = self.ExtractOriginalText(ctx.vfrStatementExpression())
+ self.InsertEndNode(ctx.Node, ctx.stop.line)
return ctx.Node
-
# Visit a parse tree produced by VfrSyntaxParser#vfrStatementQuestionTagList.
- def visitVfrStatementQuestionTagList(self, ctx:VfrSyntaxParser.VfrStatementQuestionTagListContext):
-
+ def visitVfrStatementQuestionTagList(
+ self, ctx: VfrSyntaxParser.VfrStatementQuestionTagListContext
+ ):
self.visitChildren(ctx)
for Ctx in ctx.vfrStatementQuestionTag():
- self.__InsertChild(ctx.Node, Ctx)
+ self.InsertChild(ctx.Node, Ctx)
return ctx.Node
# Visit a parse tree produced by VfrSyntaxParser#vfrStatementQuestionOptionTag.
- def visitVfrStatementQuestionOptionTag(self, ctx:VfrSyntaxParser.VfrStatementQuestionOptionTagContext):
-
+ def visitVfrStatementQuestionOptionTag(
+ self, ctx: VfrSyntaxParser.VfrStatementQuestionOptionTagContext
+ ):
self.visitChildren(ctx)
if ctx.vfrStatementSuppressIfQuest() != None:
ctx.Node = ctx.vfrStatementSuppressIfQuest().Node
@@ -1621,291 +1880,294 @@ class VfrSyntaxVisitor(ParseTreeVisitor):
return ctx.Node
-
# Visit a parse tree produced by VfrSyntaxParser#vfrStatementSuppressIfQuest.
- def visitVfrStatementSuppressIfQuest(self, ctx:VfrSyntaxParser.VfrStatementSuppressIfQuestContext):
-
- SIObj = CIfrSuppressIf()
+ def visitVfrStatementSuppressIfQuest(
+ self, ctx: VfrSyntaxParser.VfrStatementSuppressIfQuestContext
+ ):
+ SIObj = IfrSuppressIf()
SIObj.SetLineNo(ctx.start.line)
ctx.Node.Data = SIObj
- ctx.Node.Condition = 'suppressif' + ' ' + self.__ExtractOriginalText(ctx.vfrStatementExpression())
+ ctx.Node.Condition = (
+ "suppressif" + " " + self.ExtractOriginalText(ctx.vfrStatementExpression())
+ )
+ ctx.Node.Expression = self.ExtractOriginalText(ctx.vfrStatementExpression())
self.visitChildren(ctx)
+ ctx.Node.Buffer = gFormPkg.StructToStream(SIObj.GetInfo())
+ self.InsertEndNode(ctx.Node, ctx.stop.line)
return ctx.Node
-
# Visit a parse tree produced by VfrSyntaxParser#vfrStatementGrayOutIfQuest.
- def visitVfrStatementGrayOutIfQuest(self, ctx:VfrSyntaxParser.VfrStatementGrayOutIfQuestContext):
- GOIObj = CIfrGrayOutIf()
+ def visitVfrStatementGrayOutIfQuest(
+ self, ctx: VfrSyntaxParser.VfrStatementGrayOutIfQuestContext
+ ):
+ GOIObj = IfrGrayOutIf()
GOIObj.SetLineNo(ctx.start.line)
ctx.Node.Data = GOIObj
- ctx.Node.Condition = 'grayoutif' + ' ' + self.__ExtractOriginalText(ctx.vfrStatementExpression())
+ ctx.Node.Condition = (
+ "grayoutif" + " " + self.ExtractOriginalText(ctx.vfrStatementExpression())
+ )
+ ctx.Node.Expression = self.ExtractOriginalText(ctx.vfrStatementExpression())
self.visitChildren(ctx)
+ ctx.Node.Buffer = gFormPkg.StructToStream(GOIObj.GetInfo())
+ self.InsertEndNode(ctx.Node, ctx.stop.line)
return ctx.Node
# Visit a parse tree produced by VfrSyntaxParser#flagsField.
- def visitFlagsField(self, ctx:VfrSyntaxParser.FlagsFieldContext):
-
+ def visitFlagsField(self, ctx: VfrSyntaxParser.FlagsFieldContext):
if ctx.N != None:
- CVfrErrorHandle.HandleWarning(EFI_VFR_WARNING_CODE.VFR_WARNING_OBSOLETED_FRAMEWORK_OPCODE, ctx.N.line, ctx.N.text)
+ VfrErrorHandle.HandleWarning(
+ EFI_VFR_WARNING_CODE.VFR_WARNING_OBSOLETED_FRAMEWORK_OPCODE, ctx.N.line, ctx.N.text
+ )
if ctx.L != None:
- CVfrErrorHandle.HandleWarning(EFI_VFR_WARNING_CODE.VFR_WARNING_OBSOLETED_FRAMEWORK_OPCODE, ctx.L.line, ctx.L.text)
+ VfrErrorHandle.HandleWarning(
+ EFI_VFR_WARNING_CODE.VFR_WARNING_OBSOLETED_FRAMEWORK_OPCODE, ctx.L.line, ctx.L.text
+ )
return self.visitChildren(ctx)
# Visit a parse tree produced by VfrSyntaxParser#vfrStatementDefault.
- def visitVfrStatementDefault(self, ctx:VfrSyntaxParser.VfrStatementDefaultContext):
-
+ def visitVfrStatementDefault(self, ctx: VfrSyntaxParser.VfrStatementDefaultContext):
self.visitChildren(ctx)
IsExp = False
DefaultId = EFI_HII_DEFAULT_CLASS_STANDARD
Line = ctx.start.line
if ctx.vfrConstantValueField() != None:
- Value = ctx.vfrConstantValueField().Value
ValueList = ctx.vfrConstantValueField().ValueList
- Type = self.__CurrQestVarInfo.VarType
- Size = 0
+ Value = ValueList[0]
+ Type = self.CurrQestVarInfo.VarType
- if self.__CurrentMinMaxData != None and self.__CurrentMinMaxData.IsNumericOpcode():
+ if self.CurrentMinMaxData != None and self.CurrentMinMaxData.IsNumericOpcode():
# check default value is valid for Numeric Opcode
- if ValueList == []:
- ValueList.append(Value)
for i in range(0, len(ValueList)):
Value = ValueList[i]
- NumericQst = CIfrNumeric (self.__CurrentQuestion) #
- if (NumericQst.GetNumericFlags() & EFI_IFR_DISPLAY) == 0 and self.__CurrQestVarInfo.IsBitVar == False: #
- if Type == EFI_IFR_TYPE_NUM_SIZE_8:
- if Value.u8 < self.__CurrentMinMaxData.GetMinData(Type, False) or Value.u8 > self.__CurrentMinMaxData.GetMaxData(Type, False):
- self.__ErrorHandler(VfrReturnCode.VFR_RETURN_INVALID_PARAMETER, Line, "Numeric default value must be between MinValue and MaxValue.")
-
- if Type == EFI_IFR_TYPE_NUM_SIZE_16:
- if Value.u16 < self.__CurrentMinMaxData.GetMinData(Type, False) or Value.u16 > self.__CurrentMinMaxData.GetMaxData(Type, False):
- self.__ErrorHandler(VfrReturnCode.VFR_RETURN_INVALID_PARAMETER, Line, "Numeric default value must be between MinValue and MaxValue.")
-
- if Type == EFI_IFR_TYPE_NUM_SIZE_32:
- if Value.u32 < self.__CurrentMinMaxData.GetMinData(Type, False) or Value.u32 > self.__CurrentMinMaxData.GetMaxData(Type, False):
- self.__ErrorHandler(VfrReturnCode.VFR_RETURN_INVALID_PARAMETER, Line, "Numeric default value must be between MinValue and MaxValue.")
-
- if Type == EFI_IFR_TYPE_NUM_SIZE_64:
- if Value.u64 < self.__CurrentMinMaxData.GetMinData(Type, False) or Value.u64 > self.__CurrentMinMaxData.GetMaxData(Type, False):
- self.__ErrorHandler(VfrReturnCode.VFR_RETURN_INVALID_PARAMETER, Line, "Numeric default value must be between MinValue and MaxValue.")
-
- else:
- # Value for question stored in bit fields is always set to UINT32 type.
- if self.__CurrQestVarInfo.IsBitVar:
- if Value.u32 < self.__CurrentMinMaxData.GetMinData(Type, True) or Value.u32 > self.__CurrentMinMaxData.GetMaxData(Type, True):
- self.__ErrorHandler(VfrReturnCode.VFR_RETURN_INVALID_PARAMETER, Line, "Numeric default value must be between MinValue and MaxValue.")
- else:
- if Value.u64 < self.__CurrentMinMaxData.GetMinData(Type, False) or Value.u64 > self.__CurrentMinMaxData.GetMaxData(Type, False):
- self.__ErrorHandler(VfrReturnCode.VFR_RETURN_INVALID_PARAMETER, Line, "Numeric default value must be between MinValue and MaxValue.")
+ if type(Value) == int:
+ if (
+ Value < self.CurrentMinMaxData.GetMinData()
+ or Value > self.CurrentMinMaxData.GetMaxData()
+ ):
+ self.ErrorHandler(
+ VfrReturnCode.VFR_RETURN_INVALID_PARAMETER,
+ Line,
+ "Numeric default value must be between MinValue and MaxValue.",
+ )
if Type == EFI_IFR_TYPE_OTHER:
- self.__ErrorHandler(VfrReturnCode.VFR_RETURN_FATAL_ERROR, Line, "Default data type error.")
- Size = sizeof(EFI_IFR_TYPE_VALUE)
-
- elif ctx.vfrConstantValueField().ListType:
- if Type == EFI_IFR_TYPE_NUM_SIZE_8:
- Size = sizeof(c_ubyte) * len(ValueList)
- if Type == EFI_IFR_TYPE_NUM_SIZE_16:
- Size = sizeof(c_ushort) * len(ValueList)
- if Type == EFI_IFR_TYPE_NUM_SIZE_32:
- Size = sizeof(c_ulong) * len(ValueList)
- if Type == EFI_IFR_TYPE_NUM_SIZE_64:
- Size = sizeof(c_ulonglong) * len(ValueList)
-
- else:
- if self.__CurrQestVarInfo.IsBitVar:
- Size = sizeof(c_ulong)
- else:
- Size, ReturnCode = gCVfrVarDataTypeDB.GetDataTypeSizeByDataType(Type)
- self.__ErrorHandler(ReturnCode, Line)
-
- Size += EFI_IFR_DEFAULT.Value.offset
+ self.ErrorHandler(
+ VfrReturnCode.VFR_RETURN_FATAL_ERROR, Line, "Default data type error."
+ )
+ for i in range(0, len(ValueList)):
+ if type(ValueList[i]) == int:
+ if Type == EFI_IFR_TYPE_TIME:
+ ValueList[i] = EFI_HII_TIME()
+
+ if Type == EFI_IFR_TYPE_DATE:
+ ValueList[i] = EFI_HII_DATE()
+
+ if Type == EFI_IFR_TYPE_REF:
+ ValueList[i] = EFI_HII_REF()
+ DObj = IfrDefault(Type, ValueList)
+ DObj.SetLineNo(Line)
+ DObj.SetValueStream(self.ExtractOriginalText(ctx.vfrConstantValueField()))
if not ctx.vfrConstantValueField().ListType:
- DObj = CIfrDefault(Size)
- DObj.SetLineNo(Line)
- DObj.SetValue(Value)
-
- if self.__IsStringOp:
+ if self.IsStringOp:
DObj.SetType(EFI_IFR_TYPE_STRING)
else:
- if self.__CurrQestVarInfo.IsBitVar:
+ if self.CurrQestVarInfo.IsBitVar:
DObj.SetType(EFI_IFR_TYPE_NUM_SIZE_32)
else:
- DObj.SetType(self.__CurrQestVarInfo.VarType)
+ DObj.SetType(self.CurrQestVarInfo.VarType)
else:
- DObj = CIfrDefault3(Size, len(ValueList), Type)
- DObj.SetLineNo(Line)
- DObj.SetValue(ValueList)
DObj.SetType(EFI_IFR_TYPE_BUFFER)
else:
IsExp = True
- DObj = CIfrDefault2()
+ DObj = IfrDefault2()
DObj.SetLineNo(Line)
DObj.SetScope(1)
+ self.InsertChild(ctx.Node, ctx.vfrStatementValue())
+ self.InsertEndNode(ctx.Node, Line)
if ctx.DefaultStore() != None:
- DefaultId, ReturnCode = gCVfrDefaultStore.GetDefaultId(ctx.SN.text)
- self.__ErrorHandler(ReturnCode, ctx.SN.line, ctx.SN.text)
+ DefaultId, ReturnCode = gVfrDefaultStore.GetDefaultId(ctx.SN.text)
+ self.ErrorHandler(ReturnCode, ctx.SN.line, ctx.SN.text)
DObj.SetDefaultId(DefaultId)
-
- self.__CheckDuplicateDefaultValue(DefaultId, ctx.D.line, ctx.D.text)
- if self.__CurrQestVarInfo.VarStoreId != EFI_VARSTORE_ID_INVALID:
- VarStoreName, ReturnCode = gCVfrDataStorage.GetVarStoreName(self.__CurrQestVarInfo.VarStoreId)
- self.__ErrorHandler(ReturnCode, Line)
- VarGuid = gCVfrDataStorage.GetVarStoreGuid(self.__CurrQestVarInfo.VarStoreId)
- VarStoreType = gCVfrDataStorage.GetVarStoreType(self.__CurrQestVarInfo.VarStoreId)
+ DObj.SetDefaultStore(ctx.SN.text)
+
+ self.CheckDuplicateDefaultValue(DefaultId, ctx.D.line, ctx.D.text)
+ if self.CurrQestVarInfo.VarStoreId != EFI_VARSTORE_ID_INVALID:
+ VarStoreName, ReturnCode = gVfrDataStorage.GetVarStoreName(
+ self.CurrQestVarInfo.VarStoreId
+ )
+ self.ErrorHandler(ReturnCode, Line)
+ VarGuid = gVfrDataStorage.GetVarStoreGuid(self.CurrQestVarInfo.VarStoreId)
+ VarStoreType = gVfrDataStorage.GetVarStoreType(self.CurrQestVarInfo.VarStoreId)
if (IsExp == False) and (VarStoreType == EFI_VFR_VARSTORE_TYPE.EFI_VFR_VARSTORE_BUFFER):
- self.__ErrorHandler(gCVfrDefaultStore.BufferVarStoreAltConfigAdd(DefaultId, self.__CurrQestVarInfo, VarStoreName, VarGuid, self.__CurrQestVarInfo.VarType, Value), Line)
+ self.ErrorHandler(
+ gVfrDefaultStore.BufferVarStoreAltConfigAdd(
+ DefaultId,
+ self.CurrQestVarInfo,
+ VarStoreName,
+ VarGuid,
+ self.CurrQestVarInfo.VarType,
+ Value,
+ ),
+ Line,
+ )
ctx.Node.Data = DObj
- self.__InsertChild(ctx.Node, ctx.vfrStatementValue())
-
+ ctx.Node.Buffer = gFormPkg.StructToStream(DObj.GetInfo())
return ctx.Node
-
# Visit a parse tree produced by VfrSyntaxParser#vfrStatementValue.
- def visitVfrStatementValue(self, ctx:VfrSyntaxParser.VfrStatementValueContext):
-
- VObj = CIfrValue()
+ def visitVfrStatementValue(self, ctx: VfrSyntaxParser.VfrStatementValueContext):
+ VObj = IfrValue()
self.visitChildren(ctx)
VObj.SetLineNo(ctx.start.line)
ctx.Node.Data = VObj
- ctx.Node.Expression = self.__ExtractOriginalText(ctx.vfrStatementExpression())
+ ctx.Node.Buffer = gFormPkg.StructToStream(VObj.GetInfo())
+ ctx.Node.Expression = self.ExtractOriginalText(ctx.vfrStatementExpression())
+ self.InsertEndNode(ctx.Node, ctx.stop.line)
return ctx.Node
# Visit a parse tree produced by VfrSyntaxParser#vfrStatementOptions.
- def visitVfrStatementOptions(self, ctx:VfrSyntaxParser.VfrStatementOptionsContext):
-
+ def visitVfrStatementOptions(self, ctx: VfrSyntaxParser.VfrStatementOptionsContext):
self.visitChildren(ctx)
ctx.Node = ctx.vfrStatementOneOfOption().Node
return ctx.Node
-
# Visit a parse tree produced by VfrSyntaxParser#vfrStatementOneOfOption.
- def visitVfrStatementOneOfOption(self, ctx:VfrSyntaxParser.VfrStatementOneOfOptionContext):
-
+ def visitVfrStatementOneOfOption(self, ctx: VfrSyntaxParser.VfrStatementOneOfOptionContext):
Line = ctx.start.line
- if self.__CurrQestVarInfo.VarType == EFI_IFR_TYPE_OTHER:
- self.__ErrorHandler(VfrReturnCode.VFR_RETURN_FATAL_ERROR, Line, "Get data type error.")
+ if self.CurrQestVarInfo.VarType == EFI_IFR_TYPE_OTHER:
+ self.ErrorHandler(VfrReturnCode.VFR_RETURN_FATAL_ERROR, Line, "Get data type error.")
self.visitChildren(ctx)
- Value = ctx.vfrConstantValueField().Value
ValueList = ctx.vfrConstantValueField().ValueList
- Type = self.__CurrQestVarInfo.VarType
- Size = 0
- if self.__CurrentMinMaxData != None:
- #set min/max value for oneof opcode
- Step = self.__CurrentMinMaxData.GetStepData(self.__CurrQestVarInfo.VarType, self.__CurrQestVarInfo.IsBitVar)
- if self.__CurrQestVarInfo.IsBitVar:
- self.__CurrentMinMaxData.SetMinMaxStepData(Value.u32, Value.u32, Step, EFI_IFR_TYPE_NUM_SIZE_32)
- else:
- if Type == EFI_IFR_TYPE_NUM_SIZE_64:
- self.__CurrentMinMaxData.SetMinMaxStepData(Value.u64, Value.u64, Step, EFI_IFR_TYPE_NUM_SIZE_64)
- if Type == EFI_IFR_TYPE_NUM_SIZE_32:
- self.__CurrentMinMaxData.SetMinMaxStepData(Value.u32, Value.u32, Step, EFI_IFR_TYPE_NUM_SIZE_32)
- if Type == EFI_IFR_TYPE_NUM_SIZE_16:
- self.__CurrentMinMaxData.SetMinMaxStepData(Value.u16, Value.u16, Step, EFI_IFR_TYPE_NUM_SIZE_16)
- if Type == EFI_IFR_TYPE_NUM_SIZE_8:
- self.__CurrentMinMaxData.SetMinMaxStepData(Value.u8, Value.u8, Step, EFI_IFR_TYPE_NUM_SIZE_8)
-
- if self.__CurrQestVarInfo.VarType == EFI_IFR_TYPE_OTHER:
- Size = sizeof(EFI_IFR_TYPE_VALUE)
- elif ctx.vfrConstantValueField().ListType:
- if Type == EFI_IFR_TYPE_NUM_SIZE_8:
- Size = sizeof(c_ubyte) * len(ValueList)
- if Type == EFI_IFR_TYPE_NUM_SIZE_16:
- Size = sizeof(c_ushort) * len(ValueList)
- if Type == EFI_IFR_TYPE_NUM_SIZE_32:
- Size = sizeof(c_ulong) * len(ValueList)
- if Type == EFI_IFR_TYPE_NUM_SIZE_64:
- Size = sizeof(c_ulonglong) * len(ValueList)
- else:
- # For the oneof stored in bit fields, set the option type as UINT32.
- if self.__CurrQestVarInfo.IsBitVar:
- Size = sizeof(c_long)
- else:
- Size, ReturnCode = gCVfrVarDataTypeDB.GetDataTypeSizeByDataType(Type)
- self.__ErrorHandler(ReturnCode, Line)
+ Value = ValueList[0]
+ Type = self.CurrQestVarInfo.VarType
+ if self.CurrentMinMaxData != None:
+ # set min/max value for oneof opcode
+ Step = self.CurrentMinMaxData.GetStepData()
+ self.CurrentMinMaxData.SetMinMaxStepData(Value, Value, Step)
+
+ if self.CurrQestVarInfo.IsBitVar:
+ Type = EFI_IFR_TYPE_NUM_SIZE_32
+ OOOObj = IfrOneOfOption(Type, ValueList)
- Size += EFI_IFR_ONE_OF_OPTION.Value.offset
- OOOObj = None
if not ctx.vfrConstantValueField().ListType:
- OOOObj = CIfrOneOfOption(Size)
- if self.__CurrQestVarInfo.IsBitVar:
- OOOObj.SetType(EFI_IFR_TYPE_NUM_SIZE_32)
- else:
- OOOObj.SetType(Type)
- OOOObj.SetValue(Value)
+ OOOObj.SetType(Type)
else:
- OOOObj = CIfrOneOfOption2(Size, len(ValueList), Type)
OOOObj.SetType(EFI_IFR_TYPE_BUFFER)
- OOOObj.SetValue(ValueList)
-
OOOObj.SetLineNo(Line)
- OOOObj.SetOption(self.__TransNum(ctx.Number(0)))
-
-
- self.__ErrorHandler(OOOObj.SetFlags(ctx.vfrOneOfOptionFlags().LFlags), ctx.F.line)
- self.__ErrorHandler(self.__CurrentQuestion.SetQHeaderFlags(ctx.vfrOneOfOptionFlags().HFlags), ctx.F.line)
+ OOOObj.SetOption(self.TransNum(ctx.Number(0)))
+ OOOObj.SetValueStream(self.ExtractOriginalText(ctx.vfrConstantValueField()))
+ OOOObj.SetFlagsStream(self.ExtractOriginalText(ctx.vfrOneOfOptionFlags()))
+ self.ErrorHandler(OOOObj.SetFlags(ctx.vfrOneOfOptionFlags().LFlags), ctx.F.line)
+ self.ErrorHandler(
+ self.CurrentQuestion.SetQHeaderFlags(ctx.vfrOneOfOptionFlags().HFlags), ctx.F.line
+ )
# Array type only for default type OneOfOption.
- if (OOOObj.GetFlags() & (EFI_IFR_OPTION_DEFAULT | EFI_IFR_OPTION_DEFAULT_MFG)) == 0 and (ctx.vfrConstantValueField().ListType):
- self.__ErrorHandler(VfrReturnCode.VFR_RETURN_FATAL_ERROR, Line, "Default keyword should with array value type!")
+ if (OOOObj.GetFlags() & (EFI_IFR_OPTION_DEFAULT | EFI_IFR_OPTION_DEFAULT_MFG)) == 0 and (
+ ctx.vfrConstantValueField().ListType
+ ):
+ self.ErrorHandler(
+ VfrReturnCode.VFR_RETURN_FATAL_ERROR,
+ Line,
+ "Default keyword should with array value type!",
+ )
# Clear the default flag if the option not use array value but has default flag.
- if (OOOObj.GetFlags() & (EFI_IFR_OPTION_DEFAULT | EFI_IFR_OPTION_DEFAULT_MFG)) != 0 and (ctx.vfrConstantValueField().ListType == False) and (self.__IsOrderedList):
- OOOObj.SetFlags(OOOObj.GetFlags() & ~(EFI_IFR_OPTION_DEFAULT | EFI_IFR_OPTION_DEFAULT_MFG))
-
- if self.__CurrQestVarInfo.VarStoreId != EFI_VARSTORE_ID_INVALID:
- VarStoreName, ReturnCode = gCVfrDataStorage.GetVarStoreName(self.__CurrQestVarInfo.VarStoreId)
- self.__ErrorHandler(ReturnCode, Line)
- VarStoreGuid = gCVfrDataStorage.GetVarStoreGuid(self.__CurrQestVarInfo.VarStoreId)
+ if (
+ (OOOObj.GetFlags() & (EFI_IFR_OPTION_DEFAULT | EFI_IFR_OPTION_DEFAULT_MFG)) != 0
+ and (ctx.vfrConstantValueField().ListType == False)
+ and (self.IsOrderedList)
+ ):
+ OOOObj.SetFlags(
+ OOOObj.GetFlags() & ~(EFI_IFR_OPTION_DEFAULT | EFI_IFR_OPTION_DEFAULT_MFG)
+ )
+
+ if self.CurrQestVarInfo.VarStoreId != EFI_VARSTORE_ID_INVALID:
+ VarStoreName, ReturnCode = gVfrDataStorage.GetVarStoreName(
+ self.CurrQestVarInfo.VarStoreId
+ )
+ self.ErrorHandler(ReturnCode, Line)
+ VarStoreGuid = gVfrDataStorage.GetVarStoreGuid(self.CurrQestVarInfo.VarStoreId)
if OOOObj.GetFlags() & EFI_IFR_OPTION_DEFAULT:
- self.__CheckDuplicateDefaultValue(EFI_HII_DEFAULT_CLASS_STANDARD, ctx.F.line, ctx.F.text)
- self.__ErrorHandler(gCVfrDefaultStore.BufferVarStoreAltConfigAdd(EFI_HII_DEFAULT_CLASS_STANDARD, self.__CurrQestVarInfo, VarStoreName, VarStoreGuid, self.__CurrQestVarInfo.VarType, Value), Line)
+ self.CheckDuplicateDefaultValue(
+ EFI_HII_DEFAULT_CLASS_STANDARD, ctx.F.line, ctx.F.text
+ )
+ self.ErrorHandler(
+ gVfrDefaultStore.BufferVarStoreAltConfigAdd(
+ EFI_HII_DEFAULT_CLASS_STANDARD,
+ self.CurrQestVarInfo,
+ VarStoreName,
+ VarStoreGuid,
+ self.CurrQestVarInfo.VarType,
+ Value,
+ ),
+ Line,
+ )
if OOOObj.GetFlags() & EFI_IFR_OPTION_DEFAULT_MFG:
- self.__CheckDuplicateDefaultValue(EFI_HII_DEFAULT_CLASS_MANUFACTURING, ctx.F.line, ctx.F.text)
- self.__ErrorHandler(gCVfrDefaultStore.BufferVarStoreAltConfigAdd(EFI_HII_DEFAULT_CLASS_MANUFACTURING, self.__CurrQestVarInfo, VarStoreName, VarStoreGuid, self.__CurrQestVarInfo.VarType, Value), Line)
+ self.CheckDuplicateDefaultValue(
+ EFI_HII_DEFAULT_CLASS_MANUFACTURING, ctx.F.line, ctx.F.text
+ )
+ self.ErrorHandler(
+ gVfrDefaultStore.BufferVarStoreAltConfigAdd(
+ EFI_HII_DEFAULT_CLASS_MANUFACTURING,
+ self.CurrQestVarInfo,
+ VarStoreName,
+ VarStoreGuid,
+ self.CurrQestVarInfo.VarType,
+ Value,
+ ),
+ Line,
+ )
if ctx.Key() != None:
- self.__ErrorHandler(VfrReturnCode.VFR_RETURN_UNSUPPORTED, ctx.KN.line, ctx.KN.text)
- #?Guid Option Key
- IfrOptionKey = CIfrOptionKey(self.__CurrentQuestion.GetQuestionId(), Value, self.__TransNum(ctx.KN.text))
- IfrOptionKey.SetLineNo()
- if ctx.vfrImageTag() != None:
- OOOObj.SetScope(1) #
- ctx.Node.Data = OOOObj
+ self.ErrorHandler(VfrReturnCode.VFR_RETURN_UNSUPPORTED, ctx.KN.line, ctx.KN.text)
+ # Guid Option Key
+ OOOObj.SetIfrOptionKey(self.TransNum(ctx.KN.text))
+ gIfrOptionKey = IfrOptionKey(
+ self.CurrentQuestion.GetQuestionId(), Type, Value, self.TransNum(ctx.KN.text)
+ )
+ Node = IfrTreeNode(
+ EFI_IFR_GUID_OP, gIfrOptionKey, gFormPkg.StructToStream(gIfrOptionKey.GetInfo())
+ )
+ gIfrOptionKey.SetLineNo()
+ ctx.Node.insertChild(Node)
+
for Ctx in ctx.vfrImageTag():
- self.__InsertChild(ctx.Node, Ctx)
+ OOOObj.SetScope(1)
+ self.InsertChild(ctx.Node, Ctx)
+ self.InsertEndNode(ctx.Node, ctx.T.line)
- return ctx.Node
+ ctx.Node.Data = OOOObj
+ ctx.Node.Buffer = gFormPkg.StructToStream(OOOObj.GetInfo())
+ return ctx.Node
# Visit a parse tree produced by VfrSyntaxParser#vfrOneOfOptionFlags.
- def visitVfrOneOfOptionFlags(self, ctx:VfrSyntaxParser.VfrOneOfOptionFlagsContext):
-
+ def visitVfrOneOfOptionFlags(self, ctx: VfrSyntaxParser.VfrOneOfOptionFlagsContext):
self.visitChildren(ctx)
- ctx.LFlags = self.__CurrQestVarInfo.VarType
+ ctx.LFlags = self.CurrQestVarInfo.VarType
for FlagsFieldCtx in ctx.oneofoptionFlagsField():
ctx.HFlags |= FlagsFieldCtx.HFlag
ctx.LFlags |= FlagsFieldCtx.LFlag
return ctx.HFlags, ctx.LFlags
-
# Visit a parse tree produced by VfrSyntaxParser#oneofoptionFlagsField.
- def visitOneofoptionFlagsField(self, ctx:VfrSyntaxParser.OneofoptionFlagsFieldContext):
-
+ def visitOneofoptionFlagsField(self, ctx: VfrSyntaxParser.OneofoptionFlagsFieldContext):
self.visitChildren(ctx)
if ctx.Number() != None:
- ctx.LFlag = self.__TransNum(ctx.Number())
+ ctx.LFlag = self.TransNum(ctx.Number())
if ctx.OptionDefault() != None:
ctx.LFlag = 0x10
if ctx.OptionDefaultMfg() != None:
@@ -1923,49 +2185,54 @@ class VfrSyntaxVisitor(ParseTreeVisitor):
if ctx.DefaultFlag() != None:
ctx.LFlag = 0x10
if ctx.NVAccessFlag() != None:
- gCVfrErrorHandle.HandleWarning (EFI_VFR_WARNING_CODE.VFR_WARNING_OBSOLETED_FRAMEWORK_OPCODE, ctx.A.line, ctx.A.text)
+ gVfrErrorHandle.HandleWarning(
+ EFI_VFR_WARNING_CODE.VFR_WARNING_OBSOLETED_FRAMEWORK_OPCODE, ctx.A.line, ctx.A.text
+ )
if ctx.LateCheckFlag() != None:
- gCVfrErrorHandle.HandleWarning (EFI_VFR_WARNING_CODE.VFR_WARNING_OBSOLETED_FRAMEWORK_OPCODE, ctx.L.line, ctx.L.text)
+ gVfrErrorHandle.HandleWarning(
+ EFI_VFR_WARNING_CODE.VFR_WARNING_OBSOLETED_FRAMEWORK_OPCODE, ctx.L.line, ctx.L.text
+ )
return ctx.HFlag, ctx.LFlag
-
# Visit a parse tree produced by VfrSyntaxParser#vfrStatementRead.
- def visitVfrStatementRead(self, ctx:VfrSyntaxParser.VfrStatementReadContext):
-
- RObj = CIfrRead()
+ def visitVfrStatementRead(self, ctx: VfrSyntaxParser.VfrStatementReadContext):
+ RObj = IfrRead()
self.visitChildren(ctx)
RObj.SetLineNo(ctx.start.line)
ctx.Node.Data = RObj
- ctx.Node.Expression = self.__ExtractOriginalText(ctx.vfrStatementExpression())
+ ctx.Node.Buffer = gFormPkg.StructToStream(RObj.GetInfo())
+ ctx.Node.Expression = self.ExtractOriginalText(ctx.vfrStatementExpression())
return ctx.Node
# Visit a parse tree produced by VfrSyntaxParser#vfrStatementWrite.
- def visitVfrStatementWrite(self, ctx:VfrSyntaxParser.VfrStatementWriteContext):
-
- WObj = CIfrWrite()
+ def visitVfrStatementWrite(self, ctx: VfrSyntaxParser.VfrStatementWriteContext):
+ WObj = IfrWrite()
self.visitChildren(ctx)
WObj.SetLineNo(ctx.start.line)
ctx.Node.Data = WObj
- ctx.Node.Expression = self.__ExtractOriginalText(ctx.vfrStatementExpression())
+ ctx.Node.Buffer = gFormPkg.StructToStream(WObj.GetInfo())
+ ctx.Node.Expression = self.ExtractOriginalText(ctx.vfrStatementExpression())
return ctx.Node
# Visit a parse tree produced by VfrSyntaxParser#vfrStatementQuestionOptionList.
- def visitVfrStatementQuestionOptionList(self, ctx:VfrSyntaxParser.VfrStatementQuestionOptionListContext):
-
+ def visitVfrStatementQuestionOptionList(
+ self, ctx: VfrSyntaxParser.VfrStatementQuestionOptionListContext
+ ):
self.visitChildren(ctx)
for Ctx in ctx.vfrStatementQuestionOption():
- self.__InsertChild(ctx.Node, Ctx)
+ self.InsertChild(ctx.Node, Ctx)
return ctx.Node
# Visit a parse tree produced by VfrSyntaxParser#vfrStatementQuestionOption.
- def visitVfrStatementQuestionOption(self, ctx:VfrSyntaxParser.VfrStatementQuestionOptionContext):
-
+ def visitVfrStatementQuestionOption(
+ self, ctx: VfrSyntaxParser.VfrStatementQuestionOptionContext
+ ):
self.visitChildren(ctx)
if ctx.vfrStatementQuestionTag() != None:
ctx.Node = ctx.vfrStatementQuestionTag().Node
@@ -1974,85 +2241,150 @@ class VfrSyntaxVisitor(ParseTreeVisitor):
ctx.Node = ctx.vfrStatementQuestionOptionTag().Node
return ctx.Node
-
# Visit a parse tree produced by VfrSyntaxParser#vfrStatementBooleanType.
- def visitVfrStatementBooleanType(self, ctx:VfrSyntaxParser.VfrStatementBooleanTypeContext):
-
+ def visitVfrStatementBooleanType(self, ctx: VfrSyntaxParser.VfrStatementBooleanTypeContext):
self.visitChildren(ctx)
if ctx.vfrStatementCheckBox() != None:
- ctx.Node = ctx.vfrStatementCheckBox().Node
+ if self.CurrQestVarInfo.IsBitVar:
+ ctx.Node = ctx.vfrStatementCheckBox().GuidNode
+ else:
+ ctx.Node = ctx.vfrStatementCheckBox().Node
else:
ctx.Node = ctx.vfrStatementAction().Node
return ctx.Node
-
# Visit a parse tree produced by VfrSyntaxParser#vfrStatementCheckBox.
- def visitVfrStatementCheckBox(self, ctx:VfrSyntaxParser.VfrStatementCheckBoxContext):
-
- CBObj = ctx.OpObj
- Line = ctx.start.line
+ def visitVfrStatementCheckBox(self, ctx: VfrSyntaxParser.VfrStatementCheckBoxContext):
+ CBObj = IfrCheckBox()
+ ctx.Node.Data = CBObj
+ Line = ctx.start.line
CBObj.SetLineNo(Line)
- self.__CurrentQuestion = CBObj.GetQuestion()
- self.__IsCheckBoxOp = True
-
+ self.CurrentQuestion = CBObj
+ self.IsCheckBoxOp = True
self.visitChildren(ctx)
# Create a GUID opcode to wrap the checkbox opcode, if it refer to bit varstore.
- if self.__CurrQestVarInfo.IsBitVar:
- GuidObj = CIfrGuid(0)
+ if self.CurrQestVarInfo.IsBitVar:
+ GuidObj = IfrGuid(0)
GuidObj.SetGuid(EDKII_IFR_BIT_VARSTORE_GUID)
GuidObj.SetLineNo(Line)
- GuidObj.SetScope(1) #
+ GuidObj.SetScope(1)
+ ctx.GuidNode.Data = GuidObj
+ ctx.GuidNode.Buffer = gFormPkg.StructToStream(GuidObj.GetInfo())
+ ctx.GuidNode.insertChild(ctx.Node)
+ self.InsertEndNode(ctx.GuidNode, ctx.stop.line)
# check dataType
- if self.__CurrQestVarInfo.VarType == EFI_IFR_TYPE_OTHER:
- self.__CurrQestVarInfo.VarType = EFI_IFR_TYPE_BOOLEAN
+ if self.CurrQestVarInfo.VarType == EFI_IFR_TYPE_OTHER:
+ self.CurrQestVarInfo.VarType = EFI_IFR_TYPE_BOOLEAN
- if self.__CurrQestVarInfo.VarStoreId != EFI_VARSTORE_ID_INVALID:
+ if self.CurrQestVarInfo.VarStoreId != EFI_VARSTORE_ID_INVALID:
# Check whether the question refers to a bit field, if yes. create a Guid to indicate the question refers to a bit field.
- if self.__CurrQestVarInfo.IsBitVar:
- _, ReturnCode = gCVfrVarDataTypeDB.GetDataTypeSizeByDataType(self.__CurrQestVarInfo.VarType)
- self.__ErrorHandler(ReturnCode, Line, "CheckBox varid is not the valid data type")
- if gCVfrDataStorage.GetVarStoreType(self.__CurrQestVarInfo.VarStoreId) == EFI_VFR_VARSTORE_TYPE.EFI_VFR_VARSTORE_BUFFER_BITS and self.__CurrQestVarInfo.VarTotalSize != 1:
- self.__ErrorHandler(VfrReturnCode.VFR_RETURN_INVALID_PARAMETER, Line, "CheckBox varid only occupy 1 bit in Bit Varstore")
+ if self.CurrQestVarInfo.IsBitVar:
+ _, ReturnCode = gVfrVarDataTypeDB.GetDataTypeSizeByDataType(
+ self.CurrQestVarInfo.VarType
+ )
+ self.ErrorHandler(ReturnCode, Line, "CheckBox varid is not the valid data type")
+ if (
+ gVfrDataStorage.GetVarStoreType(self.CurrQestVarInfo.VarStoreId)
+ == EFI_VFR_VARSTORE_TYPE.EFI_VFR_VARSTORE_BUFFER_BITS
+ and self.CurrQestVarInfo.VarTotalSize != 1
+ ):
+ self.ErrorHandler(
+ VfrReturnCode.VFR_RETURN_INVALID_PARAMETER,
+ Line,
+ "CheckBox varid only occupy 1 bit in Bit Varstore",
+ )
else:
- Size, ReturnCode = gCVfrVarDataTypeDB.GetDataTypeSizeByDataType(self.__CurrQestVarInfo.VarType)
- self.__ErrorHandler(ReturnCode, Line, "CheckBox varid is not the valid data type")
- if Size != 0 and Size != self.__CurrQestVarInfo.VarTotalSize:
- self.__ErrorHandler(VfrReturnCode.VFR_RETURN_INVALID_PARAMETER, Line, "CheckBox varid doesn't support array")
- elif gCVfrDataStorage.GetVarStoreType(self.__CurrQestVarInfo.VarStoreId) == EFI_VFR_VARSTORE_TYPE.EFI_VFR_VARSTORE_BUFFER and self.__CurrQestVarInfo.VarTotalSize != sizeof(ctypes.c_bool):
- self.__ErrorHandler(VfrReturnCode.VFR_RETURN_INVALID_PARAMETER, Line, "CheckBox varid only support BOOLEAN data type")
+ Size, ReturnCode = gVfrVarDataTypeDB.GetDataTypeSizeByDataType(
+ self.CurrQestVarInfo.VarType
+ )
+ self.ErrorHandler(ReturnCode, Line, "CheckBox varid is not the valid data type")
+ if Size != 0 and Size != self.CurrQestVarInfo.VarTotalSize:
+ self.ErrorHandler(
+ VfrReturnCode.VFR_RETURN_INVALID_PARAMETER,
+ Line,
+ "CheckBox varid doesn't support array",
+ )
+ elif gVfrDataStorage.GetVarStoreType(
+ self.CurrQestVarInfo.VarStoreId
+ ) == EFI_VFR_VARSTORE_TYPE.EFI_VFR_VARSTORE_BUFFER and self.CurrQestVarInfo.VarTotalSize != sizeof(
+ c_bool
+ ):
+ self.ErrorHandler(
+ VfrReturnCode.VFR_RETURN_INVALID_PARAMETER,
+ Line,
+ "CheckBox varid only support BOOLEAN data type",
+ )
if ctx.FLAGS() != None:
+ CBObj.SetFlagsStream(self.ExtractOriginalText(ctx.vfrCheckBoxFlags()))
CBObj.SetFlags(ctx.vfrCheckBoxFlags().HFlags, ctx.vfrCheckBoxFlags().LFlags)
- if self.__CurrQestVarInfo.VarStoreId != EFI_VARSTORE_ID_INVALID:
- VarStoreName, ReturnCode = gCVfrDataStorage.GetVarStoreName(self.__CurrQestVarInfo.VarStoreId)
- self.__CompareErrorHandler(ReturnCode, VfrReturnCode.VFR_RETURN_SUCCESS, Line, ctx.L.text, "Failed to retrieve varstore name")
-
- VarStoreGuid = gCVfrDataStorage.GetVarStoreGuid(self.__CurrQestVarInfo.VarStoreId)
- self.gZeroEfiIfrTypeValue.b = True
+ if self.CurrQestVarInfo.VarStoreId != EFI_VARSTORE_ID_INVALID:
+ VarStoreName, ReturnCode = gVfrDataStorage.GetVarStoreName(
+ self.CurrQestVarInfo.VarStoreId
+ )
+ self.CompareErrorHandler(
+ ReturnCode,
+ VfrReturnCode.VFR_RETURN_SUCCESS,
+ Line,
+ ctx.L.text,
+ "Failed to retrieve varstore name",
+ )
+
+ VarStoreGuid = gVfrDataStorage.GetVarStoreGuid(self.CurrQestVarInfo.VarStoreId)
+ self.Value = True
if CBObj.GetFlags() & 0x01:
- self.__CheckDuplicateDefaultValue(EFI_HII_DEFAULT_CLASS_STANDARD, ctx.F.line, ctx.F.text)
- ReturnCode = gCVfrDefaultStore.BufferVarStoreAltConfigAdd(EFI_HII_DEFAULT_CLASS_STANDARD,self.__CurrQestVarInfo, VarStoreName, VarStoreGuid, self.__CurrQestVarInfo.VarType, self.gZeroEfiIfrTypeValue)
- self.__CompareErrorHandler(ReturnCode, VfrReturnCode.VFR_RETURN_SUCCESS, Line, ctx.L.text, "No standard default storage found")
+ self.CheckDuplicateDefaultValue(
+ EFI_HII_DEFAULT_CLASS_STANDARD, ctx.F.line, ctx.F.text
+ )
+ ReturnCode = gVfrDefaultStore.BufferVarStoreAltConfigAdd(
+ EFI_HII_DEFAULT_CLASS_STANDARD,
+ self.CurrQestVarInfo,
+ VarStoreName,
+ VarStoreGuid,
+ self.CurrQestVarInfo.VarType,
+ self.Value,
+ )
+ self.CompareErrorHandler(
+ ReturnCode,
+ VfrReturnCode.VFR_RETURN_SUCCESS,
+ Line,
+ ctx.L.text,
+ "No standard default storage found",
+ )
if CBObj.GetFlags() & 0x02:
- self.__CheckDuplicateDefaultValue(EFI_HII_DEFAULT_CLASS_MANUFACTURING, ctx.F.line, ctx.F.text)
- ReturnCode = gCVfrDefaultStore.BufferVarStoreAltConfigAdd(EFI_HII_DEFAULT_CLASS_MANUFACTURING, self.__CurrQestVarInfo, VarStoreName, VarStoreGuid, self.__CurrQestVarInfo.VarType, self.gZeroEfiIfrTypeValue)
- self.__CompareErrorHandler(ReturnCode, VfrReturnCode.VFR_RETURN_SUCCESS, Line, ctx.L.text, "No manufacturing default storage found")
- if ctx.Key() != None:
- Key = self.__TransNum(ctx.Number())
- self.__AssignQuestionKey(CBObj, Key)
+ self.CheckDuplicateDefaultValue(
+ EFI_HII_DEFAULT_CLASS_MANUFACTURING, ctx.F.line, ctx.F.text
+ )
+ ReturnCode = gVfrDefaultStore.BufferVarStoreAltConfigAdd(
+ EFI_HII_DEFAULT_CLASS_MANUFACTURING,
+ self.CurrQestVarInfo,
+ VarStoreName,
+ VarStoreGuid,
+ self.CurrQestVarInfo.VarType,
+ self.Value,
+ )
+ self.CompareErrorHandler(
+ ReturnCode,
+ VfrReturnCode.VFR_RETURN_SUCCESS,
+ Line,
+ ctx.L.text,
+ "No manufacturing default storage found",
+ )
- ctx.Node.Data = CBObj
- self.__IsCheckBoxOp = False
+ if ctx.Key() != None:
+ Key = self.TransNum(ctx.Number())
+ self.AssignQuestionKey(CBObj, Key)
+ ctx.Node.Buffer = gFormPkg.StructToStream(CBObj.GetInfo())
+ self.InsertEndNode(ctx.Node, ctx.stop.line)
+ self.IsCheckBoxOp = False
return ctx.Node
-
# Visit a parse tree produced by VfrSyntaxParser#vfrCheckBoxFlags.
- def visitVfrCheckBoxFlags(self, ctx:VfrSyntaxParser.VfrCheckBoxFlagsContext):
-
+ def visitVfrCheckBoxFlags(self, ctx: VfrSyntaxParser.VfrCheckBoxFlagsContext):
self.visitChildren(ctx)
for FlagsFieldCtx in ctx.checkboxFlagsField():
ctx.LFlags |= FlagsFieldCtx.LFlag
@@ -2060,19 +2392,17 @@ class VfrSyntaxVisitor(ParseTreeVisitor):
return ctx.HFlags, ctx.LFlags
-
# Visit a parse tree produced by VfrSyntaxParser#checkboxFlagsField.
- def visitCheckboxFlagsField(self, ctx:VfrSyntaxParser.CheckboxFlagsFieldContext):
-
+ def visitCheckboxFlagsField(self, ctx: VfrSyntaxParser.CheckboxFlagsFieldContext):
self.visitChildren(ctx)
if ctx.Number() != None:
- if self.__TransNum(ctx.Number()) != 0:
- self.__ErrorHandler(VfrReturnCode.VFR_RETURN_UNSUPPORTED, ctx.start.line)
+ if self.TransNum(ctx.Number()) != 0:
+ self.ErrorHandler(VfrReturnCode.VFR_RETURN_UNSUPPORTED, ctx.start.line)
elif ctx.DefaultFlag() != None:
- self.__ErrorHandler(VfrReturnCode.VFR_RETURN_UNSUPPORTED, ctx.D.line, ctx.D.text)
+ self.ErrorHandler(VfrReturnCode.VFR_RETURN_UNSUPPORTED, ctx.D.line, ctx.D.text)
elif ctx.ManufacturingFlag() != None:
- self.__ErrorHandler(VfrReturnCode.VFR_RETURN_UNSUPPORTED, ctx.M.line, ctx.M.text)
+ self.ErrorHandler(VfrReturnCode.VFR_RETURN_UNSUPPORTED, ctx.M.line, ctx.M.text)
elif ctx.CheckBoxDefaultFlag() != None:
ctx.LFlag = 0x01
elif ctx.CheckBoxDefaultMfgFlag() != None:
@@ -2083,151 +2413,216 @@ class VfrSyntaxVisitor(ParseTreeVisitor):
return ctx.HFlag, ctx.LFlag
# Visit a parse tree produced by VfrSyntaxParser#vfrStatementAction.
- def visitVfrStatementAction(self, ctx:VfrSyntaxParser.VfrStatementActionContext):
-
+ def visitVfrStatementAction(self, ctx: VfrSyntaxParser.VfrStatementActionContext):
+ AObj = IfrAction()
+ ctx.Node.Data = AObj
self.visitChildren(ctx)
- AObj = ctx.OpObj
AObj.SetLineNo(ctx.start.line)
- AObj.SetQuestionConfig(self.__TransNum(ctx.Number()))
- ctx.Node.Data = AObj
+ AObj.SetQuestionConfig(self.TransNum(ctx.Number()))
+ if ctx.FLAGS() != None:
+ AObj.SetFlags(ctx.vfrActionFlags().HFlags)
+ ctx.Node.Buffer = gFormPkg.StructToStream(AObj.GetInfo())
+ self.InsertEndNode(ctx.Node, ctx.stop.line)
return ctx.Node
-
# Visit a parse tree produced by VfrSyntaxParser#vfrActionFlags.
- def visitVfrActionFlags(self, ctx:VfrSyntaxParser.VfrActionFlagsContext):
-
+ def visitVfrActionFlags(self, ctx: VfrSyntaxParser.VfrActionFlagsContext):
self.visitChildren(ctx)
for FlagsFieldCtx in ctx.actionFlagsField():
ctx.HFlags |= FlagsFieldCtx.HFlag
return ctx.HFlags
-
# Visit a parse tree produced by VfrSyntaxParser#actionFlagsField.
- def visitActionFlagsField(self, ctx:VfrSyntaxParser.ActionFlagsFieldContext):
-
+ def visitActionFlagsField(self, ctx: VfrSyntaxParser.ActionFlagsFieldContext):
self.visitChildren(ctx)
if ctx.Number() != None:
- if self.__TransNum(ctx.Number()) != 0:
- self.__ErrorHandler(VfrReturnCode.VFR_RETURN_UNSUPPORTED, ctx.N.line)
+ if self.TransNum(ctx.Number()) != 0:
+ self.ErrorHandler(VfrReturnCode.VFR_RETURN_UNSUPPORTED, ctx.N.line)
else:
ctx.HFlag = ctx.questionheaderFlagsField().QHFlag
return ctx.HFlag
-
# Visit a parse tree produced by VfrSyntaxParser#vfrStatementNumericType.
- def visitVfrStatementNumericType(self, ctx:VfrSyntaxParser.VfrStatementNumericTypeContext):
-
+ def visitVfrStatementNumericType(self, ctx: VfrSyntaxParser.VfrStatementNumericTypeContext):
self.visitChildren(ctx)
if ctx.vfrStatementNumeric() != None:
- ctx.Node = ctx.vfrStatementNumeric().Node
+ if self.CurrQestVarInfo.IsBitVar:
+ ctx.Node = ctx.vfrStatementNumeric().GuidNode
+ else:
+ ctx.Node = ctx.vfrStatementNumeric().Node
elif ctx.vfrStatementOneOf() != None:
- ctx.Node = ctx.vfrStatementOneOf().Node
+ if self.CurrQestVarInfo.IsBitVar:
+ ctx.Node = ctx.vfrStatementOneOf().GuidNode
+ else:
+ ctx.Node = ctx.vfrStatementOneOf().Node
return ctx.Node
-
# Visit a parse tree produced by VfrSyntaxP-arser#vfrStatementNumeric.
- def visitVfrStatementNumeric(self, ctx:VfrSyntaxParser.VfrStatementNumericContext):
-
+ def visitVfrStatementNumeric(self, ctx: VfrSyntaxParser.VfrStatementNumericContext):
self.visitChildren(ctx)
- NObj = ctx.OpObj
+ NObj = ctx.Node.Data
+
NObj.SetLineNo(ctx.start.line)
- self.__CurrentQuestion = NObj.GetQuestion()
Line = ctx.start.line
+ UpdateVarType = False
- if self.__CurrQestVarInfo.IsBitVar:
- GuidObj = CIfrGuid(0)
+ # Create a GUID opcode to wrap the numeric opcode, if it refer to bit varstore.
+ if self.CurrQestVarInfo.IsBitVar:
+ GuidObj = IfrGuid(0)
GuidObj.SetGuid(EDKII_IFR_BIT_VARSTORE_GUID)
GuidObj.SetLineNo(Line)
- GuidObj.SetScope(1) # pos
+ GuidObj.SetScope(1) # pos
+ ctx.GuidNode.Data = GuidObj
+ ctx.GuidNode.Buffer = gFormPkg.StructToStream(GuidObj.GetInfo())
+ ctx.GuidNode.insertChild(ctx.Node)
+ self.InsertEndNode(ctx.GuidNode, ctx.stop.line)
# check data type
- if self.__CurrQestVarInfo.VarStoreId != EFI_VARSTORE_ID_INVALID:
- if self.__CurrQestVarInfo.IsBitVar:
- LFlags = EDKII_IFR_NUMERIC_SIZE_BIT & self.__CurrQestVarInfo.VarTotalSize
- self.__ErrorHandler(NObj.SetFlagsForBitField(NObj.GetFlags(),LFlags), Line)
+ if self.CurrQestVarInfo.VarStoreId != EFI_VARSTORE_ID_INVALID:
+ if self.CurrQestVarInfo.IsBitVar:
+ LFlags = EDKII_IFR_NUMERIC_SIZE_BIT & self.CurrQestVarInfo.VarTotalSize
+ self.ErrorHandler(NObj.SetFlagsForBitField(NObj.GetQFlags(), LFlags), Line)
else:
- DataTypeSize, ReturnCode = gCVfrVarDataTypeDB.GetDataTypeSizeByDataType(self.__CurrQestVarInfo.VarType)
- self.__ErrorHandler(ReturnCode, Line, 'Numeric varid is not the valid data type')
- if DataTypeSize != 0 and DataTypeSize != self.__CurrQestVarInfo.VarTotalSize:
- self.__ErrorHandler(VfrReturnCode.VFR_RETURN_INVALID_PARAMETER, Line, 'Numeric varid doesn\'t support array')
- self.__ErrorHandler(NObj.SetFlags(NObj.GetFlags(), self.__CurrQestVarInfo.VarType), Line)
-
+ DataTypeSize, ReturnCode = gVfrVarDataTypeDB.GetDataTypeSizeByDataType(
+ self.CurrQestVarInfo.VarType
+ )
+ self.ErrorHandler(ReturnCode, Line, "Numeric varid is not the valid data type")
+ if DataTypeSize != 0 and DataTypeSize != self.CurrQestVarInfo.VarTotalSize:
+ self.ErrorHandler(
+ VfrReturnCode.VFR_RETURN_INVALID_PARAMETER,
+ Line,
+ "Numeric varid doesn't support array",
+ )
+ self.ErrorHandler(
+ NObj.SetFlags(NObj.GetQFlags(), self.CurrQestVarInfo.VarType), Line
+ )
if ctx.FLAGS() != None:
- if self.__CurrQestVarInfo.IsBitVar:
- self.__ErrorHandler(NObj.SetFlagsForBitField(ctx.vfrNumericFlags().HFlags,ctx.vfrNumericFlags().LFlags, ctx.vfrNumericFlags().IsDisplaySpecified), ctx.F.line)
+ UpdateVarType = ctx.vfrNumericFlags().UpdateVarType
+ if self.CurrQestVarInfo.IsBitVar:
+ self.ErrorHandler(
+ NObj.SetFlagsForBitField(
+ ctx.vfrNumericFlags().HFlags,
+ ctx.vfrNumericFlags().LFlags,
+ ctx.vfrNumericFlags().IsDisplaySpecified,
+ ),
+ ctx.F.line,
+ )
else:
- self.__ErrorHandler(NObj.SetFlags(ctx.vfrNumericFlags().HFlags,ctx.vfrNumericFlags().LFlags, ctx.vfrNumericFlags().IsDisplaySpecified), ctx.F.line)
+ self.ErrorHandler(
+ NObj.SetFlags(
+ ctx.vfrNumericFlags().HFlags,
+ ctx.vfrNumericFlags().LFlags,
+ ctx.vfrNumericFlags().IsDisplaySpecified,
+ ),
+ ctx.F.line,
+ )
+ NObj.SetFlagsStream(self.ExtractOriginalText(ctx.vfrNumericFlags()))
if ctx.Key() != None:
- Key = self.__TransNum(ctx.Number())
- self.__AssignQuestionKey(NObj,Key)
-
- ShrinkSize = 0
- IsSupported = True
- if self.__CurrQestVarInfo.IsBitVar == False:
- Type = self.__CurrQestVarInfo.VarType
- # Base on the type to know the actual used size, shrink the buffer size allocate before.
- if Type == EFI_IFR_TYPE_NUM_SIZE_8:
- ShrinkSize = 21
- elif Type == EFI_IFR_TYPE_NUM_SIZE_16:
- ShrinkSize = 18
- elif Type == EFI_IFR_TYPE_NUM_SIZE_32:
- ShrinkSize = 12
- elif Type == EFI_IFR_TYPE_NUM_SIZE_64:
- ShrinkSize = 0
+ Key = self.TransNum(ctx.Number())
+ self.AssignQuestionKey(NObj, Key)
+ NObj.SetHasKey(True)
+
+ NObj.SetHasStep(ctx.vfrSetMinMaxStep().Step() != None)
+
+ if (self.CurrQestVarInfo.IsBitVar == False) and (
+ self.CurrQestVarInfo.VarType not in BasicTypes
+ ):
+ self.ErrorHandler(
+ VfrReturnCode.VFR_RETURN_INVALID_PARAMETER,
+ Line,
+ "Numeric question only support UINT8, UINT16, UINT32 and UINT64 data type.",
+ )
+
+ # modify the data for namevalue
+ if self.CurrQestVarInfo.VarType != EFI_IFR_TYPE_NUM_SIZE_64:
+ if self.CurrQestVarInfo.IsBitVar:
+ UpdatedNObj = IfrNumeric(EFI_IFR_TYPE_NUM_SIZE_32)
else:
- IsSupported = False
- else:
- #?Question stored in bit fields saved as UINT32 type, so the ShrinkSize same as EFI_IFR_TYPE_NUM_SIZE_32.
- ShrinkSize = 12
-
- #######?NObj->ShrinkBinSize (ShrinkSize);
- if IsSupported == False:
- self.__ErrorHandler(VfrReturnCode.VFR_RETURN_INVALID_PARAMETER, Line, 'Numeric question only support UINT8, UINT16, UINT32 and UINT64 data type.')
+ UpdatedNObj = IfrNumeric(self.CurrQestVarInfo.VarType)
+ UpdatedNObj.QName = NObj.QName
+ UpdatedNObj.VarIdStr = NObj.VarIdStr
+ UpdatedNObj.HasQuestionId = NObj.HasQuestionId
+ UpdatedNObj.FlagsStream = NObj.FlagsStream
+ UpdatedNObj.HasKey = NObj.HasKey
+ UpdatedNObj.HasStep = NObj.HasStep
+ UpdatedNObj.LineNo = NObj.LineNo
+ UpdatedNObj.GetInfo().Question = NObj.GetInfo().Question
+ UpdatedNObj.GetInfo().Flags = NObj.GetInfo().Flags
+ UpdatedNObj.GetInfo().Data.MinValue = NObj.GetInfo().Data.MinValue
+ UpdatedNObj.GetInfo().Data.MaxValue = NObj.GetInfo().Data.MaxValue
+ UpdatedNObj.GetInfo().Data.Step = NObj.GetInfo().Data.Step
+ NObj = UpdatedNObj
ctx.Node.Data = NObj
+ ctx.Node.Buffer = gFormPkg.StructToStream(NObj.GetInfo())
+ self.InsertEndNode(ctx.Node, ctx.stop.line)
+ self.CurrentMinMaxData = None
return ctx.Node
-
# Visit a parse tree produced by VfrSyntaxParser#vfrSetMinMaxStep.
- def visitVfrSetMinMaxStep(self, ctx:VfrSyntaxParser.VfrSetMinMaxStepContext):
+ def visitVfrSetMinMaxStep(self, ctx: VfrSyntaxParser.VfrSetMinMaxStepContext):
IntDecStyle = False
- if ((self.__CurrQestVarInfo.IsBitVar) and (ctx.OpObj.GetOpCode() == EFI_IFR_NUMERIC_OP) and ((ctx.OpObj.GetNumericFlags() & EDKII_IFR_DISPLAY_BIT) == 0)) or \
- ((self.__CurrQestVarInfo.IsBitVar == False) and (ctx.OpObj.GetOpCode() == EFI_IFR_NUMERIC_OP) and ((ctx.OpObj.GetNumericFlags() & EFI_IFR_DISPLAY) == 0)):
+ OpObj = ctx.Node.Data
+ if (
+ (self.CurrQestVarInfo.IsBitVar)
+ and (OpObj.GetOpCode() == EFI_IFR_NUMERIC_OP)
+ and ((OpObj.GetNumericFlags() & EDKII_IFR_DISPLAY_BIT) == 0)
+ ) or (
+ (self.CurrQestVarInfo.IsBitVar == False)
+ and (OpObj.GetOpCode() == EFI_IFR_NUMERIC_OP)
+ and ((OpObj.GetNumericFlags() & EFI_IFR_DISPLAY) == 0)
+ ):
IntDecStyle = True
MinNegative = False
MaxNegative = False
self.visitChildren(ctx)
- Min = self.__TransNum(ctx.I.text)
- Max = self.__TransNum(ctx.A.text)
- Step = self.__TransNum(ctx.S.text) if ctx.Step() != None else 0
+ Min = self.TransNum(ctx.I.text)
+ Max = self.TransNum(ctx.A.text)
+ Step = self.TransNum(ctx.S.text) if ctx.Step() != None else 0
- if ctx.N1 !=None:
+ if ctx.N1 != None:
MinNegative = True
if IntDecStyle == False and MinNegative == True:
- self.__ErrorHandler(VfrReturnCode.VFR_RETURN_INVALID_PARAMETER, ctx.I.line, '\'-\' can\'t be used when not in int decimal type.')
- if self.__CurrQestVarInfo.IsBitVar:
- if (IntDecStyle == False) and (Min > (1 << self.__CurrQestVarInfo.VarTotalSize) - 1): #
- self.__ErrorHandler(VfrReturnCode.VFR_RETURN_INVALID_PARAMETER, ctx.I.line, 'BIT type minimum can\'t small than 0, bigger than 2^BitWidth -1')
+ self.ErrorHandler(
+ VfrReturnCode.VFR_RETURN_INVALID_PARAMETER,
+ ctx.I.line,
+ "'-' can't be used when not in int decimal type.",
+ )
+ if self.CurrQestVarInfo.IsBitVar:
+ if (IntDecStyle == False) and (Min > (1 << self.CurrQestVarInfo.VarTotalSize) - 1): #
+ self.ErrorHandler(
+ VfrReturnCode.VFR_RETURN_INVALID_PARAMETER,
+ ctx.I.line,
+ "BIT type minimum can't small than 0, bigger than 2^BitWidth -1",
+ )
else:
- Type = self.__CurrQestVarInfo.VarType
+ Type = self.CurrQestVarInfo.VarType
if Type == EFI_IFR_TYPE_NUM_SIZE_64:
if IntDecStyle:
if MinNegative:
if Min > 0x8000000000000000:
- self.__ErrorHandler(VfrReturnCode.VFR_RETURN_INVALID_PARAMETER, ctx.I.line, 'INT64 type minimum can\'t small than -0x8000000000000000, big than 0x7FFFFFFFFFFFFFFF')
+ self.ErrorHandler(
+ VfrReturnCode.VFR_RETURN_INVALID_PARAMETER,
+ ctx.I.line,
+ "INT64 type minimum can't small than -0x8000000000000000, big than 0x7FFFFFFFFFFFFFFF",
+ )
else:
if Min > 0x7FFFFFFFFFFFFFFF:
- self.__ErrorHandler(VfrReturnCode.VFR_RETURN_INVALID_PARAMETER, ctx.I.line, 'INT64 type minimum can\'t small than -0x8000000000000000, big than 0x7FFFFFFFFFFFFFFF')
+ self.ErrorHandler(
+ VfrReturnCode.VFR_RETURN_INVALID_PARAMETER,
+ ctx.I.line,
+ "INT64 type minimum can't small than -0x8000000000000000, big than 0x7FFFFFFFFFFFFFFF",
+ )
if MinNegative:
Min = ~Min + 1
@@ -2235,10 +2630,18 @@ class VfrSyntaxVisitor(ParseTreeVisitor):
if IntDecStyle:
if MinNegative:
if Min > 0x80000000:
- self.__ErrorHandler(VfrReturnCode.VFR_RETURN_INVALID_PARAMETER, ctx.I.line, 'INT32 type minimum can\'t small than -0x80000000, big than 0x7FFFFFFF')
+ self.ErrorHandler(
+ VfrReturnCode.VFR_RETURN_INVALID_PARAMETER,
+ ctx.I.line,
+ "INT32 type minimum can't small than -0x80000000, big than 0x7FFFFFFF",
+ )
else:
if Min > 0x7FFFFFFF:
- self.__ErrorHandler(VfrReturnCode.VFR_RETURN_INVALID_PARAMETER, ctx.I.line, 'INT32 type minimum can\'t small than -0x80000000, big than 0x7FFFFFFF')
+ self.ErrorHandler(
+ VfrReturnCode.VFR_RETURN_INVALID_PARAMETER,
+ ctx.I.line,
+ "INT32 type minimum can't small than -0x80000000, big than 0x7FFFFFFF",
+ )
if MinNegative:
Min = ~Min + 1
@@ -2246,10 +2649,18 @@ class VfrSyntaxVisitor(ParseTreeVisitor):
if IntDecStyle:
if MinNegative:
if Min > 0x8000:
- self.__ErrorHandler(VfrReturnCode.VFR_RETURN_INVALID_PARAMETER, ctx.I.line, 'INT16 type minimum can\'t small than -0x8000, big than 0x7FFF')
+ self.ErrorHandler(
+ VfrReturnCode.VFR_RETURN_INVALID_PARAMETER,
+ ctx.I.line,
+ "INT16 type minimum can't small than -0x8000, big than 0x7FFF",
+ )
else:
if Min > 0x7FFF:
- self.__ErrorHandler(VfrReturnCode.VFR_RETURN_INVALID_PARAMETER, ctx.I.line, 'INT16 type minimum can\'t small than -0x8000, big than 0x7FFF')
+ self.ErrorHandler(
+ VfrReturnCode.VFR_RETURN_INVALID_PARAMETER,
+ ctx.I.line,
+ "INT16 type minimum can't small than -0x8000, big than 0x7FFF",
+ )
if MinNegative:
Min = ~Min + 1
@@ -2257,201 +2668,286 @@ class VfrSyntaxVisitor(ParseTreeVisitor):
if IntDecStyle:
if MinNegative:
if Min > 0x80:
- self.__ErrorHandler(VfrReturnCode.VFR_RETURN_INVALID_PARAMETER, ctx.I.line, 'INT8 type minimum can\'t small than -0x80, big than 0x7F')
+ self.ErrorHandler(
+ VfrReturnCode.VFR_RETURN_INVALID_PARAMETER,
+ ctx.I.line,
+ "INT8 type minimum can't small than -0x80, big than 0x7F",
+ )
else:
if Min > 0x7F:
- self.__ErrorHandler(VfrReturnCode.VFR_RETURN_INVALID_PARAMETER, ctx.I.line, 'INT8 type minimum can\'t small than -0x80, big than 0x7F')
+ self.ErrorHandler(
+ VfrReturnCode.VFR_RETURN_INVALID_PARAMETER,
+ ctx.I.line,
+ "INT8 type minimum can't small than -0x80, big than 0x7F",
+ )
if MinNegative:
Min = ~Min + 1
if ctx.N2 != None:
MaxNegative = True
if IntDecStyle == False and MaxNegative == True:
- self.__ErrorHandler(VfrReturnCode.VFR_RETURN_INVALID_PARAMETER, ctx.A.line, ' \'-\' can\'t be used when not in int decimal type.')
- if self.__CurrQestVarInfo.IsBitVar:
- if (IntDecStyle == False) and (Max > (1 << self.__CurrQestVarInfo.VarTotalSize) - 1):
- self.__ErrorHandler(VfrReturnCode.VFR_RETURN_INVALID_PARAMETER, ctx.A.line, 'BIT type maximum can\'t be bigger than 2^BitWidth -1')
+ self.ErrorHandler(
+ VfrReturnCode.VFR_RETURN_INVALID_PARAMETER,
+ ctx.A.line,
+ " '-' can't be used when not in int decimal type.",
+ )
+ if self.CurrQestVarInfo.IsBitVar:
+ if (IntDecStyle == False) and (Max > (1 << self.CurrQestVarInfo.VarTotalSize) - 1):
+ self.ErrorHandler(
+ VfrReturnCode.VFR_RETURN_INVALID_PARAMETER,
+ ctx.A.line,
+ "BIT type maximum can't be bigger than 2^BitWidth -1",
+ )
else:
- Type = self.__CurrQestVarInfo.VarType
+ Type = self.CurrQestVarInfo.VarType
if Type == EFI_IFR_TYPE_NUM_SIZE_64:
if IntDecStyle:
if MaxNegative:
if Max > 0x8000000000000000:
- self.__ErrorHandler(VfrReturnCode.VFR_RETURN_INVALID_PARAMETER, ctx.A.line, 'INT64 type minimum can\'t small than -0x8000000000000000, big than 0x7FFFFFFFFFFFFFFF')
+ self.ErrorHandler(
+ VfrReturnCode.VFR_RETURN_INVALID_PARAMETER,
+ ctx.A.line,
+ "INT64 type minimum can't small than -0x8000000000000000, big than 0x7FFFFFFFFFFFFFFF",
+ )
else:
if Max > 0x7FFFFFFFFFFFFFFF:
- self.__ErrorHandler(VfrReturnCode.VFR_RETURN_INVALID_PARAMETER, ctx.A.line, 'INT64 type minimum can\'t small than -0x8000000000000000, big than 0x7FFFFFFFFFFFFFFF')
+ self.ErrorHandler(
+ VfrReturnCode.VFR_RETURN_INVALID_PARAMETER,
+ ctx.A.line,
+ "INT64 type minimum can't small than -0x8000000000000000, big than 0x7FFFFFFFFFFFFFFF",
+ )
if MaxNegative:
Max = ~Max + 1
- if Max < Min: #
- self.__ErrorHandler(VfrReturnCode.VFR_RETURN_INVALID_PARAMETER, ctx.A.line, 'Maximum can\'t be less than Minimum')
-
+ if Max < Min: #
+ self.ErrorHandler(
+ VfrReturnCode.VFR_RETURN_INVALID_PARAMETER,
+ ctx.A.line,
+ "Maximum can't be less than Minimum",
+ )
if Type == EFI_IFR_TYPE_NUM_SIZE_32:
if IntDecStyle:
if MaxNegative:
if Max > 0x80000000:
- self.__ErrorHandler(VfrReturnCode.VFR_RETURN_INVALID_PARAMETER, ctx.A.line, 'INT32 type minimum can\'t small than -0x80000000, big than 0x7FFFFFFF')
+ self.ErrorHandler(
+ VfrReturnCode.VFR_RETURN_INVALID_PARAMETER,
+ ctx.A.line,
+ "INT32 type minimum can't small than -0x80000000, big than 0x7FFFFFFF",
+ )
else:
if Max > 0x7FFFFFFF:
- self.__ErrorHandler(VfrReturnCode.VFR_RETURN_INVALID_PARAMETER, ctx.A.line, 'INT32 type minimum can\'t small than -0x80000000, big than 0x7FFFFFFF')
+ self.ErrorHandler(
+ VfrReturnCode.VFR_RETURN_INVALID_PARAMETER,
+ ctx.A.line,
+ "INT32 type minimum can't small than -0x80000000, big than 0x7FFFFFFF",
+ )
if MaxNegative:
Max = ~Max + 1
- if Max < Min: #
- self.__ErrorHandler(VfrReturnCode.VFR_RETURN_INVALID_PARAMETER, ctx.A.line, 'Maximum can\'t be less than Minimum')
-
+ if Max < Min: #
+ self.ErrorHandler(
+ VfrReturnCode.VFR_RETURN_INVALID_PARAMETER,
+ ctx.A.line,
+ "Maximum can't be less than Minimum",
+ )
if Type == EFI_IFR_TYPE_NUM_SIZE_16:
if IntDecStyle:
if MaxNegative:
if Max > 0x8000:
- self.__ErrorHandler(VfrReturnCode.VFR_RETURN_INVALID_PARAMETER, ctx.A.line, 'INT16 type minimum can\'t small than -0x8000, big than 0x7FFF')
+ self.ErrorHandler(
+ VfrReturnCode.VFR_RETURN_INVALID_PARAMETER,
+ ctx.A.line,
+ "INT16 type minimum can't small than -0x8000, big than 0x7FFF",
+ )
else:
if Max > 0x7FFF:
- self.__ErrorHandler(VfrReturnCode.VFR_RETURN_INVALID_PARAMETER, ctx.A.line, 'INT16 type minimum can\'t small than -0x8000, big than 0x7FFF')
+ self.ErrorHandler(
+ VfrReturnCode.VFR_RETURN_INVALID_PARAMETER,
+ ctx.A.line,
+ "INT16 type minimum can't small than -0x8000, big than 0x7FFF",
+ )
if MaxNegative:
Max = ~Max + 1
- if Max < Min: #
- self.__ErrorHandler(VfrReturnCode.VFR_RETURN_INVALID_PARAMETER, ctx.A.line, 'Maximum can\'t be less than Minimum')
+ if Max < Min: #
+ self.ErrorHandler(
+ VfrReturnCode.VFR_RETURN_INVALID_PARAMETER,
+ ctx.A.line,
+ "Maximum can't be less than Minimum",
+ )
if Type == EFI_IFR_TYPE_NUM_SIZE_8:
if IntDecStyle:
if MaxNegative:
if Max > 0x80:
- self.__ErrorHandler(VfrReturnCode.VFR_RETURN_INVALID_PARAMETER, ctx.A.line, 'INT8 type minimum can\'t small than -0x80, big than 0x7F')
+ self.ErrorHandler(
+ VfrReturnCode.VFR_RETURN_INVALID_PARAMETER,
+ ctx.A.line,
+ "INT8 type minimum can't small than -0x80, big than 0x7F",
+ )
else:
if Max > 0x7F:
- self.__ErrorHandler(VfrReturnCode.VFR_RETURN_INVALID_PARAMETER, ctx.A.line, 'INT8 type minimum can\'t small than -0x80, big than 0x7F')
+ self.ErrorHandler(
+ VfrReturnCode.VFR_RETURN_INVALID_PARAMETER,
+ ctx.A.line,
+ "INT8 type minimum can't small than -0x80, big than 0x7F",
+ )
if MaxNegative:
Max = ~Max + 1
- if Max < Min: #
- self.__ErrorHandler(VfrReturnCode.VFR_RETURN_INVALID_PARAMETER, ctx.A.line, 'Maximum can\'t be less than Minimum')
-
- if self.__CurrQestVarInfo.IsBitVar:
- ctx.OpObj.SetMinMaxStepData(Min, Max, Step, EFI_IFR_TYPE_NUM_SIZE_32)
- else:
- Type = self.__CurrQestVarInfo.VarType
- if Type == EFI_IFR_TYPE_NUM_SIZE_64:
- ctx.OpObj.SetMinMaxStepData(Min, Max, Step, EFI_IFR_TYPE_NUM_SIZE_64)
- if Type == EFI_IFR_TYPE_NUM_SIZE_32:
- ctx.OpObj.SetMinMaxStepData(Min, Max, Step, EFI_IFR_TYPE_NUM_SIZE_32)
- if Type == EFI_IFR_TYPE_NUM_SIZE_16:
- ctx.OpObj.SetMinMaxStepData(Min, Max, Step, EFI_IFR_TYPE_NUM_SIZE_16)
- if Type == EFI_IFR_TYPE_NUM_SIZE_8:
- ctx.OpObj.SetMinMaxStepData(Min, Max, Step, EFI_IFR_TYPE_NUM_SIZE_8)
-
- return ctx.OpObj
+ if Max < Min: #
+ self.ErrorHandler(
+ VfrReturnCode.VFR_RETURN_INVALID_PARAMETER,
+ ctx.A.line,
+ "Maximum can't be less than Minimum",
+ )
+ OpObj.SetMinMaxStepData(Min, Max, Step)
+ return ctx.Node
# Visit a parse tree produced by VfrSyntaxParser#vfrNumericFlags.
- def visitVfrNumericFlags(self, ctx:VfrSyntaxParser.VfrNumericFlagsContext):
-
- ctx.LFlags = self.__CurrQestVarInfo.VarType & EFI_IFR_NUMERIC_SIZE
- VarStoreType = gCVfrDataStorage.GetVarStoreType(self.__CurrQestVarInfo.VarStoreId)
+ def visitVfrNumericFlags(self, ctx: VfrSyntaxParser.VfrNumericFlagsContext):
+ # check data type flag
+ ctx.LFlags = self.CurrQestVarInfo.VarType & EFI_IFR_NUMERIC_SIZE
+ VarStoreType = gVfrDataStorage.GetVarStoreType(self.CurrQestVarInfo.VarStoreId)
Line = ctx.start.line
IsSetType = False
self.visitChildren(ctx)
for FlagsFieldCtx in ctx.numericFlagsField():
ctx.HFlags |= FlagsFieldCtx.HFlag
- ctx.IsDisplaySpecified = FlagsFieldCtx.IsDisplaySpecified
- IsSetType |= FlagsFieldCtx.IsSetType
+ ctx.IsDisplaySpecified |= FlagsFieldCtx.IsDisplaySpecified
+ IsSetType |= FlagsFieldCtx.IsSetType
if FlagsFieldCtx.NumericSizeOne() != None:
- if self.__CurrQestVarInfo.IsBitVar == False:
- ctx.LFlags = (ctx.LFlags & ~EFI_IFR_NUMERIC_SIZE) | EFI_IFR_NUMERIC_SIZE_1
+ if self.CurrQestVarInfo.IsBitVar == False:
+ ctx.LFlags = (ctx.LFlags & ~EFI_IFR_NUMERIC_SIZE) | EFI_IFR_NUMERIC_SIZE_1
if FlagsFieldCtx.NumericSizeTwo() != None:
- if self.__CurrQestVarInfo.IsBitVar == False:
- ctx.LFlags = (ctx.LFlags & ~EFI_IFR_NUMERIC_SIZE) | EFI_IFR_NUMERIC_SIZE_2
+ if self.CurrQestVarInfo.IsBitVar == False:
+ ctx.LFlags = (ctx.LFlags & ~EFI_IFR_NUMERIC_SIZE) | EFI_IFR_NUMERIC_SIZE_2
if FlagsFieldCtx.NumericSizeFour() != None:
- if self.__CurrQestVarInfo.IsBitVar == False:
- ctx.LFlags = (ctx.LFlags & ~EFI_IFR_NUMERIC_SIZE) | EFI_IFR_NUMERIC_SIZE_4
+ if self.CurrQestVarInfo.IsBitVar == False:
+ ctx.LFlags = (ctx.LFlags & ~EFI_IFR_NUMERIC_SIZE) | EFI_IFR_NUMERIC_SIZE_4
if FlagsFieldCtx.NumericSizeEight() != None:
- if self.__CurrQestVarInfo.IsBitVar == False:
- ctx.LFlags = (ctx.LFlags & ~EFI_IFR_NUMERIC_SIZE) | EFI_IFR_NUMERIC_SIZE_8
+ if self.CurrQestVarInfo.IsBitVar == False:
+ ctx.LFlags = (ctx.LFlags & ~EFI_IFR_NUMERIC_SIZE) | EFI_IFR_NUMERIC_SIZE_8
if FlagsFieldCtx.DisPlayIntDec() != None:
- if self.__CurrQestVarInfo.IsBitVar == False:
- ctx.LFlags = (ctx.LFlags & ~EFI_IFR_DISPLAY) | EFI_IFR_DISPLAY_INT_DEC
+ if self.CurrQestVarInfo.IsBitVar == False:
+ ctx.LFlags = (ctx.LFlags & ~EFI_IFR_DISPLAY) | EFI_IFR_DISPLAY_INT_DEC
else:
- ctx.LFlags = (ctx.LFlags & ~EDKII_IFR_DISPLAY_BIT) | EDKII_IFR_DISPLAY_INT_DEC_BIT
+ ctx.LFlags = (
+ ctx.LFlags & ~EDKII_IFR_DISPLAY_BIT
+ ) | EDKII_IFR_DISPLAY_INT_DEC_BIT
- if FlagsFieldCtx.DisPlayUIntHex() != None:
- if self.__CurrQestVarInfo.IsBitVar == False:
- ctx.LFlags = (ctx.LFlags & ~EFI_IFR_DISPLAY) | EFI_IFR_DISPLAY_UINT_DEC
+ if FlagsFieldCtx.DisPlayUIntDec() != None:
+ if self.CurrQestVarInfo.IsBitVar == False:
+ ctx.LFlags = (ctx.LFlags & ~EFI_IFR_DISPLAY) | EFI_IFR_DISPLAY_UINT_DEC
else:
- ctx.LFlags = (ctx.LFlags & ~EDKII_IFR_DISPLAY_BIT) | EDKII_IFR_DISPLAY_UINT_DEC_BIT
+ ctx.LFlags = (
+ ctx.LFlags & ~EDKII_IFR_DISPLAY_BIT
+ ) | EDKII_IFR_DISPLAY_UINT_DEC_BIT
if FlagsFieldCtx.DisPlayUIntHex() != None:
- if self.__CurrQestVarInfo.IsBitVar == False:
- ctx.LFlags = (ctx.LFlags & ~EFI_IFR_DISPLAY) | EFI_IFR_DISPLAY_UINT_HEX
+ if self.CurrQestVarInfo.IsBitVar == False:
+ ctx.LFlags = (ctx.LFlags & ~EFI_IFR_DISPLAY) | EFI_IFR_DISPLAY_UINT_HEX
else:
- ctx.LFlags = (ctx.LFlags & ~EDKII_IFR_DISPLAY_BIT) | EDKII_IFR_DISPLAY_UINT_HEX_BIT
-
- if self.__CurrQestVarInfo.IsBitVar == False:
- if self.__CurrQestVarInfo.VarStoreId != EFI_VARSTORE_ID_INVALID:
- if VarStoreType == EFI_VFR_VARSTORE_TYPE.EFI_VFR_VARSTORE_BUFFER or VarStoreType == EFI_VFR_VARSTORE_TYPE.EFI_VFR_VARSTORE_EFI:
- if self.__CurrQestVarInfo.VarType != (ctx.LFlags & EFI_IFR_NUMERIC_SIZE):
- self.__ErrorHandler(VfrReturnCode.VFR_RETURN_INVALID_PARAMETER, Line, 'Numeric Flag is not same to Numeric VarData type')
+ ctx.LFlags = (
+ ctx.LFlags & ~EDKII_IFR_DISPLAY_BIT
+ ) | EDKII_IFR_DISPLAY_UINT_HEX_BIT
+
+ VarType = self.CurrQestVarInfo.VarType
+ if self.CurrQestVarInfo.IsBitVar == False:
+ if self.CurrQestVarInfo.VarStoreId != EFI_VARSTORE_ID_INVALID:
+ if (
+ VarStoreType == EFI_VFR_VARSTORE_TYPE.EFI_VFR_VARSTORE_BUFFER
+ or VarStoreType == EFI_VFR_VARSTORE_TYPE.EFI_VFR_VARSTORE_EFI
+ ):
+ if self.CurrQestVarInfo.VarType != (ctx.LFlags & EFI_IFR_NUMERIC_SIZE):
+ self.ErrorHandler(
+ VfrReturnCode.VFR_RETURN_INVALID_PARAMETER,
+ Line,
+ "Numeric Flag is not same to Numeric VarData type",
+ )
else:
# update data type for name/value store
- self.__CurrQestVarInfo.VarType = ctx.LFlags & EFI_IFR_NUMERIC_SIZE
- Size, _ = gCVfrVarDataTypeDB.GetDataTypeSizeByDataType(self.__CurrQestVarInfo.VarType)
- self.__CurrQestVarInfo.VarTotalSize = Size
+ self.CurrQestVarInfo.VarType = ctx.LFlags & EFI_IFR_NUMERIC_SIZE
+ Size, _ = gVfrVarDataTypeDB.GetDataTypeSizeByDataType(
+ self.CurrQestVarInfo.VarType
+ )
+ self.CurrQestVarInfo.VarTotalSize = Size
elif IsSetType:
- self.__CurrQestVarInfo.VarType = ctx.LFlags & EFI_IFR_NUMERIC_SIZE
+ self.CurrQestVarInfo.VarType = ctx.LFlags & EFI_IFR_NUMERIC_SIZE
- elif self.__CurrQestVarInfo.VarStoreId != EFI_VARSTORE_ID_INVALID and self.__CurrQestVarInfo.IsBitVar:
+ elif (
+ self.CurrQestVarInfo.VarStoreId != EFI_VARSTORE_ID_INVALID
+ and self.CurrQestVarInfo.IsBitVar
+ ):
ctx.LFlags &= EDKII_IFR_DISPLAY_BIT
- ctx.LFlags |= EDKII_IFR_NUMERIC_SIZE_BIT & self.__CurrQestVarInfo.VarTotalSize
+ ctx.LFlags |= EDKII_IFR_NUMERIC_SIZE_BIT & self.CurrQestVarInfo.VarTotalSize
- return ctx.HFlags, ctx.LFlags
+ if VarType != self.CurrQestVarInfo.VarType:
+ ctx.UpdateVarType = True
+ return ctx.HFlags, ctx.LFlags
# Visit a parse tree produced by VfrSyntaxParser#numericFlagsField.
- def visitNumericFlagsField(self, ctx:VfrSyntaxParser.NumericFlagsFieldContext):
-
+ def visitNumericFlagsField(self, ctx: VfrSyntaxParser.NumericFlagsFieldContext):
self.visitChildren(ctx)
Line = ctx.start.line
if ctx.Number() != None:
- if self.__TransNum(ctx.N.text) != 0:
- self.__ErrorHandler(VfrReturnCode.VFR_RETURN_UNSUPPORTED, Line)
+ if self.TransNum(ctx.N.text) != 0:
+ self.ErrorHandler(VfrReturnCode.VFR_RETURN_UNSUPPORTED, Line)
if ctx.NumericSizeOne() != None:
- if self.__CurrQestVarInfo.IsBitVar == False:
+ if self.CurrQestVarInfo.IsBitVar == False:
ctx.IsSetType = True
else:
- self.__ErrorHandler(VfrReturnCode.VFR_RETURN_INVALID_PARAMETER, Line, 'Can not specify the size of the numeric value for BIT field')
+ self.ErrorHandler(
+ VfrReturnCode.VFR_RETURN_INVALID_PARAMETER,
+ Line,
+ "Can not specify the size of the numeric value for BIT field",
+ )
if ctx.NumericSizeTwo() != None:
- if self.__CurrQestVarInfo.IsBitVar == False:
+ if self.CurrQestVarInfo.IsBitVar == False:
ctx.IsSetType = True
else:
- self.__ErrorHandler(VfrReturnCode.VFR_RETURN_INVALID_PARAMETER, Line, 'Can not specify the size of the numeric value for BIT field')
+ self.ErrorHandler(
+ VfrReturnCode.VFR_RETURN_INVALID_PARAMETER,
+ Line,
+ "Can not specify the size of the numeric value for BIT field",
+ )
if ctx.NumericSizeFour() != None:
- if self.__CurrQestVarInfo.IsBitVar == False:
+ if self.CurrQestVarInfo.IsBitVar == False:
ctx.IsSetType = True
else:
- self.__ErrorHandler(VfrReturnCode.VFR_RETURN_INVALID_PARAMETER, Line, 'Can not specify the size of the numeric value for BIT field')
+ self.ErrorHandler(
+ VfrReturnCode.VFR_RETURN_INVALID_PARAMETER,
+ Line,
+ "Can not specify the size of the numeric value for BIT field",
+ )
if ctx.NumericSizeEight() != None:
- if self.__CurrQestVarInfo.IsBitVar == False:
+ if self.CurrQestVarInfo.IsBitVar == False:
ctx.IsSetType = True
else:
- self.__ErrorHandler(VfrReturnCode.VFR_RETURN_INVALID_PARAMETER, Line, 'Can not specify the size of the numeric value for BIT field')
+ self.ErrorHandler(
+ VfrReturnCode.VFR_RETURN_INVALID_PARAMETER,
+ Line,
+ "Can not specify the size of the numeric value for BIT field",
+ )
if ctx.DisPlayIntDec() != None:
ctx.IsDisplaySpecified = True
- if ctx.DisPlayUIntHex() != None:
+ if ctx.DisPlayUIntDec() != None:
ctx.IsDisplaySpecified = True
if ctx.DisPlayUIntHex() != None:
@@ -2462,137 +2958,182 @@ class VfrSyntaxVisitor(ParseTreeVisitor):
return ctx.HFlag
-
# Visit a parse tree produced by VfrSyntaxParser#vfrStatementOneOf.
- def visitVfrStatementOneOf(self, ctx:VfrSyntaxParser.VfrStatementOneOfContext):
-
- OObj = ctx.OpObj
- Line = ctx.start.line
- OObj.SetLineNo(Line)
- self.__CurrentQuestion = OObj.GetQuestion()
+ def visitVfrStatementOneOf(self, ctx: VfrSyntaxParser.VfrStatementOneOfContext):
self.visitChildren(ctx)
- if self.__CurrQestVarInfo.IsBitVar:
- GuidObj = CIfrGuid(0)
+ UpdateVarType = False
+ OObj = ctx.Node.Data
+ Line = ctx.start.line
+ if self.CurrQestVarInfo.IsBitVar:
+ GuidObj = IfrGuid(0)
GuidObj.SetGuid(EDKII_IFR_BIT_VARSTORE_GUID)
GuidObj.SetLineNo(ctx.start.line)
- GuidObj.SetScope(1) # pos
+ GuidObj.SetScope(1) # pos
+ ctx.GuidNode.Data = GuidObj
+ ctx.GuidNode.Buffer = gFormPkg.StructToStream(GuidObj.GetInfo())
+ ctx.GuidNode.insertChild(ctx.Node)
+ self.InsertEndNode(ctx.GuidNode, ctx.stop.line)
# check data type
- if self.__CurrQestVarInfo.VarStoreId != EFI_VARSTORE_ID_INVALID:
- if self.__CurrQestVarInfo.IsBitVar:
- LFlags = EDKII_IFR_NUMERIC_SIZE_BIT & self.__CurrQestVarInfo.VarTotalSize
- self.__ErrorHandler(OObj.SetFlagsForBitField(OObj.GetFlags(),LFlags), Line)
+ if self.CurrQestVarInfo.VarStoreId != EFI_VARSTORE_ID_INVALID:
+ if self.CurrQestVarInfo.IsBitVar:
+ LFlags = EDKII_IFR_NUMERIC_SIZE_BIT & self.CurrQestVarInfo.VarTotalSize
+ self.ErrorHandler(OObj.SetFlagsForBitField(OObj.GetQFlags(), LFlags), Line)
else:
- DataTypeSize, ReturnCode = gCVfrVarDataTypeDB.GetDataTypeSizeByDataType(self.__CurrQestVarInfo.VarType)
- self.__ErrorHandler(ReturnCode, Line, 'OneOf varid is not the valid data type')
- if DataTypeSize != 0 and DataTypeSize != self.__CurrQestVarInfo.VarTotalSize:
- self.__ErrorHandler(VfrReturnCode.VFR_RETURN_INVALID_PARAMETER, Line, 'OneOf varid doesn\'t support array')
- self.__ErrorHandler(OObj.SetFlags(OObj.GetFlags(), self.__CurrQestVarInfo.VarType), Line)
-
+ DataTypeSize, ReturnCode = gVfrVarDataTypeDB.GetDataTypeSizeByDataType(
+ self.CurrQestVarInfo.VarType
+ )
+ self.ErrorHandler(ReturnCode, Line, "OneOf varid is not the valid data type")
+ if DataTypeSize != 0 and DataTypeSize != self.CurrQestVarInfo.VarTotalSize:
+ self.ErrorHandler(
+ VfrReturnCode.VFR_RETURN_INVALID_PARAMETER,
+ Line,
+ "OneOf varid doesn't support array",
+ )
+ self.ErrorHandler(
+ OObj.SetFlags(OObj.GetQFlags(), self.CurrQestVarInfo.VarType), Line
+ )
if ctx.FLAGS() != None:
- if self.__CurrQestVarInfo.IsBitVar:
- self.__ErrorHandler(OObj.SetFlagsForBitField(ctx.vfrOneofFlagsField().HFlags,ctx.vfrOneofFlagsField().LFlags), ctx.F.line)
+ UpdateVarType = ctx.vfrOneofFlagsField().UpdateVarType
+ if self.CurrQestVarInfo.IsBitVar:
+ self.ErrorHandler(
+ OObj.SetFlagsForBitField(
+ ctx.vfrOneofFlagsField().HFlags, ctx.vfrOneofFlagsField().LFlags
+ ),
+ ctx.F.line,
+ )
else:
- self.__ErrorHandler(OObj.SetFlags(ctx.vfrOneofFlagsField().HFlags, ctx.vfrOneofFlagsField().LFlags), ctx.F.line)
-
- ShrinkSize = 0
- IsSupported = True
- if self.__CurrQestVarInfo.IsBitVar == False:
- Type = self.__CurrQestVarInfo.VarType
- # Base on the type to know the actual used size, shrink the buffer size allocate before.
- if Type == EFI_IFR_TYPE_NUM_SIZE_8:
- ShrinkSize = 21
- elif Type == EFI_IFR_TYPE_NUM_SIZE_16:
- ShrinkSize = 18
- elif Type == EFI_IFR_TYPE_NUM_SIZE_32:
- ShrinkSize = 12
- elif Type == EFI_IFR_TYPE_NUM_SIZE_64:
- ShrinkSize = 0 #
+ self.ErrorHandler(
+ OObj.SetFlags(ctx.vfrOneofFlagsField().HFlags, ctx.vfrOneofFlagsField().LFlags),
+ ctx.F.line,
+ )
+
+ if (self.CurrQestVarInfo.IsBitVar == False) and (
+ self.CurrQestVarInfo.VarType not in BasicTypes
+ ):
+ self.ErrorHandler(
+ VfrReturnCode.VFR_RETURN_INVALID_PARAMETER,
+ Line,
+ "OneOf question only support UINT8, UINT16, UINT32 and UINT64 data type.",
+ )
+
+ # modify the data Vartype for NameValue
+ if self.CurrQestVarInfo.VarType != EFI_IFR_TYPE_NUM_SIZE_64:
+ if self.CurrQestVarInfo.IsBitVar:
+ UpdatedOObj = IfrOneOf(EFI_IFR_TYPE_NUM_SIZE_32)
else:
- IsSupported = False
- else:
- #?Question stored in bit fields saved as UINT32 type, so the ShrinkSize same as EFI_IFR_TYPE_NUM_SIZE_32.
- ShrinkSize = 12
+ UpdatedOObj = IfrOneOf(self.CurrQestVarInfo.VarType)
+ UpdatedOObj.QName = OObj.QName
+ UpdatedOObj.VarIdStr = OObj.VarIdStr
+ UpdatedOObj.HasQuestionId = OObj.HasQuestionId
+ UpdatedOObj.GetInfo().Question = OObj.GetInfo().Question
+ UpdatedOObj.GetInfo().Flags = OObj.GetInfo().Flags
+ UpdatedOObj.GetInfo().Data.MinValue = OObj.GetInfo().Data.MinValue
+ UpdatedOObj.GetInfo().Data.MaxValue = OObj.GetInfo().Data.MaxValue
+ UpdatedOObj.GetInfo().Data.Step = OObj.GetInfo().Data.Step
+ OObj = UpdatedOObj
+
+ OObj.SetLineNo(ctx.start.line)
+ if ctx.FLAGS() != None:
+ OObj.SetFlagsStream(self.ExtractOriginalText(ctx.vfrOneofFlagsField()))
- # OObj.ShrinkBinSize(ShrinkSize)
- if IsSupported == False:
- self.__ErrorHandler(VfrReturnCode.VFR_RETURN_INVALID_PARAMETER, Line, 'OneOf question only support UINT8, UINT16, UINT32 and UINT64 data type.')
+ if ctx.vfrSetMinMaxStep() != None:
+ OObj.SetHasMinMax(True)
+ if ctx.vfrSetMinMaxStep().Step() != None:
+ OObj.SetHasStep(True)
ctx.Node.Data = OObj
+ ctx.Node.Buffer = gFormPkg.StructToStream(OObj.GetInfo())
+ self.InsertEndNode(ctx.Node, ctx.stop.line)
+ self.CurrentMinMaxData = None
return ctx.Node
-
# Visit a parse tree produced by VfrSyntaxParser#vfrOneofFlagsField.
- def visitVfrOneofFlagsField(self, ctx:VfrSyntaxParser.VfrOneofFlagsFieldContext):
-
- ctx.LFlags = self.__CurrQestVarInfo.VarType & EFI_IFR_NUMERIC_SIZE
- VarStoreType = gCVfrDataStorage.GetVarStoreType(self.__CurrQestVarInfo.VarStoreId)
+ def visitVfrOneofFlagsField(self, ctx: VfrSyntaxParser.VfrOneofFlagsFieldContext):
+ ctx.LFlags = self.CurrQestVarInfo.VarType & EFI_IFR_NUMERIC_SIZE
+ VarStoreType = gVfrDataStorage.GetVarStoreType(self.CurrQestVarInfo.VarStoreId)
Line = ctx.start.line
IsSetType = False
self.visitChildren(ctx)
for FlagsFieldCtx in ctx.numericFlagsField():
ctx.HFlags |= FlagsFieldCtx.HFlag
- ctx.IsDisplaySpecified = FlagsFieldCtx.IsDisplaySpecified
IsSetType |= FlagsFieldCtx.IsSetType
if FlagsFieldCtx.NumericSizeOne() != None:
- if self.__CurrQestVarInfo.IsBitVar == False:
- ctx.LFlags = (ctx.LFlags & ~EFI_IFR_NUMERIC_SIZE) | EFI_IFR_NUMERIC_SIZE_1
+ if self.CurrQestVarInfo.IsBitVar == False:
+ ctx.LFlags = (ctx.LFlags & ~EFI_IFR_NUMERIC_SIZE) | EFI_IFR_NUMERIC_SIZE_1
if FlagsFieldCtx.NumericSizeTwo() != None:
- if self.__CurrQestVarInfo.IsBitVar == False:
- ctx.LFlags = (ctx.LFlags & ~EFI_IFR_NUMERIC_SIZE) | EFI_IFR_NUMERIC_SIZE_2
+ if self.CurrQestVarInfo.IsBitVar == False:
+ ctx.LFlags = (ctx.LFlags & ~EFI_IFR_NUMERIC_SIZE) | EFI_IFR_NUMERIC_SIZE_2
if FlagsFieldCtx.NumericSizeFour() != None:
- if self.__CurrQestVarInfo.IsBitVar == False:
- ctx.LFlags = (ctx.LFlags & ~EFI_IFR_NUMERIC_SIZE) | EFI_IFR_NUMERIC_SIZE_4
+ if self.CurrQestVarInfo.IsBitVar == False:
+ ctx.LFlags = (ctx.LFlags & ~EFI_IFR_NUMERIC_SIZE) | EFI_IFR_NUMERIC_SIZE_4
if FlagsFieldCtx.NumericSizeEight() != None:
- if self.__CurrQestVarInfo.IsBitVar == False:
- ctx.LFlags = (ctx.LFlags & ~EFI_IFR_NUMERIC_SIZE) | EFI_IFR_NUMERIC_SIZE_8
+ if self.CurrQestVarInfo.IsBitVar == False:
+ ctx.LFlags = (ctx.LFlags & ~EFI_IFR_NUMERIC_SIZE) | EFI_IFR_NUMERIC_SIZE_8
if FlagsFieldCtx.DisPlayIntDec() != None:
- if self.__CurrQestVarInfo.IsBitVar == False:
- ctx.LFlags = (ctx.LFlags & ~EFI_IFR_DISPLAY) | EFI_IFR_DISPLAY_INT_DEC
+ if self.CurrQestVarInfo.IsBitVar == False:
+ ctx.LFlags = (ctx.LFlags & ~EFI_IFR_DISPLAY) | EFI_IFR_DISPLAY_INT_DEC
else:
- ctx.LFlags = (ctx.LFlags & ~EDKII_IFR_DISPLAY_BIT) | EDKII_IFR_DISPLAY_INT_DEC_BIT
+ ctx.LFlags = (
+ ctx.LFlags & ~EDKII_IFR_DISPLAY_BIT
+ ) | EDKII_IFR_DISPLAY_INT_DEC_BIT
- if FlagsFieldCtx.DisPlayUIntHex() != None:
- if self.__CurrQestVarInfo.IsBitVar == False:
- ctx.LFlags = (ctx.LFlags & ~EFI_IFR_DISPLAY) | EFI_IFR_DISPLAY_UINT_DEC
+ if FlagsFieldCtx.DisPlayUIntDec() != None:
+ if self.CurrQestVarInfo.IsBitVar == False:
+ ctx.LFlags = (ctx.LFlags & ~EFI_IFR_DISPLAY) | EFI_IFR_DISPLAY_UINT_DEC
else:
- ctx.LFlags = (ctx.LFlags & ~EDKII_IFR_DISPLAY_BIT) | EDKII_IFR_DISPLAY_UINT_DEC_BIT
+ ctx.LFlags = (
+ ctx.LFlags & ~EDKII_IFR_DISPLAY_BIT
+ ) | EDKII_IFR_DISPLAY_UINT_DEC_BIT
if FlagsFieldCtx.DisPlayUIntHex() != None:
- if self.__CurrQestVarInfo.IsBitVar == False:
- ctx.LFlags = (ctx.LFlags & ~EFI_IFR_DISPLAY) | EFI_IFR_DISPLAY_UINT_HEX
+ if self.CurrQestVarInfo.IsBitVar == False:
+ ctx.LFlags = (ctx.LFlags & ~EFI_IFR_DISPLAY) | EFI_IFR_DISPLAY_UINT_HEX
else:
- ctx.LFlags = (ctx.LFlags & ~EDKII_IFR_DISPLAY_BIT) | EDKII_IFR_DISPLAY_UINT_HEX_BIT
-
- if self.__CurrQestVarInfo.IsBitVar == False:
- if self.__CurrQestVarInfo.VarStoreId != EFI_VARSTORE_ID_INVALID:
- if VarStoreType == EFI_VFR_VARSTORE_TYPE.EFI_VFR_VARSTORE_BUFFER or VarStoreType == EFI_VFR_VARSTORE_TYPE.EFI_VFR_VARSTORE_EFI:
- if self.__CurrQestVarInfo.VarType != (ctx.LFlags & EFI_IFR_NUMERIC_SIZE):
- self.__ErrorHandler(VfrReturnCode.VFR_RETURN_INVALID_PARAMETER, Line, 'Numeric Flag is not same to Numeric VarData type')
+ ctx.LFlags = (
+ ctx.LFlags & ~EDKII_IFR_DISPLAY_BIT
+ ) | EDKII_IFR_DISPLAY_UINT_HEX_BIT
+
+ VarType = self.CurrQestVarInfo.VarType
+ if self.CurrQestVarInfo.IsBitVar == False:
+ if self.CurrQestVarInfo.VarStoreId != EFI_VARSTORE_ID_INVALID:
+ if (
+ VarStoreType == EFI_VFR_VARSTORE_TYPE.EFI_VFR_VARSTORE_BUFFER
+ or VarStoreType == EFI_VFR_VARSTORE_TYPE.EFI_VFR_VARSTORE_EFI
+ ):
+ if self.CurrQestVarInfo.VarType != (ctx.LFlags & EFI_IFR_NUMERIC_SIZE):
+ self.ErrorHandler(
+ VfrReturnCode.VFR_RETURN_INVALID_PARAMETER,
+ Line,
+ "Numeric Flag is not same to Numeric VarData type",
+ )
else:
# update data type for name/value store
- self.__CurrQestVarInfo.VarType = ctx.LFlags & EFI_IFR_NUMERIC_SIZE
- Size, _ = gCVfrVarDataTypeDB.GetDataTypeSizeByDataType(self.__CurrQestVarInfo.VarType)
- self.__CurrQestVarInfo.VarTotalSize = Size
+ self.CurrQestVarInfo.VarType = ctx.LFlags & EFI_IFR_NUMERIC_SIZE
+ Size, _ = gVfrVarDataTypeDB.GetDataTypeSizeByDataType(
+ self.CurrQestVarInfo.VarType
+ )
+ self.CurrQestVarInfo.VarTotalSize = Size
elif IsSetType:
- self.__CurrQestVarInfo.VarType = ctx.LFlags & EFI_IFR_NUMERIC_SIZE
+ self.CurrQestVarInfo.VarType = ctx.LFlags & EFI_IFR_NUMERIC_SIZE
- elif self.__CurrQestVarInfo.VarStoreId != EFI_VARSTORE_ID_INVALID:
+ elif self.CurrQestVarInfo.VarStoreId != EFI_VARSTORE_ID_INVALID:
ctx.LFlags &= EDKII_IFR_DISPLAY_BIT
- ctx.LFlags |= EDKII_IFR_NUMERIC_SIZE_BIT & self.__CurrQestVarInfo.VarTotalSize
+ ctx.LFlags |= EDKII_IFR_NUMERIC_SIZE_BIT & self.CurrQestVarInfo.VarTotalSize
- return ctx.HFlags, ctx.LFlags
+ if VarType != self.CurrQestVarInfo.VarType:
+ ctx.UpdateVarType = True
+ return ctx.HFlags, ctx.LFlags
# Visit a parse tree produced by VfrSyntaxParser#vfrStatementStringType.
- def visitVfrStatementStringType(self, ctx:VfrSyntaxParser.VfrStatementStringTypeContext):
-
+ def visitVfrStatementStringType(self, ctx: VfrSyntaxParser.VfrStatementStringTypeContext):
self.visitChildren(ctx)
if ctx.vfrStatementPassword() != None:
ctx.Node = ctx.vfrStatementPassword().Node
@@ -2600,70 +3141,76 @@ class VfrSyntaxVisitor(ParseTreeVisitor):
ctx.Node = ctx.vfrStatementString().Node
return ctx.Node
- def _GET_CURRQEST_ARRAY_SIZE(self):
-
- Size = 1
- if self.__CurrQestVarInfo.VarType == EFI_IFR_TYPE_NUM_SIZE_8:
- Size = 1
- if self.__CurrQestVarInfo.VarType == EFI_IFR_TYPE_NUM_SIZE_16:
- Size = 2
- if self.__CurrQestVarInfo.VarType == EFI_IFR_TYPE_NUM_SIZE_32:
- Size = 4
- if self.__CurrQestVarInfo.VarType == EFI_IFR_TYPE_NUM_SIZE_64:
- Size = 8
-
- return int(self.__CurrQestVarInfo.VarTotalSize / Size)
-
-
# Visit a parse tree produced by VfrSyntaxParser#vfrStatementString.
- def visitVfrStatementString(self, ctx:VfrSyntaxParser.VfrStatementStringContext):
-
- self.__IsStringOp = True
- SObj = ctx.OpObj
+ def visitVfrStatementString(self, ctx: VfrSyntaxParser.VfrStatementStringContext):
+ self.IsStringOp = True
+ SObj = IfrString()
+ ctx.Node.Data = SObj
SObj.SetLineNo(ctx.start.line)
- self.__CurrentQuestion = SObj.GetQuestion()
+ self.CurrentQuestion = SObj
self.visitChildren(ctx)
if ctx.FLAGS() != None:
HFlags = ctx.vfrStringFlagsField().HFlags
LFlags = ctx.vfrStringFlagsField().LFlags
- self.__ErrorHandler(SObj.SetFlags(HFlags, LFlags), ctx.F.line)
+ self.ErrorHandler(SObj.SetFlags(HFlags, LFlags), ctx.F.line)
+ SObj.SetFlagsStream(self.ExtractOriginalText(ctx.vfrStringFlagsField()))
if ctx.Key() != None:
- Key = self.__TransNum(ctx.Number(0))
- self.__AssignQuestionKey(SObj, Key)
- StringMinSize = self.__TransNum(ctx.Number(1))
- StringMaxSize = self.__TransNum(ctx.Number(2))
+ Key = self.TransNum(ctx.Number(0))
+ self.AssignQuestionKey(SObj, Key)
+ SObj.SetHasKey(True)
+ StringMinSize = self.TransNum(ctx.Number(1))
+ StringMaxSize = self.TransNum(ctx.Number(2))
else:
- StringMinSize = self.__TransNum(ctx.Number(0))
- StringMaxSize = self.__TransNum(ctx.Number(1))
+ StringMinSize = self.TransNum(ctx.Number(0))
+ StringMaxSize = self.TransNum(ctx.Number(1))
- VarArraySize = self._GET_CURRQEST_ARRAY_SIZE()
+ VarArraySize = self.GetCurArraySize()
if StringMinSize > 0xFF:
- self.__ErrorHandler(VfrReturnCode.VFR_RETURN_INVALID_PARAMETER, ctx.Min.line, "String MinSize takes only one byte, which can't be larger than 0xFF.")
+ self.ErrorHandler(
+ VfrReturnCode.VFR_RETURN_INVALID_PARAMETER,
+ ctx.Min.line,
+ "String MinSize takes only one byte, which can't be larger than 0xFF.",
+ )
if VarArraySize != 0 and StringMinSize > VarArraySize:
- self.__ErrorHandler(VfrReturnCode.VFR_RETURN_INVALID_PARAMETER, ctx.Min.line, "String MinSize can't be larger than the max number of elements in string array.")
+ self.ErrorHandler(
+ VfrReturnCode.VFR_RETURN_INVALID_PARAMETER,
+ ctx.Min.line,
+ "String MinSize can't be larger than the max number of elements in string array.",
+ )
SObj.SetMinSize(StringMinSize)
if StringMaxSize > 0xFF:
- self.__ErrorHandler(VfrReturnCode.VFR_RETURN_INVALID_PARAMETER, ctx.Max.line, "String MaxSize takes only one byte, which can't be larger than 0xFF.")
+ self.ErrorHandler(
+ VfrReturnCode.VFR_RETURN_INVALID_PARAMETER,
+ ctx.Max.line,
+ "String MaxSize takes only one byte, which can't be larger than 0xFF.",
+ )
elif VarArraySize != 0 and StringMaxSize > VarArraySize:
- self.__ErrorHandler(VfrReturnCode.VFR_RETURN_INVALID_PARAMETER, ctx.Max.line, "String MaxSize can't be larger than the max number of elements in string array.")
+ self.ErrorHandler(
+ VfrReturnCode.VFR_RETURN_INVALID_PARAMETER,
+ ctx.Max.line,
+ "String MaxSize can't be larger than the max number of elements in string array.",
+ )
elif StringMaxSize < StringMinSize:
- self.__ErrorHandler(VfrReturnCode.VFR_RETURN_INVALID_PARAMETER, ctx.Max.line, "String MaxSize can't be less than String MinSize.")
+ self.ErrorHandler(
+ VfrReturnCode.VFR_RETURN_INVALID_PARAMETER,
+ ctx.Max.line,
+ "String MaxSize can't be less than String MinSize.",
+ )
SObj.SetMaxSize(StringMaxSize)
- ctx.Node.Data = SObj
+ ctx.Node.Buffer = gFormPkg.StructToStream(SObj.GetInfo())
+ self.InsertEndNode(ctx.Node, ctx.stop.line)
- self.__IsStringOp = False
+ self.IsStringOp = False
return ctx.Node
-
# Visit a parse tree produced by VfrSyntaxParser#vfrStringFlagsField.
- def visitVfrStringFlagsField(self, ctx:VfrSyntaxParser.VfrStringFlagsFieldContext):
-
+ def visitVfrStringFlagsField(self, ctx: VfrSyntaxParser.VfrStringFlagsFieldContext):
self.visitChildren(ctx)
for FlagsFieldCtx in ctx.stringFlagsField():
ctx.HFlags |= FlagsFieldCtx.HFlag
@@ -2671,129 +3218,151 @@ class VfrSyntaxVisitor(ParseTreeVisitor):
return ctx.HFlags, ctx.LFlags
-
# Visit a parse tree produced by VfrSyntaxParser#stringFlagsField.
- def visitStringFlagsField(self, ctx:VfrSyntaxParser.StringFlagsFieldContext):
-
+ def visitStringFlagsField(self, ctx: VfrSyntaxParser.StringFlagsFieldContext):
self.visitChildren(ctx)
if ctx.Number() != None:
- if self.__TransNum(ctx.Number()) != 0:
- self.__ErrorHandler(VfrReturnCode.VFR_RETURN_UNSUPPORTED, ctx.start.line)
+ if self.TransNum(ctx.Number()) != 0:
+ self.ErrorHandler(VfrReturnCode.VFR_RETURN_UNSUPPORTED, ctx.start.line)
elif ctx.questionheaderFlagsField() != None:
-
ctx.HFlag = ctx.questionheaderFlagsField().QHFlag
else:
ctx.LFlag = 0x01
- return ctx.HFlag, ctx.LFlag
-
+ return ctx.HFlag, ctx.LFlag
# Visit a parse tree produced by VfrSyntaxParser#vfrStatementPassword.
- def visitVfrStatementPassword(self, ctx:VfrSyntaxParser.VfrStatementPasswordContext):
-
- PObj = ctx.OpObj
+ def visitVfrStatementPassword(self, ctx: VfrSyntaxParser.VfrStatementPasswordContext):
+ PObj = IfrPassword()
+ ctx.Node.Data = PObj
PObj.SetLineNo(ctx.start.line)
- self.__CurrentQuestion = PObj.GetQuestion()
+ self.CurrentQuestion = PObj
self.visitChildren(ctx)
if ctx.Key() != None:
- Key = self.__TransNum(ctx.Number(0))
- self.__AssignQuestionKey(PObj, Key)
- PassWordMinSize = self.__TransNum(ctx.Number(1))
- PasswordMaxSize = self.__TransNum(ctx.Number(2))
+ Key = self.TransNum(ctx.Number(0))
+ self.AssignQuestionKey(PObj, Key)
+ PassWordMinSize = self.TransNum(ctx.Number(1))
+ PasswordMaxSize = self.TransNum(ctx.Number(2))
+ PObj.SetHasKey(True)
else:
- PassWordMinSize = self.__TransNum(ctx.Number(0))
- PasswordMaxSize = self.__TransNum(ctx.Number(1))
+ PassWordMinSize = self.TransNum(ctx.Number(0))
+ PasswordMaxSize = self.TransNum(ctx.Number(1))
if ctx.FLAGS() != None:
HFlags = ctx.vfrPasswordFlagsField().HFlags
- self.__ErrorHandler(PObj.SetFlags(HFlags), ctx.F.line)
+ self.ErrorHandler(PObj.SetFlags(HFlags), ctx.F.line)
+ PObj.SetFlagsStream(self.ExtractOriginalText(ctx.vfrPasswordFlagsField()))
- VarArraySize = self._GET_CURRQEST_ARRAY_SIZE()
+ VarArraySize = self.GetCurArraySize()
if PassWordMinSize > 0xFF:
- self.__ErrorHandler(VfrReturnCode.VFR_RETURN_INVALID_PARAMETER, ctx.Min.line, "String MinSize takes only one byte, which can't be larger than 0xFF.")
+ self.ErrorHandler(
+ VfrReturnCode.VFR_RETURN_INVALID_PARAMETER,
+ ctx.Min.line,
+ "String MinSize takes only one byte, which can't be larger than 0xFF.",
+ )
if VarArraySize != 0 and PassWordMinSize > VarArraySize:
- self.__ErrorHandler(VfrReturnCode.VFR_RETURN_INVALID_PARAMETER, ctx.Min.line, "String MinSize can't be larger than the max number of elements in string array.")
+ self.ErrorHandler(
+ VfrReturnCode.VFR_RETURN_INVALID_PARAMETER,
+ ctx.Min.line,
+ "String MinSize can't be larger than the max number of elements in string array.",
+ )
PObj.SetMinSize(PassWordMinSize)
if PasswordMaxSize > 0xFF:
- self.__ErrorHandler(VfrReturnCode.VFR_RETURN_INVALID_PARAMETER, ctx.Max.line, "String MaxSize takes only one byte, which can't be larger than 0xFF.")
+ self.ErrorHandler(
+ VfrReturnCode.VFR_RETURN_INVALID_PARAMETER,
+ ctx.Max.line,
+ "String MaxSize takes only one byte, which can't be larger than 0xFF.",
+ )
elif VarArraySize != 0 and PasswordMaxSize > VarArraySize:
- self.__ErrorHandler(VfrReturnCode.VFR_RETURN_INVALID_PARAMETER, ctx.Max.line, "String MaxSize can't be larger than the max number of elements in string array.")
+ self.ErrorHandler(
+ VfrReturnCode.VFR_RETURN_INVALID_PARAMETER,
+ ctx.Max.line,
+ "String MaxSize can't be larger than the max number of elements in string array.",
+ )
elif PasswordMaxSize < PassWordMinSize:
- self.__ErrorHandler(VfrReturnCode.VFR_RETURN_INVALID_PARAMETER, ctx.Max.line, "String MaxSize can't be less than String MinSize.")
+ self.ErrorHandler(
+ VfrReturnCode.VFR_RETURN_INVALID_PARAMETER,
+ ctx.Max.line,
+ "String MaxSize can't be less than String MinSize.",
+ )
PObj.SetMaxSize(PasswordMaxSize)
- ctx.Node.Data = PObj
+ ctx.Node.Buffer = gFormPkg.StructToStream(PObj.GetInfo())
+ self.InsertEndNode(ctx.Node, ctx.stop.line)
return ctx.Node
-
# Visit a parse tree produced by VfrSyntaxParser#vfrPasswordFlagsField.
- def visitVfrPasswordFlagsField(self, ctx:VfrSyntaxParser.VfrPasswordFlagsFieldContext):
-
+ def visitVfrPasswordFlagsField(self, ctx: VfrSyntaxParser.VfrPasswordFlagsFieldContext):
self.visitChildren(ctx)
for FlagsFieldCtx in ctx.passwordFlagsField():
ctx.HFlags |= FlagsFieldCtx.HFlag
return ctx.HFlags
-
# Visit a parse tree produced by VfrSyntaxParser#passwordFlagsField.
- def visitPasswordFlagsField(self, ctx:VfrSyntaxParser.PasswordFlagsFieldContext):
-
+ def visitPasswordFlagsField(self, ctx: VfrSyntaxParser.PasswordFlagsFieldContext):
self.visitChildren(ctx)
if ctx.Number() != None:
- if self.__TransNum(ctx.Number()) != 0:
- self.__ErrorHandler(VfrReturnCode.VFR_RETURN_UNSUPPORTED, ctx.start.line)
+ if self.TransNum(ctx.Number()) != 0:
+ self.ErrorHandler(VfrReturnCode.VFR_RETURN_UNSUPPORTED, ctx.start.line)
else:
ctx.HFlag = ctx.questionheaderFlagsField().QHFlag
return ctx.HFlag
-
# Visit a parse tree produced by VfrSyntaxParser#vfrStatementOrderedList.
- def visitVfrStatementOrderedList(self, ctx:VfrSyntaxParser.VfrStatementOrderedListContext):
-
- OLObj = ctx.OpObj
+ def visitVfrStatementOrderedList(self, ctx: VfrSyntaxParser.VfrStatementOrderedListContext):
+ OLObj = IfrOrderedList()
+ ctx.Node.Data = OLObj
OLObj.SetLineNo(ctx.start.line)
- self.__CurrentQuestion = OLObj.GetQuestion()
- self.__IsOrderedList = True
+ self.CurrentQuestion = OLObj
+ self.IsOrderedList = True
self.visitChildren(ctx)
- VarArraySize = self._GET_CURRQEST_ARRAY_SIZE()
+ VarArraySize = self.GetCurArraySize()
if VarArraySize > 0xFF:
OLObj.SetMaxContainers(0xFF)
else:
OLObj.SetMaxContainers(VarArraySize)
if ctx.MaxContainers() != None:
- MaxContainers = self.__TransNum(ctx.Number())
+ MaxContainers = self.TransNum(ctx.Number())
if MaxContainers > 0xFF:
- self.__ErrorHandler(VfrReturnCode.VFR_RETURN_INVALID_PARAMETER, ctx.M.line, "OrderedList MaxContainers takes only one byte, which can't be larger than 0xFF.")
+ self.ErrorHandler(
+ VfrReturnCode.VFR_RETURN_INVALID_PARAMETER,
+ ctx.M.line,
+ "OrderedList MaxContainers takes only one byte, which can't be larger than 0xFF.",
+ )
elif VarArraySize != 0 and MaxContainers > VarArraySize:
- self.__ErrorHandler(VfrReturnCode.VFR_RETURN_INVALID_PARAMETER, ctx.M.line,"OrderedList MaxContainers can't be larger than the max number of elements in array.")
+ self.ErrorHandler(
+ VfrReturnCode.VFR_RETURN_INVALID_PARAMETER,
+ ctx.M.line,
+ "OrderedList MaxContainers can't be larger than the max number of elements in array.",
+ )
OLObj.SetMaxContainers(MaxContainers)
+ OLObj.SetHasMaxContainers(True)
if ctx.FLAGS() != None:
HFlags = ctx.vfrOrderedListFlags().HFlags
LFlags = ctx.vfrOrderedListFlags().LFlags
- self.__ErrorHandler(OLObj.SetFlags(HFlags, LFlags), ctx.F.line)
+ self.ErrorHandler(OLObj.SetFlags(HFlags, LFlags), ctx.F.line)
+ OLObj.SetFlagsStream(self.ExtractOriginalText(ctx.vfrOrderedListFlags()))
- ctx.Node.Data = OLObj
-
- self.__IsOrderedList = False
+ ctx.Node.Buffer = gFormPkg.StructToStream(OLObj.GetInfo())
+ self.InsertEndNode(ctx.Node, ctx.stop.line)
+ self.IsOrderedList = False
return ctx.Node
-
# Visit a parse tree produced by VfrSyntaxParser#vfrOrderedListFlags.
- def visitVfrOrderedListFlags(self, ctx:VfrSyntaxParser.VfrOrderedListFlagsContext):
-
+ def visitVfrOrderedListFlags(self, ctx: VfrSyntaxParser.VfrOrderedListFlagsContext):
self.visitChildren(ctx)
for FlagsFieldCtx in ctx.orderedlistFlagsField():
@@ -2802,15 +3371,13 @@ class VfrSyntaxVisitor(ParseTreeVisitor):
return ctx.HFlags, ctx.LFlags
-
# Visit a parse tree produced by VfrSyntaxParser#orderedlistFlagsField.
- def visitOrderedlistFlagsField(self, ctx:VfrSyntaxParser.OrderedlistFlagsFieldContext):
-
+ def visitOrderedlistFlagsField(self, ctx: VfrSyntaxParser.OrderedlistFlagsFieldContext):
self.visitChildren(ctx)
if ctx.Number() != None:
- if self.__TransNum(ctx.Number()) != 0:
- self.__ErrorHandler(VfrReturnCode.VFR_RETURN_UNSUPPORTED, ctx.start.line)
+ if self.TransNum(ctx.Number()) != 0:
+ self.ErrorHandler(VfrReturnCode.VFR_RETURN_UNSUPPORTED, ctx.start.line)
elif ctx.questionheaderFlagsField() != None:
ctx.HFlag = ctx.questionheaderFlagsField().QHFlag
elif ctx.UniQueFlag() != None:
@@ -2818,82 +3385,118 @@ class VfrSyntaxVisitor(ParseTreeVisitor):
elif ctx.NoEmptyFlag() != None:
ctx.LFlag = 0x02
- return ctx.HFlag, ctx.LFlag
+ return ctx.HFlag, ctx.LFlag
# Visit a parse tree produced by VfrSyntaxParser#vfrStatementDate.
- def visitVfrStatementDate(self, ctx:VfrSyntaxParser.VfrStatementDateContext):
-
- DObj = ctx.OpObj
+ def visitVfrStatementDate(self, ctx: VfrSyntaxParser.VfrStatementDateContext):
+ DObj = IfrDate()
+ ctx.Node.Data = DObj
Line = ctx.start.line
DObj.SetLineNo(Line)
-
+ self.Value = ctx.Val
self.visitChildren(ctx)
if ctx.vfrQuestionHeader() != None:
-
- if self.__CurrQestVarInfo.VarType == EFI_IFR_TYPE_OTHER:
- self.__CurrQestVarInfo.VarType == EFI_IFR_TYPE_DATE
+ if self.CurrQestVarInfo.VarType == EFI_IFR_TYPE_OTHER:
+ self.CurrQestVarInfo.VarType == EFI_IFR_TYPE_DATE
if ctx.FLAGS() != None:
- self.__ErrorHandler(DObj.SetFlags(EFI_IFR_QUESTION_FLAG_DEFAULT, ctx.vfrDateFlags().LFlags), ctx.F1.line)
+ DObj.SetFlagsStream(self.ExtractOriginalText(ctx.vfrDateFlags()))
+ self.ErrorHandler(
+ DObj.SetFlags(EFI_IFR_QUESTION_FLAG_DEFAULT, ctx.vfrDateFlags().LFlags),
+ ctx.F1.line,
+ )
else:
+ Year = self.TransId(ctx.StringIdentifier(0))
+ Year += "."
+ Year += self.TransId(ctx.StringIdentifier(1))
- Year = self.__TransId(ctx.StringIdentifier(0))
- Year += '.'
- Year += self.__TransId(ctx.StringIdentifier(1))
+ DObj.Year = Year
- Month = self.__TransId(ctx.StringIdentifier(2))
- Month += '.'
- Month += self.__TransId(ctx.StringIdentifier(3))
+ Month = self.TransId(ctx.StringIdentifier(2))
+ Month += "."
+ Month += self.TransId(ctx.StringIdentifier(3))
- Day = self.__TransId(ctx.StringIdentifier(4))
- Day += '.'
- Day += self.__TransId(ctx.StringIdentifier(5))
+ DObj.Month = Month
- if ctx.FLAGS() != None:
- self.__ErrorHandler(DObj.SetFlags(EFI_IFR_QUESTION_FLAG_DEFAULT, ctx.vfrDateFlags().LFlags), ctx.F2.line)
+ Day = self.TransId(ctx.StringIdentifier(4))
+ Day += "."
+ Day += self.TransId(ctx.StringIdentifier(5))
- QId, _ = self.__CVfrQuestionDB.RegisterOldDateQuestion(Year, Month, Day, EFI_QUESTION_ID_INVALID)
+ DObj.Day = Day
+
+ if ctx.FLAGS() != None:
+ DObj.SetFlagsStream(self.ExtractOriginalText(ctx.vfrDateFlags()))
+ self.ErrorHandler(
+ DObj.SetFlags(EFI_IFR_QUESTION_FLAG_DEFAULT, ctx.vfrDateFlags().LFlags),
+ ctx.F2.line,
+ )
+
+ QId, _ = self.VfrQuestionDB.RegisterOldDateQuestion(
+ Year, Month, Day, EFI_QUESTION_ID_INVALID, gFormPkg
+ )
DObj.SetQuestionId(QId)
DObj.SetFlags(EFI_IFR_QUESTION_FLAG_DEFAULT, QF_DATE_STORAGE_TIME)
- DObj.SetPrompt(self.__TransNum(ctx.Number(0)))
- DObj.SetHelp(self.__TransNum(ctx.Number(1)))
+ DObj.SetPrompt(self.TransNum(ctx.Number(0)))
+ DObj.SetHelp(self.TransNum(ctx.Number(1)))
- Size = EFI_IFR_DEFAULT.Value.offset + sizeof (EFI_HII_DATE)
- DefaultObj = CIfrDefault(Size, EFI_HII_DEFAULT_CLASS_STANDARD, EFI_IFR_TYPE_DATE, ctx.Val)
+ DefaultObj = IfrDefault(
+ EFI_IFR_TYPE_DATE, [ctx.Val], EFI_HII_DEFAULT_CLASS_STANDARD, EFI_IFR_TYPE_DATE
+ )
DefaultObj.SetLineNo(Line)
+ DefaultNode = IfrTreeNode(
+ EFI_IFR_DEFAULT_OP, DefaultObj, gFormPkg.StructToStream(DefaultObj.GetInfo())
+ )
+ ctx.Node.insertChild(DefaultNode)
- ctx.Node.Data = DObj
+ ctx.Node.Buffer = gFormPkg.StructToStream(DObj.GetInfo())
for Ctx in ctx.vfrStatementInconsistentIf():
- self.__InsertChild(ctx.Node, Ctx)
+ self.InsertChild(ctx.Node, Ctx)
+ self.InsertEndNode(ctx.Node, ctx.stop.line)
return ctx.Node
# Visit a parse tree produced by VfrSyntaxParser#minMaxDateStepDefault.
- def visitMinMaxDateStepDefault(self, ctx:VfrSyntaxParser.MinMaxDateStepDefaultContext):
-
+ def visitMinMaxDateStepDefault(self, ctx: VfrSyntaxParser.MinMaxDateStepDefaultContext):
+ Minimum = self.TransNum(ctx.Number(0))
+ ctx.Node.Data.Min = Minimum
+ Maximum = self.TransNum(ctx.Number(1))
+ ctx.Node.Data.Max = Maximum
+ if ctx.Step() != None:
+ ctx.Node.Data.Step = self.TransNum(ctx.Number(2))
if ctx.Default() != None:
- Minimum = self.__TransNum(ctx.Number(0))
- Maximum = self.__TransNum(ctx.Number(1))
if ctx.KeyValue == 0:
- ctx.Date.Year = self.__TransNum(ctx.N.text)
+ ctx.Date.Year = self.TransNum(ctx.N.text)
+ ctx.Node.Data.D_Year = ctx.Date.Year
if ctx.Date.Year < Minimum or ctx.Date.Year > Maximum:
- self.__ErrorHandler(VfrReturnCode.VFR_RETURN_INVALID_PARAMETER, ctx.N.line, "Year default value must be between Min year and Max year.")
+ self.ErrorHandler(
+ VfrReturnCode.VFR_RETURN_INVALID_PARAMETER,
+ ctx.N.line,
+ "Year default value must be between Min year and Max year.",
+ )
if ctx.KeyValue == 1:
- ctx.Date.Month = self.__TransNum(ctx.N.text)
+ ctx.Date.Month = self.TransNum(ctx.N.text)
+ ctx.Node.Data.D_Month = ctx.Date.Month
if ctx.Date.Month < 1 or ctx.Date.Month > 12:
- self.__ErrorHandler(VfrReturnCode.VFR_RETURN_INVALID_PARAMETER, ctx.D.line, "Month default value must be between Min 1 and Max 12.")
+ self.ErrorHandler(
+ VfrReturnCode.VFR_RETURN_INVALID_PARAMETER,
+ ctx.D.line,
+ "Month default value must be between Min 1 and Max 12.",
+ )
if ctx.KeyValue == 2:
- ctx.Date.Day = self.__TransNum(ctx.N.text)
+ ctx.Date.Day = self.TransNum(ctx.N.text)
+ ctx.Node.Data.D_Day = ctx.Date.Day
if ctx.Date.Day < 1 or ctx.Date.Day > 31:
- self.__ErrorHandler(VfrReturnCode.VFR_RETURN_INVALID_PARAMETER, ctx.D.line, "Day default value must be between Min 1 and Max 31.")
+ self.ErrorHandler(
+ VfrReturnCode.VFR_RETURN_INVALID_PARAMETER,
+ ctx.D.line,
+ "Day default value must be between Min 1 and Max 31.",
+ )
return self.visitChildren(ctx)
-
# Visit a parse tree produced by VfrSyntaxParser#vfrDateFlags.
- def visitVfrDateFlags(self, ctx:VfrSyntaxParser.VfrDateFlagsContext):
-
+ def visitVfrDateFlags(self, ctx: VfrSyntaxParser.VfrDateFlagsContext):
self.visitChildren(ctx)
for FlagsFieldCtx in ctx.dateFlagsField():
@@ -2901,14 +3504,12 @@ class VfrSyntaxVisitor(ParseTreeVisitor):
return ctx.LFlags
-
# Visit a parse tree produced by VfrSyntaxParser#dateFlagsField.
- def visitDateFlagsField(self, ctx:VfrSyntaxParser.DateFlagsFieldContext):
-
+ def visitDateFlagsField(self, ctx: VfrSyntaxParser.DateFlagsFieldContext):
self.visitChildren(ctx)
if ctx.Number() != None:
- ctx.LFlag = self.__TransNum(ctx.Number())
+ ctx.LFlag = self.TransNum(ctx.Number())
if ctx.YearSupppressFlag() != None:
ctx.LFlag = 0x01
if ctx.MonthSuppressFlag() != None:
@@ -2924,80 +3525,112 @@ class VfrSyntaxVisitor(ParseTreeVisitor):
return ctx.LFlag
-
# Visit a parse tree produced by VfrSyntaxParser#vfrStatementTime.
- def visitVfrStatementTime(self, ctx:VfrSyntaxParser.VfrStatementTimeContext):
-
- TObj = ctx.OpObj
+ def visitVfrStatementTime(self, ctx: VfrSyntaxParser.VfrStatementTimeContext):
+ TObj = IfrTime()
+ ctx.Node.Data = TObj
Line = ctx.start.line
TObj.SetLineNo(Line)
-
+ self.Value = ctx.Val
self.visitChildren(ctx)
if ctx.vfrQuestionHeader() != None:
-
- if self.__CurrQestVarInfo.VarType == EFI_IFR_TYPE_OTHER:
- self.__CurrQestVarInfo.VarType == EFI_IFR_TYPE_TIME
+ if self.CurrQestVarInfo.VarType == EFI_IFR_TYPE_OTHER:
+ self.CurrQestVarInfo.VarType == EFI_IFR_TYPE_TIME
if ctx.FLAGS() != None:
- self.__ErrorHandler(TObj.SetFlags(EFI_IFR_QUESTION_FLAG_DEFAULT, ctx.vfrTimeFlags().LFlags), ctx.F1.line)
+ TObj.SetFlagsStream(self.ExtractOriginalText(ctx.vfrTimeFlags()))
+ self.ErrorHandler(
+ TObj.SetFlags(EFI_IFR_QUESTION_FLAG_DEFAULT, ctx.vfrTimeFlags().LFlags),
+ ctx.F1.line,
+ )
else:
+ Hour = self.TransId(ctx.StringIdentifier(0))
+ Hour += "."
+ Hour += self.TransId(ctx.StringIdentifier(1))
- Hour = self.__TransId(ctx.StringIdentifier(0))
- Hour += '.'
- Hour += self.__TransId(ctx.StringIdentifier(1))
+ TObj.SetHour(Hour)
- Minute = self.__TransId(ctx.StringIdentifier(2))
- Minute += '.'
- Minute += self.__TransId(ctx.StringIdentifier(3))
+ Minute = self.TransId(ctx.StringIdentifier(2))
+ Minute += "."
+ Minute += self.TransId(ctx.StringIdentifier(3))
- Second = self.__TransId(ctx.StringIdentifier(4))
- Second += '.'
- Second += self.__TransId(ctx.StringIdentifier(5))
+ TObj.SetMinute(Minute)
- if ctx.FLAGS() != None:
- self.__ErrorHandler(TObj.SetFlags(EFI_IFR_QUESTION_FLAG_DEFAULT, ctx.vfrTimeFlags().LFlags), ctx.F2.line)
+ Second = self.TransId(ctx.StringIdentifier(4))
+ Second += "."
+ Second += self.TransId(ctx.StringIdentifier(5))
- QId, _ = self.__CVfrQuestionDB.RegisterOldTimeQuestion(Hour, Minute, Second, EFI_QUESTION_ID_INVALID)
+ TObj.SetSecond(Second)
+
+ if ctx.FLAGS() != None:
+ TObj.SetFlagsStream(self.ExtractOriginalText(ctx.vfrTimeFlags()))
+ self.ErrorHandler(
+ TObj.SetFlags(EFI_IFR_QUESTION_FLAG_DEFAULT, ctx.vfrTimeFlags().LFlags),
+ ctx.F2.line,
+ )
+
+ QId, _ = self.VfrQuestionDB.RegisterOldTimeQuestion(
+ Hour, Minute, Second, EFI_QUESTION_ID_INVALID, gFormPkg
+ )
TObj.SetQuestionId(QId)
TObj.SetFlags(EFI_IFR_QUESTION_FLAG_DEFAULT, QF_TIME_STORAGE_TIME)
- TObj.SetPrompt(self.__TransNum(ctx.Number(0)))
- TObj.SetHelp(self.__TransNum(ctx.Number(1)))
+ TObj.SetPrompt(self.TransNum(ctx.Number(0)))
+ TObj.SetHelp(self.TransNum(ctx.Number(1)))
- Size = EFI_IFR_DEFAULT.Value.offset + sizeof (EFI_HII_TIME)
- DefaultObj = CIfrDefault(Size, EFI_HII_DEFAULT_CLASS_STANDARD, EFI_IFR_TYPE_TIME, ctx.Val)
+ DefaultObj = IfrDefault(
+ EFI_IFR_TYPE_TIME, [ctx.Val], EFI_HII_DEFAULT_CLASS_STANDARD, EFI_IFR_TYPE_TIME
+ )
DefaultObj.SetLineNo(Line)
+ DefaultNode = IfrTreeNode(
+ EFI_IFR_DEFAULT_OP, DefaultObj, gFormPkg.StructToStream(DefaultObj.GetInfo())
+ )
+ ctx.Node.insertChild(DefaultNode)
- ctx.Node.Data = TObj
+ ctx.Node.Buffer = gFormPkg.StructToStream(TObj.GetInfo())
for Ctx in ctx.vfrStatementInconsistentIf():
- self.__InsertChild(ctx.Node, Ctx)
+ self.InsertChild(ctx.Node, Ctx)
+ self.InsertEndNode(ctx.Node, ctx.stop.line)
return ctx.Node
-
# Visit a parse tree produced by VfrSyntaxParser#minMaxTimeStepDefault.
- def visitMinMaxTimeStepDefault(self, ctx:VfrSyntaxParser.MinMaxTimeStepDefaultContext):
-
+ def visitMinMaxTimeStepDefault(self, ctx: VfrSyntaxParser.MinMaxTimeStepDefaultContext):
+ ctx.Node.Data.Min = self.TransNum(ctx.Number(0))
+ ctx.Node.Data.Max = self.TransNum(ctx.Number(1))
+ if ctx.Step() != None:
+ ctx.Node.Data.Step = self.TransNum(ctx.Number(2))
if ctx.Default() != None:
- Minimum = self.__TransNum(ctx.Number(0))
- Maximum = self.__TransNum(ctx.Number(1))
if ctx.KeyValue == 0:
- ctx.Time.Hour = self.__TransNum(ctx.Number(len(ctx.Number())-1))
+ ctx.Time.Hour = self.TransNum(ctx.Number(len(ctx.Number()) - 1))
+ ctx.Node.Data.D_Hour = ctx.Time.Hour
if ctx.Time.Hour > 23:
- self.__ErrorHandler(VfrReturnCode.VFR_RETURN_INVALID_PARAMETER, ctx.N.line, "Hour default value must be between 0 and 23.")
+ self.ErrorHandler(
+ VfrReturnCode.VFR_RETURN_INVALID_PARAMETER,
+ ctx.N.line,
+ "Hour default value must be between 0 and 23.",
+ )
if ctx.KeyValue == 1:
- ctx.Time.Minute = self.__TransNum(ctx.Number(len(ctx.Number())-1))
+ ctx.Time.Minute = self.TransNum(ctx.Number(len(ctx.Number()) - 1))
+ ctx.Node.Data.D_Minute = ctx.Time.Minute
if ctx.Time.Minute > 59:
- self.__ErrorHandler(VfrReturnCode.VFR_RETURN_INVALID_PARAMETER, ctx.N.line, "Minute default value must be between 0 and 59.")
+ self.ErrorHandler(
+ VfrReturnCode.VFR_RETURN_INVALID_PARAMETER,
+ ctx.N.line,
+ "Minute default value must be between 0 and 59.",
+ )
if ctx.KeyValue == 2:
- ctx.Time.Second = self.__TransNum(ctx.Number(len(ctx.Number())-1))
+ ctx.Time.Second = self.TransNum(ctx.Number(len(ctx.Number()) - 1))
+ ctx.Node.Data.D_Second = ctx.Time.Second
if ctx.Time.Second > 59:
- self.__ErrorHandler(VfrReturnCode.VFR_RETURN_INVALID_PARAMETER, ctx.N.line, "Second default value must be between 0 and 59.")
+ self.ErrorHandler(
+ VfrReturnCode.VFR_RETURN_INVALID_PARAMETER,
+ ctx.N.line,
+ "Second default value must be between 0 and 59.",
+ )
return self.visitChildren(ctx)
-
# Visit a parse tree produced by VfrSyntaxParser#vfrTimeFlags.
- def visitVfrTimeFlags(self, ctx:VfrSyntaxParser.VfrTimeFlagsContext):
-
+ def visitVfrTimeFlags(self, ctx: VfrSyntaxParser.VfrTimeFlagsContext):
self.visitChildren(ctx)
for FlagsFieldCtx in ctx.timeFlagsField():
@@ -3006,12 +3639,11 @@ class VfrSyntaxVisitor(ParseTreeVisitor):
return ctx.LFlags
# Visit a parse tree produced by VfrSyntaxParser#timeFlagsField.
- def visitTimeFlagsField(self, ctx:VfrSyntaxParser.TimeFlagsFieldContext):
-
+ def visitTimeFlagsField(self, ctx: VfrSyntaxParser.TimeFlagsFieldContext):
self.visitChildren(ctx)
if ctx.Number() != None:
- ctx.LFlag = self.__TransNum(ctx.Number())
+ ctx.LFlag = self.TransNum(ctx.Number())
if ctx.HourSupppressFlag() != None:
ctx.LFlag = 0x01
if ctx.MinuteSuppressFlag() != None:
@@ -3028,45 +3660,41 @@ class VfrSyntaxVisitor(ParseTreeVisitor):
return ctx.LFlag
# Visit a parse tree produced by VfrSyntaxParser#vfrStatementConditional.
- def visitVfrStatementConditional(self, ctx:VfrSyntaxParser.VfrStatementConditionalContext):
-
+ def visitVfrStatementConditional(self, ctx: VfrSyntaxParser.VfrStatementConditionalContext):
self.visitChildren(ctx)
- if ctx.vfrStatementDisableIfStat()!= None:
+ if ctx.vfrStatementDisableIfStat() != None:
ctx.Node = ctx.vfrStatementDisableIfStat().Node
- if ctx.vfrStatementSuppressIfStat()!= None:
+ if ctx.vfrStatementSuppressIfStat() != None:
ctx.Node = ctx.vfrStatementSuppressIfStat().Node
- if ctx.vfrStatementGrayOutIfStat()!= None:
+ if ctx.vfrStatementGrayOutIfStat() != None:
ctx.Node = ctx.vfrStatementGrayOutIfStat().Node
- if ctx.vfrStatementInconsistentIfStat()!= None:
+ if ctx.vfrStatementInconsistentIfStat() != None:
ctx.Node = ctx.vfrStatementInconsistentIfStat().Node
return ctx.Node
-
# Visit a parse tree produced by VfrSyntaxParser#vfrStatementConditionalNew.
- def visitVfrStatementConditionalNew(self, ctx:VfrSyntaxParser.VfrStatementConditionalNewContext):
+ def visitVfrStatementConditionalNew(
+ self, ctx: VfrSyntaxParser.VfrStatementConditionalNewContext
+ ):
return self.visitChildren(ctx)
-
# Visit a parse tree produced by VfrSyntaxParser#vfrStatementSuppressIfStat.
- def visitVfrStatementSuppressIfStat(self, ctx:VfrSyntaxParser.VfrStatementSuppressIfStatContext):
-
+ def visitVfrStatementSuppressIfStat(
+ self, ctx: VfrSyntaxParser.VfrStatementSuppressIfStatContext
+ ):
self.visitChildren(ctx)
ctx.Node = ctx.vfrStatementSuppressIfStatNew().Node
return ctx.Node
-
# Visit a parse tree produced by VfrSyntaxParser#vfrStatementGrayOutIfStat.
- def visitVfrStatementGrayOutIfStat(self, ctx:VfrSyntaxParser.VfrStatementGrayOutIfStatContext):
-
+ def visitVfrStatementGrayOutIfStat(self, ctx: VfrSyntaxParser.VfrStatementGrayOutIfStatContext):
self.visitChildren(ctx)
ctx.Node = ctx.vfrStatementGrayOutIfStatNew().Node
return ctx.Node
-
# Visit a parse tree produced by VfrSyntaxParser#vfrStatementStatList.
- def visitVfrStatementStatList(self, ctx:VfrSyntaxParser.VfrStatementStatListContext):
-
+ def visitVfrStatementStatList(self, ctx: VfrSyntaxParser.VfrStatementStatListContext):
self.visitChildren(ctx)
if ctx.vfrStatementStat() != None:
ctx.Node = ctx.vfrStatementStat().Node
@@ -3082,775 +3710,961 @@ class VfrSyntaxVisitor(ParseTreeVisitor):
ctx.Node = ctx.vfrStatementInvalid().Node
return ctx.Node
-
# Visit a parse tree produced by VfrSyntaxParser#vfrStatementStatListOld.
- def visitVfrStatementStatListOld(self, ctx:VfrSyntaxParser.VfrStatementStatListOldContext):
+ def visitVfrStatementStatListOld(self, ctx: VfrSyntaxParser.VfrStatementStatListOldContext):
return self.visitChildren(ctx)
# Visit a parse tree produced by VfrSyntaxParser#vfrStatementDisableIfStat.
- def visitVfrStatementDisableIfStat(self, ctx:VfrSyntaxParser.VfrStatementDisableIfStatContext):
-
- DIObj = CIfrDisableIf()
+ def visitVfrStatementDisableIfStat(self, ctx: VfrSyntaxParser.VfrStatementDisableIfStatContext):
+ DIObj = IfrDisableIf()
DIObj.SetLineNo(ctx.start.line)
ctx.Node.Data = DIObj
- ctx.Node.Condition = 'disableif' + ' ' + self.__ExtractOriginalText(ctx.vfrStatementExpression())
+ ctx.Node.Buffer = gFormPkg.StructToStream(DIObj.GetInfo())
+ ctx.Node.Condition = (
+ "disableif" + " " + self.ExtractOriginalText(ctx.vfrStatementExpression())
+ )
+ ctx.Node.Expression = self.ExtractOriginalText(ctx.vfrStatementExpression())
self.visitChildren(ctx)
for Ctx in ctx.vfrStatementStatList():
- self.__InsertChild(ctx.Node, Ctx)
- return ctx.Node
+ self.InsertChild(ctx.Node, Ctx)
+ self.InsertEndNode(ctx.Node, ctx.stop.line)
+ return ctx.Node
# Visit a parse tree produced by VfrSyntaxParser#vfrStatementSuppressIfStatNew.
- def visitVfrStatementSuppressIfStatNew(self, ctx:VfrSyntaxParser.VfrStatementSuppressIfStatNewContext):
-
- SIObj = CIfrSuppressIf()
+ def visitVfrStatementSuppressIfStatNew(
+ self, ctx: VfrSyntaxParser.VfrStatementSuppressIfStatNewContext
+ ):
+ SIObj = IfrSuppressIf()
SIObj.SetLineNo(ctx.start.line)
ctx.Node.Data = SIObj
- ctx.Node.Condition = 'suppressif' + ' ' + self.__ExtractOriginalText(ctx.vfrStatementExpression())
+ ctx.Node.Buffer = gFormPkg.StructToStream(SIObj.GetInfo())
+ ctx.Node.Condition = (
+ "suppressif" + " " + self.ExtractOriginalText(ctx.vfrStatementExpression())
+ )
+ ctx.Node.Expression = self.ExtractOriginalText(ctx.vfrStatementExpression())
self.visitChildren(ctx)
for Ctx in ctx.vfrStatementStatList():
- self.__InsertChild(ctx.Node, Ctx)
+ self.InsertChild(ctx.Node, Ctx)
+ self.InsertEndNode(ctx.Node, ctx.stop.line)
return ctx.Node
-
# Visit a parse tree produced by VfrSyntaxParser#vfrStatementGrayOutIfStatNew.
- def visitVfrStatementGrayOutIfStatNew(self, ctx:VfrSyntaxParser.VfrStatementGrayOutIfStatNewContext):
-
- GOIObj = CIfrGrayOutIf()
+ def visitVfrStatementGrayOutIfStatNew(
+ self, ctx: VfrSyntaxParser.VfrStatementGrayOutIfStatNewContext
+ ):
+ GOIObj = IfrGrayOutIf()
GOIObj.SetLineNo(ctx.start.line)
ctx.Node.Data = GOIObj
- ctx.Node.Condition = 'grayoutif' + ' ' + self.__ExtractOriginalText(ctx.vfrStatementExpression())
+ ctx.Node.Buffer = gFormPkg.StructToStream(GOIObj.GetInfo())
+ ctx.Node.Condition = (
+ "grayoutif" + " " + self.ExtractOriginalText(ctx.vfrStatementExpression())
+ )
+ ctx.Node.Expression = self.ExtractOriginalText(ctx.vfrStatementExpression())
self.visitChildren(ctx)
for Ctx in ctx.vfrStatementStatList():
- self.__InsertChild(ctx.Node, Ctx)
+ self.InsertChild(ctx.Node, Ctx)
+ self.InsertEndNode(ctx.Node, ctx.stop.line)
return ctx.Node
-
-
# Visit a parse tree produced by VfrSyntaxParser#vfrStatementInconsistentIfStat.
- def visitVfrStatementInconsistentIfStat(self, ctx:VfrSyntaxParser.VfrStatementInconsistentIfStatContext):
-
- IIObj = CIfrInconsistentIf()
- self.__ErrorHandler(VfrReturnCode.VFR_RETURN_UNSUPPORTED, ctx.start.line)
+ def visitVfrStatementInconsistentIfStat(
+ self, ctx: VfrSyntaxParser.VfrStatementInconsistentIfStatContext
+ ):
+ IIObj = IfrInconsistentIf()
+ self.ErrorHandler(VfrReturnCode.VFR_RETURN_UNSUPPORTED, ctx.start.line)
IIObj.SetLineNo(ctx.start.line)
self.visitChildren(ctx)
- IIObj.SetError(self.__TransNum(ctx.Number()))
+ IIObj.SetError(self.TransNum(ctx.Number()))
ctx.Node.Data = IIObj
- ctx.Node.Condition = 'inconsistentif' + ' ' + self.__ExtractOriginalText(ctx.vfrStatementExpression())
+ ctx.Node.Buffer = gFormPkg.StructToStream(IIObj.GetInfo())
+ ctx.Node.Condition = (
+ "inconsistentif" + " " + self.ExtractOriginalText(ctx.vfrStatementExpression())
+ )
+ ctx.Node.Expression = self.ExtractOriginalText(ctx.vfrStatementExpression())
+ self.InsertEndNode(ctx.Node, ctx.stop.line)
return ctx.Node
-
# Visit a parse tree produced by VfrSyntaxParser#vfrStatementInvalid.
- def visitVfrStatementInvalid(self, ctx:VfrSyntaxParser.VfrStatementInvalidContext):
+ def visitVfrStatementInvalid(self, ctx: VfrSyntaxParser.VfrStatementInvalidContext):
return self.visitChildren(ctx)
-
# Visit a parse tree produced by VfrSyntaxParser#vfrStatementInvalidHidden.
- def visitVfrStatementInvalidHidden(self, ctx:VfrSyntaxParser.VfrStatementInvalidHiddenContext):
+ def visitVfrStatementInvalidHidden(self, ctx: VfrSyntaxParser.VfrStatementInvalidHiddenContext):
return self.visitChildren(ctx)
-
# Visit a parse tree produced by VfrSyntaxParser#vfrStatementInvalidInventory.
- def visitVfrStatementInvalidInventory(self, ctx:VfrSyntaxParser.VfrStatementInvalidInventoryContext):
+ def visitVfrStatementInvalidInventory(
+ self, ctx: VfrSyntaxParser.VfrStatementInvalidInventoryContext
+ ):
return self.visitChildren(ctx)
-
# Visit a parse tree produced by VfrSyntaxParser#vfrStatementInvalidSaveRestoreDefaults.
- def visitVfrStatementInvalidSaveRestoreDefaults(self, ctx:VfrSyntaxParser.VfrStatementInvalidSaveRestoreDefaultsContext):
+ def visitVfrStatementInvalidSaveRestoreDefaults(
+ self, ctx: VfrSyntaxParser.VfrStatementInvalidSaveRestoreDefaultsContext
+ ):
return self.visitChildren(ctx)
-
# Visit a parse tree produced by VfrSyntaxParser#vfrStatementLabel.
- def visitVfrStatementLabel(self, ctx:VfrSyntaxParser.VfrStatementLabelContext):
-
- LObj = CIfrLabel()
+ def visitVfrStatementLabel(self, ctx: VfrSyntaxParser.VfrStatementLabelContext):
+ LObj = IfrLabel()
self.visitChildren(ctx)
LObj.SetLineNo(ctx.start.line)
- LObj.SetNumber(self.__TransNum(ctx.Number()))
+ LObj.SetNumber(self.TransNum(ctx.Number()))
ctx.Node.Data = LObj
+ ctx.Node.Buffer = gFormPkg.StructToStream(LObj.GetInfo())
return ctx.Node
-
# Visit a parse tree produced by VfrSyntaxParser#vfrStatemex.BObjntBanner.
- def visitVfrStatementBanner(self, ctx:VfrSyntaxParser.VfrStatementBannerContext):
-
+ def visitVfrStatementBanner(self, ctx: VfrSyntaxParser.VfrStatementBannerContext):
self.visitChildren(ctx)
+ BObj = IfrBanner()
+ BObj.SetLineNo(ctx.start.line)
+ BObj.SetTitle(self.TransNum(ctx.Number(0)))
if ctx.Line() != None:
- BObj = CIfrBanner()
- BObj.SetLineNo(ctx.start.line)
- BObj.SetTitle(self.__TransNum(ctx.Number(0)))
- BObj.SetLine(self.__TransNum(ctx.Number(1)))
- if ctx.Left() != None: BObj.SetAlign(0)
- if ctx.Center() != None: BObj.SetAlign(1)
- if ctx.Right() != None: BObj.SetAlign(2)
- ctx.Node.Data = BObj
- elif ctx.Timeout() != None:
- TObj = CIfrTimeout()
+ BObj.SetLine(self.TransNum(ctx.Number(1)))
+ if ctx.Left() != None:
+ ctx.Node.Dict["align"] = KV("left", 0)
+ BObj.SetAlign(0)
+ if ctx.Center() != None:
+ ctx.Node.Dict["align"] = KV("center", 1)
+ BObj.SetAlign(1)
+ if ctx.Right() != None:
+ ctx.Node.Dict["align"] = KV("right", 2)
+ BObj.SetAlign(2)
+
+ ctx.Node.Data = BObj
+ ctx.Node.Buffer = gFormPkg.StructToStream(BObj.GetInfo())
+
+ if ctx.Timeout() != None:
+ TObj = IfrTimeout()
TObj.SetLineNo(ctx.start.line)
- TObj.SetTimeout(self.__TransNum(ctx.Number(2)))
- ctx.Node.Data = TObj
+ TObj.SetTimeout(self.TransNum(ctx.Number(2)))
+ Node = IfrTreeNode(EFI_IFR_GUID_OP, TObj, gFormPkg.StructToStream(TObj.GetInfo()))
+ ctx.Node.insertChild(Node)
+ BObj.SetHasTimeOut(True)
+ BObj.SetTimeOut(self.TransNum(ctx.Number(2)))
return ctx.Node
-
# Visit a parse tree produced by VfrSyntaxParser#vfrStatementExtension.
- def visitVfrStatementExtension(self, ctx:VfrSyntaxParser.VfrStatementExtensionContext):
-
+ def visitVfrStatementExtension(self, ctx: VfrSyntaxParser.VfrStatementExtensionContext):
ctx.IsStruct = False
if ctx.DataType() != None:
if ctx.Uint64() != None:
- ctx.TypeName = 'UINT64'
+ ctx.TypeName = "UINT64"
elif ctx.Uint32() != None:
- ctx.TypeName = 'UINT32'
+ ctx.TypeName = "UINT32"
elif ctx.Uint16() != None:
- ctx.TypeName = 'UINT16'
+ ctx.TypeName = "UINT16"
elif ctx.Uint8() != None:
- ctx.TypeName = 'UINT8'
+ ctx.TypeName = "UINT8"
elif ctx.Boolean() != None:
- ctx.TypeName = 'BOOLEAN'
+ ctx.TypeName = "BOOLEAN"
elif ctx.EFI_STRING_ID() != None:
- ctx.TypeName = 'EFI_STRING_ID'
+ ctx.TypeName = "EFI_STRING_ID"
elif ctx.EFI_HII_DATE() != None:
- ctx.TypeName = 'EFI_HII_DATE'
+ ctx.TypeName = "EFI_HII_DATE"
ctx.IsStruct = True
elif ctx.EFI_HII_TIME() != None:
- ctx.TypeName = 'EFI_HII_TIME'
+ ctx.TypeName = "EFI_HII_TIME"
ctx.IsStruct = True
elif ctx.EFI_HII_REF() != None:
- ctx.TypeName = 'EFI_HII_REF'
+ ctx.TypeName = "EFI_HII_REF"
ctx.IsStruct = True
else:
- ctx.TypeName = self.__TransId(ctx.StringIdentifier())
+ ctx.TypeName = self.TransId(ctx.StringIdentifier())
ctx.IsStruct = True
- ctx.ArrayNum = self.__TransNum(ctx.Number())
- ctx.TypeSize, ReturnCode = gCVfrVarDataTypeDB.GetDataTypeSizeByTypeName(ctx.TypeName)
- self.__ErrorHandler(ReturnCode, ctx.D.line)
+ ctx.ArrayNum = self.TransNum(ctx.Number())
+ ctx.TypeSize, ReturnCode = gVfrVarDataTypeDB.GetDataTypeSizeByTypeName(ctx.TypeName)
+ self.ErrorHandler(ReturnCode, ctx.D.line)
ctx.Size = ctx.TypeSize * ctx.ArrayNum if ctx.ArrayNum > 0 else ctx.TypeSize
- ArrayType = ctypes.c_ubyte * ctx.Size
- ctx.DataBuff = ArrayType()
- for i in range(0, ctx.Size):
- ctx.DataBuff[i] = 0
- self.visitChildren(ctx)
+ ctx.Buffer = bytearray(ctx.Size)
+ self.visitChildren(ctx)
Line = ctx.start.line
- GuidObj = CIfrGuid(ctx.Size)
+ GuidObj = IfrExtensionGuid(ctx.Size, ctx.TypeName, ctx.ArrayNum)
+ for Ctx in ctx.vfrExtensionData():
+ GuidObj.SetFieldList(Ctx.FName, Ctx.TFValue)
+
GuidObj.SetLineNo(Line)
GuidObj.SetGuid(ctx.guidDefinition().Guid)
- if ctx.TypeName != None:
- GuidObj.SetData(ctx.DataBuff)
- # vfrStatementExtension
+ if ctx.TypeName != "":
+ GuidObj.SetData(ctx.Buffer)
GuidObj.SetScope(1)
ctx.Node.Data = GuidObj
+ ctx.Node.Buffer = gFormPkg.StructToStream(GuidObj.GetInfo())
+ if ctx.DataType() != None:
+ Buffer = bytearray(ctx.Size)
+ for i in range(0, len(Buffer)):
+ Buffer[i] = ctx.Buffer[i]
+ ctx.Node.Buffer += Buffer
+
for Ctx in ctx.vfrStatementExtension():
- self.__InsertChild(ctx.Node, Ctx)
+ self.InsertChild(ctx.Node, Ctx)
+
+ self.InsertEndNode(ctx.Node, ctx.stop.line)
return ctx.Node
# Visit a parse tree produced by VfrSyntaxParser#vfrExtensionData.
- def visitVfrExtensionData(self, ctx:VfrSyntaxParser.VfrExtensionDataContext):
- '''
- TFName = ''
- IsArray = False if ctx.OpenBracket() == None else True
- ArrayIdx = 0
- ctx.IsStruct = ctx.parentCtx.IsStruct
- ctx.DataBuff = ctx.parentCtx.DataBuff
-
- self.visitChildren(ctx)
-
- Data = self.__TransNum(ctx.N.text)
- if IsArray == True:
- ArrayIdx = self.__TransNum(self.__TransNum(ctx.Number(0)))
- ByteOffset = ArrayIdx * ctx.parentCtx.TypeSize
- if ctx.IsStruct == True:
- TFName += ctx.parentCtx.TypeName
+ def visitVfrExtensionData(self, ctx: VfrSyntaxParser.VfrExtensionDataContext):
+ IsArray = False if ctx.I == None else True
+ if IsArray:
+ Index = self.TransNum(ctx.I.text)
+ else:
+ Index = 0
+ IsStruct = ctx.parentCtx.IsStruct
+ self.visitChildren(ctx)
+ ctx.TFValue = self.TransNum(ctx.N.text)
+ Data = self.TransNum(ctx.N.text)
+ if IsArray:
+ ctx.FName += "data" + "[" + ctx.I.text + "]"
+ else:
+ ctx.FName += "data"
+ ctx.TFName = ctx.parentCtx.TypeName
+ if IsStruct:
+ ctx.TFName += ctx.parentCtx.TypeName
for i in range(0, len(ctx.arrayName())):
- TFName += '.'
- TFName += ctx.arrayName(i).SubStrZ
- FieldOffset, FieldType, FieldSize, BitField, _ = gCVfrVarDataTypeDB.GetDataFieldInfo(TFName)
- if BitField:
- Mask = (1 << FieldSize) - 1
- Offset = int(FieldOffset / 8)
- PreBits = FieldOffset % 8
- Mask <<= PreBits
- Begin = 0
- End = 0
- if FieldType == EFI_IFR_TYPE_NUM_SIZE_8:
- Data = ctypes.c_ubyte(Data)
- if BitField:
- # Set the value to the bit fileds.
- Data <<= PreBits
- Value = (Value & (~Mask)) | Data
- Begin = ByteOffset + Offset
- End = ByteOffset + Offset + sizeof (ctypes.c_ubyte)
- ctx.DataBuff[Begin: End] = Value
- else:
- Begin = ByteOffset + FieldOffset
- End = ByteOffset + FieldOffset + FieldSize
- ctx.DataBuff[Begin: End] = Data
-
-
- if FieldType == EFI_IFR_TYPE_NUM_SIZE_16:
- Data = ctypes.c_ushort(Data)
- if BitField:
- # Set the value to the bit fileds.
- Data <<= PreBits
- Value = (Value & (~Mask)) | Data
- Begin = ByteOffset + Offset
- End = ByteOffset + Offset + sizeof (ctypes.c_ushort)
- ctx.DataBuff[Begin: End] = Value
- else:
- Begin = ByteOffset + FieldOffset
- End = ByteOffset + FieldOffset + FieldSize
- ctx.DataBuff[Begin: End] = Data
-
-
- if FieldType == EFI_IFR_TYPE_NUM_SIZE_32:
- Data = ctypes.c_ulong(Data)
- if BitField:
- # Set the value to the bit fileds.
- Data <<= PreBits
- Value = (Value & (~Mask)) | Data
- Begin = ByteOffset + Offset
- End = ByteOffset + Offset + sizeof (ctypes.c_ulong)
- ctx.DataBuff[Begin: End] = Value
- else:
- Begin = ByteOffset + FieldOffset
- End = ByteOffset + FieldOffset + FieldSize
- ctx.DataBuff[Begin: End] = Data
-
- if FieldType == EFI_IFR_TYPE_NUM_SIZE_64:
- Data = ctypes.c_ulonglong(Data)
- if BitField:
- # Set the value to the bit fileds.
- Data <<= PreBits
- Value = (Value & (~Mask)) | Data
- Begin = ByteOffset + Offset
- End = ByteOffset + Offset + sizeof (ctypes.c_ulonglong)
- ctx.DataBuff[Begin: End] = Value
- else:
- Begin = ByteOffset + FieldOffset
- End = ByteOffset + FieldOffset + FieldSize
- ctx.DataBuff[Begin: End] = Data
-
+ ctx.TFName += "."
+ ctx.TFName += ctx.arrayName(i).SubStrZ
+ ctx.FName += "."
+ ctx.FName += ctx.arrayName(i).SubStrZ
+
+ Buffer = ctx.parentCtx.Buffer
+ FieldOffset, FieldType, FieldSize, BitField, _ = gVfrVarDataTypeDB.GetDataFieldInfo(
+ ctx.TFName
+ )
+ ByteOffset = ctx.parentCtx.TypeSize * Index
+ if not BitField:
+ Offset = ByteOffset + FieldOffset
+ Buffer[Offset : Offset + FieldSize] = ctx.TFValue.to_bytes(FieldSize, "little")
else:
- ctx.DataBuff[ByteOffset, ByteOffset + ctx.parentCtx.TypeSize] = Data
- '''
- return self.visitChildren(ctx)
+ Mask = (1 << FieldSize) - 1
+ Offset = FieldOffset // 8
+ PreBits = FieldOffset % 8
+ Mask <<= PreBits
+ Value = int.from_bytes(
+ Buffer[ByteOffset + Offset : ByteOffset + Offset + FieldSize], "little"
+ )
+ Data <<= PreBits
+ Value = (Value & (~Mask)) | Data
+ Buffer[ByteOffset + Offset : ByteOffset + Offset + FieldSize] = Value.to_bytes(
+ FieldSize, "little"
+ )
+
+ return Buffer
# Visit a parse tree produced by VfrSyntaxParser#vfrStatementModal.
- def visitVfrStatementModal(self, ctx:VfrSyntaxParser.VfrStatementModalContext):
-
+ def visitVfrStatementModal(self, ctx: VfrSyntaxParser.VfrStatementModalContext):
self.visitChildren(ctx)
ctx.Node = ctx.vfrModalTag().Node
return ctx.Node
# Visit a parse tree produced by VfrSyntaxParser#vfrModalTag.
- def visitVfrModalTag(self, ctx:VfrSyntaxParser.VfrModalTagContext):
-
- MObj = CIfrModal()
+ def visitVfrModalTag(self, ctx: VfrSyntaxParser.VfrModalTagContext):
+ MObj = IfrModal()
self.visitChildren(ctx)
MObj.SetLineNo(ctx.start.line)
ctx.Node.Data = MObj
+ ctx.Node.Buffer = gFormPkg.StructToStream(MObj.GetInfo())
return ctx.Node
- def __SaveOpHdrCond(self, OpHdr, Cond, LineNo=0):
+ def SaveOpHdrCond(self, OpHdr, Cond, LineNo=0):
if Cond == True:
- if self.__CIfrOpHdr[self.__CIfrOpHdrIndex] != None:
+ if self.IfrOpHdr[self.IfrOpHdrIndex] != None:
return
- self.__CIfrOpHdr[self.__CIfrOpHdrIndex] = CIfrOpHeader(OpHdr) #
- self.__CIfrOpHdrLineNo[self.__CIfrOpHdrIndex] = LineNo
+ self.IfrOpHdr[self.IfrOpHdrIndex] = OpHdr
+ self.IfrOpHdrLineNo[self.IfrOpHdrIndex] = LineNo
+ def InitOpHdrCond(self):
+ self.IfrOpHdr.append(None)
+ self.IfrOpHdrLineNo.append(0)
- def __InitOpHdrCond(self):
- self.__CIfrOpHdr.append(None)
- self.__CIfrOpHdrLineNo.append(0)
-
- def __SetSavedOpHdrScope(self):
- if self.__CIfrOpHdr[self.__CIfrOpHdrIndex] != None:
- self.__CIfrOpHdr[self.__CIfrOpHdrIndex].SetScope(1)
+ def SetSavedOpHdrScope(self):
+ if self.IfrOpHdr[self.IfrOpHdrIndex] != None:
+ self.IfrOpHdr[self.IfrOpHdrIndex].Scope = 1
return True
return False
- def __ClearSavedOPHdr(self):
- self.__CIfrOpHdr[self.__CIfrOpHdrIndex] = None
+ def ClearSavedOPHdr(self):
+ self.IfrOpHdr[self.IfrOpHdrIndex] = None
# Visit a parse tree produced by VfrSyntaxParser#vfrStatementExpression.
- def visitVfrStatementExpression(self, ctx:VfrSyntaxParser.VfrStatementExpressionContext):
-
- # Root expression extension function called by other function. ##
+ def visitVfrStatementExpression(self, ctx: VfrSyntaxParser.VfrStatementExpressionContext):
+ # Root expression extension function called by other function.
if ctx.ExpInfo.RootLevel == 0:
- self.__CIfrOpHdrIndex += 1
- if self.__CIfrOpHdrIndex >= MAX_IFR_EXPRESSION_DEPTH:
- self.__ErrorHandler(VfrReturnCode.VFR_RETURN_INVALID_PARAMETER, ctx.start.line, 'The depth of expression exceeds the max supported level 8!')
- self.__InitOpHdrCond()
+ self.IfrOpHdrIndex += 1
+ if self.IfrOpHdrIndex >= MAX_IFR_EXPRESSION_DEPTH:
+ self.ErrorHandler(
+ VfrReturnCode.VFR_RETURN_INVALID_PARAMETER,
+ ctx.start.line,
+ "The depth of expression exceeds the max supported level 8!",
+ )
+ self.InitOpHdrCond()
self.visitChildren(ctx)
- Line = ctx.start.line
- for i in range(0, len(ctx.OR())):
- ctx.ExpInfo.ExpOpCount += 1
- OObj = CIfrOr(Line)
+
+ for i in range(0, len(ctx.andTerm())):
+ ctx.Nodes.extend(ctx.andTerm(i).Nodes)
+ if i != 0:
+ ctx.ExpInfo.ExpOpCount += 1
+ OObj = IfrOr(ctx.andTerm(i).Line)
+ Node = IfrTreeNode(EFI_IFR_OR_OP, OObj, gFormPkg.StructToStream(OObj.GetInfo()))
+ ctx.Nodes.append(Node)
# Extend OpCode Scope only for the root expression.
if ctx.ExpInfo.ExpOpCount > 1 and ctx.ExpInfo.RootLevel == 0:
- if self.__SetSavedOpHdrScope():
- EObj = CIfrEnd()
- if self.__CIfrOpHdrLineNo[self.__CIfrOpHdrIndex] != 0:
- EObj.SetLineNo(self.__CIfrOpHdrLineNo[self.__CIfrOpHdrIndex])
+ if self.SetSavedOpHdrScope():
+ EObj = IfrEnd()
+ if self.IfrOpHdrLineNo[self.IfrOpHdrIndex] != 0:
+ EObj.SetLineNo(self.IfrOpHdrLineNo[self.IfrOpHdrIndex])
+ else:
+ EObj.SetLineNo(ctx.stop.line)
+ Node = IfrTreeNode(EFI_IFR_END_OP, EObj, gFormPkg.StructToStream(EObj.GetInfo()))
+ ctx.Nodes.append(Node)
if ctx.ExpInfo.RootLevel == 0:
- self.__ClearSavedOPHdr()
- self.__CIfrOpHdrIndex = self.__CIfrOpHdrIndex - 1
+ self.ClearSavedOPHdr()
+ self.IfrOpHdrIndex = self.IfrOpHdrIndex - 1
- self.__ConstantOnlyInExpression = False
+ for Node in ctx.Nodes:
+ if ctx.ParentNode != None:
+ ctx.ParentNode.insertChild(Node)
- return ctx.ExpInfo
+ self.ConstantOnlyInExpression = False
+ return ctx.Nodes
# Visit a parse tree produced by VfrSyntaxParser#vfrStatementExpressionSub.
- def visitVfrStatementExpressionSub(self, ctx:VfrSyntaxParser.VfrStatementExpressionSubContext):
-
+ def visitVfrStatementExpressionSub(self, ctx: VfrSyntaxParser.VfrStatementExpressionSubContext):
ctx.ExpInfo.RootLevel = ctx.parentCtx.ExpInfo.RootLevel + 1
ctx.ExpInfo.ExpOpCount = ctx.parentCtx.ExpInfo.ExpOpCount
self.visitChildren(ctx)
+ for i in range(0, len(ctx.andTerm())):
+ ctx.Nodes.extend(ctx.andTerm(i).Nodes)
+ if i != 0:
+ ctx.ExpInfo.ExpOpCount += 1
+ OObj = IfrOr(ctx.andTerm(i).Line)
+ Node = IfrTreeNode(EFI_IFR_OR_OP, OObj, gFormPkg.StructToStream(OObj.GetInfo()))
+ ctx.Nodes.append(Node)
+
+ ctx.ParentNodes.extend(ctx.Nodes)
+
ctx.parentCtx.ExpInfo.ExpOpCount = ctx.ExpInfo.ExpOpCount
- return ctx.ExpInfo
+ return ctx.Nodes
# Visit a parse tree produced by VfrSyntaxParser#andTerm.
- def visitAndTerm(self, ctx:VfrSyntaxParser.AndTermContext):
+ def visitAndTerm(self, ctx: VfrSyntaxParser.AndTermContext):
+ ctx.Line = ctx.start.line
self.visitChildren(ctx)
- Line = ctx.start.line
- for i in range(0, len(ctx.AND())):
- ctx.ExpInfo.ExpOpCount += 1
- AObj = CIfrAnd(Line)
- ctx.CIfrAndList.append(AObj)
-
- return ctx.ExpInfo, ctx.CIfrAndList
-
+ for i in range(0, len(ctx.bitwiseorTerm())):
+ ctx.Nodes.extend(ctx.bitwiseorTerm(i).Nodes)
+ if i != 0:
+ ctx.ExpInfo.ExpOpCount += 1
+ AObj = IfrAnd(ctx.bitwiseorTerm(i).Line)
+ Node = IfrTreeNode(EFI_IFR_AND_OP, AObj, gFormPkg.StructToStream(AObj.GetInfo()))
+ ctx.Nodes.append(Node)
+ return ctx.Nodes
# Visit a parse tree produced by VfrSyntaxParser#bitwiseorTerm.
- def visitBitwiseorTerm(self, ctx:VfrSyntaxParser.BitwiseorTermContext):
+ def visitBitwiseorTerm(self, ctx: VfrSyntaxParser.BitwiseorTermContext):
+ ctx.Line = ctx.start.line
self.visitChildren(ctx)
- Line = ctx.start.line
- for i in range(0, len(ctx.BitWiseOr())):
- ctx.ExpInfo.ExpOpCount += 1
- BWOObj = CIfrBitWiseOr(Line)
- ctx.CIfrBitWiseOrList.append(BWOObj)
-
- return ctx.ExpInfo, ctx.CIfrBitWiseOrList
+ for i in range(0, len(ctx.bitwiseandTerm())):
+ ctx.Nodes.extend(ctx.bitwiseandTerm(i).Nodes)
+ if i != 0:
+ ctx.ExpInfo.ExpOpCount += 1
+ BWOObj = IfrBitWiseOr(ctx.bitwiseandTerm(i).Line)
+ Node = IfrTreeNode(
+ EFI_IFR_BITWISE_OR_OP, BWOObj, gFormPkg.StructToStream(BWOObj.GetInfo())
+ )
+ ctx.Nodes.append(Node)
+ return ctx.Nodes
# Visit a parse tree produced by VfrSyntaxParser#bitwiseandTerm.
- def visitBitwiseandTerm(self, ctx:VfrSyntaxParser.BitwiseandTermContext):
+ def visitBitwiseandTerm(self, ctx: VfrSyntaxParser.BitwiseandTermContext):
+ ctx.Line = ctx.start.line
self.visitChildren(ctx)
- Line = ctx.start.line
- for i in range(0, len(ctx.BitWiseAnd())):
- ctx.ExpInfo.ExpOpCount += 1
- BWAObj = CIfrBitWiseAnd(Line)
- ctx.CIfrBitWiseAndList.append(BWAObj)
-
- return ctx.ExpInfo, ctx.CIfrBitWiseAndList
+ for i in range(0, len(ctx.equalTerm())):
+ ctx.Nodes.extend(ctx.equalTerm(i).Nodes)
+ if i != 0:
+ ctx.ExpInfo.ExpOpCount += 1
+ BWAObj = IfrBitWiseAnd(ctx.equalTerm(i).Line)
+ Node = IfrTreeNode(
+ EFI_IFR_BITWISE_AND_OP, BWAObj, gFormPkg.StructToStream(BWAObj.GetInfo())
+ )
+ ctx.Nodes.append(Node)
+ return ctx.Nodes
# Visit a parse tree produced by VfrSyntaxParser#equalTerm.
- def visitEqualTerm(self, ctx:VfrSyntaxParser.EqualTermContext):
+ def visitEqualTerm(self, ctx: VfrSyntaxParser.EqualTermContext):
+ ctx.Line = ctx.start.line
self.visitChildren(ctx)
- for i in range(0, len(ctx.equalTermSupplementary())):
- ctx.ExpInfo.ExpOpCount += 1
+ ctx.Nodes.extend(ctx.compareTerm().Nodes)
- return ctx.ExpInfo, ctx.CIfrEqualList, ctx.CIfrNotEqualList
+ for ChildCtx in ctx.equalTermSupplementary():
+ ctx.ExpInfo.ExpOpCount += 1
+ ctx.Nodes.extend(ChildCtx.Nodes)
+ return ctx.Nodes
# Visit a parse tree produced by VfrSyntaxParser#equalTermEqualRule.
- def visitEqualTermEqualRule(self, ctx:VfrSyntaxParser.EqualTermEqualRuleContext):
+ def visitEqualTermEqualRule(self, ctx: VfrSyntaxParser.EqualTermEqualRuleContext):
self.visitChildren(ctx)
- EObj = CIfrEqual(ctx.start.line)
- ctx.CIfrEqualList.append(EObj)
-
- return EObj
-
+ ctx.Nodes.extend(ctx.compareTerm().Nodes)
+ EObj = IfrEqual(ctx.start.line)
+ Node = IfrTreeNode(EFI_IFR_EQUAL_OP, EObj, gFormPkg.StructToStream(EObj.GetInfo()))
+ ctx.Nodes.append(Node)
+ return ctx.Nodes
# Visit a parse tree produced by VfrSyntaxParser#equalTermNotEqualRule.
- def visitEqualTermNotEqualRule(self, ctx:VfrSyntaxParser.EqualTermNotEqualRuleContext):
+ def visitEqualTermNotEqualRule(self, ctx: VfrSyntaxParser.EqualTermNotEqualRuleContext):
self.visitChildren(ctx)
- NEObj = CIfrNotEqual(ctx.start.line)
- ctx.CIfrNotEqualList.append(NEObj)
- return NEObj
-
+ ctx.Nodes.extend(ctx.compareTerm().Nodes)
+ NEObj = IfrNotEqual(ctx.start.line)
+ Node = IfrTreeNode(EFI_IFR_NOT_EQUAL_OP, NEObj, gFormPkg.StructToStream(NEObj.GetInfo()))
+ ctx.Nodes.append(Node)
+ return ctx.Nodes
# Visit a parse tree produced by VfrSyntaxParser#compareTerm.
- def visitCompareTerm(self, ctx:VfrSyntaxParser.CompareTermContext):
+ def visitCompareTerm(self, ctx: VfrSyntaxParser.CompareTermContext):
self.visitChildren(ctx)
- for i in range(0, len(ctx.compareTermSupplementary())):
+ ctx.Nodes.extend(ctx.shiftTerm().Nodes)
+
+ for ChildCtx in ctx.compareTermSupplementary():
ctx.ExpInfo.ExpOpCount += 1
- return ctx.ExpInfo, ctx.CIfrLessThanList, ctx.CIfrLessEqualList, ctx.CIfrGreaterThanList, ctx.CIfrGreaterEqualList
+ ctx.Nodes.extend(ChildCtx.Nodes)
+ return ctx.Nodes
# Visit a parse tree produced by VfrSyntaxParser#compareTermLessRule.
- def visitCompareTermLessRule(self, ctx:VfrSyntaxParser.CompareTermLessRuleContext):
+ def visitCompareTermLessRule(self, ctx: VfrSyntaxParser.CompareTermLessRuleContext):
self.visitChildren(ctx)
- LTObj = CIfrLessThan(ctx.start.line)
- ctx.CIfrLessThanList.append(LTObj)
- return LTObj
-
+ ctx.Nodes.extend(ctx.shiftTerm().Nodes)
+ LTObj = IfrLessThan(ctx.start.line)
+ Node = IfrTreeNode(EFI_IFR_LESS_THAN_OP, LTObj, gFormPkg.StructToStream(LTObj.GetInfo()))
+ ctx.Nodes.append(Node)
+ return ctx.Nodes
# Visit a parse tree produced by VfrSyntaxParser#compareTermLessEqualRule.
- def visitCompareTermLessEqualRule(self, ctx:VfrSyntaxParser.CompareTermLessEqualRuleContext):
+ def visitCompareTermLessEqualRule(self, ctx: VfrSyntaxParser.CompareTermLessEqualRuleContext):
self.visitChildren(ctx)
- LEObj = CIfrLessEqual(ctx.start.line)
- ctx.CIfrLessEqualList.append(LEObj)
- return LEObj
-
+ ctx.Nodes.extend(ctx.shiftTerm().Nodes)
+ LEObj = IfrLessEqual(ctx.start.line)
+ Node = IfrTreeNode(EFI_IFR_LESS_EQUAL_OP, LEObj, gFormPkg.StructToStream(LEObj.GetInfo()))
+ ctx.Nodes.append(Node)
+ return ctx.Nodes
# Visit a parse tree produced by VfrSyntaxParser#compareTermGreaterRule.
- def visitCompareTermGreaterRule(self, ctx:VfrSyntaxParser.CompareTermGreaterRuleContext):
+ def visitCompareTermGreaterRule(self, ctx: VfrSyntaxParser.CompareTermGreaterRuleContext):
self.visitChildren(ctx)
- GTObj = CIfrGreaterThan(ctx.start.line)
- ctx.CIfrGreaterThanList.append(GTObj)
- return GTObj
-
+ ctx.Nodes.extend(ctx.shiftTerm().Nodes)
+ GTObj = IfrGreaterThan(ctx.start.line)
+ Node = IfrTreeNode(EFI_IFR_GREATER_THAN_OP, GTObj, gFormPkg.StructToStream(GTObj.GetInfo()))
+ ctx.Nodes.append(Node)
+ return ctx.Nodes
# Visit a parse tree produced by VfrSyntaxParser#compareTermGreaterEqualRule.
- def visitCompareTermGreaterEqualRule(self, ctx:VfrSyntaxParser.CompareTermGreaterEqualRuleContext):
- self.visitChildren(ctx)
- GEObj = CIfrGreaterEqual(ctx.start.line)
- ctx.CIfrGreaterEqualList.append(GEObj)
- return GEObj
+ def visitCompareTermGreaterEqualRule(
+ self, ctx: VfrSyntaxParser.CompareTermGreaterEqualRuleContext
+ ):
+ self.visitChildren(ctx)
+ ctx.Nodes.extend(ctx.shiftTerm().Nodes)
+ GEObj = IfrGreaterEqual(ctx.start.line)
+ Node = IfrTreeNode(
+ EFI_IFR_GREATER_EQUAL_OP, GEObj, gFormPkg.StructToStream(GEObj.GetInfo())
+ )
+ ctx.Nodes.append(Node)
+ return ctx.Nodes
# Visit a parse tree produced by VfrSyntaxParser#shiftTerm.
- def visitShiftTerm(self, ctx:VfrSyntaxParser.ShiftTermContext):
+ def visitShiftTerm(self, ctx: VfrSyntaxParser.ShiftTermContext):
self.visitChildren(ctx)
- for i in range(0, len(ctx.shiftTermSupplementary())):
+ ctx.Nodes.extend(ctx.addMinusTerm().Nodes)
+
+ for ChildCtx in ctx.shiftTermSupplementary():
ctx.ExpInfo.ExpOpCount += 1
- return ctx.ExpInfo, ctx.CIfrShiftLeftList, ctx.CIfrShiftRightList
+ ctx.Nodes.extend(ChildCtx.Nodes)
+
+ return ctx.Nodes
# Visit a parse tree produced by VfrSyntaxParser#shiftTermLeft.
- def visitShiftTermLeft(self, ctx:VfrSyntaxParser.ShiftTermLeftContext):
+ def visitShiftTermLeft(self, ctx: VfrSyntaxParser.ShiftTermLeftContext):
self.visitChildren(ctx)
- SLObj = CIfrShiftLeft(ctx.start.line)
- ctx.CIfrShiftLeftList.append(SLObj)
- return SLObj
-
+ ctx.Nodes.extend(ctx.addMinusTerm().Nodes)
+ SLObj = IfrShiftLeft(ctx.start.line)
+ Node = IfrTreeNode(EFI_IFR_SHIFT_LEFT_OP, SLObj, gFormPkg.StructToStream(SLObj.GetInfo()))
+ ctx.Nodes.append(Node)
+ return ctx.Nodes
# Visit a parse tree produced by VfrSyntaxParser#shiftTermRight.
- def visitShiftTermRight(self, ctx:VfrSyntaxParser.ShiftTermRightContext):
+ def visitShiftTermRight(self, ctx: VfrSyntaxParser.ShiftTermRightContext):
self.visitChildren(ctx)
- SRObj = CIfrShiftRight(ctx.start.line)
- ctx.CIfrShiftRightList.append(SRObj)
- return SRObj
-
+ ctx.Nodes.extend(ctx.addMinusTerm().Nodes)
+ SRObj = IfrShiftRight(ctx.start.line)
+ Node = IfrTreeNode(EFI_IFR_SHIFT_RIGHT_OP, SRObj, gFormPkg.StructToStream(SRObj.GetInfo()))
+ ctx.Nodes.append(Node)
+ return ctx.Nodes
# Visit a parse tree produced by VfrSyntaxParser#addMinusTerm.
- def visitAddMinusTerm(self, ctx:VfrSyntaxParser.AddMinusTermContext):
+ def visitAddMinusTerm(self, ctx: VfrSyntaxParser.AddMinusTermContext):
self.visitChildren(ctx)
- for i in range(0, len(ctx.addMinusTermSupplementary())):
+ ctx.Nodes.extend(ctx.multdivmodTerm().Nodes)
+
+ for ChildCtx in ctx.addMinusTermSupplementary():
ctx.ExpInfo.ExpOpCount += 1
- return ctx.ExpInfo, ctx.CIfrAddList, ctx.CIfrSubtractList
+ ctx.Nodes.extend(ChildCtx.Nodes)
+ return ctx.Nodes
# Visit a parse tree produced by VfrSyntaxParser#addMinusTermpAdd.
- def visitAddMinusTermpAdd(self, ctx:VfrSyntaxParser.AddMinusTermpAddContext):
+ def visitAddMinusTermpAdd(self, ctx: VfrSyntaxParser.AddMinusTermpAddContext):
self.visitChildren(ctx)
- AObj = CIfrAdd(ctx.start.line)
- ctx.CIfrAddList.append(AObj)
- return AObj
-
+ ctx.Nodes.extend(ctx.multdivmodTerm().Nodes)
+ AObj = IfrAdd(ctx.start.line)
+ Node = IfrTreeNode(EFI_IFR_ADD_OP, AObj, gFormPkg.StructToStream(AObj.GetInfo()))
+ ctx.Nodes.append(Node)
+ return ctx.Nodes
# Visit a parse tree produced by VfrSyntaxParser#addMinusTermSubtract.
- def visitAddMinusTermSubtract(self, ctx:VfrSyntaxParser.AddMinusTermSubtractContext):
+ def visitAddMinusTermSubtract(self, ctx: VfrSyntaxParser.AddMinusTermSubtractContext):
self.visitChildren(ctx)
- SObj = CIfrSubtract(ctx.start.line)
- ctx.CIfrSubtractList.append(SObj)
- return SObj
-
+ ctx.Nodes.extend(ctx.multdivmodTerm().Nodes)
+ SObj = IfrSubtract(ctx.start.line)
+ Node = IfrTreeNode(EFI_IFR_SUBTRACT_OP, SObj, gFormPkg.StructToStream(SObj.GetInfo()))
+ ctx.Nodes.append(Node)
+ return ctx.Nodes
# Visit a parse tree produced by VfrSyntaxParser#multdivmodTerm.
- def visitMultdivmodTerm(self, ctx:VfrSyntaxParser.MultdivmodTermContext):
+ def visitMultdivmodTerm(self, ctx: VfrSyntaxParser.MultdivmodTermContext):
self.visitChildren(ctx)
- for i in range(0, len(ctx.multdivmodTermSupplementary())):
+ ctx.Nodes.extend(ctx.castTerm().Nodes)
+ for ChildCtx in ctx.multdivmodTermSupplementary():
ctx.ExpInfo.ExpOpCount += 1
- return ctx.ExpInfo, ctx.CIfrMultiplyList, ctx.CIfrDivideList, ctx.CIfrModuloList
+ ctx.Nodes.extend(ChildCtx.Nodes)
+ return ctx.Nodes
# Visit a parse tree produced by VfrSyntaxParser#multdivmodTermMul.
- def visitMultdivmodTermMul(self, ctx:VfrSyntaxParser.MultdivmodTermMulContext):
+ def visitMultdivmodTermMul(self, ctx: VfrSyntaxParser.MultdivmodTermMulContext):
self.visitChildren(ctx)
- MObj = CIfrMultiply(ctx.start.line)
- ctx.CIfrMultiplyList.append(MObj)
- return MObj
-
+ ctx.Nodes.extend(ctx.castTerm().Nodes)
+ MObj = IfrMultiply(ctx.start.line)
+ Node = IfrTreeNode(EFI_IFR_MULTIPLY_OP, MObj, gFormPkg.StructToStream(MObj.GetInfo()))
+ ctx.Nodes.append(Node)
+ return ctx.Nodes
# Visit a parse tree produced by VfrSyntaxParser#multdivmodTermDiv.
- def visitMultdivmodTermDiv(self, ctx:VfrSyntaxParser.MultdivmodTermDivContext):
+ def visitMultdivmodTermDiv(self, ctx: VfrSyntaxParser.MultdivmodTermDivContext):
self.visitChildren(ctx)
- DObj = CIfrDivide(ctx.start.line)
- ctx.CIfrDivideList.append(DObj)
- return DObj
-
+ ctx.Nodes.extend(ctx.castTerm().Nodes)
+ DObj = IfrDivide(ctx.start.line)
+ Node = IfrTreeNode(EFI_IFR_DIVIDE_OP, DObj, gFormPkg.StructToStream(DObj.GetInfo()))
+ ctx.Nodes.append(Node)
+ return ctx.Nodes
# Visit a parse tree produced by VfrSyntaxParser#multdivmodTermRound.
- def visitMultdivmodTermModulo(self, ctx:VfrSyntaxParser.MultdivmodTermModuloContext):
+ def visitMultdivmodTermModulo(self, ctx: VfrSyntaxParser.MultdivmodTermModuloContext):
self.visitChildren(ctx)
- ctx.Line = ctx.start.line
- MObj = CIfrModulo(ctx.Line)
- ctx.CIfrModuloList.append(MObj)
- return MObj
-
+ ctx.Nodes.extend(ctx.castTerm().Nodes)
+ MObj = IfrModulo(ctx.start.line)
+ Node = IfrTreeNode(EFI_IFR_MODULO_OP, MObj, gFormPkg.StructToStream(MObj.GetInfo()))
+ ctx.Nodes.append(Node)
+ return ctx.Nodes
# Visit a parse tree produced by VfrSyntaxParser#castTerm.
- def visitCastTerm(self, ctx:VfrSyntaxParser.CastTermContext):
- self.visitChildren(ctx) ##
+ def visitCastTerm(self, ctx: VfrSyntaxParser.CastTermContext):
+ self.visitChildren(ctx)
CastType = 0xFF
- if ctx.Boolean() != []:
- CastType = 0
- elif ctx.Uint64() != []:
- CastType = 1
- elif ctx.Uint32() != []:
- CastType = 1
- elif ctx.Uint16() != []:
- CastType = 1
- elif ctx.Uint8() != []:
- CastType = 1
+ for ChildCtx in ctx.castTermSub():
+ CastType = ChildCtx.CastType
- Line = ctx.start.line
+ ctx.Nodes.extend(ctx.atomTerm().Nodes)
if CastType == 0:
- ctx.TBObj = CIfrToBoolean(Line)
- elif CastType == 1:
- ctx.TUObj = CIfrToUint(Line)
-
- ctx.ExpInfo.ExpOpCount += 1
- return ctx.TBObj, ctx.TUObj
+ TBObj = IfrToBoolean(ctx.start.line)
+ Node = IfrTreeNode(
+ EFI_IFR_TO_BOOLEAN_OP, TBObj, gFormPkg.StructToStream(TBObj.GetInfo())
+ )
+ ctx.Nodes.append(Node)
+ ctx.ExpInfo.ExpOpCount += 1
+ elif CastType == 1:
+ TUObj = IfrToUint(ctx.start.line)
+ Node = IfrTreeNode(EFI_IFR_TO_UINT_OP, TUObj, gFormPkg.StructToStream(TUObj.GetInfo()))
+ ctx.Nodes.append(Node)
+ ctx.ExpInfo.ExpOpCount += 1
+ return ctx.Nodes
- # Visit a parse tree produced by VfrSyntaxParser#atomTerm.
- def visitAtomTerm(self, ctx:VfrSyntaxParser.AtomTermContext):
+ # Visit a parse tree produced by VfrSyntaxParser#castTermSub.
+ def visitCastTermSub(self, ctx: VfrSyntaxParser.CastTermSubContext):
self.visitChildren(ctx)
- if ctx.NOT() != None:
- Line = ctx.start.line
- NObj = CIfrNot(Line)
+ if ctx.Boolean() != None:
+ ctx.CastType = 0
+ elif ctx.Uint32() != None:
+ ctx.CastType = 1
+ elif ctx.Uint16() != None:
+ ctx.CastType = 1
+ elif ctx.Uint8() != None:
+ ctx.CastType = 1
+ return ctx.CastType
+ # Visit a parse tree produced by VfrSyntaxParser#atomTerm.
+ def visitAtomTerm(self, ctx: VfrSyntaxParser.AtomTermContext):
+ self.visitChildren(ctx)
+ if ctx.vfrExpressionCatenate() != None:
+ ctx.Nodes = ctx.vfrExpressionCatenate().Nodes
+ if ctx.vfrExpressionMatch() != None:
+ ctx.Nodes = ctx.vfrExpressionMatch().Nodes
+ if ctx.vfrExpressionMatch2() != None:
+ ctx.Nodes = ctx.vfrExpressionMatch2().Nodes
+ if ctx.vfrExpressionParen() != None:
+ ctx.Nodes = ctx.vfrExpressionParen().Nodes
+ if ctx.vfrExpressionBuildInFunction() != None:
+ ctx.Nodes.append(ctx.vfrExpressionBuildInFunction().Node)
+ if ctx.vfrExpressionConstant() != None:
+ ctx.Nodes.append(ctx.vfrExpressionConstant().Node)
+ if ctx.vfrExpressionUnaryOp() != None:
+ ctx.Nodes = ctx.vfrExpressionUnaryOp().Nodes
+ if ctx.vfrExpressionTernaryOp() != None:
+ ctx.Nodes = ctx.vfrExpressionTernaryOp().Nodes
+ if ctx.vfrExpressionMap() != None:
+ ctx.Nodes = ctx.vfrExpressionMap().Nodes
+ if ctx.atomTerm() != None:
+ ctx.Nodes = ctx.atomTerm().Nodes
+ NObj = IfrNot(ctx.start.line)
+ Node = IfrTreeNode(EFI_IFR_NOT_OP, NObj, gFormPkg.StructToStream(NObj.GetInfo()))
+ ctx.Nodes.append(Node)
+ ctx.ExpInfo.ExpOpCount += 1
+ return ctx.Nodes
# Visit a parse tree produced by VfrSyntaxParser#vfrExpressionCatenate.
- def visitVfrExpressionCatenate(self, ctx:VfrSyntaxParser.VfrExpressionCatenateContext):
+ def visitVfrExpressionCatenate(self, ctx: VfrSyntaxParser.VfrExpressionCatenateContext):
ctx.ExpInfo.RootLevel += 1
self.visitChildren(ctx)
Line = ctx.start.line
- ctx.CObj = CIfrCatenate(Line)
+ CObj = IfrCatenate(Line)
+ Node = IfrTreeNode(EFI_IFR_CATENATE_OP, CObj, gFormPkg.StructToStream(CObj.GetInfo()))
+ ctx.Nodes.append(Node)
ctx.ExpInfo.ExpOpCount += 1
- return ctx.CObj
-
+ return ctx.Nodes
# Visit a parse tree produced by VfrSyntaxParser#vfrExpressionMatch.
- def visitVfrExpressionMatch(self, ctx:VfrSyntaxParser.VfrExpressionMatchContext):
+ def visitVfrExpressionMatch(self, ctx: VfrSyntaxParser.VfrExpressionMatchContext):
ctx.ExpInfo.RootLevel += 1
self.visitChildren(ctx)
Line = ctx.start.line
- ctx.MObj = CIfrMatch(Line)
+ MObj = IfrMatch(Line)
+ Node = IfrTreeNode(EFI_IFR_MATCH_OP, MObj, gFormPkg.StructToStream(MObj.GetInfo()))
+ ctx.Nodes.append(Node)
ctx.ExpInfo.ExpOpCount += 1
- return ctx.MObj
-
+ return ctx.Nodes
# Visit a parse tree produced by VfrSyntaxParser#vfrExpressionMatch2.
- def visitVfrExpressionMatch2(self, ctx:VfrSyntaxParser.VfrExpressionMatch2Context):
+ def visitVfrExpressionMatch2(self, ctx: VfrSyntaxParser.VfrExpressionMatch2Context):
self.visitChildren(ctx)
Line = ctx.start.line
Guid = ctx.guidDefinition().Guid
- ctx.M2Obj = CIfrMatch2(Line, Guid)
+ M2Obj = IfrMatch2(Line, Guid)
+ Node = IfrTreeNode(EFI_IFR_MATCH2_OP, M2Obj, gFormPkg.StructToStream(M2Obj.GetInfo()))
+ ctx.Nodes.append(Node)
ctx.ExpInfo.ExpOpCount += 1
- return ctx.M2Obj
-
+ return ctx.Nodes
# Visit a parse tree produced by VfrSyntaxParser#vfrExpressionParen.
- def visitVfrExpressionParen(self, ctx:VfrSyntaxParser.VfrExpressionParenContext):
- return self.visitChildren(ctx)
-
+ def visitVfrExpressionParen(self, ctx: VfrSyntaxParser.VfrExpressionParenContext):
+ self.visitChildren(ctx)
+ return ctx.Nodes
# Visit a parse tree produced by VfrSyntaxParser#vfrExpressionBuildInFunction.
- def visitVfrExpressionBuildInFunction(self, ctx:VfrSyntaxParser.VfrExpressionBuildInFunctionContext):
- return self.visitChildren(ctx)
-
+ def visitVfrExpressionBuildInFunction(
+ self, ctx: VfrSyntaxParser.VfrExpressionBuildInFunctionContext
+ ):
+ self.visitChildren(ctx)
+ if ctx.dupExp() != None:
+ ctx.Node = ctx.dupExp().Node
+ if ctx.vareqvalExp() != None:
+ ctx.Node = ctx.vareqvalExp().Node
+ if ctx.ideqvalExp() != None:
+ ctx.Node = ctx.ideqvalExp().Node
+ if ctx.ideqidExp() != None:
+ ctx.Node = ctx.ideqidExp().Node
+ if ctx.ideqvallistExp() != None:
+ ctx.Node = ctx.ideqvallistExp().Node
+ if ctx.questionref1Exp() != None:
+ ctx.Node = ctx.questionref1Exp().Node
+ if ctx.rulerefExp() != None:
+ ctx.Node = ctx.rulerefExp().Node
+ if ctx.stringref1Exp() != None:
+ ctx.Node = ctx.stringref1Exp().Node
+ if ctx.pushthisExp() != None:
+ ctx.Node = ctx.pushthisExp().Node
+ if ctx.securityExp() != None:
+ ctx.Node = ctx.securityExp().Node
+ if ctx.getExp() != None:
+ ctx.Node = ctx.getExp().Node
+ return ctx.Node
# Visit a parse tree produced by VfrSyntaxParser#dupExp.
- def visitDupExp(self, ctx:VfrSyntaxParser.DupExpContext):
-
+ def visitDupExp(self, ctx: VfrSyntaxParser.DupExpContext):
self.visitChildren(ctx)
Line = ctx.start.line
- DObj = CIfrDup(Line)
- self.__SaveOpHdrCond(DObj.GetHeader(), (ctx.ExpInfo.ExpOpCount == 0), Line) #
+ DObj = IfrDup(Line)
+ ctx.Node.Data = DObj
+ ctx.Node.Buffer = gFormPkg.StructToStream(DObj.GetInfo())
+ self.SaveOpHdrCond(DObj.GetHeader(), (ctx.ExpInfo.ExpOpCount == 0), Line) #
ctx.ExpInfo.ExpOpCount += 1
- return ctx.ExpInfo
-
+ return ctx.Node
# Visit a parse tree produced by VfrSyntaxParser#vareqvalExp.
- def visitVareqvalExp(self, ctx:VfrSyntaxParser.VareqvalExpContext):
-
+ def visitVareqvalExp(self, ctx: VfrSyntaxParser.VareqvalExpContext):
Line = ctx.start.line
self.visitChildren(ctx)
ReturnCode = VfrReturnCode.VFR_RETURN_UNSUPPORTED
- VarIdStr = 'var'
- VarIdStr += str(ctx.Number(0))
- VarStoreId, ReturnCode = gCVfrDataStorage.GetVarStoreId(VarIdStr)
+ VarIdStr = "var"
+ VarIdStr += ctx.VN.text
+ VarStoreId, ReturnCode = gVfrDataStorage.GetVarStoreId(VarIdStr)
if ReturnCode == VfrReturnCode.VFR_RETURN_UNDEFINED:
pass
else:
- pass
- QId, Mask, _ = self.__CVfrQuestionDB.GetQuestionId(None, VarIdStr)
- ConstVal = self.__TransNum(ctx.Number(1))
+ self.ErrorHandler(ReturnCode, ctx.VN.line)
+ QId, Mask, _ = self.VfrQuestionDB.GetQuestionId(None, VarIdStr)
+ ConstVal = self.TransNum(ctx.Number(1))
if ctx.Equal() != None:
if Mask == 0:
- EIVObj = CIfrEqIdVal(Line)
- self.__SaveOpHdrCond(EIVObj.GetHeader(), (ctx.ExpInfo.ExpOpCount == 0), Line)
- EIVObj.SetQuestionId(QId, VarIdStr, Line)
+ EIVObj = IfrEqIdVal(Line)
+ self.SaveOpHdrCond(EIVObj.GetHeader(), (ctx.ExpInfo.ExpOpCount == 0), Line)
+ EIVObj.SetQuestionId(QId, VarIdStr, ctx.VN.line)
EIVObj.SetValue(ConstVal)
+ ctx.Node = IfrTreeNode(EFI_IFR_EQ_ID_VAL_OP, EIVObj)
ctx.ExpInfo.ExpOpCount += 1
else:
- self.IdEqValDoSpecial(ctx.ExpInfo, Line, QId, VarIdStr, Mask, ConstVal, EFI_COMPARE_TYPE.EQUAL)
+ ctx.Node = self.IdEqValDoSpecial(
+ ctx.ExpInfo, Line, QId, VarIdStr, Mask, ConstVal, EFI_COMPARE_TYPE.EQUAL
+ )
elif ctx.LessEqual() != None:
- self.IdEqValDoSpecial(ctx.ExpInfo, Line, QId, VarIdStr, Mask, ConstVal, EFI_COMPARE_TYPE.LESS_EQUAL)
+ ctx.Node = self.IdEqValDoSpecial(
+ ctx.ExpInfo, Line, QId, VarIdStr, Mask, ConstVal, EFI_COMPARE_TYPE.LESS_EQUAL
+ )
elif ctx.Less() != None:
- self.IdEqValDoSpecial(ctx.ExpInfo, Line, QId, VarIdStr, Mask, ConstVal, EFI_COMPARE_TYPE.LESS_THAN)
+ ctx.Node = self.IdEqValDoSpecial(
+ ctx.ExpInfo, Line, QId, VarIdStr, Mask, ConstVal, EFI_COMPARE_TYPE.LESS_THAN
+ )
elif ctx.GreaterEqual() != None:
- self.IdEqValDoSpecial(ctx.ExpInfo, Line, QId, VarIdStr, Mask, ConstVal, EFI_COMPARE_TYPE.GREATER_EQUAL)
+ ctx.Node = self.IdEqValDoSpecial(
+ ctx.ExpInfo, Line, QId, VarIdStr, Mask, ConstVal, EFI_COMPARE_TYPE.GREATER_EQUAL
+ )
elif ctx.Greater() != None:
- self.IdEqValDoSpecial(ctx.ExpInfo, Line, QId, VarIdStr, Mask, ConstVal, EFI_COMPARE_TYPE.GREATER_THAN)
-
-
- return ctx.ExpInfo
+ ctx.Node = self.IdEqValDoSpecial(
+ ctx.ExpInfo, Line, QId, VarIdStr, Mask, ConstVal, EFI_COMPARE_TYPE.GREATER_THAN
+ )
+ return ctx.Node
def ConvertIdExpr(self, ExpInfo, LineNo, QId, VarIdStr, BitMask):
-
- QR1Obj = CIfrQuestionRef1(LineNo)
+ QR1Obj = IfrQuestionRef1(LineNo)
QR1Obj.SetQuestionId(QId, VarIdStr, LineNo)
- self.__SaveOpHdrCond(QR1Obj.GetHeader(), (ExpInfo.ExpOpCount == 0))
+ Node = IfrTreeNode(EFI_IFR_QUESTION_REF1_OP, QR1Obj)
+ self.SaveOpHdrCond(QR1Obj.GetHeader(), (ExpInfo.ExpOpCount == 0))
if BitMask != 0:
- U32Obj = CIfrUint32(LineNo)
+ U32Obj = IfrUint32(LineNo)
U32Obj.SetValue(BitMask)
-
- BWAObj = CIfrBitWiseAnd(LineNo)
-
- U8Obj = CIfrUint8(LineNo)
+ Node.insertChild(
+ IfrTreeNode(EFI_IFR_UINT32_OP, U32Obj, gFormPkg.StructToStream(U32Obj.GetInfo()))
+ )
+
+ BWAObj = IfrBitWiseAnd(LineNo)
+ Node.insertChild(
+ IfrTreeNode(
+ EFI_IFR_BITWISE_AND_OP, BWAObj, gFormPkg.StructToStream(BWAObj.GetInfo())
+ )
+ )
+
+ U8Obj = IfrUint8(LineNo)
if BitMask == DATE_YEAR_BITMASK:
- U8Obj.SetValue (0)
+ U8Obj.SetValue(0)
elif BitMask == TIME_SECOND_BITMASK:
- U8Obj.SetValue (0x10)
+ U8Obj.SetValue(0x10)
elif BitMask == DATE_DAY_BITMASK:
- U8Obj.SetValue (0x18)
+ U8Obj.SetValue(0x18)
elif BitMask == TIME_HOUR_BITMASK:
- U8Obj.SetValue (0)
+ U8Obj.SetValue(0)
elif BitMask == TIME_MINUTE_BITMASK:
- U8Obj.SetValue (0x8)
+ U8Obj.SetValue(0x8)
+ Node.insertChild(
+ IfrTreeNode(EFI_IFR_UINT8_OP, U8Obj, gFormPkg.StructToStream(U8Obj.GetInfo()))
+ )
- SRObj = CIfrShiftRight(LineNo)
+ SRObj = IfrShiftRight(LineNo)
+ Node.insertChild(
+ IfrTreeNode(EFI_IFR_SHIFT_RIGHT_OP, SRObj, gFormPkg.StructToStream(SRObj.GetInfo()))
+ )
ExpInfo.ExpOpCount += 4
-
+ return Node
def IdEqValDoSpecial(self, ExpInfo, LineNo, QId, VarIdStr, BitMask, ConstVal, CompareType):
-
- self.ConvertIdExpr(ExpInfo, LineNo, QId, VarIdStr, BitMask)
+ Node = self.ConvertIdExpr(ExpInfo, LineNo, QId, VarIdStr, BitMask)
if ConstVal > 0xFF:
- U16Obj = CIfrUint16(LineNo)
+ U16Obj = IfrUint16(LineNo)
U16Obj.SetValue(ConstVal)
+ Node.insertChild(
+ IfrTreeNode(EFI_IFR_UINT16_OP, U16Obj, gFormPkg.StructToStream(U16Obj.GetInfo()))
+ )
else:
- U8Obj = CIfrUint8(LineNo)
+ U8Obj = IfrUint8(LineNo)
U8Obj.SetValue(ConstVal)
-
+ Node.insertChild(
+ IfrTreeNode(EFI_IFR_UINT8_OP, U8Obj, gFormPkg.StructToStream(U8Obj.GetInfo()))
+ )
if CompareType == EFI_COMPARE_TYPE.EQUAL:
- EObj = CIfrEqual(LineNo)
+ EObj = IfrEqual(LineNo)
+ Node.insertChild(
+ IfrTreeNode(EFI_IFR_EQUAL_OP, EObj, gFormPkg.StructToStream(EObj.GetInfo()))
+ )
if CompareType == EFI_COMPARE_TYPE.LESS_EQUAL:
- LEObj = CIfrLessEqual(LineNo)
+ LEObj = IfrLessEqual(LineNo)
+ Node.insertChild(
+ IfrTreeNode(EFI_IFR_LESS_EQUAL_OP, LEObj, gFormPkg.StructToStream(LEObj.GetInfo()))
+ )
if CompareType == EFI_COMPARE_TYPE.LESS_THAN:
- LTObj = CIfrLessThan(LineNo)
+ LTObj = IfrLessThan(LineNo)
+ Node.insertChild(
+ IfrTreeNode(EFI_IFR_LESS_THAN_OP, LTObj, gFormPkg.StructToStream(LTObj.GetInfo()))
+ )
if CompareType == EFI_COMPARE_TYPE.GREATER_EQUAL:
- GEObj = CIfrGreaterEqual(LineNo)
+ GEObj = IfrGreaterEqual(LineNo)
+ Node.insertChild(
+ IfrTreeNode(
+ EFI_IFR_GREATER_EQUAL_OP, GEObj, gFormPkg.StructToStream(GEObj.GetInfo())
+ )
+ )
if CompareType == EFI_COMPARE_TYPE.GREATER_THAN:
- GTObj = CIfrGreaterThan(LineNo)
+ GTObj = IfrGreaterThan(LineNo)
+ Node.insertChild(
+ IfrTreeNode(
+ EFI_IFR_GREATER_THAN_OP, GTObj, gFormPkg.StructToStream(GTObj.GetInfo())
+ )
+ )
ExpInfo.ExpOpCount += 2
-
+ return Node
# Visit a parse tree produced by VfrSyntaxParser#ideqvalExp.
- def visitIdeqvalExp(self, ctx:VfrSyntaxParser.IdeqvalExpContext):
+ def visitIdeqvalExp(self, ctx: VfrSyntaxParser.IdeqvalExpContext):
Line = ctx.start.line
self.visitChildren(ctx)
Mask = ctx.vfrQuestionDataFieldName().Mask
QId = ctx.vfrQuestionDataFieldName().QId
VarIdStr = ctx.vfrQuestionDataFieldName().VarIdStr
LineNo = ctx.vfrQuestionDataFieldName().Line
- ConstVal = self.__TransNum(ctx.Number())
+ ConstVal = self.TransNum(ctx.Number())
if ctx.Equal() != None:
if Mask == 0:
- EIVObj = CIfrEqIdVal(Line)
- self.__SaveOpHdrCond(EIVObj.GetHeader(), (ctx.ExpInfo.ExpOpCount == 0), Line)
+ EIVObj = IfrEqIdVal(Line)
+ self.SaveOpHdrCond(EIVObj.GetHeader(), (ctx.ExpInfo.ExpOpCount == 0), Line)
EIVObj.SetQuestionId(QId, VarIdStr, LineNo)
EIVObj.SetValue(ConstVal)
+ ctx.Node = IfrTreeNode(EFI_IFR_EQ_ID_VAL_OP, EIVObj)
ctx.ExpInfo.ExpOpCount += 1
else:
- self.IdEqValDoSpecial(ctx.ExpInfo, Line, QId, VarIdStr, Mask, ConstVal, EFI_COMPARE_TYPE.EQUAL)
+ ctx.Node = self.IdEqValDoSpecial(
+ ctx.ExpInfo, Line, QId, VarIdStr, Mask, ConstVal, EFI_COMPARE_TYPE.EQUAL
+ )
elif ctx.LessEqual() != None:
- self.IdEqValDoSpecial(ctx.ExpInfo, Line, QId, VarIdStr, Mask, ConstVal, EFI_COMPARE_TYPE.LESS_EQUAL)
+ ctx.Node = self.IdEqValDoSpecial(
+ ctx.ExpInfo, Line, QId, VarIdStr, Mask, ConstVal, EFI_COMPARE_TYPE.LESS_EQUAL
+ )
elif ctx.Less() != None:
- self.IdEqValDoSpecial(ctx.ExpInfo, Line, QId, VarIdStr, Mask, ConstVal, EFI_COMPARE_TYPE.LESS_THAN)
+ ctx.Node = self.IdEqValDoSpecial(
+ ctx.ExpInfo, Line, QId, VarIdStr, Mask, ConstVal, EFI_COMPARE_TYPE.LESS_THAN
+ )
elif ctx.GreaterEqual() != None:
- self.IdEqValDoSpecial(ctx.ExpInfo, Line, QId, VarIdStr, Mask, ConstVal, EFI_COMPARE_TYPE.GREATER_EQUAL)
+ ctx.Node = self.IdEqValDoSpecial(
+ ctx.ExpInfo, Line, QId, VarIdStr, Mask, ConstVal, EFI_COMPARE_TYPE.GREATER_EQUAL
+ )
elif ctx.Greater() != None:
- self.IdEqValDoSpecial(ctx.ExpInfo, Line, QId, VarIdStr, Mask, ConstVal, EFI_COMPARE_TYPE.GREATER_THAN)
+ ctx.Node = self.IdEqValDoSpecial(
+ ctx.ExpInfo, Line, QId, VarIdStr, Mask, ConstVal, EFI_COMPARE_TYPE.GREATER_THAN
+ )
- return ctx.ExpInfo
-
-
- def IdEqIdDoSpecial(self, ExpInfo, LineNo, QId1, VarIdStr1, Mask1, QId2, VarIdStr2, Mask2, CompareType):
+ return ctx.Node
- self.ConvertIdExpr(ExpInfo, LineNo, QId1, VarIdStr1, Mask1)
- self.ConvertIdExpr(ExpInfo, LineNo, QId2, VarIdStr2, Mask2)
+ def IdEqIdDoSpecial(
+ self, ExpInfo, LineNo, QId1, VarIdStr1, Mask1, QId2, VarIdStr2, Mask2, CompareType
+ ):
+ Node1 = self.ConvertIdExpr(ExpInfo, LineNo, QId1, VarIdStr1, Mask1)
+ Node2 = self.ConvertIdExpr(ExpInfo, LineNo, QId2, VarIdStr2, Mask2)
+ Node1.insertChild(Node2)
if CompareType == EFI_COMPARE_TYPE.EQUAL:
- EObj = CIfrEqual(LineNo)
+ EObj = IfrEqual(LineNo)
+ Node1.insertChild(
+ IfrTreeNode(EFI_IFR_EQUAL_OP, EObj, gFormPkg.StructToStream(EObj.GetInfo()))
+ )
if CompareType == EFI_COMPARE_TYPE.LESS_EQUAL:
- LEObj = CIfrLessEqual(LineNo)
+ LEObj = IfrLessEqual(LineNo)
+ Node1.insertChild(
+ IfrTreeNode(EFI_IFR_LESS_EQUAL_OP, LEObj, gFormPkg.StructToStream(LEObj.GetInfo()))
+ )
if CompareType == EFI_COMPARE_TYPE.LESS_THAN:
- LTObj = CIfrLessThan(LineNo)
+ LTObj = IfrLessThan(LineNo)
+ Node1.insertChild(
+ IfrTreeNode(EFI_IFR_LESS_THAN_OP, LTObj, gFormPkg.StructToStream(LTObj.GetInfo()))
+ )
if CompareType == EFI_COMPARE_TYPE.GREATER_EQUAL:
- GEObj = CIfrGreaterEqual(LineNo)
+ GEObj = IfrGreaterEqual(LineNo)
+ Node1.insertChild(
+ IfrTreeNode(
+ EFI_IFR_GREATER_EQUAL_OP, GEObj, gFormPkg.StructToStream(GEObj.GetInfo())
+ )
+ )
if CompareType == EFI_COMPARE_TYPE.GREATER_THAN:
- GTObj = CIfrGreaterThan(LineNo)
+ GTObj = IfrGreaterThan(LineNo)
+ Node1.insertChild(
+ IfrTreeNode(
+ EFI_IFR_GREATER_THAN_OP, GTObj, gFormPkg.StructToStream(GTObj.GetInfo())
+ )
+ )
ExpInfo.ExpOpCount += 1
-
+ return Node1
# Visit a parse tree produced by VfrSyntaxParser#ideqidExp.
- def visitIdeqidExp(self, ctx:VfrSyntaxParser.IdeqidExpContext):
+ def visitIdeqidExp(self, ctx: VfrSyntaxParser.IdeqidExpContext):
self.visitChildren(ctx)
Line = ctx.start.line
Mask1 = ctx.vfrQuestionDataFieldName(0).Mask
@@ -3865,41 +4679,101 @@ class VfrSyntaxVisitor(ParseTreeVisitor):
if ctx.Equal() != None:
if Mask1 & Mask2:
- self.IdEqIdDoSpecial(ctx.ExpInfo, Line, QId1, VarIdStr1, Mask1, QId2, VarIdStr2, Mask2, EFI_COMPARE_TYPE.EQUAL)
+ ctx.Node = self.IdEqIdDoSpecial(
+ ctx.ExpInfo,
+ Line,
+ QId1,
+ VarIdStr1,
+ Mask1,
+ QId2,
+ VarIdStr2,
+ Mask2,
+ EFI_COMPARE_TYPE.EQUAL,
+ )
else:
- EIIObj = CIfrEqIdId(Line)
- self.__SaveOpHdrCond(EIIObj.GetHeader(), (ctx.ExpInfo.ExpOpCount == 0), Line)
+ EIIObj = IfrEqIdId(Line)
+ self.SaveOpHdrCond(EIIObj.GetHeader(), (ctx.ExpInfo.ExpOpCount == 0), Line)
EIIObj.SetQuestionId1(QId1, VarIdStr1, LineNo1)
- EIIObj.SetQuestionId1(QId2, VarIdStr2, LineNo2)
+ EIIObj.SetQuestionId2(QId2, VarIdStr2, LineNo2)
+ ctx.Node = IfrTreeNode(EFI_IFR_EQ_ID_ID_OP, EIIObj)
ctx.ExpInfo.ExpOpCount += 1
elif ctx.LessEqual() != None:
- self.IdEqIdDoSpecial(ctx.ExpInfo, Line, QId1, VarIdStr1, Mask1, QId2, VarIdStr2, Mask2, EFI_COMPARE_TYPE.LESS_EQUAL)
+ ctx.Node = self.IdEqIdDoSpecial(
+ ctx.ExpInfo,
+ Line,
+ QId1,
+ VarIdStr1,
+ Mask1,
+ QId2,
+ VarIdStr2,
+ Mask2,
+ EFI_COMPARE_TYPE.LESS_EQUAL,
+ )
elif ctx.Less() != None:
- self.IdEqIdDoSpecial(ctx.ExpInfo, Line, QId1, VarIdStr1, Mask1, QId2, VarIdStr2, Mask2, EFI_COMPARE_TYPE.LESS_THAN)
+ ctx.Node = self.IdEqIdDoSpecial(
+ ctx.ExpInfo,
+ Line,
+ QId1,
+ VarIdStr1,
+ Mask1,
+ QId2,
+ VarIdStr2,
+ Mask2,
+ EFI_COMPARE_TYPE.LESS_THAN,
+ )
elif ctx.GreaterEqual() != None:
- self.IdEqIdDoSpecial(ctx.ExpInfo, Line, QId1, VarIdStr1, Mask1, QId2, VarIdStr2, Mask2, EFI_COMPARE_TYPE.GREATER_EQUAL)
+ ctx.Node = self.IdEqIdDoSpecial(
+ ctx.ExpInfo,
+ Line,
+ QId1,
+ VarIdStr1,
+ Mask1,
+ QId2,
+ VarIdStr2,
+ Mask2,
+ EFI_COMPARE_TYPE.GREATER_EQUAL,
+ )
elif ctx.Greater() != None:
- self.IdEqIdDoSpecial(ctx.ExpInfo, Line, QId1, VarIdStr1, Mask1, QId2, VarIdStr2, Mask2, EFI_COMPARE_TYPE.GREATER_THAN)
- return ctx.ExpInfo
-
+ ctx.Node = self.IdEqIdDoSpecial(
+ ctx.ExpInfo,
+ Line,
+ QId1,
+ VarIdStr1,
+ Mask1,
+ QId2,
+ VarIdStr2,
+ Mask2,
+ EFI_COMPARE_TYPE.GREATER_THAN,
+ )
+ return ctx.Node
def IdEqListDoSpecial(self, ExpInfo, LineNo, QId, VarIdStr, Mask, ListLen, ValueList):
if ListLen == 0:
- return
+ return None
- self.IdEqValDoSpecial(ExpInfo, LineNo, QId, VarIdStr, Mask, ValueList[0], EFI_COMPARE_TYPE.EQUAL)
+ Node = self.IdEqValDoSpecial(
+ ExpInfo, LineNo, QId, VarIdStr, Mask, ValueList[0], EFI_COMPARE_TYPE.EQUAL
+ )
for i in range(1, ListLen):
- self.IdEqValDoSpecial(ExpInfo, LineNo, QId, VarIdStr, Mask, ValueList[i], EFI_COMPARE_TYPE.EQUAL)
- OObj = CIfrOr(LineNo)
+ Node.insertChild(
+ self.IdEqValDoSpecial(
+ ExpInfo, LineNo, QId, VarIdStr, Mask, ValueList[i], EFI_COMPARE_TYPE.EQUAL
+ )
+ )
+ OObj = IfrOr(LineNo)
+ Node.insertChild(
+ IfrTreeNode(EFI_IFR_OR_OP, OObj, gFormPkg.StructToStream(OObj.GetInfo()))
+ )
ExpInfo.ExpOpCount += 1
+ return Node
# Visit a parse tree produced by VfrSyntaxParser#ideqvallistExp.
- def visitIdeqvallistExp(self, ctx:VfrSyntaxParser.IdeqvallistExpContext):
+ def visitIdeqvallistExp(self, ctx: VfrSyntaxParser.IdeqvallistExpContext):
self.visitChildren(ctx)
Line = ctx.start.line
Mask = ctx.vfrQuestionDataFieldName().Mask
@@ -3908,143 +4782,150 @@ class VfrSyntaxVisitor(ParseTreeVisitor):
LineNo = ctx.vfrQuestionDataFieldName().Line
ValueList = []
for i in range(0, len(ctx.Number())):
- ValueList.append(self.__TransNum(ctx.Number(i)))
+ ValueList.append(self.TransNum(ctx.Number(i)))
ListLen = len(ValueList)
if Mask != 0:
- self.IdEqListDoSpecial(ctx.ExpInfo, LineNo, QId, VarIdStr, Mask, ListLen, ValueList)
+ ctx.Node = self.IdEqListDoSpecial(
+ ctx.ExpInfo, LineNo, QId, VarIdStr, Mask, ListLen, ValueList
+ )
else:
- EILObj = CIfrEqIdList(Line, ListLen)
+ EILObj = IfrEqIdList(Line, ListLen)
if QId != EFI_QUESTION_ID_INVALID:
EILObj.SetQuestionId(QId, VarIdStr, LineNo)
EILObj.SetListLength(ListLen)
EILObj.SetValueList(ValueList)
- self.__SaveOpHdrCond(EILObj.GetHeader(), (ctx.ExpInfo.ExpOpCount == 0), Line)
+ self.SaveOpHdrCond(EILObj.GetHeader(), (ctx.ExpInfo.ExpOpCount == 0), Line)
if QId == EFI_QUESTION_ID_INVALID:
EILObj.SetQuestionId(QId, VarIdStr, LineNo)
+
+ ctx.Node = IfrTreeNode(EFI_IFR_EQ_ID_VAL_LIST_OP, EILObj)
ctx.ExpInfo.ExpOpCount += 1
- return ctx.ExpInfo
+ return ctx.Node
# Visit a parse tree produced by VfrSyntaxParser#vfrQuestionDataFieldNameRule1.
- def visitVfrQuestionDataFieldNameRule1(self, ctx:VfrSyntaxParser.VfrQuestionDataFieldNameRule1Context):
+ def visitVfrQuestionDataFieldNameRule1(
+ self, ctx: VfrSyntaxParser.VfrQuestionDataFieldNameRule1Context
+ ):
ctx.Line = ctx.start.line
self.visitChildren(ctx)
ctx.VarIdStr += ctx.SN1.text
- ctx.VarIdStr += '['
+ ctx.VarIdStr += "["
ctx.VarIdStr += ctx.I.text
- ctx.VarIdStr += ']'
- ctx.QId, ctx.Mask, _ = self.__CVfrQuestionDB.GetQuestionId(None, ctx.VarIdStr)
- if self.__ConstantOnlyInExpression:
- self.__ErrorHandler(VfrReturnCode.VFR_RETURN_CONSTANT_ONLY, ctx.SN1.line)
+ ctx.VarIdStr += "]"
+ ctx.QId, ctx.Mask, _ = self.VfrQuestionDB.GetQuestionId(None, ctx.VarIdStr)
+ if self.ConstantOnlyInExpression:
+ self.ErrorHandler(VfrReturnCode.VFR_RETURN_CONSTANT_ONLY, ctx.SN1.line)
return ctx.QId, ctx.Mask, ctx.VarIdStr
-
# Visit a parse tree produced by VfrSyntaxParser#vfrQuestionDataFieldNameRule2.
- def visitVfrQuestionDataFieldNameRule2(self, ctx:VfrSyntaxParser.VfrQuestionDataFieldNameRule2Context):
+ def visitVfrQuestionDataFieldNameRule2(
+ self, ctx: VfrSyntaxParser.VfrQuestionDataFieldNameRule2Context
+ ):
ctx.Line = ctx.start.line
self.visitChildren(ctx)
ctx.VarIdStr += ctx.SN2.text
for i in range(0, len(ctx.arrayName())):
- ctx.VarIdStr += '.'
- if self.__ConstantOnlyInExpression:
- self.__ErrorHandler(VfrReturnCode.VFR_RETURN_CONSTANT_ONLY, ctx.SN2.line)
+ ctx.VarIdStr += "."
+ if self.ConstantOnlyInExpression:
+ self.ErrorHandler(VfrReturnCode.VFR_RETURN_CONSTANT_ONLY, ctx.SN2.line)
ctx.VarIdStr += ctx.arrayName(i).SubStrZ
- ctx.QId, ctx.Mask, _ = self.__CVfrQuestionDB.GetQuestionId(None, ctx.VarIdStr)
+ ctx.QId, ctx.Mask, _ = self.VfrQuestionDB.GetQuestionId(None, ctx.VarIdStr)
return ctx.QId, ctx.Mask, ctx.VarIdStr
-
# Visit a parse tree produced by VfrSyntaxParser#arrayName.
- def visitArrayName(self, ctx:VfrSyntaxParser.ArrayNameContext):
-
+ def visitArrayName(self, ctx: VfrSyntaxParser.ArrayNameContext):
self.visitChildren(ctx)
- ctx.SubStr += self.__TransId(ctx.StringIdentifier())
- ctx.SubStrZ += self.__TransId(ctx.StringIdentifier())
+ ctx.SubStr += self.TransId(ctx.StringIdentifier())
+ ctx.SubStrZ += self.TransId(ctx.StringIdentifier())
if ctx.N != None:
- Idx = self.__TransNum(ctx.N.text)
+ Idx = self.TransNum(ctx.N.text)
if Idx > 0:
- ctx.SubStr += '['
+ ctx.SubStr += "["
ctx.SubStr += str(Idx)
- ctx.SubStr += ']'
+ ctx.SubStr += "]"
- ctx.SubStrZ += '['
+ ctx.SubStrZ += "["
ctx.SubStrZ += str(Idx)
- ctx.SubStrZ += ']'
+ ctx.SubStrZ += "]"
return ctx.SubStr, ctx.SubStrZ
-
# Visit a parse tree produced by VfrSyntaxParser#questionref1Exp.
- def visitQuestionref1Exp(self, ctx:VfrSyntaxParser.Questionref1ExpContext):
- Line = ctx.start.line #
- QName = None #
+ def visitQuestionref1Exp(self, ctx: VfrSyntaxParser.Questionref1ExpContext):
+ Line = ctx.start.line #
+ QName = None #
QId = EFI_QUESTION_ID_INVALID
self.visitChildren(ctx)
if ctx.StringIdentifier() != None:
- QName = self.__TransId(ctx.StringIdentifier())
- QId, _ , _ = self.__CVfrQuestionDB.GetQuestionId(QName)
+ QName = self.TransId(ctx.StringIdentifier())
+ QId, _, _ = self.VfrQuestionDB.GetQuestionId(QName)
elif ctx.Number() != None:
- QId = self.__TransNum(ctx.Number())
+ QId = self.TransNum(ctx.Number())
+
+ QR1Obj = IfrQuestionRef1(Line)
+ self.SaveOpHdrCond(QR1Obj.GetHeader(), (ctx.ExpInfo.ExpOpCount == 0), Line)
- QR1Obj = CIfrQuestionRef1(Line)
- self.__SaveOpHdrCond(QR1Obj.GetHeader(), (ctx.ExpInfo.ExpOpCount == 0), Line)
QR1Obj.SetQuestionId(QId, QName, Line)
+ ctx.Node.Data = QR1Obj
ctx.ExpInfo.ExpOpCount += 1
- return ctx.ExpInfo
-
+ return ctx.Node
# Visit a parse tree produced by VfrSyntaxParser#rulerefExp.
- def visitRulerefExp(self, ctx:VfrSyntaxParser.RulerefExpContext):
+ def visitRulerefExp(self, ctx: VfrSyntaxParser.RulerefExpContext):
Line = ctx.start.line
self.visitChildren(ctx)
- RRObj = CIfrRuleRef(Line)
- self.__SaveOpHdrCond(RRObj.GetHeader(), (ctx.ExpInfo.ExpOpCount == 0), Line)
- RuleId = self.__CVfrRulesDB.GetRuleId(self.__TransId(ctx.StringIdentifier()))
+ RRObj = IfrRuleRef(Line)
+ self.SaveOpHdrCond(RRObj.GetHeader(), (ctx.ExpInfo.ExpOpCount == 0), Line)
+ RuleId = self.VfrRulesDB.GetRuleId(self.TransId(ctx.StringIdentifier()))
RRObj.SetRuleId(RuleId)
+ ctx.Node.Data = RRObj
ctx.ExpInfo.ExpOpCount += 1
- return ctx.ExpInfo
-
+ return ctx.Node
# Visit a parse tree produced by VfrSyntaxParser#stringref1Exp.
- def visitStringref1Exp(self, ctx:VfrSyntaxParser.Stringref1ExpContext):
+ def visitStringref1Exp(self, ctx: VfrSyntaxParser.Stringref1ExpContext):
Line = ctx.start.line
self.visitChildren(ctx)
- RefStringId = self.__TransNum(ctx.Number())
- SR1Obj = CIfrStringRef1(Line)
- self.__SaveOpHdrCond(SR1Obj.GetHeader(), (ctx.ExpInfo.ExpOpCount == 0), Line)
+ RefStringId = self.TransNum(ctx.Number())
+ SR1Obj = IfrStringRef1(Line)
+ self.SaveOpHdrCond(SR1Obj.GetHeader(), (ctx.ExpInfo.ExpOpCount == 0), Line)
SR1Obj.SetStringId(RefStringId)
+ ctx.Node.Data = SR1Obj
ctx.ExpInfo.ExpOpCount += 1
- return ctx.ExpInfo
-
+ return ctx.Node
# Visit a parse tree produced by VfrSyntaxParser#pushthisExp.
- def visitPushthisExp(self, ctx:VfrSyntaxParser.PushthisExpContext):
+ def visitPushthisExp(self, ctx: VfrSyntaxParser.PushthisExpContext):
Line = ctx.start.line
self.visitChildren(ctx)
- TObj = CIfrThis(Line)
- self.__SaveOpHdrCond(TObj.GetHeader(), (ctx.ExpInfo.ExpOpCount == 0), Line)
+ TObj = IfrThis(Line)
+ self.SaveOpHdrCond(TObj.GetHeader(), (ctx.ExpInfo.ExpOpCount == 0), Line)
+ ctx.Node.Data = TObj
ctx.ExpInfo.ExpOpCount += 1
- return ctx.ExpInfo
+ return ctx.Node
# Visit a parse tree produced by VfrSyntaxParser#securityExp.
- def visitSecurityExp(self, ctx:VfrSyntaxParser.SecurityExpContext):
+ def visitSecurityExp(self, ctx: VfrSyntaxParser.SecurityExpContext):
Line = ctx.start.line
self.visitChildren(ctx)
- SObj = CIfrSecurity(Line)
- self.__SaveOpHdrCond(SObj.GetHeader(), (ctx.ExpInfo.ExpOpCount == 0), Line)
+ SObj = IfrSecurity(Line)
+ self.SaveOpHdrCond(SObj.GetHeader(), (ctx.ExpInfo.ExpOpCount == 0), Line)
SObj.SetPermissions(ctx.guidDefinition().Guid)
+ ctx.Node.Data = SObj
ctx.ExpInfo.ExpOpCount += 1
return ctx.ExpInfo
# Visit a parse tree produced by VfrSyntaxParser#numericVarStoreType.
- def visitNumericVarStoreType(self, ctx:VfrSyntaxParser.NumericVarStoreTypeContext):
+ def visitNumericVarStoreType(self, ctx: VfrSyntaxParser.NumericVarStoreTypeContext):
self.visitChildren(ctx)
if ctx.NumericSizeOne() != None:
ctx.VarType = EFI_IFR_NUMERIC_SIZE_1
@@ -4057,17 +4938,26 @@ class VfrSyntaxVisitor(ParseTreeVisitor):
return ctx.VarType
-
# Visit a parse tree produced by VfrSyntaxParser#getExp.
- def visitGetExp(self, ctx:VfrSyntaxParser.GetExpContext):
+ def visitGetExp(self, ctx: VfrSyntaxParser.GetExpContext):
Line = ctx.start.line
self.visitChildren(ctx)
if ctx.BaseInfo.VarStoreId == 0:
# support Date/Time question
VarIdStr = ctx.vfrStorageVarId().VarIdStr
- QId, Mask, QType = self.__CVfrQuestionDB.GetQuestionId(None, VarIdStr, EFI_QUESION_TYPE.QUESTION_NORMAL)
- if (QId == EFI_QUESTION_ID_INVALID) or (Mask == 0) or (QType == EFI_QUESION_TYPE.QUESTION_NORMAL):
- self.__ErrorHandler(VfrReturnCode.VFR_RETURN_UNSUPPORTED, Line, "Get/Set opcode can't get the enough varstore information")
+ QId, Mask, QType = self.VfrQuestionDB.GetQuestionId(
+ None, VarIdStr, EFI_QUESION_TYPE.QUESTION_NORMAL
+ )
+ if (
+ (QId == EFI_QUESTION_ID_INVALID)
+ or (Mask == 0)
+ or (QType == EFI_QUESION_TYPE.QUESTION_NORMAL)
+ ):
+ self.ErrorHandler(
+ VfrReturnCode.VFR_RETURN_UNSUPPORTED,
+ Line,
+ "Get/Set opcode can't get the enough varstore information",
+ )
if QType == EFI_QUESION_TYPE.QUESTION_DATE:
ctx.BaseInfo.VarType = EFI_IFR_TYPE_DATE
elif QType == EFI_QUESION_TYPE.QUESTION_TIME:
@@ -4084,205 +4974,275 @@ class VfrSyntaxVisitor(ParseTreeVisitor):
elif Mask == TIME_SECOND_BITMASK:
ctx.BaseInfo.VarOffset = 2
else:
- self.__ErrorHandler(VfrReturnCode.VFR_RETURN_UNSUPPORTED, Line, "Get/Set opcode can't get the enough varstore information")
+ self.ErrorHandler(
+ VfrReturnCode.VFR_RETURN_UNSUPPORTED,
+ Line,
+ "Get/Set opcode can't get the enough varstore information",
+ )
else:
VarType = EFI_IFR_TYPE_UNDEFINED
if ctx.FLAGS() != None:
VarType = ctx.numericVarStoreType().VarType
- if (gCVfrDataStorage.GetVarStoreType(ctx.BaseInfo.VarStoreId) == EFI_VFR_VARSTORE_TYPE.EFI_VFR_VARSTORE_NAME) and (VarType == EFI_IFR_TYPE_UNDEFINED):
- self.__ErrorHandler(VfrReturnCode.VFR_RETURN_UNSUPPORTED, Line, "Get/Set opcode don't support name string")
+ if (
+ gVfrDataStorage.GetVarStoreType(ctx.BaseInfo.VarStoreId)
+ == EFI_VFR_VARSTORE_TYPE.EFI_VFR_VARSTORE_NAME
+ ) and (VarType == EFI_IFR_TYPE_UNDEFINED):
+ self.ErrorHandler(
+ VfrReturnCode.VFR_RETURN_UNSUPPORTED,
+ Line,
+ "Get/Set opcode don't support name string",
+ )
if VarType != EFI_IFR_TYPE_UNDEFINED:
ctx.BaseInfo.VarType = VarType
- Size, ReturnCode = gCVfrVarDataTypeDB.GetDataTypeSizeByDataType(ctx.BaseInfo.VarType)
- self.__ErrorHandler(ReturnCode, Line, "Get/Set opcode can't get var type size")
+ Size, ReturnCode = gVfrVarDataTypeDB.GetDataTypeSizeByDataType(ctx.BaseInfo.VarType)
+ self.ErrorHandler(ReturnCode, Line, "Get/Set opcode can't get var type size")
ctx.BaseInfo.VarTotalSize = Size
- Size, ReturnCode = gCVfrVarDataTypeDB.GetDataTypeSizeByDataType(ctx.BaseInfo.VarType)
- self.__ErrorHandler(ReturnCode, Line, "Get/Set opcode can't get var type size")
+ Size, ReturnCode = gVfrVarDataTypeDB.GetDataTypeSizeByDataType(ctx.BaseInfo.VarType)
+ self.ErrorHandler(ReturnCode, Line, "Get/Set opcode can't get var type size")
if Size != ctx.BaseInfo.VarTotalSize:
- self.__ErrorHandler(VfrReturnCode.VFR_RETURN_UNSUPPORTED, Line, "Get/Set opcode don't support data array")
-
- ctx.GObj = CIfrGet(Line)
- self.__SaveOpHdrCond(ctx.GObj.GetHeader(), (ctx.ExpInfo.ExpOpCount == 0), Line)
- ctx.GObj.SetVarInfo(ctx.BaseInfo)
+ self.ErrorHandler(
+ VfrReturnCode.VFR_RETURN_UNSUPPORTED,
+ Line,
+ "Get/Set opcode don't support data array",
+ )
+
+ GObj = IfrGet(Line)
+ self.SaveOpHdrCond(GObj.GetHeader(), (ctx.ExpInfo.ExpOpCount == 0), Line)
+ GObj.SetVarInfo(ctx.BaseInfo)
+ ctx.Node.Data = GObj
ctx.ExpInfo.ExpOpCount += 1
- return ctx.GObj
-
+ return ctx.Node
# Visit a parse tree produced by VfrSyntaxParser#vfrExpressionConstant.
- def visitVfrExpressionConstant(self, ctx:VfrSyntaxParser.VfrExpressionConstantContext):
+ def visitVfrExpressionConstant(self, ctx: VfrSyntaxParser.VfrExpressionConstantContext):
Line = ctx.start.line
self.visitChildren(ctx)
if ctx.TrueSymbol() != None:
- TObj = CIfrTrue(Line)
- self.__SaveOpHdrCond(TObj.GetHeader(), (ctx.ExpInfo.ExpOpCount == 0), Line)
+ TObj = IfrTrue(Line)
+ self.SaveOpHdrCond(TObj.GetHeader(), (ctx.ExpInfo.ExpOpCount == 0), Line)
+ ctx.Node = IfrTreeNode(EFI_IFR_TRUE_OP, TObj)
ctx.ExpInfo.ExpOpCount += 1
if ctx.FalseSymbol() != None:
- FObj = CIfrFalse(Line)
- self.__SaveOpHdrCond(FObj.GetHeader(), (ctx.ExpInfo.ExpOpCount == 0), Line)
+ FObj = IfrFalse(Line)
+ self.SaveOpHdrCond(FObj.GetHeader(), (ctx.ExpInfo.ExpOpCount == 0), Line)
+ ctx.Node = IfrTreeNode(EFI_IFR_FALSE_OP, FObj)
ctx.ExpInfo.ExpOpCount += 1
if ctx.One() != None:
- OObj = CIfrOne(Line)
- self.__SaveOpHdrCond(OObj.GetHeader(), (ctx.ExpInfo.ExpOpCount == 0), Line)
+ OObj = IfrOne(Line)
+ self.SaveOpHdrCond(OObj.GetHeader(), (ctx.ExpInfo.ExpOpCount == 0), Line)
+ ctx.Node = IfrTreeNode(EFI_IFR_ONE_OP, OObj)
ctx.ExpInfo.ExpOpCount += 1
if ctx.Ones() != None:
- OObj = CIfrOnes(Line)
- self.__SaveOpHdrCond(OObj.GetHeader(), (ctx.ExpInfo.ExpOpCount == 0), Line)
+ OObj = IfrOnes(Line)
+ self.SaveOpHdrCond(OObj.GetHeader(), (ctx.ExpInfo.ExpOpCount == 0), Line)
+ ctx.Node = IfrTreeNode(EFI_IFR_ONES_OP, OObj)
ctx.ExpInfo.ExpOpCount += 1
if ctx.Zero() != None:
- ZObj = CIfrZero(Line)
- self.__SaveOpHdrCond(ZObj.GetHeader(), (ctx.ExpInfo.ExpOpCount == 0), Line)
+ ZObj = IfrZero(Line)
+ self.SaveOpHdrCond(ZObj.GetHeader(), (ctx.ExpInfo.ExpOpCount == 0), Line)
+ ctx.Node = IfrTreeNode(EFI_IFR_ZERO_OP, ZObj)
ctx.ExpInfo.ExpOpCount += 1
if ctx.Undefined() != None:
- UObj = CIfrUndefined(Line)
- self.__SaveOpHdrCond(UObj.GetHeader(), (ctx.ExpInfo.ExpOpCount == 0), Line)
+ UObj = IfrUndefined(Line)
+ self.SaveOpHdrCond(UObj.GetHeader(), (ctx.ExpInfo.ExpOpCount == 0), Line)
+ ctx.Node = IfrTreeNode(EFI_IFR_UNDEFINED_OP, UObj)
ctx.ExpInfo.ExpOpCount += 1
if ctx.Version() != None:
- VObj = CIfrVersion(Line)
- self.__SaveOpHdrCond(VObj.GetHeader(), (ctx.ExpInfo.ExpOpCount == 0), Line)
+ VObj = IfrVersion(Line)
+ self.SaveOpHdrCond(VObj.GetHeader(), (ctx.ExpInfo.ExpOpCount == 0), Line)
+ ctx.Node = IfrTreeNode(EFI_IFR_VERSION_OP, VObj)
ctx.ExpInfo.ExpOpCount += 1
if ctx.Number() != None:
- U64Obj = CIfrUint64(Line)
- U64Obj.SetValue(self.__TransNum(ctx.Number()))
- self.__SaveOpHdrCond(U64Obj.GetHeader(), (ctx.ExpInfo.ExpOpCount == 0), Line)
+ U64Obj = IfrUint64(Line)
+ U64Obj.SetValue(self.TransNum(ctx.Number()))
+ self.SaveOpHdrCond(U64Obj.GetHeader(), (ctx.ExpInfo.ExpOpCount == 0), Line)
+ ctx.Node = IfrTreeNode(EFI_IFR_UINT64_OP, U64Obj)
ctx.ExpInfo.ExpOpCount += 1
- return ctx.ExpInfo
-
+ return ctx.Node
# Visit a parse tree produced by VfrSyntaxParser#vfrExpressionUnaryOp.
- def visitVfrExpressionUnaryOp(self, ctx:VfrSyntaxParser.VfrExpressionUnaryOpContext):
- return self.visitChildren(ctx)
-
+ def visitVfrExpressionUnaryOp(self, ctx: VfrSyntaxParser.VfrExpressionUnaryOpContext):
+ self.visitChildren(ctx)
+ if ctx.lengthExp() != None:
+ ctx.Nodes = ctx.lengthExp().Nodes
+ if ctx.bitwisenotExp() != None:
+ ctx.Nodes = ctx.bitwisenotExp().Nodes
+ if ctx.question23refExp() != None:
+ ctx.Nodes = ctx.question23refExp().Nodes
+ if ctx.stringref2Exp() != None:
+ ctx.Nodes = ctx.stringref2Exp().Nodes
+ if ctx.toboolExp() != None:
+ ctx.Nodes = ctx.toboolExp().Nodes
+ if ctx.tostringExp() != None:
+ ctx.Nodes = ctx.tostringExp().Nodes
+ if ctx.unintExp() != None:
+ ctx.Nodes = ctx.unintExp().Nodes
+ if ctx.toupperExp() != None:
+ ctx.Nodes = ctx.toupperExp().Nodes
+ if ctx.tolwerExp() != None:
+ ctx.Nodes = ctx.tolwerExp().Nodes
+ if ctx.setExp() != None:
+ ctx.Nodes = ctx.setExp().Nodes
+ return ctx.Nodes
# Visit a parse tree produced by VfrSyntaxParser#lengthExp.
- def visitLengthExp(self, ctx:VfrSyntaxParser.LengthExpContext):
+ def visitLengthExp(self, ctx: VfrSyntaxParser.LengthExpContext):
Line = ctx.start.line
self.visitChildren(ctx)
- ctx.LObj = CIfrLength(Line)
+ LObj = IfrLength(Line)
+ Node = IfrTreeNode(EFI_IFR_LENGTH_OP, LObj, gFormPkg.StructToStream(LObj.GetInfo()))
+ ctx.Nodes.append(Node)
ctx.ExpInfo.ExpOpCount += 1
- return ctx.LObj
+ return ctx.Nodes
# Visit a parse tree produced by VfrSyntaxParser#bitwisenotExp.
- def visitBitwisenotExp(self, ctx:VfrSyntaxParser.BitwisenotExpContext):
+ def visitBitwisenotExp(self, ctx: VfrSyntaxParser.BitwisenotExpContext):
Line = ctx.start.line
self.visitChildren(ctx)
- ctx.BWNObj = CIfrBitWiseNot(Line)
+ BWNObj = IfrBitWiseNot(Line)
+ Node = IfrTreeNode(
+ EFI_IFR_BITWISE_NOT_OP, BWNObj, gFormPkg.StructToStream(BWNObj.GetInfo())
+ )
+ ctx.Nodes.append(Node)
ctx.ExpInfo.ExpOpCount += 1
- return ctx.BWNObj
-
+ return ctx.Nodes
# Visit a parse tree produced by VfrSyntaxParser#question23refExp.
- def visitQuestion23refExp(self, ctx:VfrSyntaxParser.Question23refExpContext):
+ def visitQuestion23refExp(self, ctx: VfrSyntaxParser.Question23refExpContext):
Line = ctx.start.line
Type = 0x1
DevicePath = EFI_STRING_ID_INVALID
self.visitChildren(ctx)
if ctx.DevicePath() != None:
Type = 0x2
- DevicePath = self.__TransNum(ctx.Number())
+ DevicePath = self.TransNum(ctx.Number())
if ctx.Uuid() != None:
Type = 0x3
if Type == 0x1:
- QR2Obj = CIfrQuestionRef2(Line)
- self.__SaveOpHdrCond(QR2Obj.GetHeader(), (ctx.ExpInfo.ExpOpCount == 0), Line)
+ QR2Obj = IfrQuestionRef2(Line)
+ self.SaveOpHdrCond(QR2Obj.GetHeader(), (ctx.ExpInfo.ExpOpCount == 0), Line)
+ Node = IfrTreeNode(EFI_IFR_QUESTION_REF2_OP, QR2Obj)
+ ctx.Nodes.append(Node)
if Type == 0x2:
- QR3_2Obj = CIfrQuestionRef3_2(Line)
- self.__SaveOpHdrCond(QR3_2Obj.GetHeader(), (ctx.ExpInfo.ExpOpCount == 0), Line)
+ QR3_2Obj = IfrQuestionRef3_2(Line)
+ self.SaveOpHdrCond(QR3_2Obj.GetHeader(), (ctx.ExpInfo.ExpOpCount == 0), Line)
QR3_2Obj.SetDevicePath(DevicePath)
+ Node = IfrTreeNode(EFI_IFR_QUESTION_REF3_OP, QR3_2Obj)
+ ctx.Nodes.append(Node)
if Type == 0x3:
- QR3_3Obj = CIfrQuestionRef3_3(Line)
- self.__SaveOpHdrCond(QR3_3Obj.GetHeader(), (ctx.ExpInfo.ExpOpCount == 0), Line)
+ QR3_3Obj = IfrQuestionRef3_3(Line)
+ self.SaveOpHdrCond(QR3_3Obj.GetHeader(), (ctx.ExpInfo.ExpOpCount == 0), Line)
QR3_3Obj.SetDevicePath(DevicePath)
QR3_3Obj.SetGuid(ctx.guidDefinition().Guid)
+ Node = IfrTreeNode(EFI_IFR_QUESTION_REF3_OP, QR3_3Obj)
+ ctx.Nodes.append(Node)
ctx.ExpInfo.ExpOpCount += 1
-
- return ctx.ExpInfo
-
+ return ctx.Nodes
# Visit a parse tree produced by VfrSyntaxParser#stringref2Exp.
- def visitStringref2Exp(self, ctx:VfrSyntaxParser.Stringref2ExpContext):
+ def visitStringref2Exp(self, ctx: VfrSyntaxParser.Stringref2ExpContext):
Line = ctx.start.line
self.visitChildren(ctx)
- ctx.SR2Obj = CIfrStringRef2(Line)
+ SR2Obj = IfrStringRef2(Line)
+ Node = IfrTreeNode(
+ EFI_IFR_STRING_REF2_OP, SR2Obj, gFormPkg.StructToStream(SR2Obj.GetInfo())
+ )
+ ctx.Nodes.append(Node)
ctx.ExpInfo.ExpOpCount += 1
- return ctx.SR2Obj
-
+ return ctx.Nodes
# Visit a parse tree produced by VfrSyntaxParser#toboolExp.
- def visitToboolExp(self, ctx:VfrSyntaxParser.ToboolExpContext):
+ def visitToboolExp(self, ctx: VfrSyntaxParser.ToboolExpContext):
Line = ctx.start.line
self.visitChildren(ctx)
- ctx.TBObj = CIfrToBoolean(Line)
+ TBObj = IfrToBoolean(Line)
+ Node = IfrTreeNode(EFI_IFR_TO_BOOLEAN_OP, TBObj, gFormPkg.StructToStream(TBObj.GetInfo()))
+ ctx.Nodes.append(Node)
ctx.ExpInfo.ExpOpCount += 1
- return ctx.TBObj
+ return ctx.Nodes
# Visit a parse tree produced by VfrSyntaxParser#tostringExp.
- def visitTostringExp(self, ctx:VfrSyntaxParser.TostringExpContext):
+ def visitTostringExp(self, ctx: VfrSyntaxParser.TostringExpContext):
Line = ctx.start.line
self.visitChildren(ctx)
- ctx.TSObj = CIfrToString(Line)
- Fmt = self.__TransNum(ctx.Number())
- ctx.TSObj.SetFormat(Fmt)
+ TSObj = IfrToString(Line)
+ Fmt = self.TransNum(ctx.Number())
+ TSObj.SetFormat(Fmt)
+ Node = IfrTreeNode(EFI_IFR_TO_STRING_OP, TSObj, gFormPkg.StructToStream(TSObj.GetInfo()))
+ ctx.Nodes.append(Node)
ctx.ExpInfo.ExpOpCount += 1
- return ctx.TSObj
-
+ return ctx.Nodes
# Visit a parse tree produced by VfrSyntaxParser#unintExp.
- def visitUnintExp(self, ctx:VfrSyntaxParser.UnintExpContext):
+ def visitUnintExp(self, ctx: VfrSyntaxParser.UnintExpContext):
Line = ctx.start.line
self.visitChildren(ctx)
- ctx.TUObj = CIfrToUint(Line)
+ TUObj = IfrToUint(Line)
+ Node = IfrTreeNode(EFI_IFR_TO_UINT_OP, TUObj, gFormPkg.StructToStream(TUObj.GetInfo()))
+ ctx.Nodes.append(Node)
ctx.ExpInfo.ExpOpCount += 1
- return ctx.TUObj
-
+ return ctx.Nodes
# Visit a parse tree produced by VfrSyntaxParser#toupperExp.
- def visitToupperExp(self, ctx:VfrSyntaxParser.ToupperExpContext):
+ def visitToupperExp(self, ctx: VfrSyntaxParser.ToupperExpContext):
Line = ctx.start.line
self.visitChildren(ctx)
- ctx.TUObj = CIfrToUpper(Line)
+ TUObj = IfrToUpper(Line)
+ Node = IfrTreeNode(EFI_IFR_TO_UPPER_OP, TUObj, gFormPkg.StructToStream(TUObj.GetInfo()))
+ ctx.Nodes.append(Node)
ctx.ExpInfo.ExpOpCount += 1
- return ctx.TUObj
-
+ return ctx.Nodes
# Visit a parse tree produced by VfrSyntaxParser#tolwerExp.
- def visitTolwerExp(self, ctx:VfrSyntaxParser.TolwerExpContext):
+ def visitTolwerExp(self, ctx: VfrSyntaxParser.TolwerExpContext):
Line = ctx.start.line
self.visitChildren(ctx)
- ctx.TLObj = CIfrToLower(Line)
+ TLObj = IfrToLower(Line)
+ Node = IfrTreeNode(EFI_IFR_TO_LOWER_OP, TLObj, gFormPkg.StructToStream(TLObj.GetInfo()))
+ ctx.Nodes.append(Node)
ctx.ExpInfo.ExpOpCount += 1
- return ctx.TLObj
-
+ return ctx.Nodes
# Visit a parse tree produced by VfrSyntaxParser#setExp.
- def visitSetExp(self, ctx:VfrSyntaxParser.SetExpContext):
+ def visitSetExp(self, ctx: VfrSyntaxParser.SetExpContext):
Line = ctx.start.line
self.visitChildren(ctx)
if ctx.BaseInfo.VarStoreId == 0:
# support Date/Time question
VarIdStr = ctx.vfrStorageVarId().VarIdStr
- QId, Mask, QType = self.__CVfrQuestionDB.GetQuestionId(None, VarIdStr, EFI_QUESION_TYPE.QUESTION_NORMAL)
- if (QId == EFI_QUESTION_ID_INVALID) or (Mask == 0) or (QType == EFI_QUESION_TYPE.QUESTION_NORMAL):
- self.__ErrorHandler(VfrReturnCode.VFR_RETURN_UNSUPPORTED, Line, "Get/Set opcode can't get the enough varstore information")
+ QId, Mask, QType = self.VfrQuestionDB.GetQuestionId(
+ None, VarIdStr, EFI_QUESION_TYPE.QUESTION_NORMAL
+ )
+ if (
+ (QId == EFI_QUESTION_ID_INVALID)
+ or (Mask == 0)
+ or (QType == EFI_QUESION_TYPE.QUESTION_NORMAL)
+ ):
+ self.ErrorHandler(
+ VfrReturnCode.VFR_RETURN_UNSUPPORTED,
+ Line,
+ "Get/Set opcode can't get the enough varstore information",
+ )
if QType == EFI_QUESION_TYPE.QUESTION_DATE:
ctx.BaseInfo.VarType = EFI_IFR_TYPE_DATE
elif QType == EFI_QUESION_TYPE.QUESTION_TIME:
@@ -4299,66 +5259,91 @@ class VfrSyntaxVisitor(ParseTreeVisitor):
elif Mask == TIME_SECOND_BITMASK:
ctx.BaseInfo.VarOffset = 2
else:
- self.__ErrorHandler(VfrReturnCode.VFR_RETURN_UNSUPPORTED, Line, "Get/Set opcode can't get the enough varstore information")
+ self.ErrorHandler(
+ VfrReturnCode.VFR_RETURN_UNSUPPORTED,
+ Line,
+ "Get/Set opcode can't get the enough varstore information",
+ )
else:
VarType = EFI_IFR_TYPE_UNDEFINED
if ctx.FLAGS() != None:
VarType = ctx.numericVarStoreType().VarType
- if (gCVfrDataStorage.GetVarStoreType(ctx.BaseInfo.VarStoreId) == EFI_VFR_VARSTORE_TYPE.EFI_VFR_VARSTORE_NAME) and (VarType == EFI_IFR_TYPE_UNDEFINED):
- self.__ErrorHandler(VfrReturnCode.VFR_RETURN_UNSUPPORTED, Line, "Get/Set opcode don't support name string")
+ if (
+ gVfrDataStorage.GetVarStoreType(ctx.BaseInfo.VarStoreId)
+ == EFI_VFR_VARSTORE_TYPE.EFI_VFR_VARSTORE_NAME
+ ) and (VarType == EFI_IFR_TYPE_UNDEFINED):
+ self.ErrorHandler(
+ VfrReturnCode.VFR_RETURN_UNSUPPORTED,
+ Line,
+ "Get/Set opcode don't support name string",
+ )
if VarType != EFI_IFR_TYPE_UNDEFINED:
ctx.BaseInfo.VarType = VarType
- Size, ReturnCode = gCVfrVarDataTypeDB.GetDataTypeSizeByDataType(ctx.BaseInfo.VarType)
- self.__ErrorHandler(ReturnCode, Line, "Get/Set opcode can't get var type size")
+ Size, ReturnCode = gVfrVarDataTypeDB.GetDataTypeSizeByDataType(ctx.BaseInfo.VarType)
+ self.ErrorHandler(ReturnCode, Line, "Get/Set opcode can't get var type size")
ctx.BaseInfo.VarTotalSize = Size
- Size, ReturnCode = gCVfrVarDataTypeDB.GetDataTypeSizeByDataType(ctx.BaseInfo.VarType)
- self.__ErrorHandler(ReturnCode, Line, "Get/Set opcode can't get var type size")
+ Size, ReturnCode = gVfrVarDataTypeDB.GetDataTypeSizeByDataType(ctx.BaseInfo.VarType)
+ self.ErrorHandler(ReturnCode, Line, "Get/Set opcode can't get var type size")
if Size != ctx.BaseInfo.VarTotalSize:
- self.__ErrorHandler(VfrReturnCode.VFR_RETURN_UNSUPPORTED, Line, "Get/Set opcode don't support data array")
-
- ctx.TSObj = CIfrSet(Line)
- self.__SaveOpHdrCond(ctx.TSObj.GetHeader(), (ctx.ExpInfo.ExpOpCount == 0), Line)
- ctx.TSObj.SetVarInfo(ctx.BaseInfo)
+ self.ErrorHandler(
+ VfrReturnCode.VFR_RETURN_UNSUPPORTED,
+ Line,
+ "Get/Set opcode don't support data array",
+ )
+
+ TSObj = IfrSet(Line)
+ self.SaveOpHdrCond(TSObj.GetHeader(), (ctx.ExpInfo.ExpOpCount == 0), Line)
+ TSObj.SetVarInfo(ctx.BaseInfo)
+ Node = IfrTreeNode(EFI_IFR_SET_OP, TSObj)
+ ctx.Nodes.append(Node)
ctx.ExpInfo.ExpOpCount += 1
-
- return ctx.TSObj
-
+ return ctx.Nodes
# Visit a parse tree produced by VfrSyntaxParser#vfrExpressionTernaryOp.
- def visitVfrExpressionTernaryOp(self, ctx:VfrSyntaxParser.VfrExpressionTernaryOpContext):
- return self.visitChildren(ctx)
-
+ def visitVfrExpressionTernaryOp(self, ctx: VfrSyntaxParser.VfrExpressionTernaryOpContext):
+ self.visitChildren(ctx)
+ if ctx.conditionalExp() != None:
+ ctx.Nodes = ctx.conditionalExp().Nodes
+ if ctx.findExp() != None:
+ ctx.Nodes = ctx.findExp().Nodes
+ if ctx.midExp() != None:
+ ctx.Nodes = ctx.midExp().Nodes
+ if ctx.tokenExp() != None:
+ ctx.Nodes = ctx.tokenExp().Nodes
+ if ctx.spanExp() != None:
+ ctx.Nodes = ctx.spanExp().Nodes
+ return ctx.Nodes
# Visit a parse tree produced by VfrSyntaxParser#conditionalExp.
- def visitConditionalExp(self, ctx:VfrSyntaxParser.ConditionalExpContext):
+ def visitConditionalExp(self, ctx: VfrSyntaxParser.ConditionalExpContext):
Line = ctx.start.line
self.visitChildren(ctx)
- ctx.CObj = CIfrConditional(Line)
+ CObj = IfrConditional(Line)
+ Node = IfrTreeNode(EFI_IFR_CONDITIONAL_OP, CObj, gFormPkg.StructToStream(CObj.GetInfo()))
+ ctx.Nodes.append(Node)
ctx.ExpInfo.ExpOpCount += 1
- return ctx.CObj
-
+ return ctx.Nodes
# Visit a parse tree produced by VfrSyntaxParser#findExp.
- def visitFindExp(self, ctx:VfrSyntaxParser.FindExpContext):
+ def visitFindExp(self, ctx: VfrSyntaxParser.FindExpContext):
Line = ctx.start.line
self.visitChildren(ctx)
- FObj = CIfrFind(Line)
- Format = 0
+ FObj = IfrFind(Line)
for i in range(0, len(ctx.findFormat())):
Format = ctx.findFormat(i).Format
-
- FObj.SetFormat(Format)
+ FObj.SetFormat(Format)
+ Node = IfrTreeNode(EFI_IFR_FIND_OP, FObj, gFormPkg.StructToStream(FObj.GetInfo()))
+ ctx.Nodes.append(Node)
ctx.ExpInfo.ExpOpCount += 1
- return FObj
-
+ return ctx.Nodes
# Visit a parse tree produced by VfrSyntaxParser#findFormat.
- def visitFindFormat(self, ctx:VfrSyntaxParser.FindFormatContext):
+ def visitFindFormat(self, ctx: VfrSyntaxParser.FindFormatContext):
self.visitChildren(ctx)
if ctx.Sensitive() != None:
ctx.Format = 0x00
@@ -4366,741 +5351,154 @@ class VfrSyntaxVisitor(ParseTreeVisitor):
ctx.Format = 0x01
return ctx.Format
-
# Visit a parse tree produced by VfrSyntaxParser#midExp.
- def visitMidExp(self, ctx:VfrSyntaxParser.MidExpContext):
+ def visitMidExp(self, ctx: VfrSyntaxParser.MidExpContext):
Line = ctx.start.line
self.visitChildren(ctx)
- ctx.MObj = CIfrMid(Line)
+ MObj = IfrMid(Line)
+ Node = IfrTreeNode(EFI_IFR_MID_OP, MObj, gFormPkg.StructToStream(MObj.GetInfo()))
+ ctx.Nodes.append(Node)
ctx.ExpInfo.ExpOpCount += 1
- return ctx.MObj
+ return ctx.Nodes
# Visit a parse tree produced by VfrSyntaxParser#tokenExp.
- def visitTokenExp(self, ctx:VfrSyntaxParser.TokenExpContext):
+ def visitTokenExp(self, ctx: VfrSyntaxParser.TokenExpContext):
Line = ctx.start.line
self.visitChildren(ctx)
- ctx.TObj = CIfrToken(Line)
+ TObj = IfrToken(Line)
+ Node = IfrTreeNode(EFI_IFR_TOKEN_OP, TObj, gFormPkg.StructToStream(TObj.GetInfo()))
+ ctx.Nodes.append(Node)
ctx.ExpInfo.ExpOpCount += 1
- return ctx.TObj
-
+ return ctx.Nodes
# Visit a parse tree produced by VfrSyntaxParser#spanExp.
- def visitSpanExp(self, ctx:VfrSyntaxParser.SpanExpContext):
+ def visitSpanExp(self, ctx: VfrSyntaxParser.SpanExpContext):
Line = ctx.start.line
Flags = 0
self.visitChildren(ctx)
for FlagsCtx in ctx.spanFlags():
Flags |= FlagsCtx.Flag
- ctx.SObj = CIfrSpan(Line)
- ctx.SObj.SetFlags(Flags)
+ SObj = IfrSpan(Line)
+ SObj.SetFlags(Flags)
+ Node = IfrTreeNode(EFI_IFR_SPAN_OP, SObj, gFormPkg.StructToStream(SObj.GetInfo()))
+ ctx.Nodes.append(Node)
ctx.ExpInfo.ExpOpCount += 1
- return ctx.SObj
-
+ return ctx.Nodes
# Visit a parse tree produced by VfrSyntaxParser#spanFlags.
- def visitSpanFlags(self, ctx:VfrSyntaxParser.SpanFlagsContext):
+ def visitSpanFlags(self, ctx: VfrSyntaxParser.SpanFlagsContext):
self.visitChildren(ctx)
if ctx.Number() != None:
- ctx.Flag = self.__TransNum(ctx.Number())
+ ctx.Flag = self.TransNum(ctx.Number())
elif ctx.LastNonMatch() != None:
ctx.Flag = 0x00
elif ctx.FirstNonMatch() != None:
ctx.Flag = 0x01
return ctx.Flag
-
# Visit a parse tree produced by VfrSyntaxParser#vfrExpressionMap.
- def visitVfrExpressionMap(self, ctx:VfrSyntaxParser.VfrExpressionMapContext):
+ def visitVfrExpressionMap(self, ctx: VfrSyntaxParser.VfrExpressionMapContext):
Line = ctx.start.line
self.visitChildren(ctx)
- ctx.MObj = CIfrMap(Line)
- EObj = CIfrEnd()
- Line = (None if ctx.stop is None else ctx.stop).line
- EObj.SetLineNo(Line)
+ MObj = IfrMap(Line)
+ Node = IfrTreeNode(EFI_IFR_MAP_OP, MObj, gFormPkg.StructToStream(MObj.GetInfo()))
+ ctx.Nodes.append(Node)
+ for Node in ctx.Node.Child:
+ ctx.Nodes.append(Node)
+ EObj = IfrEnd()
+ EObj.SetLineNo(ctx.stop.line)
+ Node = IfrTreeNode(EFI_IFR_END_OP, EObj, gFormPkg.StructToStream(EObj.GetInfo()))
+ ctx.Nodes.append(Node)
ctx.ExpInfo.ExpOpCount += 1
- return ctx.MObj
+ return ctx.Nodes
- def __GetText(self, ctx):
+ def GetText(self, ctx):
if ctx == None:
return None
else:
return ctx.text
- def __TransId(self, StringIdentifierToken, DefaultValue=None):
+ def TransId(self, StringIdentifierToken, DefaultValue=None):
if StringIdentifierToken == None:
return DefaultValue
else:
return str(StringIdentifierToken)
- def __TransNum(self, NumberToken, DefaultValue=0):
+ def TransNum(self, NumberToken, DefaultValue=0):
if NumberToken == None:
return DefaultValue
else:
StrToken = str(NumberToken)
- if '0x' in StrToken:
- NumberToken = int(StrToken, 0)
+ if StrToken.startswith("0x") or StrToken.startswith("0X"):
+ NumberToken = int(StrToken, 16)
else:
NumberToken = int(StrToken)
- # error handle , value is too large to store
return NumberToken
- def __AssignQuestionKey(self, OpObj, Key):
-
+ def AssignQuestionKey(self, OpObj, Key):
if Key == None:
return
- if OpObj.GetFlags() & EFI_IFR_FLAG_CALLBACK:
+
+ if OpObj.GetQFlags() & EFI_IFR_FLAG_CALLBACK:
# if the question is not CALLBACK ignore the key.
- self.__CVfrQuestionDB.UpdateQuestionId(OpObj.GetQuestionId(), Key)
+ self.VfrQuestionDB.UpdateQuestionId(OpObj.GetQuestionId(), Key, gFormPkg)
OpObj.SetQuestionId(Key)
return
- def __ExtractOriginalText(self, ctx):
+ def ExtractOriginalText(self, ctx):
Source = ctx.start.getTokenSource()
InputStream = Source.inputStream
- start, stop = ctx.start.start, ctx.stop.stop
+ start, stop = ctx.start.start, ctx.stop.stop
Text = InputStream.getText(start, stop)
- return Text.replace('\n', '')
+ return Text.replace("\r", "").replace("\n", "").replace(" ", " ")
- def __CheckDuplicateDefaultValue(self, DefaultId, Line, TokenValue):
- for i in range(0, len(self.__UsedDefaultArray)):
- if self.__UsedDefaultArray[i] == DefaultId:
- gCVfrErrorHandle.HandleWarning(EFI_VFR_WARNING_CODE.VFR_WARNING_DEFAULT_VALUE_REDEFINED, Line, TokenValue)
+ def CheckDuplicateDefaultValue(self, DefaultId, Line, TokenValue):
+ for i in range(0, len(self.UsedDefaultArray)):
+ if self.UsedDefaultArray[i] == DefaultId:
+ gVfrErrorHandle.HandleWarning(
+ EFI_VFR_WARNING_CODE.VFR_WARNING_DEFAULT_VALUE_REDEFINED, Line, TokenValue
+ )
- if len(self.__UsedDefaultArray) >= EFI_IFR_MAX_DEFAULT_TYPE - 1:
- gCVfrErrorHandle.HandleError(VfrReturnCode.VFR_RETURN_FATAL_ERROR, Line, TokenValue)
+ if len(self.UsedDefaultArray) >= EFI_IFR_MAX_DEFAULT_TYPE - 1:
+ gVfrErrorHandle.HandleError(VfrReturnCode.VFR_RETURN_FATAL_ERROR, Line, TokenValue)
- self.__UsedDefaultArray.append(DefaultId)
+ self.UsedDefaultArray.append(DefaultId)
- def __ErrorHandler(self, ReturnCode, LineNum, TokenValue=None):
- self.__ParserStatus += gCVfrErrorHandle.HandleError(ReturnCode, LineNum, TokenValue)
+ def ErrorHandler(self, ReturnCode, LineNum, TokenValue=None):
+ self.ParserStatus += gVfrErrorHandle.HandleError(ReturnCode, LineNum, TokenValue)
- def __CompareErrorHandler(self, ReturnCode, ExpectedCode, LineNum, TokenValue=None, ErrorMsg=None):
+ def CompareErrorHandler(
+ self, ReturnCode, ExpectedCode, LineNum, TokenValue=None, ErrorMsg=None
+ ):
if ReturnCode != ExpectedCode:
- self.__ParserStatus += 1
- gCVfrErrorHandle.PrintMsg(LineNum, 'Error', ErrorMsg, TokenValue)
+ self.ParserStatus += 1
+ gVfrErrorHandle.PrintMsg(LineNum, "Error", ErrorMsg, TokenValue)
- def __InsertChild(self, ParentNode: VfrTreeNode, ChildCtx):
+ def InsertChild(self, ParentNode: IfrTreeNode, ChildCtx):
if ChildCtx != None and ChildCtx.Node != None:
ParentNode.insertChild(ChildCtx.Node)
- def GetRoot(self):
- return self.__Root
+ def InsertEndNode(self, ParentNode, Line):
+ EObj = IfrEnd()
+ EObj.SetLineNo(Line)
+ ENode = IfrTreeNode(EFI_IFR_END_OP, EObj, gFormPkg.StructToStream(EObj.GetInfo()))
+ ParentNode.insertChild(ENode)
- def GetQuestionDB(self):
- return self.__CVfrQuestionDB
-
- def DumpJson(self, FileName):
- try:
- with open(FileName, 'w') as f:
- f.write('{\n')
- f.write(' \"DataStruct\" : {\n')
- pNode = gCVfrVarDataTypeDB.GetDataTypeList()
- while pNode != None:
- f.write(' \"{}\" : [\n'.format(str(pNode.TypeName)))
- FNode = pNode.Members
- while FNode != None:
- f.write(' {\n')
- f.write(' \"Name\": \"{}\",\n'.format(str(FNode.FieldName)))
- if FNode.ArrayNum > 0:
- f.write(' \"Type\": \"{}[{}]\",\n'.format(str(FNode.FieldType.TypeName),str(FNode.ArrayNum)))
- else:
- f.write(' \"Type\": \"{}\",\n'.format(str(FNode.FieldType.TypeName)))
- f.write(' \"Offset\": {}\n'.format(str(FNode.Offset)))
- if FNode.Next == None:
- f.write(' }\n')
- else:
- f.write(' }, \n')
- FNode = FNode.Next
- if pNode.Next == None:
- f.write(' ]\n')
- else:
- f.write(' ],\n')
- pNode = pNode.Next
- f.write(' },\n')
- f.write(' \"DataStructAttribute\": {\n')
- pNode = gCVfrVarDataTypeDB.GetDataTypeList()
- while pNode != None:
- f.write(' \"{}\"'.format(str(pNode.TypeName)) + ': {\n')
- f.write(' \"Alignment\": {},\n'.format(str(pNode.Align)))
- f.write(' \"TotalSize\": {}\n'.format(str(pNode.TotalSize)))
- if pNode.Next == None:
- f.write(' }\n')
- else:
- f.write(' },\n')
- pNode = pNode.Next
- f.write(' },\n')
- f.write(' \"VarDefine\" : {\n')
- pVsNode = gCVfrDataStorage.GetBufferVarStoreList()
- while pVsNode != None:
- f.write(' \"{}\"'.format(str(pVsNode.VarStoreName)) + ': {\n')
- f.write(' \"Type\": \"{}\",\n'.format(str(pVsNode.DataType.TypeName)))
- f.write(' \"Attributes\": {},\n'.format(str(pVsNode.Attributes)))
- f.write(' \"VarStoreId\": {},\n'.format(str(pVsNode.VarStoreId)))
- f.write(' \"VendorGuid\": ' + '\"{}, {}, {},'.format('0x%x'%(pVsNode.Guid.Data1),'0x%x'%(pVsNode.Guid.Data2), '0x%x'%(pVsNode.Guid.Data3)) \
- + ' { ' + '{}, {}, {}, {}, {}, {}, {}, {}'.format('0x%x'%(pVsNode.Guid.Data4[0]), '0x%x'%(pVsNode.Guid.Data4[1]), '0x%x'%(pVsNode.Guid.Data4[2]), '0x%x'%(pVsNode.Guid.Data4[3]), \
- '0x%x'%(pVsNode.Guid.Data4[4]), '0x%x'%(pVsNode.Guid.Data4[5]), '0x%x'%(pVsNode.Guid.Data4[6]), '0x%x'%(pVsNode.Guid.Data4[7])) + ' }}\"\n')
- if pVsNode.Next == None:
- f.write(' }\n')
- else:
- f.write(' },\n')
-
- pVsNode = pVsNode.Next
- f.write(' },\n')
- f.write(' \"Data\" : [\n')
- pVsNode = gCVfrBufferConfig.GetVarItemList()
- while pVsNode != None:
- if pVsNode.Id == None:
- pVsNode = pVsNode.Next
- continue
- pInfoNode = pVsNode.InfoStrList
- while pInfoNode != None:
- f.write(' {\n')
- f.write(' \"VendorGuid\": ' + '\"{}, {}, {},'.format('0x%x'%(pVsNode.Guid.Data1),'0x%x'%(pVsNode.Guid.Data2), '0x%x'%(pVsNode.Guid.Data3)) \
- + ' { ' + '{}, {}, {}, {}, {}, {}, {}, {}'.format('0x%x'%(pVsNode.Guid.Data4[0]), '0x%x'%(pVsNode.Guid.Data4[1]), '0x%x'%(pVsNode.Guid.Data4[2]), '0x%x'%(pVsNode.Guid.Data4[3]), \
- '0x%x'%(pVsNode.Guid.Data4[4]), '0x%x'%(pVsNode.Guid.Data4[5]), '0x%x'%(pVsNode.Guid.Data4[6]), '0x%x'%(pVsNode.Guid.Data4[7])) + ' }}\",\n')
- f.write(' \"VarName\": \"{}\",\n'.format(str(pVsNode.Name)))
- f.write(' \"DefaultStore\": \"{}\",\n'.format(str(pVsNode.Id)))
- f.write(' \"Size\": {},\n'.format(str(pInfoNode.Width)))
- f.write(' \"Offset\": {},\n'.format(str(pInfoNode.Offset)))
- #f.write(' \"Value\": \"{}\"\n'.format(str(pInfoNode.Value)))
- if pInfoNode.Type == EFI_IFR_TYPE_DATE:
- f.write(' \"Value\": \"{}/{}/{}\"\n'.format(pInfoNode.Value.date.Year, pInfoNode.Value.date.Month, pInfoNode.Value.date.Day))
- if pInfoNode.Type == EFI_IFR_TYPE_TIME:
- f.write(' \"Value\": \"{}:{}:{}\"\n'.format(pInfoNode.Value.time.Hour, pInfoNode.Value.time.Minute, pInfoNode.Value.time.Second))
- if pInfoNode.Type == EFI_IFR_TYPE_REF:
- f.write(' \"Value\": \"{};{};'.format(pInfoNode.Value.ref.QuestionId, pInfoNode.Value.ref.FormId) + '{' + '{}, {}, {},'.format('0x%x'%(pInfoNode.Value.ref.FormSetGuid.Data1),'0x%x'%(pInfoNode.Value.ref.FormSetGuid.Data2), '0x%x'%(pInfoNode.Value.ref.FormSetGuid.Data3)) \
- + ' { ' + '{}, {}, {}, {}, {}, {}, {}, {}'.format('0x%x'%(pInfoNode.Value.ref.FormSetGuid.Data4[0]), '0x%x'%(pInfoNode.Value.ref.FormSetGuid.Data4[1]), '0x%x'%(pInfoNode.Value.ref.FormSetGuid.Data4[2]), '0x%x'%(pInfoNode.Value.ref.FormSetGuid.Data4[3]), \
- '0x%x'%(pInfoNode.Value.ref.FormSetGuid.Data4[4]), '0x%x'%(pInfoNode.Value.ref.FormSetGuid.Data4[5]), '0x%x'%(pInfoNode.Value.ref.FormSetGuid.Data4[6]), '0x%x'%(pInfoNode.Value.ref.FormSetGuid.Data4[7])) + ' }}' + ';{}\n'.format(pInfoNode.Value.ref.DevicePath))
- if pInfoNode.Type == EFI_IFR_TYPE_STRING:
- f.write(' \"Value\": \"{}\"\n'.format(pInfoNode.Value.string))
- if pInfoNode.Type == EFI_IFR_TYPE_NUM_SIZE_8:
- f.write(' \"Value\": \"{}\"\n'.format(hex(pInfoNode.Value.u8)))
- if pInfoNode.Type == EFI_IFR_TYPE_NUM_SIZE_16:
- f.write(' \"Value\": \"{}\"\n'.format(hex(pInfoNode.Value.u16)))
- if pInfoNode.Type == EFI_IFR_TYPE_NUM_SIZE_32:
- f.write(' \"Value\": \"{}\"\n'.format(hex(pInfoNode.Value.u32)))
- if pInfoNode.Type == EFI_IFR_TYPE_NUM_SIZE_64:
- f.write(' \"Value\": \"{}\"\n'.format(hex(pInfoNode.Value.u64)))
- if pInfoNode.Type == EFI_IFR_TYPE_BOOLEAN:
- f.write(' \"Value\": \"{}\"\n'.format(hex(pInfoNode.Value.b)))
-
- f.write(' },\n')
- pInfoNode = pInfoNode.Next
- pVsNode = pVsNode.Next
- f.write(' {\n')
- f.write(' \"VendorGuid\": \"NA\",\n')
- f.write(' \"VarName\": \"NA\",\n')
- f.write(' \"DefaultStore\": \"NA\",\n')
- f.write(' \"Size\": 0,\n')
- f.write(' \"Offset\": 0,\n')
- f.write(' \"Value\": \"0x00\"\n')
- f.write(' }\n')
- f.write(' ]\n')
- f.write('}\n')
-
- f.close()
- except:
- EdkLogger.error("VfrCompiler", FILE_OPEN_FAILURE, "File open failed for %s" % FileName, None)
-
- def DumpYaml(self, Root, FileName):
- try:
- with open(FileName, 'w') as f:
- f.write('## DO NOT REMOVE -- VFR Mode\n')
- self.DumpYamlDfs(Root, f)
- f.close()
- except:
- EdkLogger.error("VfrCompiler", FILE_OPEN_FAILURE, "File open failed for %s" % FileName, None)
-
- def DumpYamlDfs(self, Root, f):
-
- if Root.OpCode != None:
-
- if Root.OpCode == EFI_IFR_FORM_SET_OP:
- Info = Root.Data.GetInfo()
- f.write('Formset:\n')
- f.write(' Guid: {' + '{}, {}, {},'.format('0x%x'%(Info.Guid.Data1),'0x%x'%(Info.Guid.Data2), '0x%x'%(Info.Guid.Data3)) \
- + ' { ' + '{}, {}, {}, {}, {}, {}, {}, {}'.format('0x%x'%(Info.Guid.Data4[0]), '0x%x'%(Info.Guid.Data4[1]), '0x%x'%(Info.Guid.Data4[2]), '0x%x'%(Info.Guid.Data4[3]), \
- '0x%x'%(Info.Guid.Data4[4]), '0x%x'%(Info.Guid.Data4[5]), '0x%x'%(Info.Guid.Data4[6]), '0x%x'%(Info.Guid.Data4[7])) + ' }}\n')
- f.write(' Title: {} # Title STRING_ID\n'.format(Info.FormSetTitle))
- f.write(' Help: {} # Help STRING_ID\n'.format(Info.Help))
- for Guid in Root.Data.GetClassGuid():
- f.write(' ClassGuid: {' + '{}, {}, {},'.format('0x%x'%(Guid.Data1),'0x%x'%(Guid.Data2), '0x%x'%(Guid.Data3)) \
- + ' { ' + '{}, {}, {}, {}, {}, {}, {}, {}'.format('0x%x'%(Guid.Data4[0]), '0x%x'%(Guid.Data4[1]), '0x%x'%(Guid.Data4[2]), '0x%x'%(Guid.Data4[3]), \
- '0x%x'%(Guid.Data4[4]), '0x%x'%(Guid.Data4[5]), '0x%x'%(Guid.Data4[6]), '0x%x'%(Guid.Data4[7])) + ' }}\n')
-
- if Root.OpCode == EFI_IFR_VARSTORE_OP:
- Info = Root.Data.GetInfo()
- f.write(' - varstore:\n')
- f.write(' varid: {}\n'.format(Info.VarStoreId))
- f.write(' name: {}\n'.format(Info.Name))
- f.write(' size: {}\n'.format(Info.Size))
- f.write(' guid: {' + '{}, {}, {},'.format('0x%x'%(Info.Guid.Data1),'0x%x'%(Info.Guid.Data2), '0x%x'%(Info.Guid.Data3)) \
- + ' { ' + '{}, {}, {}, {}, {}, {}, {}, {}'.format('0x%x'%(Info.Guid.Data4[0]), '0x%x'%(Info.Guid.Data4[1]), '0x%x'%(Info.Guid.Data4[2]), '0x%x'%(Info.Guid.Data4[3]), \
- '0x%x'%(Info.Guid.Data4[4]), '0x%x'%(Info.Guid.Data4[5]), '0x%x'%(Info.Guid.Data4[6]), '0x%x'%(Info.Guid.Data4[7])) + ' }}\n')
-
- if Root.OpCode == EFI_IFR_VARSTORE_EFI_OP:
- Info = Root.Data.GetInfo()
- f.write(' - efivarstore:\n')
- f.write(' varid: {}\n'.format(Info.VarStoreId))
- f.write(' name: {}\n'.format(Info.Name))
- f.write(' size: {}\n'.format(Info.Size))
- f.write(' guid: {' + '{}, {}, {},'.format('0x%x'%(Info.Guid.Data1),'0x%x'%(Info.Guid.Data2), '0x%x'%(Info.Guid.Data3)) \
- + ' { ' + '{}, {}, {}, {}, {}, {}, {}, {}'.format('0x%x'%(Info.Guid.Data4[0]), '0x%x'%(Info.Guid.Data4[1]), '0x%x'%(Info.Guid.Data4[2]), '0x%x'%(Info.Guid.Data4[3]), \
- '0x%x'%(Info.Guid.Data4[4]), '0x%x'%(Info.Guid.Data4[5]), '0x%x'%(Info.Guid.Data4[6]), '0x%x'%(Info.Guid.Data4[7])) + ' }}\n')
- f.write(' attribute: {}\n'.format(Info.Attributes))
-
- if Root.OpCode == EFI_IFR_VARSTORE_NAME_VALUE_OP:
- Info = Root.Data.GetInfo()
- f.write(' - namevaluevarstore:\n')
- f.write(' varid: {}\n'.format(Info.VarStoreId))
- # f.write(' name: {}\n'.format(Info.Name))
- f.write(' guid: {' + '{}, {}, {},'.format('0x%x'%(Info.Guid.Data1),'0x%x'%(Info.Guid.Data2), '0x%x'%(Info.Guid.Data3)) \
- + ' { ' + '{}, {}, {}, {}, {}, {}, {}, {}'.format('0x%x'%(Info.Guid.Data4[0]), '0x%x'%(Info.Guid.Data4[1]), '0x%x'%(Info.Guid.Data4[2]), '0x%x'%(Info.Guid.Data4[3]), \
- '0x%x'%(Info.Guid.Data4[4]), '0x%x'%(Info.Guid.Data4[5]), '0x%x'%(Info.Guid.Data4[6]), '0x%x'%(Info.Guid.Data4[7])) + ' }}\n')
-
- if Root.OpCode == EFI_IFR_FORM_OP:
- Info = Root.Data.GetInfo()
- f.write(' - form:\n')
- if Root.Condition != None:
- f.write(' condition: {}\n'.format(Root.Condition))
- f.write(' FormId: {} # FormId STRING_ID\n'.format(Info.FormId))
- f.write(' FormTitle: {} # FormTitle STRING_ID\n'.format(Info.FormTitle))
-
- if Root.OpCode == EFI_IFR_FORM_MAP_OP:
- Info, MethodMapList = Root.Data.GetInfo()
- f.write(' - formmap:\n')
- if Root.Condition != None:
- f.write(' condition: {}\n'.format(Root.Condition))
- f.write(' FormId: {} # FormId STRING_ID\n'.format(Info.FormId))
- for MethodMap in MethodMapList:
- f.write(' maptitle: {}\n'.format(MethodMap.MethodTitle))
- f.write(' mapguid: {' + '{}, {}, {},'.format('0x%x'%(MethodMap.MethodIdentifier.Data1),'0x%x'%(MethodMap.MethodIdentifier.Data2), '0x%x'%(MethodMap.MethodIdentifier.Data3)) \
- + ' { ' + '{}, {}, {}, {}, {}, {}, {}, {}'.format('0x%x'%(MethodMap.MethodIdentifier.Data4[0]), '0x%x'%(MethodMap.MethodIdentifier.Data4[1]), '0x%x'%(MethodMap.MethodIdentifier.Data4[2]), '0x%x'%(MethodMap.MethodIdentifier.Data4[3]), \
- '0x%x'%(MethodMap.MethodIdentifier.Data4[4]), '0x%x'%(MethodMap.MethodIdentifier.Data4[5]), '0x%x'%(MethodMap.MethodIdentifier.Data4[6]), '0x%x'%(MethodMap.MethodIdentifier.Data4[7])) + ' }}\n')
-
- if Root.OpCode == EFI_IFR_IMAGE_OP:
- Info = Root.Data.GetInfo()
- f.write(' - image:\n')
- if Root.Condition != None:
- f.write(' condition: {}\n'.format(Root.Condition))
- f.write(' Id: {} # ImageId\n'.format(Info.Id))
-
- if Root.OpCode == EFI_IFR_RULE_OP:
- Info = Root.Data.GetInfo()
- f.write(' - rule:\n')
- if Root.Condition != None:
- f.write(' condition: {}\n'.format(Root.Condition))
- f.write(' RuleId: {} # RuleId\n'.format(Info.RuleId))
-
- if Root.OpCode == EFI_IFR_SUBTITLE_OP:
- Info = Root.Data.GetInfo()
- f.write(' - subtitle:\n')
- if Root.Condition != None:
- f.write(' condition: {}\n'.format(Root.Condition))
- f.write(' prompt: {} # Statement Prompt STRING_ID\n'.format(Info.Statement.Prompt))
-
- if Root.OpCode == EFI_IFR_TEXT_OP:
- Info = Root.Data.GetInfo()
- f.write(' - text:\n')
- if Root.Condition != None:
- f.write(' condition: {}\n'.format(Root.Condition))
- f.write(' prompt: {} # Statement Prompt STRING_ID\n'.format(Info.Statement.Prompt))
- f.write(' help: {} # Statement Help STRING_ID\n'.format(Info.Statement.Help))
- f.write(' text: {} # Statement Help STRING_ID\n'.format(Info.TextTwo))
-
- if Root.OpCode == EFI_IFR_ACTION_OP:
- Info = Root.Data.GetInfo()
- f.write(' - action:\n')
- if Root.Condition != None:
- f.write(' condition: {}\n'.format(Root.Condition))
- f.write(' prompt: {} # Statement Prompt STRING_ID\n'.format(Info.Question.Header.Prompt))
- f.write(' help: {} # Statement Help STRING_ID\n'.format(Info.Question.Header.Help))
- f.write(' questionid: {} # Question QuestionId\n'.format(Info.Question.QuestionId))
- f.write(' varstoreid: {} # Question VarStoreId\n'.format(Info.Question.VarStoreId))
- f.write(' flags: {} # Question Flags\n'.format(Info.Question.Flags))
- f.write(' questionconfig: {} # QuestionConfig\n'.format(Info.QuestionConfig))
-
- if Root.OpCode == EFI_IFR_ONE_OF_OP:
- Info = Root.Data.GetInfo()
- f.write(' - oneof:\n')
- if Root.Condition != None:
- f.write(' condition: {}\n'.format(Root.Condition))
-
- f.write(' prompt: {} # Statement Prompt STRING_ID\n'.format(Info.Question.Header.Prompt))
- f.write(' help: {} # Statement Help STRING_ID\n'.format(Info.Question.Header.Help))
- f.write(' questionid: {} # Question QuestionId\n'.format(Info.Question.QuestionId))
- f.write(' varstoreid: {} # Question VarStoreId\n'.format(Info.Question.VarStoreId))
- f.write(' varname: {} # Question VarName STRING_ID\n'.format(Info.Question.VarStoreInfo.VarName))
- f.write(' varoffset: {} # Question VarOffset\n'.format(Info.Question.VarStoreInfo.VarOffset))
- f.write(' flags: {} # Question Flags\n'.format(Info.Question.Flags))
-
- if Root.OpCode == EFI_IFR_ONE_OF_OPTION_OP:
- Info = Root.Data.GetInfo()
- f.write(' - option: {}\n'.format(Info.Option))
- if Root.Condition != None:
- f.write(' condition: {}\n'.format(Root.Condition))
-
- f.write(' option flag: {}\n'.format(Info.Flags))
- f.write(' option type: {}\n'.format(Info.Type))
-
- if type(Root.Data) == CIfrOneOfOption:
- if Info.Type == EFI_IFR_TYPE_DATE:
- f.write(' option value: {}/{}/{}\n'.format(Info.Value.date.Year, Info.Value.date.Month, Info.Value.date.Day))
- if Info.Type == EFI_IFR_TYPE_TIME:
- f.write(' option value: {}:{}:{}\n'.format(Info.Value.time.Hour, Info.Value.time.Minute, Info.Value.time.Second))
- if Info.Type == EFI_IFR_TYPE_REF:
- f.write(' option value: {};{};'.format(Info.Value.ref.QuestionId, Info.Value.ref.FormId) + '{' + '{}, {}, {},'.format('0x%x'%(Info.Value.ref.FormSetGuid.Data1),'0x%x'%(Info.Value.ref.FormSetGuid.Data2), '0x%x'%(Info.Value.ref.FormSetGuid.Data3)) \
- + ' { ' + '{}, {}, {}, {}, {}, {}, {}, {}'.format('0x%x'%(Info.Value.ref.FormSetGuid.Data4[0]), '0x%x'%(Info.Value.ref.FormSetGuid.Data4[1]), '0x%x'%(Info.Value.ref.FormSetGuid.Data4[2]), '0x%x'%(Info.Value.ref.FormSetGuid.Data4[3]), \
- '0x%x'%(Info.Value.ref.FormSetGuid.Data4[4]), '0x%x'%(Info.Value.ref.FormSetGuid.Data4[5]), '0x%x'%(Info.Value.ref.FormSetGuid.Data4[6]), '0x%x'%(Info.Value.ref.FormSetGuid.Data4[7])) + ' }}' + ';{}\n'.format(Info.Value.ref.DevicePath))
- if Info.Type == EFI_IFR_TYPE_STRING:
- f.write(' option value: {}\n'.format(Info.Value.string))
- if Info.Type == EFI_IFR_TYPE_NUM_SIZE_8:
- f.write(' option value: {}\n'.format(Info.Value.u8))
- if Info.Type == EFI_IFR_TYPE_NUM_SIZE_16:
- f.write(' option value: {}\n'.format(Info.Value.u16))
- if Info.Type == EFI_IFR_TYPE_NUM_SIZE_32:
- f.write(' option value: {}\n'.format(Info.Value.u32))
- if Info.Type == EFI_IFR_TYPE_NUM_SIZE_64:
- f.write(' option value: {}\n'.format(Info.Value.u64))
- if Info.Type == EFI_IFR_TYPE_BOOLEAN:
- f.write(' option value: {}\n'.format(Info.Value.b))
-
- if type(Root.Data) == CIfrOneOfOption2:
- f.write(' value: {')
- ValueType = Root.Data.GetValueType()
- if ValueType == EFI_IFR_TYPE_STRING:
- for i in range(0, len(Info.Value)-1):
- f.write('{},'.format(Info.Value[i].string))
- f.write('{}'.format(Info.Value[len(Info.Value)-1].string) + '}\n')
-
- if ValueType == EFI_IFR_TYPE_NUM_SIZE_8:
- for i in range(0, len(Info.Value)-1):
- f.write('{},'.format(Info.Value[i].u8))
- f.write('{}'.format(Info.Value[len(Info.Value)-1].u8) + '}\n')
-
- if ValueType == EFI_IFR_TYPE_NUM_SIZE_16:
- for i in range(0, len(Info.Value)-1):
- f.write('{},'.format(Info.Value[i].u16))
- f.write('{}'.format(Info.Value[len(Info.Value)-1].u16) + '}\n')
-
- if ValueType == EFI_IFR_TYPE_NUM_SIZE_32:
- for i in range(0, len(Info.Value)-1):
- f.write('{},'.format(Info.Value[i].u32))
- f.write('{}'.format(Info.Value[len(Info.Value)-1].u32) + '}\n')
-
- if ValueType == EFI_IFR_TYPE_NUM_SIZE_64:
- for i in range(0, len(Info.Value)-1):
- f.write('{},'.format(Info.Value[i].u64))
- f.write('{}'.format(Info.Value[len(Info.Value)-1].u64) + '}\n')
-
- if ValueType == EFI_IFR_TYPE_BOOLEAN:
- for i in range(0, len(Info.Value)-1):
- f.write('{},'.format(Info.Value[i].b))
- f.write('{}'.format(Info.Value[len(Info.Value)-1].b) + '}\n')
-
-
- if Root.OpCode == EFI_IFR_DEFAULT_OP:
- Info = Root.Data.GetInfo()
- f.write(' - default:\n')
- if Root.Condition != None:
- f.write(' condition: {}\n'.format(Root.Condition))
- f.write(' type: {}\n'.format(Info.Type))
- f.write(' defaultId: {}\n'.format(Info.DefaultId))
- if type(Root.Data) == CIfrDefault:
- if Info.Type == EFI_IFR_TYPE_DATE:
- f.write(' value: {}/{}/{}\n'.format(Info.Value.date.Year, Info.Value.date.Month, Info.Value.date.Day))
- if Info.Type == EFI_IFR_TYPE_TIME:
- f.write(' value: {}:{}:{}\n'.format(Info.Value.time.Hour, Info.Value.time.Minute, Info.Value.time.Second))
- if Info.Type == EFI_IFR_TYPE_REF:
- f.write(' option value: {};{};'.format(Info.Value.ref.QuestionId, Info.Value.ref.FormId) + '{' + '{}, {}, {},'.format('0x%x'%(Info.Value.ref.FormSetGuid.Data1),'0x%x'%(Info.Value.ref.FormSetGuid.Data2), '0x%x'%(Info.Value.ref.FormSetGuid.Data3)) \
- + ' { ' + '{}, {}, {}, {}, {}, {}, {}, {}'.format('0x%x'%(Info.Value.ref.FormSetGuid.Data4[0]), '0x%x'%(Info.Value.ref.FormSetGuid.Data4[1]), '0x%x'%(Info.Value.ref.FormSetGuid.Data4[2]), '0x%x'%(Info.Value.ref.FormSetGuid.Data4[3]), \
- '0x%x'%(Info.Value.ref.FormSetGuid.Data4[4]), '0x%x'%(Info.Value.ref.FormSetGuid.Data4[5]), '0x%x'%(Info.Value.ref.FormSetGuid.Data4[6]), '0x%x'%(Info.Value.ref.FormSetGuid.Data4[7])) + ' }}' + ';{}\n'.format(Info.Value.ref.DevicePath))
- if Info.Type == EFI_IFR_TYPE_STRING:
- f.write(' value: {}\n'.format(Info.Value.string))
- if Info.Type == EFI_IFR_TYPE_NUM_SIZE_8:
- f.write(' value: {}\n'.format(Info.Value.u8))
- if Info.Type == EFI_IFR_TYPE_NUM_SIZE_16:
- f.write(' value: {}\n'.format(Info.Value.u16))
- if Info.Type == EFI_IFR_TYPE_NUM_SIZE_32:
- f.write(' value: {}\n'.format(Info.Value.u32))
- if Info.Type == EFI_IFR_TYPE_NUM_SIZE_64:
- f.write(' value: {}\n'.format(Info.Value.u64))
- if Info.Type == EFI_IFR_TYPE_BOOLEAN:
- f.write(' value: {}\n'.format(Info.Value.b))
-
- if type(Root.Data) == CIfrDefault3:
- f.write(' value: {')
- ValueType = Root.Data.GetValueType()
- if ValueType == EFI_IFR_TYPE_STRING:
- for i in range(0, len(Info.Value)-1):
- f.write('{},'.format(Info.Value[i].string))
- f.write('{}'.format(Info.Value[len(Info.Value)-1].string) + '}\n')
-
- if ValueType == EFI_IFR_TYPE_NUM_SIZE_8:
- for i in range(0, len(Info.Value)-1):
- f.write('{},'.format(Info.Value[i].u8))
- f.write('{}'.format(Info.Value[len(Info.Value)-1].u8) + '}\n')
-
- if ValueType == EFI_IFR_TYPE_NUM_SIZE_16:
- for i in range(0, len(Info.Value)-1):
- f.write('{},'.format(Info.Value[i].u16))
- f.write('{}'.format(Info.Value[len(Info.Value)-1].u16) + '}\n')
-
- if ValueType == EFI_IFR_TYPE_NUM_SIZE_32:
- for i in range(0, len(Info.Value)-1):
- f.write('{},'.format(Info.Value[i].u32))
- f.write('{}'.format(Info.Value[len(Info.Value)-1].u32) + '}\n')
-
- if ValueType == EFI_IFR_TYPE_NUM_SIZE_64:
- for i in range(0, len(Info.Value)-1):
- f.write('{},'.format(Info.Value[i].u64))
- f.write('{}'.format(Info.Value[len(Info.Value)-1].u64) + '}\n')
-
- if ValueType == EFI_IFR_TYPE_BOOLEAN:
- for i in range(0, len(Info.Value)-1):
- f.write('{},'.format(Info.Value[i].b))
- f.write('{}'.format(Info.Value[len(Info.Value)-1].b) + '}\n')
-
- if Root.OpCode == EFI_IFR_ORDERED_LIST_OP:
- Info = Root.Data.GetInfo()
- f.write(' - orderedlist:\n')
- if Root.Condition != None:
- f.write(' condition: {}\n'.format(Root.Condition))
-
- f.write(' prompt: {} # Statement Prompt STRING_ID\n'.format(Info.Question.Header.Prompt))
- f.write(' help: {} # Statement Help STRING_ID\n'.format(Info.Question.Header.Help))
- f.write(' questionid: {} # Question QuestionId\n'.format(Info.Question.QuestionId))
- f.write(' varstoreid: {} # Question VarStoreId\n'.format(Info.Question.VarStoreId))
- f.write(' maxContainers: {}\n'.format(Info.MaxContainers))
- f.write(' flags: {}\n'.format(Info.Question.Flags))
-
- if Root.OpCode == EFI_IFR_NUMERIC_OP:
- Info = Root.Data.GetInfo()
- f.write(' - numeric:\n')
- if Root.Condition != None:
- f.write(' condition: {}\n'.format(Root.Condition))
- f.write(' prompt: {} # Statement Prompt STRING_ID\n'.format(Info.Question.Header.Prompt))
- f.write(' help: {} # Statement Help STRING_ID\n'.format(Info.Question.Header.Help))
- f.write(' questionid: {} # Question QuestionId\n'.format(Info.Question.QuestionId))
- f.write(' varstoreid: {} # Question VarStoreId\n'.format(Info.Question.VarStoreId))
- f.write(' varname: {} # Question VarName STRING_ID\n'.format(Info.Question.VarStoreInfo.VarName))
- f.write(' varoffset: {} # Question VarOffset\n'.format(Info.Question.VarStoreInfo.VarOffset))
- f.write(' flags: {} # Question Flags\n'.format(Info.Question.Flags))
-
- if Root.Data.GetVarType() == EFI_IFR_TYPE_NUM_SIZE_64:
- f.write(' maxvalue: {}\n'.format(Info.Data.u64.MaxValue))
- f.write(' minvalue: {}\n'.format(Info.Data.u64.MinValue))
- f.write(' step: {}\n'.format(Info.Data.u64.Step))
-
- if Root.Data.GetVarType() == EFI_IFR_TYPE_NUM_SIZE_32:
- f.write(' maxvalue: {}\n'.format(Info.Data.u32.MaxValue))
- f.write(' minvalue: {}\n'.format(Info.Data.u32.MinValue))
- f.write(' step: {}\n'.format(Info.Data.u32.Step))
-
- if Root.Data.GetVarType() == EFI_IFR_TYPE_NUM_SIZE_16:
- f.write(' maxvalue: {}\n'.format(Info.Data.u16.MaxValue))
- f.write(' minvalue: {}\n'.format(Info.Data.u16.MinValue))
- f.write(' step: {}\n'.format(Info.Data.u16.Step))
-
- if Root.Data.GetVarType() == EFI_IFR_TYPE_NUM_SIZE_8:
- f.write(' maxvalue: {}\n'.format(Info.Data.u8.MaxValue))
- f.write(' minvalue: {}\n'.format(Info.Data.u8.MinValue))
- f.write(' step: {}\n'.format(Info.Data.u8.Step))
-
- if Root.OpCode == EFI_IFR_CHECKBOX_OP:
- Info = Root.Data.GetInfo()
- f.write(' - checkbox:\n')
- if Root.Condition != None:
- f.write(' condition: {}\n'.format(Root.Condition))
- f.write(' prompt: {} # Statement Prompt STRING_ID\n'.format(Info.Question.Header.Prompt))
- f.write(' help: {} # Statement Help STRING_ID\n'.format(Info.Question.Header.Help))
- f.write(' questionid: {} # Question QuestionId\n'.format(Info.Question.QuestionId))
- f.write(' varstoreid: {} # Question VarStoreId\n'.format(Info.Question.VarStoreId))
- f.write(' varname: {} # Question VarName STRING_ID\n'.format(Info.Question.VarStoreInfo.VarName))
- f.write(' varoffset: {} # Question VarOffset\n'.format(Info.Question.VarStoreInfo.VarOffset))
- f.write(' flags: {} # Flags\n'.format(Info.Flags))
-
- if Root.OpCode == EFI_IFR_TIME_OP:
- Info = Root.Data.GetInfo()
- f.write(' - time:\n')
- if Root.Condition != None:
- f.write(' condition: {}\n'.format(Root.Condition))
- f.write(' questionid: {} # Statement Prompt STRING_ID\n'.format(Info.Question.QuestionId))
- f.write(' varstoreid: {} # Question VarStoreId\n'.format(Info.Question.VarStoreId))
- f.write(' varname: {}\n'.format(Info.Question.VarStoreInfo.VarName))
- f.write(' varoffset: {}\n'.format(Info.Question.VarStoreInfo.VarOffset))
- f.write(' prompt: {} # Statement Prompt STRING_ID\n'.format(Info.Question.Header.Prompt))
- f.write(' help: {} # Statement Help STRING_ID\n'.format(Info.Question.Header.Help))
- f.write(' flags: {}\n'.format(Info.Flags))
-
- if Root.OpCode == EFI_IFR_DATE_OP:
- Info = Root.Data.GetInfo()
- f.write(' - date:\n')
- if Root.Condition != None:
- f.write(' condition: {}\n'.format(Root.Condition))
- f.write(' questionid: {} # Statement Prompt STRING_ID\n'.format(Info.Question.QuestionId))
- f.write(' varstoreid: {} # Question VarStoreId\n'.format(Info.Question.VarStoreId))
- f.write(' varname: {}\n'.format(Info.Question.VarStoreInfo.VarName))
- f.write(' varoffset: {}\n'.format(Info.Question.VarStoreInfo.VarOffset))
- f.write(' prompt: {} # Statement Prompt STRING_ID\n'.format(Info.Question.Header.Prompt))
- f.write(' help: {} # Statement Help STRING_ID\n'.format(Info.Question.Header.Help))
- f.write(' flags: {}\n'.format(Info.Flags))
-
-
- if Root.OpCode == EFI_IFR_STRING_OP:
- Info = Root.Data.GetInfo()
- f.write(' - string:\n')
- if Root.Condition != None:
- f.write(' condition: {}\n'.format(Root.Condition))
- f.write(' prompt: {} # Statement Prompt STRING_ID\n'.format(Info.Question.Header.Prompt))
- f.write(' help: {} # Statement Help STRING_ID\n'.format(Info.Question.Header.Help))
- f.write(' questionid: {} # Question QuestionId\n'.format(Info.Question.QuestionId))
- f.write(' varstoreid: {} # Question VarStoreId\n'.format(Info.Question.VarStoreId))
- f.write(' varname: {} # Question VarName STRING_ID\n'.format(Info.Question.VarStoreInfo.VarName))
- f.write(' varoffset: {} # Question VarOffset\n'.format(Info.Question.VarStoreInfo.VarOffset))
- f.write(' flags: {} # Question Flags\n'.format(Info.Question.Flags))
- f.write(' stringflags: {}\n'.format(Info.Flags))
- f.write(' stringminsize: {}\n'.format(Info.MinSize))
- f.write(' stringmaxsize: {}\n'.format(Info.MaxSize))
-
- if Root.OpCode == EFI_IFR_PASSWORD_OP:
- Info = Root.Data.GetInfo()
- f.write(' - password:\n')
- if Root.Condition != None:
- f.write(' condition: {}\n'.format(Root.Condition))
- f.write(' prompt: {} # Statement Prompt STRING_ID\n'.format(Info.Question.Header.Prompt))
- f.write(' help: {} # Statement Help STRING_ID\n'.format(Info.Question.Header.Help))
- f.write(' questionid: {} # Question QuestionId\n'.format(Info.Question.QuestionId))
- f.write(' varstoreid: {} # Question VarStoreId\n'.format(Info.Question.VarStoreId))
- f.write(' varname: {} # Question VarName STRING_ID\n'.format(Info.Question.VarStoreInfo.VarName))
- f.write(' varoffset: {} # Question VarOffset\n'.format(Info.Question.VarStoreInfo.VarOffset))
- f.write(' flags: {} # Question Flags\n'.format(Info.Question.Flags))
- f.write(' minsize: {}\n'.format(Info.MinSize))
- f.write(' maxsize: {}\n'.format(Info.MaxSize))
-
-
- if Root.OpCode == EFI_IFR_RESET_BUTTON_OP:
- Info = Root.Data.GetInfo()
- f.write(' - resetbutton:\n')
- if Root.Condition != None:
- f.write(' condition: {}\n'.format(Root.Condition))
- f.write(' prompt: {} # Statement Prompt STRING_ID\n'.format(Info.Statement.Prompt))
- f.write(' help: {} # Statement Help STRING_ID\n'.format(Info.Statement.Help))
- f.write(' defaultid: {}\n'.format(Info.DefaultId))
-
- if Root.OpCode == EFI_IFR_REF_OP:
- Info = Root.Data.GetInfo()
- f.write(' - goto:\n')
- if Root.Condition != None:
- f.write(' condition: {}\n'.format(Root.Condition))
-
- if type(Root.Data) == CIfrRef4:
- f.write(' formid: {}\n'.format(Info.FormId))
- f.write(' formsetid: {' + '{}, {}, {},'.format('0x%x'%(Info.FormSetId.Data1),'0x%x'%(Info.FormSetId.Data2), '0x%x'%(Info.FormSetId.Data3)) \
- + ' { ' + '{}, {}, {}, {}, {}, {}, {}, {}'.format('0x%x'%(Info.FormSetId.Data4[0]), '0x%x'%(Info.FormSetId.Data4[1]), '0x%x'%(Info.FormSetId.Data4[2]), '0x%x'%(Info.FormSetId.Data4[3]), \
- '0x%x'%(Info.FormSetId.Data4[4]), '0x%x'%(Info.FormSetId.Data4[5]), '0x%x'%(Info.FormSetId.Data4[6]), '0x%x'%(Info.FormSetId.Data4[7])) + ' }}\n')
- f.write(' questionid: {}\n'.format(Info.QuestionId))
- f.write(' devicepath: {}\n'.format(Info.DevicePath))
-
- if type(Root.Data) == CIfrRef3:
- f.write(' formid: {}\n'.format(Info.FormId))
- f.write(' formsetid: {' + '{}, {}, {},'.format('0x%x'%(Info.FormSetId.Data1),'0x%x'%(Info.FormSetId.Data2), '0x%x'%(Info.FormSetId.Data3)) \
- + ' { ' + '{}, {}, {}, {}, {}, {}, {}, {}'.format('0x%x'%(Info.FormSetId.Data4[0]), '0x%x'%(Info.FormSetId.Data4[1]), '0x%x'%(Info.FormSetId.Data4[2]), '0x%x'%(Info.FormSetId.Data4[3]), \
- '0x%x'%(Info.FormSetId.Data4[4]), '0x%x'%(Info.FormSetId.Data4[5]), '0x%x'%(Info.FormSetId.Data4[6]), '0x%x'%(Info.FormSetId.Data4[7])) + ' }}\n')
- f.write(' questionid: {}\n'.format(Info.QuestionId))
-
- if type(Root.Data) == CIfrRef2:
- f.write(' formid: {}\n'.format(Info.FormId))
- f.write(' questionid: {}\n'.format(Info.QuestionId))
-
- if type(Root.Data) == CIfrRef:
- f.write(' formid: {}\n'.format(Info.FormId))
- f.write(' questionid: {}\n'.format(Info.Question.QuestionId))
-
- f.write(' prompt: {}\n'.format(Info.Question.Header.Prompt))
- f.write(' help: {}\n'.format(Info.Question.Header.Help))
-
- if Root.OpCode == EFI_IFR_REFRESH_OP:
- Info = Root.Data.GetInfo()
- f.write(' - refresh:\n')
- if Root.Condition != None:
- f.write(' condition: {}\n'.format(Root.Condition))
- f.write(' interval: {} # RefreshInterval\n'.format(Info.RefreshInterval))
-
- if Root.OpCode == EFI_IFR_VARSTORE_DEVICE_OP:
- Info = Root.Data.GetInfo()
- f.write(' - varstoredevice:\n')
- if Root.Condition != None:
- f.write(' condition: {}\n'.format(Root.Condition))
- f.write(' devicepath: {} # DevicePath\n'.format(Info.DevicePath))
-
- if Root.OpCode == EFI_IFR_REFRESH_ID_OP:
- Info = Root.Data.GetInfo()
- f.write(' - refreshguid:\n')
- if Root.Condition != None:
- f.write(' condition: {}\n'.format(Root.Condition))
- f.write(' eventgroupid: {' + '{}, {}, {},'.format('0x%x'%(Info.RefreshEventGroupId.Data1),'0x%x'%(Info.RefreshEventGroupId.Data2), '0x%x'%(Info.RefreshEventGroupId.Data3)) \
- + ' { ' + '{}, {}, {}, {}, {}, {}, {}, {}'.format('0x%x'%(Info.RefreshEventGroupId.Data4[0]), '0x%x'%(Info.RefreshEventGroupId.Data4[1]), '0x%x'%(Info.RefreshEventGroupId.Data4[2]), '0x%x'%(Info.RefreshEventGroupId.Data4[3]), \
- '0x%x'%(Info.RefreshEventGroupId.Data4[4]), '0x%x'%(Info.RefreshEventGroupId.Data4[5]), '0x%x'%(Info.RefreshEventGroupId.Data4[6]), '0x%x'%(Info.RefreshEventGroupId.Data4[7])) + ' }}\n')
-
- if Root.OpCode == EFI_IFR_WARNING_IF_OP:
- Info = Root.Data.GetInfo()
- f.write(' - warningif:\n')
- if Root.Condition != None:
- f.write(' condition: {}\n'.format(Root.Condition))
- f.write(' warning: {}\n'.format(Info.Warning))
- f.write(' timeOut: {}\n'.format(Info.TimeOut))
-
- if Root.OpCode == EFI_IFR_GUID_OP:
- Info = Root.Data.GetInfo()
- if type(Root.Data) == CIfrLabel: # type(Info) == EFI_IFR_GUID_LABEL
- f.write(' - label:\n')
- if Root.Condition != None:
- f.write(' condition: {}\n'.format(Root.Condition))
-
- f.write(' labelnumber: {} # LabelNumber\n'.format(Info.Number))
-
- if type(Root.Data) == CIfrBanner:
- f.write(' - banner:\n')
- if Root.Condition != None:
- f.write(' condition: {}\n'.format(Root.Condition))
-
- f.write(' title: {}\n'.format(Info.Title))
- f.write(' linenumber: {}\n'.format(Info.LineNumber))
- f.write(' align: {}\n'.format(Info.Alignment))
-
- if type(Root.Data) == CIfrTimeout:
- f.write(' - banner:\n')
- if Root.Condition != None:
- f.write(' condition: {}\n'.format(Root.Condition))
-
- f.write(' timeout: {}\n'.format(Info.TimeOut))
-
- if type(Root.Data) == CIfrClass:
- f.write(' Class: {}\n'.format(Info.Class))
-
- if type(Root.Data) == CIfrSubClass:
- f.write(' SubClass: {}\n'.format(Info.SubClass))
-
- if type(Root.Data) == CIfrGuid:
- f.write(' - guidop:\n')
- if Root.Condition != None:
- f.write(' condition: {}\n'.format(Root.Condition))
- f.write(' guid: {' + '{}, {}, {},'.format('0x%x'%(Info.Guid.Data1),'0x%x'%(Info.Guid.Data2), '0x%x'%(Info.Guid.Data3)) \
- + ' { ' + '{}, {}, {}, {}, {}, {}, {}, {}'.format('0x%x'%(Info.Guid.Data4[0]), '0x%x'%(Info.Guid.Data4[1]), '0x%x'%(Info.Guid.Data4[2]), '0x%x'%(Info.Guid.Data4[3]), \
- '0x%x'%(Info.Guid.Data4[4]), '0x%x'%(Info.Guid.Data4[5]), '0x%x'%(Info.Guid.Data4[6]), '0x%x'%(Info.Guid.Data4[7])) + ' }}\n')
-
-
- if Root.Child != []:
- for ChildNode in Root.Child:
- if Root.OpCode in ConditionOps:
- if ChildNode.OpCode in ConditionOps:
- ChildNode.Condition = Root.Condition + ' | ' + ChildNode.Condition
- else:
- ChildNode.Condition = Root.Condition
+ def GetCurArraySize(self):
+ Size = 1
+ if self.CurrQestVarInfo.VarType == EFI_IFR_TYPE_NUM_SIZE_8:
+ Size = 1
+ if self.CurrQestVarInfo.VarType == EFI_IFR_TYPE_NUM_SIZE_16:
+ Size = 2
+ if self.CurrQestVarInfo.VarType == EFI_IFR_TYPE_NUM_SIZE_32:
+ Size = 4
+ if self.CurrQestVarInfo.VarType == EFI_IFR_TYPE_NUM_SIZE_64:
+ Size = 8
- self.DumpYamlDfs(ChildNode, f)
+ return int(self.CurrQestVarInfo.VarTotalSize / Size)
+
+ def GetQuestionDB(self):
+ return self.VfrQuestionDB
- return
-del VfrSyntaxParser
\ No newline at end of file
+del VfrSyntaxParser
diff --git a/BaseTools/Source/Python/VfrCompiler/VfrTree.py b/BaseTools/Source/Python/VfrCompiler/VfrTree.py
deleted file mode 100644
index c78d2dd846..0000000000
--- a/BaseTools/Source/Python/VfrCompiler/VfrTree.py
+++ /dev/null
@@ -1,88 +0,0 @@
-from VfrCompiler.CommonCtypes import *
-from VfrCompiler.VfrFormPkg import *
-
-# Ifr related Info -> ctypes obj
-#?conditional Info
-# Structure Info
-
-
-class VfrTreeNode():
- def __init__(self, Opcode: int=None) -> None:
-
- self.OpCode = Opcode
- self.Data = None # save class or bytes
- self.Condition = None
- self.Expression = None
- self.Parent = None
- self.Child = []
-
-
- def hasCondition(self) ->bool:
- if self.Condition == None:
- return False
- else:
- return True
-
- # Get data from ctypes to bytes.
- def struct2stream(self, s) -> bytes:
- length = sizeof(s)
- p = cast(pointer(s), POINTER(c_char * length))
- return p.contents.raw
-
- def hasChild(self) -> bool:
- if self.Child == []:
- return False
- else:
- return True
-
- def isFinalChild(self) -> bool:
- ParTree = self.Parent
- if ParTree:
- if ParTree.Child[-1] == self:
- return True
- return False
-
-
- def insertChild(self, NewNode, pos: int=None) -> None:
- if len(self.Child) == 0:
- self.Child.append(NewNode)
- else:
- if not pos:
- LastTree = self.Child[-1]
- self.Child.append(NewNode)
- else:
- self.Child.insert(pos, NewNode)
-
- NewNode.Parent = self
-
-
- # lastNode.insertRel(newNode)
- def insertRel(self, newNode) -> None:
- if self.Parent:
- parentTree = self.Parent
- new_index = parentTree.Child.index(self) + 1
- parentTree.Child.insert(new_index, newNode)
- self.NextRel = newNode
- newNode.LastRel = self
-
-
- def deleteNode(self, deletekey: str) -> None:
- FindStatus, DeleteTree = self.FindNode(deletekey)
- if FindStatus:
- parentTree = DeleteTree.Parent
- lastTree = DeleteTree.LastRel
- nextTree = DeleteTree.NextRel
- if parentTree:
- index = parentTree.Child.index(DeleteTree)
- del parentTree.Child[index]
- if lastTree and nextTree:
- lastTree.NextRel = nextTree
- nextTree.LastRel = lastTree
- elif lastTree:
- lastTree.NextRel = None
- elif nextTree:
- nextTree.LastRel = None
- return DeleteTree
- else:
- print('Could not find the target tree')
- return None
diff --git a/BaseTools/Source/Python/VfrCompiler/VfrUtility.py b/BaseTools/Source/Python/VfrCompiler/VfrUtility.py
deleted file mode 100644
index b753dd1e1d..0000000000
--- a/BaseTools/Source/Python/VfrCompiler/VfrUtility.py
+++ /dev/null
@@ -1,1991 +0,0 @@
-from ast import Pass, Return
-from asyncio.windows_events import NULL
-from ctypes.wintypes import SIZEL
-from msilib.schema import Error
-from tkinter import N
-from turtle import goto
-from typing import List
-from unittest.mock import NonCallableMagicMock
-from xmlrpc.client import boolean
-from VfrCompiler.VfrError import *
-from VfrCompiler.CommonCtypes import *
-from abc import ABCMeta, abstractmethod
-import ctypes
-
-import sys
-
-VFR_PACK_SHOW = 0x02
-VFR_PACK_ASSIGN = 0x01
-VFR_PACK_PUSH = 0x04
-VFR_PACK_POP = 0x08
-DEFAULT_PACK_ALIGN = 0x8
-DEFAULT_ALIGN = 1
-MAX_NAME_LEN = 64
-MAX_BIT_WIDTH = 32
-EFI_VARSTORE_ID_MAX = 0xFFFF
-EFI_BITS_SHIFT_PER_UINT32 = 0x5
-EFI_BITS_PER_UINT32 = (1 << EFI_BITS_SHIFT_PER_UINT32)
-EFI_FREE_VARSTORE_ID_BITMAP_SIZE = int(
- (EFI_VARSTORE_ID_MAX + 1) / EFI_BITS_PER_UINT32)
-
-
-class SVfrPackStackNode(object):
-
- def __init__(self, Identifier, Number):
- self.Identifier = Identifier
- self.Number = Number
- self.Next = None
-
- def Match(self, Identifier):
- if Identifier == None:
- return True
- elif self.Identifier == None:
- return False
- elif self.Identifier == Identifier:
- return True
- else:
- return False
-
-
-class SVfrDataType(object):
-
- def __init__(self, TypeName=''):
- self.TypeName = TypeName
- self.Type = 0
- self.Align = 1
- self.TotalSize = 0
- self.HasBitField = False
- self.Members = None
- self.Next = None
-
-
-class SVfrDataField(object):
-
- def __init__(self, FieldName=None):
- self.FieldName = FieldName
- self.FieldType = None
- self.Offset = 0
- self.ArrayNum = 0
- self.IsBitField = False
- self.BitWidth = 0
- self.BitOffset = 0
- self.Next = None
-
-class InternalTypes():
- def __init__(self, TypeName, Type, Size, Align):
- self.TypeName = TypeName
- self.Type = Type
- self.Size = Size
- self.Align = Align
-
-gInternalTypesTable = [
- InternalTypes("UINT64", EFI_IFR_TYPE_NUM_SIZE_64,
- sizeof(ctypes.c_ulonglong), sizeof(ctypes.c_ulonglong)),
- InternalTypes("UINT32", EFI_IFR_TYPE_NUM_SIZE_32, sizeof(ctypes.c_ulong),
- sizeof(ctypes.c_ulong)),
- InternalTypes("UINT16", EFI_IFR_TYPE_NUM_SIZE_16, sizeof(ctypes.c_ushort),
- sizeof(ctypes.c_ushort)),
- InternalTypes("UINT8", EFI_IFR_TYPE_NUM_SIZE_8, sizeof(ctypes.c_ubyte),
- sizeof(ctypes.c_ubyte)),
- InternalTypes("BOOLEAN", EFI_IFR_TYPE_BOOLEAN, sizeof(ctypes.c_ubyte),
- sizeof(ctypes.c_ubyte)),
- InternalTypes("EFI_GUID", EFI_IFR_TYPE_OTHER, sizeof(EFI_GUID),
- sizeof(c_ubyte * 8)),
- InternalTypes("EFI_HII_DATE", EFI_IFR_TYPE_DATE, sizeof(EFI_HII_DATE),
- sizeof(ctypes.c_ushort)),
- InternalTypes("EFI_STRING_ID", EFI_IFR_TYPE_STRING,
- sizeof(ctypes.c_ushort), sizeof(ctypes.c_ushort)),
- InternalTypes("EFI_HII_TIME", EFI_IFR_TYPE_TIME, sizeof(EFI_HII_TIME),
- sizeof(ctypes.c_ubyte)),
- InternalTypes("EFI_HII_REF", EFI_IFR_TYPE_REF, sizeof(EFI_HII_REF),
- sizeof(EFI_GUID)),
-]
-
-class CVfrVarDataTypeDB(object):
-
- def __init__(self):
- self.__PackAlign = DEFAULT_PACK_ALIGN
- self.__PackStack = None
- self.__DataTypeList = None
- self.__NewDataType = None
- self.__CurrDataType = None
- self.__CurrDataField = None
- self.__FirstNewDataTypeName = None
- self.InternalTypesListInit()
-
-
- def InternalTypesListInit(self):
- for i in range(0, len(gInternalTypesTable)):
- pNewType = SVfrDataType()
- pNewType.TypeName = gInternalTypesTable[i].TypeName
- pNewType.Type = gInternalTypesTable[i].Type
- pNewType.Align = gInternalTypesTable[i].Align
- pNewType.TotalSize = gInternalTypesTable[i].Size
-
- if gInternalTypesTable[i].TypeName == 'EFI_HII_DATE':
- pYearField = SVfrDataField()
- pMonthField = SVfrDataField()
- pDayField = SVfrDataField()
-
- pYearField.FieldName = 'Year'
- pYearField.FieldType, _ = self.GetDataType('UINT16')
- pYearField.Offset = 0
- pYearField.Next = pMonthField
- pYearField.ArrayNum = 0
- pYearField.IsBitField = False
-
- pMonthField.FieldName = 'Month'
- pMonthField.FieldType, _ = self.GetDataType('UINT8')
- pMonthField.Offset = 2
- pMonthField.Next = pDayField
- pMonthField.ArrayNum = 0
- pMonthField.IsBitField = False
-
- pDayField.FieldName = 'Day'
- pDayField.FieldType, _ = self.GetDataType('UINT8')
- pDayField.Offset = 3
- pDayField.Next = None
- pDayField.ArrayNum = 0
- pDayField.IsBitField = False
-
- pNewType.Members = pYearField
-
- elif gInternalTypesTable[i].TypeName == 'EFI_HII_TIME':
- pHoursField = SVfrDataField()
- pMinutesField = SVfrDataField()
- pSecondsField = SVfrDataField()
-
- pHoursField.FieldName = 'Hours'
- pHoursField.FieldType, _ = self.GetDataType('UINT8')
- pHoursField.Offset = 0
- pHoursField.Next = pMinutesField
- pHoursField.ArrayNum = 0
- pHoursField.IsBitField = False
-
- pMinutesField.FieldName = 'Minutes'
- pMinutesField.FieldType, _ = self.GetDataType('UINT8')
- pMinutesField.Offset = 1
- pMinutesField.Next = pSecondsField
- pMinutesField.ArrayNum = 0
- pMinutesField.IsBitField = False
-
- pSecondsField.FieldName = 'Seconds'
- pSecondsField.FieldType, _ = self.GetDataType('UINT8')
- pSecondsField.Offset = 2
- pSecondsField.Next = None
- pSecondsField.ArrayNum = 0
- pSecondsField.IsBitField = False
-
- pNewType.Members = pHoursField
-
- elif gInternalTypesTable[i].TypeName == 'EFI_HII_REF':
- pQuestionIdField = SVfrDataField()
- pFormIdField = SVfrDataField()
- pFormSetGuidField = SVfrDataField()
- pDevicePathField = SVfrDataField()
-
- pQuestionIdField.FieldName = 'QuestionId'
- pQuestionIdField.FieldType, _ = self.GetDataType('UINT16')
- pQuestionIdField.Offset = 0
- pQuestionIdField.Next = pFormIdField
- pQuestionIdField.ArrayNum = 0
- pQuestionIdField.IsBitField = False
-
- pFormIdField.FieldName = 'FormId'
- pFormIdField.FieldType, _ = self.GetDataType('UINT16')
- pFormIdField.Offset = 2
- pFormIdField.Next = pFormSetGuidField
- pFormIdField.ArrayNum = 0
- pFormIdField.IsBitField = False
-
- pFormSetGuidField.FieldName = 'FormSetGuid'
- pFormSetGuidField.FieldType, _ = self.GetDataType('EFI_GUID')
- pFormSetGuidField.Offset = 4
- pFormSetGuidField.Next = pDevicePathField
- pFormSetGuidField.ArrayNum = 0
- pFormSetGuidField.IsBitField = False
-
- pDevicePathField.FieldName = 'DevicePath'
- pDevicePathField.FieldType, _ = self.GetDataType('EFI_STRING_ID')
- pDevicePathField.Offset = 20
- pDevicePathField.Next = None
- pDevicePathField.ArrayNum = 0
- pDevicePathField.IsBitField = False
-
- pNewType.Members = pQuestionIdField
-
- pNewType.Next = None
- self.__RegisterNewType(pNewType)
- pNewType = None
-
- def GetDataTypeList(self):
- return self.__DataTypeList
-
- def Pack(self,
- LineNum,
- Action,
- Identifier=None,
- Number=DEFAULT_PACK_ALIGN):
-
- if Action & VFR_PACK_SHOW:
- Msg = str.format('value of pragma pack(show) == %d' %
- (self.__PackAlign))
- gCVfrErrorHandle.PrintMsg(LineNum, 'Warning', Msg)
-
- if Action & VFR_PACK_PUSH:
- pNew = SVfrPackStackNode(Identifier, self.__PackAlign)
- if pNew == None:
- return VfrReturnCode.VFR_RETURN_FATAL_ERROR
- pNew.Next = self.__PackStack
- self.__PackStack = pNew
-
- if Action & VFR_PACK_POP:
- pNode = None
- if self.__PackStack == None:
- gCVfrErrorHandle.PrintMsg(LineNum, 'Error', '#pragma pack(pop...) : more pops than pushes')
-
- pNode = self.__PackStack
- while pNode != None:
- if pNode.Match(Identifier) == True:
- self.__PackAlign = pNode.Number
- self.__PackStack = pNode.Next
- pNode = pNode.Next
-
- if Action & VFR_PACK_ASSIGN:
- PackAlign = (Number + Number % 2) if (Number > 1) else Number
- if PackAlign == 0 or PackAlign > 16:
- gCVfrErrorHandle.PrintMsg(LineNum, 'Error', "expected pragma parameter to be '1', '2', '4', '8', or '16'")
- else:
- self.__PackAlign = PackAlign
-
- return VfrReturnCode.VFR_RETURN_SUCCESS
-
- def DeclareDataTypeBegin(self):
- pNewType = SVfrDataType()
-
- pNewType.TypeName = ''
- pNewType.Type = EFI_IFR_TYPE_OTHER
- pNewType.Align = DEFAULT_ALIGN
- pNewType.TotalSize = 0
- pNewType.HasBitField = False
- pNewType.Members = None
- pNewType.Next = None
- self.__NewDataType = pNewType
-
- def SetNewTypeType(self, Type):
- if self.__NewDataType == None:
- return VfrReturnCode.VFR_RETURN_ERROR_SKIPED
-
- if Type == None:
- return VfrReturnCode.VFR_RETURN_FATAL_ERROR
-
- self.__NewDataType.Type = Type # need to limit the value of the type
-
- return VfrReturnCode.VFR_RETURN_SUCCESS
-
- def SetNewTypeTotalSize(self, Size):
- self.__NewDataType.TotalSize = Size
-
- def SetNewTypeAlign(self, Align):
- self.__NewDataType.Align = Align
-
- def SetNewTypeName(self, TypeName):
- if self.__NewDataType == None:
- return VfrReturnCode.VFR_RETURN_ERROR_SKIPED
-
- if TypeName == None:
- return VfrReturnCode.VFR_RETURN_FATAL_ERROR
-
- if len(TypeName) >= MAX_NAME_LEN:
- return VfrReturnCode.VFR_RETURN_INVALID_PARAMETER
-
- pType = self.__DataTypeList
- while pType != None:
- if pType.TypeName == TypeName:
- return VfrReturnCode.VFR_RETURN_REDEFINED
- pType = pType.Next
-
- self.__NewDataType.TypeName = TypeName
- return VfrReturnCode.VFR_RETURN_SUCCESS
-
- def __AlignStuff(self, Size, Align):
- return Align - (Size) % (Align)
-
- def DeclareDataTypeEnd(self):
- if self.__NewDataType.TypeName == '':
- return
-
- if self.__NewDataType.TotalSize % self.__NewDataType.Align != 0:
- self.__NewDataType.TotalSize += self.__AlignStuff(
- self.__NewDataType.TotalSize, self.__NewDataType.Align)
-
- self.__RegisterNewType(self.__NewDataType)
- if self.__FirstNewDataTypeName == None:
- self.__FirstNewDataTypeName = self.__NewDataType.TypeName
-
- self.__NewDataType = None
-
- # two definitions
- def GetDataTypeSizeByTypeName(self, TypeName):
- Size = 0
- pDataType = self.__DataTypeList
- while pDataType != None:
- if pDataType.TypeName == TypeName:
- Size = pDataType.TotalSize
- return Size, VfrReturnCode.VFR_RETURN_SUCCESS
- pDataType = pDataType.Next
-
- return Size, VfrReturnCode.VFR_RETURN_UNDEFINED
-
- def GetDataTypeSizeByDataType(self, DataType):
- Size = 0
- DataType = DataType & 0x0F
- # For user defined data type, the size can't be got by this function.
- if DataType == EFI_IFR_TYPE_OTHER:
- return Size, VfrReturnCode.VFR_RETURN_SUCCESS
- pDataType = self.__DataTypeList
- while pDataType != None:
- if DataType == pDataType.Type:
- Size = pDataType.TotalSize
- return Size, VfrReturnCode.VFR_RETURN_SUCCESS
- pDataType = pDataType.Next
-
- return Size, VfrReturnCode.VFR_RETURN_UNDEFINED
-
- def __ExtractStructTypeName(self, VarStr):
- try:
- index = VarStr.index('.')
- except ValueError:
- return VarStr, len(VarStr)
- else:
- return VarStr[0:index], index + 1
-
- def __ExtractFieldNameAndArrary(self, VarStr, s):
-
- ArrayIdx = INVALID_ARRAY_INDEX
- s_copy = s
- while (s < len(VarStr) and VarStr[s] != '.' and VarStr[s] != '['
- and VarStr[s] != ']'):
- s += 1
-
- FName = VarStr[s_copy:s]
-
- if s == len(VarStr):
- return ArrayIdx, s, FName, VfrReturnCode.VFR_RETURN_SUCCESS
-
- elif VarStr[s] == '.':
- s += 1
- return ArrayIdx, s, FName, VfrReturnCode.VFR_RETURN_SUCCESS
-
- elif VarStr[s] == '[':
- s += 1
- try:
- e = s + VarStr[s:].index(']')
-
- except ValueError:
- return None, None, None, VfrReturnCode.VFR_RETURN_DATA_STRING_ERROR
- else:
- ArrayStr = VarStr[s:e]
- ArrayIdx = int(ArrayStr)
- if VarStr[e] == ']':
- e += 1
- if e < len(VarStr) and (VarStr[e] == '.'):
- e += 1
- return ArrayIdx, e, FName, VfrReturnCode.VFR_RETURN_SUCCESS
-
- elif VarStr[s] == ']':
- return None, None, None, VfrReturnCode.VFR_RETURN_DATA_STRING_ERROR
-
- return ArrayIdx, s, FName, VfrReturnCode.VFR_RETURN_SUCCESS
-
- def GetTypeField(self, FName, Type):
- if FName == None or Type == None:
- return None, VfrReturnCode.VFR_RETURN_FATAL_ERROR
-
- pField = Type.Members
- while (pField != None):
-
- if Type.Type == EFI_IFR_TYPE_TIME:
- if FName == 'Hour':
- FName = 'Hours'
- elif FName == 'Minute':
- FName == 'Minutes'
- elif FName == 'Second':
- FName = 'Seconds'
- if pField.FieldName == FName:
- Field = pField
- return Field, VfrReturnCode.VFR_RETURN_SUCCESS
-
- pField = pField.Next
-
- return None, VfrReturnCode.VFR_RETURN_UNDEFINED
-
- def IsThisBitField(self, VarStrName):
-
- TName, i = self.__ExtractStructTypeName(VarStrName)
- pType, ReturnCode = self.GetDataType(TName)
- if ReturnCode != VfrReturnCode.VFR_RETURN_SUCCESS:
- return None, ReturnCode
- pField = None
- while (i < len(VarStrName)):
- # i start from field
- _, i, FName, ReturnCode = self.__ExtractFieldNameAndArrary(
- VarStrName, i)
- if ReturnCode != VfrReturnCode.VFR_RETURN_SUCCESS:
- return None, ReturnCode
- pField, ReturnCode = self.GetTypeField(FName, pType)
- if ReturnCode != VfrReturnCode.VFR_RETURN_SUCCESS:
- return None, ReturnCode
- pType = pField.FieldType
-
- if pField != None and pField.IsBitField:
- return True, ReturnCode
- else:
- return False, ReturnCode
-
- def GetFieldOffset(self, Field, ArrayIdx, IsBitField):
-
- if Field == None:
- return None, VfrReturnCode.VFR_RETURN_FATAL_ERROR
-
- if (ArrayIdx != INVALID_ARRAY_INDEX) and (Field.ArrayNum == 0 or
- Field.ArrayNum <= ArrayIdx):
- return None, VfrReturnCode.VFR_RETURN_ERROR_ARRARY_NUM
-
- Idx = 0 if ArrayIdx == INVALID_ARRAY_INDEX else ArrayIdx
- if IsBitField:
- Offset = Field.BitOffset + Field.FieldType.TotalSize * Idx * 8
- else:
- Offset = Field.Offset + Field.FieldType.TotalSize * Idx
-
- return Offset, VfrReturnCode.VFR_RETURN_SUCCESS
-
- def __GetFieldWidth(self, Field):
- if Field == None:
- return 0
- return Field.FieldType.Type
-
- def __GetFieldSize(self, Field, ArrayIdx, BitField):
- if Field == None:
- return VfrReturnCode.VFR_RETURN_FATAL_ERROR
-
- if (ArrayIdx == INVALID_ARRAY_INDEX) and (Field.ArrayNum != 0):
- return Field.FieldType.TotalSize * Field.ArrayNum
- else:
-
- if BitField:
- return Field.BitWidth
- else:
- return Field.FieldType.TotalSize
-
- def GetDataFieldInfo(self, VarStr):
-
- # VarStr -> Type.Field
- Offset = 0
- Type = EFI_IFR_TYPE_OTHER
- Size = 0
- BitField = False
-
- TName, i = self.__ExtractStructTypeName(VarStr)
-
- pType, ReturnCode = self.GetDataType(TName)
- if ReturnCode != VfrReturnCode.VFR_RETURN_SUCCESS:
- return Offset, Type, Size, BitField, ReturnCode
-
- BitField, ReturnCode = self.IsThisBitField(VarStr)
-
- if ReturnCode != VfrReturnCode.VFR_RETURN_SUCCESS:
- return Offset, Type, Size, BitField, ReturnCode
-
- #?if it is not struct data type
- Type = pType.Type
- Size = pType.TotalSize
-
- while (i < len(VarStr)):
- ArrayIdx, i, FName, ReturnCode = self.__ExtractFieldNameAndArrary(
- VarStr, i)
- if ReturnCode != VfrReturnCode.VFR_RETURN_SUCCESS:
- return Offset, Type, Size, BitField, ReturnCode
- pField, ReturnCode = self.GetTypeField(FName, pType)
- if ReturnCode != VfrReturnCode.VFR_RETURN_SUCCESS:
- return Offset, Type, Size, BitField, ReturnCode
- pType = pField.FieldType
- Tmp, ReturnCode = self.GetFieldOffset(pField, ArrayIdx,
- pField.IsBitField)
- if ReturnCode != VfrReturnCode.VFR_RETURN_SUCCESS:
- return Offset, Type, Size, BitField, ReturnCode
-
- if BitField and pField.IsBitField == False:
- Offset = int(Offset + Tmp * 8)
- else:
- Offset = int(Offset + Tmp)
-
- Type = self.__GetFieldWidth(pField)
- Size = self.__GetFieldSize(pField, ArrayIdx, BitField)
-
- return Offset, Type, Size, BitField, VfrReturnCode.VFR_RETURN_SUCCESS
-
- def __RegisterNewType(self, New):
- New.Next = self.__DataTypeList
- self.__DataTypeList = New
- return
-
- def DataTypeAddField(self, FieldName, TypeName, ArrayNum, FieldInUnion):
-
- pFieldType, ReturnCode = self.GetDataType(TypeName)
-
- if ReturnCode != VfrReturnCode.VFR_RETURN_SUCCESS:
- return ReturnCode
-
- MaxDataTypeSize = self.__NewDataType.TotalSize
-
-
- if len(FieldName) >= MAX_NAME_LEN:
- return VfrReturnCode.VFR_RETURN_INVALID_PARAMETER
-
- pTmp = self.__NewDataType.Members
- while pTmp != None:
- if pTmp.FieldName == FieldName:
- return VfrReturnCode.VFR_RETURN_REDEFINED
- pTmp = pTmp.Next
-
- Align = min(self.__PackAlign, pFieldType.Align)
- pNewField = SVfrDataField()
- if pNewField == None:
- return VfrReturnCode.VFR_RETURN_OUT_FOR_RESOURCES
- pNewField.FieldName = FieldName
- pNewField.FieldType = pFieldType
- pNewField.ArrayNum = ArrayNum
- pNewField.IsBitField = False
-
- if self.__NewDataType.TotalSize % Align == 0:
- pNewField.Offset = self.__NewDataType.TotalSize
- else:
- pNewField.Offset = self.__NewDataType.TotalSize + self.__AlignStuff(
- self.__NewDataType.TotalSize, Align)
-
- if self.__NewDataType.Members == None:
- self.__NewDataType.Members = pNewField
- pNewField.Next = None
- else:
- pTmp = self.__NewDataType.Members
- while pTmp.Next != None:
- pTmp = pTmp.Next
- pTmp.Next = pNewField
- pNewField.Next = None
-
- self.__NewDataType.Align = min(
- self.__PackAlign, max(pFieldType.Align, self.__NewDataType.Align))
-
- if FieldInUnion:
- if MaxDataTypeSize < pNewField.FieldType.TotalSize:
- self.__NewDataType.TotalSize = pNewField.FieldType.TotalSize
- pNewField.Offset = 0
- else:
- Num = ArrayNum if ArrayNum != 0 else 1
- self.__NewDataType.TotalSize = pNewField.Offset + (
- pNewField.FieldType.TotalSize) * Num
-
- return VfrReturnCode.VFR_RETURN_SUCCESS
-
- def DataTypeAddBitField(self, FieldName, TypeName, Width, FieldInUnion):
-
- pFieldType, ReturnCode = self.GetDataType(TypeName)
- if ReturnCode != VfrReturnCode.VFR_RETURN_SUCCESS:
- return ReturnCode
-
- if Width > MAX_BIT_WIDTH:
- return VfrReturnCode.VFR_RETURN_BIT_WIDTH_ERROR
-
- if Width > (pFieldType.TotalSize) * 8:
- return VfrReturnCode.VFR_RETURN_BIT_WIDTH_ERROR
-
- if (FieldName != None) and (len(FieldName) >= MAX_NAME_LEN):
- return VfrReturnCode.VFR_RETURN_INVALID_PARAMETER
-
- if Width == 0 and FieldName != None:
- return VfrReturnCode.VFR_RETURN_INVALID_PARAMETER
-
- pTmp = self.__NewDataType.Members
- while pTmp != None:
- if FieldName != None and pTmp.FieldName == FieldName:
- return VfrReturnCode.VFR_RETURN_REDEFINED
- pTmp = pTmp.Next
-
- Align = min(self.__PackAlign, pFieldType.Align)
- UpdateTotalSize = False
-
- pNewField = SVfrDataField()
- if pNewField == None:
- return VfrReturnCode.VFR_RETURN_OUT_FOR_RESOURCES
-
- MaxDataTypeSize = self.__NewDataType.TotalSize
-
- pNewField.FieldName = FieldName
- pNewField.FieldType = pFieldType
- pNewField.IsBitField = True
- pNewField.BitWidth = Width
- pNewField.ArrayNum = 0
- pNewField.BitOffset = 0
- pNewField.Offset = 0
-
- if self.__NewDataType.Members == None:
- self.__NewDataType.Members = pNewField
- pNewField.Next = None
- else:
- pTmp = self.__NewDataType.Members
- while pTmp.Next != None:
- pTmp = pTmp.Next
- pTmp.Next = pNewField
- pNewField.Next = None
-
- if FieldInUnion:
- pNewField.Offset = 0
- if MaxDataTypeSize < pNewField.FieldType.TotalSize:
- self.__NewDataType.TotalSize = pNewField.FieldType.TotalSize
- else:
- # Check whether the bit fields can be contained within one FieldType.
- cond1 = (pTmp != None) and (pTmp.IsBitField) and (
- pTmp.FieldType.TypeName == pNewField.FieldType.TypeName)
- cond2 = (pTmp != None) and (pTmp.BitOffset - pTmp.Offset * 8 +
- pTmp.BitWidth + pNewField.BitWidth <=
- pNewField.FieldType.TotalSize * 8)
- if cond1 and cond2:
- pNewField.BitOffset = pTmp.BitOffset + pTmp.BitWidth
- pNewField.Offset = pTmp.Offset
-
- if pNewField.BitWidth == 0:
- pNewField.BitWidth = pNewField.FieldType.TotalSize * 8 - (
- pNewField.BitOffset - pTmp.Offset * 8)
- else:
- pNewField.BitOffset = self.__NewDataType.TotalSize * 8
- UpdateTotalSize = True
-
- if UpdateTotalSize:
- if self.__NewDataType.TotalSize % Align == 0:
- pNewField.Offset = self.__NewDataType.TotalSize
- else:
- pNewField.Offset = self.__NewDataType.TotalSize + self.__AlignStuff(
- self.__NewDataType.TotalSize, Align)
- self.__NewDataType.TotalSize = pNewField.Offset + pNewField.FieldType.TotalSize
-
- self.__NewDataType.Align = min(
- self.__PackAlign, max(pFieldType.Align, self.__NewDataType.Align))
- self.__NewDataType.HasBitField = True
- return VfrReturnCode.VFR_RETURN_SUCCESS
-
- def GetDataType(self, TypeName):
- if TypeName == None:
- return None, VfrReturnCode.VFR_RETURN_ERROR_SKIPED
-
- DataType = self.__DataTypeList
- while DataType != None:
- if DataType.TypeName == TypeName:
- return DataType, VfrReturnCode.VFR_RETURN_SUCCESS
- DataType = DataType.Next
- return None, VfrReturnCode.VFR_RETURN_UNDEFINED
-
- def DataTypeHasBitField(self, TypeName):
- if TypeName == None:
- return False
-
- pType = self.__DataTypeList
- while pType != None:
- if pType.TypeName == TypeName:
- break
- pType = pType.Next
-
- if pType == None:
- return False
-
- pTmp = pType.Members
- while pTmp != None:
- if pTmp.IsBitField:
- return True
- pTmp = pTmp.Next
- return False
-
- def Dump(self, FileName):
- try:
- with open(FileName, 'w') as f:
- f.write("PackAlign = " + str(self.__PackAlign) + '\n')
- pNode = self.__DataTypeList
- while pNode != None:
- f.write('struct {} : Align : {} TotalSize : '.format(str(pNode.TypeName), str(pNode.Align)))
- f.write('%#x\n'%(pNode.TotalSize))
- # f.write(" struct " + str(pNode.TypeName) + " : " + " Align " + str(pNode.Align)) + " TotalSize " + str('%#x'%pNode.TotalSize))
- f.write('struct {} \n'.format(str(pNode.TypeName)))
- FNode = pNode.Members
- while(FNode != None):
- if FNode.ArrayNum > 0:
- f.write('FieldName : {} , Offset : {}, ArrayNum : {} , FieldTypeName : {} , IsBitField : {} \n '.format(str(FNode.FieldName), str(FNode.Offset), str(FNode.ArrayNum), str(FNode.FieldType.TypeName), str(FNode.IsBitField)))
- else:
- f.write('FieldName : {} , Offset : {}, FieldTypeName : {} , IsBitField : {} \n '.format(str(FNode.FieldName), str(FNode.Offset), str(FNode.FieldType.TypeName), str(FNode.IsBitField)))
- FNode = FNode.Next
- f.write('\n')
- pNode = pNode.Next
- f.close()
- except IOError as e:
- print("error")
- pass
-
-class SVfrDefaultStoreNode(object):
-
- def __init__(self,
- ObjAddr=None,
- RefName='',
- DefaultStoreNameId=0,
- DefaultId=0):
- self.ObjAddr = ObjAddr
- self.RefName = RefName
- self.DefaultStoreNameId = DefaultStoreNameId
- self.DefaultId = DefaultId
- self.Next = None
-
-
-class CVfrDefaultStore(object):
-
- def __init__(self):
- self.__DefaultStoreList = None
-
- def RegisterDefaultStore(self, ObjAddr: EFI_IFR_DEFAULTSTORE, RefName, DefaultStoreNameId, DefaultId):
- if RefName == '' or RefName == None:
- return VfrReturnCode.VFR_RETURN_FATAL_ERROR
-
- pNode = self.__DefaultStoreList
- while pNode != None:
- if pNode.RefName == RefName:
- return VfrReturnCode.VFR_RETURN_REDEFINED
- pNode = pNode.Next
-
- pNode = SVfrDefaultStoreNode(ObjAddr, RefName, DefaultStoreNameId, DefaultId)
-
- if pNode == None:
- return VfrReturnCode.VFR_RETURN_OUT_FOR_RESOURCES
-
- pNode.Next = self.__DefaultStoreList
- self.__DefaultStoreList = pNode
-
- return VfrReturnCode.VFR_RETURN_SUCCESS
-
- def DefaultIdRegistered(self, DefaultId):
- pNode = self.__DefaultStoreList
- while pNode != None:
- if pNode.DefaultId == DefaultId:
- return True
- pNode = pNode.Next
-
- return False
-
- def ReRegisterDefaultStoreById(self, DefaultId, RefName, DefaultStoreNameId):
-
- pNode = self.__DefaultStoreList
- while pNode != None:
- if pNode.DefaultId == DefaultId:
- break
- pNode = pNode.Next
-
- if pNode == None:
- return None, VfrReturnCode.VFR_RETURN_UNDEFINED
- else:
- if pNode.DefaultStoreNameId == EFI_STRING_ID_INVALID:
- pNode.DefaultStoreNameId == DefaultStoreNameId
- pNode.RefName = RefName
- if pNode.ObjAddr != None:
- pNode.ObjAddr.DefaultName = DefaultStoreNameId
- else:
- return None, VfrReturnCode.VFR_RETURN_REDEFINED
-
- return pNode, VfrReturnCode.VFR_RETURN_SUCCESS
-
- def GetDefaultId(self, RefName):
- pTmp = self.__DefaultStoreList
- while(pTmp != None):
- if pTmp.RefName == RefName:
- DefaultId = pTmp.DefaultId
- return DefaultId, VfrReturnCode.VFR_RETURN_SUCCESS
- pTmp = pTmp.Next
- return None, VfrReturnCode.VFR_RETURN_UNDEFINED
-
- def BufferVarStoreAltConfigAdd(self, DefaultId, BaseInfo, VarStoreName,
- VarStoreGuid, Type, Value):
- if VarStoreName == None:
- return VfrReturnCode.VFR_RETURN_FATAL_ERROR
- pNode = self.__DefaultStoreList
- while pNode != None:
- if pNode.DefaultId == DefaultId:
- break
- pNode = pNode.Next
- if pNode == None:
- return VfrReturnCode.VFR_RETURN_UNDEFINED
- # pNode.DefaultId sprintf (NewAltCfg, "%04x", pNode->mDefaultId)
- gCVfrBufferConfig.Open()
- if gCVfrBufferConfig.Select(VarStoreName, VarStoreGuid) == 0:
- Returnvalue = gCVfrBufferConfig.Write('a', VarStoreName,
- VarStoreGuid,
- pNode.DefaultId, Type,
- BaseInfo.Info.VarOffset,
- BaseInfo.VarTotalSize, Value)
- if Returnvalue != 0:
- gCVfrBufferConfig.Close()
- return VfrReturnCode(Returnvalue)
- gCVfrBufferConfig.Close()
- return VfrReturnCode.VFR_RETURN_SUCCESS
-
-
-
-class EFI_VFR_VARSTORE_TYPE(Enum):
- EFI_VFR_VARSTORE_INVALID = 0
- EFI_VFR_VARSTORE_BUFFER = 1
- EFI_VFR_VARSTORE_EFI = 2
- EFI_VFR_VARSTORE_NAME = 3
- EFI_VFR_VARSTORE_BUFFER_BITS = 4
-
-
-class EfiVar():
-
- def __init__(self, VarName=0, VarSize=0):
- self.EfiVarName = VarName
- self.EfiVarSize = VarSize
-
-
-DEFAULT_NAME_TABLE_ITEMS = 1024
-
-
-class SVfrVarStorageNode():
-
- def __init__(self,
- VarStoreName='',
- VarStoreId=0,
- Guid=None,
- Attributes=0,
- Flag=True,
- EfiValue=None,
- DataType=None,
- BitsVarstore=False):
-
- self.Guid = Guid
- self.VarStoreName = VarStoreName
- self.VarStoreId = VarStoreId
- self.AssignedFlag = Flag
- self.Attributes = Attributes
- self.Next = None
- self.EfiVar = EfiValue
- self.DataType = DataType
- self.NameSpace = []
-
- if EfiValue != None:
- self.VarstoreType = EFI_VFR_VARSTORE_TYPE.EFI_VFR_VARSTORE_EFI
- elif DataType != None:
- if BitsVarstore:
- self.VarstoreType = EFI_VFR_VARSTORE_TYPE.EFI_VFR_VARSTORE_BUFFER_BITS
- else:
- self.VarstoreType = EFI_VFR_VARSTORE_TYPE.EFI_VFR_VARSTORE_BUFFER
- else:
- self.VarstoreType = EFI_VFR_VARSTORE_TYPE.EFI_VFR_VARSTORE_NAME
-
-class SConfigItem():
-
- def __init__(self,
- Name=None,
- Guid=None,
- Id=None,
- Type=None,
- Offset=None,
- Width=None,
- Value=None):
- self.Name = Name # varstore name
- self.Guid = Guid # varstore guid, varstore name + guid deside one varstore
- self.Id = Id # default ID
- if Type != None:
- # list of Offset/Value in the varstore
- self.InfoStrList = SConfigInfo(Type, Offset, Width, Value)
- else:
- self.InfoStrList = None
- self.Next = None
-
-
-class SConfigInfo():
-
- def __init__(self, Type, Offset, Width, Value: EFI_IFR_TYPE_VALUE):
- self.Type = Type
- self.Offset = Offset
- self.Width = Width
- self.Next = None
- self.Value = Value
-
-class CVfrBufferConfig(object):
- __metaclass__ = ABCMeta
-
- def __init__(self):
- self.__ItemListHead = None # SConfigItem
- self.__ItemListTail = None
- self.__ItemListPos = None
-
- def GetVarItemList(self):
- return self.__ItemListHead
-
- @abstractmethod
- def Open(self):
- self.__ItemListPos = self.__ItemListHead
-
- @abstractmethod
- def Close(self):
- self.__ItemListPos = None
-
- @abstractmethod
- def Select(self, Name, Guid, Id=None):
- if Name == None or Guid == None:
- self.__ItemListPos = self.__ItemListHead
- return 0
- else:
- p = self.__ItemListHead
- while p != None:
- if p.Name != Name or p.Guid.__cmp__(Guid) == False:
- p = p.Next
- continue
- if Id != None:
- if p.Id == None or p.Id != Id:
- p = p.Next
- continue
- elif p.Id != None:
- p = p.Next
- continue
- self.__ItemListPos = p
- return 0
- return 1
-
- @abstractmethod
- def Register(self, Name, Guid, Id=None):
- if self.Select(Name, Guid) == 0:
- return 1
- pNew = SConfigItem(Name, Guid, Id)
- if pNew == None:
- return 2
- if self.__ItemListHead == None:
- self.__ItemListHead = pNew
- self.__ItemListTail = pNew
- else:
- self.__ItemListTail.Next = pNew
- self.__ItemListTail = pNew
- self.__ItemListPos = pNew
- return 0
-
- @abstractmethod
- def Write(self, Mode, Name, Guid, Id, Type, Offset, Width,
- Value: EFI_IFR_TYPE_VALUE):
- Ret = self.Select(Name, Guid)
- if Ret != 0:
- return Ret
-
- if Mode == 'a': # add
- if self.Select(Name, Guid, Id) != 0:
- pItem = SConfigItem(Name, Guid, Id, Type, Offset, Width, Value)
- if pItem == None:
- return 2
-
- if self.__ItemListHead == None:
- self.__ItemListHead = pItem
- self.__ItemListTail = pItem
- else:
- self.__ItemListTail.Next = pItem
- self.__ItemListTail = pItem
-
- self.__ItemListPos = pItem
-
- else:
- # tranverse the list to find out if there's already the value for the same offset
- pInfo = self.__ItemListPos.InfoStrList
- while pInfo != None:
- if pInfo.Offset == Offset:
- return 0
- pInfo = pInfo.Next
-
- pInfo = SConfigInfo(Type, Offset, Width, Value)
- if pInfo == None:
- return 2
-
- pInfo.Next = self.__ItemListPos.InfoStrList
- self.__ItemListPos.InfoStrList = pInfo
-
- elif Mode == 'd': # delete
- if self.__ItemListHead == self.__ItemListPos:
- self.__ItemListHead = self.__ItemListPos.Next
-
- pItem = self.__ItemListHead
- while pItem.Next != self.__ItemListPos:
- pItem = pItem.Next
- pItem.Next = self.__ItemListPos.Next
-
- if self.__ItemListTail == self.__ItemListPos:
- self.__ItemListTail = pItem
-
- self.__ItemListPos = pItem.Next
-
- elif Mode == 'i': # set info
- if Id != None:
- self.__ItemListPos.Id = Id
- else:
- return 1
- return 0
-
-gCVfrBufferConfig = CVfrBufferConfig()
-
-class EFI_VARSTORE_INFO(Structure):
- _pack_ = 1
- _fields_ = [
- ('VarStoreId', c_uint16),
- ('Info', VarStoreInfoNode),
- ('VarType', c_uint8),
- ('VarTotalSize', c_uint32),
- ('IsBitVar', c_bool),
- ]
-
- def __init__(self,
- VarStoreId=EFI_VARSTORE_ID_INVALID,
- VarName=EFI_STRING_ID_INVALID,
- VarOffset=EFI_VAROFFSET_INVALID,
- VarType=EFI_IFR_TYPE_OTHER,
- VarTotalSize=0,
- IsBitVar=False):
-
- self.VarStoreId = VarStoreId
- self.Info.VarName = VarName
- self.Info.VarOffset = VarOffset
- self.VarTotalSize = VarTotalSize
- self.IsBitVar = IsBitVar
- self.VarType = VarType
-
-
-class BufferVarStoreFieldInfoNode():
-
- def __init__(self, BaseInfo: EFI_VARSTORE_INFO):
-
- self.VarStoreInfo = EFI_VARSTORE_INFO()
- self.VarStoreInfo.VarType = BaseInfo.VarType
- self.VarStoreInfo.VarTotalSize = BaseInfo.VarTotalSize
- self.VarStoreInfo.Info.VarOffset = BaseInfo.Info.VarOffset
- self.VarStoreInfo.VarStoreId = BaseInfo.VarStoreId
- self.Next = None
-
-
-class CVfrDataStorage(object):
-
- def __init__(self):
- self.__BufferVarStoreList = None # SVfrVarStorageNode
- self.__EfiVarStoreList = None
- self.__NameVarStoreList = None
- self.__CurrVarStorageNode = None
- self.__NewVarStorageNode = None
- self.__BufferFieldInfoListHead = None
- self.__mBufferFieldInfoListTail = None
- self.__FreeVarStoreIdBitMap = []
- for i in range(0, EFI_FREE_VARSTORE_ID_BITMAP_SIZE):
- self.__FreeVarStoreIdBitMap.append(0)
- #Question ID0 is reserved
- self.__FreeVarStoreIdBitMap[0] = 0x80000000
-
- def GetBufferVarStoreList(self):
- return self.__BufferVarStoreList
-
- def __CheckGuidField(self, pNode, StoreGuid, HasFoundOne, ReturnCode):
- if StoreGuid != None:
- #?If has guid info, compare the guid filed.
- if pNode.Guid.__cmp__(StoreGuid):
- self.__CurrVarStorageNode = pNode
- ReturnCode = VfrReturnCode.VFR_RETURN_SUCCESS
- return True, ReturnCode, HasFoundOne
- else:
- #?not has Guid field, check whether this name is the only one.
- if HasFoundOne:
- # The name has conflict, return name redefined.
- ReturnCode = VfrReturnCode.VFR_RETURN_VARSTORE_NAME_REDEFINED_ERROR
- return True, ReturnCode, HasFoundOne
-
- self.__CurrVarStorageNode = pNode
- HasFoundOne = True
- return False, ReturnCode, HasFoundOne
-
- def __GetVarStoreByDataType(self, DataTypeName, VarGuid):
- MatchNode = None
- pNode = self.__BufferVarStoreList
- while pNode != None:
- if pNode.DataType.TypeName != DataTypeName:
- pNode = pNode.Next
- continue
- if VarGuid != None:
- if pNode.Guid.__cmp__(VarGuid):
- return pNode, VfrReturnCode.VFR_RETURN_SUCCESS
- else:
- if MatchNode == None:
- MatchNode = pNode
- else:
- # More than one varstores referred the same data structures
- return None, VfrReturnCode.VFR_RETURN_VARSTORE_DATATYPE_REDEFINED_ERROR
- pNode = pNode.Next
-
- if MatchNode == None:
- return MatchNode, VfrReturnCode.VFR_RETURN_UNDEFINED
-
- return MatchNode, VfrReturnCode.VFR_RETURN_SUCCESS
-
- """
- Base on the input store name and guid to find the varstore id.
- If both name and guid are inputed, base on the name and guid to
- found the varstore. If only name inputed, base on the name to
- found the varstore and go on to check whether more than one varstore
- has the same name. If only has found one varstore, return this
- varstore; if more than one varstore has same name, return varstore
- name redefined error. If no varstore found by varstore name, call
- function GetVarStoreByDataType and use inputed varstore name as
- data type name to search.
- """
-
- def GetVarStoreId(self, StoreName, StoreGuid=None):
-
- ReturnCode = None
- HasFoundOne = False
- self.__CurrVarStorageNode = None
-
- pNode = self.__BufferVarStoreList
- while pNode != None:
- if pNode.VarStoreName == StoreName:
- Result, ReturnCode, HasFoundOne = self.__CheckGuidField(
- pNode, StoreGuid, HasFoundOne, ReturnCode)
- if Result:
- VarStoreId = self.__CurrVarStorageNode.VarStoreId
- return VarStoreId, ReturnCode
- pNode = pNode.Next
-
- pNode = self.__EfiVarStoreList
- while pNode != None:
- if pNode.VarStoreName == StoreName:
- Result, ReturnCode, HasFoundOne = self.__CheckGuidField(
- pNode, StoreGuid, HasFoundOne, ReturnCode)
- if Result:
- VarStoreId = self.__CurrVarStorageNode.VarStoreId
- return VarStoreId, ReturnCode
- pNode = pNode.Next
-
- pNode = self.__NameVarStoreList
- while pNode != None:
- if pNode.VarStoreName == StoreName:
- Result, ReturnCode, HasFoundOne = self.__CheckGuidField(
- pNode, StoreGuid, HasFoundOne, ReturnCode)
- if Result:
- VarStoreId = self.__CurrVarStorageNode.VarStoreId
- return VarStoreId, ReturnCode
- pNode = pNode.Next
-
- if HasFoundOne:
- VarStoreId = self.__CurrVarStorageNode.VarStoreId
- return VarStoreId, VfrReturnCode.VFR_RETURN_SUCCESS
-
- VarStoreId = EFI_VARSTORE_ID_INVALID
- pNode, ReturnCode = self.__GetVarStoreByDataType(StoreName,
- StoreGuid) #
- if pNode != None:
- self.__CurrVarStorageNode = pNode
- VarStoreId = pNode.VarStoreId
-
- return VarStoreId, ReturnCode
-
- def __GetFreeVarStoreId(self, VarType):
-
- Index = 0
- for i in range(0, EFI_FREE_VARSTORE_ID_BITMAP_SIZE):
- if self.__FreeVarStoreIdBitMap[i] != 0xFFFFFFFF:
- Index = i
- break
- if Index == EFI_FREE_VARSTORE_ID_BITMAP_SIZE:
- return EFI_VARSTORE_ID_INVALID
-
- Offset = 0
- Mask = 0x80000000
- while Mask != 0:
- if (self.__FreeVarStoreIdBitMap[Index] & Mask) == 0:
- self.__FreeVarStoreIdBitMap[Index] |= Mask
- return (Index << EFI_BITS_SHIFT_PER_UINT32) + Offset
- Mask >>= 1
- Offset += 1
- return EFI_VARSTORE_ID_INVALID
-
- def __CheckVarStoreIdFree(self, VarStoreId):
-
- Index = int(VarStoreId / EFI_BITS_PER_UINT32)
- Offset = VarStoreId % EFI_BITS_PER_UINT32
- return (self.__FreeVarStoreIdBitMap[Index] &
- (0x80000000 >> Offset)) == 0
-
- def __MarkVarStoreIdUsed(self, VarStoreId):
-
- Index = int(VarStoreId / EFI_BITS_PER_UINT32)
- Offset = VarStoreId % EFI_BITS_PER_UINT32
- self.__FreeVarStoreIdBitMap[Index] |= (0x80000000 >> Offset)
-
- def DeclareBufferVarStore(self,
- StoreName,
- Guid,
- DataTypeDB,
- TypeName,
- VarStoreId,
- IsBitVarStore,
- Attr=0,
- Flag=True):
-
- if StoreName == None or Guid == None or DataTypeDB == None:
- return VfrReturnCode.VFR_RETURN_FATAL_ERROR
- _, ReturnCode = self.GetVarStoreId(StoreName, Guid)
-
- if ReturnCode == VfrReturnCode.VFR_RETURN_SUCCESS:
- return VfrReturnCode.VFR_RETURN_REDEFINED
-
- DataType, ReturnCode = DataTypeDB.GetDataType(TypeName)
-
- if ReturnCode != VfrReturnCode.VFR_RETURN_SUCCESS:
- return ReturnCode
-
- if VarStoreId == EFI_VARSTORE_ID_INVALID:
- VarStoreId = self.__GetFreeVarStoreId(
- EFI_VFR_VARSTORE_TYPE.EFI_VFR_VARSTORE_BUFFER)
- else:
- if self.__CheckVarStoreIdFree(VarStoreId) == False:
- return VfrReturnCode.VFR_RETURN_VARSTOREID_REDEFINED
- self.__MarkVarStoreIdUsed(VarStoreId)
- pNew = SVfrVarStorageNode(StoreName, VarStoreId, Guid, Attr, Flag, None,
- DataType, IsBitVarStore)
-
- if pNew == None:
- return VfrReturnCode.VFR_RETURN_OUT_FOR_RESOURCES
-
- pNew.Next = self.__BufferVarStoreList
- self.__BufferVarStoreList = pNew
-
- if gCVfrBufferConfig.Register(StoreName, Guid) != 0:
- return VfrReturnCode.VFR_RETURN_FATAL_ERROR
-
- return VfrReturnCode.VFR_RETURN_SUCCESS
-
- def DeclareNameVarStoreBegin(self, StoreName, VarStoreId):
- if StoreName == None:
- return VfrReturnCode.VFR_RETURN_FATAL_ERROR
-
- _, ReturnCode = self.GetVarStoreId(StoreName)
- if ReturnCode == VfrReturnCode.VFR_RETURN_SUCCESS:
- return VfrReturnCode.VFR_RETURN_REDEFINED
-
- if VarStoreId == EFI_VARSTORE_ID_INVALID:
- VarStoreId = self.__GetFreeVarStoreId(
- EFI_VFR_VARSTORE_TYPE.EFI_VFR_VARSTORE_NAME)
- else:
- if self.__CheckVarStoreIdFree(VarStoreId) == False:
- return VfrReturnCode.VFR_RETURN_VARSTOREID_REDEFINED
- self.__MarkVarStoreIdUsed(VarStoreId)
-
- pNode = SVfrVarStorageNode(StoreName, VarStoreId)
-
- if pNode == None:
- return VfrReturnCode.VFR_RETURN_OUT_FOR_RESOURCES
-
- self.__NewVarStorageNode = pNode
- return VfrReturnCode.VFR_RETURN_SUCCESS
-
- def DeclareNameVarStoreEnd(self, Guid):
- self.__NewVarStorageNode.Guid = Guid
- self.__NewVarStorageNode.Next = self.__NameVarStoreList
- self.__NameVarStoreList = self.__NewVarStorageNode
- self.__NewVarStorageNode = None
-
- def NameTableAddItem(self, Item):
- self.__NewVarStorageNode.NameSpace.append(Item)
- return VfrReturnCode.VFR_RETURN_SUCCESS
-
- def GetNameVarStoreInfo(self, BaseInfo, Index):
- if BaseInfo == None:
- return VfrReturnCode.VFR_RETURN_FATAL_ERROR
-
- if self.__CurrVarStorageNode == None:
- return VfrReturnCode.VFR_RETURN_GET_NVVARSTORE_ERROR
-
- BaseInfo.Info.VarName = self.__CurrVarStorageNode.NameSpace[Index]
-
- return VfrReturnCode.VFR_RETURN_SUCCESS
-
- def GetVarStoreType(self, VarStoreId):
-
- VarStoreType = EFI_VFR_VARSTORE_TYPE.EFI_VFR_VARSTORE_INVALID
-
- if VarStoreId == EFI_VARSTORE_ID_INVALID:
- return VarStoreType
-
- pNode = self.__BufferVarStoreList
- while pNode != None:
- if pNode.VarStoreId == VarStoreId:
- VarStoreType = pNode.VarstoreType
- return VarStoreType
- pNode = pNode.Next
-
- pNode = self.__EfiVarStoreList
- while pNode != None:
- if pNode.VarStoreId == VarStoreId:
- VarStoreType = pNode.VarstoreType
- return VarStoreType
- pNode = pNode.Next
-
- pNode = self.__NameVarStoreList
- while pNode != None:
- if pNode.VarStoreId == VarStoreId:
- VarStoreType = pNode.VarstoreType
- return VarStoreType
- pNode = pNode.Next
-
- return VarStoreType
-
- def GetVarStoreName(self, VarStoreId):
-
- pNode = self.__BufferVarStoreList
- while pNode != None:
- if pNode.VarStoreId == VarStoreId:
- return pNode.VarStoreName, VfrReturnCode.VFR_RETURN_SUCCESS
- pNode = pNode.Next
-
- pNode = self.__EfiVarStoreList
- while pNode != None:
- if pNode.VarStoreId == VarStoreId:
- return pNode.VarStoreName, VfrReturnCode.VFR_RETURN_SUCCESS
- pNode = pNode.Next
-
- pNode = self.__NameVarStoreList
- while pNode != None:
- if pNode.VarStoreId == VarStoreId:
- return pNode.VarStoreName, VfrReturnCode.VFR_RETURN_SUCCESS
- pNode = pNode.Next
-
- return None, VfrReturnCode.VFR_RETURN_UNDEFINED
-
-
- def GetBufferVarStoreDataTypeName(self, VarStoreId):
-
- DataTypeName = None
- if VarStoreId == EFI_VARSTORE_ID_INVALID:
- return DataTypeName, VfrReturnCode.VFR_RETURN_FATAL_ERROR
-
- pNode = self.__BufferVarStoreList
- while pNode != None:
- if pNode.VarStoreId == VarStoreId:
- DataTypeName = pNode.DataType.TypeName
- return DataTypeName, VfrReturnCode.VFR_RETURN_SUCCESS
- pNode = pNode.Next
-
- return DataTypeName, VfrReturnCode.VFR_RETURN_UNDEFINED
-
- def GetEfiVarStoreInfo(self, BaseInfo: EFI_VARSTORE_INFO):
-
- if BaseInfo == None:
- return VfrReturnCode.VFR_RETURN_FATAL_ERROR
-
- if self.__CurrVarStorageNode == None:
- return VfrReturnCode.VFR_RETURN_GET_EFIVARSTORE_ERROR
-
- BaseInfo.Info.VarName = self.__CurrVarStorageNode.EfiVar.EfiVarName
- BaseInfo.VarTotalSize = self.__CurrVarStorageNode.EfiVar.EfiVarSize
-
- if BaseInfo.VarTotalSize == 1:
- BaseInfo.VarType = EFI_IFR_TYPE_NUM_SIZE_8
- elif BaseInfo.VarTotalSize == 2:
- BaseInfo.VarType = EFI_IFR_TYPE_NUM_SIZE_16
- elif BaseInfo.VarTotalSize == 4:
- BaseInfo.VarType = EFI_IFR_TYPE_NUM_SIZE_32
- elif BaseInfo.VarTotalSize == 8:
- BaseInfo.VarType = EFI_IFR_TYPE_NUM_SIZE_64
- else:
- return VfrReturnCode.VFR_RETURN_FATAL_ERROR
-
- return VfrReturnCode.VFR_RETURN_SUCCESS
-
- def GetVarStoreGuid(self, VarStoreId):
-
- VarGuid = None
- if VarStoreId == EFI_VARSTORE_ID_INVALID:
- return VarGuid
-
- pNode = self.__BufferVarStoreList
- while pNode != None:
- if pNode.VarStoreId == VarStoreId:
- VarGuid = pNode.Guid
- return VarGuid
- pNode = pNode.Next
-
- pNode = self.__EfiVarStoreList
- while pNode != None:
- if pNode.VarStoreId == VarStoreId:
- VarGuid = pNode.Guid
- return VarGuid
- pNode = pNode.Next
-
- pNode = self.__NameVarStoreList
- while pNode != None:
- if pNode.VarStoreId == VarStoreId:
- VarGuid = pNode.Guid
- return VarGuid
- pNode = pNode.Next
-
- return VarGuid
-
- def AddBufferVarStoreFieldInfo(self, BaseInfo: EFI_VARSTORE_INFO):
-
- pNew = BufferVarStoreFieldInfoNode(BaseInfo)
- if pNew == None:
- return VfrReturnCode.VFR_RETURN_FATAL_ERROR
-
- if self.__BufferFieldInfoListHead == None:
- self.__BufferFieldInfoListHead = pNew
- self.__mBufferFieldInfoListTail = pNew
- else:
- self.__mBufferFieldInfoListTail.Next = pNew
- self.__mBufferFieldInfoListTail = pNew
-
- return VfrReturnCode.VFR_RETURN_SUCCESS
-
-
-class CVfrStringDB(object):
-
- def __init__(self):
- self.__StringFileName = ''
-
- def GetVarStoreNameFromStringId(self, StringId):
- if self.__StringFileName == '':
- return None
- try:
- f = open(self.__StringFileName)
- StringPtr = f.read()
- f.close()
- except IOError:
- print('Error')
-
-gCVfrStringDB = CVfrStringDB()
-
-EFI_RULE_ID_START = 0x01
-EFI_RULE_ID_INVALID = 0x00
-
-
-class SVfrRuleNode():
-
- def __init__(self, RuleName=None, RuleId=0):
- self.RuleId = RuleId
- self.RuleName = RuleName
- self.Next = None
-
-
-class CVfrRulesDB(object):
-
- def __init__(self):
- self.__RuleList = None
- self.__FreeRuleId = EFI_VARSTORE_ID_START
-
- def RegisterRule(self, RuleName):
- if RuleName == None:
- return
-
- pNew = SVfrRuleNode(RuleName, self.__FreeRuleId)
- if pNew == None: return
- self.__FreeRuleId += 1
- pNew.Next = self.__RuleList
- self.__RuleList = pNew
-
- def GetRuleId(self, RuleName):
- if RuleName == None:
- return
-
- pNode = self.__RuleList
- while pNode != None:
- if pNode.RuleName == RuleName:
- return pNode.RuleId
- pNode = pNode.Next
-
- return EFI_RULE_ID_INVALID
-
-
-EFI_QUESTION_ID_MAX = 0xFFFF
-EFI_FREE_QUESTION_ID_BITMAP_SIZE = int(
- (EFI_QUESTION_ID_MAX + 1) / EFI_BITS_PER_UINT32)
-EFI_QUESTION_ID_INVALID = 0x0
-
-
-class EFI_QUESION_TYPE(Enum):
- QUESTION_NORMAL = 0
- QUESTION_DATE = 1
- QUESTION_TIME = 2
- QUESTION_REF = 3
-
-
-class SVfrQuestionNode():
-
- def __init__(self, Name=None, VarIdStr=None, BitMask=0): #
- self.Name = Name
- self.VarIdStr = VarIdStr
- self.QuestionId = EFI_QUESTION_ID_INVALID
- self.BitMask = BitMask
- self.Next = None
- self.QType = EFI_QUESION_TYPE.QUESTION_NORMAL
-
-
-DATE_YEAR_BITMASK = 0x0000FFFF
-DATE_MONTH_BITMASK = 0x00FF0000
-DATE_DAY_BITMASK = 0xFF000000
-TIME_HOUR_BITMASK = 0x000000FF
-TIME_MINUTE_BITMASK = 0x0000FF00
-TIME_SECOND_BITMASK = 0x00FF0000
-
-
-class CVfrQuestionDB(object):
-
- def __init__(self):
- self.__FreeQIdBitMap = []
- for i in range(0, EFI_FREE_QUESTION_ID_BITMAP_SIZE):
- self.__FreeQIdBitMap.append(0)
-
- # Question ID 0 is reserved.
- self.__FreeQIdBitMap[0] = 0x80000000
-
- self.__QuestionList = None
-
- def FindQuestionByName(self, Name):
- if Name == None:
- return VfrReturnCode.VFR_RETURN_FATAL_ERROR
-
- pNode = self.__QuestionList
- while pNode != None:
- if pNode.Name == Name:
- return VfrReturnCode.VFR_RETURN_SUCCESS
- pNode = pNode.Next
-
- return VfrReturnCode.VFR_RETURN_UNDEFINED
-
- def FindQuestionById(self, QuestionId):
- if QuestionId == EFI_QUESTION_ID_INVALID:
- return VfrReturnCode.VFR_RETURN_INVALID_PARAMETER
-
- pNode = self.__QuestionList
- while pNode != None:
- if pNode.QuestionId == QuestionId:
- return VfrReturnCode.VFR_RETURN_SUCCESS
- pNode = pNode.Next
-
- return VfrReturnCode.VFR_RETURN_UNDEFINED
-
- def __GetFreeQuestionId(self):
-
- Index = 0
- for i in range(0, EFI_FREE_QUESTION_ID_BITMAP_SIZE):
- if self.__FreeQIdBitMap[i] != 0xFFFFFFFF:
- Index = i
- break
- if Index == EFI_FREE_QUESTION_ID_BITMAP_SIZE:
- return EFI_QUESTION_ID_INVALID
-
- Offset = 0
- Mask = 0x80000000
- while Mask != 0:
- if (self.__FreeQIdBitMap[Index] & Mask) == 0:
- self.__FreeQIdBitMap[Index] |= Mask
- return (Index << EFI_BITS_SHIFT_PER_UINT32) + Offset
- Mask >>= 1
- Offset += 1
-
- return EFI_QUESTION_ID_INVALID
-
- def __CheckQuestionIdFree(self, QId):
- Index = int(QId / EFI_BITS_PER_UINT32)
- Offset = QId % EFI_BITS_PER_UINT32
- return (self.__FreeQIdBitMap[Index] & (0x80000000 >> Offset)) == 0
-
- def __MarkQuestionIdUsed(self, QId):
-
- Index = int(QId / EFI_BITS_PER_UINT32)
- Offset = QId % EFI_BITS_PER_UINT32
- self.__FreeQIdBitMap[Index] |= (0x80000000 >> Offset)
-
- def __MarkQuestionIdUnused(self, QId):
- Index = int(QId / EFI_BITS_PER_UINT32)
- Offset = QId % EFI_BITS_PER_UINT32
- self.__FreeQIdBitMap[Index] &= ~(0x80000000 >> Offset)
-
- def RegisterQuestion(self, Name, VarIdStr, QuestionId):
-
- if (Name != None) and (self.FindQuestionByName(Name) == VfrReturnCode.VFR_RETURN_SUCCESS):
- return QuestionId, VfrReturnCode.VFR_RETURN_REDEFINED
-
- pNode = SVfrQuestionNode(Name, VarIdStr)
- if pNode == None:
- return QuestionId, VfrReturnCode.VFR_RETURN_OUT_FOR_RESOURCES
-
- if QuestionId == EFI_QUESTION_ID_INVALID:
- QuestionId = self.__GetFreeQuestionId()
- else:
- if self.__CheckQuestionIdFree(QuestionId) == False:
- return QuestionId, VfrReturnCode.VFR_RETURN_QUESTIONID_REDEFINED
- self.__MarkQuestionIdUsed(QuestionId)
-
- pNode.QuestionId = QuestionId
- pNode.Next = self.__QuestionList
- self.__QuestionList = pNode
-
- # gCFormPkg.DoPendingAssign
-
- return QuestionId, VfrReturnCode.VFR_RETURN_SUCCESS
-
- def UpdateQuestionId(self, QId, NewQId):
-
- if QId == NewQId:
- # don't update
- return VfrReturnCode.VFR_RETURN_SUCCESS
-
- if self.__CheckQuestionIdFree(NewQId) == False:
- return VfrReturnCode.VFR_RETURN_REDEFINED
-
- pNode = self.__QuestionList
- TempList = []
- while pNode != None:
- if pNode.QuestionId == QId:
- TempList.append(pNode)
- pNode = pNode.Next
-
- if len(TempList) == 0:
- return VfrReturnCode.VFR_RETURN_UNDEFINED
-
- self.__MarkQuestionIdUnused(QId)
-
- for pNode in TempList:
- pNode.QuestionId = NewQId
-
- self.__MarkQuestionIdUsed(NewQId)
-
- # gCFormPkg.DoPendingAssign
- return VfrReturnCode.VFR_RETURN_SUCCESS
-
- def GetQuestionId(self, Name, VarIdStr=None, QType=None):
-
- QuestionId = EFI_QUESTION_ID_INVALID
- BitMask = 0x00000000
- if QType != None:
- QType = EFI_QUESION_TYPE.QUESTION_NORMAL
-
- if Name == None and VarIdStr == None:
- return QuestionId, BitMask, QType
-
- pNode = self.__QuestionList
- while pNode != None:
-
- if Name != None:
- if pNode.Name != Name:
- pNode = pNode.Next
- continue
-
- if VarIdStr != None:
- if pNode.VarIdStr != VarIdStr:
- pNode = pNode.Next
- continue
-
- QuestionId = pNode.QuestionId
- BitMask = pNode.BitMask
- if QType != None:
- QType = pNode.QType
- break
-
- return QuestionId, BitMask, QType
-
- def RegisterNewDateQuestion(self, Name, BaseVarId, QuestionId):
-
- if BaseVarId == '' and Name == None:
- if QuestionId == EFI_QUESTION_ID_INVALID:
- QuestionId = self.__GetFreeQuestionId()
- else:
- if self.__CheckQuestionIdFree(QuestionId) == False:
- return QuestionId, VfrReturnCode.VFR_RETURN_REDEFINED
- self.__MarkQuestionIdUsed(QuestionId)
- return QuestionId, VfrReturnCode.VFR_RETURN_SUCCESS
-
- VarIdStrList = []
- if BaseVarId != '':
- VarIdStrList.append(BaseVarId + '.Year')
- VarIdStrList.append(BaseVarId + '.Month')
- VarIdStrList.append(BaseVarId + '.Day')
-
- else:
- VarIdStrList.append(Name + '.Year')
- VarIdStrList.append(Name + '.Month')
- VarIdStrList.append(Name + '.Day')
-
- pNodeList = []
- pNode = SVfrQuestionNode(Name, VarIdStrList[0], DATE_YEAR_BITMASK)
- if pNode != None:
- pNodeList.append(pNode)
- else:
- return QuestionId, VfrReturnCode.VFR_RETURN_OUT_FOR_RESOURCES
-
- pNode = SVfrQuestionNode(Name, VarIdStrList[1], DATE_MONTH_BITMASK)
- if pNode != None:
- pNodeList.append(pNode)
- else:
- return QuestionId, VfrReturnCode.VFR_RETURN_OUT_FOR_RESOURCES
-
- pNode = SVfrQuestionNode(Name, VarIdStrList[2], DATE_DAY_BITMASK)
- if pNode != None:
- pNodeList.append(pNode)
- else:
- return QuestionId, VfrReturnCode.VFR_RETURN_OUT_FOR_RESOURCES
-
- if QuestionId == EFI_QUESTION_ID_INVALID:
- QuestionId = self.__GetFreeQuestionId()
- else:
- if self.__CheckQuestionIdFree(QuestionId) == False:
- return QuestionId, VfrReturnCode.VFR_RETURN_REDEFINED
- self.__MarkQuestionIdUsed(QuestionId)
-
- pNodeList[0].QuestionId = QuestionId
- pNodeList[1].QuestionId = QuestionId
- pNodeList[2].QuestionId = QuestionId
- pNodeList[0].QType = EFI_QUESION_TYPE.QUESTION_DATE
- pNodeList[1].QType = EFI_QUESION_TYPE.QUESTION_DATE
- pNodeList[2].QType = EFI_QUESION_TYPE.QUESTION_DATE
- pNodeList[0].Next = pNodeList[1]
- pNodeList[1].Next = pNodeList[2]
- pNodeList[2].Next = self.__QuestionList
- self.__QuestionList = pNodeList[0]
-
- # DoPendingAssign
- return QuestionId, VfrReturnCode.VFR_RETURN_SUCCESS
-
- def RegisterNewTimeQuestion(self, Name, BaseVarId, QuestionId):
- if BaseVarId == '' and Name == None:
- if QuestionId == EFI_QUESTION_ID_INVALID:
- QuestionId = self.__GetFreeQuestionId()
- else:
- if self.__CheckQuestionIdFree(QuestionId) == False:
- return QuestionId, VfrReturnCode.VFR_RETURN_REDEFINED
- self.__MarkQuestionIdUsed(QuestionId)
- return QuestionId, VfrReturnCode.VFR_RETURN_SUCCESS
-
- VarIdStrList = []
- if BaseVarId != '':
- VarIdStrList.append(BaseVarId + '.Hour')
- VarIdStrList.append(BaseVarId + '.Minute')
- VarIdStrList.append(BaseVarId + '.Second')
-
- else:
- VarIdStrList.append(Name + '.Hour')
- VarIdStrList.append(Name + '.Minute')
- VarIdStrList.append(Name + '.Second')
-
- pNodeList = []
- pNode = SVfrQuestionNode(Name, VarIdStrList[0], TIME_HOUR_BITMASK)
- if pNode != None:
- pNodeList.append(pNode)
- else:
- return QuestionId, VfrReturnCode.VFR_RETURN_OUT_FOR_RESOURCES
-
- pNode = SVfrQuestionNode(Name, VarIdStrList[1], TIME_MINUTE_BITMASK)
- if pNode != None:
- pNodeList.append(pNode)
- else:
- return QuestionId, VfrReturnCode.VFR_RETURN_OUT_FOR_RESOURCES
-
- pNode = SVfrQuestionNode(Name, VarIdStrList[2], TIME_SECOND_BITMASK)
- if pNode != None:
- pNodeList.append(pNode)
- else:
- return QuestionId, VfrReturnCode.VFR_RETURN_OUT_FOR_RESOURCES
-
- if QuestionId == EFI_QUESTION_ID_INVALID:
- QuestionId = self.__GetFreeQuestionId()
- else:
- if self.__CheckQuestionIdFree(QuestionId) == False:
- return QuestionId, VfrReturnCode.VFR_RETURN_REDEFINED
- self.__MarkQuestionIdUsed(QuestionId)
-
- pNodeList[0].QuestionId = QuestionId
- pNodeList[1].QuestionId = QuestionId
- pNodeList[2].QuestionId = QuestionId
- pNodeList[0].QType = EFI_QUESION_TYPE.QUESTION_TIME
- pNodeList[1].QType = EFI_QUESION_TYPE.QUESTION_TIME
- pNodeList[2].QType = EFI_QUESION_TYPE.QUESTION_TIME
- pNodeList[0].Next = pNodeList[1]
- pNodeList[1].Next = pNodeList[2]
- pNodeList[2].Next = self.__QuestionList
- self.__QuestionList = pNodeList[0]
-
- # DoPendingAssign
- return QuestionId, VfrReturnCode.VFR_RETURN_SUCCESS
-
- def RegisterRefQuestion(self, Name, BaseVarId, QuestionId):
-
- if BaseVarId == '' and Name == None:
- return QuestionId, VfrReturnCode.VFR_RETURN_FATAL_ERROR
-
- VarIdStrList = []
- if BaseVarId != '':
- VarIdStrList.append(BaseVarId + '.QuestionId')
- VarIdStrList.append(BaseVarId + '.FormId')
- VarIdStrList.append(BaseVarId + '.FormSetGuid')
- VarIdStrList.append(BaseVarId + '.DevicePath')
-
- else:
- VarIdStrList.append(BaseVarId + '.QuestionId')
- VarIdStrList.append(BaseVarId + '.FormId')
- VarIdStrList.append(BaseVarId + '.FormSetGuid')
- VarIdStrList.append(BaseVarId + '.DevicePath')
-
- pNodeList = []
- pNode = SVfrQuestionNode(Name, VarIdStrList[0])
- if pNode != None:
- pNodeList.append(pNode)
- else:
- return QuestionId, VfrReturnCode.VFR_RETURN_OUT_FOR_RESOURCES
-
- pNode = SVfrQuestionNode(Name, VarIdStrList[1])
- if pNode != None:
- pNodeList.append(pNode)
- else:
- return QuestionId, VfrReturnCode.VFR_RETURN_OUT_FOR_RESOURCES
-
- pNode = SVfrQuestionNode(Name, VarIdStrList[2])
- if pNode != None:
- pNodeList.append(pNode)
- else:
- return QuestionId, VfrReturnCode.VFR_RETURN_OUT_FOR_RESOURCES
-
- pNode = SVfrQuestionNode(Name, VarIdStrList[3])
- if pNode != None:
- pNodeList.append(pNode)
- else:
- return QuestionId, VfrReturnCode.VFR_RETURN_OUT_FOR_RESOURCES
-
- if QuestionId == EFI_QUESTION_ID_INVALID:
- QuestionId = self.__GetFreeQuestionId()
- else:
- if self.__CheckQuestionIdFree(QuestionId) == False:
- return QuestionId, VfrReturnCode.VFR_RETURN_REDEFINED
- self.__MarkQuestionIdUsed(QuestionId)
-
- pNodeList[0].QuestionId = QuestionId
- pNodeList[1].QuestionId = QuestionId
- pNodeList[2].QuestionId = QuestionId
- pNodeList[3].QuestionId = QuestionId
-
- pNodeList[0].QType = EFI_QUESION_TYPE.QUESTION_REF
- pNodeList[1].QType = EFI_QUESION_TYPE.QUESTION_REF
- pNodeList[2].QType = EFI_QUESION_TYPE.QUESTION_REF
- pNodeList[3].QType = EFI_QUESION_TYPE.QUESTION_REF
-
- pNodeList[0].Next = pNodeList[1]
- pNodeList[1].Next = pNodeList[2]
- pNodeList[2].Next = pNodeList[3]
- pNodeList[3].Next = self.__QuestionList
- self.__QuestionList = pNodeList[0]
- x = self.__QuestionList
-
- # DoPendingAssign
-
- return QuestionId, VfrReturnCode.VFR_RETURN_SUCCESS
-
- def RegisterOldDateQuestion(self, YearVarId, MonthVarId, DayVarId, QuestionId):
- pNodeList = []
- if YearVarId == '' or MonthVarId == '' or DayVarId == '' or YearVarId == None or MonthVarId == None or DayVarId == None:
- return QuestionId, VfrReturnCode.VFR_RETURN_ERROR_SKIPED
-
- pNode = SVfrQuestionNode(None, YearVarId, DATE_YEAR_BITMASK)
- if pNode != None:
- pNodeList.append(pNode)
- else:
- return EFI_QUESTION_ID_INVALID, VfrReturnCode.VFR_RETURN_OUT_FOR_RESOURCES
-
- pNode = SVfrQuestionNode(None, MonthVarId, DATE_MONTH_BITMASK)
- if pNode != None:
- pNodeList.append(pNode)
- else:
- return EFI_QUESTION_ID_INVALID, VfrReturnCode.VFR_RETURN_OUT_FOR_RESOURCES
-
- pNode = SVfrQuestionNode(None, DayVarId, DATE_DAY_BITMASK)
- if pNode != None:
- pNodeList.append(pNode)
- else:
- return EFI_QUESTION_ID_INVALID, VfrReturnCode.VFR_RETURN_OUT_FOR_RESOURCES
-
- if QuestionId == EFI_QUESTION_ID_INVALID:
- QuestionId = self.__GetFreeQuestionId()
- else:
- if self.__CheckQuestionIdFree(QuestionId) == False:
- return EFI_QUESTION_ID_INVALID, VfrReturnCode.VFR_RETURN_REDEFINED
- self.__MarkQuestionIdUsed(QuestionId)
-
- pNodeList[0].QuestionId = QuestionId
- pNodeList[1].QuestionId = QuestionId
- pNodeList[2].QuestionId = QuestionId
- pNodeList[0].QType = EFI_QUESION_TYPE.QUESTION_DATE
- pNodeList[1].QType = EFI_QUESION_TYPE.QUESTION_DATE
- pNodeList[2].QType = EFI_QUESION_TYPE.QUESTION_DATE
- pNodeList[0].Next = pNodeList[1]
- pNodeList[1].Next = pNodeList[2]
- pNodeList[2].Next = self.__QuestionList
- self.__QuestionList = pNodeList[0]
-
- # DoPendingAssign
- return QuestionId, VfrReturnCode.VFR_RETURN_SUCCESS
-
- def RegisterOldTimeQuestion(self, HourVarId, MinuteVarId, SecondVarId, QuestionId):
- pNodeList = []
- if HourVarId == '' or MinuteVarId == '' or SecondVarId == '' or HourVarId == None or MinuteVarId == None or SecondVarId == None:
- return QuestionId, VfrReturnCode.VFR_RETURN_ERROR_SKIPED
-
- pNode = SVfrQuestionNode(None, HourVarId, TIME_HOUR_BITMASK)
- if pNode != None:
- pNodeList.append(pNode)
- else:
- return EFI_QUESTION_ID_INVALID, VfrReturnCode.VFR_RETURN_OUT_FOR_RESOURCES
-
- pNode = SVfrQuestionNode(None, MinuteVarId, TIME_MINUTE_BITMASK)
- if pNode != None:
- pNodeList.append(pNode)
- else:
- return EFI_QUESTION_ID_INVALID, VfrReturnCode.VFR_RETURN_OUT_FOR_RESOURCES
-
- pNode = SVfrQuestionNode(None, SecondVarId, TIME_SECOND_BITMASK)
- if pNode != None:
- pNodeList.append(pNode)
- else:
- return EFI_QUESTION_ID_INVALID, VfrReturnCode.VFR_RETURN_OUT_FOR_RESOURCES
-
- if QuestionId == EFI_QUESTION_ID_INVALID:
- QuestionId = self.__GetFreeQuestionId()
- else:
- if self.__CheckQuestionIdFree(QuestionId) == False:
- return EFI_QUESTION_ID_INVALID, VfrReturnCode.VFR_RETURN_REDEFINED
- self.__MarkQuestionIdUsed(QuestionId)
-
- pNodeList[0].QuestionId = QuestionId
- pNodeList[1].QuestionId = QuestionId
- pNodeList[2].QuestionId = QuestionId
- pNodeList[0].QType = EFI_QUESION_TYPE.QUESTION_TIME
- pNodeList[1].QType = EFI_QUESION_TYPE.QUESTION_TIME
- pNodeList[2].QType = EFI_QUESION_TYPE.QUESTION_TIME
- pNodeList[0].Next = pNodeList[1]
- pNodeList[1].Next = pNodeList[2]
- pNodeList[2].Next = self.__QuestionList
- self.__QuestionList = pNodeList[0]
-
- # DoPendingAssign
- return QuestionId, VfrReturnCode.VFR_RETURN_SUCCESS
-
- def PrintAllQuestion(self, FileName):
-
- with open(FileName, 'w') as f:
- pNode = self.__QuestionList
- while(pNode != None):
-
- f.write('Question VarId is {} and QuestionId is '.format(pNode.VarIdStr))
- f.write('%d\n'%(pNode.QuestionId))
- # f.write('%#x\n'%(pNode.QuestionId))
- pNode = pNode.Next
-
- f.close()
\ No newline at end of file
diff --git a/BaseTools/Source/Python/VfrCompiler/__init__.py b/BaseTools/Source/Python/VfrCompiler/__init__.py
new file mode 100644
index 0000000000..72d3a47bb7
--- /dev/null
+++ b/BaseTools/Source/Python/VfrCompiler/__init__.py
@@ -0,0 +1 @@
+__all__ = ["VfrCompiler"]
diff --git a/BaseTools/Source/Python/VfrCompiler/main.py b/BaseTools/Source/Python/VfrCompiler/main.py
deleted file mode 100644
index 624cfe3aa8..0000000000
--- a/BaseTools/Source/Python/VfrCompiler/main.py
+++ /dev/null
@@ -1,27 +0,0 @@
-from distutils.filelist import FileList
-from pickletools import uint8
-import sys
-from tkinter.ttk import Treeview
-from antlr4 import*
-from VfrCompiler.VfrSyntaxLexer import VfrSyntaxLexer
-from VfrCompiler.VfrSyntaxParser import VfrSyntaxParser
-from VfrCompiler.VfrSyntaxVisitor import VfrSyntaxVisitor
-from VfrCompiler.VfrError import *
-
-def VfrParse(Infile, YamlOutFile, JsonOutFile):
- gCVfrErrorHandle.SetInputFile (Infile)
- InputStream = FileStream(Infile)
- Lexer = VfrSyntaxLexer(InputStream)
- Stream = CommonTokenStream(Lexer)
- Parser = VfrSyntaxParser(Stream)
- Tree = Parser.vfrProgram()
- Visitor = VfrSyntaxVisitor()
- Visitor.visit(Tree)
- Visitor.DumpYaml(Visitor.GetRoot(), YamlOutFile)
- Visitor.DumpJson(JsonOutFile)
-
-if __name__ == '__main__':
- Infile = 'VfrCompiler/test.i'
- YamlOutFile = 'VfrCompiler/test.yaml'
- JsonOutFile = 'VfrCompiler/test.json'
- VfrParse(Infile, YamlOutFile, JsonOutFile)
--
2.27.0.windows.1
-=-=-=-=-=-=-=-=-=-=-=-
Groups.io Links: You receive all messages sent to this group.
View/Reply Online (#112266): https://edk2.groups.io/g/devel/message/112266
Mute This Topic: https://groups.io/mt/103100170/7686176
Group Owner: devel+owner@edk2.groups.io
Unsubscribe: https://edk2.groups.io/g/devel/unsub [rebecca@openfw.io]
-=-=-=-=-=-=-=-=-=-=-=-
^ permalink raw reply related [flat|nested] 2+ messages in thread
end of thread, other threads:[~2023-12-11 0:35 UTC | newest]
Thread overview: 2+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2023-12-08 7:44 [edk2-devel] [PATCH] [edk2-staging]BaseTools: Python VfrCompiler Tool Update Yuwei Chen
-- strict thread matches above, loose matches on Subject: below --
2023-12-11 0:35 Yuwei Chen
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox