Re: Concatenating LazyStrings

"Luke Drummond" <[email protected]>
Newsgroups gmane.comp.gdb.devel
Message-ID <CFHUCMOS7Q40.3EPMGJ75KGPMY@lukedrummondpc>
Hi David

On Fri Nov 5, 2021 at 3:14 AM GMT, David Blaikie via Gdb wrote:
> If I've got a pretty printer (for instance, for llvm's Twine type (
> https://github.com/llvm/llvm-project/blob/6d03227c16ee1950db0e1aa05fbc3201770248eb/llvm/utils/gdb-scripts/prettyprinters.py#L354
> + https://llvm.org/doxygen/classllvm_1_1Twine.html ) that wants to
> pretty
> print a string made up of other strings (from other pretty printers) -
> how
> would I do that?
>
> Specifically, I can't figure out how to correctly concatenate a gdb
> LazyString value with another string. (even if I have to stringify the
> LazyString (making it unlazy) in the process - calling ".value()" on the
> LazyString doesn't seem to be enough - I can't seem to figure out how to
> to-string-ify that resulting gdb Value (it doesn't have a pretty printer
> that I can find - nor a to_string/str/string() function) to then
> concatenate it with another string)


`LazyString.value().format_string()` might be what you want. I've also found the
python builtin `str()` function to be usable in many places.

https://sourceware.org/gdb/onlinedocs/gdb/Values-From-Inferior.html#Values-From-Inferior

has the documentation if you haven't already seen it.

As an example, here's how I format an enumeration that's made up of bit-flags:

	def fmt_flags_enum(enum_type, val):
			val = int(val)
			return ' | '.join(
					gdb.Value((1 << x) & val).cast(enum_type).format_string()
					for x in range(val.bit_length())
					if (1 << x) & val
			)


The `format_string()` converts the individual enumerators into a string that
python can concatenate with `str.join`.

Hope that helps.

All the Best

Luke


-- 
Codeplay Software Ltd.
Company registered in England and Wales, number: 04567874
Registered office: Regent House, 316 Beulah Hill, London, SE19 3HF
lmpx.com only provides a reader for public news (NNTP) servers. It is not affiliated with the servers or forums shown here and is not responsible for the content of articles, which is written by their respective authors.