On Mon, 5 Jun 2023 20:27:42 GMT, Vladimir Ivanov <vliva...@openjdk.org> wrote:
>>> Why is it limited to non-product builds? It's valuable irrespective of >>> build flavor. >> >> This is because `print_on` in `AnyObj` is only defined in non-product >> builds. I based implementation of `ObjectMergeValue::print_on` on >> `ObjectValue::print_on`. In `ObjectValue::print_on` fields aren't printed in >> product builds. >> >>> Any particular reason for that? You could add is_object_merge case in >>> ObjectValue::print_oninstead and extendObjectValue::print_fields_onto >>> coverObjectMergeValue case. >> >> I'll do that then. >> >>> Also, formatting is broken. >> >> Can you please share an example? If you mean the tabs on lines >> 303/304/306/307 I added those because I thought would make the code easier >> to read, but if you want I can definitely remove that. > >> If you mean the tabs on lines 303/304/306/307 > > Yes, it confused me. As an alternative, you could put selector and > merge_pointer-related statements on the same line, but I'm not sure how much > it improves readability: > > st->print(", selector=""); _selector->print_on(st); st->print("""); A couple of suggestions about the output: * `merge`: it's clearer to call it `merge_obj` * `obj` vs `merge` output: obj output is duplicated in ScopeDesc entries and Objects sections; before it was a short version printed in Locals/Expressions and all the details were included in Objects; I like to see field locations in the short version, but including everything looks way too much IMO; * it makes sense to include selector and merge_pointer info in short version, but `is_root` can be omitted ------------- PR Review Comment: https://git.openjdk.org/jdk/pull/12897#discussion_r1218558295