Quellcode durchsuchen

Deprecating StackStringFormat

Brian Fiete vor 8 Monaten
Ursprung
Commit
6e1eaf63e8

+ 3 - 0
BeefLibs/corlib/src/System.bf

@@ -108,6 +108,7 @@ static
 		str.AppendF(format, args);
 		str.AppendF(format, args);
 	}*/
 	}*/
 
 
+	[Warn("StackStringFormat has been deprecated and will be removed in the future. Consider switching to string interpolation or 'scope:: String()..AppendF'.")]
 	public static mixin StackStringFormat(String format, var arg1)
 	public static mixin StackStringFormat(String format, var arg1)
 	{
 	{
 		var str = scope:: String();
 		var str = scope:: String();
@@ -115,6 +116,7 @@ static
 		str
 		str
 	}
 	}
 
 
+	[Warn("StackStringFormat has been deprecated and will be removed in the future. Consider switching to string interpolation or 'scope:: String()..AppendF'.")]
 	public static mixin StackStringFormat(String format, var arg1, var arg2)
 	public static mixin StackStringFormat(String format, var arg1, var arg2)
 	{
 	{
 		var str = scope:: String();
 		var str = scope:: String();
@@ -122,6 +124,7 @@ static
 		str
 		str
 	}
 	}
 
 
+	[Warn("StackStringFormat has been deprecated and will be removed in the future. Consider switching to string interpolation or 'scope:: String()..AppendF'.")]
 	public static mixin StackStringFormat(String format, var arg1, var arg2, var arg3)
 	public static mixin StackStringFormat(String format, var arg1, var arg2, var arg3)
 	{
 	{
 		var str = scope:: String();
 		var str = scope:: String();

+ 17 - 17
IDE/src/IDEApp.bf

@@ -1095,7 +1095,7 @@ namespace IDE
 			}
 			}
 			else
 			else
 			{
 			{
-				Fail(StackStringFormat!("Failed to load minidump '{0}'", mCrashDumpPath));
+				Fail(scope String()..AppendF("Failed to load minidump '{0}'", mCrashDumpPath));
 				DeleteAndNullify!(mCrashDumpPath);
 				DeleteAndNullify!(mCrashDumpPath);
 			}
 			}
 		}
 		}
@@ -1229,7 +1229,7 @@ namespace IDE
 			Dialog aDialog;
 			Dialog aDialog;
 			if (changedList.Count == 1)
 			if (changedList.Count == 1)
 			{
 			{
-				aDialog = ThemeFactory.mDefault.CreateDialog("Save file?", StackStringFormat!("Save changes to '{0}' before closing?", changedList[0]), DarkTheme.sDarkTheme.mIconWarning);
+				aDialog = ThemeFactory.mDefault.CreateDialog("Save file?", scope String()..AppendF("Save changes to '{0}' before closing?", changedList[0]), DarkTheme.sDarkTheme.mIconWarning);
 			}
 			}
 			else
 			else
 			{
 			{
@@ -1531,7 +1531,7 @@ namespace IDE
 					if (Utils.WriteTextFile(path, useText) case .Err)
 					if (Utils.WriteTextFile(path, useText) case .Err)
 					{
 					{
 						if (showErrors)
 						if (showErrors)
-							Fail(StackStringFormat!("Failed to write file '{0}'", path));
+							Fail(scope String()..AppendF("Failed to write file '{0}'", path));
 						return false;
 						return false;
 					}
 					}
 				}
 				}
@@ -2312,7 +2312,7 @@ namespace IDE
 
 
 				if (Directory.CreateDirectory(mWorkspace.mDir) case .Err)
 				if (Directory.CreateDirectory(mWorkspace.mDir) case .Err)
 				{
 				{
-					Fail(StackStringFormat!("Failed to create workspace directory '{0}'", mWorkspace.mDir));
+					Fail(scope String()..AppendF("Failed to create workspace directory '{0}'", mWorkspace.mDir));
 					return false;
 					return false;
 				}
 				}
 			}
 			}
@@ -2330,7 +2330,7 @@ namespace IDE
 
 
 				if (!SafeWriteTextFile(workspaceFileName, tomlString))
 				if (!SafeWriteTextFile(workspaceFileName, tomlString))
 				{
 				{
-					Fail(StackStringFormat!("Failed to write workspace file '{0}'", workspaceFileName));
+					Fail(scope String()..AppendF("Failed to write workspace file '{0}'", workspaceFileName));
 					return false;
 					return false;
 				}
 				}
 			}
 			}
