Re: Minor Comments on Gmake Internals
Paul Eggert <[email protected]> Sat, 18 Dec 2021 11:35:12 -0800
| Newsgroups | gmane.comp.gnu.make.devel |
|---|---|
| Organization | UCLA Computer Science Department |
| Message-ID | <[email protected]> |
On 12/17/21 20:22, Jon Forrest wrote: > 1) variable.c/free_variable_set() looks like it also frees the > variable_set_list in the variable_set passed as an argument. > Should it be modified to only free the variable_set? Another > function could then be created called free_variable_set_list() > which could itself call free_variable_set(). My take on this is a bit different: free_variable_set is poorly named and could be renamed to free_variable_set_list. There seems to be no need for a separate free_variable_set function. > 2) The comment at line 367 in variable.c says there are only two special > variables (e.g. .VARIABLES and .TARGETS). However, I see in main.c > around line 1319 where .VARIABLES is defined and made special, but the > line below it that does the same thing for .TARGETS is commented out. > Instead the variable .RECIPEPREFIX is defined and made special. > Shouldn't the comment in variable.c be fixed? Yes, it appears that .TARGETS is a circa 2002 idea that never got published. The source code and/or commentary mentions .TARGETS twelve times and perhaps these should all be looked at. > 3) There's a misplaced comment about popping the top set off the current > variable_set_list in variable.c on lines 666 and 667. It should be > before line 712. Good catch. Paul already covered (4). > 5) I've been programming in C since ~1977 but there is some code > in gmake of a style I've never seen before. For example Those examples look OK to me, except .... > o = variable_buffer_output (o, p, p1 != 0 ? (size_t) (p1 - p) : strlen > (p) + 1); I'd write just "p1 - p" rather than "(size_t) (p1 - p)" since I prefer to avoid unsigned types, for better runtime checking with gcc -fsanitize=undefined. > # define SIZE_MAX ((size_t)~(size_t)0) '((size_t) -1)' is technically more correct here, for the rare and now-obsolete platforms that use ones' complement or signed magnitude and that don't already define SIZE_MAX as required by C99. I doubt whether GNU Make supports these obsolete platforms anyway, for other reasons.