pike.git / src / operators.c

version» Context lines:

pike.git/src/operators.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: operators.c,v 1.235 2008/06/28 22:05:04 mast Exp $ + || $Id: operators.c,v 1.236 2008/07/08 13:34:53 grubba Exp $   */      #include "global.h"   #include <math.h>   #include "interpret.h"   #include "svalue.h"   #include "multiset.h"   #include "mapping.h"   #include "array.h"   #include "stralloc.h"
pike.git/src/operators.c:2247:    struct mapping *m;    m=merge_mappings(sp[-2].u.mapping, sp[-1].u.mapping,PIKE_ARRAY_OP_SUB);    pop_n_elems(2);    push_mapping(m);    return;    }       case T_MULTISET:    {    struct multiset *l; -  l=merge_multisets(sp[-2].u.multiset, sp[-1].u.multiset, PIKE_ARRAY_OP_SUB); +  if (sp[-2].u.multiset->refs == 1) { +  l=merge_multisets(sp[-2].u.multiset, sp[-1].u.multiset, +  PIKE_ARRAY_OP_SUB | PIKE_MERGE_DESTR_A); +  } else { +  l=merge_multisets(sp[-2].u.multiset, sp[-1].u.multiset, +  PIKE_ARRAY_OP_SUB); +  }    pop_n_elems(2);    push_multiset(l);    return;    }       case T_FLOAT:    sp--;    sp[-1].u.float_number -= sp[0].u.float_number;    return;   
pike.git/src/operators.c:2509:    struct mapping *m;    m=merge_mappings(sp[-2].u.mapping, sp[-1].u.mapping, PIKE_ARRAY_OP_AND);    pop_n_elems(2);    push_mapping(m);    return;    }       case T_MULTISET:    {    struct multiset *l; -  l=merge_multisets(sp[-2].u.multiset, sp[-1].u.multiset, PIKE_ARRAY_OP_AND); +  if (sp[-2].u.multiset->refs == 1) { +  l=merge_multisets(sp[-2].u.multiset, sp[-1].u.multiset, +  PIKE_ARRAY_OP_AND | PIKE_MERGE_DESTR_A); +  } else { +  l=merge_multisets(sp[-2].u.multiset, sp[-1].u.multiset, +  PIKE_ARRAY_OP_AND); +  }    pop_n_elems(2);    push_multiset(l);    return;    }       case T_ARRAY:    {    struct array *a;    a=and_arrays(sp[-2].u.array, sp[-1].u.array);    pop_n_elems(2);
pike.git/src/operators.c:2802:    struct mapping *m;    m=merge_mappings(sp[-2].u.mapping, sp[-1].u.mapping, PIKE_ARRAY_OP_OR);    pop_n_elems(2);    push_mapping(m);    return;    }       case T_MULTISET:    {    struct multiset *l; -  l=merge_multisets(sp[-2].u.multiset, sp[-1].u.multiset, PIKE_ARRAY_OP_OR_LEFT); +  if (sp[-2].u.multiset->refs == 1) { +  l=merge_multisets(sp[-2].u.multiset, sp[-1].u.multiset, +  PIKE_ARRAY_OP_OR_LEFT | PIKE_MERGE_DESTR_A); +  } else { +  l=merge_multisets(sp[-2].u.multiset, sp[-1].u.multiset, +  PIKE_ARRAY_OP_OR_LEFT); +  }    pop_n_elems(2);    push_multiset(l);    return;    }       case T_ARRAY:    {    struct array *a;    a=merge_array_with_order(sp[-2].u.array, sp[-1].u.array, PIKE_ARRAY_OP_OR_LEFT);    pop_n_elems(2);
pike.git/src/operators.c:3038:    struct mapping *m;    m=merge_mappings(sp[-2].u.mapping, sp[-1].u.mapping, PIKE_ARRAY_OP_XOR);    pop_n_elems(2);    push_mapping(m);    return;    }       case T_MULTISET:    {    struct multiset *l; -  l=merge_multisets(sp[-2].u.multiset, sp[-1].u.multiset, PIKE_ARRAY_OP_XOR); +  if (sp[-2].u.multiset->refs == 1) { +  l=merge_multisets(sp[-2].u.multiset, sp[-1].u.multiset, +  PIKE_ARRAY_OP_XOR | PIKE_MERGE_DESTR_A); +  } else { +  l=merge_multisets(sp[-2].u.multiset, sp[-1].u.multiset, +  PIKE_ARRAY_OP_XOR); +  }    pop_n_elems(2);    push_multiset(l);    return;    }       case T_ARRAY:    {    struct array *a;    a=merge_array_with_order(sp[-2].u.array, sp[-1].u.array, PIKE_ARRAY_OP_XOR);    pop_n_elems(2);