@@ -3356,7 +3356,7 @@ namespace IDE
 
 
 			/*if (!project.Load(projectFilePath))
 			/*if (!project.Load(projectFilePath))
 			{
 			{
-				Fail(StackStringFormat!("Failed to load project {0}", projectFilePath));
+				Fail(scope String()..AppendF("Failed to load project {0}", projectFilePath));
 				delete project;
 				delete project;
 				return .Err(.LoadFailed);
 				return .Err(.LoadFailed);
 			}
 			}
@@ -4050,7 +4050,7 @@ namespace IDE
 
 
 			if (mMainWindow == null)
 			if (mMainWindow == null)
 			{
 			{
-				Internal.FatalError(StackStringFormat!("FAILED: {0}", text));
+				Internal.FatalError(scope String()..AppendF("FAILED: {0}", text));
 			}
 			}
 
 
 			Beep(MessageBeepType.Error);
 			Beep(MessageBeepType.Error);
@@ -7432,7 +7432,7 @@ namespace IDE
 				Path.GetFileName(sourceViewPanel.mFilePath, fileName);
 				Path.GetFileName(sourceViewPanel.mFilePath, fileName);
 			else
 			else
 				fileName.Append("untitled");
 				fileName.Append("untitled");
-			Dialog aDialog = ThemeFactory.mDefault.CreateDialog("Save file?", StackStringFormat!("Save changes to '{0}' before closing?", fileName), DarkTheme.sDarkTheme.mIconWarning);
+			Dialog aDialog = ThemeFactory.mDefault.CreateDialog("Save file?", scope String()..AppendF("Save changes to '{0}' before closing?", fileName), DarkTheme.sDarkTheme.mIconWarning);
 			aDialog.mDefaultButton = aDialog.AddButton("Save", new (evt) => { SaveFile(sourceViewPanel); CloseDocument(sourceViewPanel); });
 			aDialog.mDefaultButton = aDialog.AddButton("Save", new (evt) => { SaveFile(sourceViewPanel); CloseDocument(sourceViewPanel); });
 			aDialog.AddButton("Don't Save", new (evt) => CloseDocument(sourceViewPanel));
 			aDialog.AddButton("Don't Save", new (evt) => CloseDocument(sourceViewPanel));
 			aDialog.mEscButton = aDialog.AddButton("Cancel");
 			aDialog.mEscButton = aDialog.AddButton("Cancel");
@@ -8093,7 +8093,7 @@ namespace IDE
 				DragDropFile(key);
 				DragDropFile(key);
 				return;
 				return;
 			}
 			}
-			Fail(StackStringFormat!("Unhandled command line param: {0}", key));
+			Fail(scope String()..AppendF("Unhandled command line param: {0}", key));
 		}
 		}
 
 
 		public override bool HandleCommandLineParam(String key, String value)
 		public override bool HandleCommandLineParam(String key, String value)
@@ -10161,7 +10161,7 @@ namespace IDE
 			Workspace.Options workspaceOptions = GetCurWorkspaceOptions();
 			Workspace.Options workspaceOptions = GetCurWorkspaceOptions();
 			if (options == null)
 			if (options == null)
 			{
 			{
-				//Fail(StackStringFormat!("Failed to retrieve options for {0}", project.mProjectName));
+				//Fail(scope String()..AppendF("Failed to retrieve options for {0}", project.mProjectName));
 				bfProject.SetDisabled(true);
 				bfProject.SetDisabled(true);
 				return false;
 				return false;
 			}
 			}
@@ -11423,7 +11423,7 @@ namespace IDE
 				Project depProject = FindProject(dep.mProjectName);
 				Project depProject = FindProject(dep.mProjectName);
 				if (depProject == null)
 				if (depProject == null)
 				{
 				{
-					OutputLine(StackStringFormat!("Unable to find project '{0}', a dependency of project '{1}'", dep.mProjectName, project.mProjectName));
+					OutputLine(scope String()..AppendF("Unable to find project '{0}', a dependency of project '{1}'", dep.mProjectName, project.mProjectName));
 					return false;
 					return false;
 				}
 				}
 				if (!GetDependentProjectList(depProject, orderedProjectList, useProjectStack))
 				if (!GetDependentProjectList(depProject, orderedProjectList, useProjectStack))
@@ -12939,7 +12939,7 @@ namespace IDE
 				{
 				{
 				case .Ok:
 				case .Ok:
 				case .Err:
 				case .Err:
-					Fail(StackStringFormat!("Unable to locate process id {0}", mProcessAttachId));
+					Fail(scope String()..AppendF("Unable to locate process id {0}", mProcessAttachId));
 				}
 				}
 				if (debugProcess.IsAttached)
 				if (debugProcess.IsAttached)
 				{
 				{
@@ -12975,7 +12975,7 @@ namespace IDE
 				}
 				}
 				else
 				else
 				{
 				{
-					Fail(StackStringFormat!("Failed to load minidump '{0}'", mCrashDumpPath));
+					Fail(scope String()..AppendF("Failed to load minidump '{0}'", mCrashDumpPath));
 				}
 				}
 			}
 			}
 			else if (mLaunchData != null)
 			else if (mLaunchData != null)
@@ -13971,9 +13971,9 @@ namespace IDE
 							if (checkBreakpoint.mMemoryAddress == memoryAddress)
 							if (checkBreakpoint.mMemoryAddress == memoryAddress)
 								breakpoint = checkBreakpoint;
 								breakpoint = checkBreakpoint;
 						}
 						}
-						String infoString = StackStringFormat!("Memory breakpoint hit: '0x{0:X08}'", (int64)memoryAddress);
+						String infoString = scope String()..AppendF("Memory breakpoint hit: '0x{0:X08}'", (int64)memoryAddress);
 						if (breakpoint != null)
 						if (breakpoint != null)
-							infoString = StackStringFormat!("Memory breakpoint hit: '0x{0:X08}' ({1})", (int64)memoryAddress, breakpoint.mMemoryWatchExpression);
+							infoString = scope String()..AppendF("Memory breakpoint hit: '0x{0:X08}' ({1})", (int64)memoryAddress, breakpoint.mMemoryWatchExpression);
 						OutputLine(infoString);
 						OutputLine(infoString);
 						if (!mRunningTestScript)
 						if (!mRunningTestScript)
 						{
 						{
@@ -14169,11 +14169,11 @@ namespace IDE
 								mDebugger.GetCurrentException(exceptionLine);
 								mDebugger.GetCurrentException(exceptionLine);
 								var exceptionData = String.StackSplit!(exceptionLine, '\n');
 								var exceptionData = String.StackSplit!(exceptionLine, '\n');
 
 
-								String exHeader = StackStringFormat!("Exception {0}", exceptionData[1]);
+								String exHeader = scope String()..AppendF("Exception {0}", exceptionData[1]);
 								if (exceptionData.Count >= 3)
 								if (exceptionData.Count >= 3)
 									exHeader = exceptionData[2];
 									exHeader = exceptionData[2];
 
 
-								String exString = StackStringFormat!("{0} at {1}", exHeader, exceptionData[0]);
+								String exString = scope String()..AppendF("{0} at {1}", exHeader, exceptionData[0]);
 
 
 								OutputLine(exString);
 								OutputLine(exString);
 								if (!IsCrashDump)
 								if (!IsCrashDump)

+ 3 - 3
IDE/src/ui/BinaryDataWidget.bf

@@ -693,7 +693,7 @@ namespace IDE.ui
 
 
             for (int32 c in scope int32[] ( 4, 8, 16, 32, 64 ))
             for (int32 c in scope int32[] ( 4, 8, 16, 32, 64 ))
             {
             {
-                columnChoice = menuItem.AddItem(StackStringFormat!("{0} bytes", c));
+                columnChoice = menuItem.AddItem(scope String()..AppendF("{0} bytes", c));
                 if ((mAutoResizeType == .Manual) && (c == (int32)mBytesPerDisplayLine))
                 if ((mAutoResizeType == .Manual) && (c == (int32)mBytesPerDisplayLine))
                     columnChoice.mIconImage = DarkTheme.sDarkTheme.GetImage(DarkTheme.ImageIdx.Check);
                     columnChoice.mIconImage = DarkTheme.sDarkTheme.GetImage(DarkTheme.ImageIdx.Check);
                 columnChoice.mOnMenuItemSelected.Add(new (evt) =>
                 columnChoice.mOnMenuItemSelected.Add(new (evt) =>
@@ -884,8 +884,8 @@ namespace IDE.ui
 
 
                     for (int i=0; i<mBytesPerDisplayLine; ++i)
                     for (int i=0; i<mBytesPerDisplayLine; ++i)
                     {
                     {
-                        g.DrawString(StackStringFormat!("{0:X1}", i), GS!(mColumnDisplayStart) + i*GS!(mColumnDisplayStride) + GS!(mColumnDisplayStride)*0.125f - ((i > 0xF) ? GS!(4) : 0), GS!(3), FontAlign.Left);
-                        g.DrawString(StackStringFormat!("{0:X1}", i & 0xF), strViewColumnStart + i*GS!(mStrViewDisplayStride), GS!(3), FontAlign.Left);
+                        g.DrawString(scope String()..AppendF("{0:X1}", i), GS!(mColumnDisplayStart) + i*GS!(mColumnDisplayStride) + GS!(mColumnDisplayStride)*0.125f - ((i > 0xF) ? GS!(4) : 0), GS!(3), FontAlign.Left);
+                        g.DrawString(scope String()..AppendF("{0:X1}", i & 0xF), strViewColumnStart + i*GS!(mStrViewDisplayStride), GS!(3), FontAlign.Left);
                     }
                     }
                 }
                 }
             }
             }

+ 2 - 2
IDE/src/ui/DisassemblyPanel.bf

@@ -890,7 +890,7 @@ namespace IDE.ui
                         {
                         {
                             var lineData = mLineDatas[lineIdx];
                             var lineData = mLineDatas[lineIdx];
                             if (lineData.mSourceFile != null)
                             if (lineData.mSourceFile != null)
-                                g.DrawString(StackStringFormat!("{0}", lineData.mSourceLineNum + 1), GS!(8), GS!(2) + lineIdx * lineSpacing, FontAlign.Right, mEditWidget.mX - GS!(14));
+                                g.DrawString(scope String()..AppendF("{0}", lineData.mSourceLineNum + 1), GS!(8), GS!(2) + lineIdx * lineSpacing, FontAlign.Right, mEditWidget.mX - GS!(14));
                         }
                         }
                     }
                     }
 
 
@@ -1338,7 +1338,7 @@ namespace IDE.ui
                             {
                             {
                                 if (mLineDatas[line].mAddrEnd != (int)0)
                                 if (mLineDatas[line].mAddrEnd != (int)0)
                                 {
                                 {
-                                    String nextAddr = StackStringFormat!("0x{0:x}L", (int64)mLineDatas[line].mAddrEnd);
+                                    String nextAddr = scope String()..AppendF("0x{0:x}L", (int64)mLineDatas[line].mAddrEnd);
 									nextAddr.Append(" +");
 									nextAddr.Append(" +");
                                     debugExpr.Replace("rip +", nextAddr);
                                     debugExpr.Replace("rip +", nextAddr);
                                 }
                                 }

+ 1 - 1
IDE/src/ui/GoToLineDialog.bf

@@ -37,7 +37,7 @@ namespace IDE.ui
 
 
             mDefaultButton = AddButton("OK", new (evt) => GotoLineSubmit(true));
             mDefaultButton = AddButton("OK", new (evt) => GotoLineSubmit(true));
             mEscButton = AddButton("Cancel", new (evt) => Cancel());
             mEscButton = AddButton("Cancel", new (evt) => Cancel());
-            mEditWidget = AddEdit(StackStringFormat!("{0}", line + 1));
+            mEditWidget = AddEdit(scope String()..AppendF("{0}", line + 1));
             mEditWidget.mOnContentChanged.Add(new (evt) => GotoLineSubmit(false));
             mEditWidget.mOnContentChanged.Add(new (evt) => GotoLineSubmit(false));
         }
         }
 
 

+ 6 - 6
IDE/src/ui/ProfilePanel.bf

@@ -690,18 +690,18 @@ namespace IDE.ui
 
 
 			if ((mProfiler != null) && (mShowOverview != null))
 			if ((mProfiler != null) && (mShowOverview != null))
 			{
 			{
-				g.DrawString(StackStringFormat!("Rate: {0} Hz", mShowOverview.mSamplesPerSecond), GS!(320), GS!(2));
+				g.DrawString(scope String()..AppendF("Rate: {0} Hz", mShowOverview.mSamplesPerSecond), GS!(320), GS!(2));
 				int32 seconds = (mShowOverview.mRecordedTicks / 1000);
 				int32 seconds = (mShowOverview.mRecordedTicks / 1000);
-				g.DrawString(StackStringFormat!("Length: {0}:{1:00}.{2}", seconds / 60, seconds % 60, (mShowOverview.mRecordedTicks % 1000)/100), GS!(320), GS!(22));
+				g.DrawString(scope String()..AppendF("Length: {0}:{1:00}.{2}", seconds / 60, seconds % 60, (mShowOverview.mRecordedTicks % 1000)/100), GS!(320), GS!(22));
 
 
 				seconds = (mShowOverview.mEndedTicks / 1000);
 				seconds = (mShowOverview.mEndedTicks / 1000);
 				if (seconds > 60*60)
 				if (seconds > 60*60)
-					g.DrawString(StackStringFormat!("Age: {0}:{1:00}:{2:00}", seconds / 60 / 60, (seconds / 60) % 60, seconds % 60), GS!(420), GS!(22));
+					g.DrawString(scope String()..AppendF("Age: {0}:{1:00}:{2:00}", seconds / 60 / 60, (seconds / 60) % 60, seconds % 60), GS!(420), GS!(22));
 				else
 				else
-					g.DrawString(StackStringFormat!("Age: {0}:{1:00}", seconds / 60, seconds % 60), GS!(420), GS!(22));
+					g.DrawString(scope String()..AppendF("Age: {0}:{1:00}", seconds / 60, seconds % 60), GS!(420), GS!(22));
 
 
-				g.DrawString(StackStringFormat!("Samples: {0}", mShowOverview.mTotalActualSamples), GS!(420), GS!(2));
-				g.DrawString(StackStringFormat!("Missed Samples: {0}", mShowOverview.mTotalVirtualSamples - mShowOverview.mTotalActualSamples), GS!(550), GS!(2));
+				g.DrawString(scope String()..AppendF("Samples: {0}", mShowOverview.mTotalActualSamples), GS!(420), GS!(2));
+				g.DrawString(scope String()..AppendF("Missed Samples: {0}", mShowOverview.mTotalVirtualSamples - mShowOverview.mTotalActualSamples), GS!(550), GS!(2));
 			}
 			}
 
 
 			if (mTickCreated != 0)
 			if (mTickCreated != 0)

+ 10 - 10
IDE/src/ui/ProjectPanel.bf

@@ -1257,9 +1257,9 @@ namespace IDE.ui
             {
             {
                 String errorStr;
                 String errorStr;
                 if (alreadyHadFileList.Count == 1)
                 if (alreadyHadFileList.Count == 1)
-                    errorStr = StackStringFormat!("Project already contained file: {0}", alreadyHadFileList[0]);
+                    errorStr = scope:: String()..AppendF("Project already contained file: {0}", alreadyHadFileList[0]);
                 else
                 else
-                    errorStr = StackStringFormat!("Project already contained {0} of the {1} files specified", alreadyHadFileList.Count, totalFileCount);
+                    errorStr = scope:: String()..AppendF("Project already contained {0} of the {1} files specified", alreadyHadFileList.Count, totalFileCount);
                 IDEApp.sApp.Fail(errorStr);
                 IDEApp.sApp.Fail(errorStr);
             }
             }
         }
         }
@@ -1991,7 +1991,7 @@ namespace IDE.ui
 
 
 		                if (projectCount == 1)
 		                if (projectCount == 1)
 		                {
 		                {
-		                    aDialog = ThemeFactory.mDefault.CreateDialog("Remove Project", StackStringFormat!("Remove project '{0}' from the workspace?", selectedProjectItem.mProject.mProjectName));
+		                    aDialog = ThemeFactory.mDefault.CreateDialog("Remove Project", scope String()..AppendF("Remove project '{0}' from the workspace?", selectedProjectItem.mProject.mProjectName));
 		                }
 		                }
 		                else
 		                else
 		                {
 		                {
@@ -2009,7 +2009,7 @@ namespace IDE.ui
 		            if (fileCount + folderCount == 1)
 		            if (fileCount + folderCount == 1)
 		            {
 		            {
 		                aDialog = ThemeFactory.mDefault.CreateDialog((fileCount > 0) ? "Delete File" : "Delete Folder",
 		                aDialog = ThemeFactory.mDefault.CreateDialog((fileCount > 0) ? "Delete File" : "Delete Folder",
-		                    StackStringFormat!("Choose Remove to remove '{0}' from '{1}'.\n\nChoose Delete to permanently delete '{0}'.", selectedProjectItem.mName, selectedProjectItem.mProject.mProjectName));
+		                    scope String()..AppendF("Choose Remove to remove '{0}' from '{1}'.\n\nChoose Delete to permanently delete '{0}'.", selectedProjectItem.mName, selectedProjectItem.mProject.mProjectName));
 		            }
 		            }
 		            else
 		            else
 		            {
 		            {
@@ -2034,12 +2034,12 @@ namespace IDE.ui
 		                if (projectsReferenced.Count == 1)
 		                if (projectsReferenced.Count == 1)
 		                {
 		                {
 		                    aDialog = ThemeFactory.mDefault.CreateDialog(title,
 		                    aDialog = ThemeFactory.mDefault.CreateDialog(title,
-		                        StackStringFormat!("Choose Remove to remove the selected {0} from '{1}'.\n\nChoose Delete to permanently delete the selected items.", typeDeleting, selectedProjectItem.mProject.mProjectName));
+		                        scope String()..AppendF("Choose Remove to remove the selected {0} from '{1}'.\n\nChoose Delete to permanently delete the selected items.", typeDeleting, selectedProjectItem.mProject.mProjectName));
 		                }
 		                }
 		                else
 		                else
 		                {
 		                {
 		                    aDialog = ThemeFactory.mDefault.CreateDialog(title,
 		                    aDialog = ThemeFactory.mDefault.CreateDialog(title,
-		                        StackStringFormat!("Choose Remove to removed the selected {0}.\n\nChoose Delete to permanently delete the selected items.", typeDeleting));
+		                        scope String()..AppendF("Choose Remove to removed the selected {0}.\n\nChoose Delete to permanently delete the selected items.", typeDeleting));
 		                }
 		                }
 		            }                            
 		            }                            
 
 
@@ -2580,7 +2580,7 @@ namespace IDE.ui
                             /*if ((IDEApp.IsBeefFile(prevPath) != IDEApp.IsBeefFile(newPath)) ||
                             /*if ((IDEApp.IsBeefFile(prevPath) != IDEApp.IsBeefFile(newPath)) ||
                                 (IDEApp.IsClangSourceFile(prevPath) != IDEApp.IsClangSourceFile(newPath)))
                                 (IDEApp.IsClangSourceFile(prevPath) != IDEApp.IsClangSourceFile(newPath)))
                             {
                             {
-                                IDEApp.sApp.Fail(StackStringFormat!("Invalid file extension change, cannot rename '{0}' to '{1}'", prevPath, newPath));
+                                IDEApp.sApp.Fail(scope String()..AppendF("Invalid file extension change, cannot rename '{0}' to '{1}'", prevPath, newPath));
                                 return;
                                 return;
                             }*/
                             }*/
 
 
