diff options
author | Tony Cook <tony@develop-help.com> | 2022-11-17 14:30:39 +1100 |
---|---|---|
committer | James E Keenan <jkeenan@cpan.org> | 2022-11-18 18:12:45 -0500 |
commit | 2e4090b82403991910f1fe64866048b62ccf5402 (patch) | |
tree | 8ca250b0bfb4e386128336ee73db71caba26c032 /hv.h | |
parent | a33534361e54c6342c59edd0c06b6bbb9ac5776c (diff) | |
download | perl-2e4090b82403991910f1fe64866048b62ccf5402.tar.gz |
only fully calculate the stash (effective) name where needed
gcc 12 was complaining that evaluating (somehekptr)->hek_key
was always true in many places where HvNAME() or HvENAME() was
being called in boolean context.
Add new macros to check whether the names should be available and
use those instead.
Diffstat (limited to 'hv.h')
-rw-r--r-- | hv.h | 20 |
1 files changed, 11 insertions, 9 deletions
@@ -328,9 +328,10 @@ whether it is valid to call C<HvAUX()>. /* This macro may go away without notice. */ #define HvNAME_HEK(hv) \ (HvHasAUX(hv) && HvAUX(hv)->xhv_name_u.xhvnameu_name ? HvNAME_HEK_NN(hv) : NULL) +#define HvHasNAME(hv) \ + (HvHasAUX(hv) && HvAUX(hv)->xhv_name_u.xhvnameu_name && HvNAME_HEK_NN(hv)) #define HvNAME_get(hv) \ - ((HvHasAUX(hv) && HvAUX(hv)->xhv_name_u.xhvnameu_name && HvNAME_HEK_NN(hv)) \ - ? HEK_KEY(HvNAME_HEK_NN(hv)) : NULL) + (HvHasNAME(hv) ? HEK_KEY(HvNAME_HEK_NN(hv)) : NULL) #define HvNAMELEN_get(hv) \ ((HvHasAUX(hv) && HvAUX(hv)->xhv_name_u.xhvnameu_name && HvNAME_HEK_NN(hv)) \ ? HEK_LEN(HvNAME_HEK_NN(hv)) : 0) @@ -344,17 +345,18 @@ whether it is valid to call C<HvAUX()>. HvAUX(hv)->xhv_name_count == -1 ? NULL : \ HvAUX(hv)->xhv_name_u.xhvnameu_name \ ) +#define HvHasENAME_HEK(hv) \ + (HvHasAUX(hv) && HvAUX(hv)->xhv_name_u.xhvnameu_name) #define HvENAME_HEK(hv) \ - (HvHasAUX(hv) && HvAUX(hv)->xhv_name_u.xhvnameu_name ? HvENAME_HEK_NN(hv) : NULL) + (HvHasENAME_HEK(hv) ? HvENAME_HEK_NN(hv) : NULL) +#define HvHasENAME(hv) \ + (HvHasENAME_HEK(hv) && HvAUX(hv)->xhv_name_count != -1) #define HvENAME_get(hv) \ - ((HvHasAUX(hv) && HvAUX(hv)->xhv_name_u.xhvnameu_name && HvAUX(hv)->xhv_name_count != -1) \ - ? HEK_KEY(HvENAME_HEK_NN(hv)) : NULL) + (HvHasENAME(hv) ? HEK_KEY(HvENAME_HEK_NN(hv)) : NULL) #define HvENAMELEN_get(hv) \ - ((HvHasAUX(hv) && HvAUX(hv)->xhv_name_u.xhvnameu_name && HvAUX(hv)->xhv_name_count != -1) \ - ? HEK_LEN(HvENAME_HEK_NN(hv)) : 0) + (HvHasENAME(hv) ? HEK_LEN(HvENAME_HEK_NN(hv)) : 0) #define HvENAMEUTF8(hv) \ - ((HvHasAUX(hv) && HvAUX(hv)->xhv_name_u.xhvnameu_name && HvAUX(hv)->xhv_name_count != -1) \ - ? HEK_UTF8(HvENAME_HEK_NN(hv)) : 0) + (HvHasENAME(hv) ? HEK_UTF8(HvENAME_HEK_NN(hv)) : 0) /* * HvKEYS gets the number of keys that actually exist(), and is provided |