\r
RegionSizePattern = re.compile("\s*(?P<base>(?:0x|0X)?[a-fA-F0-9]+)\s*\|\s*(?P<size>(?:0x|0X)?[a-fA-F0-9]+)\s*")\r
RegionSizeGuidPattern = re.compile("\s*(?P<base>\w+\.\w+)\s*\|\s*(?P<size>\w+\.\w+)\s*")\r
+ShortcutPcdPattern = re.compile("\s*\w+\s*=\s*(?P<value>(?:0x|0X)?[a-fA-F0-9]+)\s*\|\s*(?P<name>\w+\.\w+)\s*")\r
\r
IncludeFileList = []\r
\r
PreIndex = 0\r
StartPos = CurLine.find('$(', PreIndex)\r
EndPos = CurLine.find(')', StartPos+2)\r
- while StartPos != -1 and EndPos != -1 and not (self.__Token == '!ifdef' or self.__Token == '!ifndef'):\r
+ while StartPos != -1 and EndPos != -1 and self.__Token not in ['!ifdef', '!ifndef', '!if', '!elseif']:\r
MacroName = CurLine[StartPos+2 : EndPos]\r
MacorValue = self.__GetMacroValue(MacroName)\r
if MacorValue != None:\r
self.__SetMacroValue(Macro, Value)\r
self.__WipeOffArea.append(((DefineLine, DefineOffset), (self.CurrentLineNumber - 1, self.CurrentOffsetWithinLine - 1)))\r
elif self.__Token == 'SET':\r
+ SetLine = self.CurrentLineNumber - 1\r
+ SetOffset = self.CurrentOffsetWithinLine - len('SET')\r
PcdPair = self.__GetNextPcdName()\r
PcdName = "%s.%s" % (PcdPair[1], PcdPair[0])\r
if not self.__IsToken( "="):\r
Value = self.__EvaluateConditional(Value, self.CurrentLineNumber, 'eval', True)\r
\r
self.__PcdDict[PcdName] = Value\r
+\r
+ self.Profile.PcdDict[PcdPair] = Value\r
+ FileLineTuple = GetRealFileLine(self.FileName, self.CurrentLineNumber)\r
+ self.Profile.PcdFileLineDict[PcdPair] = FileLineTuple\r
+\r
+ self.__WipeOffArea.append(((SetLine, SetOffset), (self.CurrentLineNumber - 1, self.CurrentOffsetWithinLine - 1)))\r
elif self.__Token in ('!ifdef', '!ifndef', '!if'):\r
IfStartPos = (self.CurrentLineNumber - 1, self.CurrentOffsetWithinLine - len(self.__Token))\r
IfList.append([IfStartPos, None, None])\r
if self.CurrentLineNumber <= RegionLayoutLine:\r
# Don't try the same line twice\r
continue\r
+ SetPcd = ShortcutPcdPattern.match(self.Profile.FileLinesList[self.CurrentLineNumber - 1])\r
+ if SetPcd:\r
+ self.__PcdDict[SetPcd.group('name')] = SetPcd.group('value')\r
+ RegionLayoutLine = self.CurrentLineNumber\r
+ continue\r
RegionSize = RegionSizePattern.match(self.Profile.FileLinesList[self.CurrentLineNumber - 1])\r
if not RegionSize:\r
RegionLayoutLine = self.CurrentLineNumber\r
MacroDict = {}\r
\r
# PCD macro\r
+ MacroDict.update(GlobalData.gPlatformPcds)\r
MacroDict.update(self.__PcdDict)\r
\r
# Lowest priority\r
Line=Line)\r
return Excpt.result\r
except Exception, Excpt:\r
- raise Warning("Invalid expression", *FileLineTuple)\r
+ if hasattr(Excpt, 'Pcd'):\r
+ if Excpt.Pcd in GlobalData.gPlatformOtherPcds:\r
+ Info = GlobalData.gPlatformOtherPcds[Excpt.Pcd]\r
+ raise Warning("Cannot use this PCD (%s) in an expression as"\r
+ " it must be defined in a [PcdsFixedAtBuild] or [PcdsFeatureFlag] section"\r
+ " of the DSC file (%s), and it is currently defined in this section:"\r
+ " %s, line #: %d." % (Excpt.Pcd, GlobalData.gPlatformOtherPcds['DSCFILE'], Info[0], Info[1]),\r
+ *FileLineTuple)\r
+ else:\r
+ raise Warning("PCD (%s) is not defined in DSC file (%s)" % (Excpt.Pcd, GlobalData.gPlatformOtherPcds['DSCFILE']),\r
+ *FileLineTuple)\r
+ else:\r
+ raise Warning(str(Excpt), *FileLineTuple)\r
else:\r
if Expression.startswith('$(') and Expression[-1] == ')':\r
Expression = Expression[2:-1] \r
if not self.__GetNextToken():\r
raise Warning("expected INF file path", self.FileName, self.CurrentLineNumber)\r
ffsInf.InfFileName = self.__Token\r
+\r
+ ffsInf.CurrentLineNum = self.CurrentLineNumber\r
+ ffsInf.CurrentLineContent = self.__CurrentLine()\r
+\r
if ffsInf.InfFileName.replace('$(WORKSPACE)', '').find('$') == -1:\r
#do case sensitive check for file path\r
ErrorCode, ErrorInfo = PathClass(NormPath(ffsInf.InfFileName), GenFdsGlobalVariable.WorkSpaceDir).Validate()\r
else:\r
raise Warning("Unknown reloc strip flag '%s'" % self.__Token, self.FileName, self.CurrentLineNumber)\r
\r
- ffsInf.CurrentLineNum = self.CurrentLineNumber\r
- ffsInf.CurrentLineContent = self.__CurrentLine()\r
- \r
if ForCapsule:\r
capsuleFfs = CapsuleData.CapsuleFfs()\r
capsuleFfs.Ffs = ffsInf\r
\r
FfsFileObj.NameGuid = self.__Token\r
\r
- FfsFileObj.CurrentLineNum = self.CurrentLineNumber\r
- FfsFileObj.CurrentLineContent = self.__CurrentLine()\r
- \r
self.__GetFilePart( FfsFileObj, MacroDict.copy())\r
\r
if ForCapsule:\r
self.__UndoToken()\r
self.__GetSectionData( FfsFileObj, MacroDict)\r
else:\r
+ FfsFileObj.CurrentLineNum = self.CurrentLineNumber\r
+ FfsFileObj.CurrentLineContent = self.__CurrentLine()\r
FfsFileObj.FileName = self.__Token\r
if FfsFileObj.FileName.replace('$(WORKSPACE)', '').find('$') == -1:\r
#\r