Added doxygen comments
authorjwang36 <jwang36@7335b38e-4728-0410-8992-fb3ffe349368>
Wed, 23 Apr 2008 08:24:14 +0000 (08:24 +0000)
committerjwang36 <jwang36@7335b38e-4728-0410-8992-fb3ffe349368>
Wed, 23 Apr 2008 08:24:14 +0000 (08:24 +0000)
git-svn-id: https://buildtools.tianocore.org/svn/buildtools/trunk/BaseTools@1173 7335b38e-4728-0410-8992-fb3ffe349368

Source/Python/Workspace/MetaDataTable.py
Source/Python/Workspace/MetaFileParser.py
Source/Python/Workspace/MetaFileTable.py
Source/Python/Workspace/WorkspaceDatabase.py

index 8ded75e..f2f83a6 100644 (file)
@@ -20,6 +20,7 @@ import Common.EdkLogger as EdkLogger
 from CommonDataClass import DataClass\r
 from CommonDataClass.DataClass import FileClass\r
 \r
+## Convert to SQL required string format\r
 def ConvertToSqlString(StringList):\r
     return map(lambda s: "'" + s.replace("'", "''") + "'", StringList)\r
 \r
@@ -209,6 +210,12 @@ class TableFile(Table):
             TimeStamp\r
             )\r
 \r
+    ## Get ID of a given file\r
+    #\r
+    #   @param  FilePath    Path of file\r
+    # \r
+    #   @retval ID          ID value of given file in the table\r
+    # \r
     def GetFileId(self, FilePath):\r
         QueryScript = "select ID from %s where FullPath = '%s'" % (self.Table, FilePath)\r
         RecordList = self.Exec(QueryScript)\r
@@ -216,6 +223,12 @@ class TableFile(Table):
             return None\r
         return RecordList[0][0]\r
 \r
+    ## Get type of a given file\r
+    #\r
+    #   @param  FileId      ID of a file\r
+    # \r
+    #   @retval file_type   Model value of given file in the table\r
+    # \r
     def GetFileType(self, FileId):\r
         QueryScript = "select Model from %s where ID = '%s'" % (self.Table, FileId)\r
         RecordList = self.Exec(QueryScript)\r
@@ -223,6 +236,12 @@ class TableFile(Table):
             return None\r
         return RecordList[0][0]\r
 \r
+    ## Get file timestamp of a given file\r
+    #\r
+    #   @param  FileId      ID of file\r
+    # \r
+    #   @retval timestamp   TimeStamp value of given file in the table\r
+    # \r
     def GetFileTimeStamp(self, FileId):\r
         QueryScript = "select TimeStamp from %s where ID = '%s'" % (self.Table, FileId)\r
         RecordList = self.Exec(QueryScript)\r
@@ -230,9 +249,20 @@ class TableFile(Table):
             return None\r
         return RecordList[0][0]\r
 \r
+    ## Update the timestamp of a given file\r
+    #\r
+    #   @param  FileId      ID of file\r
+    #   @param  TimeStamp   Time stamp of file\r
+    # \r
     def SetFileTimeStamp(self, FileId, TimeStamp):\r
         self.Exec("update %s set TimeStamp=%s where ID='%s'" % (self.Table, TimeStamp, FileId))\r
 \r
+    ## Get list of file with given type\r
+    #\r
+    #   @param  FileType    Type value of file\r
+    # \r
+    #   @retval file_list   List of files with the given type\r
+    # \r
     def GetFileList(self, FileType):\r
         RecordList = self.Exec("select FullPath from %s where Model=%s" % (self.Table, FileType))\r
         if len(RecordList) == 0:\r
index 2fe4c55..3c614fa 100644 (file)
@@ -1,7 +1,7 @@
 ## @file\r
-# This file is used to create a database used by ECC tool\r
+# This file is used to parse meta files\r
 #\r
-# Copyright (c) 2007 ~ 2008, Intel Corporation\r
+# Copyright (c) 2008, Intel Corporation\r
 # All rights reserved. This program and the accompanying materials\r
 # are licensed and made available under the terms and conditions of the BSD License\r
 # which accompanies this distribution.  The full text of the license may be found at\r
@@ -14,7 +14,6 @@
 ##\r
 # Import Modules\r
 #\r
-import sqlite3\r
 import os\r
 import time\r
 \r
@@ -24,8 +23,33 @@ from Common.DataType import *
 from Common.String import *\r
 from Common.Misc import Blist\r
 \r
+## Base class of parser\r
+#\r
+#  This class is used for derivation purpose. The specific parser for one kind\r
+# type file must derive this class and implement some public interfaces.\r
+#\r
+#   @param      FilePath        The path of platform description file\r
+#   @param      FileType        The raw data of DSC file\r
+#   @param      Table           Database used to retrieve module/package information\r
+#   @param      Macros          Macros used for replacement in file\r
+#   @param      Owner           Owner ID (for sub-section parsing)\r
+#   @param      From            ID from which the data comes (for !INCLUDE directive)\r
+#\r
 class MetaFileParser(object):\r