@@ -2798,7 +2798,7 @@ namespace IDE.ui
 
 
 			if (!File.Exists(filePath))
 			if (!File.Exists(filePath))
 			{
 			{
-				gApp.Fail(StackStringFormat!("Project file not found: {0}", filePath));
+				gApp.Fail(scope String()..AppendF("Project file not found: {0}", filePath));
 				return null;
 				return null;
 			}
 			}
 
 
@@ -2823,7 +2823,7 @@ namespace IDE.ui
 			Path.GetFileNameWithoutExtension(filePath, projName);
 			Path.GetFileNameWithoutExtension(filePath, projName);
 			if (gApp.mWorkspace.FindProject(projName) != null)
 			if (gApp.mWorkspace.FindProject(projName) != null)
 			{
 			{
-			    gApp.Fail(StackStringFormat!("A project named '{0}' name already exists in the workspace.", projName));
+			    gApp.Fail(scope String()..AppendF("A project named '{0}' name already exists in the workspace.", projName));
 			    return null;
 			    return null;
 			}
 			}
 
 
@@ -2841,7 +2841,7 @@ namespace IDE.ui
 			InitProject(proj, workspaceFolder);
 			InitProject(proj, workspaceFolder);
 			if (failed)
 			if (failed)
 			{
 			{
-			    gApp.Fail(StackStringFormat!("Failed to load project: {0}", filePath));
+			    gApp.Fail(scope String()..AppendF("Failed to load project: {0}", filePath));
 				return proj;
 				return proj;
 			}
 			}
 
 

