Merge pull request #3545 from citusdata/make-implicit-cell-harder

Make bad refactors to foreach_xxx error out
pull/3544/head
Philip Dubé 2020-02-27 13:16:59 +00:00 committed by GitHub
commit 99589de5f9
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
1 changed files with 14 additions and 11 deletions

View File

@ -27,8 +27,8 @@
* cell in. * cell in.
* *
* How it works: * How it works:
* - A ListCell is declared with the name {var}Cell and used throughout the * - A ListCell is declared with the name {var}CellDoNotUse and used
* for loop using ## to concat. * throughout the for loop using ## to concat.
* - To assign to var it needs to be done in the condition of the for loop, * - To assign to var it needs to be done in the condition of the for loop,
* because we cannot use the initializer since a ListCell* variable is * because we cannot use the initializer since a ListCell* variable is
* declared there. * declared there.
@ -36,9 +36,10 @@
* var is NULL. * var is NULL.
*/ */
#define foreach_ptr(var, l) \ #define foreach_ptr(var, l) \
for (ListCell *(var ## Cell) = list_head(l); \ for (ListCell *(var ## CellDoNotUse) = list_head(l); \
(var ## Cell) != NULL && (((var) = lfirst(var ## Cell)) || true); \ (var ## CellDoNotUse) != NULL && \
var ## Cell = lnext(var ## Cell)) (((var) = lfirst(var ## CellDoNotUse)) || true); \
var ## CellDoNotUse = lnext(var ## CellDoNotUse))
/* /*
@ -48,9 +49,10 @@
* For explanation of how it works see foreach_ptr. * For explanation of how it works see foreach_ptr.
*/ */
#define foreach_int(var, l) \ #define foreach_int(var, l) \
for (ListCell *(var ## Cell) = list_head(l); \ for (ListCell *(var ## CellDoNotUse) = list_head(l); \
(var ## Cell) != NULL && (((var) = lfirst_int(var ## Cell)) || true); \ (var ## CellDoNotUse) != NULL && \
var ## Cell = lnext(var ## Cell)) (((var) = lfirst_int(var ## CellDoNotUse)) || true); \
var ## CellDoNotUse = lnext(var ## CellDoNotUse))
/* /*
@ -60,9 +62,10 @@
* For explanation of how it works see foreach_ptr. * For explanation of how it works see foreach_ptr.
*/ */
#define foreach_oid(var, l) \ #define foreach_oid(var, l) \
for (ListCell *(var ## Cell) = list_head(l); \ for (ListCell *(var ## CellDoNotUse) = list_head(l); \
(var ## Cell) != NULL && (((var) = lfirst_oid(var ## Cell)) || true); \ (var ## CellDoNotUse) != NULL && \
var ## Cell = lnext(var ## Cell)) (((var) = lfirst_oid(var ## CellDoNotUse)) || true); \
var ## CellDoNotUse = lnext(var ## CellDoNotUse))
/* utility functions declaration shared within this module */ /* utility functions declaration shared within this module */