+    # data type (file content) for specific file type\r
     DataType = {}\r
+\r
+    ## Constructor of MetaFileParser\r
+    #\r
+    #  Initialize object of MetaFileParser\r
+    #\r
+    #   @param      FilePath        The path of platform description file\r
+    #   @param      FileType        The raw data of DSC file\r
+    #   @param      Table           Database used to retrieve module/package information\r
+    #   @param      Macros          Macros used for replacement in file\r
+    #   @param      Owner           Owner ID (for sub-section parsing)\r
+    #   @param      From            ID from which the data comes (for !INCLUDE directive)\r
+    #\r
     def __init__(self, FilePath, FileType, Table, Macros={}, Owner=-1, From=-1):\r
         self._Table = Table\r
         self._FileType = FileType\r
@@ -36,7 +60,7 @@ class MetaFileParser(object):
         self._Owner = Owner\r
         self._From = From\r
 \r
-        # for parsing\r
+        # parsr status for parsing\r
         self._Content = None\r
         self._ValueList = ['', '', '', '', '']\r
         self._Scope = []\r
@@ -51,37 +75,60 @@ class MetaFileParser(object):
         self._Enabled = 0\r
         self._Finished = False\r
 \r
+    ## Store the parsed data in table\r
     def _Store(self, *Args):\r
         return self._Table.Insert(*Args)\r
 \r
+    ## Virtual method for starting parse\r
     def Start(self):\r
         raise NotImplementedError \r
 \r
+    ## Set parsing complete flag in both class and table\r
     def _Done(self):\r
         self._Finished = True\r
         self._Table.SetEndFlag()\r
 \r
+    ## Return the table containg parsed data\r
+    #\r
+    #   If the parse complete flag is not set, this method will try to parse the\r
+    # file before return the table\r
+    # \r
     def _GetTable(self):\r
         if not self._Finished:\r
             self.Start()\r
         return self._Table\r
 \r
+    ## Get the parse complete flag\r
     def _GetFinished(self):\r
         return self._Finished\r
 \r
+    ## Set the complete flag\r
     def _SetFinished(self, Value):\r
         self._Finished = Value\r
 \r
-    # DataType = [section_header_name, scope1(arch), scope2(platform,moduletype)]\r
+    ## Use [] style to query data in table, just for readability\r
+    # \r
+    #   DataInfo = [data_type, scope1(arch), scope2(platform,moduletype)]\r
+    # \r
     def __getitem__(self, DataInfo):\r
         if type(DataInfo) != type(()):\r
             DataInfo = (DataInfo,)\r
         return self.Table.Query(*DataInfo)\r
 \r
+    ## Data parser for the common format in different type of file\r
+    #\r
+    #   The common format in the meatfile is like\r
+    # \r
+    #       xxx1 | xxx2 | xxx3\r
+    # \r
     def _CommonParser(self):\r
         TokenList = GetSplitValueList(self._CurrentLine, TAB_VALUE_SPLIT)\r
         self._ValueList[0:len(TokenList)] = TokenList\r
 \r
+    ## Data parser for the format in which there's path\r
+    #\r
+    #   Only path can have macro used. So we need to replace them before use.\r
+    # \r
     def _PathParser(self):\r
         TokenList = GetSplitValueList(self._CurrentLine, TAB_VALUE_SPLIT)\r
         self._ValueList[0:len(TokenList)] = TokenList\r
@@ -92,15 +139,23 @@ class MetaFileParser(object):
                     continue\r
                 self._ValueList[Index] = NormPath(Value, self._Macros)\r
 \r
+    ## Skip unsupported data\r
     def _Skip(self):\r
         self._ValueList[0:1] = [self._CurrentLine]\r
 \r
+    ## Section header parser\r
+    #\r
+    #   The section header is always in following format:\r
+    # \r
+    #       [section_name.arch<.platform|module_type>]\r
+    # \r
     def _SectionHeaderParser(self):\r
         self._Scope = []\r
         self._SectionName = ''\r
         ArchList = set()\r
         for Item in GetSplitValueList(self._CurrentLine[1:-1], TAB_COMMA_SPLIT):\r
             ItemList = GetSplitValueList(Item, TAB_SPLIT)\r
+            # different section should not mix in one section\r
             if self._SectionName != '' and self._SectionName != ItemList[0].upper():\r
                 EdkLogger.error('Parser', FORMAT_INVALID, "Different section names in the same section",\r
                                 File=self._FilePath, Line=self._LineIndex+1, ExtraData=self._CurrentLine)\r
@@ -127,6 +182,7 @@ class MetaFileParser(object):
             EdkLogger.error('Parser', FORMAT_INVALID, "'common' ARCH must not be used with specific ARCHs",\r
                             File=self._FilePath, Line=self._LineIndex+1, ExtraData=self._CurrentLine)\r
 \r
