def _ParseItem(self):
        Line = self._RawData.CurrentLine
        TokenList = GetSplitValueList(Line, DT.TAB_VALUE_SPLIT)
        if len(TokenList) != 2:
            self._LoggerError(ST.ERR_DECPARSE_LIBCLASS_SPLIT)
        if TokenList[0] == '' or TokenList[1] == '':
            self._LoggerError(ST.ERR_DECPARSE_LIBCLASS_EMPTY)
        if not IsValidToken('[A-Z][0-9A-Za-z]*', TokenList[0]):
            self._LoggerError(ST.ERR_DECPARSE_LIBCLASS_LIB)

        self._CheckReDefine(TokenList[0])

        Value = TokenList[1]
        #
        # Must end with .h
        #
        if not Value.endswith('.h'):
            self._LoggerError(ST.ERR_DECPARSE_LIBCLASS_PATH_EXT)

        #
        # Path must be existed
        #
        if not IsValidPath(Value, self._RawData.PackagePath):
            self._LoggerError(ST.ERR_DECPARSE_INCLUDE % Value)

        Item = DecLibraryclassItemObject(
            TokenList[0], StripRoot(self._RawData.PackagePath, Value),
            self._RawData.PackagePath)
        self.ItemObject.AddItem(Item, self._RawData.CurrentScope)
        return Item
Example #2
0
 def _SetDecSpecification(self, Token):
     if self.ItemObject.GetPackageSpecification():
         self._LoggerError(ST.ERR_DECPARSE_DEFINE_DEFINED %
                           DT.TAB_DEC_DEFINES_DEC_SPECIFICATION)
     if not IsValidToken('0[xX][0-9a-fA-F]{8}', Token):
         if not IsValidDecVersionVal(Token):
             self._LoggerError(ST.ERR_DECPARSE_DEFINE_SPEC)
     self.ItemObject.SetPackageSpecification(Token)
 def _SetPackageVersion(self, Token):
     if self.ItemObject.GetPackageVersion():
         self._LoggerError(ST.ERR_DECPARSE_DEFINE_DEFINED % DT.TAB_DEC_DEFINES_PACKAGE_VERSION)
     if not IsValidToken(VERSION_PATTERN, Token):
         self._LoggerError(ST.ERR_DECPARSE_DEFINE_PKGVERSION)
     else:
         if not DT.TAB_SPLIT in Token:
             Token = Token + '.0'
         self.ItemObject._PkgVersion = Token
    def _MacroParser(self, String):
        TokenList = GetSplitValueList(String, ' ', 1)
        if len(TokenList) < 2 or TokenList[1] == '':
            self._LoggerError(ST.ERR_DECPARSE_MACRO_PAIR)

        TokenList = GetSplitValueList(TokenList[1], DT.TAB_EQUAL_SPLIT, 1)
        if TokenList[0] == '':
            self._LoggerError(ST.ERR_DECPARSE_MACRO_NAME)
        elif not IsValidToken(MACRO_PATTERN, TokenList[0]):
            self._LoggerError(ST.ERR_DECPARSE_MACRO_NAME_UPPER % TokenList[0])
        
        if len(TokenList) == 1:
            self._LocalMacro[TokenList[0]] = ''
        else:
            self._LocalMacro[TokenList[0]] = self._ReplaceMacro(TokenList[1])
