pike.git / src / pike_macros.h

version» Context lines:

pike.git/src/pike_macros.h:53:    next=p->next; \    while(p->refs == 1 && (next=p->next)) \    { \    add_ref(next); \    free_item(p); \    p=next; \    } \    free_item(p); \   }while(0)    - #if __GNUC__ > 2 - /* FIXME: Add real test for this. -  -  It has been around since 1999 in gcc, but also exists in many other -  compilers. -  */ - #define UNLIKELY(X) __builtin_expect( (X), 0 ) - #else - #define UNLIKELY(X) X - #endif -  +    /* This variant never leaves p pointing at a deallocated block, as the    * one above can do. I.e. it frees a ref to the item p points at, and    * sets p to the same or next item with references, or sets it to    * zero. */   /* how can SET_NEXT_AND_FREE leave *next* pointing to a deallocated block?    * -Hubbe    */   /* Afaik it doesn't, but it leaves no value that is usable for the    * purposes this macro was made for. /mast */   #define FREE_AND_GET_REFERENCED(p, item_type, free_item) do { \