##\r
# Import Modules\r
#\r
-from __future__ import print_function\r
-from __future__ import absolute_import\r
import re\r
\r
from . import Fd\r
from .Capsule import EFI_CERT_TYPE_PKCS7_GUID\r
from .Capsule import EFI_CERT_TYPE_RSA2048_SHA256_GUID\r
from Common.RangeExpression import RangeExpression\r
+from collections import OrderedDict\r
\r
##define T_CHAR_SPACE ' '\r
##define T_CHAR_NULL '\0'\r
EdkLogger.error("FdfParser", FILE_OPEN_FAILURE, ExtraData=FileName)\r
\r
self.FileName = FileName\r
- self.PcdDict = {}\r
- self.PcdLocalDict = {}\r
+ self.PcdDict = OrderedDict()\r
+ self.PcdLocalDict = OrderedDict()\r
self.InfList = []\r
self.InfDict = {'ArchTBD':[]}\r
# ECC will use this Dict and List information\r
# Key: [section name, UI name, arch]\r
# Value: {MACRO_NAME : MACRO_VALUE}\r
self.__MacroDict = tdict(True, 3)\r
- self.__PcdDict = {}\r
+ self.__PcdDict = OrderedDict()\r
\r
self.__WipeOffArea = []\r
if GenFdsGlobalVariable.WorkSpaceDir == '':\r
\r
def __StringToList(self):\r
self.Profile.FileLinesList = [list(s) for s in self.Profile.FileLinesList]\r
+ if not self.Profile.FileLinesList:\r
+ EdkLogger.error('FdfParser', FILE_READ_FAILURE, 'The file is empty!', File=self.FileName)\r
self.Profile.FileLinesList[-1].append(' ')\r
\r
def __ReplaceFragment(self, StartPos, EndPos, Value = ' '):\r
if self.CurrentLineNumber != StartLine:\r
EndPos = len(self.Profile.FileLinesList[StartLine-1])\r
self.__Token = self.Profile.FileLinesList[StartLine-1][StartPos : EndPos]\r
+ if self.__Token.lower() in [TAB_IF, TAB_END_IF, TAB_ELSE_IF, TAB_ELSE, TAB_IF_DEF, TAB_IF_N_DEF, TAB_ERROR, TAB_INCLUDE]:\r
+ self.__Token = self.__Token.lower()\r
if StartPos != self.CurrentOffsetWithinLine:\r
return True\r
else:\r
return False\r
\r
- def __GetNextOp(self):\r
- # Skip leading spaces, if exist.\r
- self.__SkipWhiteSpace()\r
- if self.__EndOfFile():\r
- return False\r
- # Record the token start position, the position of the first non-space char.\r
- StartPos = self.CurrentOffsetWithinLine\r
- while not self.__EndOfLine():\r
- TempChar = self.__CurrentChar()\r
- # Try to find the end char that is not a space\r
- if not str(TempChar).isspace():\r
- self.__GetOneChar()\r
- else:\r
- break\r
- else:\r
- return False\r
-\r
- if StartPos != self.CurrentOffsetWithinLine:\r
- self.__Token = self.__CurrentLine()[StartPos : self.CurrentOffsetWithinLine]\r
- return True\r
- else:\r
- return False\r
## __GetNextGuid() method\r
#\r
# Get next token unit before a seperator\r
self.__UndoToken()\r
return False\r
\r
- ## __GetNextPcdName() method\r
- #\r
- # Get next PCD token space C name and PCD C name pair before a seperator\r
- # If found, the decimal data is put into self.__Token\r
- #\r
- # @param self The object pointer\r
- # @retval Tuple PCD C name and PCD token space C name pair\r
- #\r
- def __GetNextPcdName(self):\r
- if not self.__GetNextWord():\r
- raise Warning("expected format of <PcdTokenSpaceCName>.<PcdCName>", self.FileName, self.CurrentLineNumber)\r
- pcdTokenSpaceCName = self.__Token\r
-\r
- if not self.__IsToken( "."):\r
- raise Warning("expected format of <PcdTokenSpaceCName>.<PcdCName>", self.FileName, self.CurrentLineNumber)\r
-\r
- if not self.__GetNextWord():\r
- raise Warning("expected format of <PcdTokenSpaceCName>.<PcdCName>", self.FileName, self.CurrentLineNumber)\r
- pcdCName = self.__Token\r
-\r
- return (pcdCName, pcdTokenSpaceCName)\r
-\r
def __GetNextPcdSettings(self):\r
if not self.__GetNextWord():\r
raise Warning("expected format of <PcdTokenSpaceCName>.<PcdCName>", self.FileName, self.CurrentLineNumber)\r
ModuleType.upper() + \\r
'.' + \\r
TemplateName.upper() ] = RuleObj\r
-# self.Profile.RuleList.append(rule)\r
return True\r
\r
## __GetModuleType() method\r
# @retval False Not able to find section statement\r
#\r
def __GetRuleEncapsulationSection(self, Rule):\r
-\r
if self.__IsKeyword( "COMPRESS"):\r
Type = "PI_STD"\r
if self.__IsKeyword("PI_STD") or self.__IsKeyword("PI_NONE"):\r
# @retval False Not able to find a VTF\r
#\r
def __GetVtf(self):\r
-\r
if not self.__GetNextToken():\r
return False\r
\r
# @retval False Not able to find a component\r
#\r
def __GetComponentStatement(self, VtfObj):\r
-\r
if not self.__IsKeyword("COMP_NAME"):\r
return False\r
\r
# @retval False Not able to find a OptionROM\r
#\r
def __GetOptionRom(self):\r
-\r
if not self.__GetNextToken():\r
return False\r
\r
# @retval False Not able to find inf statement\r
#\r
def __GetOptRomInfStatement(self, Obj):\r
-\r
if not self.__IsKeyword( "INF"):\r
return False\r
\r
# @retval False Not able to find FILE statement\r
#\r
def __GetOptRomFileStatement(self, Obj):\r
-\r
if not self.__IsKeyword( "FILE"):\r
return False\r
\r
# @retval CapList List of Capsule in FD\r
#\r
def __GetCapInFd (self, FdName):\r
-\r
CapList = []\r
if FdName.upper() in self.Profile.FdDict:\r
FdObj = self.Profile.FdDict[FdName.upper()]\r
# @param RefFvList referenced FV by section\r
#\r
def __GetReferencedFdCapTuple(self, CapObj, RefFdList = [], RefFvList = []):\r
-\r
for CapsuleDataObj in CapObj.CapsuleDataList :\r
if hasattr(CapsuleDataObj, 'FvName') and CapsuleDataObj.FvName is not None and CapsuleDataObj.FvName.upper() not in RefFvList:\r
RefFvList.append (CapsuleDataObj.FvName.upper())\r
# @retval FvList list of FV in FD\r
#\r
def __GetFvInFd (self, FdName):\r
-\r
FvList = []\r
if FdName.upper() in self.Profile.FdDict:\r
FdObj = self.Profile.FdDict[FdName.upper()]\r
# @param RefFvList referenced FV by section\r
#\r
def __GetReferencedFdFvTuple(self, FvObj, RefFdList = [], RefFvList = []):\r
-\r
for FfsObj in FvObj.FfsList:\r
if isinstance(FfsObj, FfsFileStatement.FileStatement):\r
if FfsObj.FvName is not None and FfsObj.FvName.upper() not in RefFvList:\r
# @param FvList referenced FV by section\r
#\r
def __GetReferencedFdFvTupleFromSection(self, FfsFile, FdList = [], FvList = []):\r
-\r
SectionStack = []\r
SectionStack.extend(FfsFile.SectionList)\r
while SectionStack != []:\r