tree d5b9b90d3bd48d8d95640692ce2f2b2a124624c7
parent 894fb64bc1a9b70dcb50b313219eff99f69bc527
author Jonas Devlieghere <jonas@devlieghere.com> 1775579291 -0700
committer GitHub <noreply@github.com> 1775579291 +0100
gpgsig -----BEGIN PGP SIGNATURE-----
 
 wsFcBAABCAAQBQJp1TCbCRC1aQ7uu5UhlAAA6n0QACfc52q9OEwpiqqlWqF1WNvn
 oc1BnkVtj7RuGrx0Bk/VkoFsGNvyZX+hKnximjDVquftimEGVtDLr/p4ke71rDi5
 PHTVnoFePZon6dYpgCD9OEEFW7tZ1mGFcF5OUs4j5PiAozDBNRbLSQfqyCraY41A
 e63OPcDROi0YmyD6rKLYu8045oLmlG7gX+YOU2VOy2L4GTQmPR9aQrQhsR8QloZf
 ngcSbJHXwBObuEm/nZlK2cINTYF+aonYKHFFtE6rVqOB+RO7Ol+kIBGiU1wdsIDn
 7JC60h9AO4MJftOB8Sk9OGYiCl9mPkDFnWxt59BBHKGn3URiBlTZDQhNsV9bmwPE
 5VInq3t1s8K9cKyRBS5nLaOLFNr94OlOVZaYaoBnbb37qviXXF6tThGZDiJBRwFT
 y1RIzveGdJMrYxTpAH020sVj/dW5qa93j9TQEPvioJcdaBybHb9MySUmqDyZUUJl
 2jwrgLeOW7AkAYUrD3skeDpJut7fG23kymAb8Q3Kwm/GQWDmZ1sPKdn+4FCE/b6l
 lued49HdgL+aK1TlKhxR1rVzZQL/roXj3bpvXq7F74h6+ayJPD1BAufLfa2riPdo
 Hpo8aEpHdStJVMbyO59S0raITr5YK3molhOz2uCb9MDs6Jm5EaGHwqM0xxILIbM1
 lXgAH0+eOoKolstCj8td
 =CSCk
 -----END PGP SIGNATURE-----
 

[lldb] Support comparing FileSpec against Python strings (#190690)

We got a bug report where someone was iterating over the modules and
wanted to verify that the module name was empty and noticed it didn't
trigger.

```
for module in target.module_iter():
  if module.file is None or module.file == "":
    # Do something
```

My initial hypothesis was that we were somehow skipping modules, but
upon further investigation, it was the string comparison that was the
culprit. The reporter (reasonably) expected the `file` property to
return a string, but in reality it returns a SBFileSpec.

This could be avoided by explicitly comparing with an empty FileSpec,
but that seems needlessly tedious.

```
for module in target.module_iter():
  if module.file is None or module.file == lldb.SBFileSpec(""):
    # Do something
```

Instead, add support for comparing a SBFileSpec against a string.

rdar://174166420