pike.git / src / array.c

version» Context lines:

pike.git/src/array.c:1:   /*   || This file is part of Pike. For copyright information see COPYRIGHT.   || Pike is distributed under GPL, LGPL and MPL. See the file COPYING   || for more information. - || $Id: array.c,v 1.188 2006/03/04 19:38:23 nilsson Exp $ + || $Id: array.c,v 1.189 2006/04/02 17:07:45 grubba Exp $   */      #include "global.h"   #include "svalue.h"   #include "array.h"   #include "object.h"   #include "las.h"   #include "stralloc.h"   #include "interpret.h"   #include "opcodes.h"
pike.git/src/array.c:2282:    struct array *cycl;    TYPE_FIELD new_types = 0;    DECLARE_CYCLIC();       check_stack(args);    check_array_for_destruct(a);    for (e=0; e<args; e++)    hash = hash * 33 + (INT32)Pike_sp[-e-1].u.ptr;       if (!(cycl = (struct array *)BEGIN_CYCLIC(a, (ptrdiff_t)hash))) { +  ONERROR err;    aa = allocate_array(a->size); -  +  SET_ONERROR(err, do_free_array, aa);    for (e=0; e<a->size; e++)    {    assign_svalues_no_free(Pike_sp, argp, args, BIT_MIXED);    Pike_sp+=args;    /* FIXME: Don't throw apply errors from apply_svalue here. */    apply_svalue(ITEM(a)+e,args);    new_types |= 1 << Pike_sp[-1].type;    assign_svalue_no_free(ITEM(aa)+e, &Pike_sp[-1]);    pop_stack();    }    aa->type_field = new_types;   #ifdef PIKE_DEBUG    array_check_type_field(aa);   #endif    pop_n_elems(args); -  +  UNSET_ONERROR(err);    push_array(aa);    }    else {    pop_n_elems(args);    ref_push_array(cycl);    }       END_CYCLIC();   }