Example #5
0
    def _ParseItem(self):
        Line = self._RawData.CurrentLine
        TokenList = GetSplitValueList(Line, DT.TAB_EQUAL_SPLIT, 1)
        if len(TokenList) < 2:
            self._LoggerError(ST.ERR_DECPARSE_CGUID)
        if TokenList[0] == '':
            self._LoggerError(ST.ERR_DECPARSE_CGUID_NAME)
        if TokenList[1] == '':
            self._LoggerError(ST.ERR_DECPARSE_CGUID_GUID)
        if not IsValidToken(CVAR_PATTERN, TokenList[0]):
            self._LoggerError(ST.ERR_DECPARSE_PCD_CVAR_GUID)

        self._CheckReDefine(TokenList[0])

        if TokenList[1][0] != '{':
            if not CheckGuidRegFormat(TokenList[1]):
                self._LoggerError(ST.ERR_DECPARSE_DEFINE_PKGGUID)
            GuidString = TokenList[1]
        else:
            #
            # Convert C format GUID to GUID string and Simple error check
            #
            GuidString = GuidStructureStringToGuidString(TokenList[1])
            if TokenList[1][0] != '{' or TokenList[1][
                    -1] != '}' or GuidString == '':
                self._LoggerError(ST.ERR_DECPARSE_CGUID_GUIDFORMAT)

            #
            # Check C format GUID
            #
            if not IsValidCFormatGuid(TokenList[1]):
                self._LoggerError(ST.ERR_DECPARSE_CGUID_GUIDFORMAT)

        Item = DecGuidItemObject(TokenList[0], TokenList[1], GuidString)
        ItemObject = self.ObjectDict[self._RawData.CurrentScope[0][0]]
        ItemObject.AddItem(Item, self._RawData.CurrentScope)
        return Item
 def _ParseItem(self):
     Line = self._RawData.CurrentLine
     TokenList = Line.split(DT.TAB_VALUE_SPLIT)
     if len(TokenList) < 4:
         self._LoggerError(ST.ERR_DECPARSE_PCD_SPLIT)
     
     #
     # Token space guid C name
     #
     PcdName = GetSplitValueList(TokenList[0], DT.TAB_SPLIT)
     if len(PcdName) != 2 or PcdName[0] == '' or PcdName[1] == '':
         self._LoggerError(ST.ERR_DECPARSE_PCD_NAME)
     
     Guid = PcdName[0]
     if not IsValidToken(CVAR_PATTERN, Guid):
         self._LoggerError(ST.ERR_DECPARSE_PCD_CVAR_GUID)
     
     #
     # PCD C name
     #
     CName = PcdName[1]
     if not IsValidToken(CVAR_PATTERN, CName):
         self._LoggerError(ST.ERR_DECPARSE_PCD_CVAR_PCDCNAME)
     
     self._CheckReDefine(Guid + DT.TAB_SPLIT + CName)
     
     #
     # Default value, may be C array, string or number
     #
     Data = DT.TAB_VALUE_SPLIT.join(TokenList[1:-2]).strip()
     
     #
     # PCD data type
     #
     DataType = TokenList[-2].strip()
     Valid, Cause = IsValidPcdDatum(DataType, Data)
     if not Valid:
         self._LoggerError(Cause)
     PcdType = self._RawData.CurrentScope[0][0]
     if PcdType == DT.TAB_PCDS_FEATURE_FLAG_NULL.upper() and DataType != 'BOOLEAN':
         self._LoggerError(ST.ERR_DECPARSE_PCD_FEATUREFLAG)
     #
     # Token value is the last element in list.
     #
     Token = TokenList[-1].strip()
     if not IsValidToken(PCD_TOKEN_PATTERN, Token):
         self._LoggerError(ST.ERR_DECPARSE_PCD_TOKEN % Token)
     elif not Token.startswith('0x') and not Token.startswith('0X'):
         if long(Token) > 4294967295:
             self._LoggerError(ST.ERR_DECPARSE_PCD_TOKEN_INT % Token)
         Token = hex(long(Token))[:-1]
     
     IntToken = long(Token, 0)
     if (Guid, IntToken) in self.TokenMap:
         if self.TokenMap[Guid, IntToken] != CName:
             self._LoggerError(ST.ERR_DECPARSE_PCD_TOKEN_UNIQUE%(Token))
     else:
         self.TokenMap[Guid, IntToken] = CName
     
     Item = DecPcdItemObject(Guid, CName, Data, DataType, Token)
     self.ItemObject.AddItem(Item, self._RawData.CurrentScope)
     return Item