/* $Id: $ */

/* Copyright (C) 1997 Sverre Hvammen Johansen,
 * Department of Informatics, University of Oslo.
 *
 * This program is free software; you can redistribute it and/or modify
 * it under the terms of the GNU General Public License as published by
 * the Free Software Foundation; version 2.
 *
 * This program is distributed in the hope that it will be useful,
 * but WITHOUT ANY WARRANTY; without even the implied warranty of
 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
 * GNU General Public License for more details.
 *
 * You should have received a copy of the GNU General Public License
 * along with this program; if not, write to the Free Software
 * Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
 */

#include "cim.h"
#include "align.h"

/******************************************************************************
                                                     RutineOnlyArrays        */

/* Denne rutinen kalles fra __rep(p) og __rbe -- retur fra prosedyre og blokk.
 * Den sjekker om det p} toppen av poolen over blokk-instansen for den
 * terminerende prosedyre eller blokk kun ligger array-objekter.
 * Hvis det er tilfellet, m} disse v{re generert av denne prosedyren/blokken,
 * og de kan deallokeres.
 * Array objektene kan ikke v{re referert av andre 
 * (klasse objekter der arrayen er gitt som parameter)
 * fordi vi da ville funnet disse objektene p} poolen. 
 * Array objektene kan ha v{rt referert av andre prosedyrer,
 * men de har terminert og blitt deallokert.
 * Hvis den kun finner array-objekter returnerer rutinen TRUE eller FALSE. */

int __roa (__dhp x)
{
  if (x < __min)
    return (__FALSE);
  while (x < __fri && x->pp == (__pty) __ARRAY)
    x = (__dhp) ((char *) x + align (((__ahp) x)->size));
  return (x == __fri);
}

