[edk2] [PATCH v1 3/5] BaseTools: AutoGen refactor to iterate less

Jaben Carsey posted 5 patches 6 years, 1 month ago
Only 3 patches received!
[edk2] [PATCH v1 3/5] BaseTools: AutoGen refactor to iterate less
Posted by Jaben Carsey 6 years, 1 month ago
Don't iterate over new dictionaries with one item

Create the data and then add to dictionary.

Note: if you diff ignoring whitespace changes you
can more easily see the relevant changes.

Cc: Liming Gao <liming.gao@intel.com>
Cc: Yonghong Zhu <yonghong.zhu@intel.com>
Contributed-under: TianoCore Contribution Agreement 1.1
Signed-off-by: Jaben Carsey <jaben.carsey@intel.com>
---
 BaseTools/Source/Python/AutoGen/AutoGen.py | 138 ++++++++++----------
 1 file changed, 66 insertions(+), 72 deletions(-)

diff --git a/BaseTools/Source/Python/AutoGen/AutoGen.py b/BaseTools/Source/Python/AutoGen/AutoGen.py
index 55c84fe4fbc2..7c67f40bff00 100644
--- a/BaseTools/Source/Python/AutoGen/AutoGen.py
+++ b/BaseTools/Source/Python/AutoGen/AutoGen.py
@@ -2983,80 +2983,74 @@ class ModuleAutoGen(AutoGen):
         if self.DxsFile or self.IsLibrary or TAB_DEPENDENCY_EXPRESSION_FILE in self.FileTypes:
             return {}
 
-        RetVal = {self.ModuleType:[]}
-
-        for ModuleType in RetVal:
-            DepexList = RetVal[ModuleType]
-            #
-            # Append depex from dependent libraries, if not "BEFORE", "AFTER" expresion
-            #
-            for M in [self.Module] + self.DependentLibraryList:
-                Inherited = False
-                for D in M.Depex[self.Arch, ModuleType]:
-                    if DepexList != []:
-                        DepexList.append('AND')
-                    DepexList.append('(')
-                    #replace D with value if D is FixedAtBuild PCD
-                    NewList = []
-                    for item in D:
-                        if '.' not in item:
-                            NewList.append(item)
+        DepexList = []
+        #
+        # Append depex from dependent libraries, if not "BEFORE", "AFTER" expresion
+        #
+        for M in [self.Module] + self.DependentLibraryList:
+            Inherited = False
+            for D in M.Depex[self.Arch, self.ModuleType]:
+                if DepexList != []:
+                    DepexList.append('AND')
+                DepexList.append('(')
+                #replace D with value if D is FixedAtBuild PCD
+                NewList = []
+                for item in D:
+                    if '.' not in item:
+                        NewList.append(item)
+                    else:
+                        if item not in self._FixedPcdVoidTypeDict:
+                            EdkLogger.error("build", FORMAT_INVALID, "{} used in [Depex] section should be used as FixedAtBuild type and VOID* datum type in the module.".format(item))
                         else:
-                            if item not in self._FixedPcdVoidTypeDict:
-                                EdkLogger.error("build", FORMAT_INVALID, "{} used in [Depex] section should be used as FixedAtBuild type and VOID* datum type in the module.".format(item))
-                            else:
-                                Value = self._FixedPcdVoidTypeDict[item]
-                                if len(Value.split(',')) != 16:
-                                    EdkLogger.error("build", FORMAT_INVALID,
-                                                    "{} used in [Depex] section should be used as FixedAtBuild type and VOID* datum type and 16 bytes in the module.".format(item))
-                                NewList.append(Value)
-                    DepexList.extend(NewList)
-                    if DepexList[-1] == 'END':  # no need of a END at this time
-                        DepexList.pop()
-                    DepexList.append(')')
-                    Inherited = True
-                if Inherited:
-                    EdkLogger.verbose("DEPEX[%s] (+%s) = %s" % (self.Name, M.BaseName, DepexList))
-                if 'BEFORE' in DepexList or 'AFTER' in DepexList:
-                    break
-                if len(DepexList) > 0:
-                    EdkLogger.verbose('')
-        return RetVal
-
-    ## Merge dependency expression
-    #
-    #   @retval     list    The token list of the dependency expression after parsed
-    #
-    @cached_property
-    def DepexExpressionTokenList(self):
-        if self.DxsFile or self.IsLibrary or TAB_DEPENDENCY_EXPRESSION_FILE in self.FileTypes:
-            return {}
-
-        RetVal = {self.ModuleType:''}
-
-        for ModuleType in RetVal:
-            DepexExpressionString = RetVal[ModuleType]
-            #
-            # Append depex from dependent libraries, if not "BEFORE", "AFTER" expresion
-            #
-            for M in [self.Module] + self.DependentLibraryList:
-                Inherited = False
-                for D in M.DepexExpression[self.Arch, ModuleType]:
-                    if DepexExpressionString != '':
-                        DepexExpressionString += ' AND '
-                    DepexExpressionString += '('
-                    DepexExpressionString += D
-                    DepexExpressionString = DepexExpressionString.rstrip('END').strip()
-                    DepexExpressionString += ')'
-                    Inherited = True
-                if Inherited:
-                    EdkLogger.verbose("DEPEX[%s] (+%s) = %s" % (self.Name, M.BaseName, DepexExpressionString))
-                if 'BEFORE' in DepexExpressionString or 'AFTER' in DepexExpressionString:
-                    break
-            if len(DepexExpressionString) > 0:
+                            Value = self._FixedPcdVoidTypeDict[item]
+                            if len(Value.split(',')) != 16:
+                                EdkLogger.error("build", FORMAT_INVALID,
+                                                "{} used in [Depex] section should be used as FixedAtBuild type and VOID* datum type and 16 bytes in the module.".format(item))
+                            NewList.append(Value)
+                DepexList.extend(NewList)
+                if DepexList[-1] == 'END':  # no need of a END at this time
+                    DepexList.pop()
+                DepexList.append(')')
+                Inherited = True
+            if Inherited:
+                EdkLogger.verbose("DEPEX[%s] (+%s) = %s" % (self.Name, M.BaseName, DepexList))
+            if 'BEFORE' in DepexList or 'AFTER' in DepexList:
+                break
+            if len(DepexList) > 0:
                 EdkLogger.verbose('')
-            RetVal[ModuleType] = DepexExpressionString
-        return RetVal
+        return {self.ModuleType:DepexList}
+
+    ## Merge dependency expression
+    #
+    #   @retval     list    The token list of the dependency expression after parsed
+    #
+    @cached_property
+    def DepexExpressionTokenList(self):
+        if self.DxsFile or self.IsLibrary or TAB_DEPENDENCY_EXPRESSION_FILE in self.FileTypes:
+            return {}
+
+        DepexExpressionString = ''
+        #
+        # Append depex from dependent libraries, if not "BEFORE", "AFTER" expresion
+        #
+        for M in [self.Module] + self.DependentLibraryList:
+            Inherited = False
+            for D in M.DepexExpression[self.Arch, self.ModuleType]:
+                if DepexExpressionString != '':
+                    DepexExpressionString += ' AND '
+                DepexExpressionString += '('
+                DepexExpressionString += D
+                DepexExpressionString = DepexExpressionString.rstrip('END').strip()
+                DepexExpressionString += ')'
+                Inherited = True
+            if Inherited:
+                EdkLogger.verbose("DEPEX[%s] (+%s) = %s" % (self.Name, M.BaseName, DepexExpressionString))
+            if 'BEFORE' in DepexExpressionString or 'AFTER' in DepexExpressionString:
+                break
+        if len(DepexExpressionString) > 0:
+            EdkLogger.verbose('')
+
+        return {self.ModuleType:DepexExpressionString}
 
     # Get the tiano core user extension, it is contain dependent library.
     # @retval: a list contain tiano core userextension.
-- 
2.16.2.windows.1

_______________________________________________
edk2-devel mailing list
edk2-devel@lists.01.org
https://lists.01.org/mailman/listinfo/edk2-devel