+    ## [defines] section parser\r
     def _DefineParser(self):\r
         TokenList = GetSplitValueList(self._CurrentLine, TAB_EQUAL_SPLIT, 1)\r
         self._ValueList[0:len(TokenList)] = TokenList\r
@@ -134,6 +190,7 @@ class MetaFileParser(object):
             EdkLogger.error('Parser', FORMAT_INVALID, "No value specified",\r
                             ExtraData=self._CurrentLine, File=self._FilePath, Line=self._LineIndex+1)\r
 \r
+    ## DEFINE name=value parser\r
     def _MacroParser(self):\r
         TokenList = GetSplitValueList(self._CurrentLine, ' ', 1)\r
         if len(TokenList) < 2 or TokenList[1] == '':\r
@@ -144,6 +201,7 @@ class MetaFileParser(object):
             return\r
         if self._Macros == None:\r
             self._Macros = {}\r
+        # keep the macro definition for later use\r
         self._Macros[TokenList[0]] = TokenList[1]\r
 \r
     _SectionParser  = {}\r
@@ -151,7 +209,15 @@ class MetaFileParser(object):
     Finished        = property(_GetFinished, _SetFinished)\r
 \r
 \r
+## INF file parser class\r
+#\r
+#   @param      FilePath        The path of platform description file\r
+#   @param      FileType        The raw data of DSC file\r
+#   @param      Table           Database used to retrieve module/package information\r
+#   @param      Macros          Macros used for replacement in file\r
+#\r
 class InfParser(MetaFileParser):\r
+    # INF file supported data types (one type per section)\r
     DataType = {\r
         TAB_UNKNOWN.upper() : MODEL_UNKNOWN,\r
         TAB_INF_DEFINES.upper() : MODEL_META_DATA_HEADER,\r
@@ -175,15 +241,26 @@ class InfParser(MetaFileParser):
         TAB_USER_EXTENSIONS.upper() : MODEL_META_DATA_USER_EXTENSION\r
     }\r
 \r
-    def __init__(self, FilePath, FileId, FileType, Table, Macros={}):\r
+    ## Constructor of InfParser\r
+    #\r
+    #  Initialize object of InfParser\r
+    #\r
+    #   @param      FilePath        The path of module description file\r
+    #   @param      FileType        The raw data of DSC file\r
+    #   @param      Table           Database used to retrieve module/package information\r
+    #   @param      Macros          Macros used for replacement in file\r
+    #\r
+    def __init__(self, FilePath, FileType, Table, Macros={}):\r
         MetaFileParser.__init__(self, FilePath, FileType, Table, Macros)\r
 \r
+    ## Parser starter\r
     def Start(self):\r
         try:\r
             self._Content = open(self._FilePath, 'r').readlines()\r
         except:\r
             EdkLogger.error("Parser", FILE_READ_FAILURE, ExtraData=self._FilePath)\r
 \r
+        # parse the file line by line\r
         for Index in range(0, len(self._Content)):\r
             Line = CleanString(self._Content[Index])\r
             if Line == '':\r
@@ -196,18 +273,19 @@ class InfParser(MetaFileParser):
                 self._SectionHeaderParser()\r
                 continue\r
             elif Line.upper().startswith('DEFINE '):\r
+                # file private macros\r
                 self._MacroParser()\r
                 continue\r
 \r
             # section content\r
             self._ValueList = ['','','']\r
+            # parse current line, result will be put in self._ValueList\r
             self._SectionParser[self._SectionType](self)\r
             if self._ValueList == None:\r
                 continue\r
             # \r
-            # Model, Value1, Value2, Value3, Value4, Value5, Arch, Platform, BelongsToFile=-1, \r
-            # LineBegin=-1, ColumnBegin=-1, LineEnd=-1, ColumnEnd=-1, BelongsToItem=-1, FeatureFlag='', \r
-            # Enabled=-1\r
+            # Model, Value1, Value2, Value3, Arch, Platform, BelongsToItem=-1, \r
+            # LineBegin=-1, ColumnBegin=-1, LineEnd=-1, ColumnEnd=-1, Enabled=-1\r
             # \r
             for Arch, Platform in self._Scope:\r
                 self._Store(self._SectionType,\r
@@ -224,7 +302,8 @@ class InfParser(MetaFileParser):
                             0\r
                             )\r
         self._Done()\r
-            \r
+\r
+    ## [BuildOptions] section parser\r
     def _BuildOptionParser(self):\r
         TokenList = GetSplitValueList(self._CurrentLine, TAB_EQUAL_SPLIT, 1)\r
         TokenList2 = GetSplitValueList(TokenList[0], ':', 1)\r
@@ -235,12 +314,14 @@ class InfParser(MetaFileParser):
             self._ValueList[1] = TokenList[0]\r
         self._ValueList[2] = ReplaceMacro(TokenList[1], self._Macros)\r
 \r
