[PATCH] Make BLOCK_START and BLOCK_END into rvalues

Simon Marchi simark@simark.ca
Sat May 16 16:15:03 GMT 2020


On 2020-05-16 11:10 a.m., Tom Tromey wrote:
> This changes the BLOCK_START and BLOCK_END macros to expand to
> rvalues, and then updates some code to assign to these fields
> directly.
> 
> I considered adding setters here, but that seemed a bit needless,
> given that these are "open" structures.  However, I can do that if
> it's preferable.  Note that when the time comes to remove the
> BLOCK_START and BLOCK_END macros, I think they will be replaced with
> methods, because that will make it simpler to achieve objfile
> independence for blocks.

This is similar to what I'm doing to struct type, so it would be nice to agree
on the way forward for all these structures, and change them in a consistent
manner.

What I'm doing/considering for struct type is to add getters / setters for all
properties.  The fields themselves should really become private, but it's
probably not possible to do it right now, since the structures need to remain
POD.  I think we could still prefix them with `m_` while leaving them public,
doing so will make sure to catch any place that was accessing the field directly,
not using the macro.  And when writing new code, it will be semi-obvious by the
naming that you shouldn't access the field directly.

Also, the getter can't have the same name as the field, so in some cases that
would be another reason to rename the field.  Although in the case of this patch,
I would name the getters simply `start` and `end`, just like the macros are
named `..._START` and `..._END`, so there's no conflict (we could still rename
the fields to `m_start` and `m_end` for consistency).

Since you are changing the places that modify the field values, I'd suggest
adding the setter right away, it's a step in the right direction.

And I'd suggest adding the getter too, changing the BLOCK_START macro to use
it, it shouldn't be much more work.  And it will achieve the goal of making
the macro yield an rvalue.

If you want, I can look into removing the macros after that, like I do for
the type macros.

Simon


More information about the Gdb-patches mailing list