Re: [GSoC][PATCH] {apply,alias}: convert pre-processor macros to enums

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



On Fri, 10 Feb 2023 at 16:15, Eric Sunshine <sunshine@xxxxxxxxxxxxxx> wrote:

Thanks a lot for replying!

> On Thu, Feb 9, 2023 at 12:00 PM Vinayak Dev <vinayakdev.sci@xxxxxxxxx> wrote:
> > {apply,alias}: convert pre-processor macros to enums
>
> Thanks for submitting a GSoC microproject. Let's take a look...
>
> > Groups related #define macros into enums in apply.c and alias.c .
>
> s/Groups/Group/

Thanks for pointing this out. I will keep note of removing the /s/ in
further patches.

>
> > The changed #define macros are related constants, so it makes sense to group them.
>
> They already have a common prefix and are grouped textually, so it's
> obvious to readers that they are related, thus this isn't necessarily
> a good selling point for such a change.
>
> > This also makes debugging easier, as modern debuggers can identify enum constants and list them accordingly.
>
> This is a much better selling point for why such a change would be
> desirable. Unfortunately, though, the real situation is more
> complicated. The stated argument is only true if these enum values are
> assigned to variables of the enum type. However, this patch only
> defines the new enumeration type but never actually uses it to declare
> variables, so the benefit for the debugger is never seen. For
> instance, this patch defines:
>
>   enum binary_type_deflated {
>     BINARY_DELTA_DEFLATED = 1,
>     BINARY_LITERAL_DEFLATED
>   };
>
> but then the code only ever assigns the enum value to an 'int' variable:
>
>   int patch_method;
>   ...
>   patch_method = BINARY_DELTA_DEFLATED;
>
> at which point the enum value's type is lost; it's an `int` and that's
> how the debugger sees it, just as an `int`, so the debugger
> can't/won't show it as an actual enum value.

This is something that I missed, but shouldn't have. I will change the
type of the
variable to enum and run the tests again, as you have mentioned.

>
> To fix this, the patch would need to change the variable declaration, as well:
>
>   enum binary_type_deflated enum binary_type_deflated;
>
> Finally, please wrap the commit message so it fits in 72 columns.

I am really sorry for this error, I was looking to be more descriptive
in the commit
message, but it does seem unnecessary to be this verbose.

>
> > Signed-off-by: Vinayak Dev <vinayakdev.sci@xxxxxxxxx>
> >
> > vinayakdsci (1):
> >   Change #define to enum in apply.c and alias.c
>
> There should be a "---" line just below your sign-off to tell git-am
> where the patch's commit message ends, but the "---" line is missing
> for some reason. If you didn't remove the "---" line manually, then
> you may need to adjust your patch-sending tool to not strip it out.
>

I will correct this error in further patches, it looks like I did
remove it erroneously.

> > diff --git a/alias.c b/alias.c
> > @@ -44,9 +44,15 @@ void list_aliases(struct string_list *list)
> > -#define SPLIT_CMDLINE_BAD_ENDING 1
> > -#define SPLIT_CMDLINE_UNCLOSED_QUOTE 2
> > -#define SPLIT_CMDLINE_ARGC_OVERFLOW 3
> > +/* #define SPLIT_CMDLINE_BAD_ENDING 1 */
> > +/* #define SPLIT_CMDLINE_UNCLOSED_QUOTE 2 */
> > +/* #define SPLIT_CMDLINE_ARGC_OVERFLOW 3 */
> > +enum split_cmdline_error {
> > +       SPLIT_CMDLINE_BAD_ENDING = 1,
> > +       SPLIT_CMDLINE_UNCLOSED_QUOTE,
> > +       SPLIT_CMDLINE_ARGC_OVERFLOW
> > +};
>
> Retaining the #define lines as comments serves no purpose once you
> have introduced the enum. It's confusing for readers, and there is a
> good chance that the commented-out #defines and enum values will drift
> out of sync over time.
>

I did not remove them in fear of making a mistake in the enum
fields(rookie mistake), but I should
have removed them, your point is absolutely valid.

> If we look at the code which utilizes these values, we see several
> instances like this:
>
>   return -SPLIT_CMDLINE_BAD_ENDING;
>
> which means that the value being returned from the function is not a
> valid enum value since it has been negated. Thus, in this case,
> converting the #defines to an enum makes the code less valid and less
> clear. Moreover, these constants are only used in `return` statements
> from the function, are always negated, and are always returned as the
> exit code of the program itself; they are never stored in variables.
> Thus, the debugger-related benefit mentioned in the commit message can
> never materialize.
>
> So, all in all, I'd say that this is one of those unfortunate cases in
> which conversion from #define to enum is unwanted since it makes the
> code less clear and less valid, and provides no benefit. If you reroll
> the patch, I'd suggest dropping these modifications to "alias.c".
>

OK, I will do so. These technical specifications related to changes in alias.c
are things that I did study about in C, but never actually saw them in
practice, so
I guess I just lowered my guard for such mistakes.

Further, I will change variable types from int to enum in apply.c, which,
as you correctly point out, are still integers.
I will amend these mistakes in further patches.

Thanks a lot!
Vinayak



[Index of Archives]     [Linux Kernel Development]     [Gcc Help]     [IETF Annouce]     [DCCP]     [Netdev]     [Networking]     [Security]     [V4L]     [Bugtraq]     [Yosemite]     [MIPS Linux]     [ARM Linux]     [Linux Security]     [Linux RAID]     [Linux SCSI]     [Fedora Users]

  Powered by Linux