chunk_t *chunk_get_prev(chunk_t *cur, nav_t nav) { if (cur == NULL) { return(NULL); } chunk_t *pc = g_cl.GetPrev(cur); if ((pc == NULL) || (nav == CNAV_ALL)) { return(pc); } if (cur->flags & PCF_IN_PREPROC) { /* If in a preproc, return NULL if trying to leave */ if ((pc->flags & PCF_IN_PREPROC) == 0) { return(NULL); } return(pc); } /* Not in a preproc, skip any preproc */ while ((pc != NULL) && (pc->flags & PCF_IN_PREPROC)) { pc = g_cl.GetPrev(pc); } return(pc); }
chunk_t *chunk_get_prev(chunk_t *cur, scope_e scope) { if (cur == nullptr) { return(nullptr); } chunk_t *pc = g_cl.GetPrev(cur); if (pc == nullptr || scope == scope_e::ALL) { return(pc); } if (cur->flags & PCF_IN_PREPROC) { // If in a preproc, return NULL if trying to leave if ((pc->flags & PCF_IN_PREPROC) == 0) { return(nullptr); } return(pc); } // Not in a preproc, skip any preproc while (pc != nullptr && (pc->flags & PCF_IN_PREPROC)) { pc = g_cl.GetPrev(pc); } return(pc); }