Пример #1
0
/*
// 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);
}
Пример #2
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);
}