+    ## [nmake] section parser (R8.x style only)\r
     def _NmakeParser(self):\r
         TokenList = GetSplitValueList(self._CurrentLine, TAB_EQUAL_SPLIT, 1)\r
         self._ValueList[0:len(TokenList)] = TokenList\r
         # remove self-reference in macro setting\r
         self._ValueList[1] = ReplaceMacro(self._ValueList[1], {self._ValueList[0]:''})\r
 \r
+    ## [FixedPcd], [FeaturePcd], [PatchPcd], [Pcd] and [PcdEx] sections parser\r
     def _PcdParser(self):\r
         TokenList = GetSplitValueList(self._CurrentLine, TAB_VALUE_SPLIT, 1)\r
         self._ValueList[0:1] = GetSplitValueList(TokenList[0], TAB_SPLIT)\r
@@ -250,6 +331,7 @@ class InfParser(MetaFileParser):
             EdkLogger.error('Parser', FORMAT_INVALID, "No token space GUID or PCD name specified",\r
                             ExtraData=self._CurrentLine, File=self._FilePath, Line=self._LineIndex+1)\r
 \r
+    ## [depex] section parser\r
     def _DepexParser(self):\r
         self._ValueList[0:1] = [self._CurrentLine]\r
 \r
@@ -276,7 +358,17 @@ class InfParser(MetaFileParser):
         MODEL_META_DATA_USER_EXTENSION  :   MetaFileParser._Skip,\r
     }\r
 \r
+## DSC file parser class\r
+#\r
+#   @param      FilePath        The path of platform description file\r
+#   @param      FileType        The raw data of DSC file\r
+#   @param      Table           Database used to retrieve module/package information\r
+#   @param      Macros          Macros used for replacement in file\r
+#   @param      Owner           Owner ID (for sub-section parsing)\r
+#   @param      From            ID from which the data comes (for !INCLUDE directive)\r
+#\r
 class DscParser(MetaFileParser):\r
+    # DSC file supported data types (one type per section)\r
     DataType = {\r
         TAB_SKUIDS.upper()                          :   MODEL_EFI_SKU_ID,\r
         TAB_LIBRARIES.upper()                       :   MODEL_EFI_LIBRARY_INSTANCE,\r
@@ -302,6 +394,7 @@ class DscParser(MetaFileParser):
         TAB_END_IF.upper()                          :   MODEL_META_DATA_CONDITIONAL_STATEMENT_ENDIF,\r
     }\r
 \r
+    # sections which allow "!include" directive\r
     _IncludeAllowedSection = [\r
         TAB_LIBRARIES.upper(), \r
         TAB_LIBRARY_CLASSES.upper(), \r
@@ -319,6 +412,7 @@ class DscParser(MetaFileParser):
         TAB_PCDS_DYNAMIC_EX_VPD_NULL.upper(),\r
         ]\r
 \r
+    # operators which can be used in "!if/!ifdef/!ifndef" directives\r
     _OP_ = {\r
         "!"     :   lambda a:   not a,\r
         "!="    :   lambda a,b: a!=b,\r
@@ -331,11 +425,23 @@ class DscParser(MetaFileParser):
         "=<"    :   lambda a,b: a<=b,\r
     }\r
 \r
-    def __init__(self, FilePath, FileId, FileType, Table, Macros={}, Owner=-1, From=-1):\r
+    ## Constructor of DscParser\r
+    #\r
+    #  Initialize object of DscParser\r
+    #\r
+    #   @param      FilePath        The path of platform description file\r
+    #   @param      FileType        The raw data of DSC file\r
+    #   @param      Table           Database used to retrieve module/package information\r
+    #   @param      Macros          Macros used for replacement in file\r
+    #   @param      Owner           Owner ID (for sub-section parsing)\r
+    #   @param      From            ID from which the data comes (for !INCLUDE directive)\r
+    #\r
+    def __init__(self, FilePath, FileType, Table, Macros={}, Owner=-1, From=-1):\r
         MetaFileParser.__init__(self, FilePath, FileType, Table, Macros, Owner, From)\r
         # to store conditional directive evaluation result\r
         self._Eval = Blist()\r
 \r
+    ## Parser starter\r
     def Start(self):\r
         try:\r
             if self._Content == None:\r
@@ -347,7 +453,6 @@ class DscParser(MetaFileParser):
             Line = CleanString(self._Content[Index])\r
             # skip empty line\r
             if Line == '':\r
-                self._LineIndex += 1\r
                 continue\r
             self._CurrentLine = Line\r
             self._LineIndex = Index\r
@@ -356,10 +461,12 @@ class DscParser(MetaFileParser):
             if Line[0] == TAB_SECTION_START and Line[-1] == TAB_SECTION_END:\r
                 self._SectionHeaderParser()\r
                 continue\r
