def __ResolveToken(self): if not self._Token: raise BadExpression(ERR_EMPTY_TOKEN) # PCD token if PcdPattern.match(self._Token): if self._Token not in self._Symb: Ex = BadExpression(ERR_PCD_RESOLVE % self._Token) Ex.Pcd = self._Token raise Ex self._Token = RangeExpression(self._Symb[self._Token], self._Symb)(True, self._Depth + 1) if not isinstance(self._Token, type('')): self._LiteralToken = hex(self._Token) return if self._Token.startswith('"'): self._Token = self._Token[1:-1] elif self._Token in ["FALSE", "false", "False"]: self._Token = False elif self._Token in ["TRUE", "true", "True"]: self._Token = True else: self.__IsNumberToken()
def CheckFeatureFlagPcd(self,Instance): Pcds = {} if GlobalData.gPlatformFinalPcds.get(self.Arch): Pcds = GlobalData.gPlatformFinalPcds[self.Arch].copy() if PcdPattern.search(Instance): PcdTuple = tuple(Instance.split('.')[::-1]) if PcdTuple in self.Pcds: if not (self.Pcds[PcdTuple].Type == 'FeatureFlag' or self.Pcds[PcdTuple].Type == 'FixedAtBuild') and Instance not in Pcds: EdkLogger.error('build', FORMAT_INVALID, "\nit must be defined in a [PcdsFeatureFlag] or [PcdsFixedAtBuild] section of Dsc or Dec file or [FeaturePcd] or [FixedPcd] of Inf file", File=str(self), ExtraData=Instance) Pcds[Instance] = self.Pcds[PcdTuple].DefaultValue if Instance in Pcds: if Pcds[Instance] == '0': return False elif Pcds[Instance] == '1': return True try: Value = ValueExpression(Instance, Pcds)() if Value == True: return True return False except: EdkLogger.warn('build', FORMAT_INVALID,"The FeatureFlagExpression cannot be evaluated", File=str(self), ExtraData=Instance) return False else: for Name, Guid in self.Pcds: if self.Pcds[(Name, Guid)].Type == 'FeatureFlag' or self.Pcds[(Name, Guid)].Type == 'FixedAtBuild': Pcds['%s.%s' % (Guid, Name)] = self.Pcds[(Name, Guid)].DefaultValue try: Value = ValueExpression(Instance, Pcds)() if Value == True: return True return False except: EdkLogger.warn('build', FORMAT_INVALID, "The FeatureFlagExpression cannot be evaluated", File=str(self), ExtraData=Instance) return False