]> git.proxmox.com Git - mirror_edk2.git/blobdiff - BaseTools/Source/Python/AutoGen/StrGather.py
BaseTools: Optimize string concatenation
[mirror_edk2.git] / BaseTools / Source / Python / AutoGen / StrGather.py
index 361d499076850042adfd03f6587457a1876700b4..d34a9e944709c98c4d7ddc88dd20e225b756ec2c 100644 (file)
@@ -137,7 +137,7 @@ def AscToHexList(Ascii):
 # @retval Str:           A string of .h file content\r
 #\r
 def CreateHFileContent(BaseName, UniObjectClass, IsCompatibleMode, UniGenCFlag):\r
-    Str = ''\r
+    Str = []\r
     ValueStartPtr = 60\r
     Line = COMMENT_DEFINE_STR + ' ' + LANGUAGE_NAME_STRING_NAME + ' ' * (ValueStartPtr - len(DEFINE_STR + LANGUAGE_NAME_STRING_NAME)) + DecToHexStr(0, 4) + COMMENT_NOT_REFERENCED\r
     Str = WriteLine(Str, Line)\r
@@ -166,12 +166,12 @@ def CreateHFileContent(BaseName, UniObjectClass, IsCompatibleMode, UniGenCFlag):
                     Line = COMMENT_DEFINE_STR + ' ' + Name + ' ' * (ValueStartPtr - len(DEFINE_STR + Name)) + DecToHexStr(Token, 4) + COMMENT_NOT_REFERENCED\r
                 UnusedStr = WriteLine(UnusedStr, Line)\r
 \r
-    Str = ''.join([Str, UnusedStr])\r
+    Str.extend( UnusedStr)\r
 \r
     Str = WriteLine(Str, '')\r
     if IsCompatibleMode or UniGenCFlag:\r
         Str = WriteLine(Str, 'extern unsigned char ' + BaseName + 'Strings[];')\r
-    return Str\r
+    return "".join(Str)\r
 \r
 ## Create a complete .h file\r
 #\r
@@ -187,7 +187,7 @@ def CreateHFileContent(BaseName, UniObjectClass, IsCompatibleMode, UniGenCFlag):
 def CreateHFile(BaseName, UniObjectClass, IsCompatibleMode, UniGenCFlag):\r
     HFile = WriteLine('', CreateHFileContent(BaseName, UniObjectClass, IsCompatibleMode, UniGenCFlag))\r
 \r
-    return HFile\r
+    return "".join(HFile)\r
 \r
 ## Create a buffer to store all items in an array\r
 #\r
@@ -211,7 +211,7 @@ def CreateArrayItem(Array, Width = 16):
     MaxLength = Width\r
     Index = 0\r
     Line = '  '\r
-    ArrayItem = ''\r
+    ArrayItem = []\r
 \r
     for Item in Array:\r
         if Index < MaxLength:\r
@@ -223,7 +223,7 @@ def CreateArrayItem(Array, Width = 16):
             Index = 1\r
     ArrayItem = Write(ArrayItem, Line.rstrip())\r
 \r
-    return ArrayItem\r
+    return "".join(ArrayItem)\r
 \r
 ## CreateCFileStringValue\r
 #\r
@@ -238,7 +238,7 @@ def CreateCFileStringValue(Value):
     Value = [StringBlockType] + Value\r
     Str = WriteLine('', CreateArrayItem(Value))\r
 \r
-    return Str\r
+    return "".join(Str)\r
 \r
 ## GetFilteredLanguage\r
 #\r
@@ -440,7 +440,7 @@ def CreateCFileContent(BaseName, UniObjectClass, IsCompatibleMode, UniBinBuffer,
     #\r
     AllStr = Write(AllStr, Str)\r
 \r
-    return AllStr\r
+    return "".join(AllStr)\r
 \r
 ## Create end of .c file\r
 #\r
@@ -467,7 +467,7 @@ def CreateCFile(BaseName, UniObjectClass, IsCompatibleMode, FilterInfo):
     CFile = ''\r
     CFile = WriteLine(CFile, CreateCFileContent(BaseName, UniObjectClass, IsCompatibleMode, None, FilterInfo))\r
     CFile = WriteLine(CFile, CreateCFileEnd())\r
-    return CFile\r
+    return "".join(CFile)\r
 \r
 ## GetFileList\r
 #\r
@@ -574,13 +574,30 @@ def GetStringFiles(UniFilList, SourceFileList, IncludeList, IncludePathList, Ski
 # Write an item\r
 #\r
 def Write(Target, Item):\r
-    return ''.join([Target, Item])\r
+    if isinstance(Target,str):\r
+        Target = [Target]\r
+    if not Target:\r
+        Target = []\r
+    if isinstance(Item,list):\r
+        Target.extend(Item)\r
+    else:\r
+        Target.append(Item)\r
+    return Target\r
 \r
 #\r
 # Write an item with a break line\r
 #\r
 def WriteLine(Target, Item):\r
-    return ''.join([Target, Item, '\n'])\r
+    if isinstance(Target,str):\r
+        Target = [Target]\r
+    if not Target:\r
+        Target = []\r
+    if isinstance(Item, list):\r
+        Target.extend(Item)\r
+    else:\r
+        Target.append(Item)\r
+    Target.append('\n')\r
+    return Target\r
 \r
 # This acts like the main() function for the script, unless it is 'import'ed into another\r
 # script.\r