+            # subsection ending\r
             elif Line[0] == '}':\r
                 self._InSubsection = False\r
                 self._Owner = -1\r
                 continue\r
+            # subsection header\r
             elif Line[0] == TAB_OPTION_START and Line[-1] == TAB_OPTION_END:\r
                 self._SubsectionHeaderParser()\r
                 continue\r
@@ -367,6 +474,7 @@ class DscParser(MetaFileParser):
             elif Line[0] == '!':\r
                 self._DirectiveParser()\r
                 continue\r
+            # file private macros\r
             elif Line.upper().startswith('DEFINE '):\r
                 self._MacroParser()\r
                 continue\r
@@ -386,9 +494,8 @@ class DscParser(MetaFileParser):
                 continue\r
 \r
             # \r
-            # Model, Value1, Value2, Value3, Arch, Platform, BelongsToFile=-1, \r
-            # LineBegin=-1, ColumnBegin=-1, LineEnd=-1, ColumnEnd=-1, BelongsToItem=-1, \r
-            # Enabled=-1\r
+            # Model, Value1, Value2, Value3, Arch, ModuleType, BelongsToItem=-1, BelongsToFile=-1, \r
+            # LineBegin=-1, ColumnBegin=-1, LineEnd=-1, ColumnEnd=-1, Enabled=-1\r
             # \r
             for Arch, ModuleType in self._Scope:\r
                 self._LastItem = self._Store(\r
@@ -408,15 +515,18 @@ class DscParser(MetaFileParser):
                     )\r
         self._Done()\r
 \r
+    ## [defines] section parser\r
     def _DefineParser(self):\r
         TokenList = GetSplitValueList(self._CurrentLine, TAB_EQUAL_SPLIT, 1)\r
         if len(TokenList) < 2:\r
             EdkLogger.error('Parser', FORMAT_INVALID, "No value specified",\r
                             ExtraData=self._CurrentLine, File=self._FilePath, Line=self._LineIndex+1)\r
+        # 'FLASH_DEFINITION', 'OUTPUT_DIRECTORY' need special processing\r
         if TokenList[0] in ['FLASH_DEFINITION', 'OUTPUT_DIRECTORY']:\r
             TokenList[1] = NormPath(TokenList[1], self._Macros)\r
         self._ValueList[0:len(TokenList)] = TokenList    \r
-            \r
+\r
+    ## <subsection_header> parser\r
     def _SubsectionHeaderParser(self):\r
         self._SubsectionName = self._CurrentLine[1:-1].upper()\r
         if self._SubsectionName in self.DataType:\r
@@ -424,6 +534,7 @@ class DscParser(MetaFileParser):
         else:\r
             self._SubsectionType = MODEL_UNKNOWN\r
 \r
+    ## Directive statement parser\r
     def _DirectiveParser(self):\r
         self._ValueList = ['','','']\r
         TokenList = GetSplitValueList(self._CurrentLine, ' ', 1)\r
@@ -433,6 +544,7 @@ class DscParser(MetaFileParser):
                             File=self._FilePath, Line=self._LineIndex+1,\r
                             ExtraData=self._CurrentLine)\r
         DirectiveName = self._ValueList[0].upper()\r