+ 1 - 1
IDE/src/ui/PropertiesDialog.bf

@@ -1536,7 +1536,7 @@ namespace IDE.ui
                     }
                     }
                     if (i < strVals.Count)
                     if (i < strVals.Count)
                     {
                     {
-                        childItem.Label = StackStringFormat!("#{0}", i + 1);
+                        childItem.Label = scope String()..AppendF("#{0}", i + 1);
                         childSubItem.mTextColor = DarkTheme.COLOR_TEXT;
                         childSubItem.mTextColor = DarkTheme.COLOR_TEXT;
                     }
                     }
                     else
                     else

+ 1 - 1
IDE/src/ui/QuickFind.bf

@@ -182,7 +182,7 @@ namespace IDE.ui
                 mEditWidget.SetFocus();
                 mEditWidget.SetFocus();
                 replaceCount = Replace(true);
                 replaceCount = Replace(true);
                 if (replaceCount > 0)
                 if (replaceCount > 0)
-                    IDEApp.sApp.MessageDialog("Replace Results", StackStringFormat!("{0} instance(s) replaced.", replaceCount));
+                    IDEApp.sApp.MessageDialog("Replace Results", scope String()..AppendF("{0} instance(s) replaced.", replaceCount));
 
 
 				if (replaceCount != -1)
 				if (replaceCount != -1)
 				{
 				{

+ 1 - 1
IDE/src/ui/SourceEditWidgetContent.bf

@@ -5077,7 +5077,7 @@ namespace IDE.ui
 						                int callInstLoc = (int)int64.Parse(callInstLocStr, System.Globalization.NumberStyles.HexNumber);
 						                int callInstLoc = (int)int64.Parse(callInstLocStr, System.Globalization.NumberStyles.HexNumber);
 						                if (callData.Count == 1)
 						                if (callData.Count == 1)
 						                {
 						                {
-						                    callMenuItem = stepIntoSpecificMenu.AddItem(StackStringFormat!("Indirect call at 0x{0:X}", callInstLoc));
+						                    callMenuItem = stepIntoSpecificMenu.AddItem(scope String()..AppendF("Indirect call at 0x{0:X}", callInstLoc));
 						                }
 						                }
 						                else
 						                else
 						                {
 						                {

+ 2 - 2
IDE/src/ui/SourceViewPanel.bf

@@ -3809,7 +3809,7 @@ namespace IDE.ui
             var text = scope String();
             var text = scope String();
             if (gApp.LoadTextFile(mFilePath, text) case .Err)
             if (gApp.LoadTextFile(mFilePath, text) case .Err)
             {
             {
-                gApp.Fail(StackStringFormat!("Failed to open file '{0}'", mFilePath));
+                gApp.Fail(scope String()..AppendF("Failed to open file '{0}'", mFilePath));
                 return;
                 return;
             }
             }
 
 
@@ -5179,7 +5179,7 @@ namespace IDE.ui
 
 
         public void GotoLine()
         public void GotoLine()
         {                        
         {                        
-            GoToLineDialog aDialog = new GoToLineDialog("Go To Line", StackStringFormat!("Line Number ({0}-{1})", 1, mEditWidget.Content.GetLineCount()));
+            GoToLineDialog aDialog = new GoToLineDialog("Go To Line", scope String()..AppendF("Line Number ({0}-{1})", 1, mEditWidget.Content.GetLineCount()));
             aDialog.Init(this);                        
             aDialog.Init(this);                        
             aDialog.PopupWindow(mWidgetWindow);
             aDialog.PopupWindow(mWidgetWindow);
         }
         }

+ 6 - 6
IDE/src/ui/StatusBar.bf

@@ -355,22 +355,22 @@ namespace IDE.ui
 								lineCount++;
 								lineCount++;
 						}
 						}
 
 
-						String str = StackStringFormat!("Sel {0} | {1}", sel.MaxPos - sel.MinPos, lineCount);
+						String str = scope String()..AppendF("Sel {0} | {1}", sel.MaxPos - sel.MinPos, lineCount);
 						float curX = mWidth - GS!(240);
 						float curX = mWidth - GS!(240);
 						g.DrawString(str, curX, 0);
 						g.DrawString(str, curX, 0);
 						leftX = curX + g.mFont.GetWidth(str);
 						leftX = curX + g.mFont.GetWidth(str);
 					}
 					}
 					else if (showIndex)
 					else if (showIndex)
