/* // ScopeLeave // // Returns: // 0 - Success // -1 - Error */ int ScopeLeave( SOURCEFILE *ps, char *Name ) { SCOPE *psc; psc = ScopeFind(Name); if( !psc ) { Report(ps,REP_ERROR,"Scope name undefined"); return(-1); } if( !(psc->Flags&SCOPE_FLG_OPEN) ) { Report(ps,REP_ERROR,"Scope is not open"); return(-1); } ScopeClose(psc); return(0); }
/* // ScopeDestroy // // Frees a scope record. // // void */ static void ScopeDestroy(SCOPE *psc) { if (psc->Flags & SCOPE_FLG_OPEN) ScopeClose(psc); while (psc->pAssignList) AssignDestroy(&psc->pAssignList, psc->pAssignList); if (!psc->pPrev) pScopeList = psc->pNext; else psc->pPrev->pNext = psc->pNext; if (psc->pNext) psc->pNext->pPrev = psc->pPrev; free(psc); }