+        # keep the directive in database first\r
         self._LastItem = self._Store(\r
             self.DataType[DirectiveName],\r
             self._ValueList[0],\r
@@ -455,6 +567,7 @@ class DscParser(MetaFileParser):
             # the included file must be relative to the parsing file\r
             IncludedFile = os.path.join(self._FileDir, self._ValueList[1])\r
             Parser = DscParser(IncludedFile, self._FileType, self._Table, self._Macros, From=self._LastItem)\r
+            # set the parser status with current status\r
             Parser._SectionName = self._SectionName\r
             Parser._SectionType = self._SectionType\r
             Parser._Scope = self._Scope\r
@@ -464,6 +577,7 @@ class DscParser(MetaFileParser):
             except:\r
                 EdkLogger.error("Parser", PARSER_ERROR, File=self._FilePath, Line=self._LineIndex+1,\r
                                 ExtraData="Failed to parse content in file %s" % IncludedFile)\r
+            # update current status with sub-parser's status\r
             self._SectionName = Parser._SectionName\r
             self._SectionType = Parser._SectionType\r
             self._Scope       = Parser._Scope\r
@@ -491,11 +605,14 @@ class DscParser(MetaFileParser):
             else:\r
                 self._Enabled = len(self._Eval)\r
 \r
+    ## Evaludate the value of expression in "if/ifdef/ifndef" directives\r
     def _Evaluate(self, Expression):\r
         TokenList = Expression.split()\r
         TokenNumber = len(TokenList)\r
+        # one operand, guess it's just a macro name\r
         if TokenNumber == 1:\r
             return TokenList[0] in self._Macros\r
+        # two operands, suppose it's "!xxx" format\r
         elif TokenNumber == 2:\r
             Op = TokenList[0]\r
             if Op not in self._OP_:\r
@@ -506,6 +623,7 @@ class DscParser(MetaFileParser):
             else:\r
                 Value = False\r
             return self._OP_[Op](Value)\r
+        # three operands\r
         elif TokenNumber == 3:\r
             Name = TokenList[0]\r
             if Name not in self._Macros:\r
@@ -519,6 +637,7 @@ class DscParser(MetaFileParser):
             EdkLogger.error('Parser', FORMAT_INVALID, File=self._FilePath, Line=self._LineIndex+1,\r
                             ExtraData=Expression)\r
 \r
+    ## [BuildOptions] section parser\r
     def _BuildOptionParser(self):\r
         TokenList = GetSplitValueList(self._CurrentLine, TAB_EQUAL_SPLIT, 1)\r
         TokenList2 = GetSplitValueList(TokenList[0], ':', 1)\r
@@ -529,6 +648,20 @@ class DscParser(MetaFileParser):
             self._ValueList[1] = TokenList[0]\r
         self._ValueList[2] = ReplaceMacro(TokenList[1], self._Macros)\r
 \r
+    ## PCD sections parser \r
+    # \r
+    #   [PcdsFixedAtBuild]\r
+    #   [PcdsPatchableInModule]\r
+    #   [PcdsFeatureFlag]\r
+    #   [PcdsDynamicEx\r
+    #   [PcdsDynamicExDefault]\r
+    #   [PcdsDynamicExVpd]\r
+    #   [PcdsDynamicExHii]\r
+    #   [PcdsDynamic]\r
+    #   [PcdsDynamicDefault]\r
+    #   [PcdsDynamicVpd]\r
+    #   [PcdsDynamicHii]\r
+    # \r
     def _PcdParser(self):\r
         TokenList = GetSplitValueList(self._CurrentLine, TAB_VALUE_SPLIT, 1)\r
         self._ValueList[0:1] = GetSplitValueList(TokenList[0], TAB_SPLIT)\r
@@ -540,6 +673,7 @@ class DscParser(MetaFileParser):
             EdkLogger.error('Parser', FORMAT_INVALID, "No PCD value given",\r
                             ExtraData=self._CurrentLine, File=self._FilePath, Line=self._LineIndex+1)\r
 \r
+    ## [components] section parser\r
     def _ComponentParser(self):        \r
         if self._CurrentLine[-1] == '{':\r
             self._InSubsection = True\r
@@ -569,7 +703,15 @@ class DscParser(MetaFileParser):
         MODEL_META_DATA_USER_EXTENSION  :   MetaFileParser._Skip,\r
     }\r
 \r
+## DEC file parser class\r
+#\r
+#   @param      FilePath        The path of platform description file\r
+#   @param      FileType        The raw data of DSC file\r
+#   @param      Table           Database used to retrieve module/package information\r
+#   @param      Macros          Macros used for replacement in file\r
+#\r
 class DecParser(MetaFileParser):\r
+    # DEC file supported data types (one type per section)\r
     DataType = {\r
         TAB_DEC_DEFINES.upper()                     :   MODEL_META_DATA_HEADER,\r
         TAB_INCLUDES.upper()                        :   MODEL_EFI_INCLUDE,\r
@@ -584,9 +726,19 @@ class DecParser(MetaFileParser):
         TAB_PCDS_DYNAMIC_EX_NULL.upper()            :   MODEL_PCD_DYNAMIC_EX,\r
     }\r
 \r
-    def __init__(self, FilePath, FileId, FileType, Table, Macro={}):\r
+    ## Constructor of DecParser\r
+    #\r
+    #  Initialize object of DecParser\r
+    #\r
+    #   @param      FilePath        The path of platform description file\r
+    #   @param      FileType        The raw data of DSC file\r
+    #   @param      Table           Database used to retrieve module/package information\r
+    #   @param      Macros          Macros used for replacement in file\r
+    #\r
+    def __init__(self, FilePath, FileType, Table, Macro={}):\r
         MetaFileParser.__init__(self, FilePath, FileType, Table, Macro, -1)\r
 \r
+    ## Parser starter\r
     def Start(self):\r
         try:\r
             if self._Content == None:\r
@@ -617,9 +769,8 @@ class DecParser(MetaFileParser):
                 continue\r
 \r
             # \r
-            # Model, Value1, Value2, Value3, Value4, Value5, Arch, Platform, BelongsToFile=-1, \r
-            # LineBegin=-1, ColumnBegin=-1, LineEnd=-1, ColumnEnd=-1, BelongsToItem=-1, FeatureFlag='', \r
-            # Enabled=-1\r
+            # Model, Value1, Value2, Value3, Arch, BelongsToItem=-1, LineBegin=-1, \r
+            # ColumnBegin=-1, LineEnd=-1, ColumnEnd=-1, FeatureFlag='', Enabled=-1\r
             # \r
             for Arch, ModuleType in self._Scope:\r
                 self._LastItem = self._Store(\r
@@ -637,7 +788,8 @@ class DecParser(MetaFileParser):
                     0\r
                     )\r
         self._Done()\r