-						g.DrawString(StackStringFormat!("Idx {0}", activeEditWidget.Content.CursorTextPos), mWidth - GS!(240), 0);
+						g.DrawString(scope String()..AppendF("Idx {0}", activeEditWidget.Content.CursorTextPos), mWidth - GS!(240), 0);
 
 
 					if (leftX >= mWidth - GS!(142))
 					if (leftX >= mWidth - GS!(142))
 					{
 					{
-						g.DrawString(StackStringFormat!("Ln {0}:{1}", lineAndColumn.mLine + 1, lineAndColumn.mColumn + 1), mWidth - GS!(32), 0, .Right);
+						g.DrawString(scope String()..AppendF("Ln {0}:{1}", lineAndColumn.mLine + 1, lineAndColumn.mColumn + 1), mWidth - GS!(32), 0, .Right);
 					}
 					}
 					else
 					else
 					{
 					{
-					    g.DrawString(StackStringFormat!("Ln {0}", lineAndColumn.mLine + 1), Math.Max(leftX + GS!(8), mWidth - GS!(150)), 0);
-					    g.DrawString(StackStringFormat!("Col {0}", lineAndColumn.mColumn + 1), mWidth - GS!(78), 0);
+					    g.DrawString(scope String()..AppendF("Ln {0}", lineAndColumn.mLine + 1), Math.Max(leftX + GS!(8), mWidth - GS!(150)), 0);
+					    g.DrawString(scope String()..AppendF("Col {0}", lineAndColumn.mColumn + 1), mWidth - GS!(78), 0);
 					}
 					}
 				}
 				}
 			}
 			}
