pike.git / src / array.c

version» Context lines:

pike.git/src/array.c:12:   #include "interpret.h"   #include "language.h"   #include "error.h"   #include "pike_types.h"   #include "fsort.h"   #include "builtin_functions.h"   #include "pike_memory.h"   #include "gc.h"   #include "main.h"    - RCSID("$Id: array.c,v 1.31 1998/03/28 15:40:19 grubba Exp $"); + RCSID("$Id: array.c,v 1.32 1998/04/17 05:08:00 hubbe Exp $");      struct array empty_array=   {    1, /* Never free */    &empty_array, /* Next */    &empty_array, /* previous (circular) */    0, /* Size = 0 */    0, /* malloced Size = 0 */    0, /* no types */    0, /* no flags */
pike.git/src/array.c:39:    * NOTE: the new array have zero references    */      struct array *low_allocate_array(INT32 size,INT32 extra_space)   {    struct array *v;    INT32 e;       if(size == 0)    { -  empty_array.refs++; +  add_ref(&empty_array);    return &empty_array;    }       GC_ALLOC();       v=(struct array *)malloc(sizeof(struct array)+    (size+extra_space-1)*sizeof(struct svalue));    if(!v)    error("Couldn't allocate array, out of memory.\n");   
pike.git/src/array.c:106: Inside #if defined(DEBUG)
     #ifdef DEBUG    if(v == & empty_array)    fatal("Tried to free the empty_array.\n");   #endif      #ifdef DEBUG    if(d_flag > 1) array_check_type_field(v);   #endif    -  v->refs++; +  add_ref(v);    free_svalues(ITEM(v), v->size, v->type_field);    v->refs--;    array_free_no_free(v);   }      void do_free_array(struct array *a)   {    free_array(a);   }   
pike.git/src/array.c:140:   /*    * Extract an svalue from an array    */   void array_index(struct svalue *s,struct array *v,INT32 index)   {   #ifdef DEBUG    if(index<0 || index>=v->size)    fatal("Illegal index in low level index routine.\n");   #endif    -  v->refs++; +  add_ref(v);    assign_svalue(s, ITEM(v) + index);    free_array(v);   }      void simple_array_index_no_free(struct svalue *s,    struct array *a,struct svalue *ind)   {    INT32 i;    switch(ind->type)    {
pike.git/src/array.c:195:   /*    * Set an index in an array    */   void array_set_index(struct array *v,INT32 index, struct svalue *s)   {   #ifdef DEBUG    if(index<0 || index>v->size)    fatal("Illegal index in low level array set routine.\n");   #endif    -  v->refs++; +  add_ref(v);    check_destructed(s);       v->type_field = (v->type_field & ~BIT_UNFINISHED) | 1 << s->type;    assign_svalue( ITEM(v) + index, s);    free_array(v);   }         void simple_set_index(struct array *a,struct svalue *ind,struct svalue *s)   {
pike.git/src/array.c:430: Inside #if defined(DEBUG)
     #ifdef DEBUG    if(start > end || end>v->size || start<0)    fatal("Illegal arguments to slice_array()\n");       if(d_flag > 1) array_check_type_field(v);   #endif       if(start==0 && v->refs==1) /* Can we use the same array? */    { -  v->refs++; +  add_ref(v);    return array_shrink(v,end);    }       a=allocate_array_no_init(end-start,0);    a->type_field = v->type_field;       assign_svalues_no_free(ITEM(a), ITEM(v)+start, end-start, v->type_field);       return a;   }
pike.git/src/array.c:1136:    }   #endif    check_array_for_destruct(a);       if(a->type_field & b->type_field)    {    return merge_array_with_order(a, b, OP_SUB);    }else{    if(a->refs == 1)    { -  a->refs++; +  add_ref(a);    return a;    }    return slice_array(a,0,a->size);    }   }      /* and two arrays */   struct array *and_arrays(struct array *a, struct array *b)   {   #ifdef DEBUG
pike.git/src/array.c:1406:    if(d_flag > 1) array_check_type_field(a);   #endif       doing.next=p;    doing.pointer_a=(void *)a;    for(;p;p=p->next)    {    if(p->pointer_a == (void *)a)    {    ret=(struct array *)p->pointer_b; -  ret->refs++; +  add_ref(ret);    return ret;    }    }       ret=allocate_array_no_init(a->size,0);    doing.pointer_b=(void *)ret;       copy_svalues_recursively_no_free(ITEM(ret),ITEM(a),a->size,&doing);       ret->type_field=a->type_field;
pike.git/src/array.c:1561:      void gc_free_all_unreferenced_arrays(void)   {    struct array *a,*next;       a=&empty_array;    do    {    if(gc_do_free(a))    { -  a->refs++; +  add_ref(a);    free_svalues(ITEM(a), a->size, a->type_field);    a->size=0;       if(!(next=a->next))    fatal("Null pointer in array list.\n");       free_array(a);    a=next;    }else{    a=a->next;
pike.git/src/array.c:1618:   void zap_all_arrays(void)   {    struct array *a,*next;       a=&empty_array;    do    {      #if defined(DEBUG) && defined(DEBUG_MALLOC)    if(verbose_debug_exit && a!=&empty_array) -  debug_dump_array(a); +  describe(a);   #endif    -  a->refs++; +  add_ref(a);    free_svalues(ITEM(a), a->size, a->type_field);    a->size=0;       if(!(next=a->next))    fatal("Null pointer in array list.\n");       /* free_array(a); */    a=next;    } while (a != & empty_array);   }
pike.git/src/array.c:1655:    *size_=size;   }      struct array *explode_array(struct array *a, struct array *b)   {    INT32 e,d,q,start;    struct array *tmp;       q=start=0;    push_array(a); /* Save us from destructive slice_arrays */ -  a->refs++; +  add_ref(a);    if(b->size)    {    for(e=0;e<=a->size - b->size;e++)    {    for(d=0;d<b->size;d++)    {    if(!is_eq(ITEM(a)+(e+d),ITEM(b)+d))    break;    }    if(d==b->size)