-            \r
+\r
+    ## [guids], [ppis] and [protocols] section parser\r
     def _GuidParser(self):\r
         TokenList = GetSplitValueList(self._CurrentLine, TAB_EQUAL_SPLIT, 1)\r
         if len(TokenList) < 2:\r
@@ -646,6 +798,14 @@ class DecParser(MetaFileParser):
         self._ValueList[0] = TokenList[0]\r
         self._ValueList[1] = TokenList[1]\r
 \r
+    ## PCD sections parser \r
+    # \r
+    #   [PcdsFixedAtBuild]\r
+    #   [PcdsPatchableInModule]\r
+    #   [PcdsFeatureFlag]\r
+    #   [PcdsDynamicEx\r
+    #   [PcdsDynamic]\r
+    # \r
     def _PcdParser(self):\r
         TokenList = GetSplitValueList(self._CurrentLine, TAB_VALUE_SPLIT, 1)\r
         self._ValueList[0:1] = GetSplitValueList(TokenList[0], TAB_SPLIT)\r
index d41f6e5..22e2afa 100644 (file)
@@ -1,5 +1,5 @@
 ## @file\r
-# This file is used to create/update/query/erase a common table\r
+# This file is used to create/update/query/erase a meta file table\r
 #\r
 # Copyright (c) 2008, Intel Corporation\r
 # All rights reserved. This program and the accompanying materials\r
@@ -18,7 +18,9 @@ import Common.EdkLogger as EdkLogger
 from MetaDataTable import Table\r
 from MetaDataTable import ConvertToSqlString\r
 \r
+## Python class representation of table storing module data\r
 class ModuleTable(Table):\r
+    # TRICK: use file ID as the part before '.'\r
     _ID_STEP_ = 0.00000001\r
     _ID_MAX_  = 0.99999999\r
     _COLUMN_ = '''\r
@@ -36,23 +38,22 @@ class ModuleTable(Table):
         EndColumn INTEGER NOT NULL,\r
         Enabled INTEGER DEFAULT 0\r
         '''\r
+    # used as table end flag, in case the changes to database is not committed to db file\r
     _DUMMY_ = "-1, -1, '====', '====', '====', '====', '====', -1, -1, -1, -1, -1, -1"\r
 \r
+    ## Constructor\r
     def __init__(self, Cursor, Name='Inf', IdBase=0, Temporary=False):\r
         Table.__init__(self, Cursor, Name, IdBase, Temporary)\r
 \r
-    #\r
-    # Insert a record into table Inf\r
+    ## Insert a record into table Inf\r
     #\r
     # @param Model:          Model of a Inf item\r
     # @param Value1:         Value1 of a Inf item\r
     # @param Value2:         Value2 of a Inf item\r
     # @param Value3:         Value3 of a Inf item\r
-    # @param Value4:         Value4 of a Inf item\r
-    # @param Value5:         Value5 of a Inf item\r
-    # @param Arch:           Arch of a Inf item\r
+    # @param Scope1:         Arch of a Inf item\r
+    # @param Scope2          Platform os a Inf item\r
     # @param BelongsToItem:  The item belongs to which another item\r
-    # @param BelongsToFile:  The item belongs to which dsc file\r
     # @param StartLine:      StartLine of a Inf item\r
     # @param StartColumn:    StartColumn of a Inf item\r
     # @param EndLine:        EndLine of a Inf item\r
@@ -80,7 +81,9 @@ class ModuleTable(Table):
 \r
     ## Query table\r
     #\r
-    # @param Model:  The Model of Record \r
+    # @param    Model:      The Model of Record \r
+    # @param    Arch:       The Arch attribute of Record \r
+    # @param    Platform    The Platform attribute of Record \r
     #\r
     # @retval:       A recordSet of all found records \r
     #\r
@@ -96,9 +99,10 @@ class ModuleTable(Table):
         SqlCommand = "SELECT %s FROM %s WHERE %s" % (ValueString, self.Table, ConditionString)\r
         return self.Exec(SqlCommand)\r
 \r
+## Python class representation of table storing package data\r
 class PackageTable(Table):\r
     _ID_STEP_ = 0.00000001\r
-    _ID_MAX_ = 1\r
+    _ID_MAX_ = 0.99999999\r
     _COLUMN_ = '''\r
         ID REAL PRIMARY KEY,\r
         Model INTEGER NOT NULL,\r
@@ -114,7 +118,10 @@ class PackageTable(Table):
         EndColumn INTEGER NOT NULL,\r
         Enabled INTEGER DEFAULT 0\r
         '''\r
+    # used as table end flag, in case the changes to database is not committed to db file\r
     _DUMMY_ = "-1, -1, '====', '====', '====', '====', '====', -1, -1, -1, -1, -1, -1"\r
