Author: Michael Buch
Date: 2026-02-18T13:19:24Z
New Revision: b5139f9068b6a2d736573c1564aa859e2705bcfc

URL: 
https://github.com/llvm/llvm-project/commit/b5139f9068b6a2d736573c1564aa859e2705bcfc
DIFF: 
https://github.com/llvm/llvm-project/commit/b5139f9068b6a2d736573c1564aa859e2705bcfc.diff

LOG: [lldb][PlatformDarwin][NFC] Use early-return style in 
LocateExecutableScriptingResources (#182001)

I'm planning on adding more to this function. It'll be easier to
review/reason about if we un-nested the if-blocks (as the LLVM style
guide recommends).

Added: 
    

Modified: 
    lldb/source/Plugins/Platform/MacOSX/PlatformDarwin.cpp

Removed: 
    


################################################################################
diff  --git a/lldb/source/Plugins/Platform/MacOSX/PlatformDarwin.cpp 
b/lldb/source/Plugins/Platform/MacOSX/PlatformDarwin.cpp
index 3e085e993cad7..ae0f6cabe90f8 100644
--- a/lldb/source/Plugins/Platform/MacOSX/PlatformDarwin.cpp
+++ b/lldb/source/Plugins/Platform/MacOSX/PlatformDarwin.cpp
@@ -201,120 +201,126 @@ PlatformDarwin::PutFile(const lldb_private::FileSpec 
&source,
 
 FileSpecList PlatformDarwin::LocateExecutableScriptingResources(
     Target *target, Module &module, Stream &feedback_stream) {
-  FileSpecList file_list;
-  if (target &&
-      target->GetDebugger().GetScriptLanguage() == eScriptLanguagePython) {
-    // NB some extensions might be meaningful and should not be stripped -
-    // "this.binary.file"
-    // should not lose ".file" but GetFileNameStrippingExtension() will do
-    // precisely that. Ideally, we should have a per-platform list of
-    // extensions (".exe", ".app", ".dSYM", ".framework") which should be
-    // stripped while leaving "this.binary.file" as-is.
-
-    FileSpec module_spec = module.GetFileSpec();
-
-    if (module_spec) {
-      if (SymbolFile *symfile = module.GetSymbolFile()) {
-        ObjectFile *objfile = symfile->GetObjectFile();
-        if (objfile) {
-          FileSpec symfile_spec(objfile->GetFileSpec());
-          if (symfile_spec &&
-              llvm::StringRef(symfile_spec.GetPath())
-                  .contains_insensitive(".dSYM/Contents/Resources/DWARF") &&
-              FileSystem::Instance().Exists(symfile_spec)) {
-            while (module_spec.GetFilename()) {
-              std::string module_basename(
-                  module_spec.GetFilename().GetCString());
-              std::string original_module_basename(module_basename);
-
-              bool was_keyword = false;
-
-              // FIXME: for Python, we cannot allow certain characters in
-              // module
-              // filenames we import. Theoretically, 
diff erent scripting
-              // languages may have 
diff erent sets of forbidden tokens in
-              // filenames, and that should be dealt with by each
-              // ScriptInterpreter. For now, we just replace dots with
-              // underscores, but if we ever support anything other than
-              // Python we will need to rework this
-              llvm::replace(module_basename, '.', '_');
-              llvm::replace(module_basename, ' ', '_');
-              llvm::replace(module_basename, '-', '_');
-              ScriptInterpreter *script_interpreter =
-                  target->GetDebugger().GetScriptInterpreter();
-              if (script_interpreter &&
-                  script_interpreter->IsReservedWord(module_basename.c_str())) 
{
-                module_basename.insert(module_basename.begin(), '_');
-                was_keyword = true;
-              }
+  if (!target)
+    return {};
 
-              StreamString path_string;
-              StreamString original_path_string;
-              // for OSX we are going to be in
-              // .dSYM/Contents/Resources/DWARF/<basename> let us go to
-              // .dSYM/Contents/Resources/Python/<basename>.py and see if the
-              // file exists
-              path_string.Printf("%s/../Python/%s.py",
-                                 symfile_spec.GetDirectory().GetCString(),
-                                 module_basename.c_str());
-              original_path_string.Printf(
-                  "%s/../Python/%s.py",
-                  symfile_spec.GetDirectory().GetCString(),
-                  original_module_basename.c_str());
-              FileSpec script_fspec(path_string.GetString());
-              FileSystem::Instance().Resolve(script_fspec);
-              FileSpec orig_script_fspec(original_path_string.GetString());
-              FileSystem::Instance().Resolve(orig_script_fspec);
-
-              // if we did some replacements of reserved characters, and a
-              // file with the untampered name exists, then warn the user
-              // that the file as-is shall not be loaded
-              if (module_basename != original_module_basename &&
-                  FileSystem::Instance().Exists(orig_script_fspec)) {
-                const char *reason_for_complaint =
-                    was_keyword ? "conflicts with a keyword"
-                                : "contains reserved characters";
-                if (FileSystem::Instance().Exists(script_fspec))
-                  feedback_stream.Printf(
-                      "warning: the symbol file '%s' contains a debug "
-                      "script. However, its name"
-                      " '%s' %s and as such cannot be loaded. LLDB will"
-                      " load '%s' instead. Consider removing the file with "
-                      "the malformed name to"
-                      " eliminate this warning.\n",
-                      symfile_spec.GetPath().c_str(),
-                      original_path_string.GetData(), reason_for_complaint,
-                      path_string.GetData());
-                else
-                  feedback_stream.Printf(
-                      "warning: the symbol file '%s' contains a debug "
-                      "script. However, its name"
-                      " %s and as such cannot be loaded. If you intend"
-                      " to have this script loaded, please rename '%s' to "
-                      "'%s' and retry.\n",
-                      symfile_spec.GetPath().c_str(), reason_for_complaint,
-                      original_path_string.GetData(), path_string.GetData());
-              }
+  // For now only Python scripts supported for auto-loading.
+  if (target->GetDebugger().GetScriptLanguage() != eScriptLanguagePython)
+    return {};
 
-              if (FileSystem::Instance().Exists(script_fspec)) {
-                file_list.Append(script_fspec);
-                break;
-              }
+  // NB some extensions might be meaningful and should not be stripped -
+  // "this.binary.file"
+  // should not lose ".file" but GetFileNameStrippingExtension() will do
+  // precisely that. Ideally, we should have a per-platform list of
+  // extensions (".exe", ".app", ".dSYM", ".framework") which should be
+  // stripped while leaving "this.binary.file" as-is.
 
-              // If we didn't find the python file, then keep stripping the
-              // extensions and try again
-              ConstString filename_no_extension(
-                  module_spec.GetFileNameStrippingExtension());
-              if (module_spec.GetFilename() == filename_no_extension)
-                break;
+  FileSpec module_spec = module.GetFileSpec();
 
-              module_spec.SetFilename(filename_no_extension);
-            }
-          }
-        }
+  if (!module_spec)
+    return {};
+
+  SymbolFile *symfile = module.GetSymbolFile();
+  if (!symfile)
+    return {};
+
+  ObjectFile *objfile = symfile->GetObjectFile();
+  if (!objfile)
+    return {};
+
+  FileSpecList file_list;
+  FileSpec symfile_spec(objfile->GetFileSpec());
+  if (symfile_spec &&
+      llvm::StringRef(symfile_spec.GetPath())
+          .contains_insensitive(".dSYM/Contents/Resources/DWARF") &&
+      FileSystem::Instance().Exists(symfile_spec)) {
+    while (module_spec.GetFilename()) {
+      std::string module_basename(module_spec.GetFilename().GetCString());
+      std::string original_module_basename(module_basename);
+
+      bool was_keyword = false;
+
+      // FIXME: for Python, we cannot allow certain characters in
+      // module
+      // filenames we import. Theoretically, 
diff erent scripting
+      // languages may have 
diff erent sets of forbidden tokens in
+      // filenames, and that should be dealt with by each
+      // ScriptInterpreter. For now, we just replace dots with
+      // underscores, but if we ever support anything other than
+      // Python we will need to rework this
+      llvm::replace(module_basename, '.', '_');
+      llvm::replace(module_basename, ' ', '_');
+      llvm::replace(module_basename, '-', '_');
+      ScriptInterpreter *script_interpreter =
+          target->GetDebugger().GetScriptInterpreter();
+      if (script_interpreter &&
+          script_interpreter->IsReservedWord(module_basename.c_str())) {
+        module_basename.insert(module_basename.begin(), '_');
+        was_keyword = true;
+      }
+
+      StreamString path_string;
+      StreamString original_path_string;
+      // for OSX we are going to be in
+      // .dSYM/Contents/Resources/DWARF/<basename> let us go to
+      // .dSYM/Contents/Resources/Python/<basename>.py and see if the
+      // file exists
+      path_string.Printf("%s/../Python/%s.py",
+                         symfile_spec.GetDirectory().GetCString(),
+                         module_basename.c_str());
+      original_path_string.Printf("%s/../Python/%s.py",
+                                  symfile_spec.GetDirectory().GetCString(),
+                                  original_module_basename.c_str());
+      FileSpec script_fspec(path_string.GetString());
+      FileSystem::Instance().Resolve(script_fspec);
+      FileSpec orig_script_fspec(original_path_string.GetString());
+      FileSystem::Instance().Resolve(orig_script_fspec);
+
+      // if we did some replacements of reserved characters, and a
+      // file with the untampered name exists, then warn the user
+      // that the file as-is shall not be loaded
+      if (module_basename != original_module_basename &&
+          FileSystem::Instance().Exists(orig_script_fspec)) {
+        const char *reason_for_complaint = was_keyword
+                                               ? "conflicts with a keyword"
+                                               : "contains reserved 
characters";
+        if (FileSystem::Instance().Exists(script_fspec))
+          feedback_stream.Printf(
+              "warning: the symbol file '%s' contains a debug "
+              "script. However, its name"
+              " '%s' %s and as such cannot be loaded. LLDB will"
+              " load '%s' instead. Consider removing the file with "
+              "the malformed name to"
+              " eliminate this warning.\n",
+              symfile_spec.GetPath().c_str(), original_path_string.GetData(),
+              reason_for_complaint, path_string.GetData());
+        else
+          feedback_stream.Printf(
+              "warning: the symbol file '%s' contains a debug "
+              "script. However, its name"
+              " %s and as such cannot be loaded. If you intend"
+              " to have this script loaded, please rename '%s' to "
+              "'%s' and retry.\n",
+              symfile_spec.GetPath().c_str(), reason_for_complaint,
+              original_path_string.GetData(), path_string.GetData());
       }
+
+      if (FileSystem::Instance().Exists(script_fspec)) {
+        file_list.Append(script_fspec);
+        break;
+      }
+
+      // If we didn't find the python file, then keep stripping the
+      // extensions and try again
+      ConstString filename_no_extension(
+          module_spec.GetFileNameStrippingExtension());
+      if (module_spec.GetFilename() == filename_no_extension)
+        break;
+
+      module_spec.SetFilename(filename_no_extension);
     }
   }
+
   return file_list;
 }
 


        
_______________________________________________
lldb-commits mailing list
[email protected]
https://lists.llvm.org/cgi-bin/mailman/listinfo/lldb-commits

Reply via email to