@@ -532,7 +532,7 @@ namespace IDE.ui
 			if (gApp.mSettings.mEnableDevMode)
 			if (gApp.mSettings.mEnableDevMode)
 			{
 			{
 				using (g.PushColor(DarkTheme.COLOR_TEXT))
 				using (g.PushColor(DarkTheme.COLOR_TEXT))
-	            	g.DrawString(StackStringFormat!("FPS: {0}", gApp.mLastFPS), GS!(32), 0);
+	            	g.DrawString(scope String()..AppendF("FPS: {0}", gApp.mLastFPS), GS!(32), 0);
 
 
 	            String resolveStr = scope String();
 	            String resolveStr = scope String();
 				let bfResolveCompiler = gApp.mBfResolveCompiler;
 				let bfResolveCompiler = gApp.mBfResolveCompiler;

+ 5 - 5
IDE/src/ui/TargetedPropertiesDialog.bf

@@ -50,7 +50,7 @@ namespace IDE.ui
 
 
 			if (!mTargetedProperties.mActiveConfigName.IsEmpty)
 			if (!mTargetedProperties.mActiveConfigName.IsEmpty)
 			{
 			{
-				String dispStr = StackStringFormat!("Active({0})", mTargetedProperties.mActiveConfigName);
+				String dispStr = scope String()..AppendF("Active({0})", mTargetedProperties.mActiveConfigName);
 				item = menu.AddItem(dispStr);
 				item = menu.AddItem(dispStr);
 				item.mOnMenuItemSelected.Add(new (evt) => { SelectConfig(mTargetedProperties.mActiveConfigName); });
 				item.mOnMenuItemSelected.Add(new (evt) => { SelectConfig(mTargetedProperties.mActiveConfigName); });
 			}
 			}
@@ -549,7 +549,7 @@ namespace IDE.ui
 
 
 			if (!mActiveConfigName.IsEmpty)
 			if (!mActiveConfigName.IsEmpty)
 			{
 			{
-				String dispStr = StackStringFormat!("Active({0})", mActiveConfigName);
+				String dispStr = scope String()..AppendF("Active({0})", mActiveConfigName);
 				item = menu.AddItem(dispStr);
 				item = menu.AddItem(dispStr);
 				item.mOnMenuItemSelected.Add(new (evt) => { SelectConfig(mActiveConfigName); });
 				item.mOnMenuItemSelected.Add(new (evt) => { SelectConfig(mActiveConfigName); });
 			}
 			}
@@ -613,7 +613,7 @@ namespace IDE.ui
 			{
 			{
 				if (!platformName.IsEmpty)
 				if (!platformName.IsEmpty)
 				{
 				{
-				    String dispStr = (IDEApp.sApp.mPlatformName == platformName) ? StackStringFormat!("Active({0})", platformName) : platformName;
+				    String dispStr = (IDEApp.sApp.mPlatformName == platformName) ? scope String()..AppendF("Active({0})", platformName) : platformName;
 				    item = menu.AddItem(dispStr);
 				    item = menu.AddItem(dispStr);
 				    item.mOnMenuItemSelected.Add(new (evt) => { SelectPlatform(platformName); });
 				    item.mOnMenuItemSelected.Add(new (evt) => { SelectPlatform(platformName); });
 				}
 				}
@@ -692,7 +692,7 @@ namespace IDE.ui
             {
             {
 				if (mConfigNames.Count == 1)
 				if (mConfigNames.Count == 1)
 				{
 				{
-	                String dispStr = ((mConfigNames.Count == 1) && (mActiveConfigName == mConfigNames[0])) ? StackStringFormat!("Active({0})", mConfigNames[0]) : mConfigNames[0];
+	                String dispStr = ((mConfigNames.Count == 1) && (mActiveConfigName == mConfigNames[0])) ? scope String()..AppendF("Active({0})", mConfigNames[0]) : mConfigNames[0];
 	                mConfigComboBox.Label = dispStr;
 	                mConfigComboBox.Label = dispStr;
 				}
 				}
 				else
 				else
@@ -716,7 +716,7 @@ namespace IDE.ui
 			{
 			{
 				if (mPlatformNames.Count == 1)
 				if (mPlatformNames.Count == 1)
 				{
 				{
-	                String dispStr = ((mPlatformNames.Count == 1) && (mActivePlatformName == mPlatformNames[0])) ? StackStringFormat!("Active({0})", mPlatformNames[0]) : mPlatformNames[0];
+	                String dispStr = ((mPlatformNames.Count == 1) && (mActivePlatformName == mPlatformNames[0])) ? scope String()..AppendF("Active({0})", mPlatformNames[0]) : mPlatformNames[0];
 	                mPlatformComboBox.Label = dispStr;
 	                mPlatformComboBox.Label = dispStr;
 				}
 				}
 				else
 				else

+ 2 - 2
IDE/src/ui/WatchPanel.bf

@@ -1664,8 +1664,8 @@ namespace IDE.ui
 			if (mShowStatusBar)
 			if (mShowStatusBar)
 			{
 			{
 				g.DrawString(textPosString, 16, textY, .Left, mWidth - GS!(140), .Ellipsis);
 				g.DrawString(textPosString, 16, textY, .Left, mWidth - GS!(140), .Ellipsis);
-	            g.DrawString(StackStringFormat!("Ln {0}", line + 1), mWidth - GS!(130), textY);
-	            g.DrawString(StackStringFormat!("Col {0}", col + 1), mWidth - GS!(70), textY);
+	            g.DrawString(scope String()..AppendF("Ln {0}", line + 1), mWidth - GS!(130), textY);
+	            g.DrawString(scope String()..AppendF("Col {0}", col + 1), mWidth - GS!(70), textY);
 			}
 			}
 
 
 			//using (g.PushColor(0xD0FFFFFF))
 			//using (g.PushColor(0xD0FFFFFF))

+ 1 - 1
IDE/src/ui/WorkspaceProperties.bf

@@ -596,7 +596,7 @@ namespace IDE.ui
 	                        curWorkspaceOptions.mConfigSelections.TryGetValue(project, out setConfigSelection);
 	                        curWorkspaceOptions.mConfigSelections.TryGetValue(project, out setConfigSelection);
 	                        if (setConfigSelection == null)
 	                        if (setConfigSelection == null)
 	                        {
 	                        {
-	                            IDEApp.sApp.Fail(StackStringFormat!("Project '{0}' not in workspace", project.mProjectName));
+	                            IDEApp.sApp.Fail(scope String()..AppendF("Project '{0}' not in workspace", project.mProjectName));
 	                            return;
 	                            return;
 	                        }
 	                        }
 	                        setConfigSelection.mEnabled = newConfigSelection.mEnabled;
 	                        setConfigSelection.mEnabled = newConfigSelection.mEnabled;