+\r
+    ## Constructor\r
     def __init__(self, Cursor, Name='Dec', IdBase=0, Temporary=False):\r
         Table.__init__(self, Cursor, Name, IdBase, Temporary)\r
 \r
@@ -126,9 +133,9 @@ class PackageTable(Table):
     # @param Value1:         Value1 of a Dec item\r
     # @param Value2:         Value2 of a Dec item\r
     # @param Value3:         Value3 of a Dec item\r
-    # @param Arch:           Arch of a Dec item\r
+    # @param Scope1:         Arch of a Dec item\r
+    # @param Scope2:         Module type of a Dec item\r
     # @param BelongsToItem:  The item belongs to which another item\r
-    # @param BelongsToFile:  The item belongs to which dsc file\r
     # @param StartLine:      StartLine of a Dec item\r
     # @param StartColumn:    StartColumn of a Dec item\r
     # @param EndLine:        EndLine of a Dec item\r
@@ -156,7 +163,8 @@ class PackageTable(Table):
 \r
     ## Query table\r
     #\r
-    # @param Model:  The Model of Record \r
+    # @param    Model:  The Model of Record \r
+    # @param    Arch:   The Arch attribute of Record \r
     #\r
     # @retval:       A recordSet of all found records \r
     #\r
@@ -170,9 +178,10 @@ class PackageTable(Table):
         SqlCommand = "SELECT %s FROM %s WHERE %s" % (ValueString, self.Table, ConditionString)\r
         return self.Exec(SqlCommand)\r
 \r
+## Python class representation of table storing platform data\r
 class PlatformTable(Table):\r
     _ID_STEP_ = 0.00000001\r
-    _ID_MAX_ = 1\r
+    _ID_MAX_ = 0.99999999\r
     _COLUMN_ = '''\r
         ID REAL PRIMARY KEY,\r
         Model INTEGER NOT NULL,\r
@@ -189,7 +198,10 @@ class PlatformTable(Table):
         EndColumn INTEGER NOT NULL,\r
         Enabled INTEGER DEFAULT 0\r
         '''\r
+    # used as table end flag, in case the changes to database is not committed to db file\r
     _DUMMY_ = "-1, -1, '====', '====', '====', '====', '====', -1, -1, -1, -1, -1, -1, -1"\r
+\r
+    ## Constructor\r
     def __init__(self, Cursor, Name='Dsc', IdBase=0, Temporary=False):\r
         Table.__init__(self, Cursor, Name, IdBase, Temporary)\r
 \r
@@ -201,9 +213,10 @@ class PlatformTable(Table):
     # @param Value1:         Value1 of a Dsc item\r
     # @param Value2:         Value2 of a Dsc item\r
     # @param Value3:         Value3 of a Dsc item\r
-    # @param Arch:           Arch of a Dsc item\r
+    # @param Scope1:         Arch of a Dsc item\r
+    # @param Scope2:         Module type of a Dsc item\r
     # @param BelongsToItem:  The item belongs to which another item\r
-    # @param BelongsToFile:  The item belongs to which dsc file\r
+    # @param FromItem:       The item belongs to which dsc file\r
     # @param StartLine:      StartLine of a Dsc item\r
     # @param StartColumn:    StartColumn of a Dsc item\r
     # @param EndLine:        EndLine of a Dsc item\r
@@ -232,7 +245,11 @@ class PlatformTable(Table):
 \r
     ## Query table\r
     #\r
-    # @param Model:  The Model of Record \r
+    # @param Model:          The Model of Record \r
+    # @param Scope1:         Arch of a Dsc item\r
+    # @param Scope2:         Module type of a Dsc item\r
+    # @param BelongsToItem:  The item belongs to which another item\r
+    # @param FromItem:       The item belongs to which dsc file\r
     #\r
     # @retval:       A recordSet of all found records \r
     #\r
@@ -254,7 +271,5 @@ class PlatformTable(Table):
             ConditionString += " AND FromItem=%s" % FromItem\r
 \r
         SqlCommand = "SELECT %s FROM %s WHERE %s" % (ValueString, self.Table, ConditionString)\r
-        #print SqlCommand\r
         return self.Exec(SqlCommand)\r
 \r
-\r
index 2ecbc17..99dca27 100644 (file)
@@ -1971,7 +1971,7 @@ class WorkspaceDatabase(object):
 \r
         FileTable = self._FILE_TABLE_[FileType](self.Cur, TableName, FileId)\r
         FileTable.Create(not Parsed)\r
-        Parser = self._FILE_PARSER_[FileType](FilePath, FileId, FileType, FileTable)\r
+        Parser = self._FILE_PARSER_[FileType](FilePath, FileType, FileTable)\r
         # set the "Finished" flag in parser in order to avoid re-parsing (if parsed)\r
         Parser.Finished = Parsed\r
         return Parser\r